跳转到内容
搜索文档

WAF 受管规则升级

最后更新 查看 MarkdownAgent 设置

从 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: OffWeb 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 受管规则,请先执行以下操作:

  1. 使用删除 WAF 覆盖操作删除所有现有的基于 URI 的 WAF 覆盖。
  2. 按下文描述的流程继续升级。

Cloudflare 仪表板变更

升级完成后,Cloudflare 仪表板中的规则显示方式如下:

  • 旧版仪表板:Security(安全) > WAF(Web 应用防火墙) > Managed rules(受管规则) 页签(不同的用户界面)
  • 新版仪表板:Security(安全) > Security rules(安全规则)

与旧版 WAF 受管规则不同,新版本不再提供全局开关来一键启用/关闭 WAF。您需要在各个区域分别部署每个受管规则集。

如需了解在 Cloudflare 仪表板中部署 WAF 受管规则集的方法,请参阅在仪表板中部署 WAF 受管规则集

API 变更

升级完成后,以下用于交互 WAF 受管规则的 API 将停止工作

要使用 WAF 受管规则,请改用 Rulesets API。关于通过 API 部署 WAF 受管规则的说明,请参阅通过 API(区域级)部署 WAF 受管规则

Terraform 变更

升级完成后,以下用于配置 WAF 受管规则的 Terraform 资源将停止工作

这些资源仅在 Terraform Cloudflare Provider 的 3.35 版本及以前可用。4.x 版本中不再支持这些资源

要使用 Terraform 管理新 WAF 受管规则,请改用 cloudflare_ruleset 资源。


可升级区域

第二阶段(自 2022-09-19 起)

在第二阶段,所有区域都可升级。具体升级流程会依据 Cloudflare 订阅计划有所不同。

  • ProBusiness 用户可以在 Cloudflare 仪表板或通过 API 升级到新 WAF 受管规则。启用新版本后,旧版 WAF 受管规则将被自动禁用。

  • Enterprise 用户可以在保留旧版 WAF 受管规则开启的前提下启用新 WAF 受管规则配置,以便先观察新配置的影响。确认新配置行为并完成必要调整后,Enterprise 用户可继续完成升级,此时旧版 WAF 受管规则会被禁用。

注意: 拥有基于 URI 的 WAF 覆盖(仅 API 可管理)的区域不会立即可升级到新 WAF 受管规则。必须先删除这些覆盖,再执行迁移。

第一阶段(自 2022-05-04 起)

第一阶段仅向部分符合条件的区域开放。区域必须同时满足以下要求:

  • 区域满足以下任一:

    • WAF 已禁用,或
    • WAF 已启用且仅启用了 Cloudflare 受管规则集(OWASP ModSecurity Core Rule Set 必须禁用)。
  • 区域中不存在绕过、启用或禁用 WAF 受管规则的防火墙规则页面规则

    • 配置了 Bypass > WAF Managed Rules 的防火墙规则。
    • 配置了 Disable Security 的页面规则。
    • 配置了 Web Application Firewall: OffWeb Application Firewall: On 的页面规则。
  • 区域不存在基于 URI 的 WAF 覆盖(仅 API 可用)。


开始升级

您可以在 Cloudflare 仪表板或通过 API 发起 WAF 升级。

使用仪表板

  1. 登录 Cloudflare 仪表板,选择您的账号和区域。

  2. A)如果您使用的是旧版仪表板:

    • 前往 Security(安全) > WAF(Web 应用防火墙) > Managed rules(受管规则) 页签。

    B)如果您使用的是新版安全中心

    1. 进入 Security rules(安全规则) 页面。

      Go to Security rules ↗
    2. 选择 Go to upgrade your Managed rules(前往升级受管规则)

    Enterprise 客户会看到以下提示横幅:

    Enterprise 客户看到的升级横幅。

    专业版/商务版客户会看到以下提示横幅:

    Pro/Business 客户看到的升级横幅。
  3. 在升级横幅中,选择 Review configuration(审核配置)。该横幅仅在可升级区域显示。

  4. 审核建议的 WAF 配置。您可以据此调整配置,例如编辑 WAF 受管规则配置或创建例外以跳过某些规则集或单条规则的执行。

  5. 审核完成后,选择 Deploy(部署) 部署新的 WAF 受管规则配置。

    对于商务版(Business)和专业版(Professional)客户,Cloudflare 会先部署新的 WAF 配置,再禁用旧版本 WAF。升级通常需要几分钟。

    对于 Enterprise 客户,选择 Deploy(部署) 时两个 WAF 实现会同时启用,以便您验证新配置。相关操作请参阅下一节内容。

验证新 WAF 配置并完成升级(仅 Enterprise 客户)

对 Enterprise 客户而言,部署新 WAF 配置后两个 WAF 实现会同时启用。在此阶段(即验证模式)下,您可在 Cloudflare 仪表板访问两套 WAF 受管规则,这两个实现会持续显示升级横幅直至升级完成。新 WAF 受管规则会先于旧版本执行。

  1. 使用当前验证模式,在 安全事件(Security Events) 中检查新 WAF 配置的行为。更多信息请参阅在安全事件中分析新 WAF 行为

  2. 在两套 WAF 同时开启时完成校验后,在升级横幅中选择 Ready to update(准备更新),然后选择 Turn off previous version(关闭旧版)。该操作会完成升级,并禁用旧版 WAF。

当升级完成后,仪表板会将所有已升级的规则展示在:

  • 旧版仪表板:Security(安全) > WAF(Web 应用防火墙) > Managed rules(受管规则) 页签
  • 新版仪表板:Security(安全) > Security rules(安全规则)

如需确认升级是否完成,可刷新仪表板。

使用 API

  1. 使用[检查 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,则表示由于当前配置该区域不满足升级条件。详见可升级区域

  2. 使用[获取新 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(规则 ID 23ee7cebe6e8443e99ecf932ab579455)的单条覆盖,操作设置为 log 且禁用该规则。
  1. (可选,仅 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 受管规则配置做必要调整。例如,您可以为单条规则添加覆盖以禁用该规则或修改其操作。

  2. 要完成升级并禁用旧版 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 处于保护状态。


在安全事件中分析新 WAF 行为

Enterprise 客户

Enterprise 客户请使用 WAF 升级流程中的验证模式来检查新 WAF 受管规则配置。Cloudflare 在您部署新 WAF 配置后会启用验证模式,旧版 WAF 在此期间仍保持启用,以便在升级过程中验证新配置行为。新 WAF 受管规则会先于旧版执行。

在验证模式下前往安全事件的抽样日志,并检查以下内容:

  • 查找新 WAF 允许但旧版 WAF 仍处理的请求(例如触发了挑战或拦截)。如出现此类情况,请考虑编写防火墙规则WAF 自定义规则来处理这些请求。

  • 查找新 WAF 拦截的合法请求。在这种情况下,请编辑对应的 WAF 受管规则,调整执行操作或禁用该规则。更多信息请参阅配置受管规则集

商务版与专业版客户

Business 与 Professional 客户没有验证模式,因此只能在升级到新 WAF 受管规则后观察其行为。

在升级后的几天内,前往安全事件的抽样日志,查找是否有合法请求被新 WAF 拦截。若发现误拦截请求,请将对应 WAF 规则动作调整为 Log。更多关于修改受管规则集单条规则动作的信息,请参阅配置受管规则集中的单条规则

同时,还应检查本应被拦截却未被拦截的请求;如有此类情况,请考虑创建防火墙规则WAF 自定义规则来拦截这些请求。


API 操作

通过 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。

补充资源

使用 Cloudflare API 配置新的 WAF 受管规则

您不应再使用旧版管理 WAF package、rule group 和 rule 的 API,而应改用 Rulesets API 以编程方式配置 WAF 受管规则。

您还可以创建覆盖以指定在默认 WAF 受管规则配置基础上执行的调整。这些调整会高于规则集默认行为生效。

您还可以参考以下资源:

使用 Terraform 配置新的 WAF 受管规则

您不应再使用旧资源管理 WAF package、rule group 和 rule,而应改用 cloudflare_ruleset Terraform 资源来配置 WAF 受管规则。配置示例可参考使用 Terraform 配置 WAF 受管规则集

使用 cf-terraforming 替换配置

完成升级后,您可使用 cf-terraforming 工具生成新的 WAF 受管规则 Terraform 配置,再将新资源导入 Terraform state。

替换旧 WAF 受管规则 Terraform 配置为新基于 ruleset 的 WAF 受管规则配置,建议按以下步骤进行:

  1. 运行以下命令生成某个区域的所有 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 {
        [...]
      }
      [...]
    }
    [...]
  2. 上一条命令可能会返回其他基于 Ruleset Engine 的 Cloudflare 产品的 ruleset 配置。由于您要获取的是 WAF 受管规则配置,请仅保留 http_request_firewall_managed 阶段对应的 cloudflare_ruleset 资源,并将其保存为 .tf 配置文件。下一步需要完整的资源名称。

  3. 使用 terraform import 命令将上一步识别到的 cloudflare_ruleset 导入 Terraform state,例如:

    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 state,并由 Terraform 进行管理。
  4. 运行 terraform plan 验证 Terraform state 中是否加入了新的 cloudflare_ruleset 资源,并确认与现有资源共同存在。例如:

    terraform plan
    
    cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31:正在刷新状态... [id=3c0b456bc2aa443089c5f40f45f51b31]
    [...]
    cloudflare_waf_package.my_package:正在刷新状态... [id=14a2524fd75c419f8d273116815b6349]
    cloudflare_waf_group.my_group:正在刷新状态... [id=0580eb5d92e344ddb2374979f74c3ddf]
    [...]
  5. 从 Terraform state 中移除旧版 WAF 受管规则相关资源:

    1. 运行以下命令查找所有旧版 WAF 受管规则相关资源:

      terraform state list | grep -E '^cloudflare_waf_(package|group|rule)\.'
      cloudflare_waf_package.my_package
      cloudflare_waf_group.my_group
    2. 先以 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
    3. 若影响预期,则去掉 -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 个资源实例。
  6. 在从 Terraform state 移除 WAF package、group 和 rule 资源后,从 .tf 配置文件中删除 cloudflare_waf_packagecloudflare_waf_groupcloudflare_waf_rule 资源。

  7. 再次运行 terraform plan,确认已删除的资源不再出现。此时不应再有待处理变更:

    terraform plan
    cloudflare_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 受管规则,请配置例外(也称为跳过规则)。

这篇文档对您有帮助吗?