2022-05-04 に、Cloudflare は 旧バージョンの WAF マネージドルール から新しい WAF Managed Rules へのアップグレードを開始し、対象ゾーンの第 1 陣を移行できるようにしました。現在はパートナーアカウントを含め、すべてのゾーンを WAF Managed Rules へアップグレードできます。
Cloudflare は、すべてのゾーンを新しい WAF Managed Rules へ段階的にアップグレードしています。ゾーンごとのアップグレードは、Cloudflare ダッシュボードまたは API から手動でも開始できます。アップグレードは元に戻せません。新しい WAF Managed Rules へ上げたあと、旧バージョンには戻れません。
旧ダッシュボードを使っている場合、アップグレード完了後は Security > WAF > Managed rules タブで、別のユーザーインターフェースにルールが表示されます。新しいセキュリティダッシュボード を使っている場合、アップグレード後のルールは Security > Security rules に表示されます。
あわせて、アップグレード後は旧 WAF マネージドルールの API は使えなくなります。
新しい WAF Managed Rules は、旧バージョンに対して次のメリットがあります。
-
新しいマッチングエンジン – WAF Managed Rules は Ruleset Engine で動きます。マネージドルールのデプロイが速くなり、スケールの問題なく、より多くのトラフィックを検査できます。ルールの構文は、WAF カスタムルールなど、ほかの Cloudflare セキュリティ製品と同じです。
-
更新されたマネージドルールセット – WAF のマネージドルールセットのひとつである Cloudflare OWASP Core Ruleset は、OWASP Core Ruleset の最新版(v3.x)に基づきます。パラノイアレベル が追加され、旧 WAF マネージドルールで使っていたバージョン(2.x)より誤検知率が改善しています。感度スコアの制御も細かくなり、各ルールがスコアにどれだけ寄与したか、発火したリクエストの合計スコアがいくつだったかが分かります。
-
ルールの閲覧と設定がしやすい – マネージドルールセットをワンクリックでデプロイし、すぐに保護できます。ルールセット全体の動作を上書きするか、1 本のルールだけをカスタマイズできます。特定のタグを持つすべてのルールにオーバーライドを適用し、対象ソフトウェアや攻撃ベクトル向けのルールを調整できます。たとえば次のような設定ができます。
- すべてのゾーンに Cloudflare Managed Ruleset をデプロイする。
- パスに
/api/*を含まないトラフィックに、Cloudflare OWASP Core Ruleset をデプロイする。 - 自分の IP からのトラフィックについて、アカウント全体でマネージドルールセットを無効にする。
WAF Managed Rules のメリットの詳細は、ブログ記事 ↗ を参照してください。
URI ベースの WAF オーバーライドがないゾーンは、すべてアップグレードできます。新しい WAF へ移したあとも、ゾーンには同等の保護が適用されます。
旧バージョンの WAF マネージドルールの設定の多くは新しいバージョンへ上がります。ただし、もともと OWASP ModSecurity Core Rule Set で定義していた一部の設定は失われます。必要な場合は、新しい WAF Managed Rules で作り直してください。
API 利用者向けには、アップグレード後、旧バージョンの WAF マネージドルールを管理する API は使えなくなります。新しい WAF Managed Rules の管理には Rulesets API を使います。
アップグレード処理は、WAF マネージドルールの次の設定に相当する構成を作成します。
- Bypass > WAF Managed Rules で設定したファイアウォールルール。
- Disable Security で設定した Page Rules。
- Web Application Firewall: Off または Web Application Firewall: On で設定した Page Rules。
OWASP ルールセットの設定は一部だけアップグレードされます。詳細は次の節を参照してください。
アップグレード処理は、旧バージョンの WAF マネージドルールで使えた OWASP ModSecurity Core Rule Set の設定を、一部だけ移行します。
次の OWASP 設定は移行されます。
-
Sensitivity: 旧感度の値 は、新しい OWASP ルールセットでは次の パラノイアレベル(PL)と スコアしきい値 の組み合わせに移行されます。
旧感度 新 OWASP の PL 新 OWASP のスコアしきい値 High PL2 Medium – 40 以上 Medium PL1 High – 25 以上 Low PL1 Medium – 40 以上 Default PL2 Medium – 40 以上 -
Action: 旧 OWASP ルールセットのアクションは、新しい OWASP マネージドルールセットへほぼそのまま対応します。例外は Simulate で、Log に移行されます。
次の OWASP 設定は、両バージョンのルールに直接の対応がないため、移行されません。
- OWASP グループオーバーライド
- OWASP ルールオーバーライド
これらの設定を置き換えるには、タグ / ルールのオーバーライドを含め、必要に応じて WAF Managed Rules で Cloudflare OWASP Core Ruleset を再設定してください。新しい OWASP Core Ruleset の設定については Cloudflare OWASP Core Ruleset を参照してください。
ゾーンに URI ベースの WAF オーバーライド(API でのみ利用可能)がある場合、WAF Managed Rules へのアップグレードは選べません。アップグレードするには次を行います。
- Delete a WAF override 操作で、既存の URI ベースの WAF オーバーライドを削除します。
- 以降の手順でアップグレードします。
アップグレード完了後、Cloudflare ダッシュボードはルールを次の場所に表示します。
- 旧ダッシュボード: Security > WAF > Managed rules タブ(別のユーザーインターフェース)
- 新ダッシュボード: Security > Security rules
旧 WAF マネージドルールと違い、WAF を有効にする全体のオン / オフ設定はなくなりました。代わりに、各マネージドルールセットをゾーンへ個別にデプロイします。
Cloudflare ダッシュボードでの WAF Managed Rules のデプロイについては、ダッシュボードで WAF マネージドルールセットをデプロイする を参照してください。
アップグレード完了後、WAF マネージドルールを操作する API は 使えなくなります。対象は次のとおりです。
WAF Managed Rules を扱うには Rulesets API を使います。API での WAF Managed Rules のデプロイについては、API で WAF マネージドルールセットをデプロイする(ゾーン) を参照してください。
アップグレード完了後、WAF マネージドルールを設定する次の Terraform リソースは 使えなくなります。
これらのリソースは、Terraform Cloudflare プロバイダーのバージョン 3.35 までだけが対象でした。バージョン 4.x では これらのリソースはサポートされません ↗。
Terraform で新しい WAF Managed Rules の設定を管理するには、cloudflare_ruleset ↗ リソースを使います。
フェーズ 2 では、すべてのゾーンがアップグレード対象です。手順は Cloudflare プランによって異なります。
-
Pro と Business のお客様は、Cloudflare ダッシュボードまたは API で新しい WAF Managed Rules へアップグレードできます。新しいバージョンを有効にすると、旧バージョンの WAF マネージドルールは自動で無効になります。
-
Enterprise のお客様は、旧バージョンの WAF マネージドルールを有効にしたまま、新しい WAF Managed Rules の設定を有効にできます。新しい設定の影響を確認できます。新しい設定の動作を見直し、必要なマネージドルールを調整したあと、アップグレードを完了すると、旧バージョンの WAF マネージドルールが無効になります。
注: URI ベースの WAF オーバーライド(API でのみ管理可能)があるゾーンは、すぐには新しい WAF Managed Rules へアップグレードできません。移行前にこれらのオーバーライドを削除してください。
フェーズ 1 では、次の条件を満たす一部のゾーンだけがアップグレード対象でした。
-
ゾーンが次のいずれかである:
- WAF が無効、または
- WAF が有効で、有効なのは Cloudflare Managed Ruleset だけ(OWASP ModSecurity Core Rule Set は無効)。
-
ゾーンに、WAF マネージドルールをバイパス、有効化、無効化する ファイアウォールルール または Page Rules がない:
- Bypass > WAF Managed Rules で設定したファイアウォールルール。
- Disable Security で設定した Page Rules。
- Web Application Firewall: Off または Web Application Firewall: On. で設定した Page Rules。
-
ゾーンに URI ベースの WAF オーバーライド(API でのみ利用可能)がない。
WAF のアップグレードは、Cloudflare ダッシュボードまたは API から開始できます。
-
Cloudflare ダッシュボード ↗ にログインし、アカウントとゾーンを選びます。
-
A) 旧ダッシュボードを使っている場合:
- Security > WAF > Managed rules タブを開きます。
B) 新しいセキュリティダッシュボード を使っている場合:
-
Security rules ページを開きます。
Security rules を開く ↗ -
Go to upgrade your Managed rules を選びます。
Enterprise のお客様には、次のバナーが表示されます。
Professional / Business のお客様には、次のバナーが表示されます。
-
アップグレードバナーで Review configuration を選びます。このバナーは対象ゾーンにだけ表示されます。
-
提案された WAF 設定を確認します。WAF Managed Rules の設定を編集する か、ルールセットや特定ルールの実行をスキップする 例外 を作成するなど、設定を調整できます。
-
確認が終わったら Deploy を選び、新しい WAF Managed Rules の設定をデプロイします。
Professional / Business のお客様の場合、Cloudflare は新しい WAF 設定をデプロイしたあと、旧 WAF バージョンを無効にします。アップグレードには数分かかることがあります。
Enterprise のお客様の場合、Deploy を選ぶと両方の WAF 実装が同時に有効になり、新しい設定を検証できます。追加の手順は次の節を参照してください。
Enterprise のお客様は、新しい WAF 設定をデプロイしたあと、両方の WAF 実装が同時に有効になります。この段階(検証モード)では、Cloudflare ダッシュボードで WAF Managed Rules の両方の実装にアクセスできます。アップグレードを完了するまで、アップグレードバナーは表示されたままです。新しい WAF Managed Rules は、旧バージョンより先に実行されます。
-
現在の検証モードで、Security Events から新しい WAF 設定の動作を確認します。詳しくは Security Events で新しい WAF の動作を分析する を参照してください。
-
両方の WAF を有効にした状態での確認が終わったら、アップグレードバナーで Ready to update を選び、続けて Turn off previous version を選びます。これでアップグレードが完了し、旧 WAF バージョンが無効になります。
アップグレードが終わると、ダッシュボードはアップグレード後のルールをすべて次の場所に表示します。
- 旧ダッシュボード: Security > WAF > Managed rules タブ
- 新ダッシュボード: Security > Security rules
アップグレードが終わったかは、ダッシュボードを更新して確認します。
-
Check WAF update compatibility 操作で、現在の設定のままゾーンを新しい WAF へ更新できるかを判定します。
curl "https://api.cloudflare.com/client/v4/zones/{zone_id}/waf_migration/check?phase_two=1" \ --header "Authorization: Bearer <API_TOKEN>"レスポンスの例:
{ "result": { "compatible": true, "migration_state": "start" }, "success": true, "errors": [], "messages": [] }レスポンスに
"compatible": trueが含まれる場合、そのゾーンは新しい WAF へ更新でき、アップグレードを進められます。"compatible": falseが含まれる場合、現在の設定ではアップグレード対象外です。詳細は 対象ゾーン を参照してください。 -
現在の設定に相当する新しい WAF 設定を取得するには、Get new WAF configuration 操作を使います。
curl "https://api.cloudflare.com/client/v4/zones/{zone_id}/waf_migration/config?phase_two=1" \ --header "Authorization: Bearer <API_TOKEN>"レスポンスの例:
{ "result": { "name": "default", "rules": [ { "id": "", "version": "", "action": "execute", "expression": "true", "description": "", "ref": "", "enabled": true, "action_parameters": { "id": "efb7b8c949ac4650a09736fc376e9aee", "overrides": { "rules": [ { "id": "23ee7cebe6e8443e99ecf932ab579455", "action": "log", "enabled": false } ] } } } ] }, "success": true, "errors": [], "messages": [] }
上記の例で返る設定は、旧 WAF バージョンの既存設定に相当し、次を含みます。
- Cloudflare Managed Ruleset(ルールセット ID efb7b8c949ac4650a09736fc376e9aee)を実行するルール。
- 同じルールセット内のルール
Apache Struts - Open Redirect - CVE:CVE-2013-2248(ルール ID23ee7cebe6e8443e99ecf932ab579455)に対する 1 件のオーバーライド。アクションをlogにし、ルールを無効にします。
-
(任意。Enterprise のお客様のみ)Enterprise ゾーンを WAF Managed Rules へアップグレードする場合、完了前に検証モードへ入れます。このモードでは、両方の WAF 実装が有効になります。Update a zone entry point ruleset 操作を使い、クエリ文字列パラメーター
waf_migration=validation&phase_two=1を必ず含めます。curl --request PUT \ "https://api.cloudflare.com/client/v4/zones/{zone_id}/rulesets/phases/http_request_firewall_managed/entrypoint?waf_migration=validation&phase_two=1" \ --header "Authorization: Bearer <API_TOKEN>" \ --header "Content-Type: application/json" \ --data '{ "name": "default", "rules": [ { "action": "execute", "expression": "true", "description": "", "enabled": true, "action_parameters": { "id": "efb7b8c949ac4650a09736fc376e9aee", "overrides": { "rules": [ { "id": "23ee7cebe6e8443e99ecf932ab579455", "action": "log", "enabled": false } ] } } } ] }'この API エンドポイントを呼び出したあと、旧 WAF マネージドルールと新しい WAF Managed Rules の両方が有効になります。正当なトラフィックがブロックされていないか、Security Events の sampled logs を確認し、必要なら WAF Managed Rules の設定を調整します。たとえば、1 本のルールを無効にする、またはアクションを変える オーバーライドを追加 できます。
-
アップグレードを完了し、旧 WAF マネージドルールを無効にするには、ステップ 2 で取得し、必要ならステップ 3 で調整した設定を、新しい WAF に適用します。クエリ文字列パラメーター
waf_migration=pending&phase_two=1を必ず含めます。curl --request PUT \ "https://api.cloudflare.com/client/v4/zones/{zone_id}/rulesets/phases/http_request_firewall_managed/entrypoint?waf_migration=pending&phase_two=1" \ --header "Authorization: Bearer <API_TOKEN>" \ --header "Content-Type: application/json" \ --data '{ "name": "default", "rules": [ { "id": "", "version": "", "action": "execute", "expression": "true", "description": "", "ref": "", "enabled": true, "action_parameters": { "id": "efb7b8c949ac4650a09736fc376e9aee", "overrides": { "rules": [ { "id": "23ee7cebe6e8443e99ecf932ab579455", "action": "log", "enabled": false } ] } } } ] }'
提供した設定が保存され、新しい WAF Managed Rules が有効になると、waf_migration=pending&phase_two=1 パラメーターがあるため、旧バージョンの WAF マネージドルールは自動で無効になります。更新中も、いずれかの WAF バージョンでゾーンが保護されたままになります。
Enterprise のお客様は、WAF アップグレードの 検証モード で、新しい WAF Managed Rules 設定の動作を確認できます。新しい WAF 設定をデプロイすると、Cloudflare は検証モードを有効にします。このモードでは旧 WAF バージョンも有効なままなので、アップグレード中に新しい設定の動作を検証できます。新しい WAF Managed Rules は、旧バージョンより先に実行されます。
検証モード中に Security Events の sampled logs を開き、次を確認します。
-
新しい WAF が許可し、旧 WAF バージョンが処理しているリクエスト(challenge や block など)がないかを探します。ある場合は、特定したリクエストを扱う ファイアウォールルール または WAF カスタムルール の作成を検討します。
-
新しい WAF がブロックしている正当なリクエストがないかを探します。ある場合は、それらのリクエストをブロックしている WAF マネージドルールを編集し、実行するアクションを変えるか、ルールを無効にします。詳しくは マネージドルールセットを設定する を参照してください。
Business と Professional のお客様は検証モードを使えません。新しい WAF Managed Rules へアップグレードしたあとに、新しい WAF の動作を確認します。
アップグレード後の数日間、Security Events の sampled logs を確認し、WAF Managed Rules が正当なリクエストをブロックしていないかを探します。誤ってブロックされたリクエストがあれば、該当する WAF ルールのアクションを Log に変更します。マネージドルールセット内の個別ルールのアクション変更については、マネージドルールセットの個別ルールを設定する を参照してください。
あわせて、本来ブロックされるべきリクエストも確認します。ある場合は、それらのリクエストをブロックする ファイアウォールルール または WAF カスタムルール の作成を検討します。
API で新しい WAF Managed Rules へアップグレードするには、次の API 操作を呼び出します。
| 名前 | Method + Endpoint | 説明 |
|---|---|---|
| Check WAF update compatibility |
GET /zones/<ZONE_ID>/waf_migration/check?phase_two=1 |
現在の設定のまま、ゾーンを新しい WAF へ更新できるかを確認します。 |
| Get new WAF configuration |
GET /zones/<ZONE_ID>/waf_migration/config?phase_two=1 |
現在の設定(旧バージョンの WAF マネージドルール)に相当する、新しい WAF Managed Rules の設定を取得します。 |
| Update zone entry point ruleset |
PUT /zones/<ZONE_ID>/rulesets/ phases/http_request_firewall_managed/entrypoint?waf_migration=<VALUE>&phase_two=1 |
http_request_firewall_managed フェーズのゾーンエントリポイントルールセットの設定を更新します。waf_migration クエリ文字列パラメーターの値:– pending / 1: 新しい WAF Managed Rules の設定を定義し、提供した設定が保存されて新しい WAF が有効になると、旧バージョンの WAF マネージドルールを無効にします。– validation / 2: (Enterprise ゾーンのみ)新しい WAF Managed Rules の設定を定義し、旧バージョンと並行して新しい WAF Managed Rules を有効にし、検証モードに入ります。検証モードを終えてアップグレードを完了するには、同じ API エンドポイントを waf_migration=pending で呼び出します。 |
| Get WAF status | GET /zones/<ZONE_ID>/waf_migration/status |
ゾーンの旧・新 WAF マネージドルールの状態(有効 / 無効)を取得します。レスポンスには、現在のアップグレード状態(またはモード)も含まれます。 |
上のエンドポイントの先頭に、Cloudflare API のベース URL を付けて完全なエンドポイントにします。
https://api.cloudflare.com/client/v4
次のエラーについては、Cloudflare Support に問い合わせてください。
- 移行するファイアウォールルール数が 200 を超えている。
- ファイアウォールルール式の長さが 4 KB を超えている。
WAF パッケージ、ルールグループ、ルールを管理していた旧 API の代わりに、WAF Managed Rules のプログラム設定には Rulesets API を使います。
デフォルトの WAF Managed Rules 設定の上に適用する変更を指定する オーバーライド も作成できます。これらの変更は、マネージドルールセットのデフォルト動作より優先されます。
詳しくは次のリソースを参照してください。
WAF パッケージ、ルールグループ、ルールを管理していた旧リソースの代わりに、WAF Managed Rules の設定には cloudflare_ruleset ↗ Terraform リソースを使います。設定例は Terraform による WAF Managed Rules の設定 を参照してください。
アップグレード後、cf-terraforming ↗ ツールで、新しい WAF Managed Rules 設定の Terraform 構成を生成できます。そのあと、新しいリソースを Terraform の状態へインポートします。
Terraform 内の旧 WAF マネージドルール設定を、新しい WAF Managed 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_managed" zone_id = "<ZONE_ID>" rules { [...] } [...] } [...] -
前のコマンドは、Ruleset Engine を使うほかの Cloudflare 製品のルールセット設定も返すことがあります。探しているのは WAF Managed Rules の設定なので、
http_request_firewall_managedフェーズの 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_waf_package.my_package: Refreshing state... [id=14a2524fd75c419f8d273116815b6349] cloudflare_waf_group.my_group: Refreshing state... [id=0580eb5d92e344ddb2374979f74c3ddf] [...] -
Terraform の状態から、旧バージョンの WAF マネージドルールに関する状態を取り除きます。
-
次のコマンドを実行し、旧バージョンの WAF マネージドルールに関するすべてのリソースを探します。
terraform state list | grep -E '^cloudflare_waf_(package|group|rule)\.'cloudflare_waf_package.my_package cloudflare_waf_group.my_group -
変更を加えずに影響を把握するため、
terraform state rm ...コマンドをドライランで実行します。terraform state rm -dry-run cloudflare_waf_package.my_package cloudflare_waf_group.my_groupWould remove cloudflare_waf_package.my_package Would remove cloudflare_waf_group.my_group -
影響が正しければ、
-dry-runパラメーターなしで同じコマンドを実行し、Terraform の状態からリソースを実際に取り除きます。terraform state rm cloudflare_waf_package.my_package cloudflare_waf_group.my_groupRemoved cloudflare_waf_package.my_package Removed cloudflare_waf_group.my_group Successfully removed 2 resource instance(s).
-
-
Terraform の状態から WAF パッケージ、グループ、ルールのリソースを取り除いたあと、
.tf設定ファイルからcloudflare_waf_package、cloudflare_waf_group、cloudflare_waf_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 ツールの詳細は、次のリソースを参照してください。
パラノイアレベル の概念は、WAF マネージドルールで使っていた OWASP バージョン(2.x)にはありませんでした。OWASP ガイドの推奨に基づき、WAF 移行処理は Cloudflare OWASP Core Ruleset のパラノイアレベルを PL2 に設定します。
Page Rules では、新しいバージョンの WAF Managed Rules を無効にできません。Page Rules の Web Application Firewall: Off 設定は、旧バージョンの WAF マネージドルールにだけ適用されます。新しい WAF Managed Rules を無効にするには、例外(スキップルールとも呼ばれます)を設定します。