WAFカスタムルールについて
WAFのカスタムルール機能を使用して、ドメインへのリクエストをフィルタリングすることで、受信トラフィックを制御します。 定義したルールに従って、受信リクエストに対してブロックや管理されたチャレンジなどのアクションを実行することができます。
ルールセットエンジンで評価される他のルールと同様に、WAFカスタムルールには以下の基本パラメータが必要です
- ルール言語を使用してトラフィックの照合基準を指定する表現。
- ルールに一致するものがあった場合に実行する処理を指定するアクション。
カスタムルールは、カスタムルールテーブルで設定された順番(先頭から最終位置まで)に評価されます。 セキュリティ > ファイアウォールルールに移動すると、テーブルを表示できます。 ブロックなどの一部のアクションは、他のルールの評価を停止します。 アクションとその動作の詳細については、 ルールセット・エンジンのルール・アクションを 参照してください。
ファイアウォールルールとWAFカスタムルールの違いについて詳しくは 、「カスタムルールへの移行」 を参照してください。
一般的なユース・ケース
以下のセクションでは、WAFカスタムルールにおける一般的な使用例について詳しく説明します。
指定した国からのトラフィックのみ許可する
この例では、 ブロックアクションを使用して、 ip.src.country
フィールドを使用して国コードに基づいてリクエストをブロックし、米国とメキシコの2か国からのリクエストのみを許可しています
(not ip.src.country in {"US" "MX"})
IPレピュテーションによるリクエストのブロック
IPレピュテーションとは、訪問者のIPレピュテーションを0(リスクなし)から100(高リスク)のスコアで分類したものです。
IPの評価は、Project Honeypot、外部の公開IP情報、および管理されたルールと DDoS からの内部脅威インテリジェンスに基づいて算出されます。
この例では 、[ブロック] アクションを使用して、国コード(ISO 3166-1 Alpha 2 ↗ フォーマット)に基づいて、スコアが 0 以上の IP アドレスからのリクエストをブロックします
(ip.src.country in {"CN" "TW" "US" "GB"} and cf.threat_score gt 0)
他の CIS 機能をスキップするルールを設定する
スキップアクションは、スキップしたいセキュリティ機能や製品に応じて、さまざまなスキップオプションをサポートしています。
このセクションでは、WAFカスタムルールにおけるスキップルールのさまざまなシナリオの例を紹介します。 以下の点を考慮してください
-
{zone_id}
の値は、ルールを追加したいゾーンのIDです。 -
{ruleset_id}
の値は、http_request_firewall_custom
フェーズのエントリーポイントルールセットのIDです。 このルールセットIDの取得方法の詳細については 、「ルールセットの一覧と表示」 を参照してください。 以下のAPIの例では 、「ゾーンルールセットの作成」ルール 操作を使用して、既存のルールセットにスキップルールを追加します。しかし、エントリーポイントのルールセットはまだ存在しないかもしれません。 この場合、 エントリポイントルールセット操作の更新 を使用して、スキップルールを含むエントリポイントルールセットを作成します。
-
各例ではアクションパラメータは1つだけですが、ルールセット、フェーズ、および製品というアクションパラメータを同時に指定することで、同じルールで複数のスキップオプションを使用することができます。
現在のルールセットの残りのルールをスキップする
この例では 、Create a zone ruleset ルール操作 を使用して、IDが RULESET_ID
である既存の http_request_firewall_custom
フェーズのエントリーポイントのルールセットにスキップルールを追加します。 エントリー・ポイントのルールセットIDがわからない場合は、
APIのカスタム・ルール・エントリー・ポイントの取得を 参照してください。 このルールは、ルール式に一致するリクエストについては、現在のルールセット内の残りのすべてのルールをスキップします
curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"action": "skip",
"action_parameters": {
"ruleset": "current"
},
"expression": "http.request.uri.path contains \"/skip-current-ruleset/\"",
"description": ""
}'
段階を飛ばす
この例では、 ゾーンのルールセットを作成して、IDが RULESET_ID
である既存の http_request_firewall_custom
フェーズのエントリポイントのルールセットにルールを追加します。 ルールは、ルール式に一致するリクエストについては、 http_ratelimit
段階をスキップします
curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"action": "skip",
"action_parameters": {
"phases": [
"http_ratelimit"
]
},
"expression": "http.request.uri.path contains \"/skip-phase/\"",
"description": ""
}'
フェーズをスキップし、一致するリクエストを記録しない
この例では、 ゾーンのルールセットのルール操作 を使用して、 http_ratelimit
フェーズをスキップし、現在のルールに対するイベントログを無効にするルールを追加します
curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"action": "skip",
"action_parameters": {
"phases": [
"http_ratelimit"
]
},
"logging": {
"enabled": false
},
"expression": "http.request.uri.path contains \"/disable-logging/\"",
"description": ""
}'
セキュリティ製品をスキップする
この例では、 ゾーンのルールセットのルール操作 を使用して、ルール式に一致するリクエストに対して、Zone Lockdown および User Agent Blocking 製品をスキップするルールを追加します
curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"action": "skip",
"action_parameters": {
"products": [
"zoneLockdown",
"uaBlock"
]
},
"expression": "http.request.uri.path contains \"/skip-products/\"",
"description": ""
}'