跳转到内容
搜索文档

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(规则集操作):当您为规则集定义操作时,会覆盖为每条规则定义的默认操作。可用操作包括:BlockLogNon-Interactive ChallengeManaged ChallengeInteractive 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(规则操作):为所有带有所选标签的规则设置规则操作。可用操作包括:BlockLogNon-Interactive ChallengeManaged ChallengeInteractive 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(规则操作):设置单条规则的操作;若选择多条规则,则为所选规则设置操作。可用操作包括:BlockLogNon-Interactive ChallengeManaged ChallengeInteractive 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

这篇文档对您有帮助吗?