ゾーンレベルでカスタムルールを作成するには、Rulesets API を使います。
カスタムルールは、http_request_firewall_custom フェーズのエントリポイントルールセット にデプロイする必要があります。
Terraform を使う場合は、Terraform による WAF カスタムルールの設定 を参照してください。
ゾーンに custom rule を作成するには、http_request_firewall_custom フェーズのエントリポイントルールセットにルール を追加します。
-
ゾーンのエントリポイントルールセットを取得する 操作を呼び出し、
http_request_firewall_customフェーズのエントリポイントルールセットの定義を取得します。この作業には ゾーン ID が必要です。 -
エントリポイントルールセットがすでに存在する場合(つまり
200 OKステータスコードとルールセット定義が返された場合)は、レスポンス内のルールセット ID を控えます。次に、ゾーンルールセットにルールを作成する 操作を呼び出し、既存のルールセットに custom rule を追加します。詳細は以降の例を参照してください。 -
エントリポイントルールセットが存在しない場合(つまり手順 1 で
404 Not Foundステータスコードが返された場合)は、ゾーンルールセットを作成する 操作で作成します。rules配列に custom rule を含めます。例は ルールセットの作成 を参照してください。
この例のリクエストは、ID が $ZONE_ID のゾーンの http_request_firewall_custom フェーズのエントリポイントルールセットにルールを追加します。エントリポイントルールセットはすでに存在し、ID は $RULESET_ID です。
新しいルールはルールセットの最後のルールになり、イギリスまたはフランスからのリクエストのうち、攻撃スコア (attack score) が 20 未満のものを Challenge します。
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"description": "My custom rule",
"expression": "(ip.src.country eq \"GB\" or ip.src.country eq \"FR\") and cf.waf.score lt 20",
"action": "challenge"
}'新しいルールの位置を指定するには、ルールセット内のルールの順序を変更する のガイドラインに従い、リクエストボディに position オブジェクトを含めます。
エントリポイントルールセットを作成し、1 回の API 呼び出しでルールを定義する手順については、フェーズのエントリポイントルールセットにルールを追加する を参照してください。
この例のリクエストは、ID が $ZONE_ID のゾーンの http_request_firewall_custom フェーズのエントリポイントルールセットにルールを追加します。エントリポイントルールセットはすでに存在し、ID は $RULESET_ID です。
新しいルールはルールセットの最後のルールになり、ブロックしたリクエスト向けの カスタムレスポンス を定義します。
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"description": "My custom rule with plain text response",
"expression": "(ip.src.country eq \"GB\" or ip.src.country eq \"FR\") and cf.waf.score lt 20",
"action": "block",
"action_parameters": {
"response": {
"status_code": 403,
"content": "Your request was blocked.",
"content_type": "text/plain"
}
}
}'新しいルールの位置を指定するには、ルールセット内のルールの順序を変更する のガイドラインに従い、リクエストボディに position オブジェクトを含めます。
エントリポイントルールセットを作成し、1 回の API 呼び出しでルールを定義する手順については、フェーズのエントリポイントルールセットにルールを追加する を参照してください。
作成したルールを扱うには、Rulesets API の各種操作を使います。よくある作業は次の表を参照してください。
| 作業 | 手順 |
|---|---|
| ルールセット内のすべてのルールを一覧表示する |
詳細は 特定のルールセットを表示する を参照してください。 |
| ルールを更新する | Update a zone ruleset rule オペレーションを使います。 ルールセット ID とルール ID が必要です。これらの ID を取得するには、 詳細は ルールセット内のルールを更新する を参照してください。 |
| ルールを削除する | Delete a zone ruleset rule オペレーションを使います。 ルールセット ID とルール ID が必要です。これらの ID を取得するには、 詳細は ルールセット内のルールを削除する を参照してください。 |
これらのオペレーションは Ruleset Engine のドキュメントで説明しています。Ruleset Engine は custom rules を含む、さまざまな Cloudflare 製品の基盤です。
アカウントレベルでカスタムルールを API からデプロイする手順は、API でカスタムルールセットを作成する を参照してください。