1.10.2. ModSecurity へのカスタムルールの追加
ModSecurity コアルールセット (CRS) に含まれるルールがシナリオに適合せず、追加の攻撃の可能性を防ぎたい場合は、カスタムルールを ModSecurity Web ベースアプリケーションファイアウォールで使用されるルールセットに追加できます。次の例は、単純なルールの追加を示しています。より複雑なルールを作成するには、ModSecurity Wiki Web サイトのリファレンスマニュアルを参照してください。
前提条件
- ModSecurity for Apache がインストールされ、有効になっている。
手順
任意のテキストエディターで
/etc/httpd/conf.d/mod_security.confファイルを開きます。以下はその例です。# vi /etc/httpd/conf.d/mod_security.confSecRuleEngine Onで始まる行の後に、次のサンプルルールを追加します。SecRule ARGS:data "@contains evil" "deny,status:403,msg:'param data contains evil data',id:1"前のルールでは、
dataパラメーターにevilの文字列が含まれている場合、ユーザーによるリソースの使用を禁止しています。- 変更を保存し、エディターを終了します。
httpdサーバーを再起動します。# systemctl restart httpd
検証
test.htmlページを作成します。# echo "mod_security test" > /var/www/html/test.htmlhttpdサーバーを再起動します。# systemctl restart httpdHTTP リクエストの
GET変数に悪意のあるデータが含まれないtest.htmlをリクエストします。$ curl http://localhost/test.html?data=good mod_security testHTTP リクエストの
GET変数に悪意のあるデータが含まれるtest.htmlをリクエストします。$ curl localhost/test.html?data=xxxevilxxx <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You do not have permission to access this resource.</p> </body></html>/var/log/httpd/error_logファイルを確認し、param data containing an evil dataメッセージでアクセスを拒否するログエントリーを見つけます。[Wed May 25 08:01:31.036297 2022] [:error] [pid 5839:tid 139874434791168] [client ::1:45658] [client ::1] ModSecurity: Access denied with code 403 (phase 2). String match "evil" at ARGS:data. [file "/etc/httpd/conf.d/mod_security.conf"] [line "4"] [id "1"] [msg "param data contains evil data"] [hostname "localhost"] [uri "/test.html"] [unique_id "Yo4amwIdsBG3yZqSzh2GuwAAAIY"]