#author("2025-10-25T19:55:00+09:00","default:k1rou","k1rou")
#author("2025-11-06T11:44:46+09:00","default:k1rou","k1rou")
*ModSecurity [#ca781adf]
-[[OSS]]の[[WAF]]
-ホスト型[[WAF]]
-https://modsecurity.org/

**バージョン [#qccff2ac]
-V2
--Apacheをサポート
--[[Apache]]をサポート

-V3
--libModSecurity
--Nginx のConnectorモジュールがサポート(2021時点)

*CRS [#b15cf7ac]
-Core Rule Set
-攻撃の検知に使うシグネチャ

**OWASP CRS [#k01eaf33]
-https://owasp.org/www-project-modsecurity-core-rule-set/

*Apache [#i57d2430]
-mod_security
-mod_security_crs
-mod_security-mlogc


*設定ファイル(RHEL系) [#k9d67fbe]
**mod_security.conf [#x592e317]
***基本設定 [#q856f423]
-SecRuleEngine ※ルールエンジンの動作設定
 SecRuleEngine On ※有効(遮断・ログの記録)
 SecRuleEngine Off ※無効(マッチング処理停止)
 SecRuleEngine DetectionOnly ※有効(ログの記録のみ)

-SecDataDir ※データの保存場所
 SecDataDir /var/log/httpd/mod_security

***検査設定 [#q856f423]
-SecRequestBodyAccess ※リクエストボディの検査(有効/無効)
 SecRequestBodyAccess On ※有効
 SecRequestBodyAccess Off ※無効

-SecResponseBodyAccess ※レスポンスボディの検査(有効/無効)
 SecResponseBodyAccess On ※有効
 SecResponseBodyAccess Off ※無効

-SecRequestBodyLimit ※HTTPリクエストボディのサイズ上限
 SecRequestBodyLimit 13107200 ※13MB

-SecRequestBodyNoFilesLimit ※HTTPリクエストボディ(ファイルを除く)のサイズ上限
 SecRequestBodyNoFilesLimit 131072 ※120KB

-SecRequestBodyInMemoryLimit ※HTTPリクエストボディをメモリ上で検査するサイズ上限
 SecRequestBodyInMemoryLimit 131072 ※120KB

-SecRequestBodyLimitAction ※SecRequestBodyLimitで指定したサイズを超過した場合の処理
 SecRequestBodyLimitAction Reject ※遮断
 SecRequestBodyLimitAction ProcessPartial ※SecRequestBodyLimitで指定したサイズまでは検証する

-SecPcreMatchLimit ※正規表現でマッチングを行うサイズ上限
 SecPcreMatchLimit 1000 ※1KB

-SecPcreMatchLimitRecursion ※再帰的に正規表現でマッチングを行う回数上限
 SecPcreMatchLimitRecursion 1000

***デフォルトアクション設定 [#seedffd3]
-SecDefaultAction ※マッチするルールがあった場合のデフォルトのアクション
 SecDefaultAction [phase:X] [action1,action2,...] ※構文
 SecDefaultAction "phase:2,log,auditlog,deny,status:403" ※例:リクエストボディのフェーズで処理停止、Apacheのエラーログに記録、ModSecurityの監査ログに記録、ステータス403を返す

| Phase | 設定の記述 |説明 | 備考 |h
| 1 | phase:1 |リクエストヘッダー受信時 | リクエストのリクエストライン・ヘッダーを検査 |
| 2 | phase:2 |リクエストボディ解析後 | リクエストのパラメータ・フォームデータを検査 |
| 3 | phase:3 |レスポンスヘッダー送信前 | レスポンスのヘッダーを検査 |
| 4 | phase:4 |レスポンスボディ送信前 | レスポンスのヘッダーを検査 |
| 5 | phase:5 |ロギングフェーズ |  |

--Processing Phases~
https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-%28v2.x%29#user-content-Processing_Phases

| Action | 説明 |h
| allow | マッチしたルール以降の処理をスキップして許可 |
| pass | 検知はするがブロックしない |
| deny | 条件にマッチしたらアクセスを拒否(HTTP 403ステータスを返す等) |
| log | Apacheのエラーログに記録する |
| nolog | Apacheのエラーログに記録しない |
| auditlog | ModSecurityの監査ログに記録する |
| status:403 | 拒否時のHTTPステータスを指定する |
| t:none | トランスフォーメーション(入力変換)を無効化 |

***ログ:監査ログ [#fb439a7f]
-SecAuditEngine ※監査ログのエンジン
 SecAuditEngine On ※全リクエストを出力
 SecAuditEngine Off ※出力しない
 SecAuditEngine RelevantOnly ※重要なリクエストのみ記録(ルールにマッチしたリクエストやエラー発生時など)

-SecAuditLog ※監査ログの出力先
 SecAuditLog /var/log/httpd/modsec_audit.log

-SecAuditLogParts ※監査ログに出力する情報の種類(パート)
 SecAuditLogParts ABCFHZ

| Part | 説明 |h
| A | 監査ログヘッダー(必須) |
| B | リクエストヘッダー |
| C | リクエストボディ(SecRequestBodyAccessの有効化が必要) |
| D | レスポンスヘッダー(予約済みで未実装) |
| E | レスポンスボディ(SecResponseBodyAccessの有効化が必要)。インターセプトした場合、実際のレスポンス本文にはエラーメッセージが含まれる。 |
| F | レスポンスヘッダー(DateヘッダーとServerヘッダーを除く) |
| G | レスポンスボディ(予約済みで未実装) |
| H | 監査ログトレーラー |
| I | "C"の代替部分 |
| J | multipart/form-data エンコーディングでアップロードされたファイルに関する情報 |
| K | 一致した全ルールの完全なリスト(1行に1ルール) |
| Z | 最終境界。エントリの終了を示す(必須) |

***ログ:デバッグログ [#yfae2106]
-SecDebugLog ※デバッグログの出力先
 SecAuditLog /var/log/httpd/modsec_debug.log

-SecDebugLogLevel ※デバッグログの詳細レベル
 SecDebugLogLevel <レベル>

| Level | 説明 |h
| 0 | 出力なし |
| 1 | 重大なエラーのみ出力 |
| 2 | エラー・警告を出力 |
| 3 | 主要な処理の情報を出力 |
| 4〜5 | 詳細なリクエスト情報、ルール判定情報を出力 |
| 6〜9 | 非常に詳細(内部変数、PCREマッチ詳細など) |

***検査ルール [#ab2b93ca]
-SecRule
 SecRule 変数 オペレータ [変換関数] アクション
--変数
---https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-(v2.x)#user-content-Variables
---ARGS ※リクエストパラメータ(URL/ボディ)
---ARGS_GET ※リクエストパラメータ(URL)
---ARGS_POST ※リクエストパラメータ(ボディ)
---REQUEST_HEADERS ※リクエストヘッダのKey-Value値
--オペレータ
---https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-(v2.x)#Operators
---@contains ※指定した文字列が含まれるか検査
---@rx ※正規表現による検査
---@detectSQLi ※SQLインジェクションの検査
---@detectXSS ※XSSの検査
--変換関数
---https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-(v2.x)#Transformation_functions
--アクション
---https://github.com/owasp-modsecurity/ModSecurity/wiki/Reference-Manual-(v2.x)#Actions
---id ※定義したルールのID[id:xxxxx]
---phase ※処理するフェーズ(1〜5)[phase:x]
---deny ※リクエストをブロックする(403エラー)
---log ※監査ログを出力する
---nolog ※監査ログを出力しない
---msg ※ログに追加で出力するメッセージ
---status ※レスポンスステータスコード[status:403]
---ctl ※ModSecurityの設定をトランザクション単位で指定する

***その他 [#w1da1643]
-SecAction ※指定された処理を実行する
 SecAction アクション

-SecRuleRemoveById ※指定したIDのルールを無効化する
 SecRuleRemoveById <ルールID> ※単一指定
 SecRuleRemoveById <ルールID> <ルールID> ※複数指定
 SecRuleRemoveById <ルールID>-<ルールID> ※範囲指定

-SecRuleUpdateActionById ※指定したIDのルールのアクションを変更する
 SecRuleRemoveById <ルールID> <変更後のアクション>

*crs-setup.conf [#g9ba16f9]




*関連サイト [#l7d4c5e6]
-GitHub~
https://github.com/owasp-modsecurity/ModSecurity

-Wiki~
https://github.com/owasp-modsecurity/ModSecurity/wiki

-OWASP CRS~
https://owasp.org/www-project-modsecurity-core-rule-set/


*関連用語 [#af8b3122]
-[[OWASP]]
-[[WAF]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS