Cloudflare は、既存の Firewall Rules を カスタムルール へアップグレードしました。カスタムルールでも同程度の保護に加え、いくつかの追加機能を利用できます。カスタムルールは、Cloudflare ダッシュボードの次の場所で利用できます。
- 旧ダッシュボード: Security > WAF > Custom rules。
- 新しいセキュリティダッシュボード: Security > Security rules。
Firewall Rules と WAF カスタムルールの主な違いは次のとおりです。
- Block アクションのレスポンスの改善
- ブロックされたリクエスト向けの別のエラーページ
- Allow と Bypass の両方を置き換える新しい Skip アクション
- カスタムルールは順番に評価される
- ログとイベント
- 新しい API と Terraform リソース
WAF カスタムルールでは、Block アクションのレスポンスをカスタマイズ できます。
デフォルトのブロックレスポンスは、Cloudflare 標準の HTML ページです。Block アクションにカスタムレスポンスを返す必要がある場合は、カスタムルールを設定し、カスタムレスポンスコード(デフォルトは 403)とカスタム本文(HTML、JSON、XML、またはプレーンテキスト)の固定レスポンスを返すようにします。
Block アクションの Firewall Rule がブロックしたリクエストは、Cloudflare の 1020 エラーコード レスポンスを受け取りました。Cloudflare ユーザーは、Error Pages > 1000 class errors で、ゾーン向けにこのエラーページをカスタマイズできました。
WAF カスタムルールがブロックしたリクエストは、別のレスポンス(WAF ブロックレスポンス)を受け取ります。デフォルトのブロックレスポンスをカスタマイズするには、次のいずれかを行います。
- Error Pages ↗ > WAF block で、ゾーン全体のカスタム WAF ブロックレスポンスを定義します。このエラーページの Content-Type は常に HTML です。
- 特定の WAF カスタムルールがブロックしたリクエスト向けに、カスタムレスポンスを定義 します。このカスタムレスポンスは、HTML 以外の Content-Type もサポートします。
Firewall Rules がブロックしたリクエスト向けに、Error Pages で 1XXX エラーページをカスタマイズしていた場合は、上記のいずれかの方法で、ブロックされたリクエスト向けの新しいレスポンスページを作成する必要があります。
Error Pages の詳細は、Custom Errors を参照してください。
Firewall Rules は Allow と Bypass アクションをサポートしており、しばしば併用されていました。これらのアクションは、正当だと分かっているリクエスト(例: 信頼できる IP アドレスからのリクエスト)の扱いに使われていました。
リクエストが Allow を発動すると、残りの Firewall Rules は評価されず、リクエストは次のセキュリティ製品へ進みます。Bypass アクションは、アクションを発動したリクエストで実行しないセキュリティ製品(WAF マネージドルール、レート制限ルール、User Agent Blocking など)を指定するためのものです。
Firewall Rules では、あるリクエストに対してすべてのセキュリティ製品の実行を止めたい場合、次の 2 つのルールを作成していました。
- Bypass アクションのルール(すべてのセキュリティ製品を選択)。
- Allow アクションのルール(他の Firewall Rules の実行を止める)。
このよくあるシナリオに 2 つのルールが必要だった要件は、WAF カスタムルールにはありません。代わりに Skip アクションを使い ます。Skip は Allow と Bypass を組み合わせたものです。Skip アクションは Allow と Bypass を完全に置き換えます。WAF カスタムルールでは Allow と Bypass はサポートされません。
Skip アクションでは、次のことができます。
- 残りのカスタムルールすべての実行を止める(Allow アクションと同等)
- 他のセキュリティ製品を実行しない(Bypass アクションと同等)
- 上記の組み合わせ。
Skip アクションのカスタムルールに一致したイベントをログするかどうかも選べます。正当なトラフィックを大量にログしたくない、ポジティブセキュリティモデルを作るときに特に便利です。
Firewall Rules のアクションには、優先度順 を使う場合、特定の 優先順位 がありました。一方、カスタムルールのアクションには、そのような順序はありません。カスタムルールは常に順番に評価され、Block などの一部のアクションは、他のルールの評価を止めます。
たとえば、優先度順を使い、同じ優先度で受信リクエストに両方とも一致する次の Firewall Rules があったとします。
- Firewall rule #1 — 優先度: 2 / アクション: Block
- Firewall rule #2 — 優先度: 2 / アクション: Allow
リクエストは許可されます。Firewall Rules では、Allow アクションが Block アクションより優先されるためです。
一方、受信リクエストに両方とも一致する次の 2 つのカスタムルールを作成した場合です。
- Custom rule #1 — アクション: Block
- Custom rule #2 — アクション: Skip(残りのカスタムルールすべてをスキップするように設定)
リクエストはブロックされます。カスタムルールは順番に評価され、Block アクションが他のルールの評価を止めるためです。
カスタムルールが記録したイベントは、Security Events に、ソース Custom Rules として表示されます。
カスタムルールへの移行が行われた日を含む期間を選ぶと、Security Events ページに Firewall Rules が生成したイベントがまだ残っていることがあります。同様に、移行期間中は、同じ画面に Skip と Allow の両方のアクションのイベントが残ることがあります。
WAF カスタムルールを管理する推奨 API は Rulesets API です。Rulesets API は、最近の Cloudflare セキュリティ製品すべてで使われ、API 操作時の体験を揃えています。Rulesets API への移行について詳しくは、API 利用者向けの主な変更 を参照してください。
Firewall Rules API と Filters API は、2025-06-15 以降サポートされていません。現在、Firewall Rules と WAF カスタムルールのルール一覧は 1 つになり、この一覧には WAF カスタムルールが含まれます。内部変換処理により、API の提供終了日までは、Firewall Rules API と Filters API は、これらの WAF カスタムルールから変換した Firewall Rules / フィルターを返します。
Terraform を使っている場合は、カスタムルールを管理するために、http_request_firewall_custom フェーズの cloudflare_ruleset ↗ リソースを使うよう設定を更新する必要があります。Terraform 設定の更新について詳しくは、Terraform 利用者向けの主な変更 を参照してください。
Cloudflare ダッシュボードの Firewall Rules タブは非推奨です。 Firewall Rules は、Cloudflare ダッシュボードでは カスタムルール として表示されます。
両方の製品にアクセスできるユーザーの場合、Firewall rules タブは、旧ダッシュボードの Security > WAF でのみ利用できます。
Firewall Rules API と、関連する Cloudflare Filters API は非推奨です。 これらの API は、2025-06-15 以降サポートされていません。問題を防ぐには、Firewall Rules API または Cloudflare Filters API に基づく自動化を、Rulesets API へ手動で更新する必要があります。ルール ID は Firewall Rules とカスタムルールで異なるため、特定のルール ID を扱う自動化処理に影響することがあります。
API の提供終了日までは、Cloudflare は Firewall Rules API と Filters API の呼び出しを、対応する Rulesets API の呼び出しへ内部的に変換します。Firewall Rules API / Filters API と Rulesets API の間の変換済み API 呼び出しは、監査ログでは実際のリクエスト送信者ではなく、Cloudflare が生成したものとして表示されます。Firewall Rules と WAF カスタムルールのルール一覧は 1 つになります。
WAF カスタムルールの一部の新機能(ブロックされたリクエスト向けのカスタムレスポンスや Skip アクションなど)は、Firewall Rules API ではサポートされません。これらの機能を使うには、Cloudflare ダッシュボードのカスタムルールページ、または Rulesets API を使うことをおすすめします。
Rulesets API で WAF カスタムルールを管理する例は、WAF ドキュメントの Rulesets API で WAF カスタムルールを管理する例 を参照してください。
Cloudflare プロバイダーの次の Terraform リソースは非推奨です。
これらのリソースは、2025-06-15 以降サポートされていません。これらのリソースで Firewall Rules の設定を管理している場合は、問題を防ぐために、Terraform 設定を cloudflare_ruleset ↗ リソースへ手動で更新する必要があります。
Firewall Rules と WAF カスタムルールのルール一覧は 1 つになります。
WAF カスタムルールの一部の新機能は、非推奨の Terraform リソースではサポートされません。これらの機能を使うには、cloudflare_ruleset リソースを使うことをおすすめします。
Terraform で WAF カスタムルールを設定する例は、Terraform のドキュメントの Terraform で WAF カスタムルールを設定する を参照してください。
cf-terraforming ↗ ツールを使い、現在の WAF カスタムルール(Cloudflare が Firewall Rules から変換したもの)の Terraform 設定を生成できます。その後、新しいリソースを Terraform の状態へインポートします。
Terraform 内の Firewall Rules(およびフィルター)設定を、新しいルールセット設定に置き換える推奨手順は次のとおりです。
-
次のコマンドを実行し、ゾーンのすべてのルールセット設定を生成します。
cf-terraforming generate --zone <ZONE_ID> --resource-type "cloudflare_ruleset"resource "cloudflare_ruleset" "terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31" { kind = "zone" name = "default" phase = "http_request_firewall_custom" zone_id = "<ZONE_ID>" rules { [...] } [...] } [...] -
前のコマンドは、Ruleset Engine に基づく他の Cloudflare 製品のルールセット設定も返すことがあります。Firewall Rules をカスタムルールへ移行しているので、
http_request_firewall_customフェーズの Terraform リソースだけを残し、.tf設定ファイルに保存します。次の手順で、リソースの完全な名前が必要です。 -
先ほど特定した
cloudflare_rulesetリソースを、terraform importコマンドで Terraform の状態へインポートします。例:terraform import cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31 zone/<ZONE_ID>/3c0b456bc2aa443089c5f40f45f51b31cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: Importing from ID "zone/<ZONE_ID>/3c0b456bc2aa443089c5f40f45f51b31"... cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: Import prepared! Prepared cloudflare_ruleset for import cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: Refreshing state... [id=3c0b456bc2aa443089c5f40f45f51b31] Import successful! The resources that were imported are shown above. These resources are now in your Terraform state and will henceforth be managed by Terraform. -
terraform planを実行し、Terraform が、すでに管理している他の既存リソースに加えて、新しいcloudflare_rulesetリソースの状態も確認することを検証します。例:terraform plancloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: Refreshing state... [id=3c0b456bc2aa443089c5f40f45f51b31] [...] cloudflare_filter.my_filter: Refreshing state... [id=14a2524fd75c419f8d273116815b6349] cloudflare_firewall_rule.my_firewall_rule: Refreshing state... [id=0580eb5d92e344ddb2374979f74c3ddf] [...] -
Terraform の状態から、Firewall Rules とフィルターに関連する状態を削除します。
-
次のコマンドを実行し、Firewall Rules とフィルターに関連するすべてのリソースを探します。
terraform state list | grep -E '^cloudflare_(filter|firewall_rule)\.'cloudflare_filter.my_filter cloudflare_firewall_rule.my_firewall_rule -
変更を行わずに影響を把握するため、
terraform state rm ...コマンドをドライランで実行します。terraform state rm -dry-run cloudflare_filter.my_filter cloudflare_firewall_rule.my_firewall_ruleWould remove cloudflare_filter.my_filter Would remove cloudflare_firewall_rule.my_firewall_rule -
影響が正しければ、同じコマンドを
-dry-runパラメーターなしで実行し、Terraform の状態からリソースを実際に削除します。terraform state rm cloudflare_filter.my_filter cloudflare_firewall_rule.my_firewall_ruleRemoved cloudflare_filter.my_filter Removed cloudflare_firewall_rule.my_firewall_rule Successfully removed 2 resource instance(s).
-
-
Terraform の状態から Firewall Rules とフィルターのリソースを削除したあと、
.tf設定ファイルからcloudflare_filterとcloudflare_firewall_ruleリソースを削除します。 -
terraform planを実行し、設定ファイルから削除したリソースがもう表示されないことを確認します。保留中の変更はないはずです。terraform plancloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: Refreshing state... [id=3c0b456bc2aa443089c5f40f45f51b31] [...] No changes. Your infrastructure matches the configuration. Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.
Cloudflare リソースを Terraform へインポートし、cf-terraforming ツールを使う詳細は、次のリソースを参照してください。
一時停止していない Firewall Rules で、一時停止した フィルター があるものは、カスタムルールへ変換されると有効になります。