限制請求速率
限制請求速率動作基於漏桶演算法控制請求處理速度。低於調節閾值的請求正常處理;速率進入調節區間後,請求會被延遲;達到拒絕閾值後,系統執行指定的拒絕動作。 平滑突發流量,避免短時間內的大量請求壓垮上游服務。 限制爬蟲、介面輪詢、批次查詢等持續高頻訪問。 按客戶端、URI 或業務標識分別保護高成本介面。
CC(Challenge Collapsar)攻擊通常透過持續傳送大量 HTTP 或 HTTPS 請求,佔用應用伺服器的連線數、計算資源或上游服務能力,使正常使用者的請求變慢或失敗。與單純消耗網路頻寬的流量型攻擊不同,CC 攻擊往往針對登入、搜尋、動態查詢等需要較多計算資源的介面,單個請求看似正常,因此需要結合請求特徵和訪問頻率進行識別與處置。
OpenResty Edge 提供從請求控制到網路層封禁的多層防護能力。您可以透過頁面規則限定規則的生效條件,按客戶端 IP 地址、URI、Cookie 等關鍵字統計請求,並在達到閾值後延遲、驗證、拒絕或封禁異常流量。
請求層動作適合保護 HTTP 和 HTTPS 介面,也是應對 CC 攻擊的主要手段。
網路層動作會在作業系統層面丟棄來源 IP 的資料包,影響範圍大於單個 HTTP 請求。應先確認來源 IP 可信,避免封禁共享出口、代理或 NAT 後方的正常使用者。
以下能力不屬於典型的 HTTP CC 請求識別,但可以保護 TLS 握手資源或控制響應頻寬。
| 功能 | 控制物件 | 觸發方式 | 處置方式 | 典型場景 |
|---|---|---|---|---|
| 限制請求速率 | HTTP/HTTPS 請求 | 請求速率達到調節或拒絕閾值 | 延遲或執行拒絕動作 | 平滑突發流量、保護高頻介面 |
| 限制請求數 | HTTP/HTTPS 請求 | 固定時間視窗內的請求數超過閾值 | 執行拒絕動作 | 限制登入、驗證碼、API 呼叫次數 |
| 延遲請求 | 匹配頁面規則的請求 | 請求滿足規則條件 | 延遲指定時間後繼續處理 | 降低自動化嘗試和低速攻擊效率 |
| 封鎖請求 | HTTP/HTTPS 請求 | 連續多個時間視窗達到速率條件 | 封鎖指定時間 | 處置持續高頻訪問的客戶端 |
| 封禁來源 IP | 來源 IP 的所有資料包 | 請求滿足規則條件 | 作業系統層丟包 | 快速隔離已確認的攻擊來源 |
| 封禁 IP 列表 | 列表中的來源 IP | 來源 IP 命中預定義列表 | 作業系統層丟包 | 批次接入黑名單或威脅情報 |
| 限制 SSL 握手速率 | TLS 握手 | 客戶端 IP 的握手速率達到閾值 | 調節或拒絕 | 緩解異常 TLS 握手消耗 |
| 限制響應資料速率 | HTTP/HTTPS 響應 | 請求滿足規則條件 | 限制響應傳輸速率 | 控制下載或大響應的頻寬佔用 |
頁面規則的條件決定哪些請求進入防護策略。建議優先保護登入、搜尋、下單、動態 API 等資源消耗較高或容易被自動化呼叫的 URI,而不是一開始就對整個應用使用相同閾值。
關鍵字決定請求如何分組和計數。常見選項包括客戶端 IP 地址、URI、URI 引數、Cookie、指定請求頭,以及 X-Forwarded-For 中的第一個或最後一個 IP 地址。組合多個關鍵字可以形成更細粒度的統計維度,例如按“客戶端 IP 地址 + URI”分別限制每個客戶端對不同介面的訪問。
使用 X-Forwarded-For 作為關鍵字前,應確保請求只會經過可信代理,並由可信代理覆蓋或清理客戶端傳入的同名請求頭。否則,攻擊者可能偽造該請求頭繞過限流或導致誤封。
速率類動作根據單位時間內的請求速率進行調節或拒絕;計數類動作統計固定時間視窗內的請求總數。閾值應基於正常業務流量的峰值、介面成本和可接受的突發量設定,並在觀察實際效果後逐步調整。
達到拒絕條件後,可以關閉連線、返回錯誤頁、要求完成驗證碼或 JavaScript 挑戰、標記請求為拒絕,或者在支援的動作中封禁 IP 地址。對可能包含正常使用者的流量,優先考慮驗證碼等可恢復的驗證方式;對已確認的惡意來源,再使用連線關閉或 IP 封禁。
限制 SSL 握手速率需要在應用的 SSL 配置頁面中啟用,具體步驟請參見限制 SSL 握手速率。
啟用防護規則後,建議同時啟用 CC 攻擊日誌,記錄規則觸發情況並形成“檢測、處置、觀察、調優”的閉環。
在 Edge Admin 的 全域性配置 > 日誌 中開啟 啟用 CC 日誌,並根據攻擊流量規模配置日誌限速、統計過期時間、共享記憶體、緩衝區和刷入時間間隔。日誌限速可以避免高頻攻擊期間為每個請求寫入日誌,降低日誌系統本身的開銷。
配置釋出後,可以在 應用 > CC 日誌 中檢視觸發記錄,並結合客戶端標識、URI、處置結果和觸發頻率判斷閾值是否合理。詳細配置和測試步驟請參見 CC 攻擊日誌。
限流和限速狀態預設按應用隔離,不會跨應用共享。例如,同一客戶端觸發了應用 A 的請求速率限制後,仍可正常訪問未觸發限制的應用 B。這一點與直接在共享 NGINX 配置中使用全侷限流區域的行為不同。
作業系統層的 IP 封禁會丟棄該來源 IP 的所有資料包,使用前應結合實際網路拓撲評估影響。
限制請求速率動作基於漏桶演算法控制請求處理速度。低於調節閾值的請求正常處理;速率進入調節區間後,請求會被延遲;達到拒絕閾值後,系統執行指定的拒絕動作。 平滑突發流量,避免短時間內的大量請求壓垮上游服務。 限制爬蟲、介面輪詢、批次查詢等持續高頻訪問。 按客戶端、URI 或業務標識分別保護高成本介面。
限制請求數動作統計每個關鍵字在固定時間視窗內的請求總數。請求數超過拒絕閾值後,OpenResty Edge 對該關鍵字的後續請求執行指定的拒絕動作;進入新的時間視窗後,計數器重新計數。 限制登入嘗試、驗證碼傳送或密碼重置等敏感操作的呼叫次數。 對 API 配額或週期內允許的請求總數進行控制。
延遲請求動作為滿足頁面規則條件的請求增加固定等待時間,然後再繼續處理請求。它不會自行判斷請求速率,因此應透過頁面規則條件精確限定需要延遲的流量。 降低暴力破解、批次探測或自動化採集的執行效率。 對可疑流量進行溫和調節,避免直接拒絕可能造成的誤傷。 在不立即暴露攔截策略的情況下,增加攻擊者的時間成本。
封鎖請求動作持續觀察請求處理速率。當同一關鍵字的請求速率連續多個時間視窗達到封鎖條件時,系統在指定時間內對該關鍵字執行拒絕動作。封鎖時間結束後,系統解除封鎖並重新開始觀察。 客戶端持續高頻訪問,短時請求速率限制不足以阻止其反覆重試。 希望區分偶發突發與持續異常,只封鎖連續觸發閾值的請求分組。
限制響應資料速率動作用於控制匹配請求的響應傳輸速度,避免單個下載、大檔案響應或持續連線過度佔用出口頻寬。該動作控制的是返回給客戶端的資料速率,不會限制客戶端傳送請求的頻率,因此它屬於 CC 防護的擴充套件流量保護能力。 限制下載介面或大檔案響應的頻寬佔用。
限制 SSL 握手速率用於控制單個客戶端 IP 地址發起 TLS 握手的頻率,減少異常握手對閘道器 CPU 和連線資源的消耗。該功能屬於 CC 防護的擴充套件連線保護能力。 同一客戶端 IP 地址反覆新建 TLS 連線。 異常客戶端不復用連線,持續消耗 TLS 握手資源。
封禁來源 IP 動作會在作業系統層面封禁當前請求的來源 IP 一段時間。在封禁期間,來自該 IP 的所有資料包都會被丟棄,而不只是拒絕當前應用的 HTTP 請求。 已透過頁面規則明確識別出攻擊來源,需要快速隔離。 同一來源 IP 持續攻擊多個 URI 或消耗不同協議的連線資源。
封禁 IP 列表動作檢查請求的來源 IP 是否存在於指定的 IP 列表中。命中列表後,系統在作業系統層面封禁該來源 IP;封禁期間,來自該 IP 的所有資料包都會被丟棄。 維護已確認的惡意 IP 黑名單。 批次封禁掃描器、攻擊節點或其他可疑來源。 將經過稽核的第三方威脅情報 IP 匯入統一列表。
限制請求併發數 用於限制指定 Key 空間中的併發請求數:併發超過調整閾值時進行整形,超過拒絕閾值時拒絕請求。 開啟目標 HTTP 應用的 頁面規則。 新建或編輯規則,並新增 限制請求併發數。 新增一個或多個 Key 組,例如客戶端 IP、URI、Cookie 或請求頭。 設定 調節於 和 拒絕於。