DDoS防护与WAF配置
1. 攻击分类
| 层级 | 攻击类型 | 特征 |
|---|---|---|
| L3/L4 | SYN Flood、UDP Flood、ICMP | 流量型,带宽耗尽 |
| L7 | HTTP 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. 延伸阅读
- Cloudflare DDoS Protection
- 阿里云 DDoS 高防
- OWASP ModSecurity CRS
- 模块 03 Nginx 限流