跳转到内容
搜索文档

通过 API 创建自定义规则

最后更新 查看 MarkdownAgent 设置

使用 Rulesets API 通过 API 在 zone 级别创建自定义规则。

您必须将自定义规则部署到 http_request_firewall_custom 阶段入口点规则集

如果使用 Terraform,请参阅 使用 Terraform 配置 WAF 自定义规则

创建自定义规则

要为 zone 创建 custom rule,请将规则 添加到 http_request_firewall_custom 阶段入口点规则集。

  1. 调用 Get a zone entry point ruleset 操作,获取 http_request_firewall_custom 阶段入口点规则集的定义。此任务需要 zone ID

  2. 如果入口点规则集已存在(即你收到 200 OK 状态码以及规则集定义),请记下响应中的规则集 ID。然后调用 Create a zone ruleset rule 操作,将 custom rule 添加到现有规则集。详情请参阅下方示例。

  3. 如果入口点规则集不存在(即在步骤 1 中收到 404 Not Found 状态码),请使用 Create a zone ruleset 操作创建它。将你的 custom rule 包含在 rules 数组中。示例请参阅 Create ruleset

示例 A

该示例请求向 zone ID 为 $ZONE_IDhttp_request_firewall_custom 阶段入口点规则集添加一条规则。入口点规则集已存在,ID 为 $RULESET_ID

新规则将成为规则集中的最后一条规则,会对来自英国或法国、且 attack score 低于 20 的请求进行 challenge。

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 '{
		"description": "My custom rule",
		"expression": "(ip.src.country eq \"GB\" or ip.src.country eq \"FR\") and cf.waf.score lt 20",
		"action": "challenge"
	}'

要为新规则定义特定位置,请根据更改规则集中的规则顺序中的指南,在请求正文中包含 position 对象。

有关通过单次 API 调用创建入口点规则集并定义其规则的说明,请参阅向阶段入口点规则集添加规则

示例 B

该示例请求向 zone ID 为 $ZONE_IDhttp_request_firewall_custom 阶段入口点规则集添加一条规则。入口点规则集已存在,ID 为 $RULESET_ID

新规则将成为规则集中的最后一条规则,并包含对已拦截请求的 自定义响应 定义。

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 '{
		"description": "My custom rule with plain text response",
		"expression": "(ip.src.country eq \"GB\" or ip.src.country eq \"FR\") and cf.waf.score lt 20",
		"action": "block",
		"action_parameters": {
				"response": {
						"status_code": 403,
						"content": "Your request was blocked.",
						"content_type": "text/plain"
				}
		}
	}'

要为新规则定义特定位置,请根据更改规则集中的规则顺序中的指南,在请求正文中包含 position 对象。

有关通过单次 API 调用创建入口点规则集并定义其规则的说明,请参阅向阶段入口点规则集添加规则


后续步骤

使用 Rulesets API 中的不同操作处理刚创建的规则。下表列出了常见任务:

任务 步骤
列出 ruleset 中的所有规则

使用 Get a zone entry point ruleset 操作,并指定 http_request_firewall_custom 阶段名称,以获取已配置的 custom rules 及其 ID 列表。

更多信息请参阅 View a specific ruleset

更新规则

使用 Update a zone ruleset rule 操作。

你需要提供 ruleset ID 与规则 ID。要获取这些 ID,可使用 Get a zone entry point ruleset 操作并指定 http_request_firewall_custom 阶段名称。

更多信息请参阅 Update a rule in a ruleset

删除规则

使用 Delete a zone ruleset rule 操作。

你需要提供 ruleset ID 与规则 ID。要获取这些 ID,可使用 Get a zone entry point ruleset 操作并指定 http_request_firewall_custom 阶段名称。

更多信息请参阅 Delete a rule in a ruleset

这些操作在 Ruleset Engine 文档中均有介绍。Ruleset Engine 为包括 custom rules 在内的多个 Cloudflare 产品提供支持。

更多资源

有关通过 API 在账户级别部署自定义规则的说明,请参阅 使用 API 创建自定义规则集

这篇文档对您有帮助吗?