Skip to content
このページは AI の支援により作成・翻訳されました。誤りがあれば、改善にご協力ください。 GitHub で編集

YAMLルール構文

このページはPRX-WAFが使用する完全なYAMLルールスキーマを文書化しています。すべてのルールファイルはこの構造に従います。

ファイル構造

各YAMLルールファイルはトップレベルのメタデータセクションの後にルールのリストが続きます:

yaml
version: "1.0"                     # Schema version (required)
description: "Short description"   # Human-readable label (required)
source: "OWASP CRS v4.25.0"       # Origin of the rules (optional)
license: "Apache-2.0"             # SPDX license identifier (optional)

rules:
  - <rule>
  - <rule>

ルールスキーマ

rulesリスト内の各ルールは以下のフィールドを持ちます:

yaml
- id: "CRS-942100"              # Unique string ID (REQUIRED)
  name: "SQL injection attack"  # Short description (REQUIRED)
  category: "sqli"              # Category tag (REQUIRED)
  severity: "critical"          # Severity level (REQUIRED)
  paranoia: 1                   # Paranoia level 1-4 (optional, default: 1)
  field: "all"                  # Request field to inspect (REQUIRED)
  operator: "regex"             # Match operator (REQUIRED)
  value: "(?i)select.+from"     # Pattern or threshold (REQUIRED)
  action: "block"               # Action on match (REQUIRED)
  tags:                         # String tags (optional)
    - "owasp-crs"
    - "sqli"
  crs_id: 942100                # Original CRS numeric ID (optional)
  reference: "https://..."      # CVE or documentation link (optional)

必須フィールド

フィールドタイプ説明
idstringすべてのルールファイルで一意な識別子。フォーマット:<PREFIX>-<CATEGORY>-<NNN>
namestring短い人間が読める説明(最大約120文字)
categorystringフィルタリングとレポートのためのカテゴリタグ
severitystring以下のいずれか:criticalhighmediumlowinfonoticewarningerrorunknown
fieldstring検査するリクエストのどの部分か(フィールドリファレンス参照)
operatorstring値をどのようにマッチするか(オペレーターリファレンス参照)
valuestringパターン、しきい値、またはワードリストファイル名
actionstringルールがマッチしたときに何をするか(アクションリファレンス参照)

オプションフィールド

フィールドタイプデフォルト説明
paranoiainteger1パラノイアレベル1〜4
tagsstring[][]フィルタリングとダッシュボード表示のためのタグ
crs_idinteger--元のOWASP CRS数値ID
referencestring--CVE、OWASPの記事、または根拠へのURL

フィールドリファレンス

fieldの値はHTTPリクエストのどの部分を検査するかを決定します:

フィールド検査対象
pathリクエストURIパス(クエリ文字列なし)
queryクエリ文字列(すべてのパラメーター、デコード済み)
bodyリクエストボディ(デコード済み)
headersすべてのリクエストヘッダー(name: valueペア)
user_agentUser-Agentヘッダーのみ
cookiesリクエストクッキー
methodHTTPメソッド(GET、POST、PUTなど)
content_typeContent-Typeヘッダー
content_lengthContent-Length値(数値比較用)
path_lengthURIパスの長さ(数値比較用)
query_arg_countクエリパラメーター数(数値比較用)
all上記すべてのフィールドを結合

オペレーターリファレンス

operatorの値はvalueが検査フィールドに対してどのようにマッチするかを決定します:

オペレーター説明値フォーマット
regexPCRE互換正規表現正規表現パターン
containsフィールドがリテラル文字列を含むリテラル文字列
equalsフィールドが値に完全一致(大文字小文字を区別)リテラル文字列
not_inフィールド値がリストに含まれないカンマ区切りリスト
gtフィールド値(数値)がより大きい数値文字列
ltフィールド値(数値)がより小さい数値文字列
geフィールド値(数値)が以上数値文字列
leフィールド値(数値)が以下数値文字列
detect_sqlilibinjectionによるSQLインジェクション検出"true"または""
detect_xsslibinjectionによるXSS検出"true"または""
pm_from_fileワードリストファイルに対するフレーズマッチowasp-crs/data/内のファイル名
pmインラインリストに対するフレーズマッチカンマ区切りフレーズ

アクションリファレンス

actionの値はルールがマッチしたときに何が起こるかを決定します:

アクション説明
block403 Forbiddenレスポンスでリクエストを拒否
logリクエストを許可するがマッチをログに記録(監視モード)
allowリクエストを明示的に許可(他のルールを上書き)
denyblockのエイリアス
redirectリクエストをリダイレクト(エンジン固有の設定)
drop接続をサイレントにドロップ

TIP

action: blockに切り替える前に誤検知を監視するために、新しいルールはaction: logで始めてください。

ID名前空間の規則

ルールIDは確立されたプレフィックス規則に従う必要があります:

ディレクトリIDプレフィックスサンプル
owasp-crs/CRS-<number>CRS-942100
modsecurity/MODSEC-<CATEGORY>-<NNN>MODSEC-IP-001
cve-patches/CVE-<YEAR>-<SHORT>-<NNN>CVE-2021-LOG4J-001
custom/CUSTOM-<CATEGORY>-<NNN>CUSTOM-API-001

完全なサンプル

yaml
version: "1.0"
description: "Application-specific access control rules"
source: "custom"
license: "Apache-2.0"

rules:
  - id: "CUSTOM-API-001"
    name: "Block access to internal admin API"
    category: "access-control"
    severity: "high"
    paranoia: 1
    field: "path"
    operator: "regex"
    value: "(?i)^/internal/"
    action: "block"
    tags: ["custom", "access-control"]

  - id: "CUSTOM-BOT-001"
    name: "Log suspicious automated tool user-agents"
    category: "scanner"
    severity: "medium"
    paranoia: 2
    field: "user_agent"
    operator: "regex"
    value: "(?i)(masscan|zgrab|python-requests/|go-http-client)"
    action: "log"
    tags: ["custom", "bot", "scanner"]

  - id: "CUSTOM-RATE-001"
    name: "Block requests with excessive query parameters"
    category: "dos"
    severity: "medium"
    paranoia: 1
    field: "query_arg_count"
    operator: "gt"
    value: "50"
    action: "block"
    tags: ["custom", "dos"]

ルールの検証

デプロイ前にルールファイルを検証:

bash
# Validate all rules
python rules/tools/validate.py rules/

# Validate a specific file
python rules/tools/validate.py rules/custom/myapp.yaml

バリデーターは以下をチェックします:

  • 必須フィールドが存在する
  • すべてのファイルで重複するルールIDがない
  • severityとactionの値が有効
  • パラノイアレベルが1〜4の範囲内
  • 正規表現が正しくコンパイルされる
  • 数値オペレーターが文字列値で使用されていない

次のステップ

Released under the Apache-2.0 License.