封鎖請求
封鎖請求動作持續觀察請求處理速率。當同一關鍵字的請求速率連續多個時間視窗達到封鎖條件時,系統在指定時間內對該關鍵字執行拒絕動作。封鎖時間結束後,系統解除封鎖並重新開始觀察。
適用場景
- 客戶端持續高頻訪問,短時請求速率限制不足以阻止其反覆重試。
- 希望區分偶發突發與持續異常,只封鎖連續觸發閾值的請求分組。
- 需要在一段時間內對異常客戶端持續執行驗證碼、錯誤頁或連線關閉等處置。
封鎖請求作用於頁面規則識別出的請求。如果需要在作業系統層面丟棄來源 IP 的所有資料包,請使用封禁來源 IP。
工作原理
該動作在觀察時間視窗內計算每個關鍵字的請求處理速率:
- 請求速率低於調節閾值時,不進行限制。
- 請求速率達到調節閾值但尚未達到拒絕閾值時,請求會被延遲。
- 請求速率達到拒絕閾值時,系統執行拒絕動作。
- 請求速率連續指定數量的時間視窗達到封鎖條件後,系統在封鎖時間內持續執行拒絕動作。
- 封鎖時間結束後,該關鍵字解除封鎖,連續視窗計數重新開始。
配置方法
在目標應用的頁面規則中選擇 CC 攻擊防禦動作 > 封鎖請求。

引數說明
- 關鍵字:用於對請求分組並分別觀察。預設使用客戶端 IP 地址,也可以組合 URI、URI 引數等關鍵字。選擇 URI 引數或 Cookie 時,還需要指定相應的引數或 Cookie 名稱。詳見關鍵字。
- 調節於:請求速率低於該值時不受限制;達到該值但尚未達到拒絕閾值時,請求將被延遲。
- 拒絕於:請求速率達到該值後,系統執行拒絕動作。
- 時間視窗:每次觀察請求速率的時間區間。
- 封鎖閾值:觸發封鎖所需的連續時間視窗數量。
- 封鎖時間:封鎖持續時間。該時間結束後,系統解除封鎖並重新統計連續視窗。
- 拒絕動作:達到拒絕條件或進入封鎖狀態後執行的操作。詳見拒絕動作。
調節閾值和拒絕閾值可以按每秒請求數或每分鐘請求數設定。兩個閾值設定為相同值時,不保留調節區間,達到該速率後將直接執行拒絕動作。
關鍵字

可選的關鍵字包括:
- 客戶端 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 中首次引入。
驗證方法
釋出配置後,使用受控客戶端持續傳送能夠命中規則的請求,並依次確認:
- 低於調節閾值時,請求正常處理。
- 進入調節區間後,請求延遲增加。
- 達到拒絕閾值後,拒絕動作生效。
- 連續達到封鎖條件後,後續請求在封鎖時間內持續受到處置。
- 封鎖時間結束後,請求恢復,連續視窗重新統計。
注意事項
- 時間視窗過短可能對瞬時抖動過於敏感,過長則會延遲對持續攻擊的識別。應根據正常流量的波動週期調優。
- 封鎖閾值越小,越容易快速進入封鎖狀態,也越需要關注誤報。
- 只按客戶端 IP 地址統計時,共享 NAT 或代理後的使用者可能被作為同一個客戶端處理。
- 對可能包含正常瀏覽器使用者的流量,優先使用驗證碼等可恢復的拒絕動作。