Red Hat Training

A Red Hat training course is available for RHEL 8

1.11.2. ModSecurity へのカスタムルールの追加

ModSecurity コアルールセット (CRS) に含まれるルールがシナリオに適合せず、追加の攻撃の可能性を防ぎたい場合は、カスタムルールを ModSecurity Web ベースアプリケーションファイアウォールで使用されるルールセットに追加できます。次の例は、単純なルールの追加を示しています。より複雑なルールを作成するには、ModSecurity Wiki Web サイトのリファレンスマニュアルを参照してください。

前提条件

  • ModSecurity for Apache がインストールされ、有効になっている。

手順

  1. 任意のテキストエディターで /etc/httpd/conf.d/mod_security.conf ファイルを開きます。以下はその例です。

    # vi /etc/httpd/conf.d/mod_security.conf
  2. SecRuleEngine On で始まる行の後に、次のサンプルルールを追加します。

    SecRule ARGS:data "@contains evil" "deny,status:403,msg:'param data contains evil data',id:1"

    前のルールでは、data パラメーターに evil の文字列が含まれている場合、ユーザーによるリソースの使用を禁止しています。

  3. 変更を保存し、エディターを終了します。
  4. httpd サーバーを再起動します。

    # systemctl restart httpd

検証

  1. test.html ページを作成します。

    # echo "mod_security test" > /var/www/html/test.html
  2. httpd サーバーを再起動します。

    # systemctl restart httpd
  3. HTTP リクエストの GET 変数に悪意のあるデータが含まれない test.html をリクエストします。

    $ curl http://localhost/test.html?data=good
    
    mod_security test
  4. HTTP リクエストの 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 don't have permission to access this resource.</p>
    </body></html>
  5. /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"]

関連情報