“ ModSecurity 将帮助您晚上睡得更好,因为最重要的是,它解决了可见性问题:它可以让您看到您的网络流量。 ”
当某些事情没有按照你预期的方式进行时,日志总是你首先要查看的地方。 好的日志可以提供有价值的见解,帮助您解决所面临的问题。 Ivan Ristić 最初创建 ModSecurity 的原因之一是他对自己使用的工具缺乏可见性感到沮丧。 因此,ModSecurity 拥有广泛的日志记录和调试功能也就不足为奇了。
ModSecurity 有两种类型的日志:
审计日志不仅有助于了解单个攻击被阻止的原因,还有助于了解整体攻击模式。 您可能会惊讶于仅将端口 80 和/或 443 暴露到互联网上就会产生多少机器人和扫描仪流量。
在这篇博文中,我们将介绍使用 ModSecurity 进行日志记录和调试的基础知识。
ModSecurity 中的主要日志是审计日志,它记录发生的所有攻击,包括潜在攻击。 如果您已按照我们的安装说明安装 ModSecurity(使用NGINX Open Source )或 NGINX ModSecurity WAF(使用NGINX Plus ),则默认情况下,ModSecurity 将记录所有触发警告或错误的交易,以及导致5xx
和4xx
响应的所有交易,但以下情况除外:404
。 (仅适用于 Ubuntu 16.04 系统,审计日志位于/var/log/modsec_audit.log 。)
ModSecurity 审计日志被分成几个部分。 这使得扫描日志并找到所需信息变得更加容易。 下表概述了每个部分包含的内容:
部分 | 描述 |
---|---|
一个 | 审计日志标头(必需) |
乙 | 请求标头 |
碳 | 请求正文Request body |
德 | 预订的 |
埃 | 响应正文 |
F | 响应标头 |
格 | 预订的 |
赫 | 审计日志尾部,包含附加数据 |
我 | 紧凑请求主体替代方案(C 部分),不包括文件 |
J | 上传文件的信息 |
钾 | 包含与交易匹配的所有规则的列表 |
是 | 最终边界(强制性) |
触发审计日志条目的每笔交易都会记录上述部分中的部分或全部。 您可以配置要记录的部分。
ModSecurity 审计日志条目示例可能如下所示:
---ICmPEb5c---A--[04/Oct/2017:21:45:15 +0000] 150715351558.929952 141.212.122.16 64384 141.212.122.16 80
---ICmPEb5c---B--
GET / HTTP/1.1
主机: 54.183.57.254
用户代理: Mozilla/5.0 zgrab/0.x
Accept-Encoding: gzip
---ICmPEb5c---D--
---ICmPEb5c---F--
HTTP/1.1 200
服务器:nginx/1.13.4
日期: 2017 年 10 月 4 日星期三 21:45:15 GMT
内容类型:text/html
连接:keep-alive
---ICmPEb5c---H--
ModSecurity: 警告。 匹配“带有参数“^[d.:]+$”的运算符“Rx”与变量“REQUEST_HEADERS:Host”(值:“54.183.57.254”) [文件“/root/owasp
-v3/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf”] [行“733”] [id“920350”] [rev“2”] [msg“主机标头是数字 IP 地址”] [数据“54.183.57.254”] [s
everity“4”] [ver“OWASP_CRS/3.0.0”] [maturity“9”] [accuracy“9”] [tag“应用-multi”] [tag“language-multi”] [tag“platform-multi”] [tag“attack-prot
ocol”] [tag “OWASP_CRS/PROTOCOL_VIOLATION/IP_HOST”] [标签“WASCTC/WASC-21”] [标签“OWASP_TOP_10/A7”] [标签“PCI/6.5.10”] [ref“o0,13v21,13”]
---ICmPEb5c---I--
---ICmPEb5c---J--
---ICmPEb5c---Z--
虽然从上表中不能立即看出,但查找有关特定请求被阻止的原因的最佳部分是 H 部分,而不是 K 部分。从上面的审计日志示例中,如果我们扫描 H 部分,我们可以看到消息“主机头是一个数字 IP 地址”
这表示有人试图通过 IP 地址而不是主机名访问我们的网站。 这可能表明存在扫描仪。
如果您按照我们的说明安装和配置 ModSecurity,您将在/etc/nginx/modsec/modsecurity.conf中找到审计日志配置。 在该文件中,您将看到以下三个指令,它们控制放入审计日志的内容:
SecAuditEngine RelevantOnlySecAuditLogRelevantStatus "^(?:5|4(?!04))"
SecAuditLogParts ABIJDEFHZ
在哪里
SecAuditEngine—
控制应该记录的内容。 选项包括:
关闭
– 禁用审计日志。开启
– 记录所有交易,这在调试时很有用。RelevantOnly
– 仅记录触发警告/错误或状态代码与SecAuditLogRelevantStatus
指令中的内容匹配的交易。SecAuditLogRelevantStatus
–如果 SecAuditEngine
设置为RelevantOnly
,则此指令控制应记录哪些 HTTP 响应状态代码。 它是基于正则表达式的。 上述值将记录所有5xx
和4xx
响应,但不包括404
秒。
SecAuditLogParts—
控制访问日志中应包含哪些部分。 删除您不感兴趣的部分会减少审计日志的大小并使其更易于扫描。
有关其他审计日志配置指令,请参阅ModSecurity wiki 。
当调试日志打开时,它会提供有关 ModSecurity 所做的一切的大量信息。 要解决某些事情未按预期进行的问题,调试日志是您的首选资源。 如果您刚开始使用 ModSecurity 并且想观察它为什么以某种方式执行操作,那么它也非常有用。
调试日志如下所示。 它包含有关 ModSecurity 对所有交易采取的行动的大量详细信息:
[4](规则: 1234) 针对 ARGS:testparam 执行带有参数“test”的运算符“Contains”。[9] 目标值:“test”(变量: ARGS:testparam)
[9] 匹配的变量已更新。
[4] 正在运行 [独立](非破坏性)操作:log
[9] 将事务保存到日志
[4] 规则返回 1。
[9] (SecDefaultAction) 正在运行操作:log
[9] 将事务保存到日志
[9] (SecDefaultAction) 正在运行操作:auditlog
[4] (SecDefaultAction) 忽略操作:pass(规则包含破坏性操作)
[4] 正在运行(非破坏性)操作:auditlog
[4] 正在运行(破坏性)操作:deny
调试日志列出了规则ID号,以方便搜索。 在此示例中,输出来自我们的 ID 号为 1234 的测试规则。
默认情况下,调试日志是禁用的,因为它会对性能产生负面影响。 与审计日志一样,调试日志在/etc/nginx/modsec/modsecurity.conf中配置。 在该文件中,有两个配置指令被注释掉了。 要启用调试日志记录,请取消注释它们并将其更改为以下内容:
SecDebugLog /var/log/modsec_debug.logSecDebugLogLevel 9
在哪里
0
–9
指示要记录多少信息,9
是最多。 如果您正在排除故障,请将此值设置为9
是最有帮助的。在这篇博文中,我们介绍了如何开始使用 ModSecurity 中的广泛日志记录功能。 ModSecurity 具有审计日志(其中包含有关所有被阻止交易的信息)和调试日志,以便在您在使用 ModSecurity 时遇到问题时进一步为您提供帮助。
ModSecurity 3.0 适用于 NGINX 开源版以及适用于 NGINX Plus 的NGINX ModSecurity WAF 。 NGINX ModSecurity WAF 是一个预编译的动态模块,由 NGINX, Inc. 维护并全力支持。 免费试用 30 天。
[编辑– NGINX ModSecurity WAF 于2022 年 4 月 1 日正式停止销售,并将于2024 年 3 月 31 日停止使用。 有关更多详细信息,请参阅我们博客上的“F5 NGINX ModSecurity WAF 正在过渡到终止使用<.htmla>”。]
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”