使用 Rulesets API 通过 API 在 zone 级别创建自定义规则。
您必须将自定义规则部署到 http_request_firewall_custom 阶段入口点规则集。
如果使用 Terraform,请参阅 使用 Terraform 配置 WAF 自定义规则。
要为 zone 创建 custom rule,请将规则 添加到 http_request_firewall_custom 阶段入口点规则集。
调用 Get a zone entry point ruleset 操作,获取
http_request_firewall_custom阶段入口点规则集的定义。此任务需要 zone ID。如果入口点规则集已存在(即你收到
200 OK状态码以及规则集定义),请记下响应中的规则集 ID。然后调用 Create a zone ruleset rule 操作,将 custom rule 添加到现有规则集。详情请参阅下方示例。如果入口点规则集不存在(即在步骤 1 中收到
404 Not Found状态码),请使用 Create a zone ruleset 操作创建它。将你的 custom rule 包含在rules数组中。示例请参阅 Create ruleset。
该示例请求向 zone ID 为 $ZONE_ID 的 http_request_firewall_custom 阶段入口点规则集添加一条规则。入口点规则集已存在,ID 为 $RULESET_ID。
新规则将成为规则集中的最后一条规则,会对来自英国或法国、且 attack score 低于 20 的请求进行 challenge。
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 调用创建入口点规则集并定义其规则的说明,请参阅向阶段入口点规则集添加规则。
该示例请求向 zone ID 为 $ZONE_ID 的 http_request_firewall_custom 阶段入口点规则集添加一条规则。入口点规则集已存在,ID 为 $RULESET_ID。
新规则将成为规则集中的最后一条规则,并包含对已拦截请求的 自定义响应 定义。
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 操作,并指定 更多信息请参阅 View a specific ruleset。 |
| 更新规则 | 使用 Update a zone ruleset rule 操作。 你需要提供 ruleset ID 与规则 ID。要获取这些 ID,可使用 Get a zone entry point ruleset 操作并指定 更多信息请参阅 Update a rule in a ruleset。 |
| 删除规则 | 使用 Delete a zone ruleset rule 操作。 你需要提供 ruleset ID 与规则 ID。要获取这些 ID,可使用 Get a zone entry point ruleset 操作并指定 更多信息请参阅 Delete a rule in a ruleset。 |
这些操作在 Ruleset Engine 文档中均有介绍。Ruleset Engine 为包括 custom rules 在内的多个 Cloudflare 产品提供支持。
有关通过 API 在账户级别部署自定义规则的说明,请参阅 使用 API 创建自定义规则集。