封鎖客戶端請求

頁面規則的下拉選單中提供了多種分類整理好的動作。其中有一類是"CC 攻擊防禦動作",該類別中的動作用於控制請求。本文將介紹如何對請求進行攔截,即封鎖請求

封鎖請求的主要原理是設定一個時間視窗,觀察該時間視窗內的請求處理速率是否超過閾值。當連續指定個數的時間視窗的請求處理速率都超過閾值時,在隨後的指定時間內,系統將執行指定的封鎖動作。

可透過以下幾個引數進行控制:

  1. 關鍵字:用於對請求進行區分、分類。預設為終端的 IP 地址,可透過下拉選單更改為 URI、URI 引數等,詳見關鍵字說明。可選擇一個或多個關鍵字。若選擇 URI 引數或 Cookie,還需額外指定一個相應的 Argument 欄位。
  2. 調節於:低於該速率的請求不會受到任何限制;大於該速率但小於 拒絕於 的請求將被延遲執行。
  3. 拒絕於:大於該速率的請求將執行 拒絕動作調節於拒絕於 這兩個引數的預設單位都是請求每秒,也可選擇請求每分鐘。 如果將它們兩個的值設定為相同,超過設定的請求將直接被拒絕,沒有延遲來做緩衝。
  4. 時間視窗:觀察時間視窗的大小。
  5. 封鎖閾值:觀察時間視窗連續出現的個數。
  6. 封鎖時間:指定的攔截時間。超過該時間後,客戶端將解封,封鎖閾值 會重新開始計數。
  7. 拒絕動作:指定在達到拒絕閾值封鎖閾值後執行的動作。詳見拒絕動作說明

可選關鍵字包括:

  • 客戶端 IP 地址,如:1.1.1.1
  • 請求的 URI,例如:/openresty
  • URI 查詢引數,如 /openresty?arg1=val1 中的 arg1
  • 請求 Cookie,比如 cookie: c1=v1 中的鍵 c1
  • X-Forwarded-For 請求頭中的第一個 IP 地址,如 X-Forwarded-For: 1.1.1.1, 1.1.1.2 中的 1.1.1.1
  • X-Forwarded-For 請求頭中的最後一個 IP 地址,如 X-Forwarded-For: 1.1.1.1, 1.1.1.2 中的 1.1.1.2
  • 特定的 HTTP 請求頭,例如 Host
  • 加密 Cookie:將根據 OpenResty Edge 生成的加密 Cookie 對請求進行控制。當客戶請求沒有攜帶加密 Cookie 時,會回退到不含加密 Cookie 的情況。因此,加密 Cookie 必須和其它關鍵字一起使用

在達到封鎖條件後,系統可執行以下預設動作,預設為 返回錯誤頁

  • 關閉請求連線:立即終止與客戶端的連線,不再響應請求。
  • 返回錯誤頁,預設為狀態碼 503:限速生效時向使用者展示帶有 503 狀態碼的錯誤頁面,暗示伺服器暫時無法處理請求。
  • 完成 hCaptcha 驗證:要求使用者透過 hCaptcha 挑戰,以區分真人和機器行為。
  • 完成 OpenResty Edge Captcha 驗證:使用 OpenResty Edge 的驗證碼系統驗證使用者身份。
  • 重定向驗證:將請求重定向至驗證頁面,驗證透過後方可繼續訪問。
  • JavaScript 挑戰:要求使用者瀏覽器執行 JavaScript 程式碼,驗證非機器人操作。
  • 標記為拒絕:僅將請求標記為拒絕,繼續執行後續規則。此動作於 24.9.1-7 中首次引入。