IBM Cloud Docs
关于WAF自定义规则

关于WAF自定义规则

使用WAF自定义规则功能,通过过滤对域名的请求来控制传入流量。 您可以根据您定义的规则对传入请求执行阻止管理挑战等操作。

与规则集引擎评估的其他规则一样,WAF自定义规则需要以下基本参数:

  • 使用规则语言指定流量匹配标准的表达式。
  • 当规则匹配时,指定操作的行为。

自定义规则将按照其在自定义规则表中的顺序进行评估,从第一个到最后一个位置。 您可以通过导航到 “安全”>“防火墙规则” 来查看该表格。 某些操作(如 “阻止” )会阻止对其他规则的评估。 有关操作及其行为的更多详情,请参阅 Ruleset Engine 规则操作

请参阅 迁移到自定义规则,了解防火墙规则和WAF自定义规则之间的区别。

常见用例

以下部分详细介绍了WAF自定义规则常见用例。

仅允许来自指定国家的访问

使用块操作,这个例子根据国家代码通过 ip.src.country 字段阻止请求,只允许来自美国和墨西哥这两个国家的请求:

(not ip.src.country in {"US" "MX"})

根据IP信誉阻止请求

知识产权信誉的评分范围是0(零风险)到100(高风险),用于对访客的知识产权信誉进行分类。

IP信誉是根据“蜜罐项目”、外部公共IP信息以及来自托管规则和 DDoS 的内部威胁情报计算得出的。

使用块操作,此示例根据国家代码(ISO 3166-1 Alpha 2 ↗ 格式)阻止来自IP地址大于0的请求:

(ip.src.country in {"CN" "TW" "US" "GB"} and cf.threat_score gt 0)

配置规则以跳过其他 CIS 功能

跳过操作支持不同的跳过选项,具体取决于您要跳过的安全功能或产品。

本部分包含WAF自定义规则中不同跳过规则场景的示例。 请考虑以下因素:

  • {zone_id} 值是您要添加规则的区域的ID。

  • {ruleset_id} 值是 http_request_firewall_custom 阶段入口规则集的ID。 有关获取规则集ID的详细信息,请参阅 列表和查看规则集。 以下 API 示例使用 创建区域规则集规则 操作,向现有规则集添加跳过规则。

    但是,入口规则集可能还不存在。 在这种情况下,使用 更新入口规则集操作 创建带有跳过规则的入口规则集。

  • 虽然每个示例只包含一个动作参数,但您可以通过同时指定规则集、阶段和产品动作参数,在同一规则中使用多个跳过选项。

跳过当前规则集中的剩余规则

本示例使用 “创建区域规则集”规则 操作,向现有 http_request_firewall_custom 阶段入口点规则集(ID为 RULESET_ID )添加跳过规则。 如果不知道入口点规则集 ID,请参阅 获取 API 的自定义规则入口点。 对于符合规则表达式的请求,规则跳过当前规则集中所有剩余规则:

curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "action": "skip",
  "action_parameters": {
    "ruleset": "current"
  },
  "expression": "http.request.uri.path contains \"/skip-current-ruleset/\"",
  "description": ""
}'

跳过阶段

本示例使用 “创建区域规则集”向现有 http_request_firewall_custom 阶段入口点规则集添加规则,规则集ID为 RULESET_ID。 对于符合规则表达式的请求,该规则跳过 http_ratelimit 阶段:

curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "action": "skip",
  "action_parameters": {
    "phases": [
      "http_ratelimit"
    ]
  },
  "expression": "http.request.uri.path contains \"/skip-phase/\"",
  "description": ""
}'

跳过阶段,不记录匹配请求

本示例使用 “创建区域规则集”规则 操作添加一条规则,该规则跳过 http_ratelimit 阶段并禁用当前规则的事件日志记录:

curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "action": "skip",
  "action_parameters": {
    "phases": [
      "http_ratelimit"
    ]
  },
  "logging": {
    "enabled": false
  },
  "expression": "http.request.uri.path contains \"/disable-logging/\"",
  "description": ""
}'

跳过安全产品

本示例使用 “创建区域规则集”规则 操作添加一条规则,该规则跳过区域锁定和用户代理阻止产品,用于匹配规则表达式的请求:

curl -X POST "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules" \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "action": "skip",
  "action_parameters": {
    "products": [
      "zoneLockdown",
      "uaBlock"
    ]
  },
  "expression": "http.request.uri.path contains \"/skip-products/\"",
  "description": ""
}'