我想将 Amazon WAF 速率限制规则与 Global Accelerator 后的应用程序负载均衡器配合使用,以便保护我的应用程序免受第 7 层 DDoS 攻击。
简短描述
您可以利用 Amazon Global Accelerator、应用程序负载均衡器和 Amazon WAF 来防御应用程序层的分布式拒绝服务 (DDoS, Distributed Denial of Service) 攻击。
**注意:**通过应用程序负载均衡器和 WAF 来限制客户端速率要求您在加速器上将保留的源 IP 设置为 =TRUE。有关更多信息,请参阅在 Amazon Global Accelerator 中保留客户端 IP 地址。
解决方法
Amazon WAF 速率限制规则让您能够自动阻止特定 IP 地址的客户端向您的应用程序发送大量请求。基于速率的规则会根据滑动时间窗口来跟踪每个 IP 地址发出的请求数。当请求超过速率限制时,该规则会立即阻止来自源 IP 地址的请求,直到该地址减少请求数。
**注意:**您还可以将规则配置为检查和阻止请求的许多组成部分,包括发出请求的国家/地区。
先决条件
创建基于规则的 Web ACL
在 Web ACL 中创建基于速率的规则,采用 100 作为激进的速率限制。然后,使用测试用例来检查您的规则是否有效。
- 导航到 Amazon WAF 控制台以创建 Web ACL 规则。
- 向您的 Web ACL 添加自定义规则。
- 为该规则命名,并将基于速率的规则设置为类型。
- 将其速率限制设置为 100。
- 所有其他设置均保留原样。然后,单击添加规则。
- 保存 Web ACL。
测试结果
该测试模拟 HTTP 大规模攻击。负载测试工具会显示收到的请求的进度。在某个阶段,请求开始失败,因为它会被您设置的速率限制规则阻止。
-
在计算机上运行 loadtest 工具。
**注意:**或者,在控制台上打开 Amazon 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
**注意:**将 your_Global_Accelerator_URL 替换为您的 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