![mod_security:操作审计日志的意义是什么?](https://linux22.com/image/676059/mod_security%EF%BC%9A%E6%93%8D%E4%BD%9C%E5%AE%A1%E8%AE%A1%E6%97%A5%E5%BF%97%E7%9A%84%E6%84%8F%E4%B9%89%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我正在摆弄 mod_security 来记录特定 URI 的 POST 请求负载。
正如这个回复中所述https://serverfault.com/a/729079/292993对于类似的问题,mod_security 的 AuditEngine 的工作原理如下:
它还将根据您的 SecAuditEngine 值设置记录到 AuditEngine:
- 如果您将 SecAuditEngine 设置为 On,则所有内容都会记录到审计日志中,并且不需要上述规则。这会很快填满日志文件,因此不建议这样做。
- 如果您将 SecAuditEngine 设置为 RelevantOnly,则它只会将某些返回代码(由您的 SecAuditLogRelevantStatus 定义)记录到审计引擎。这通常只针对错误 (5xx) 或访问被拒绝 (4xx - 虽然通常没有 404) 执行。由于您没有拒绝访问(并且可能不想这样做!),因此这不会记录到审计日志中。
- 如果 SecAuditEngine 设置为关闭,那么它将永远不会被记录到审计日志中。
通常最好将 SecAuditEngine 设置为 RelevantOnly(我怀疑您已经这样做了)。正确的方法是使用 ctl 操作给出的其他规则:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass"
这会强制 AuditEngine 开启发布请求 - 即使请求成功(通常不会被记录)。
记住这一点,auditlog
如果我必须ctl
在请求级别打开 AuditEngine 以将某些内容记录到审计日志中,那么这个操作有什么意义呢?
答案1
我写了你引用的那个答案,在阅读你的问题后进行了一些测试,我意识到它并不准确。我会更新它。
经过一些实验,我发现了以下情况:
如果 SecAuditEngine 设置为在,那么 auditlog 将不会产生实际效果,因为无论如何请求都会被记录。
如果 SecAuditEngine 设置为离开,则 auditlog 将不起作用,因为无论如何都不会记录该请求。
如果 SecAuditEngine 设置为仅相关,则 auditlog 将导致规则的触发被记录。即使您不拒绝访问(这是您引用的上述答案中的错误)。
auditlog
那么和之间有什么区别ctl:auditEngine=On
?其实区别不大,但我能看到两个主要区别:
Auditlog
当 SecAuditEngine 设置为关闭时将不起作用。而ctl:auditEngine=On
将起作用。ctl:auditEngine=On
可用于开启审计而不显示实际规则。例如,如果您有以下内容:SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,nolog,pass"
然后请求将被记录在审计日志中,但不会提及规则 22222224(因为它被设置为
nolog
)。这可能有用也可能没用:规则 22222224 的存在可能会增加混乱,因为此规则没有实际的安全问题(它只是用于打开 AuditEngine),也许您只希望在审计和错误日志中记录真正的安全规则。另一方面,它可能会让人们感到困惑,为什么某些东西会出现在审计日志中,而没有明显的规则触发导致它被放在那里。
最终并没有太大的差异,更多的是一个您想使用哪一种的品味问题。