使用 Rulesets API 配置托管规则集的执行并覆盖其行为。默认情况下,启用的规则执行托管规则集发布者定义的操作。本示例使用覆盖确保仅启用具有特定标记(tag)的规则。
按照以下步骤配置托管规则集的执行,其中包含两个覆盖,用于仅启用标记为 joomla 的规则。
- 添加规则到一个执行托管规则集的阶段入口点规则集(phase entry point ruleset)。
- 配置规则集覆盖,禁用托管规则集中的所有规则。
- 配置一个标记(tag)覆盖,仅启用具有给定标记的规则。
标记覆盖优先于规则集覆盖。仅启用具有指定标记的规则,所有其他规则均被禁用。
本示例将 Cloudflare 托管规则集部署到一个阶段,仅启用 Joomla 规则。请求中省略了 name、kind 和 phase 字段,因为它们是不可变的(immutable)。
示例:在区域(zone)级别使用类别覆盖仅启用 Joomla 规则
Required API token permissions
At least one of the following token permissions is required:Response Compression WriteConfig Settings WriteDynamic URL Redirects WriteCache Settings WriteCustom Errors WriteOrigin WriteManaged headers WriteZone Transform Rules WriteMass URL Redirects WriteMagic Firewall WriteL4 DDoS Managed Ruleset WriteHTTP DDoS Managed Ruleset WriteSanitize WriteTransform Rules WriteSelect Configuration WriteBot Management WriteZone WAF WriteAccount WAF WriteAccount Rulesets WriteLogs WriteLogs Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_request_firewall_managed/entrypoint" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"rules": [
{
"action": "execute",
"expression": "true",
"action_parameters": {
"id": "<MANAGED_RULESET_ID>",
"overrides": {
"enabled": false,
"categories": [
{
"category": "joomla",
"action": "block",
"enabled": true
}
]
}
}
}
]
}'"id": "<MANAGED_RULESET_ID>"向一个阶段的规则集中添加一条规则,该规则将 Cloudflare 托管规则集应用于指定区域($ZONE_ID)的请求。"enabled": false在规则集级别定义了一个覆盖,用于禁用托管规则集中的所有规则。"categories": [{"category": "joomla", "action": "block", "enabled": true}]在标记级别定义了一个覆盖,用于启用 Joomla 规则并将其操作设置为block。
示例:在账户(account)级别使用类别覆盖仅启用 Joomla 规则
Required API token permissions
At least one of the following token permissions is required:Mass URL Redirects WriteMagic Firewall WriteL4 DDoS Managed Ruleset WriteTransform Rules WriteSelect Configuration WriteAccount WAF WriteAccount Rulesets WriteLogs Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets/phases/http_request_firewall_managed/entrypoint" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"rules": [
{
"action": "execute",
"expression": "cf.zone.name eq \"example.com\" and cf.zone.plan eq \"ENT\"",
"action_parameters": {
"id": "<MANAGED_RULESET_ID>",
"overrides": {
"enabled": false,
"categories": [
{
"category": "joomla",
"action": "block",
"enabled": true
}
]
}
}
}
]
}'"id": "<MANAGED_RULESET_ID>"向一个阶段的规则集中添加一条规则,该规则将 Cloudflare 托管规则集应用于针对example.com的请求。"enabled": false在规则集级别定义了一个覆盖,用于禁用托管规则集中的所有规则。"categories": [{"category": "joomla", "action": "block", "enabled": true}]在标记级别定义了一个覆盖,用于启用 Joomla 规则并将其操作设置为block。
您可以向一条规则添加多个类别覆盖。
本示例向在 http_request_firewall_managed 阶段执行托管规则集 (<MANAGED_RULESET_ID>) 的规则添加两个覆盖。请注意,请求中省略了 name、kind 和 phase 字段,因为它们是不可变的。
示例:在区域级别添加多个类别覆盖
Required API token permissions
At least one of the following token permissions is required:Response Compression WriteConfig Settings WriteDynamic URL Redirects WriteCache Settings WriteCustom Errors WriteOrigin WriteManaged headers WriteZone Transform Rules WriteMass URL Redirects WriteMagic Firewall WriteL4 DDoS Managed Ruleset WriteHTTP DDoS Managed Ruleset WriteSanitize WriteTransform Rules WriteSelect Configuration WriteBot Management WriteZone WAF WriteAccount WAF WriteAccount Rulesets WriteLogs WriteLogs Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/phases/http_request_firewall_managed/entrypoint" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"rules": [
{
"action": "execute",
"expression": "true",
"action_parameters": {
"id": "<MANAGED_RULESET_ID>",
"overrides": {
"enabled": false,
"categories": [
{
"category": "joomla",
"action": "log",
"enabled": true
},
{
"category": "wordpress",
"enabled": false
}
]
}
}
}
]
}'示例:在账户级别添加多个类别覆盖
Required API token permissions
At least one of the following token permissions is required:Mass URL Redirects WriteMagic Firewall WriteL4 DDoS Managed Ruleset WriteTransform Rules WriteSelect Configuration WriteAccount WAF WriteAccount Rulesets WriteLogs Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/rulesets/phases/http_request_firewall_managed/entrypoint" \
--request PUT \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"rules": [
{
"action": "execute",
"expression": "cf.zone.name eq \"example.com\" and cf.zone.plan eq \"ENT\"",
"action_parameters": {
"id": "<MANAGED_RULESET_ID>",
"overrides": {
"enabled": false,
"categories": [
{
"category": "joomla",
"action": "log",
"enabled": true
},
{
"category": "wordpress",
"enabled": false
}
]
}
}
}
]
}'规则集中覆盖的顺序决定了部署的托管规则集中的规则是启用还是禁用。列表中靠后的覆盖优先于靠前的覆盖。
考虑上述代码中托管规则集里的四条规则,它们具有不同的 category 标记组合。下表显示了应用覆盖后的规则状态。
| 托管规则集中的规则 | 标记 | 覆盖后的规则状态 |
|---|---|---|
| ManagedRule1 | drupal, dos |
已禁用 |
| ManagedRule2 | drupal, dos, joomla |
已启用 |
| ManagedRule3 | dos, joomla, wordpress |
已禁用 |
| ManagedRule4 | drupal, wordpress |
已禁用 |
| ManagedRule5 | (无标记) | 已禁用 |