关于 implementing-cloud-waf-rules
帮助云应用和 API 团队部署及调优云 WAF 规则的技能,涵盖托管规则、速率限制和误报处理。流程建议先以 Count 模式验证,再切换到 Block 模式。
主要功能
- 01部署托管规则集
- 02配置速率限制规则
- 03设置地理与 IP 信誉拦截
- 04分析日志并调优误报
- 05验证后切换阻止模式
适用场景
- 01为新应用启用 OWASP 防护
- 02缓解登录端点撞库攻击
- 03减少合法请求被误拦
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill implementing-cloud-waf-rules安装后在 Claude Code 中输入/implementing-cloud-waf-rules确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
实施云 WAF 规则
适用场景
- 在需要 OWASP 防护的云负载均衡器后面部署新的 Web 应用或 API 时
- 应用渗透测试发现 SQL 注入、XSS 或其他注入漏洞时
- 认证端点遭遇暴力破解、撞库或机器人攻击时
- 合规要求强制要求使用 WAF 以满足 PCI-DSS 或类似标准时
- 调整 WAF 规则以减少误报对合法应用流量的拦截时
不要使用于网络层 DDoS 防护(请使用 AWS Shield 或 Azure DDoS Protection)、API 认证设计(参见 managing-cloud-identity-with-okta),或应用代码级安全修复(WAF 是补偿性控制措施,不能替代安全代码)。
前置条件
- 已配置 AWS ALB/CloudFront、Azure Application Gateway 或 Cloudflare 作为应用入口点
- 在部署 WAF 之前,具有用于基线分析的应用流量日志
- 具有用于在生产环境执行前验证 WAF 规则的测试环境
- 了解应用请求模式,以尽量减少误报
工作流
第 1 步:部署托管规则集
启用覆盖 OWASP Top 10 漏洞的云提供商托管规则集。先从 Count(检测)模式开始,再切换到 Block(阻止)模式。
# AWS WAF: Create Web ACL with AWS Managed Rules
aws wafv2 create-web-acl \
--name production-waf \
--scope REGIONAL \
--default-action '{"Allow": {}}' \
--visibility-config '{
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "production-waf"
}' \
--rules '[
{
"Name": "AWSManagedRulesCommonRuleSet",
"Priority": 1,
"Statement": {
"ManagedRuleGroupStatement": {
"VendorName": "AWS",
"Name": "AWSManagedRulesCommonRuleSet"
}
},
"OverrideAction": {"Count": {}},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "CommonRuleSet"
}
},
{
"Name": "AWSManagedRulesSQLiRuleSet",
"Priority": 2,
"Statement": {
"ManagedRuleGroupStatement": {
"VendorName": "AWS",
"Name": "AWSManagedRulesSQLiRuleSet"
}
},
"OverrideAction": {"Count": {}},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "SQLiRuleSet"
}
},
{
"Name": "AWSManagedRulesKnownBadInputsRuleSet",
"Priority": 3,
"Statement": {
"ManagedRuleGroupStatement": {
"VendorName": "AWS",
"Name": "AWSManagedRulesKnownBadInputsRuleSet"
}
},
"OverrideAction": {"Count": {}},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "KnownBadInputs"
}
}
]'
第 2 步:创建自定义速率限制规则
部署基于速率的规则,以保护登录端点免受暴力破解和撞库攻击。
# Rate limiting rule for login endpoint (100 requests per 5 minutes per IP)
aws wafv2 update-web-acl \
--name production-waf \
--scope REGIONAL \
--id <web-acl-id> \
--lock-token <lock-token> \
--default-action '{"Allow": {}}' \
--rules '[
{
"Name": "RateLimitLogin",
"Priority": 0,
"Statement": {
"RateBasedStatement": {
"Limit": 100,
"AggregateKeyType": "IP",
"ScopeDownStatement": {
"ByteMatchStatement": {
"FieldToMatch": {"UriPath": {}},
"PositionalConstraint": "STARTS_WITH",
"SearchString": "/api/auth/login",
"TextTransformations": [{"Priority": 0, "Type": "LOWERCASE"}]
}
}
}
},
"Action": {"Block": {"CustomResponse": {"ResponseCode": 429}}},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "RateLimitLogin"
}
}
]'
第 3 步:配置地理封锁和 IP 信誉
阻止来自应用没有任何合法用户的国家/地区的流量,并利用 IP 信誉列表阻止已知恶意来源。
# AWS WAF: Geo-blocking rule
# Block countries not in the allowed list
aws wafv2 create-ip-set \
--name blocked-ips \
--scope REGIONAL \
--ip-address-version IPV4 \
--addresses "198.51.100.0/24" "203.0.113.0/24"
# Add Amazon IP Reputation rule
# AWSManagedRulesAmazonIpReputationList blocks IPs flagged by AWS threat intelligence
第 4 步:调整规则以减少误报
在 Count 模式下分析 WAF 日志,识别被标记的合法请求。为特定 URI 路径或请求模式创建规则例外。
# Enable WAF logging to S3
aws wafv2 put-logging-configuration \
--logging-configuration '{
"ResourceArn": "arn:aws:wafv2:us-east-1:123456789012:regional/webacl/production-waf/id",
"LogDestinationConfigs": ["arn:aws:s3:::waf-logs-bucket"],
"RedactedFields": [{"SingleHeader": {"Name": "authorization"}}]
}'
# Query WAF logs with Athena to find false positives
# Find rules triggered most frequently for legitimate traffic
cat << 'EOF' > waf-analysis.sql
SELECT
terminatingRuleId,
httpRequest.uri,
httpRequest.httpMethod,
COUNT(*) as block_count
FROM waf_logs
WHERE action = 'BLOCK'
AND timestamp > date_add('day', -7, now())
GROUP BY terminatingRuleId, httpRequest.uri, httpRequest.httpMethod
ORDER BY block_count DESC
LIMIT 20
EOF
# Exclude specific rule from managed rule set that causes false positives
# Example: Exclude SizeRestrictions_BODY for file upload endpoint
aws wafv2 update-web-acl \
--name production-waf \
--scope REGIONAL \
--id <web-acl-id> \
--lock-token <lock-token> \
--rules '[{
"Name": "AWSManagedRulesCommonRuleSet",
"Priority": 1,
"Statement": {
"ManagedRuleGroupStatement": {
"VendorName": "AWS",
"Name": "AWSManagedRulesCommonRuleSet",
"ExcludedRules": [{"Name": "SizeRestrictions_BODY"}]
}
},
"OverrideAction": {"None": {}},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "CommonRuleSet"
}
}]'
第 5 步:验证后切换到 Block 模式
在 Count 模式下运行 7-14 天且误报率可接受后,将托管规则切换到 Block 模式以启用主动防护。
# Change OverrideAction from Count to None (use rule group's default Block action)
# Update each managed rule group from {"Count": {}} to {"None": {}}
# Monitor CloudWatch metrics for sudden changes in blocked request volume
关键概念
| 术语 | 定义 |
|---|---|
| Web ACL | Web 访问控制列表,定义针对受保护资源的每个 HTTP 请求进行评估的规则集 |
| 托管规则组 | 由云提供商或第三方供应商维护的预配置规则集,覆盖常见攻击模式 |
| 基于速率的规则 | 按 IP 地址跟踪请求速率,并在时间窗口内阻止超过阈值的 IP 的 WAF 规则 |
| Count 模式 | 记录匹配请求但不阻止它们的 WAF 操作,用于在执行前验证规则 |
| 规则优先级 | 决定先评估哪些规则的数值排序;数字越小优先级越高 |
| 自定义响应 | WAF 在阻止请求时返回特定 HTTP 状态码和标头的能力 |
| 缩小范围语句 | 将基于速率的规则缩小到特定 URI 路径、方法或标头的条件 |
| 误报 | 被 WAF 规则错误阻止的合法请求,需要调整规则或将其排除 |
工具与系统
- AWS WAF:与 ALB、CloudFront、API Gateway 和 AppSync 集成的云原生 WAF
- Azure WAF:Application Gateway 或 Front Door 上的 Web 应用防火墙,具有 OWASP CRS 规则集
- AWS Firewall Manager:跨 Organization 中多个 AWS 账户的集中式 WAF 策略管理
- WAF Security Automations:AWS 解决方案,基于日志分析部署基于 Lambda 的自动化 WAF 规则更新
- CloudWatch Metrics:用于跟踪 WAF 规则匹配率、阻止次数和允许请求的监控仪表板
常见场景
场景:针对身份验证 API 的凭据填充攻击
背景:一个电子商务应用每小时收到来自僵尸网络的 50,000 次登录尝试,使用的是窃取的凭据列表。攻击者每隔几分钟轮换源 IP,以规避简单的基于 IP 的封锁。
方案:
- 部署基于速率的规则,将登录端点请求限制为每个 IP 每 5 分钟 10 次
- 启用 AWS WAF Bot Control 托管规则组,以检测超越 IP 轮换的自动化请求模式
- 添加自定义规则,要求登录请求失败超过 5 次时提供有效的 CAPTCHA 令牌
- 使用 AWSManagedRulesAmazonIpReputationList 实现 IP 信誉封锁
- 创建自定义规则,匹配凭据填充工具常见的 User-Agent 模式
- 监控被封锁请求的指标,并根据正常流量模式调整阈值
陷阱:将速率限制设置得过于激进,会封锁共享 NAT IP 后面的正常用户。仅靠 User-Agent 进行封锁很容易被轮换 agent 字符串绕过。
输出格式
Cloud WAF Configuration Report
================================
Web ACL: production-waf
Scope: Regional (us-east-1)
Protected Resources: ALB (arn:aws:elasticloadbalancing:...)
Report Date: 2025-02-23
RULE CONFIGURATION:
[P0] RateLimitLogin - BLOCK (100 req/5min/IP)
[P1] AWSManagedRulesCommon - BLOCK (1 exclusion: SizeRestrictions_BODY)
[P2] AWSManagedRulesSQLi - BLOCK
[P3] AWSManagedRulesKnownBad - BLOCK
[P4] AWSManagedRulesBotControl - COUNT (evaluation phase)
[P5] GeoBlockRule - BLOCK (12 countries blocked)
TRAFFIC ANALYSIS (Last 7 Days):
Total Requests: 2,847,293
Allowed: 2,791,456 (98.0%)
Blocked: 51,234 (1.8%)
Counted: 4,603 (0.2%)
TOP BLOCKED RULES:
RateLimitLogin: 23,456 blocks (45.8%)
SQLi Detection: 8,234 blocks (16.1%)
CommonRuleSet (XSS): 7,891 blocks (15.4%)
GeoBlockRule: 6,543 blocks (12.8%)
KnownBadInputs: 5,110 blocks (10.0%)
FALSE POSITIVE ANALYSIS:
Reported False Positives: 3
Confirmed False Positives: 1 (SizeRestrictions_BODY for /api/upload)
Action Taken: Rule exclusion applied
评论
支持 Markdown