我已经安装了 mod_security,并且当前正在DetectionOnly
以监控日志和配置模式运行,以满足我的服务器的需要。
我已经将其设置为异常评分,并相应地调整了我的分数以减少误报。
在 Apache2 中,error_log
我收到如下日志事件:
[Fri May 01 14:48:48 2015] [error] [client 81.138.5.14] ModSecurity: Warning. Operator LT matched 20 at TX:inbound_anomaly_score. [file "/etc/apache2/modsecurity-crs/activated_rules/modsecurity_crs_60_correlation.conf"] [line "33"] [id "981203"] [msg "Inbound Anomaly Score (Total Inbound Score: 13, SQLi=11, XSS=): Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded"] [hostname "www.domain.co.uk"] [uri "/wp-admin/admin-ajax.php"] [unique_id "VUOEQNRurOYAABA-HZEAAAAA"]
这些事件没有超过我配置的入站异常分数(当前设置为 20)。我可以在一次页面加载中记录大约 25 次此类事件,从而导致我的 Apache2 膨胀error_log
。
有没有办法限制发送的内容,error_log
以便只记录超出我的限制的异常?
目的
我在这里试图实现两个目标。我希望error_log
尽可能保持清洁,这样它就不会膨胀并占用过多的空间。
我还希望能够查看和监控这些日志,以便继续进行 mod_security 的配置。理想情况下,它只会显示超出异常限制的事件,这样我就可以知道它们是否是误报。
谢谢。
答案1
规则如下:
SecRule TX:INBOUND_ANOMALY_SCORE "@gt 0" \
"chain,phase:5,id:'981203',t:none,log,noauditlog,pass,skipAfter:END_CORRELATION,msg:'Inbound Anomaly Score (Total Inbound Score: %{TX.INBOUND_ANOMALY_SCORE}, SQLi=%{TX.SQL_INJECTION_SCORE}, XSS=%{TX.XSS_SCORE}): %{tx.inbound_tx_msg}'"
SecRule TX:INBOUND_ANOMALY_SCORE "@lt %{tx.inbound_anomaly_score_level}"
基本上就是说如果分数高于 0 但低于 tx.inbound_anomaly_score_level,则记录它。大概是为了让您可以查看触发但不足以阻止的规则。
如果此规则对您来说不是很有用,那么最好将其完全删除,这样您就不会浪费时间测试是否运行它:
SecRuleRemoveById 981203
请注意,必须在定义规则之后指定此内容。
通过这种方式删除规则通常比实际编辑 CRS 文件更好,从而使将来的升级更容易。