L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Déploiement et opérations · SKILL.md

implementing-cloud-waf-rules

implementing-cloud-waf-rules

部署和调优 AWS WAF、Azure WAF 和 Cloudflare 上的 Web 应用防火墙规则,保护云托管应用免受 OWASP Top 10 攻击。详细介绍配置托管规则集、创建业务逻辑保护自定义规则、实施速率限制、部署机器人管理,以及通过规则调优和日志分析减少误报。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: implementing-cloud-waf-rules description: > 部署和调优 AWS WAF、Azure WAF 和 Cloudflare 上的 Web 应用防火墙规则,保护云托管应用免受 OWASP Top 10 攻击。详细介绍配置托管规则集、创建业务逻辑保护自定义规则、实施速率限制、部署机器人管理,以及通过规则调优和日志分析减少误报。 domain: cybersecurity subdomain: cloud-security tags: [cloud-waf, aws-waf, azure-waf, owasp-protection, rate-limiting] version: 1.0.0 author: mahipal license: Apache-2.0

实施云 WAF 规则

适用场景

  • 在云负载均衡器后部署需要 OWASP 保护的新 Web 应用或 API 时
  • 应用渗透测试发现 SQL 注入、XSS 或其他注入漏洞时
  • 遭受针对认证端点的暴力破解、凭据填充或机器人攻击时
  • 合规要求(如 PCI-DSS)强制要求部署 WAF 时
  • 调优 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 漏洞的云提供商托管规则集。在切换到阻断(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"
      }
    }
  ]'

步骤 2:创建自定义速率限制规则

部署基于速率的规则,保护登录端点免受暴力破解和凭据填充攻击。

# 登录端点速率限制规则(每 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"
      }
    }
  ]'

步骤 3:配置地理封锁和 IP 声誉

阻断来自应用没有合法用户的国家的流量,并利用 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

步骤 4:调优规则以减少误报

在计数模式下分析 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"
    }
  }]'

步骤 5:验证后切换到阻断模式

经过 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 规则错误阻断的合法请求,需要规则调优或排除处理

工具与系统

  • AWS WAF:与 ALB、CloudFront、API Gateway 和 AppSync 集成的云原生 WAF
  • Azure WAF:Application Gateway 或 Front Door 上具有 OWASP CRS 规则集的 Web 应用防火墙
  • AWS Firewall Manager:跨 Organization 中多个 AWS 账户的集中化 WAF 策略管理
  • WAF Security Automations:基于日志分析自动更新 WAF 规则的 AWS Lambda 解决方案
  • CloudWatch 指标:用于跟踪 WAF 规则匹配率、阻断计数和允许请求的监控仪表盘

常见场景

场景:针对认证 API 的凭据填充攻击

场景背景:一个电子商务应用每小时遭受来自僵尸网络使用盗取凭据列表的 5 万次登录尝试。攻击者每隔几分钟轮换源 IP 以规避简单的基于 IP 的阻断。

方法:

  1. 部署基于速率的规则,将登录端点请求限制为每 IP 每 5 分钟 10 次
  2. 启用 AWS WAF Bot Control 托管规则组,检测 IP 轮换之外的自动请求模式
  3. 添加自定义规则,要求登录失败超过 5 次的请求提供有效 CAPTCHA 令牌
  4. 使用 AWSManagedRulesAmazonIpReputationList 实施 IP 声誉阻断
  5. 创建匹配凭据填充工具常见 User-Agent 模式的自定义规则
  6. 监控被阻断请求指标,根据合法流量模式调整阈值

常见陷阱:设置速率限制过于激进会阻断共享 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)
  已采取措施: 已应用规则排除
Skills enregistrées