基于 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。
通过 访问他们的 GitHub 网站 来访问当前的 OWASP 规则。
在页面右侧,搜索发行版,然后单击最新发行版的标签。
在下一页的“资产”下,右键单击“源代码 (tar.gz)”链接并复制链接。
在您的服务器上,转到 Apache 配置目录
cd /etc/httpd/conf
输入 `wget` 并粘贴您的链接。例如
wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.5.tar.gz
解压缩文件
tar xzvf v3.3.5.tar.gz
这将创建一个目录,该目录的名称包含发行版信息。例如:“coreruleset-3.3.5”
创建一个名为“crs”的符号链接,链接到发行版目录。例如
ln -s coreruleset-3.3.5/ /etc/httpd/conf/crs
删除 `tar.gz` 文件。例如
rm -f v3.3.5.tar.gz
复制临时配置,以便在启动时加载
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