跳到主要内容

DDoS防护与WAF配置

1. 攻击分类

层级攻击类型特征
L3/L4SYN Flood、UDP Flood、ICMP流量型,带宽耗尽
L7HTTP Flood、Slowloris、CC应用型,CPU/连接耗尽

L3/4 防护靠 ISP / CDN / 云厂商清洗中心。 L7 防护靠 WAF + 限流 + CDN。

前端能做的:接入 CDN + WAF,Nginx 限流是最后一道。

2. CDN 天然防 DDoS

CDN = 全球分布式节点。攻击流量被分散到各节点,单节点承受量远小于总量。

Cloudflare / 阿里云 CDN 默认含 L3/4 清洗:

  • 超阈值流量自动丢弃
  • Anycast 分散攻击
  • 源站 IP 隐藏

3. WAF(Web Application Firewall)

3.1 Cloudflare WAF

默认规则集(OWASP Top 10):

  • SQL 注入
  • XSS
  • 命令注入
  • 路径穿越
  • 协议违规

自定义规则:

(http.request.uri.path contains "/admin" and ip.geoip.country ne "CN")
→ Block

(http.request.headers["user-agent"] contains "SemrushBot")
→ Block

(http.request.method eq "POST" and
http.request.uri.path eq "/api/login" and
cf.threat_score > 30)
→ Challenge

3.2 阿里云 WAF

控制台 → Web 应用防火墙 → 域名接入(CNAME)→ 规则配置:

  • 基础防护(SQL/XSS/命令注入)
  • CC 防护(频率限制)
  • 自定义规则(IP/UA/URL/Body)
  • Bot 管理

3.3 自建 WAF(ModSecurity + Nginx)

load_module modules/ngx_http_modsecurity_module.so;

server {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
}

OWASP CRS(Core Rule Set)覆盖常见攻击,但误报需要调优。

4. Nginx 层防护

4.1 限速

limit_req_zone $binary_remote_addr zone=api:10m rate=30r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;

server {
limit_req zone=api burst=50 nodelay;
limit_conn conn 100;
limit_req_status 429;
}

4.2 封 IP

deny 1.2.3.0/24;

# 或用 geo 模块
geo $blocked {
default 0;
1.2.3.0/24 1;
5.6.7.0/24 1;
}
if ($blocked) { return 403; }

4.3 封 UA

if ($http_user_agent ~* (bot|spider|crawl|scan)) {
return 403;
}

4.4 Slowloris 防护

client_header_timeout 10s;
client_body_timeout 10s;
send_timeout 10s;
keepalive_timeout 15s;

4.5 大请求防护

client_max_body_size 10m;
large_client_header_buffers 4 8k;

5. 应急响应流程

1. 告警触发(QPS 异常 / 5xx 飙升 / 带宽满)
2. 确认是攻击(看日志 IP / UA / 请求模式)
3. 短期处置:
- CDN 开 Under Attack 模式(Cloudflare 5s shield)
- WAF 加紧急规则
- Nginx 临时封 IP 段
4. 分析:
- 攻击来源(IP 段、ASN)
- 攻击目标(哪个 URL)
- 攻击特征(固定 UA / 固定 Header)
5. 长期防御:
- WAF 规则固化
- 限流调优
- 验证码(人机识别)

6. Bot 管理

不是所有 bot 都恶意:

Bot处理
Googlebot / Bingbot放行(SEO)
监控 bot(UptimeRobot)放行
数据抓取(SemrushBot)限速 / 阻止
恶意爬虫阻止
CC 攻击 bot阻止 + 验证码

Cloudflare Bot Management / 阿里 Bot Intelligence 用机器学习区分。

7. 验证码与人机识别

  • Cloudflare Turnstile(免费,隐式验证)
  • hCaptcha
  • Google reCAPTCHA v3(score)
  • 滑动验证(阿里云 / 腾讯验证码)

关键接口加验证码:登录、注册、评论、支付。

8. 源站 IP 隐藏

CDN 后源站 IP 暴露 = 绕过 CDN 直打。

  • DNS 历史记录泄露:用新 IP,不用旧 IP 的 DNS 记录
  • 邮件服务器:邮件头可能含源 IP。单独 IP 发邮件
  • 子域名泄露:非 CDN 的子域 A 记录
  • 定期用 Censys / Shodan 检查暴露

源站安全组只放行 CDN IP 段。

9. 常见反模式

  • 不用 CDN 裸奔:DDoS 一打就挂
  • 源站 IP 暴露:绕过 CDN 直打
  • WAF 规则不测就上:正常用户被拦
  • 限流阈值太小:正常用户翻页被限
  • 不区分 bot 类型:封了 Googlebot SEO 归零
  • CC 防护只靠 IP 限速:分布式攻击 IP 不重复。要加 UA/指纹
  • Under Attack 模式长期开:所有用户每次 5s 等待
  • 没有应急预案:攻击来了现查文档

10. 延伸阅读