强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

CDN 与 WAF 精讲教程 / 第09章 DDoS 防护

第09章 DDoS 防护

DDoS(分布式拒绝服务)攻击是最常见、破坏力最大的网络攻击之一。本章全面讲解 DDoS 攻击类型、防护原理、清洗技术和最佳实践。


9.1 DDoS 攻击概述

9.1.1 攻击分类

DDoS 攻击分类:

┌──────────────────────────────────────────────────────────────────┐
│  L3/L4 攻击(容量型)                                            │
│  ├── UDP Flood        大量 UDP 包拥塞带宽                        │
│  ├── ICMP Flood       大量 ICMP 包                               │
│  ├── SYN Flood        大量半连接耗尽 TCP 资源                     │
│  ├── ACK Flood        大量 ACK 包                                │
│  ├── DNS Amplification 反射放大攻击                              │
│  ├── NTP Amplification NTP 反射放大                              │
│  └── Memcached Amplification  Memcached 反射放大                 │
├──────────────────────────────────────────────────────────────────┤
│  L7 攻击(应用层)                                               │
│  ├── HTTP Flood       大量 HTTP 请求                             │
│  ├── Slowloris        慢速连接耗尽连接池                         │
│  ├── CC 攻击          针对特定 API/页面的高频请求                 │
│  ├── RUDY             慢速 POST 攻击                            │
│  └── ReDoS            正则表达式拒绝服务                         │
├──────────────────────────────────────────────────────────────────┤
│  混合攻击                                                        │
│  ├── L3/L4 大流量淹没 + L7 应用层精确打击                        │
│  └── 多向量组合攻击(同时发起多种攻击)                          │
└──────────────────────────────────────────────────────────────────┘

9.1.2 攻击规模参考

类型历史峰值常见规模影响
UDP Flood3.47 Tbps (2023)10-100 Gbps带宽耗尽
SYN Flood数百 Gbps1-50 Gbps连接耗尽
HTTP Flood数十亿 rps100K-10M rps服务器过载
DNS Amplification1.7 Tbps10-500 Gbps带宽耗尽
Memcached1.7 Tbps100 Gbps-1.7 Tbps带宽耗尽

9.1.3 攻击成本

攻击规模持续时间黑市价格防护成本
10 Gbps1 小时~$10-50$100-500
100 Gbps1 小时~$50-200$1,000-5,000
1 Tbps1 小时~$500-2000$10,000+

9.2 流量清洗架构

9.2.1 清洗流程

DDoS 流量清洗架构:

  攻击流量 + 正常流量
         │
         ▼
┌────────────────────────────────────────────────────────────┐
│  Step 1: 边缘分散 (Anycast)                                │
│  攻击流量被分散到全球 300+ PoP,单点压力大幅降低             │
└────────────────────┬───────────────────────────────────────┘
                     │
                     ▼
┌────────────────────────────────────────────────────────────┐
│  Step 2: L3/L4 清洗                                        │
│  ├── SYN Cookie / SYN Proxy                               │
│  ├── UDP 源验证                                            │
│  ├── 反射攻击指纹匹配                                      │
│  ├── 协议合规性检查                                        │
│  └── IP 信誉评分                                           │
│  淘汰率: 90-99% 恶意流量                                    │
└────────────────────┬───────────────────────────────────────┘
                     │
                     ▼
┌────────────────────────────────────────────────────────────┐
│  Step 3: L7 清洗                                           │
│  ├── HTTP 请求合法性检查                                    │
│  ├── JS 挑战 / CAPTCHA                                     │
│  ├── 行为分析                                              │
│  └── 速率限制                                              │
└────────────────────┬───────────────────────────────────────┘
                     │
                     ▼
              正常流量 → 源站

9.2.2 清洗技术详解

技术层级原理适用攻击
SYN CookieL4不分配资源,将状态编码在 SYN-ACK 序列号中SYN Flood
源端口验证L4验证 UDP 包的源端口有效性UDP Flood
IP 信誉L3/L4基于威胁情报的 IP 评分各类攻击
地理封锁L3按地理区域封锁流量区域性攻击
协议合规L4检查协议合规性(如畸形包)协议攻击
JS 挑战L7浏览器执行 JavaScriptHTTP Flood
速率限制L7请求频率限制CC 攻击

9.2.3 Anycast 分散效果

无 Anycast(单点接收):
  攻击 100Gbps → [单 PoP] → 💥 瓦解

有 Anycast(全球分散):
  攻击 100Gbps ──→ [PoP 北京] 3Gbps  ← 可承受
                 ├──→ [PoP 上海] 2Gbps
                 ├──→ [PoP 广州] 2Gbps
                 ├──→ [PoP 东京] 3Gbps
                 ├──→ [PoP 新加坡] 2Gbps
                 ├──→ [PoP 法兰克福] 3Gbps
                 ├──→ [PoP 伦敦] 2Gbps
                 └──→ ... 300+ PoP

  每个 PoP 仅需处理 <5Gbps → 在本地清洗能力范围内

9.3 阈值设置

9.3.1 基线建立

建立正常流量基线:

┌──────────────────────────────────────────────────────────┐
│ 正常流量基线 (7 天观测)                                    │
│                                                          │
│  指标              │ 均值       │ 峰值       │ 异常阈值   │
│  ─────────────────┼───────────┼───────────┼───────────│
│  QPS              │ 5,000     │ 15,000    │ 30,000    │
│  带宽 (Mbps)      │ 500       │ 1,500     │ 5,000     │
│  连接数            │ 10,000    │ 30,000    │ 100,000   │
│  错误率 (5xx)     │ 0.01%     │ 0.1%      │ 1%        │
│  TTFB (ms)        │ 100       │ 300       │ 1000      │
│  新连接率          │ 500/s     │ 2,000/s   │ 10,000/s  │
└──────────────────────────────────────────────────────────┘

9.3.2 阈值策略

级别条件响应
监控流量超过基线 150%日志记录、告警通知
限速流量超过基线 200%启用严格速率限制
挑战流量超过基线 300%启用 JS 挑战
封锁流量超过基线 500% 或单 IP 异常自动封锁攻击源
黑洞带宽饱和,影响其他客户临时黑洞路由

9.3.3 Cloudflare DDoS 防护设置

# Cloudflare DDoS 防护层级

# 1. L3/4 DDoS 防护 (自动启用)
# Cloudflare 自动检测并缓解 L3/4 攻击
# 无需手动配置,全球 Anycast 自动分散

# 2. HTTP DDoS 防护规则 (可自定义)
(http.request.uri.path eq "/") and
(http.rate_score gt 100)
→ Action: Block
→ Sensitivity: High

# 3. IP 防火墙规则 (应对特定攻击源)
(ip.src in $malicious_ips)
→ Action: Block

# 4. Under Attack Mode (紧急模式)
# 全站启用 5 秒 JS 挑战
# 所有请求必须通过 JS 验证
# 建议仅在 DDoS 攻击期间启用

9.4 挑战响应策略

9.4.1 渐进式响应

渐进式 DDoS 响应流程:

  ┌────────────┐
  │ 正常状态    │  所有请求直接放行
  └──────┬─────┘
         │ 流量异常
         ▼
  ┌────────────┐
  │  Level 1   │  启用 JS 挑战 (可疑流量)
  │  JS Challenge│  正常用户无感知
  └──────┬─────┘
         │ 持续攻击
         ▼
  ┌────────────┐
  │  Level 2   │  启用 Managed Challenge (全部流量)
  │  CAPTCHA   │  正常用户需验证
  └──────┬─────┘
         │ 攻击升级
         ▼
  ┌────────────┐
  │  Level 3   │  Under Attack Mode
  │  5s Challenge│  5 秒倒计时 + JS 挑战
  └──────┬─────┘
         │ 带宽饱和
         ▼
  ┌────────────┐
  │  Level 4   │  请求上游黑洞路由
  │  Blackhole │  受影响 IP 段临时不可达
  └────────────┘

9.5 黑洞路由(Blackhole Routing)

9.5.1 原理

黑洞路由流程:

  正常状态:
    用户 → [ISP] → [源站 IP 1.2.3.4] → ✅

  攻击期间(启用黑洞):
    用户 → [ISP] → 路由表: 1.2.3.4 → Null0 → ❌ 所有流量被丢弃
    攻击者 → [ISP] → 同上 → ❌

  恢复后:
    管理员撤销黑洞路由 → 流量恢复

9.5.2 BGP 黑洞路由

# 使用 BGP 触发黑洞路由(示意)

# 路由器配置:将攻击目标 IP 的路由指向 Null0
router bgp 65001
  neighbor x.x.x.x remote-as 65000
  address-family ipv4 unicast
    network 1.2.3.4 mask 255.255.255.255 route-map BLACKHOLE

route-map BLACKHOLE permit 10
  set ip next-hop 192.0.2.1    # 黑洞下一跳
  set community 65535:666      # 黑洞社区标记

9.5.3 黑洞策略

策略说明优缺点
全量黑洞受攻击 IP 全部丢弃简单粗暴,正常用户也受影响
选择性黑洞仅丢弃攻击源 IP 段精准,但需要快速识别攻击源
RTBH (Remote Triggered Blackhole)远程触发黑洞ISP 配合,快速生效
Flowspec基于流量特征的精细化策略最灵活,需要 BGP Flowspec 支持

9.6 DDoS 应急响应 SOP

9.6.1 应急响应流程

DDoS 应急响应 SOP:

  ┌──────────────────┐
  │ 1. 检测 & 确认    │  ← 监控告警 / 用户反馈
  │   确认是否真实攻击 │     时间: 0-5 分钟
  └───────┬──────────┘
          ▼
  ┌──────────────────┐
  │ 2. 评估影响       │  ← 攻击规模、类型、目标
  │   确定攻击向量    │     时间: 5-10 分钟
  └───────┬──────────┘
          ▼
  ┌──────────────────┐
  │ 3. 启用防护       │  ← 开启 Under Attack Mode
  │   调整 WAF 规则   │     联系 CDN 厂商技术支持
  └───────┬──────────┘
          ▼
  ┌──────────────────┐
  │ 4. 通知相关方     │  ← 内部团队 / 客户 / 管理层
  │   定期更新进展    │     预计恢复时间
  └───────┬──────────┘
          ▼
  ┌──────────────────┐
  │ 5. 持续监控       │  ← 观察攻击是否变化
  │   动态调整策略    │     关注源站健康
  └───────┬──────────┘
          ▼
  ┌──────────────────┐
  │ 6. 攻击结束       │  ← 逐步降低防护级别
  │   恢复正常        │     确认服务恢复
  └───────┬──────────┘
          ▼
  ┌──────────────────┐
  │ 7. 事后复盘       │  ← 攻击报告、改进措施
  │   更新防护策略    │     更新 SOP
  └──────────────────┘

9.7 注意事项

⚠️ 源站 IP 泄露:如果攻击者发现源站真实 IP,可绕过 CDN 直接攻击。确保源站 IP 不在 DNS 历史记录、邮件头等处泄露。

⚠️ CDN 费用爆发:DDoS 期间流量暴增可能导致 CDN 账单飙升。部分厂商(如 Cloudflare)承诺不因 DDoS 收取额外费用。

⚠️ 混合攻击:现代 DDoS 攻击通常是 L3/L4 + L7 组合,需要多层防护。

⚠️ 供应链风险:攻击者可能同时攻击 DNS 服务提供商、CDN 厂商,导致防护本身不可用。


9.8 扩展阅读


本章小结

主题核心要点
攻击类型L3/L4 容量型 + L7 应用层 + 混合攻击
清洗架构Anycast 分散 → L3/4 清洗 → L7 验证
阈值管理建立基线 → 监控/限速/挑战/封锁/黑洞
黑洞路由最后手段,正常用户也受影响
应急 SOP检测 → 评估 → 启用防护 → 通知 → 监控 → 复盘

下一章:第10章 API 安全 →