什么是 ModSecurity?
ModSecurity 是一个开源的 Web 应用程序防火墙 (WAF) 模块,适用于 Apache HTTP 服务器 (Apache) 和其他 Web 服务器。它通过监控和过滤客户端与 Web 应用程序之间的 HTTP 流量,提供额外的安全保障。ModSecurity 模块旨在保护 Web 应用程序免受各种类型的攻击,包括但不限于:
跨站点脚本 (XSS) 攻击: ModSecurity 可以检查并过滤 HTTP 请求和响应,以查找可能被注入网页并利用漏洞的恶意脚本或代码。SQL
注入攻击: ModSecurity 可以通过分析和验证 HTTP 请求的内容来检测并阻止执行未经授权的 SQL 查询的尝试。
远程文件包含 (RFI) 攻击: ModSecurity 可以阻止攻击者将远程文件包含到 Web 应用程序中,从而防止恶意代码的执行。
本地文件包含 (LFI) 攻击: ModSecurity 可以检测并阻止利用 Web 应用程序漏洞包含本地文件的尝试,这些尝试可能会暴露敏感的系统文件。
跨站点请求伪造 (CSRF) 攻击: ModSecurity 可以强制执行安全措施,以确保对 Web 应用程序发出的请求是合法的并且来自授权来源。
ModSecurity 使用基于规则的引擎,根据预定义的规则集分析和评估 HTTP 请求和响应。这些规则集定义了触发特定操作(例如阻止、记录或修改请求)的模式和条件。ModSecurity 支持自定义规则创建,允许管理员根据其特定需求定制安全策略。在本文中,您将学习如何安装 ModSecurity Apache 模块。
如何安装 ModSecurity Apache 模块
步骤1.安装ModSecurity
打开终端或通过 SSH 连接到您的 Ubuntu 20.04 服务器,并使用以下命令切换到 root 用户,以便您拥有后续操作的权限。然后,根据提示输入密码。
$ sudo -i

接下来,更新软件包存储库以确保您拥有最新的软件包信息。
$ apt update -y

使用以下命令下载并安装 ModSecurity Apache 模块,然后键入 y 并回车。
$ apt install libapache2-mod-security2

重新启动 Apache 服务
$ systemctl 重启 apache2

确保安装的软件版本至少为 2.9
$ apt-cache 显示 libapache2-mod-security2

步骤2.配置ModSecurity
将默认的 ModSecurity 配置文件复制到一个新文件。然后使用您喜欢的编辑器编辑该文件。在本例中,我们使用 nano 编辑器。
$ cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf $ nano /etc/modsecurity/modsecurity.conf

将 SecRuleEngine 的值从DetectionOnly更改为On。

然后,按 Ctrl + X 保存更改,然后按 y 并回车。接下来重新启动 Apache 服务。
$ systemctl 重启 apache2

下载 OWASP 核心规则集
OWASP 核心规则集 (CRS) 是一组旨在通过防御各种类型的攻击来增强 Web 应用程序安全性的规则。OWASP CRS 是一个由社区驱动的开源项目。它由安全专业人员和志愿者团队持续更新和维护,确保其与新出现的威胁和漏洞保持同步。下载 CRS,您可以受益于安全社区的集体知识和专业知识。
请定期更新 CRS 规则集,以便及时获取最新的安全增强功能和改进。为了确保您拥有最新的 ModSecurity 规则,您可以从开放 Web 应用程序安全项目 (OWASP) 的CoreRuleSet.org下载最新的 ModSecurity 核心规则集 (CRS) ,并根据需要替换 GitHub 链接。
$ wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.zip

根据提供的消息摘要验证下载文件的校验和,将“vFileName”替换为实际文件名(例如 v3.3.0.zip)。
$ sha1sum FileName.zip && echo ProvidedChecksum

然后,解压缩该文件。
$ unzip 文件名.zip

接下来,将 CRS 安装文件从新目录移动到您的 ModSecurity 目录中。
$ mv coreruleset-3.3.0/crs-setup.conf.example /etc/modsecurity/crs-setup.conf

您也可以选择将规则目录从新目录移动到您的 ModSecurity 目录。此步骤是可选的。
$ mv coreruleset-3.3.0/rules/ /etc/modsecurity/

之后,编辑 Apache security2.conf 文件,确保它能够加载 ModSecurity 规则。和往常一样,我们使用 nano 编辑器。
$ nano /etc/apache2/mods-enabled/security2.conf
在配置文件中,确保包含以下两行。如果没有,请将其添加到文件中。完成编辑后,保存文件。
包括可选的 /etc/modsecurity/*.conf 包括 /etc/modsecurity/rules/*.conf

重新启动 Apache 服务。
$ systemctl 重启 apache2

如果您无法重新启动 Apache,请返回 Apache security2.conf 文件并通过在行首添加 # 来注释掉此文件路径:# IncludeOptional /usr/share/modsecurity-crs/owasp-crs.load。
$ nano /etc/apache2/mods-enabled/security2.conf


现在,您应该能够重新启动 Apache 服务。
$ systemctl 重启 apache2



步骤3.测试ModSecurity配置
现在,我们可以创建一个测试阻止规则并检查是否会收到 403 错误和 ModSecurity 日志条目。
编辑默认 Apache 配置文件。如果您尚未更改默认 Apache 配置文件,则其名称应为 /etc/apache2/sites-available/000-default.conf。在本例中,我们将默认文件更改为 /etc/apache2/sites-available/mytestsite.com.conf。请将默认配置文件替换为您的默认配置文件。
$ nano /etc/apache2/sites-available/000-default.conf


在文件底部上方,添加以下自定义 ModSecurity 规则。您可以根据需要更改 ID 号和消息。
$ SecRuleEngine开启 SecRule ARGS:testparam "@contains test" "id:999,deny,status:403,msg:'测试成功'"


按 Ctrl + X,然后按 y 并回车保存更改。
重新启动 Apache 服务。
$ systemctl 重启 apache2


打开浏览器,访问你的服务器 IP 或该服务器上的域名,并在后面加上 ?testparam=test(例如 domain.com/?testparam=test)。在本例中,我们使用 mytestsite.com/?testparam=test。不出所料,我们收到了 403 禁止访问错误。


在 Apache 的 ModSecurity 错误日志中,您还可以使用错误消息(“测试成功”)或 ID 号(999)搜索此日志:
$ cat /var/log/apache2/error.log | grep '测试成功'


之后,您可以从配置文件中删除此测试规则。
结论
安装 ModSecurity Apache 模块是增强 Web 服务器安全性并保护 Web 应用程序免受常见攻击的重要一步。记得利用其强大的功能来检测和预防各种类型的 Web 漏洞。ModSecurity 模块及其丰富的规则集提供了额外的防御层,让您安心无虞,并帮助您满足安全要求。请务必定期更新规则集并微调配置,以确保在不影响合法流量的情况下提供最佳保护。