特定の Web サイトの POST ペイロードを検査する必要があります (サーバーはかなりビジー状態なので、サーバー全体の POST ログ記録はオンにしません)。
サーバーは LiteSpeed 5.0.7 です。SecRequestBodyAccess は「オン」に設定されています。
まず、ルールのチェーンを試しました。最初のルールはフェーズ 1 で、目的のホストのリクエストのみに一致しますが、ポスト ペイロードはフェーズ 2 にあり、2 つの異なるフェーズでチェーンを作成することはできないと思います。
次にこれを使用しようとしました:
<VirtualHost xxxxx>
SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223
</VirtualHost>
しかし、 には何も記録されていませんmodsec_audit.log
。
何か間違ったことをしているのでしょうか、それとも LiteSpeed と ModSec の互換性に関係しているのでしょうか?
最終的に、すべてのリクエストの POST を記録するために次のルールも試しました。
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass".
リクエストはログに記録されますが、リクエスト本体 ( -C-- group si missing in modsec audit
) はログに記録されません。
答え1
この質問に類似:mod_security ですべての POST データをログに記録するにはどうすればよいですか?
2 つの異なるフェーズで 2 つのルールを連鎖させることはできないというのは正しいのですが、フェーズ 2 はフェーズ 1 のすべての情報にアクセスできるため、この方法で実行したい場合は、これをフェーズ 2 に移動するだけです。
あなたが与えたこのルール:
SecRule REQUEST_METHOD "POST" "phase:2,log,id:22222223
あまり意味がありません。これにより、POST 要求が受信されたが POST 本文がないことが (メイン ログに) 記録されます。
また、AuditEngineにログを記録します。セキュリティ監査エンジン値は次のように設定されます:
- SecAuditEngine を On に設定すると、すべてが監査ログに記録され、上記のルールは必要ありません。これにより、ログ ファイルがすぐにいっぱいになるため、推奨されません。
- SecAuditEngine を RelevantOnly に設定している場合は、ここにもログが記録されます。
- SecAuditEngine が Off に設定されている場合、監査ログには記録されません。
通常は、SecAuditEngine を RelevantOnly に設定するのが最適です (すでに設定されていると思われます)。ただし、そのように設定されていない場合は、本文が AuditLog に記録されない可能性があります。
おそらく、それを実行するより良い方法は、あなたが与えた他のルールを使用することです制御アクション:
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,log,pass"
これにより、AuditLog が Off に設定されている場合でも、POST リクエストに対して AuditEngine が強制的にオンになります。また、このルールを実行して有効にしたことを記録しますが、これは実際には必要でも有用でもありません。そのため、「log」を「nolog」に変更します。リクエストは引き続き記録されます (auditEngine が yes に設定されているため) が、その変更を行うこのルールは記録されません。ちなみに、ctl を使用する場合、これはこのリクエストにのみ影響するため、AuditEngine は次のリクエストのためにリセットされます。
あなたが述べているように、Cの部分を除いては動作するようです。これは次のように設定されています。監査ログパーツデフォルトでは C 部分が含まれるので、デフォルトを変更したということでしょうか? 何か理由があったのでしょうか?
とにかく、C 部分を含めるように設定することもできます。
SecAuditLogParts ABCFHZ
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,nolog,pass"
または、このルールが発動したときに C 部分のみをログに記録したい場合は、ルールの一部として次のように実行できます。
SecRule REQUEST_METHOD "POST" "id:22222224,phase:2,ctl:auditEngine=On,ctl:auditLogParts=ABCFHZ,nolog,pass"
他に注意すべき点は、POST リクエストによって機密データ (パスワード、クレジットカード番号、社会保障番号など) が記録される可能性があることです。これらを記録することは推奨されておらず、会社のポリシーや従っている標準 (PCI コンプライアンスなど) に違反する可能性もあります。したがって、このデータをマスクするためのサニタイズ ルールを設定することをお勧めします。詳細については、こちらを参照してください。https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#sanitiseArg
答え2
次の点を確認してください。
持っている
SecRequestBodyAccess On
「log」の代わりに「auditlog」を使用してみてください
SecAuditLogPartsをカスタム定義している場合は、リクエスト本文が含まれていることを確認してください。