关于安装 ModSecurity 并将其应用于 Apache 的备忘录(Ubuntu 24.04 LTS)

大家好,
我的大脑已经到了生命周期结束(EOL)阶段
我是系统解决方案部门的 Kawa,
这件事发生在不久前,但在六月份, 微型加固项目(Micro Hardening) ,这是一个专注于安全加固的团队竞赛 加固项目(Hardening Project) 我参加了
这次演习在淡路岛举行,虽然很艰苦,但天气很好,我们可以在大自然中工作,被大海和群山环绕,所以我们度过了一段非常充实的时光。
(日落很美)

这项练习每组持续45分钟(共6组),参与者需要保护一个电子商务网站免受攻击。如果网站宕机,系统还会计算服务水平协议(SLA)得分,最终各队将根据销售额和得分进行排名。
我们经常面临各种各样的攻击,但这一次我们的团队 SQL 注入的 尤其受到了
▼更多详情请参阅我公司Ikki的文章▼
在思考如何防止这种情况发生时,我决定尝试使用 ModSecurity,结果非常成功,帮助我获得了高分。
这次,如何安装 ModSecurity 以及如何实施其相关的 CRS 规则我将留下一份备忘录,说明
ModSecurity到底是什么?
(已经了解的人可以跳过这部分!)
ModSecurity 是OWASP 拥有的开源 Web 应用程序防火墙 (WAF) 引擎,可保护使用各种 CMS 提供的网站和其他内容免受攻击。
它与名为 CRS 规则的规则集(类似于定义文件)配合使用,并兼容 WordPress 和 Drupal 等主流 CMS 以及 Apache、Nginx 和 IIS 等中间件。安装后,只需少量配置即可使用,因此可以轻松部署到独立环境中。
然而,针对误报进行调整有些困难,因此可能需要一些时间才能在生产环境中实施和运行。
此外,在云 WAF(例如 AWS WAF 或 WAFCharm)部署在 WAF 前面的环境中,覆盖范围会重叠,因此引入它几乎没有任何好处。
环境
Ubuntu 24.04 LTS Apache/2.4.58
安装和初始设置
sudo apt update sudo apt install libapache2-mod-security2 sudo a2enmod security2 # 启用模块
以下是安装后的基本设置。系统
会创建一个示例配置文件,请重命名并进行一些编辑。
cd /etc/modsecurity/ sudo mv modsecurity.conf-recommended modsecurity.conf sudo nano /etc/modsecurity/modsecurity.conf SecRuleEngine DetectionOnly # 默认值为仅检测,因此启用它 ↓ SecRuleEngine On SecAuditLogParts ABIJDEFHZ # D 表示“中间响应头”,但它似乎是一个保留字,尚未实现 ↓ SecAuditLogParts ABCEFHJKZ # 删除 I,将 D 更改为 C(请求体) sudo systemctl restart apache2
初始设置现已完成。
接下来,我们将下载CRS规则。
下载规则集(v4.3.0)
* 本文撰写期间,4.4.0 版本已发布,但其他版本的操作步骤基本相同。请参考以下链接获取最新版本:
https://github.com/coreruleset/coreruleset/releases
从 GitHub 下载文件,解压缩,然后将其移动到 Apache 目录。
cd /tmp/ sudo wget -p /tmp/ https://github.com/coreruleset/coreruleset/archive/refs/tags/v4.3.0.tar.gz tar xvf v4.3.0.tar.gz sudo mkdir /etc/apache2/modsecurity-crs/ sudo mv coreruleset-4.3.0/ /etc/apache2/modsecurity-crs/ cd /etc/apache2/modsecurity-crs/coreruleset-4.3.0/ sudo mv crs-setup.conf.example crs-setup.conf
包含以识别核心规则集。
/etc/apache2/mods-enabled/security2.conf … # 如果已安装,则包含 OWASP ModSecurity CRS 规则 #IncludeOptional /usr/share/modsecurity-crs/*.load IncludeOptional /etc/apache2/modsecurity-crs/coreruleset-4.3.0/crs-setup.conf IncludeOptional /etc/apache2/modsecurity-crs/coreruleset-4.3.0/rules/*.conf … sudo apache2ctl -t # 语法检查可能会导致错误。 AH00526:/etc/apache2/modsecurity-crs/coreruleset-4.3.0/crs-setup.conf 文件第 818 行存在语法错误:ModSecurity:找到另一个具有相同 ID 的规则 /etc/apache2/modsecurity-crs/coreruleset-4.3.0/rules # → 错误发生在规则 REQUEST-922-MULTIPART-ATTACK.conf 中,因此请删除三个相关条目或重命名 922 以避免此问题。
关于后半部分的错误,似乎与 ModSecurity 版本有关。
正如这个已关闭的 issue(
https://github.com/coreruleset/coreruleset/issues/3129
,升级 ModSecurity 版本应该可以解决此问题,但由于它来自非官方仓库,因此本文不作赘述。
上线之前…….
如上所述,WAF、IPS 和终端安全产品可能会产生误报。
在部署之前并收集日志第一步是
对于 ModSecurity,检查 error.log 文件以了解检测到的内容,并考虑放宽任何已设置的排除规则或阈值。


概括
WAF(包括基于云的 WAF)很有用,但它们可能会影响实际环境,因此在投入生产之前需要进行调整。
虽然操作起来有点困难,但如果能够克服这个问题,即使在独立模式下运行也能加强安全性,因此如果再添加终端产品,就能形成多重防御,进一步提高鲁棒性。
完全的
10
