
我们在一个用户量暴涨的促销活动中,部署在香港的核心节点突然被海量请求击穿,Nginx、Redis、MySQL全线告警,服务器 CPU 飙升 100%,访问延迟超 5 秒,业务近乎停摆。当我定位流量异常源后发现,是一起混合式 DDoS 攻击,不仅有 SYN flood、UDP flood 这类传统的 L4 攻击,还有基于 POST 接口的 L7 攻击,甚至混入模拟正常用户的慢速 HTTP 连接,极具欺骗性。
那一夜之后,我意识到:仅靠某一层防护是远远不够的,必须建立起涵盖 L3/L4/L7 的“多层纵深防御体系”。
本文将完整还原我在实战中构建 DDoS 多层防护系统的过程,从高防节点部署、Cloudflare 接入、L4 网关过滤到 L7 应用层限流与 Bot 行为识别,每一层都不可忽视。
一、L4 层防护:高防入口网关 + TCP/UDP 封堵
1. 接入香港本地高防 IP 池(如 A5数据、Zenlayer)
我们选择接入 BGP 高防节点(100G 起步),实现如下特性:
- 支持自动清洗 UDP、SYN、ACK flood
- 基于 IP 黑白名单、协议识别动态打标
- 与源站之间使用 GRE/IPIP 隧道转发
示意图:
公网流量
│
┌──┴────────────┐
│ 高防入口节点 │ ← BGP Anycast 多地调度
└──┬────────────┘
│ GRE/IPIP 隧道
┌──┴────────────┐
│ 香港源站裸金属 │
└──────────────┘
关键配置:
# GRE 隧道示例(源站端)
ip tunnel add gre1 mode gre remote <高防出口IP> local <源站公网IP> ttl 255
ip link set gre1 up
ip addr add 10.10.10.2/30 dev gre1
ip route add default dev gre1 table 100
二、L4/L7 跨层防护:Cloudflare 接入与自定义 WAF 策略
1. Cloudflare 接入域名并开启 Under Attack 模式
我们将关键 API 与前端域名迁移至 Cloudflare,并开启以下策略:
- JS挑战(JS Challenge):阻止非浏览器访问
- 速率限制(Rate Limit):限制每分钟请求数
- BOT 管理(Super Bot Fight Mode):识别爬虫
示例规则(每 IP 每 10 秒仅允许 5 次 POST):
{
"action": "block",
"expression": "(http.request.method eq \"POST\" and ip.src in $bad_ips)",
"rate_limit": {
"threshold": 5,
"period": 10
}
}
2. Web 应用层规则编排(自定义 WAF)
我们使用 Cloudflare Rules + Worker 组合进行策略定制:
- 封锁特定 User-Agent(如 python-requests、curl)
- 拦截恶意 Referer(如 traffic bot)
- 识别异常 Cookie 模式(模拟点击器)
三、L7 层防护:Nginx + Lua 实现行为感知限速与灰度封锁
即使经高防/Cloudflare 清洗,仍有部分绕过型攻击能穿透。因此我们在 Nginx 层实施 L7 策略:
1. 实现基于行为的动态限速
我们通过 Lua 模块接入 Redis,记录 IP 行为,识别是否为恶意访问。
核心逻辑:
local ip = ngx.var.remote_addr
local req_count = redis:incr("req:"..ip)
if req_count > 100 then
ngx.exit(429) -- Too Many Requests
end
结合 nginx.conf:
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
server {
location /api/ {
limit_req zone=req_limit burst=20 nodelay;
access_by_lua_file /etc/nginx/lua/inspect.lua;
proxy_pass http://backend;
}
}
2. 灰度封锁机制(Soft Ban)
对于行为可疑但不明确为攻击的 IP:
- 先跳转至验证码页面
- 多次验证失败后才永久封锁
四、可视化监控与联动告警体系
为了实时掌握攻击行为与防护效果,我们建设了以下监控链路:
- Netflow 流量采集 + ELK 分析:流量趋势与源 IP 分布
- Fail2Ban + Webhook:异常行为实时上报至 Slack/钉钉
- Prometheus + Grafana:Nginx、系统层指标统一面板
典型面板指标:
- TCP_SYN 每秒次数(判断 SYN Flood)
- Nginx 5xx 错误率突增
- Cloudflare Rate Limit 命中趋势
五、典型攻防场景实战案例
| 攻击类型 | 触发防护机制 | 实战效果 |
|---|---|---|
| SYN flood 攻击 | L4 高防 BGP 清洗 + conntrack 限制 | QPS 降至正常波动区 |
| 慢速 HTTP 攻击 | Lua 检测慢请求行为 | 1 秒内封锁 IP |
| HTTP/2 带宽消耗 | Cloudflare Worker 自定义流控 | 实时减压源站 |
| 爬虫暴力刷榜 | BOT 管理 + JS Challenge | 无人值守拦截成功 |
六、未来拓展方向与优化建议
- 引入 AI 流量建模:使用 TensorFlow 推理引擎识别攻击模式
- 接入自建 DPI 引擎:精细识别 HTTP Payload 内容特征
- WAF 联动 honeypot:误导扫描器至蜜罐中,记录攻击细节
七、DDoS 防护不是一次性动作,而是持续演进的工程
如果说传统防火墙是“铁闸门”,那么现在的 DDoS 攻击就是会变形、伪装、甚至爬窗的入侵者。企业级场景下,“多层防护 + 联动响应 + 持续优化” 才能真正形成一道动态演进的安全屏障。
从香港节点起步,我们用实际案例证明:只要策略科学、系统可视、防线联动,就能将 DDoS 威胁降到最低,守护核心业务持续可用。











