IBM Cloud Docs
配置速率限制

配置速率限制

_以前_版本的速率限制规则现已废弃。 上一版本的费率限制规则界面将保留至 2025 年 7 月 30 日。 在此日期之后,任何来自先前版本的现行规则将不再有效。

速率限制(仅限企业套餐)可防止拒绝服务攻击、暴力登录尝试以及针对应用程序层的其他类型的滥用行为。

选择速率限制规则的类型,自定义规则保护登录

创建自定义速率限制规则

在控制台中创建自定义速率限制规则

输入规则名称以帮助您记住规则的功能。 这是可选字段。

在里面流量匹配条件部分中,输入以下信息。

  1. 选择条件类型。

  2. 输入您正在限制访问的 URL。

  3. 选择触发速率限制之前允许的请求数。

  4. 选择在触发速率限制之前请求可以发生的时间段(以秒为单位)。

    时间范围从10秒到86400秒。

高级条件选项允许指定使用哪些 HTTP 方法、头响应和源响应代码以进一步限制匹配条件。

方法列表菜单中选择一个值(默认为 ANY)。

更新 HTTP 响应标头。 您还可以添加响应头以包含源 Web 服务器返回的头。

如果 HTTP 响应标头下有多个标头,则采用 AND 布尔逻辑。 要排除匹配标题,请使用“不等于”选项。 另外,每个头必须是完全匹配。 但是,区分大小写不适用。

源响应代码下,输入要匹配的每个 HTTP 响应代码的有效数字值。 要包含两个或更多响应代码,请使用逗号分隔每个值。 例如,如果只想考虑 401 和 403 这两个错误代码,那么可以输入 401, 403

配置响应

从列出的操作中进行选择,并指定超时时间段。 在这种情况下,超时是指操作发生的禁止时间段。 60 秒超时表示该操作将持续 60 秒。

限制速率的行动
操作 描述
阻止 在超过阈值时发出 429 错误
质询 在继续前,用户必须通过 Google reCaptcha 质询。 如果成功,则请求被接受。 否则,请求将被阻止。
JS 质询 用户必须通过 Javascript Challenge 才能继续。 如果成功,则请求被接受。 否则,请求将被阻止。
模拟 在活动环境中应用任何其他选项之前,可以使用此选项来测试规则。

在里面高级响应部分,指定超出规则阈值时的响应类型。

绕过 URL

旁路功能可让你为一组 URL 创建等同于允许列表或例外的功能。 即使匹配了速率限制规则,也不会对这些 URL 触发任何操作。

保护登录

保护登录创建标准规则,用于保护登录页面免受暴力攻击。 在 5 分钟内尝试登录超过 5 次的客户端将被阻止 15 分钟。

输入规则名称和登录 URL。

使用 API 创建自定义速率限制规则

获取 API 的速率限制规则入口点

所有速率限制规则 API 操作都要求 RULESET_ID 速率限制规则阶段的入口点规则集。 该入口点规则集可能已经存在,如果不存在,则需要创建。

按照以下步骤获取速率限制规则入口点规则集:

  1. 使用正确的变量设置 API 环境。

  2. 在变量中存储以下值,以便在 API 命令中使用:

    CRN:服务实例的完整 URL 编码云资源名称 (CRN)。

    ZONE_ID:域名 ID。

  3. 启动所有变量后,获取入口点规则集:

    curl -X GET "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/phases/http_ratelimit/entrypoint" \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json"
    

规则集 ID 将出现在成功请求的响应中。 如果上述调用返回 404 Not Found 响应,请使用以下 API 为速率限制规则阶段创建入口点规则集:

curl -x POST https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets \
--header "X-Auth-User-Token: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
  "name": "Zone-level phase entry point",
  "kind": "zone",
  "description": "Rate-limting rule entry point ruleset.",
  "phase": "http_ratelimit"
}'

使用 API 创建速率限制规则

请按照以下步骤使用 API 创建速率限制规则:

  1. 使用正确的变量设置 API 环境。

  2. 在变量中存储以下值,以便在 API 命令中使用:

    CRN:服务实例的完整 URL 编码云资源名称 (CRN)。

    ZONE_ID:域名 ID。

    RULESET_ID:速率限制规则入口点规则集的 ID。

  3. 启动所有变量后,创建速率限制规则:

    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 '{
      "description": "My rate limiting rule",
      "expression": "(http.request.uri.path matches \"^/api/\")",
      "action": "block",
      "ratelimit": {
        "characteristics": [
          "cf.colo.id",
          "ip.src"
        ],
        "period": 60,
        "requests_per_period": 100,
        "mitigation_timeout": 600
      }
    }'
    

使用 API 更新速率限制规则

请按照以下步骤使用 API 更新现有的速率限制规则:

  1. 使用正确的变量设置 API 环境。

  2. 在变量中存储以下值,以便在 API 命令中使用:

    CRN:服务实例的完整 URL 编码云资源名称 (CRN)。

    ZONE_ID:域名 ID。

    RULESET_ID:速率限制规则入口点规则集的 ID。

    RULE_ID:要修改的速率限制规则的 ID。

  3. 启动所有变量后,更新速率限制规则:

    curl -X PATCH "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules/$RULE_ID" \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json" \
    --data '{
      "enabled": true,
      "description": "rate limit IPs for API"
    }'
    

使用 API 删除速率限制规则

请按照以下步骤使用 API 删除现有的速率限制规则:

  1. 使用正确的变量设置 API 环境。

  2. 在变量中存储以下值,以便在 API 命令中使用:

    CRN:服务实例的完整 URL 编码云资源名称 (CRN)。

    ZONE_ID:域名 ID。

    RULESET_ID:速率限制规则入口点规则集的 ID。

    RULE_ID:要修改的速率限制规则的 ID。

  3. 启动所有变量后,删除速率限制规则:

    curl -X DELETE "https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID/rules/$RULE_ID" \
    --header "X-Auth-User-Token: Bearer <API_TOKEN>" \
    --header "Content-Type: application/json"