从 2022-05-04 开始,Cloudflare 启动了从旧版本 WAF 受管规则到新版本的 WAF 受管规则 的升级流程,允许部分符合条件的区域先行迁移。当前所有区域都可以升级到 WAF 受管规则,包括合作伙伴账号。
Cloudflare 正在分阶段逐步将所有区域升级到新版本的 WAF 受管规则。您也可以在 Cloudflare 仪表板或通过 API 手动启动某个区域的升级。该升级是不可逆的——一旦升级到新版本,不能再返回旧版。
如果您正在使用旧版仪表板,升级完成后,您的规则将以不同的界面显示在 Security(安全) > WAF(Web 应用防火墙) > Managed rules(受管规则) 页签。若您使用新版安全中心,升级后的规则将显示在 Security(安全) > Security rules(安全规则) 中。
此外,升级后,WAF 受管规则相关 API 将停止工作。
新版本的 WAF 受管规则相比旧版本提供以下优势:
-
新匹配引擎 - WAF 受管规则由规则引擎驱动,可实现更快的规则发布,并可在无扩缩容瓶颈的情况下检查更多流量。规则语法与 WAF 自定义规则等其他 Cloudflare 安全产品保持一致。
已更新的受管规则集 - Cloudflare OWASP Core Ruleset(Cloudflare OWASP 核心规则集)是 WAF 受管规则集之一,基于最新版 OWASP Core Ruleset(v3.x),相比旧版 WAF 受管规则(2.x)新增了偏执级别并改善了误报率。您还可以更精细地控制敏感度分数,并清楚看到每条规则对分数的贡献以及触发请求的总分。
-
更好的规则浏览与配置 - 通过单击即可部署受管规则集以获取即时保护。可覆盖整个规则集的行为,也可以针对单条规则进行自定义。通过对带有特定标签的规则应用覆盖,可调整适用于特定软件或攻击向量的规则。您可以配置如下内容:
- 在所有区域中部署 Cloudflare 受管规则集。
- 在路径中不包含
/api/*的所有流量上部署 Cloudflare OWASP Core Ruleset。 - 针对来自我方 IP 的流量,在我的账号范围内禁用受管规则集。
如需了解 WAF 受管规则的更多优势,请参阅博客文章 ↗。
您可以升级所有没有基于 URI 的 WAF 覆盖规则(仅通过 API 管理)的区域。迁移到新版本后,同等级别的保护会应用到您的区域。
旧版 WAF 受管规则中的大多数配置会升级到新版本,但部分在 OWASP ModSecurity Core Rule Set 中定义的特定配置将会丢失;如有需要,请在新 WAF 受管规则中重新创建这些配置。
对于 API 用户,旧版 WAF 受管规则管理 API 在升级后也会失效,您必须改用 Rulesets API 管理新的 WAF 受管规则。
升级过程将为以下 WAF 受管规则配置项创建等价配置:
- 设置了 Bypass > WAF Managed Rules 的防火墙规则。
- 配置了 Disable Security 的页面规则。
- 配置了 Web Application Firewall: Off 或 Web Application Firewall: On 的页面规则。
OWASP 规则集配置将被部分升级。详见下一节说明。
升级过程将部分迁移旧版 WAF 受管规则中的 OWASP ModSecurity Core Rule Set 配置。
以下 OWASP 配置会被迁移:
敏感度:旧的敏感度值将迁移为新 OWASP 中对应的 偏执级别(PL)与分数阈值组合:
旧敏感度 新 OWASP 中的 PL 新 OWASP 中的分数阈值 High PL2 Medium – 40 或更高 Medium PL1 High – 25 或更高 Low PL1 Medium – 40 或更高 Default PL2 Medium – 40 或更高 -
操作:旧 OWASP 规则集中的操作与新 OWASP 受管规则集几乎一一对应,唯独
_Simulate_操作会迁移为_Log_。
以下 OWASP 配置不会被迁移,因为两版本规则之间没有直接对应关系:
- OWASP 分组覆盖
- OWASP 规则覆盖
如需替代这些设置,您需要根据需求在新 WAF 中再次配置 Cloudflare OWASP Core Ruleset,例如进行任意标签/规则级别的覆盖。更多新 OWASP Core Ruleset 配置信息,请参阅Cloudflare OWASP Core Ruleset。
若区域存在基于 URI 的 WAF 覆盖(仅 API 可见),您将无法选择升级到新 WAF 受管规则。要升级到 WAF 受管规则,请先执行以下操作:
- 使用删除 WAF 覆盖操作删除所有现有的基于 URI 的 WAF 覆盖。
- 按下文描述的流程继续升级。
升级完成后,Cloudflare 仪表板中的规则显示方式如下:
- 旧版仪表板:Security(安全) > WAF(Web 应用防火墙) > Managed rules(受管规则) 页签(不同的用户界面)
- 新版仪表板:Security(安全) > Security rules(安全规则)
与旧版 WAF 受管规则不同,新版本不再提供全局开关来一键启用/关闭 WAF。您需要在各个区域分别部署每个受管规则集。
如需了解在 Cloudflare 仪表板中部署 WAF 受管规则集的方法,请参阅在仪表板中部署 WAF 受管规则集。
升级完成后,以下用于交互 WAF 受管规则的 API 将停止工作:
要使用 WAF 受管规则,请改用 Rulesets API。关于通过 API 部署 WAF 受管规则的说明,请参阅通过 API(区域级)部署 WAF 受管规则。
升级完成后,以下用于配置 WAF 受管规则的 Terraform 资源将停止工作:
这些资源仅在 Terraform Cloudflare Provider 的 3.35 版本及以前可用。4.x 版本中不再支持这些资源 ↗。
要使用 Terraform 管理新 WAF 受管规则,请改用 cloudflare_ruleset ↗ 资源。
在第二阶段,所有区域都可升级。具体升级流程会依据 Cloudflare 订阅计划有所不同。
-
Pro 与 Business 用户可以在 Cloudflare 仪表板或通过 API 升级到新 WAF 受管规则。启用新版本后,旧版 WAF 受管规则将被自动禁用。
-
Enterprise 用户可以在保留旧版 WAF 受管规则开启的前提下启用新 WAF 受管规则配置,以便先观察新配置的影响。确认新配置行为并完成必要调整后,Enterprise 用户可继续完成升级,此时旧版 WAF 受管规则会被禁用。
注意: 拥有基于 URI 的 WAF 覆盖(仅 API 可管理)的区域不会立即可升级到新 WAF 受管规则。必须先删除这些覆盖,再执行迁移。
第一阶段仅向部分符合条件的区域开放。区域必须同时满足以下要求:
-
区域满足以下任一:
- WAF 已禁用,或
- WAF 已启用且仅启用了 Cloudflare 受管规则集(OWASP ModSecurity Core Rule Set 必须禁用)。
-
区域中不存在绕过、启用或禁用 WAF 受管规则的防火墙规则或页面规则:
- 配置了 Bypass > WAF Managed Rules 的防火墙规则。
- 配置了 Disable Security 的页面规则。
- 配置了 Web Application Firewall: Off 或 Web Application Firewall: On 的页面规则。
-
区域不存在基于 URI 的 WAF 覆盖(仅 API 可用)。
您可以在 Cloudflare 仪表板或通过 API 发起 WAF 升级。
-
登录 Cloudflare 仪表板 ↗,选择您的账号和区域。
-
A)如果您使用的是旧版仪表板:
- 前往 Security(安全) > WAF(Web 应用防火墙) > Managed rules(受管规则) 页签。
B)如果您使用的是新版安全中心:
-
进入 Security rules(安全规则) 页面。
Go to Security rules ↗ -
选择 Go to upgrade your Managed rules(前往升级受管规则)。
Enterprise 客户会看到以下提示横幅:
专业版/商务版客户会看到以下提示横幅:

-
在升级横幅中,选择 Review configuration(审核配置)。该横幅仅在可升级区域显示。
-
审核建议的 WAF 配置。您可以据此调整配置,例如编辑 WAF 受管规则配置或创建例外以跳过某些规则集或单条规则的执行。
-
审核完成后,选择 Deploy(部署) 部署新的 WAF 受管规则配置。
对于商务版(Business)和专业版(Professional)客户,Cloudflare 会先部署新的 WAF 配置,再禁用旧版本 WAF。升级通常需要几分钟。
对于 Enterprise 客户,选择 Deploy(部署) 时两个 WAF 实现会同时启用,以便您验证新配置。相关操作请参阅下一节内容。
对 Enterprise 客户而言,部署新 WAF 配置后两个 WAF 实现会同时启用。在此阶段(即验证模式)下,您可在 Cloudflare 仪表板访问两套 WAF 受管规则,这两个实现会持续显示升级横幅直至升级完成。新 WAF 受管规则会先于旧版本执行。
-
使用当前验证模式,在 安全事件(Security Events) 中检查新 WAF 配置的行为。更多信息请参阅在安全事件中分析新 WAF 行为。
-
在两套 WAF 同时开启时完成校验后,在升级横幅中选择 Ready to update(准备更新),然后选择 Turn off previous version(关闭旧版)。该操作会完成升级,并禁用旧版 WAF。
当升级完成后,仪表板会将所有已升级的规则展示在:
- 旧版仪表板:Security(安全) > WAF(Web 应用防火墙) > Managed rules(受管规则) 页签
- 新版仪表板:Security(安全) > Security rules(安全规则)
如需确认升级是否完成,可刷新仪表板。
-
使用[检查 WAF 更新兼容性]操作(查看 API 操作说明)判断当前配置下区域是否具备升级条件:
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 配置]操作(查看 API 操作说明)获取与您当前配置对应的新 WAF 配置:
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 受管规则集的规则(规则集 ID:efb7b8c949ac4650a09736fc376e9aee)。
- 在同一规则集内对规则
Apache Struts - Open Redirect - CVE:CVE-2013-2248(规则 ID23ee7cebe6e8443e99ecf932ab579455)的单条覆盖,操作设置为log且禁用该规则。
-
(可选,仅 Enterprise 客户)如果您要将 Enterprise 区域升级到 WAF 受管规则,可先进入验证模式再完成升级。该模式下两套 WAF 会同时启用。使用更新区域入口规则集操作时,请确保包含查询字符串参数
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 受管规则配置做必要调整。例如,您可以为单条规则添加覆盖以禁用该规则或修改其操作。
-
要完成升级并禁用旧版 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 后,由于携带 waf_migration=pending&phase_two=1 参数,旧版 WAF 将被自动禁用。该参数可确保升级过程中始终有一套 WAF 处于保护状态。
Enterprise 客户请使用 WAF 升级流程中的验证模式来检查新 WAF 受管规则配置。Cloudflare 在您部署新 WAF 配置后会启用验证模式,旧版 WAF 在此期间仍保持启用,以便在升级过程中验证新配置行为。新 WAF 受管规则会先于旧版执行。
在验证模式下前往安全事件的抽样日志,并检查以下内容:
-
查找新 WAF 允许但旧版 WAF 仍处理的请求(例如触发了挑战或拦截)。如出现此类情况,请考虑编写防火墙规则或WAF 自定义规则来处理这些请求。
-
查找新 WAF 拦截的合法请求。在这种情况下,请编辑对应的 WAF 受管规则,调整执行操作或禁用该规则。更多信息请参阅配置受管规则集。
Business 与 Professional 客户没有验证模式,因此只能在升级到新 WAF 受管规则后观察其行为。
在升级后的几天内,前往安全事件的抽样日志,查找是否有合法请求被新 WAF 拦截。若发现误拦截请求,请将对应 WAF 规则动作调整为 Log。更多关于修改受管规则集单条规则动作的信息,请参阅配置受管规则集中的单条规则。
同时,还应检查本应被拦截却未被拦截的请求;如有此类情况,请考虑创建防火墙规则或WAF 自定义规则来拦截这些请求。
通过 API 升级到新 WAF 受管规则需要调用以下 API:
| 名称 | 方法 + Endpoint | 描述 |
|---|---|---|
| 检查 WAF 升级兼容性 | GET /zones/<ZONE_ID>/waf_migration/check?phase_two=1 |
根据当前配置检查区域是否可升级到新 WAF。 |
| 获取新 WAF 配置 | GET /zones/<ZONE_ID>/waf_migration/config?phase_two=1 |
获取与当前(旧版 WAF)配置等效的新 WAF 受管规则配置。 |
| 更新区域 入口规则集 |
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 受管规则配置,并在新 WAF 保存并启用后立即禁用旧版 WAF。– validation / 2:仅 Enterprise 区域可用,定义新 WAF 受管规则配置,并在验证模式下与旧版并行启用。要退出验证模式并完成升级,请用同一 API 并将 waf_migration 设为 pending。 |
| 获取 WAF 状态 | GET /zones/<ZONE_ID>/waf_migration/status |
获取区域旧版与新版 WAF 受管规则的启用状态(启用/停用)。响应中还会包含当前升级状态(模式)。 |
您需要在上述端点(endpoint)前加上 Cloudflare API 基础地址,才能形成完整地址:
https://api.cloudflare.com/client/v4
如需以下错误的协助,请联系Cloudflare 支持:
- 需要迁移的防火墙规则数量超过 200 条。
- 某条防火墙规则表达式长度超过 4 KB。
您不应再使用旧版管理 WAF package、rule group 和 rule 的 API,而应改用 Rulesets API 以编程方式配置 WAF 受管规则。
您还可以创建覆盖以指定在默认 WAF 受管规则配置基础上执行的调整。这些调整会高于规则集默认行为生效。
您还可以参考以下资源:
您不应再使用旧资源管理 WAF package、rule group 和 rule,而应改用 cloudflare_ruleset ↗ Terraform 资源来配置 WAF 受管规则。配置示例可参考使用 Terraform 配置 WAF 受管规则集。
完成升级后,您可使用 cf-terraforming ↗ 工具生成新的 WAF 受管规则 Terraform 配置,再将新资源导入 Terraform state。
替换旧 WAF 受管规则 Terraform 配置为新基于 ruleset 的 WAF 受管规则配置,建议按以下步骤进行:
-
运行以下命令生成某个区域的所有 ruleset 配置:
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 产品的 ruleset 配置。由于您要获取的是 WAF 受管规则配置,请仅保留
http_request_firewall_managed阶段对应的cloudflare_ruleset资源,并将其保存为.tf配置文件。下一步需要完整的资源名称。 -
使用
terraform import命令将上一步识别到的cloudflare_ruleset导入 Terraform state,例如:terraform import cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31 zone/<ZONE_ID>/3c0b456bc2aa443089c5f40f45f51b31cloudflare_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 state,并由 Terraform 进行管理。 -
运行
terraform plan验证 Terraform state 中是否加入了新的cloudflare_ruleset资源,并确认与现有资源共同存在。例如:terraform plancloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31:正在刷新状态... [id=3c0b456bc2aa443089c5f40f45f51b31] [...] cloudflare_waf_package.my_package:正在刷新状态... [id=14a2524fd75c419f8d273116815b6349] cloudflare_waf_group.my_group:正在刷新状态... [id=0580eb5d92e344ddb2374979f74c3ddf] [...] -
从 Terraform state 中移除旧版 WAF 受管规则相关资源:
-
运行以下命令查找所有旧版 WAF 受管规则相关资源:
terraform state list | grep -E '^cloudflare_waf_(package|group|rule)\.'cloudflare_waf_package.my_package cloudflare_waf_group.my_group -
先以 dry-run 模式运行
terraform state rm ...,确认移除影响:terraform state rm -dry-run cloudflare_waf_package.my_package cloudflare_waf_group.my_group将移除 cloudflare_waf_package.my_package 将移除 cloudflare_waf_group.my_group -
若影响预期,则去掉
-dry-run参数正式执行:terraform state rm cloudflare_waf_package.my_package cloudflare_waf_group.my_group已移除 cloudflare_waf_package.my_package 已移除 cloudflare_waf_group.my_group 已成功移除 2 个资源实例。
-
-
在从 Terraform state 移除 WAF package、group 和 rule 资源后,从
.tf配置文件中删除cloudflare_waf_package、cloudflare_waf_group和cloudflare_waf_rule资源。 -
再次运行
terraform plan,确认已删除的资源不再出现。此时不应再有待处理变更:terraform plancloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31:正在刷新状态... [id=3c0b456bc2aa443089c5f40f45f51b31] [...] 无变更。您的基础设施与配置一致。 Terraform 已将当前基础设施与配置进行对比,未发现差异,因此无需进行变更。
关于将 Cloudflare 资源导入 Terraform 以及 cf-terraforming 工具用法,参见:
OWASP 版的 偏执级别 在旧版 WAF 受管规则中并不存在。根据 OWASP 指南建议,WAF 迁移过程中会将 Cloudflare OWASP Core Ruleset 的偏执级别设置为 PL2。
您不能使用页面规则禁用新版本 WAF 受管规则,因为页面规则中的 Web Application Firewall: Off 仅适用于旧版 WAF 受管规则。要禁用新 WAF 受管规则,请配置例外(也称为跳过规则)。