博客 | NGINX

Mod安全: 日志记录和调试

NGINX-F5-horiz-black-type-RGB 的一部分
Faisal Memon 缩略图
费萨尔·梅蒙
2017 年 10 月 22 日发布

ModSecurity 将帮助您晚上睡得更好,因为最重要的是,它解决了可见性问题:它可以让您看到您的网络流量。

– Ivan Ristić,ModSecurity 的创建者

 

当某些事情没有按照你预期的方式进行时,日志总是你首先要查看的地方。 好的日志可以提供有价值的见解,帮助您解决所面临的问题。 Ivan Ristić 最初创建 ModSecurity 的原因之一是他对自己使用的工具缺乏可见性感到沮丧。 因此,ModSecurity 拥有广泛的日志记录和调试功能也就不足为奇了。

ModSecurity 有两种类型的日志:

  • 审计日志。 对于每笔被阻止的交易,ModSecurity 都会提供有关该交易及其被阻止原因的详细日志。
  • 调试日志。 当打开时,此日志会保存有关 ModSecurity 所做的一切的详细信息。

审计日志不仅有助于了解单个攻击被阻止的原因,还有助于了解整体攻击模式。 您可能会惊讶于仅将端口 80 和/或 443 暴露到互联网上就会产生多少机器人和扫描仪流量。

在这篇博文中,我们将介绍使用 ModSecurity 进行日志记录和调试的基础知识。

审计日志

ModSecurity 中的主要日志是审计日志,它记录发生的所有攻击,包括潜在攻击。 如果您已按照我们的安装说明安装 ModSecurity(使用NGINX Open Source )或 NGINX ModSecurity WAF(使用NGINX Plus ),则默认情况下,ModSecurity 将记录所有触发警告或错误的交易,以及导致5xx4xx响应的所有交易,但以下情况除外: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 响应状态代码。 它是基于正则表达式的。 上述值将记录所有5xx4xx响应,但不包括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

在哪里

  • SecDebugLog——指定调试日志文件的路径。
  • SecDebugLogLevel –09指示要记录多少信息,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 内容。”