跳至内容

Web 应用防火墙 (WAF)

尚未测试

此过程可能按原样工作。截至 2025 年 9 月 22 日,在 10 上进行测试尚不完整。如果您使用它并发现问题,请告知我们。

先决条件

  • 运行 Apache 的 Rocky Linux Web 服务器
  • 熟练使用命令行编辑器(此处以 vi 为例)
  • 对从命令行发出命令、查看日志和其他一般的系统管理员职责有很高的熟悉度
  • 理解安装此工具还需要监控操作并根据您的环境进行调整
  • root 用户运行所有命令,或使用 sudo 的普通用户

简介

mod_security 是一款开源的 Web 应用程序防火墙 (WAF)。它是加固 Apache Web 服务器设置的众多组件之一。您可以单独使用它,也可以与其他工具一起使用。

如果您想使用此工具和其他加固工具,请参阅 Apache 加固 Web 服务器指南。本文档还沿用了该原始文档中概述的所有假设和约定。建议您在继续之前先回顾一下。

从 Atomicorp 存储库安装 mod_security 时,缺少的一点是,安装的规则非常少。要获取更全面的免费 mod_security 规则包,本过程将使用 此处找到的 OWASP mod_security 规则。OWASP 代表开放 Web 应用程序安全项目。您可以在 此处了解更多关于 OWASP 的信息

技巧

如前所述,本过程使用 OWASP mod_security 规则。但不使用该站点提供的配置。该站点还提供了有关使用 mod_security 和其他安全相关工具的出色教程。您现在正在阅读的文档仅帮助您在 Rocky Linux Web 服务器上安装加固 mod_security 所需的工具和规则。Netnea 是一支专业技术团队,在其网站上提供安全课程。大部分内容免费提供,但他们也提供现场或团体培训的选项。

附加存储库

要安装 mod_security,您需要 Atomicorp 存储库 (atomic.repo)。使用此行执行此操作,并对所有默认选项回答“是”。

wget -q -O - https://www.atomicorp.com/installers/atomic | sh

运行 dnf upgrade 以读取所有更改。

安装 mod_security

要安装基本软件包,请使用此命令。它将安装所有缺失的依赖项。如果您尚未安装 wget,也需要安装它。

dnf install mod_security wget

安装 mod_security 规则

注意

仔细遵循此过程非常重要。Netnea 的配置已针对 Rocky Linux 进行了修改。

  1. 通过 访问其 GitHub 站点 来访问当前的 OWASP 规则。

  2. 在页面右侧,搜索“releases”并单击最新发行版的标签。

  3. 在下一页的“Assets”下,右键单击“Source Code (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 规则现已就位。

配置

规则就位后,下一步是配置这些规则,以便在 httpdmod_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://
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