コンテンツにスキップ

WAFカスタムルールへのファイアウォールルール移行

Cloudflareは既存のファイアウォールルールWAFカスタムルールに変換しました。カスタムルールを使用すると、同じレベルの保護といくつかの追加機能を得ることができます。カスタムルールはCloudflareダッシュボードのセキュリティ > WAF > カスタムルールで利用可能です。

主な違い

ファイアウォールルールとWAFカスタムルールの主な違いは以下の通りです。

ブロックアクションの改善された応答

WAFカスタムルールでは、_ブロック_アクションの応答をカスタマイズすることができます

デフォルトのブロック応答はCloudflareの標準HTMLページです。_ブロック_アクションに対してカスタム応答を送信する必要がある場合は、カスタムルールを設定して、カスタム応答コード(デフォルトは403)とカスタムボディ(HTML、JSON、XML、またはプレーンテキスト)を持つ固定応答を返すようにします。

単一のルールに対してカスタム応答を定義するには、セキュリティ > WAF > カスタムルールに移動し、カスタムルールを編集してブロック関連のオプションを入力します。

ブロックされたリクエストの異なるエラーページ

_ブロック_アクションを持つファイアウォールルールによってブロックされたリクエストは、Cloudflareの1020エラーコード応答を受け取ります。Cloudflareユーザーは、カスタムページ > 1000クラスエラーでこのエラーページをカスタマイズできます。

WAFカスタムルールによってブロックされたリクエストは、異なる応答を受け取ります:WAFブロック応答です。デフォルトのブロック応答をカスタマイズするには、次のいずれかを行います。

  • カスタムページ > WAFブロックで、ゾーン全体に対してカスタムWAFブロック応答を定義します。このカスタムページは常にHTMLコンテンツタイプを持ちます。
  • 特定のWAFカスタムルールによってブロックされたリクエストに対してカスタム応答を定義します。このカスタム応答はHTML以外の他のコンテンツタイプもサポートしています。

ファイアウォールルールによってブロックされたリクエストのためにカスタムページで1xxxエラーページをカスタマイズしている場合は、上記のいずれかの方法を使用してブロックされたリクエストのための新しい応答ページを作成する必要があります。

カスタムページに関する詳細は、カスタムページの設定を参照してください。

許可およびバイパスアクションの両方を置き換える新しいスキップアクション

ファイアウォールルールは、_許可_および_バイパス_アクションをサポートしており、これらはしばしば一緒に使用されました。これらのアクションは、信頼できるIPアドレスからのリクエストなど、既知の正当なリクエストを処理するために一般的に使用されました。

リクエストが_許可_をトリガーすると、残りのファイアウォールルールは評価されず、リクエストは次のセキュリティ製品に進むことが許可されます。_バイパス_アクションは、アクションをトリガーするリクエストで実行しないべきセキュリティ製品(WAF管理ルール、レート制限ルール、ユーザーエージェントブロックなど)を指定するために設計されました。

ファイアウォールルールでは、特定のリクエストに対してすべてのセキュリティ製品の実行を停止したい場合、2つのルールを作成する必要がありました:

  • _バイパス_アクションを持つ1つのルール(すべてのセキュリティ製品を選択)。
  • 他のファイアウォールルールの実行を停止するための_許可_アクションを持つ1つのルール。

この一般的なシナリオに対処するために2つのルールを持つ必要がある要件は、WAFカスタムルールには適用されません。今後は、_スキップ_アクションを使用する必要があります。これは_許可_および_バイパス_アクションを組み合わせたものです。_スキップ_アクションは、WAFカスタムルールではサポートされていない_許可_および_バイパス_アクションを完全に置き換えます。

_スキップ_アクションを使用すると、次のことができます:

  • 残りのカスタムルールの実行を停止する(_許可_アクションに相当)
  • 他のセキュリティ製品の実行を避ける(_バイパス_アクションに相当)
  • 上記の組み合わせ。

また、_スキップ_アクションに一致するカスタムルールのイベントをログに記録するかどうかを選択することもできます。これは、正のセキュリティモデルを作成する際に、大量の正当なトラフィックをログに記録しないようにするのに特に便利です。

カスタムルールは順番に評価される

ファイアウォールルールのアクションには、優先順位の順序を使用する際に特定の優先順位の順序がありました。対照的に、カスタムルールのアクションにはそのような順序はありません。カスタムルールは常に順番に評価され、一部のアクション(_ブロック_など)は他のルールの評価を停止します。

たとえば、優先順位の順序を使用して、同じ優先順位で両方が受信リクエストに一致する次のファイアウォールルールを持っている場合:

  • ファイアウォールルール #1 — 優先順位: 2 / アクション: ブロック
  • ファイアウォールルール #2 — 優先順位: 2 / アクション: 許可

リクエストは許可されます。なぜなら、ファイアウォールルールの_許可_アクションが_ブロック_アクションよりも優先されるからです。

対照的に、受信リクエストに一致する2つのカスタムルールを作成した場合:

  • カスタムルール #1 — アクション: ブロック
  • カスタムルール #2 — アクション: スキップ(残りのカスタムルールをスキップするように設定)

リクエストはブロックされます。なぜなら、カスタムルールは順番に評価され、_ブロック_アクションが他のルールの評価を停止するからです。

ログとイベント

カスタムルールによって記録されたイベントは、セキュリティイベントに表示され、セキュリティ > イベントCustom Rulesをソースとして利用できます。

移行が行われた日を含む期間を選択すると、セキュリティイベントページでファイアウォールルールによって生成されたイベントも見つけることができます。同様に、移行期間中に_スキップ_および_許可_アクションの両方を持つイベントも同じビューで見つけることができます。

新しいAPIとTerraformリソース

WAFカスタムルールを管理するための推奨APIはルールセットAPIです。ルールセットAPIは、最近のCloudflareセキュリティ製品で使用され、APIとの対話時に一貫したユーザーエクスペリエンスを提供します。ルールセットAPIへの移行に関する詳細は、APIユーザーに関する関連変更を参照してください。

ファイアウォールルールAPIとフィルターAPIは、2025-01-15まで動作します。ファイアウォールルールとWAFカスタムルールの両方に対して単一のルールリストがあり、このリストにはWAFカスタムルールが含まれます。内部変換プロセスのおかげで、ファイアウォールルールAPIとフィルターAPIは、これらのWAFカスタムルールから変換されたファイアウォールルール/フィルターを返します。

Terraformを使用している場合、WAFカスタムルールを構成するための推奨方法は、http_request_firewall_customフェーズで構成されたcloudflare_rulesetリソースを使用することです。Terraform構成の更新に関する詳細は、Terraformユーザーに関する関連変更を参照してください。

ダッシュボードユーザーに関する関連変更

Cloudflareダッシュボードのファイアウォールルールタブは現在非推奨です。ファイアウォールルールは、Cloudflareダッシュボードのセキュリティ > WAF > カスタムルールにWAFカスタムルールとして表示されます。

Cloudflareダッシュボードのセキュリティ > WAFの下にあるカスタムルールタブ。

両方の製品にアクセスできるユーザーには、ファイアウォールルールタブは2025-01-15までのみ利用可能です。

APIユーザーに関する関連変更

ファイアウォールルールAPIおよび関連するCloudflareフィルターAPIは現在非推奨です。 これらのAPIは2025-01-15に動作を停止します。ファイアウォールルールAPIまたはCloudflareフィルターAPIに基づく自動化をこの日までにルールセットAPIに移行する必要があります。ルールIDはファイアウォールルールとカスタムルールで異なるため、特定のルールIDを扱う自動化プロセスに影響を与える可能性があります。

現時点では、すべての3つのAPI(ファイアウォールルールAPI、フィルターAPI、ルールセットAPI)が利用可能です。Cloudflareは、内部的にファイアウォールルールAPIおよびフィルターAPIの呼び出しを対応するルールセットAPIの呼び出しに変換します。ファイアウォールルールAPI/フィルターAPIとルールセットAPIの間の変換されたAPI呼び出しは、Cloudflareによって生成された監査ログに表示され、実際にリクエストを行ったユーザーによって生成されたものではありません。ファイアウォールルールとWAFカスタムルールの両方に対して単一のルールリストがあります。

ブロックされたリクエストのカスタム応答や_スキップ_アクションなど、WAFカスタムルールの新機能はファイアウォールルールAPIではサポートされていません。これらの機能を利用するには、CloudflareはCloudflareダッシュボードのカスタムルールページまたはルールセットAPIを使用することを推奨しています。

WAFカスタムルールをルールセットAPIを使用して管理するためのについては、WAFドキュメントを参照してください。

Terraformユーザーに関する関連変更

Cloudflareプロバイダーの以下のTerraformリソースは現在非推奨です:

これらのリソースは2025-01-15に動作を停止します。これらのリソースを使用してファイアウォールルールの構成を管理している場合は、この日までに手動でcloudflare_rulesetリソースにTerraform構成を移行する必要があります。

現時点では、すべての3つのTerraformリソース(cloudflare_firewall_rulecloudflare_filtercloudflare_ruleset)が利用可能です。ファイアウォールルールとWAFカスタムルールの両方に対して単一のルールリストがあります。

WAFカスタムルールの新機能の一部は、非推奨のTerraformリソースではサポートされていません。これらの機能を利用するには、Cloudflareはcloudflare_rulesetリソースを使用することを推奨しています。

Terraformを使用してWAFカスタムルールを構成するためのについては、Terraformに関するドキュメントを参照してください。

cf-terraformingを使用して構成を置き換える

cf-terraformingツールを使用して、現在のWAFカスタムルール(Cloudflareがファイアウォールルールから変換したもの)のTerraform構成を生成できます。その後、新しいリソースをTerraformステートにインポートします。

Terraformでファイアウォールルール(およびフィルター)の構成を新しいルールセット構成に置き換えるための推奨手順は以下の通りです。

  1. 次のコマンドを実行して、ゾーンのすべてのルールセット構成を生成します:

    Terminal window
    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 {
    [...]
    }
    [...]
    }
    [...]
  2. 前のコマンドは、ルールセットエンジンに基づく他のCloudflare製品のための追加のルールセット構成を返す場合があります。ファイアウォールルールをカスタムルールに移行しているため、http_request_firewall_customフェーズのTerraformリソースのみを保持し、.tf構成ファイルに保存します。次のステップで完全なリソース名が必要になります。

  3. 以前に特定した cloudflare_ruleset リソースを terraform import コマンドを使用して Terraform ステートにインポートします。例えば:

Terminal window
terraform import cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31 zone/<ZONE_ID>/3c0b456bc2aa443089c5f40f45f51b31
cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: ID "zone/<ZONE_ID>/3c0b456bc2aa443089c5f40f45f51b31" からインポート中...
cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: インポートの準備完了!
cloudflare_ruleset のインポートの準備ができました
cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: ステートを更新中... [id=3c0b456bc2aa443089c5f40f45f51b31]
インポート成功!
インポートされたリソースは上記に示されています。これらのリソースは現在、あなたの Terraform ステートにあり、以後 Terraform によって管理されます。
  1. terraform plan を実行して、Terraform が新しい cloudflare_ruleset リソースのステートを確認することを検証します。これは、すでに Terraform によって管理されている他の既存のリソースに加えて行われます。例えば:

    Terminal window
    terraform plan
    cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: ステートを更新中... [id=3c0b456bc2aa443089c5f40f45f51b31]
    [...]
    cloudflare_filter.my_filter: ステートを更新中... [id=14a2524fd75c419f8d273116815b6349]
    cloudflare_firewall_rule.my_firewall_rule: ステートを更新中... [id=0580eb5d92e344ddb2374979f74c3ddf]
    [...]
  2. Terraform ステートからファイアウォールルールとフィルターに関連するすべてのステートを削除します:

    1. 次のコマンドを実行して、ファイアウォールルールとフィルターに関連するすべてのリソースを見つけます:

      Terminal window
      terraform state list | grep -E '^cloudflare_(filter|firewall_rule)\.'
      cloudflare_filter.my_filter
      cloudflare_firewall_rule.my_firewall_rule
    2. 影響を理解するために、リソースを削除することなく、ドライランモードで terraform state rm ... コマンドを実行します:

      Terminal window
      terraform state rm -dry-run cloudflare_filter.my_filter cloudflare_firewall_rule.my_firewall_rule
      cloudflare_filter.my_filter を削除します
      cloudflare_firewall_rule.my_firewall_rule を削除します
    3. 影響が正しいように見える場合は、-dry-run パラメータなしで同じコマンドを実行して、実際にリソースを Terraform ステートから削除します:

      Terminal window
      terraform state rm cloudflare_filter.my_filter cloudflare_firewall_rule.my_firewall_rule
      cloudflare_filter.my_filter を削除しました
      cloudflare_firewall_rule.my_firewall_rule を削除しました
      2 つのリソースインスタンスを正常に削除しました。
  3. Terraform ステートからファイアウォールルールとフィルターリソースを削除した後、.tf 設定ファイルから cloudflare_filtercloudflare_firewall_rule リソースを削除します。

  4. terraform plan を実行して、設定ファイルから削除したリソースがもはや表示されないことを確認します。保留中の変更はないはずです。

Terminal window
terraform plan
cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: ステートを更新中... [id=3c0b456bc2aa443089c5f40f45f51b31]
[...]
変更はありません。あなたのインフラストラクチャは設定と一致しています。
Terraform はあなたの実際のインフラストラクチャを設定と比較し、違いがないことを確認したため、変更は必要ありません。

Cloudflare リソースを Terraform にインポートし、cf-terraforming ツールを使用する詳細については、以下のリソースを参照してください: