我已經安裝了 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 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 檔案更好,以使將來的升級更容易。