IBM Cloud Docs
配置速率限制

配置速率限制

_以前_版本的速率限制規則現在已被廢棄。 之前版本的費率限制規則介面將保留至 2025 年 7 月 30 日。 此日期之後,先前版本的任何有效規則將不再運作。

「速率限制」(僅限企業方案)會防範拒絕服務攻擊、強制入侵登入嘗試,以及以應用程式層為目標的其他類型不當行為。

選擇速率限制規則的類型,自訂規則保護登入

建立自訂費率限制規則

在主控台中建立自訂速率限制規則

請輸入可協助您記住規則用途的規則名稱。 此欄位是選用欄位,

在裡面流量匹配標準部分,輸入以下資訊。

  1. 選擇條件類型。

  2. 輸入您要限制速率的 URL。

  3. 選擇觸發速率限制之前允許的請求數。

  4. 選擇觸發速率限制之前可以發生請求的時間段(以秒為單位)。

    範圍從 10 到 86,400 秒。

進階準則選項可讓您指定哪些 HTTP 方法、標頭回應及原點回應碼來進一步限制比對準則。

方法清單選單中選擇一個值(ANY 為預設值)。

更新 HTTP 回應標頭。 您也可以新增回應標頭,以包括原點 Web 伺服器傳回的標頭。

如果 HTTP 回應標頭下有多個標頭,則採用 AND 布林邏輯。 若要排除標頭的匹配,請使用 Not Equal 選項。 此外,每一個標頭都必須完全相符。 但是,不會套用區分大小寫。

原點回應碼下,鍵入要比對之每一個 HTTP 回應碼的有效數值。 若要包含兩個以上的回應碼,請以逗點區隔每個值。 比方說,如果您只想要計入 401 及 403 這兩個錯誤碼,請輸入 401, 403

配置響應

請從列出的動作中選取,然後指定逾時期間。 在此情況下,逾時是指執行該動作的禁止期間。 60 秒逾時表示動作會套用 60 秒。

速率限制操作
動作 說明
區塊 超出臨界值時發出 429 錯誤
盤查 使用者必須通過 Google re-Captcha Challenge 才可繼續。 如果成功,則請求被接受。 否則,會封鎖該要求。
JS 盤查 使用者必須通過 JavaScript Challenge 才能繼續。 如果成功,則請求被接受。 否則,會封鎖該要求。
模擬 您可以使用此選項,在您的即時環境中套用任何其他選項之前先測試規則。

在裡面進階回應部分,指定超出規則閾值時的回應類型。

使用 HTTP status 來驗證速率限制規則和回應的一致性

當您對網址或服務套用速率限制規則時,確認規則是否正確執行是很重要的。 簡單的測試可以確認系統以下列適當的 HTTP 狀態代碼回應:

  • 200 OK 或 為允許的請求 404 Not Found
  • 429 Too Many Requests 當超出速率限制時。

若要驗證速率限制規則和回應一致性,請執行下列指令:

for i in {1..N}; do curl -s -o /dev/null -w "%{http_code}\n" <your-target-url>; done

指令選項

N
您要傳送的請求數目。
your-target-url
URL 的服務或端點。

此指令提供每個要求的 HTTP 狀態碼輸出,並允許您觀察達到速率限制臨界值的時間。

繞過 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"