要使用 API 添加托管规则例外,请在 http_request_firewall_managed 阶段的阶段入口点规则集中创建一条动作为 skip 的规则。您可以在账户级别和 zone 级别定义例外。例外也称为 skip 规则。
要配置例外,请根据例外类型定义 action_parameters 对象。请参阅以下示例:
有关使用 API 创建例外的更多信息,请参阅 Ruleset Engine 文档中的 Create an exception。
以下示例添加一条规则:对匹配 dev.example.com 主机名的请求,跳过入口点规则集中的所有剩余规则。
-
调用 Get a zone entry point ruleset 操作,以获取
http_request_firewall_managed阶段入口点规则集的当前配置。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": { "id": "060013b1eeb14c93b0dcd896537e0d2c", // entry point ruleset ID "name": "default", "description": "", "source": "firewall_managed", "kind": "zone", "version": "3", "rules": [ // (...) ], "last_updated": "2024-01-20T14:29:00.190643Z", "phase": "http_request_firewall_managed" }, "success": true, "errors": [], "messages": [] }保存入口点规则集 ID(
060013b1eeb14c93b0dcd896537e0d2c)供下一步使用。 -
调用 Create a zone ruleset rule 操作(
POST请求),在规则列表开头添加例外(或 skip 规则),因为 skip 规则仅应用于列在其后的规则。确切的规则位置在position对象中定义。Create a zone ruleset rulebash curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$ENTRY_POINT_RULESET_ID/rules" \ --request POST \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "expression": "(http.host eq \"dev.example.com\")", "description": "Skip managed rules for dev.example.com", "action": "skip", "action_parameters": { "ruleset": "current" }, "position": { "before": "" } }'
有关通过 API 跳过所有剩余规则的更多信息,请参阅 Ruleset Engine 文档中的 Create an exception。
以下示例添加一条规则:对匹配 dev.example.com 主机名的请求,跳过 Cloudflare Managed Ruleset。
-
调用 Get a zone entry point ruleset 操作,以获取
http_request_firewall_managed阶段入口点规则集的当前配置。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": { "id": "060013b1eeb14c93b0dcd896537e0d2c", // entry point ruleset ID "name": "default", "description": "", "source": "firewall_managed", "kind": "zone", "version": "3", "rules": [ // (...) { "id": "1bdb49371c1f46958fc8b985efcb79e7", // `execute` rule ID "version": "1", "action": "execute", "expression": "true", "last_updated": "2024-01-20T14:21:28.643979Z", "ref": "1bdb49371c1f46958fc8b985efcb79e7", "enabled": true, "action_parameters": { "id": "efb7b8c949ac4650a09736fc376e9aee", // "Cloudflare Managed Ruleset" ID "version": "latest" } } // (...) ], "last_updated": "2024-01-20T14:29:00.190643Z", "phase": "http_request_firewall_managed" }, "success": true, "errors": [], "messages": [] }通过搜索
action_parameters>id等于(托管规则集 ID)的 execute规则,识别部署 Cloudflare Managed Ruleset 的规则。保存以下 ID 供下一步使用:
- 入口点规则集的 ID(本示例中为
060013b1eeb14c93b0dcd896537e0d2c) - 部署托管规则集的
execute规则的 ID(本示例中为1bdb49371c1f46958fc8b985efcb79e7)
- 入口点规则集的 ID(本示例中为
-
调用 Create a zone ruleset rule 操作(
POST请求),在部署 Cloudflare Managed Ruleset 的execute规则之前立即添加例外(或 skip 规则),因为 skip 规则仅应用于列在其后的规则。确切的规则位置在position对象中定义。Create a zone ruleset rulebash curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$ENTRY_POINT_RULESET_ID/rules" \ --request POST \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "expression": "(http.host eq \"dev.example.com\")", "description": "Skip the Cloudflare Managed Ruleset for dev.example.com", "action": "skip", "action_parameters": { "rulesets": [ "efb7b8c949ac4650a09736fc376e9aee" ] }, "position": { "before": "1bdb49371c1f46958fc8b985efcb79e7" } }'
有关通过 API 跳过一个或多个托管规则集的更多信息,请参阅 Ruleset Engine 文档中的 Create an exception。
以下示例添加一条规则:对匹配 dev.example.com 主机名的请求,跳过 Cloudflare Managed Ruleset 中的特定规则。
调用 Get a zone ruleset 操作,以获取 Cloudflare Managed Ruleset(规则集 ID
)中的规则列表。
您可以使用账户级端点(Get an account ruleset)或 zone 级端点(Get a zone ruleset)获取托管规则集详情。Get a zone rulesetbash curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/efb7b8c949ac4650a09736fc376e9aee" \ --request GET \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"{ "result": { "id": "efb7b8c949ac4650a09736fc376e9aee", "name": "Cloudflare Managed Ruleset", "description": "Created by the Cloudflare security team, this ruleset is designed to provide fast and effective protection for all your applications. It is frequently updated to cover new vulnerabilities and reduce false positives.", "source": "firewall_managed", "kind": "managed", "version": "180", "rules": [ // (...) { "id": "d9e350f1b72d4730899c8a420e48a85d", // ID of rule to skip "version": "180", "action": "block", "categories": ["file-inclusion", "october-cms"], "description": "October CMS - File Inclusion", "last_updated": "2024-02-05T07:12:54.565276Z", "ref": "adb550873eb92d32372ed08514d33241", "enabled": true } // (...) ], "last_updated": "2024-02-05T07:12:54.565276Z", "phase": "http_request_firewall_managed" }, "success": true, "errors": [], "messages": [] }记下您要跳过的规则的 ID(本示例中为
)。 -
调用 Get a zone entry point ruleset 操作,以获取
http_request_firewall_managed阶段入口点规则集的当前配置。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": { "id": "060013b1eeb14c93b0dcd896537e0d2c", // entry point ruleset ID "name": "default", "description": "", "source": "firewall_managed", "kind": "zone", "version": "3", "rules": [ // (...) { "id": "1bdb49371c1f46958fc8b985efcb79e7", // `execute` rule ID "version": "1", "action": "execute", "expression": "true", "last_updated": "2024-01-20T14:21:28.643979Z", "ref": "1bdb49371c1f46958fc8b985efcb79e7", "enabled": true, "action_parameters": { "id": "efb7b8c949ac4650a09736fc376e9aee", // "Cloudflare Managed Ruleset" ID "version": "latest" } } // (...) ], "last_updated": "2024-01-20T14:29:00.190643Z", "phase": "http_request_firewall_managed" }, "success": true, "errors": [], "messages": [] }通过搜索
action_parameters>id等于(托管规则集 ID)的 execute规则,识别部署 Cloudflare Managed Ruleset 的规则。保存以下 ID 供下一步使用:
- 入口点规则集的 ID(本示例中为
060013b1eeb14c93b0dcd896537e0d2c) - 部署 Cloudflare Managed Ruleset 的
execute规则的 ID(本示例中为1bdb49371c1f46958fc8b985efcb79e7)
您还将使用以下 ID:
- Cloudflare Managed Ruleset 的 ID(
) - 要跳过的规则的 ID(本示例中为
)
- 入口点规则集的 ID(本示例中为
-
调用 Create a zone ruleset rule 操作(
POST请求),在部署 Cloudflare Managed Ruleset 的execute规则之前立即添加例外(或 skip 规则),因为 skip 规则仅应用于列在其后的规则。Create a zone ruleset rulebash curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/rulesets/$ENTRY_POINT_RULESET_ID/rules" \ --request POST \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "expression": "(http.host eq \"dev.example.com\")", "description": "Skip a single rule for dev.example.com", "action": "skip", "action_parameters": { "rules": { "efb7b8c949ac4650a09736fc376e9aee": [ "d9e350f1b72d4730899c8a420e48a85d" ] } }, "position": { "before": "1bdb49371c1f46958fc8b985efcb79e7" } }'
action_parameters > rules 对象包含 Cloudflare Managed Ruleset 的 ID,以及要跳过的规则 ID 关联列表(在本例中仅为一条规则)。position 对象定义入口点规则集中的确切规则位置(在规则 1bdb49371c1f46958fc8b985efcb79e7 之前)。
有关通过 API 跳过托管规则集中一条或多条规则的更多信息,请参阅 Ruleset Engine 文档中的 Create an exception。