封鎖請求

封鎖請求動作持續觀察請求處理速率。當同一關鍵字的請求速率連續多個時間視窗達到封鎖條件時,系統在指定時間內對該關鍵字執行拒絕動作。封鎖時間結束後,系統解除封鎖並重新開始觀察。

適用場景

  • 客戶端持續高頻訪問,短時請求速率限制不足以阻止其反覆重試。
  • 希望區分偶發突發與持續異常,只封鎖連續觸發閾值的請求分組。
  • 需要在一段時間內對異常客戶端持續執行驗證碼、錯誤頁或連線關閉等處置。

封鎖請求作用於頁面規則識別出的請求。如果需要在作業系統層面丟棄來源 IP 的所有資料包,請使用封禁來源 IP

工作原理

該動作在觀察時間視窗內計算每個關鍵字的請求處理速率:

  1. 請求速率低於調節閾值時,不進行限制。
  2. 請求速率達到調節閾值但尚未達到拒絕閾值時,請求會被延遲。
  3. 請求速率達到拒絕閾值時,系統執行拒絕動作。
  4. 請求速率連續指定數量的時間視窗達到封鎖條件後,系統在封鎖時間內持續執行拒絕動作。
  5. 封鎖時間結束後,該關鍵字解除封鎖,連續視窗計數重新開始。

配置方法

在目標應用的頁面規則中選擇 CC 攻擊防禦動作 > 封鎖請求

選擇封鎖請求動作

引數說明

  1. 關鍵字:用於對請求分組並分別觀察。預設使用客戶端 IP 地址,也可以組合 URI、URI 引數等關鍵字。選擇 URI 引數或 Cookie 時,還需要指定相應的引數或 Cookie 名稱。詳見關鍵字
  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 必須與其他關鍵字組合使用

使用 X-Forwarded-For 前,應確保該請求頭由可信代理維護,不能由客戶端任意偽造。

拒絕動作

達到拒絕條件或進入封鎖狀態後,系統可以執行以下預設動作。預設動作為 返回錯誤頁

封鎖請求的拒絕動作

  • 關閉請求連線:立即終止與客戶端的連線,不再響應請求。
  • 返回錯誤頁:返回錯誤頁面,預設狀態碼為 503。
  • 完成 hCaptcha 驗證:要求客戶端透過 hCaptcha 挑戰。
  • 完成 OpenResty Edge Captcha 驗證:使用 OpenResty Edge 的驗證碼系統驗證使用者。
  • 重定向驗證:將請求重定向到驗證頁面,驗證透過後才能繼續訪問。
  • JavaScript 挑戰:要求客戶端瀏覽器執行 JavaScript 程式碼,以區分瀏覽器和簡單的自動化程式。
  • 標記為拒絕:僅將請求標記為拒絕,並繼續執行後續規則。此動作於 24.9.1-7 中首次引入。

驗證方法

釋出配置後,使用受控客戶端持續傳送能夠命中規則的請求,並依次確認:

  1. 低於調節閾值時,請求正常處理。
  2. 進入調節區間後,請求延遲增加。
  3. 達到拒絕閾值後,拒絕動作生效。
  4. 連續達到封鎖條件後,後續請求在封鎖時間內持續受到處置。
  5. 封鎖時間結束後,請求恢復,連續視窗重新統計。

注意事項

  • 時間視窗過短可能對瞬時抖動過於敏感,過長則會延遲對持續攻擊的識別。應根據正常流量的波動週期調優。
  • 封鎖閾值越小,越容易快速進入封鎖狀態,也越需要關注誤報。
  • 只按客戶端 IP 地址統計時,共享 NAT 或代理後的使用者可能被作為同一個客戶端處理。
  • 對可能包含正常瀏覽器使用者的流量,優先使用驗證碼等可恢復的拒絕動作。