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 Flood | 3.47 Tbps (2023) | 10-100 Gbps | 带宽耗尽 |
| SYN Flood | 数百 Gbps | 1-50 Gbps | 连接耗尽 |
| HTTP Flood | 数十亿 rps | 100K-10M rps | 服务器过载 |
| DNS Amplification | 1.7 Tbps | 10-500 Gbps | 带宽耗尽 |
| Memcached | 1.7 Tbps | 100 Gbps-1.7 Tbps | 带宽耗尽 |
9.1.3 攻击成本
| 攻击规模 | 持续时间 | 黑市价格 | 防护成本 |
|---|---|---|---|
| 10 Gbps | 1 小时 | ~$10-50 | $100-500 |
| 100 Gbps | 1 小时 | ~$50-200 | $1,000-5,000 |
| 1 Tbps | 1 小时 | ~$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 Cookie | L4 | 不分配资源,将状态编码在 SYN-ACK 序列号中 | SYN Flood |
| 源端口验证 | L4 | 验证 UDP 包的源端口有效性 | UDP Flood |
| IP 信誉 | L3/L4 | 基于威胁情报的 IP 评分 | 各类攻击 |
| 地理封锁 | L3 | 按地理区域封锁流量 | 区域性攻击 |
| 协议合规 | L4 | 检查协议合规性(如畸形包) | 协议攻击 |
| JS 挑战 | L7 | 浏览器执行 JavaScript | HTTP 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 扩展阅读
- Cloudflare DDoS Protection — Cloudflare DDoS 防护文档
- AWS Shield — AWS DDoS 防护服务
- NIST SP 800-61 — 安全事件处理指南
- Cloudflare Blog: DDoS — DDoS 攻击案例分析
- Digital Attack Map — 全球 DDoS 攻击实时地图
本章小结
| 主题 | 核心要点 |
|---|---|
| 攻击类型 | L3/L4 容量型 + L7 应用层 + 混合攻击 |
| 清洗架构 | Anycast 分散 → L3/4 清洗 → L7 验证 |
| 阈值管理 | 建立基线 → 监控/限速/挑战/封锁/黑洞 |
| 黑洞路由 | 最后手段,正常用户也受影响 |
| 应急 SOP | 检测 → 评估 → 启用防护 → 通知 → 监控 → 复盘 |
下一章:第10章 API 安全 →