Deploys and tunes WAF rules on AWS WAF, Azure WAF, and Cloudflare to protect cloud apps from OWASP Top 10 attacks. Includes managed rule sets, custom rules, rate limiting, bot management, and log analysis to reduce false positives.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
- 在云负载均衡器后部署需要 OWASP 保护的新 Web 应用或 API 时
Deploys and tunes WAF rules on AWS WAF, Azure WAF, and Cloudflare to protect cloud apps against OWASP Top 10, with managed/custom rules, rate limiting, bot management, and false positive reduction via logging. Use for API security, brute force defense, and compliance.
Deploys and tunes WAF rules on AWS, Azure, and Cloudflare to protect cloud apps from OWASP Top 10 attacks using managed/custom rules, rate limiting, bot management, and false positive reduction via logging.
Secures AWS API Gateway endpoints with WAF using OWASP Top 10 managed rules, custom rate limiting, bot control, IP reputation filtering, and CloudWatch metrics monitoring. For public APIs needing web attack protection.
Share bugs, ideas, or general feedback.
不适用于:网络级 DDoS 防护(使用 AWS Shield 或 Azure DDoS Protection)、API 认证设计(参见 managing-cloud-identity-with-okta),或应用代码级安全修复(WAF 是补偿控制,不能替代安全编码)。
启用涵盖 OWASP Top 10 漏洞的云提供商托管规则集。在切换到阻断(Block)模式之前,先在计数(Count,检测)模式下运行。
# AWS WAF:使用 AWS 托管规则创建 Web ACL
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"
}
}
]'
部署基于速率的规则,保护登录端点免受暴力破解和凭据填充攻击。
# 登录端点速率限制规则(每 IP 每 5 分钟 100 次请求)
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"
}
}
]'
阻断来自应用没有合法用户的国家的流量,并利用 IP 声誉列表阻断已知恶意来源。
# AWS WAF:地理封锁规则
# 阻断不在允许列表中的国家
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"
# 添加 Amazon IP 声誉规则
# AWSManagedRulesAmazonIpReputationList 阻断被 AWS 威胁情报标记的 IP
在计数模式下分析 WAF 日志,识别被标记的合法请求。为特定 URI 路径或请求模式创建规则例外。
# 启用 WAF 日志到 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"}}]
}'
# 使用 Athena 查询 WAF 日志以发现误报
# 查找最频繁触发合法流量的规则
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
# 从导致误报的托管规则集中排除特定规则
# 示例:为文件上传端点排除 SizeRestrictions_BODY
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"
}
}]'
经过 7-14 天的计数模式且误报率可接受后,将托管规则切换到阻断模式进行主动防护。
# 将 OverrideAction 从 Count 更改为 None(使用规则组的默认阻断操作)
# 将每个托管规则组从 {"Count": {}} 更新为 {"None": {}}
# 监控 CloudWatch 指标,观察被阻断请求量的突然变化
| 术语 | 定义 |
|---|---|
| Web ACL(Web 访问控制列表) | 定义针对受保护资源每个 HTTP 请求进行评估的规则集 |
| 托管规则组(Managed Rule Group) | 由云提供商或第三方供应商维护的预配置规则集,涵盖常见攻击模式 |
| 基于速率的规则(Rate-Based Rule) | 跟踪每 IP 地址请求速率的 WAF 规则,阻断在时间窗口内超过阈值的 IP |
| 计数模式(Count Mode) | WAF 操作,记录匹配请求但不阻断,用于执行前的规则验证 |
| 规则优先级(Rule Priority) | 确定规则评估顺序的数字排序,数字越小优先级越高 |
| 自定义响应(Custom Response) | WAF 在阻断请求时返回特定 HTTP 状态码和标头的功能 |
| 范围限定语句(Scope-Down Statement) | 将基于速率的规则缩小到特定 URI 路径、方法或标头的条件 |
| 误报(False Positive) | WAF 规则错误阻断的合法请求,需要规则调优或排除处理 |
场景背景:一个电子商务应用每小时遭受来自僵尸网络使用盗取凭据列表的 5 万次登录尝试。攻击者每隔几分钟轮换源 IP 以规避简单的基于 IP 的阻断。
方法:
常见陷阱:设置速率限制过于激进会阻断共享 NAT IP 背后的合法用户。仅通过 User-Agent 阻断很容易被轮换代理字符串绕过。
云 WAF 配置报告
================================
Web ACL: production-waf
范围: 区域性(us-east-1)
受保护资源: ALB(arn:aws:elasticloadbalancing:...)
报告日期: 2025-02-23
规则配置:
[P0] RateLimitLogin - 阻断(每 IP 每 5 分钟 100 次)
[P1] AWSManagedRulesCommon - 阻断(1 个排除: SizeRestrictions_BODY)
[P2] AWSManagedRulesSQLi - 阻断
[P3] AWSManagedRulesKnownBad - 阻断
[P4] AWSManagedRulesBotControl - 计数(评估阶段)
[P5] GeoBlockRule - 阻断(已阻断 12 个国家)
流量分析(过去 7 天):
请求总数: 2,847,293
允许: 2,791,456(98.0%)
阻断: 51,234(1.8%)
计数: 4,603(0.2%)
TOP 阻断规则:
RateLimitLogin: 23,456 次阻断(45.8%)
SQLi 检测: 8,234 次阻断(16.1%)
CommonRuleSet(XSS): 7,891 次阻断(15.4%)
GeoBlockRule: 6,543 次阻断(12.8%)
KnownBadInputs: 5,110 次阻断(10.0%)
误报分析:
报告的误报: 3
确认的误报: 1(/api/upload 的 SizeRestrictions_BODY)
已采取措施: 已应用规则排除