2026 AWS WAF实战教程:从零搭建Web应用防火墙防护
Meta Description: AWS WAF实战教程,从零创建Web应用防火墙,防SQL注入/XSS/DDoS攻击,关联ALB/CloudFront/API Gateway,含定价对比表与常见问题解答。
- 为什么你的云服务器需要WAF?
- AWS WAF定价:免费额度+按量计费详解
- 控制台实战:5步创建你的第一个Web ACL
- 高级防护策略:5个实战场景
- CLI命令速查表
- WAF规则管理最佳实践
- AWS WAF vs 其他WAF方案横评
Meta Description: AWS WAF实战教程,从零创建Web应用防火墙,防SQL注入/XSS/DDoS攻击,关联ALB/CloudFront/API Gateway,含定价对比表与常见问题解答。
关键词: AWS WAF、Web应用防火墙、SQL注入防护、XSS防护、ALB WAF、CloudFront WAF、API Gateway WAF、AWS安全防护
一、为什么你的云服务器需要WAF?
AWS WAF(Web Application Firewall)是AWS官方提供的Web应用防火墙服务,可以过滤和监控HTTP/HTTPS请求,阻止恶意流量到达你的应用。它工作在OSI模型的第7层(应用层),专门针对SQL注入、XSS跨站脚本、路径遍历等常见Web攻击进行防护。
与传统防火墙只看端口和IP不同,WAF深入分析每个HTTP请求的内容——检查URL路径、查询参数、请求头和请求体,判断是否包含攻击特征。这使它成为保护Web应用的最后一道关键防线。
决策口诀:有Web应用就开WAF,没有例外。 3分钟能开,能挡80%的自动化扫描攻击。
AWS WAF有三种部署模式,根据你的架构选择:
| 部署模式 | 适用场景 | 关联服务 | 特点 |
|---|---|---|---|
| WAF on CloudFront | CDN加速的静态/动态网站 | CloudFront | 全球边缘节点防护,延迟最低 |
| WAF on ALB | 后端应用服务器负载均衡 | Application Load Balancer | 覆盖所有后端实例,统一策略 |
| WAF on API Gateway | REST/HTTP API接口 | API Gateway | 保护API端点,防滥用 |
二、AWS WAF定价:免费额度+按量计费详解
AWS WAF的定价模式相对透明,核心费用由三部分组成:Web ACL规则数、Web ACL请求处理费、以及托管规则费用。
2.1 基础费用结构
| 费用项 | 价格(us-east-1) | 说明 |
|---|---|---|
| 每个Web ACL | $5.00/月 | 固定费用,每个ACL含100条规则 |
| 每条自定义规则 | $1.00/月 | 超过100条后每条加收 |
| 请求处理费 | $0.60/百万次 | 每个Web ACL单独计费 |
| AWS托管规则(基础) | $0(免费) | 基础规则集免费 |
| AWS托管规则(高级) | $0.30-0.75/百万次 | 基于使用量 |
| 第三方规则(如F5) | $1.50+/百万次 | 按供应商定价 |
2.2 与其他方案价格对比
| 方案 | 月费(1000万请求) | 优势 | 劣势 |
|---|---|---|---|
| AWS WAF(自定义规则) | ≈$11 | 与AWS生态无缝集成,3分钟部署 | 规则数限制 |
| AWS WAF(托管规则) | ≈$14-16 | 开箱即用,持续更新 | 额外费用 |
| Cloudflare Pro | $20 | 免费DDoS防护,易用 | 非AWS原生 |
| Cloudflare Business | $200 | 高级WAF,SLA | 费用高 |
| 自建ModSecurity | ≈$0 | 完全控制,免费 | 运维成本高,需专业人员 |
💡 省钱建议: 如果你的流量在1000万请求/月以内,AWS WAF自定义规则的月费仅$11左右,加上CloudFront免费套餐100万请求/月,性价比极高。超过1亿请求/月才需要考虑更高级的方案。
三、控制台实战:5步创建你的第一个Web ACL
3.1 进入WAF控制台
登录AWS管理控制台,搜索"AWS WAF"或直接访问 https://console.aws.amazon.com/wafv2/。选择区域:如果保护CloudFront,选择"Global(CloudFront)";如果保护ALB,选择你的ALB所在区域。
3.2 创建Web ACL
点击"Web ACLs" → "Create web ACL",填写以下信息:
Name: my-web-acl
Description: Protection for my web application
Resource type: 选择你要保护的资源类型
- Application Load Balancer
- Amazon API Gateway REST API
- Amazon CloudFront distribution
- AWS App Runner service
- Amazon Cognito user pool
- AWS AppSync GraphQL API
3.3 添加默认动作
- Block(阻止):默认阻止所有请求,只有明确允许的才能通过(白名单模式)
- Allow(允许):默认放行所有请求,只阻止已知恶意的(黑名单模式)
💡 建议: 大多数场景选择"Allow"作为默认动作,然后添加规则阻止特定攻击。白名单模式误杀率高,只适合内部系统。
3.4 添加规则
点击"Add rules",你可以选择:
AWS托管规则(推荐新手):
规则名: AWS-AWSManagedRulesCommonRuleSet
类型: AWS managed rule group
动作: Block
常用托管规则集:
| 规则集名称 | 防护内容 | 推荐场景 |
|---|---|---|
| AWSManagedRulesCommonRuleSet | SQL注入/XSS/路径遍历 | 所有网站必装 |
| AWSManagedRulesKnownBadInputsRuleSet | Log4j/Shellshock等已知漏洞 | 所有应用必装 |
| AWSManagedRulesSQLiRuleSet | SQL注入专项 | 数据库驱动的应用 |
| AWSManagedRulesBotControlRuleSet | 机器人/爬虫管控 | 有反爬需求的网站 |
| AWSManagedRulesPHPRuleSet | PHP特定攻击 | PHP应用 |
| AWSManagedRulesWordPressRuleSet | WordPress攻击 | WordPress站点 |
自定义规则(高级用户):
规则名: block-specific-country
类型: IP set
条件: Country = CN (或你需要阻止的国家)
动作: Block
3.5 关联到资源
创建完成后,在Web ACL详情页点击"Resources" → "Add AWS resources",选择你要保护的ALB/CloudFront/API Gateway,关联即可生效。
四、高级防护策略:5个实战场景
4.1 场景一:防SQL注入和XSS
在Web ACL中添加以下规则组合:
{
"Name": "SQLi-XSS-Protection",
"Priority": 1,
"Statement": {
"ManagedRuleGroupStatement": {
"VendorName": "AWS",
"Name": "AWSManagedRulesSQLiRuleSet"
}
},
"Action": { "Block": {} },
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "SQLi-Metrics"
}
}
4.2 场景二:速率限制防DDoS
创建自定义速率规则,限制单个IP的请求频率:
规则名: rate-limit-per-ip
类型: Rate-based rule
速率限制: 2000次/5分钟
动作: Block
适用范围: 单个IP地址
当某个IP在5分钟内发送超过2000个请求,AWS WAF会自动阻止该IP的后续请求,直到冷却期结束。
4.3 场景三:地理位置限制
如果你的应用只服务特定国家/地区,可以设置地理过滤:
规则名: geo-restriction
类型: Geo match
允许的国家: US, JP, SG, HK
默认动作: Block
4.4 场景四:保护API端点
对于REST API,添加针对API滥用的规则:
规则名: api-abuse-protection
类型: Rate-based rule
速率限制: 500次/分钟
适用范围: 单个API key
动作: Block
4.5 场景五:日志记录和监控
启用WAF日志记录到S3或CloudWatch Logs,便于事后分析:
// 使用CLI启用日志记录到CloudWatch
aws wafv2 put-logging-configuration \
--logging-configuration \
ResourceArn="arn:aws:wafv2:us-east-1:ACCOUNT:regional/webacl/my-web-acl/ID" \
RedactedFields=[] \
LogDestinationConfigs=["arn:aws:logs:us-east-1:ACCOUNT:log-group:aws-waf-logs-my-web-acl"]
五、CLI命令速查表
| 操作 | CLI命令 |
|---|---|
| 列出所有Web ACL | aws wafv2 list-web-acls --scope REGIONAL |
| 创建Web ACL | aws wafv2 create-web-acl --name my-acl --scope REGIONAL --default-action Block={} |
| 添加规则 | aws wafv2 update-web-acl --web-acl-id ID --rules file://rules.json |
| 关联资源 | aws wafv2 associate-web-acl --web-acl-arn ARN --resource-arn ALB_ARN |
| 查看请求日志 | aws wafv2 get-sampled-requests --web-acl-arn ARN --rule-metric-name METRIC --time-window StartTime=...,EndTime=... --max-items 100 |
六、WAF规则管理最佳实践
6.1 规则优先级策略
AWS WAF按照规则优先级从低到高依次匹配,一旦某个规则触发了Block或Allow动作,后续规则不再执行。因此,规则的排列顺序直接影响防护效果。建议按照以下优先级排列规则:
优先级1: 白名单规则(允许信任的IP段)
优先级2: 托管规则集(通用防护)
优先级3: 自定义规则(业务特定防护)
优先级4: 速率限制规则(防DDoS)
优先级5: 默认动作(Allow或Block)
6.2 监控与调优
部署WAF后的前两周是关键调优期。你需要持续关注以下指标:
- 被阻止的合法请求:如果有正常用户反馈访问异常,检查WAF日志中是否有误拦截
- 攻击拦截统计:通过CloudWatch仪表板查看各类攻击的拦截数量,了解你面临的威胁类型
- 规则命中率:低命中率的规则可能是冗余的,可以考虑移除以减少处理开销
使用以下命令可以查看规则命中情况:
// 查看特定规则的采样请求记录
aws wafv2 get-sampled-requests \
--web-acl-arn "arn:aws:wafv2:us-east-1:ACCOUNT:regional/webacl/my-acl/ID" \
--rule-metric-name "SQLi-Metrics" \
--time-window StartTime=$(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ),EndTime=$(date -u +%Y-%m-%dT%H:%M:%SZ) \
--max-items 100
6.3 费用优化技巧
WAF的费用主要来自三部分,每一部分都有优化空间:
- Web ACL数量:尽量将多个资源合并到同一个Web ACL管理,减少每个$5/月的固定支出
- 规则数量:每条自定义规则$1/月,用规则组合(Rule Groups)将多个逻辑规则打包,减少单条计费
- 请求处理费:通过CloudFront缓存减少回源请求,从而降低到达WAF的请求数量
一个典型的优化方案:将静态资源通过CloudFront缓存(缓存命中不计WAF请求费),只对动态API请求计费。如果静态资源占比70%,WAF费用可以降低约70%。
七、AWS WAF vs 其他WAF方案横评
| 维度 | AWS WAF | Cloudflare WAF | Akamai WAF | 自建ModSecurity |
|---|---|---|---|---|
| 部署速度 | 5分钟 | 10分钟 | 1-2天 | 数小时 |
| 月费(1000万请求) | $11 | $20-200 | $500+ | $0 |
| 托管规则 | ✅ 免费基础 | ✅ Pro含 | ✅ 企业级 | ❌ 需自行维护 |
| 自定义规则 | ✅ 50条/ACL | ✅ 有限 | ✅ 完全 | ✅ 完全 |
| AWS集成 | ✅ 原生 | ⚠️ 需配置 | ⚠️ 需配置 | ❌ 无 |
| 学习曲线 | 中等 | 低 | 高 | 高 |
| 适合场景 | AWS用户首选 | 多云/混合 | 大型企业 | 预算极低 |
八、常见问题 FAQ
Q: AWS WAF能防住DDoS攻击吗? A: AWS WAF可以防护L7层(应用层)DDoS攻击,如HTTP flood、慢速攻击等。但对于L3/L4层的网络流量DDoS,你需要配合AWS Shield Standard(免费)或Shield Advanced($3000/月)。建议WAF + Shield组合使用,覆盖所有层级的DDoS防护。
Q: 启用WAF后网站变慢了怎么办? A: 正常情况下WAF引入的延迟在1-3ms以内。如果明显变慢,可能是规则匹配导致的。检查是否有过于复杂的正则表达式规则,或者使用了太多检查点(同时检查header+body+URL)。优化建议:减少规则数量,使用托管规则代替自定义正则,启用CloudFront边缘缓存减少回源请求。
Q: AWS WAF和AWS Shield有什么区别? A: AWS WAF主要防护Web应用层攻击(SQL注入、XSS等),工作在HTTP/HTTPS层面。AWS Shield防护DDoS攻击,分为Standard(免费,L3/L4层)和Advanced($3000/月,L7层+响应团队)。对于大多数Web应用,WAF + Shield Standard就足够了。
Q: WAF规则数有限制吗? A: 每个Web ACL最多50条自定义规则,每个Web ACL最多包含5个托管规则组。如果你需要更多规则,可以创建多个Web ACL分别保护不同的资源,或者使用规则组来合并规则。
Q: 可以测试WAF规则效果吗?
A: 可以。AWS WAF提供三种测试方式:(1) 在控制台使用"Rule groups"测试页面模拟攻击请求;(2) 使用aws wafv2 get-sampled-requests查看被拦截的真实请求;(3) 使用AWS Firewall Manager在测试环境中先验证规则再推送到生产环境。
Q: WAF日志会影响性能吗? A: WAF日志记录对性能的影响极小(<1ms),但会产生存储费用。建议:(1) 只记录被阻止的请求(减少日志量);(2) 使用CloudWatch Logs设置日志保留策略(如保留30天);(3) 定期分析日志,识别攻击模式并优化规则。
⚠️ 文中价格为 2026 年参考价,实际费用随区域和官方调价变动,请以 AWS 官网为准。
🚀 需要 AWS 国际版账号?通过 3.chengzicloud.cloud 获取最新注册教程与专属优惠,助你轻松上云。
📖 延伸阅读:AWS IAM权限实战指南 | AWS VPC网络实战指南 | AWS CloudWatch监控告警指南
本文由 3.chengzicloud.cloud 提供,点击访问首页了解更多