跳转到内容
搜索文档

Cloudflare 托管规则集

最后更新 查看 MarkdownAgent 设置

由 Cloudflare 安全团队创建,此规则集可为您的所有应用提供快速有效的防护。该规则集会频繁更新,以覆盖新漏洞并减少误报。

Cloudflare 建议您启用标签与您的技术栈对应的规则。例如,若您使用 WordPress,请启用带有 wordpress 标签的规则。

Cloudflare 的 WAF 更新日志 可帮助您持续监控 WAF 托管规则集的变更。

部署 Cloudflare 托管规则集

  1. 在 Cloudflare 仪表板中,转到安全 Settings(设置) 页面。

    Go to Settings ↗
  2. (可选)按 Web application exploits(Web 应用漏洞利用) 进行筛选。

  3. 开启 Cloudflare managed ruleset。

  4. 审查部署设置。如有必要,编辑范围以将规则集应用于传入请求的子集,或配置任何自定义设置(也称为重写)。

  5. 选择 Save(保存)。

  1. 登录到 Cloudflare 仪表板 ↗,然后选择您的账户和域。
  2. 转到 Security(安全性) > WAF > Managed rules 选项卡。
  3. 在 Managed Rulesets 下,选择 Cloudflare Managed Ruleset 旁的 Deploy。

此操作为当前区域部署托管规则集,并创建一个具有 Execute 操作的新规则。

在仪表板中配置

您可以在多个级别配置(或覆盖)Cloudflare 托管规则集,从而覆盖其默认配置:

当您在不同级别创建多个覆盖时,更具体的配置(标签与规则级别)优先于较不具体的配置(规则集级别)。更多信息请参阅 Ruleset Engine 文档中的 覆盖托管规则集。

Ruleset 级别配置

您可以在 Cloudflare 仪表板中配置(或覆盖)以下 Cloudflare 托管规则集设置:

  • Scope(作用域):当您为作用域定义自定义过滤表达式时,Cloudflare 托管规则集仅应用于部分传入请求。默认情况下,在仪表板中部署的托管规则集会应用于所有传入流量。

  • Ruleset action(规则集操作):当您为规则集定义操作时,会覆盖为每条规则定义的默认操作。可用操作包括:Block、Log、Non-Interactive Challenge、Managed Challenge 与 Interactive Challenge。 要移除规则集级别的操作覆盖,请将规则集操作设为 Default(默认)。

  • Ruleset status(规则集状态):启用或禁用规则集中的所有规则。

  • 载荷日志记录:启用后,会记录触发托管规则集中特定规则的请求信息(载荷)。您必须配置公钥以加密载荷。

在部署 Cloudflare 托管规则集 后,按以下步骤在仪表板中进行配置:

  1. 在 Cloudflare 仪表板中,前往 Security rules(安全规则) 页面。

    Go to Security rules ↗
  2. (可选)按 Managed rules 筛选。

  3. 搜索 Cloudflare Managed Ruleset。查找带有 Execute 操作的规则。

  4. 选择规则名称(包含托管规则集的名称)以打开部署配置页面。

  5. (可选)要仅为部分入站请求执行 Cloudflare Managed Ruleset,请选择 Edit scope(编辑作用域) 并 配置表达式,以确定部署该托管规则集的当前规则的作用域。

  6. 在规则集配置部分,通过使用下拉列表设置一个或多个字段,为 Cloudflare Managed Ruleset 中的所有规则定义设置。

    例如,选择对规则集中所有规则执行的操作。

    配置部署页面,显示用于覆盖 Cloudflare Managed Ruleset 中所有规则的可用选项:规则集操作和规则集状态。
  7. 选择 Save(保存)。

  1. 登录 Cloudflare 仪表板 ↗,并选择您的账户和域名。

  2. 前往 Security(安全性) > WAF > Managed rules 选项卡。

  3. 在部署 Cloudflare Managed Ruleset 的 Execute 规则旁,选择托管规则集名称。
    如果尚未部署该托管规则集,请在 Managed Rulesets 下选择 Cloudflare Managed Ruleset。

  4. (可选)要仅为部分入站请求执行 Cloudflare Managed Ruleset,请选择 Edit scope(编辑作用域) 并 配置表达式,以确定部署该托管规则集的当前规则的作用域。

  5. 在 Ruleset configuration 下,使用下拉列表为 Cloudflare Managed Ruleset 中的所有规则定义设置。

    例如,选择对规则集中所有规则执行的操作。

    配置部署页面,显示用于覆盖 Cloudflare Managed Ruleset 中所有规则的可用选项:规则集操作和规则集状态。
  6. 如果尚未部署 Cloudflare Managed Ruleset:

    • 选择 Deploy(部署) 以立即部署规则集。
    • 选择 Save as Draft(保存为草稿) 以保存部署设置供稍后使用。

    如果您正在编辑已部署的托管规则集,请选择 Save(保存)。

标签级别配置

您可以在仪表板中,为至少带有所选标签之一的规则配置(或覆盖)以下 Cloudflare 托管规则集设置:

  • Rule action(规则操作):为所有带有所选标签的规则设置规则操作。可用操作包括:Block、Log、Non-Interactive Challenge、Managed Challenge 与 Interactive Challenge。

  • Rule status(规则状态):为所有带有所选标签的规则设置规则状态。

在部署 Cloudflare 托管规则集 后,按以下步骤在仪表板中配置带有特定标签的规则:

  1. 在 Cloudflare 仪表板中,前往 Security rules(安全规则) 页面。

    Go to Security rules ↗
  2. (可选)按 Managed rules 筛选。

  3. 搜索 Cloudflare Managed Ruleset。查找动作为 Execute 的规则。

  4. 选择规则名称(包含托管规则集的名称),然后选择 Browse rules(浏览规则)。

    Cloudflare 仪表板显示 Cloudflare Managed Ruleset 中的规则列表。
  1. 在搜索输入框下方选择一个或多个标签,以筛选具有这些标签的规则,然后选择表格左上角的复选框,以选择当前页面中显示的所有规则。
    如果当前页面未显示所有规则,您可以通过选择 Select all <NUMBER> rules(选择全部 <NUMBER> 条规则),将选择范围扩展到所有页面上具有所选标签的所有规则。

    “配置部署”页面,显示 Cloudflare 托管规则集中带有 'sqli' 标签的选中规则。
  2. 使用表格右上角显示的按钮(例如 Set status)更新所选规则的一个或多个设置。

  3. 选择 Next(下一步)。

  4. 将弹出一个对话框,询问您是否应使用所选的字段值配置任何具有所选标签的新规则。

    • 如果您想将配置应用于具有所选标签的任何新规则,请选择 Include new rules(包含新规则)。
    • 选择 Only selected rules(仅所选规则) 以仅将配置应用于所选规则。
  5. 选择 Save(保存)。

  1. 登录到 Cloudflare 仪表板 ↗,然后选择您的账户和域。

  2. 转到 Security(安全性) > WAF > Managed rules 选项卡。

  3. 如果您已部署 Cloudflare Managed Ruleset,请在已部署托管规则集列表中选择该规则集名称。或者,在部署 Cloudflare Managed Ruleset 的 Execute 规则旁,选择三个点 > Edit(编辑)。

    如果您尚未部署该托管规则集,请在 Managed Rulesets 下选择 Cloudflare Managed Ruleset。

  4. 选择 Browse rules(浏览规则)。

    “配置部署”页面,显示 Cloudflare 托管规则集中的规则。
  1. 在搜索输入框下方选择一个或多个标签,以筛选具有这些标签的规则,然后选择表格左上角的复选框,以选择当前页面中显示的所有规则。
    如果当前页面未显示所有规则,您可以通过选择 Select all <NUMBER> rules(选择全部 <NUMBER> 条规则),将选择范围扩展到所有页面上具有所选标签的所有规则。

    “配置部署”页面,显示 Cloudflare 托管规则集中带有 'sqli' 标签的选中规则。
  2. 使用表格右上角显示的按钮(例如 Set status)更新所选规则的一个或多个设置。

  3. 选择 Next(下一步)。

  4. 将弹出一个对话框,询问您是否应使用所选的字段值配置任何具有所选标签的新规则。

    • 如果您想将配置应用于具有所选标签的任何新规则,请选择 Include new rules(包含新规则)。
    • 选择 Only selected rules(仅所选规则) 以仅将配置应用于所选规则。
  5. 选择 Save(保存)。

规则级别配置

您可以在仪表板中,为所选规则配置(或覆盖)以下 Cloudflare 托管规则集设置:

  • Rule action(规则操作):设置单条规则的操作;若选择多条规则,则为所选规则设置操作。可用操作包括:Block、Log、Non-Interactive Challenge、Managed Challenge 与 Interactive Challenge。 更改规则配置后,您可以选择将配置重置为 Cloudflare 托管规则集中定义的默认配置。

  • Rule status(规则状态):设置单条规则的状态(启用或禁用);若选择多条规则,则为所选规则设置状态。

在部署 Cloudflare 托管规则集 后,按以下步骤在仪表板中配置规则集中的单条规则:

  1. 在 Cloudflare 仪表板中,前往 Security rules(安全规则) 页面。

    Go to Security rules ↗
  2. (可选)按 Managed rules 筛选。

  3. 搜索 Cloudflare Managed Ruleset。查找动作为 Execute 的规则。

  4. 选择规则名称(包含托管规则集的名称),然后选择 Browse rules(浏览规则)。

    Cloudflare 仪表板显示 Cloudflare Managed Ruleset 中的规则列表。
  1. 使用可用筛选器搜索规则。

  2. 在结果列表中,使用显示的下拉列表和开关根据需要更改每个规则的值。例如,使用规则旁的 Status(状态) 开关更改规则的状态。

    要使用相同的值配置多个规则,请选中您要配置的所有规则的复选框。如果当前页面未显示所有规则,您可以通过选择 Select all <NUMBER> rules(选择全部 <NUMBER> 条规则),将选择范围扩展到所有页面上的所有规则。然后,使用表格右上角显示的按钮(例如 Set status)更新所选规则的一个或多个字段。

    “配置部署”页面,显示 Cloudflare 托管规则集中的选中规则。
  3. 选择 Next(下一步),然后选择 Save(保存)。

  1. 登录到 Cloudflare 仪表板 ↗,然后选择您的账户和域。

  2. 转到 Security(安全性) > WAF > Managed rules 选项卡。

  3. 如果您已部署 Cloudflare Managed Ruleset,请在已部署托管规则集列表中选择该规则集名称。或者,在部署 Cloudflare Managed Ruleset 的 Execute 规则旁,选择三个点 > Edit(编辑)。

    如果您尚未部署该托管规则集,请在 Managed Rulesets 下选择 Cloudflare Managed Ruleset。

  4. 选择 Browse rules(浏览规则)。

    “配置部署”页面,显示 Cloudflare 托管规则集中的规则。
  1. 使用可用筛选器搜索规则。

  2. 在结果列表中,使用显示的下拉列表和开关根据需要更改每个规则的值。例如,使用规则旁的 Status(状态) 开关更改规则的状态。

    要使用相同的值配置多个规则,请选中您要配置的所有规则的复选框。如果当前页面未显示所有规则,您可以通过选择 Select all <NUMBER> rules(选择全部 <NUMBER> 条规则),将选择范围扩展到所有页面上的所有规则。然后,使用表格右上角显示的按钮(例如 Set status)更新所选规则的一个或多个字段。

    “配置部署”页面,显示 Cloudflare 托管规则集中的选中规则。
  3. 选择 Next(下一步),然后选择 Save(保存)。

通过 API 配置

要通过 API 为给定 zone 部署 Cloudflare 托管规则集,请在 http_request_firewall_managed 阶段的入口点规则集 中创建一条 execute 操作的规则。

示例

以下示例通过创建一个执行托管规则集的规则,将 Cloudflare Managed Ruleset 部署到给定区域($ZONE_ID)的 http_request_firewall_managed 阶段。

  1. 调用获取区域入口点规则集操作,以获取 http_request_firewall_managed 阶段的入口点规则集定义。您需要有区域 ID才能完成此任务。

    Get a zone entry point rulesetbash
    curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_request_firewall_managed/entrypoint" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
    {
    	"result": {
    		"description": "Zone-level phase entry point",
    		"id": "<RULESET_ID>",
    		"kind": "zone",
    		"last_updated": "2024-03-16T15:40:08.202335Z",
    		"name": "zone",
    		"phase": "http_request_firewall_managed",
    		"rules": [
    			// ...
    		],
    		"source": "firewall_managed",
    		"version": "10"
    	},
    	"success": true,
    	"errors": [],
    	"messages": []
    }
  2. 如果入口点规则集已存在(即,如果您收到 200 OK 状态代码和规则集定义),请记下响应中的规则集 ID。然后,调用创建区域规则集规则操作,向现有规则集中添加一条 execute 规则,以部署 Cloudflare Managed Ruleset(ID 为 efb7b8c949ac4650a09736fc376e9aee)。默认情况下,该规则将添加到规则集中已有规则列表的末尾。

    Create a zone ruleset rulebash
    curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"action": "execute",
    		"action_parameters": {
    				"id": "efb7b8c949ac4650a09736fc376e9aee"
    		},
    		"expression": "true",
    		"description": "Execute the Cloudflare Managed Ruleset"
    	}'
    {
    	"result": {
    		"id": "<RULESET_ID>",
    		"name": "Zone-level phase entry point",
    		"description": "",
    		"kind": "zone",
    		"version": "11",
    		"rules": [
    			// ... any existing rules
    			{
    				"id": "<RULE_ID>",
    				"version": "1",
    				"action": "execute",
    				"action_parameters": {
    					"id": "efb7b8c949ac4650a09736fc376e9aee",
    					"version": "latest"
    				},
    				"expression": "true",
    				"description": "Execute the Cloudflare Managed Ruleset",
    				"last_updated": "2024-03-18T18:08:14.003361Z",
    				"ref": "<RULE_REF>",
    				"enabled": true
    			}
    		],
    		"last_updated": "2024-03-18T18:08:14.003361Z",
    		"phase": "http_request_firewall_managed"
    	},
    	"success": true,
    	"errors": [],
    	"messages": []
    }
  3. 如果入口点规则集不存在(也就是说,如果您在步骤 1 中收到了 404 Not Found 状态码),请使用 创建区域规则集 操作来创建它。在 rules 数组中包含单个规则,该规则针对 区域中的所有传入请求 执行 Cloudflare Managed Ruleset(ID 为 efb7b8c949ac4650a09736fc376e9aee)。

    Create a zone rulesetbash
    curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "My ruleset",
    		"description": "Entry point ruleset for WAF managed rulesets",
    		"kind": "zone",
    		"phase": "http_request_firewall_managed",
    		"rules": [
    				{
    						"action": "execute",
    						"action_parameters": {
    								"id": "efb7b8c949ac4650a09736fc376e9aee"
    						},
    						"expression": "true",
    						"description": "Execute the Cloudflare Managed Ruleset"
    				}
    		]
    	}'

后续步骤

要通过 API 配置 Cloudflare Managed Ruleset,请使用 Rulesets API 创建 overrides。你可以执行以下配置:

  • 通过创建 ruleset override,为规则集中的所有规则指定要执行的操作。
  • 通过创建 rule override,禁用

    或自定义

    单个规则的操作。

有关使用 API 创建 overrides 的示例,请参阅 Override a managed ruleset。

更多资源

有关通过 API 使用托管规则集的更多信息,请参阅规则集引擎文档中的 使用托管规则集。

使用 Terraform 配置

以下示例为 zone 部署 Cloudflare 托管规则集,并覆盖特定规则的操作与状态。

Required API token permissions

至少需要以下 token 权限 之一:

  • Zone WAF Write

配置 cloudflare_ruleset ↗ 资源:

# Configure a ruleset at the zone level for the "http_request_firewall_managed" phase
resource "cloudflare_ruleset" "zone_level_managed_waf" {
  zone_id     = var.cloudflare_zone_id
  name        = "Managed WAF entry point ruleset"
  description = "Zone-level WAF Managed Rules config"
  kind        = "zone"
  phase       = "http_request_firewall_managed"

  # Execute Cloudflare Managed Ruleset
  rules = [{
    ref         = "execute_cloudflare_managed_ruleset"
    description = "Execute Cloudflare Managed Ruleset on my zone-level phase entry point ruleset"
    expression  = "true"
    action      = "execute"
    action_parameters = {
      id = "efb7b8c949ac4650a09736fc376e9aee"
      overrides = {
        rules = [{
          id      = "5de7edfa648c4d6891dc3e7f84534ffa"
          action  = "log"
          enabled = true
        }]
      }
    }
  }]
}
# Configure a ruleset at the zone level for the "http_request_firewall_managed" phase
resource "cloudflare_ruleset" "zone_level_managed_waf" {
  zone_id     = var.cloudflare_zone_id
  name        = "Managed WAF entry point ruleset"
  description = "Zone-level WAF Managed Rules config"
  kind        = "zone"
  phase       = "http_request_firewall_managed"

  # Execute Cloudflare Managed Ruleset
  rules {
    ref         = "execute_cloudflare_managed_ruleset"
    description = "Execute Cloudflare Managed Ruleset on my zone-level phase entry point ruleset"
    expression  = "true"
    action      = "execute"
    action_parameters {
      id = "efb7b8c949ac4650a09736fc376e9aee"
      overrides {
        rules {
          id      = "5de7edfa648c4d6891dc3e7f84534ffa"
          action  = "log"
          enabled = true
        }
      }
    }
  }
}

更多信息请参阅 WAF Managed Rules configuration using Terraform。

这篇文档对您有帮助吗?