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 に設定されている構成済みの受信異常スコアを超えることはありません。この種のイベントは、1 回のページの読み込みで約 25 回ログに記録され、Apache2 が肥大化する可能性がありますerror_log
。
error_log
制限を超えた異常のみが記録されるように、送信される内容を制限する方法はありますか?
狙い
error_log
ここで達成したいことは 2 つあります。膨らんで余分なスペースを使わないように、できるだけきれいな状態を保ちたいのです。
また、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 ファイルを実際に編集するよりも通常は効果的です。