
1. 目的:防止常见的HTTP层攻击(SQL注入、XSS、恶意爬虫等)。
2. 场景:适用于部署在EC2、ECS或使用CloudFront/ALB的Web应用。
3. 好处:与CloudFront/ALB集成能在边缘拦截恶意流量,减少源站负载并防止应用宕机。
4. 关系:WAF配合CDN、DDoS(AWS Shield)以及服务器安全组可以构成多层防护。
5. 成本:基础规则组按请求计费,启用Managed Rules平均每月几十美元到几百美元,视流量而定。
2.1 架构示例:CloudFront(边缘缓存 + WAF)→ ALB(HTTPS终端)→ Target Group(EC2/Nginx)。
2.2 域名与证书:使用Route 53管理域名,CloudFront/ALB挂载ACM证书(证书免费)。
2.3 安全组:ALB允许80/443,源站只允许ALB/CloudFront的IP范围访问。
2.4 DDoS 配合:启用AWS Shield Advanced可在高风险场景获得更好保护(按需)。
2.5 后端服务器示例配置:EC2 t3.medium(2 vCPU,4GB RAM),Nginx 1.18,最大工作进程 auto;安全组入站仅允许443。
3.1 控制台流程:WAF & Shield → Web ACL → 创建Web ACL → 选择区域或CloudFront(全球)。
3.2 选择规则组:可以添加AWS Managed Rules(OWASP、Bot Control)或自定义Rule。
3.3 关联资源:将Web ACL关联到CloudFront分配或ALB/API Gateway/AppSync。
3.4 使用CLI示例:创建IP集与Rate-based规则的命令示例(见下方JSON与CLI片段)。
3.5 验证与测试:使用curl/siege模拟请求并在WAF日志(CloudWatch Logs/S3)中核对拦截记录。
4.1 规则1:黑名单IP集(阻止已知恶意IP)。
4.2 规则2:速率限制(每5分钟超过2000次触发封禁)。
4.3 规则3:SQL注入签名(自定义正则/字符串匹配)。
4.4 规则4:阻断常见爬虫UA或自定义Header缺失策略。
4.5 规则5:地理位置封锁(阻止特定国家/地区的访问)。
示例AWS CLI创建rate-based规则(简化):
aws wafv2 create-web-acl --name "web-acl-demo" --scope CLOUDFRONT --default-action Allow \
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName="webAclMetric" \
--rules '[{"Name":"rate-limit","Priority":1,"Statement":{"RateBasedStatement":{"Limit":2000,"AggregateKeyType":"IP"}},"Action":{"Block":{}},"VisibilityConfig":{"SampledRequestsEnabled":true,"CloudWatchMetricsEnabled":true,"MetricName":"rateLimitMetric"}}]'
5.1 下表展示常见自定义规则、匹配条件与预期动作:
| 规则名 | 匹配条件 | 阈值/示例 | 动作 |
|---|---|---|---|
| IP黑名单 | 来源IP在IPSet中 | 10.0.0.0/24, 203.0.113.45 | 阻止 |
| 速率限制 | 同IP请求速率 | >2000次/5分钟 | 阻止/挑战 |
| SQL注入签名 | 请求体/URL包含SQL关键字 | "UNION","SELECT","--" | 阻止/监控 |
6.1 CloudFront集成:选择Web ACL作用域为CloudFront,生效于全球边缘节点。
6.2 ALB集成:选择区域scope,关联到ALB,保护区域流量。
6.3 日志:启用WAF日志到S3或CloudWatch Logs,结合Athena做日志分析。
6.4 告警:使用CloudWatch Metric过滤WAF日志,触发SNS报警或自动化脚本。
6.5 示例指标:在某电商流量高峰测试,速率触发次数从0提升到3500/5分钟,WAF拦截率达到92%,源站CPU从65%下降到28%。
7.1 背景:某中型电商在促销期遭遇刷单与大量爬虫,源站(EC2 autoscaling)频繁触满。
7.2 解决方案:引入CloudFront + AWS WAF,添加Rate-based规则(Limit=1500/5分钟)、Bot Control与IP黑名单。
7.3 服务器配置:后端使用3台t3.medium(2vCPU/4GB),ALB前端,安全组仅开启443,最大连接数调整为10240。
7.4 成效数据:日峰值请求从120k/s下降到35k/s到达源站,平均响应时间从1.2s降至0.35s,WAF每小时拦截平均12k次恶意请求。
7.5 经验与建议:先在检测模式运行自定义规则观测5天,再改为封禁;结合IP黑名单与地区封锁能快速降低噪声流量;定期更新Managed Rules并使用自动化脚本同步IPSet。