CC 攻擊防護
CC(Challenge Collapsar)攻擊通常透過持續傳送大量 HTTP 或 HTTPS 請求,佔用應用伺服器的連線數、計算資源或上游服務能力,使正常使用者的請求變慢或失敗。與單純消耗網路頻寬的流量型攻擊不同,CC 攻擊往往針對登入、搜尋、動態查詢等需要較多計算資源的介面,單個請求看似正常,因此需要結合請求特徵和訪問頻率進行識別與處置。
OpenResty Edge 提供從請求控制到網路層封禁的多層防護能力。您可以透過頁面規則限定規則的生效條件,按客戶端 IP 地址、URI、Cookie 等關鍵字統計請求,並在達到閾值後延遲、驗證、拒絕或封禁異常流量。
防護能力
請求層防護
請求層動作適合保護 HTTP 和 HTTPS 介面,也是應對 CC 攻擊的主要手段。
- 限制請求速率:基於漏桶演算法平滑請求速率,對突發請求先調節、再拒絕。
- 限制請求數:統計固定時間視窗內的請求數,超過閾值後執行拒絕動作。
- 延遲請求:為匹配規則的請求增加固定延遲,降低自動化客戶端的請求效率。
- 封鎖請求:持續觀察請求速率,在連續多個時間視窗達到條件後封鎖請求一段時間。
網路層封禁
網路層動作會在作業系統層面丟棄來源 IP 的資料包,影響範圍大於單個 HTTP 請求。應先確認來源 IP 可信,避免封禁共享出口、代理或 NAT 後方的正常使用者。
擴充套件流量保護
以下能力不屬於典型的 HTTP CC 請求識別,但可以保護 TLS 握手資源或控制響應頻寬。
- 限制 SSL 握手速率:按客戶端 IP 地址限制 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 封禁。
配置流程
- 在 Edge Admin 中進入目標應用的 頁面規則 頁面。
- 新建規則,並根據 URI、客戶端資訊或請求特徵設定生效條件。
- 在 動作 中選擇相應的 CC 攻擊防護動作。
- 設定關鍵字、閾值、時間視窗和拒絕動作等引數。
- 建立規則併發布應用配置。
- 使用受控測試流量驗證正常請求、達到閾值和解除限制後的行為。
限制 SSL 握手速率需要在應用的 SSL 配置頁面中啟用,具體步驟請參見限制 SSL 握手速率。
配置 CC 攻擊日誌
啟用防護規則後,建議同時啟用 CC 攻擊日誌,記錄規則觸發情況並形成“檢測、處置、觀察、調優”的閉環。
在 Edge Admin 的 全域性配置 > 日誌 中開啟 啟用 CC 日誌,並根據攻擊流量規模配置日誌限速、統計過期時間、共享記憶體、緩衝區和刷入時間間隔。日誌限速可以避免高頻攻擊期間為每個請求寫入日誌,降低日誌系統本身的開銷。
配置釋出後,可以在 應用 > CC 日誌 中檢視觸發記錄,並結合客戶端標識、URI、處置結果和觸發頻率判斷閾值是否合理。詳細配置和測試步驟請參見 CC 攻擊日誌。
作用範圍
限流和限速狀態預設按應用隔離,不會跨應用共享。例如,同一客戶端觸發了應用 A 的請求速率限制後,仍可正常訪問未觸發限制的應用 B。這一點與直接在共享 NGINX 配置中使用全侷限流區域的行為不同。
作業系統層的 IP 封禁會丟棄該來源 IP 的所有資料包,使用前應結合實際網路拓撲評估影響。
調優建議
- 先建立基線:根據監控和訪問日誌瞭解正常時段與業務高峰的請求速率,再設定初始閾值。
- 縮小規則範圍:優先針對高成本 URI、異常地區或明確的自動化特徵配置規則,減少對正常流量的影響。
- 選擇穩定的關鍵字:共享出口較多時,不要只依賴客戶端 IP 地址;可以結合 URI、Cookie 或其他可信標識細分請求。
- 逐步增強處置:先觀察或使用延遲、驗證碼等方式,再根據攻擊持續時間和誤報情況升級為拒絕或封禁。
- 組合多層策略:使用請求速率限制吸收短時突發,使用封鎖請求處置持續異常,最後對已確認的攻擊來源進行網路層封禁。
- 結合 CC 日誌調優:定期檢查規則觸發來源、受影響 URI 和處置結果,識別閾值過嚴、規則範圍過寬或攻擊特徵變化。
- 驗證恢復行為:除驗證觸發效果外,還要確認時間視窗結束或封鎖過期後,正常請求能夠恢復。