跳至内容

基于 Web 的应用防火墙 (WAF)

先决条件

  • 运行 Apache 的 Rocky Linux Web 服务器
  • 熟练使用命令行编辑器(本示例中使用 *vi*)
  • 对从命令行发出命令、查看日志和其他常规系统管理员职责感到非常舒适
  • 了解安装此工具还需要监控操作并根据您的环境进行调整
  • root 用户运行所有命令,或具有 `sudo` 权限的普通用户

介绍

`mod_security` 是一个开源的基于 Web 的应用防火墙 (WAF)。它只是硬化的 Apache Web 服务器设置中可能的一种组件。可以与其他工具一起使用,也可以单独使用。

如果您想使用此工具和其他硬化工具,请参考 Apache 硬化 Web 服务器指南。本文档也使用该原始文档中概述的所有假设和约定。在继续之前,最好回顾一下。

从通用 Rocky Linux 存储库安装的 `mod_security` 缺少的一点是,安装的规则很少。要获得更广泛的免费 `mod_security` 规则包,此过程使用 此处找到的 OWASP `mod_security` 规则。OWASP 代表开放式 Web 应用程序安全项目。您可以 在此处了解有关 OWASP 的更多信息

提示

如上所述,此过程使用 OWASP `mod_security` 规则。未使用该网站提供的配置。该网站还提供了有关使用 `mod_security` 和其他安全相关工具的出色教程。您现在正在浏览的文档仅帮助您安装硬化 Rocky Linux Web 服务器上 `mod_security` 所需的工具和规则。Netnea 是一个由技术专业人员组成的团队,他们在其网站上提供安全课程。这些内容中有许多是免费提供的,但他们 *确实* 提供了内部或团体培训的选项。

安装 `mod_security`

要安装基本包,请使用此命令。它将安装任何缺失的依赖项。如果您没有安装 `wget`,您还需要安装它

dnf install mod_security wget

安装 `mod_security` 规则

注意

仔细遵循此过程非常重要。Netnea 的配置已更改以适应 Rocky Linux。

  1. 通过 访问他们的 GitHub 网站 来访问当前的 OWASP 规则。

  2. 在页面右侧,搜索发行版,然后单击最新发行版的标签。

  3. 在下一页的“资产”下,右键单击“源代码 (tar.gz)”链接并复制链接。

  4. 在您的服务器上,转到 Apache 配置目录

    cd /etc/httpd/conf
    
  5. 输入 `wget` 并粘贴您的链接。例如

    wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.5.tar.gz
    
  6. 解压缩文件

    tar xzvf v3.3.5.tar.gz
    

    这将创建一个目录,该目录的名称包含发行版信息。例如:“coreruleset-3.3.5”

  7. 创建一个名为“crs”的符号链接,链接到发行版目录。例如

    ln -s coreruleset-3.3.5/ /etc/httpd/conf/crs
    
  8. 删除 `tar.gz` 文件。例如

    rm -f v3.3.5.tar.gz
    
  9. 复制临时配置,以便在启动时加载

    cp crs/crs-setup.conf.example crs/crs-setup.conf
    

    此文件是可编辑的,但您可能不需要进行任何更改。

`mod_security` 规则现在已到位。

配置

规则到位后,下一步是配置这些规则,以便在 `httpd` 和 `mod_security` 运行时加载并运行。

`mod_security` 已经有一个配置文件,位于 ` /etc/httpd/conf.d/mod_security.conf` 中。您需要修改此文件以包含 OWASP 规则。为此,请编辑该配置文件

vi /etc/httpd/conf.d/mod_security.conf

在结束标签(`</IfModule`)之前添加以下内容

    Include    /etc/httpd/conf/crs/crs-setup.conf

    SecAction "id:900110,phase:1,pass,nolog,\
        setvar:tx.inbound_anomaly_score_threshold=10000,\
        setvar:tx.outbound_anomaly_score_threshold=10000"

    SecAction "id:900000,phase:1,pass,nolog,\
         setvar:tx.paranoia_level=1"


    # === ModSec Core Rule Set: Runtime Exclusion Rules (ids: 10000-49999)

    # ...


    # === ModSecurity Core Rule Set Inclusion

    Include    /etc/httpd/conf/crs/rules/*.conf


    # === ModSec Core Rule Set: Startup Time Rules Exclusions

    # ...

使用 Esc 退出插入模式,然后使用 Shift+:+wq 保存更改并退出。

重新启动 `httpd` 并验证 `mod_security`

此时您只需重新启动 `httpd` 即可

systemctl restart httpd

验证服务是否按预期启动

systemctl status httpd

/var/log/httpd/error_log中类似这样的条目将显示mod_security正在正确加载

[Thu Jun 08 20:31:50.259935 2023] [:notice] [pid 1971:tid 1971] ModSecurity: PCRE compiled version="8.44 "; loaded version="8.44 2020-02-12"
[Thu Jun 08 20:31:50.259936 2023] [:notice] [pid 1971:tid 1971] ModSecurity: LUA compiled version="Lua 5.4"
[Thu Jun 08 20:31:50.259937 2023] [:notice] [pid 1971:tid 1971] ModSecurity: YAJL compiled version="2.1.0"
[Thu Jun 08 20:31:50.259939 2023] [:notice] [pid 1971:tid 1971] ModSecurity: LIBXML compiled version="2.9.13"

如果您访问服务器上的网站,您应该在/var/log/httpd/modsec_audit.log中收到一个条目,显示 OWASP 规则的加载

Apache-Handler: proxy:unix:/run/php-fpm/www.sock|fcgi://localhost
Stopwatch: 1686249687051191 2023 (- - -)
Stopwatch2: 1686249687051191 2023; combined=697, p1=145, p2=458, p3=14, p4=45, p5=35, sr=22, sw=0, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.9.6 (http://www.modsecurity.org/); OWASP_CRS/3.3.4.
Server: Apache/2.4.53 (Rocky Linux)
Engine-Mode: "ENABLED"

结论

mod_security与 OWASP 规则是帮助加强 Apache Web 服务器的另一个工具。定期检查GitHub 网站上的更新规则和最新的官方版本是您需要进行的持续维护步骤。

mod_security与其他加固工具一样,存在误报的可能性,因此您必须准备调整此工具以适合您的安装。

Apache 加固 Web 服务器指南中提到的其他解决方案一样,还有其他免费和付费的mod_security规则解决方案,以及其他 WAF 应用程序。您可以在Atomicorp 的mod_security网站上查看其中一个。

作者:Steven Spencer

贡献者:Ezequiel Bruni、Ganna Zhyrnova