我想要將 AWS WAF 速率限制規則與 Global Accelerator 之後的 Application Load Balancer 搭配使用,保護我的應用程式免遭 Layer 7 DDoS 攻擊。
簡短說明
您可以善用 AWS Global Accelerator、Application Load Balancer 和 AWS WAF,來抵禦應用程式層分散式拒絕服務 (DDoS) 攻擊。
**注意:**透過 Application Load Balancer 和 WAF 設定用戶端速率限制時,您必須在加速器上將來源保留 IP 設定為 True。如需詳細資訊,請參閱在 AWS Global Accelerator 中保留用戶端 IP。
解決方法
AWS WAF 速率限制規則可讓您從特定 IP 地址自動封鎖用戶端,這些 IP 地址會向您的應用程式傳送大量請求。以速率為基礎的規則會依據滑動時間範圍,追蹤每個 IP 地址傳送的請求數目。若請求超出速率限制,則規則會立即封鎖來源 IP 地址的請求,直至該地址降低請求數目。
**注意:**您還可以設定規則來檢查和封鎖請求的許多元件,包括發起請求的國家/地區。
先決條件
建立以規則為基礎的 Web ACL
在 Web ACL 中建立以速率為基礎的規則,強制性速率限制為 100。然後,使用測試案例檢查您的規則是否在運作。
- 導覽至 AWS WAF 主控台,以建立 Web ACL 規則。
- 將自訂規則新增至您的 Web ACL。
- 為規則命名,並將類型設定為以速率為基礎的規則。
- 將規則的速率限制設定為 100。
- 將所有其他設定均保留為原狀。然後,按一下新增規則。
- 儲存 Web ACL。
測試結果
該測試會模擬 HTTP 洪水攻擊。負載測試工具會顯示接收請求的進度。在某些階段,由於您設定的速率限制規則會封鎖請求,請求開始出現失敗。
-
在您的電腦上執行負載測試工具。
**注意:**或者,在主控台上開啟 AWS CloudShell (您可能會收到切換至受支援區域的提示)。
# Install globally as root:
npm install -g loadtest
# On AWS CloudShell, Ubuntu or Mac OS X systems install using sudo:
sudo npm install -g loadtest
-
如下所示輸入 Global Accelerator 的 URL:
# Global Accelerator url
GA_URL=http://your_Global_Acclerator_URL
**注意:**使用您的 Global Accelerator URL 取代 your_Global_Accelerator_URL。
-
在終端執行命令,以啟動請求泛濫負載測試模擬。
**注意:**執行此命令應當需要 45 秒鐘,因此請留意流量。
loadtest -n 1000 -c 1 --rps 25 $GA_URL
該命令共計會傳送 1000 個請求,每秒並行傳送 1 至 25 個請求。以此每秒請求速率傳送時,您會在第四秒達到設定的限制。
-
分析輸出流程。請注意,在某些階段,請求會開始出現失敗。錯誤指示,WAF 規則已封鎖您的來源 IP 地址的所有請求。
[Fri Apr 21 2023 20:26:45 GMT+0000 ] INFO Requests: 0 (0%), requests per second: 0, mean latency: 0 ms
[Fri Apr 21 2023 20:26:50 GMT+0000 ] INFO Requests: 106 (11%), requests per second: 21, mean latency: 22.9 ms
[Fri Apr 21 2023 20:26:50 GMT+0000 ] INFO Errors: 106, accumulated errors: 106, 100% of total requests