封鎖客戶端請求
頁面規則的下拉選單中提供了多種分類整理好的動作。其中有一類是"CC 攻擊防禦動作",該類別中的動作用於控制請求。本文將介紹如何對請求進行攔截,即封鎖請求:
封鎖請求
的主要原理是設定一個時間視窗,觀察該時間視窗內的請求處理速率是否超過閾值。當連續指定個數的時間視窗的請求處理速率都超過閾值時,在隨後的指定時間內,系統將執行指定的封鎖動作。
可透過以下幾個引數進行控制:
- 關鍵字:用於對請求進行區分、分類。預設為終端的 IP 地址,可透過下拉選單更改為 URI、URI 引數等,詳見關鍵字說明。可選擇一個或多個關鍵字。若選擇 URI 引數或 Cookie,還需額外指定一個相應的 Argument 欄位。
- 調節於:低於該速率的請求不會受到任何限制;大於該速率但小於
拒絕於
的請求將被延遲執行。 - 拒絕於:大於該速率的請求將執行
拒絕動作
。 調節於 和 拒絕於 這兩個引數的預設單位都是請求每秒,也可選擇請求每分鐘。 如果將它們兩個的值設定為相同,超過設定的請求將直接被拒絕,沒有延遲來做緩衝。 - 時間視窗:觀察時間視窗的大小。
- 封鎖閾值:觀察時間視窗連續出現的個數。
- 封鎖時間:指定的攔截時間。超過該時間後,客戶端將解封,封鎖閾值 會重新開始計數。
- 拒絕動作:指定在達到
拒絕閾值
或封鎖閾值
後執行的動作。詳見拒絕動作說明
可選關鍵字包括:
- 客戶端 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 中首次引入。