1. 引言
在业务上线初期,很多团队对 DDoS 攻击的认知停留在「加大带宽、上高防 IP」的层面。直到某天监控告警拉满、网关 CPU 打满、数据库连接池耗尽,才发现攻击早已穿透了第一道防线。本文结合一次真实业务被打崩的复盘,梳理四层(L4)与七层(L7)DDoS 攻击的特征差异,并给出可落地的分层防护方案。
2. 攻击复盘:业务是怎么被打崩的
复盘当天,业务流量在几分钟内从正常水位飙升到数十倍。现象如下:
- 入口带宽打满:机房出口带宽被 SYN Flood 和 UDP Flood 占满,正常请求无法进入。
- 网关 CPU 飙高:七层 CC 攻击持续发起高频 HTTP 请求,Nginx 工作进程 CPU 接近 100%。
- 后端连接池耗尽:大量慢请求占用数据库连接,业务接口大面积超时。
- 告警延迟:由于阈值设置过高,攻击持续一段时间后才触发告警,错过了最佳处置窗口。
这次事故的核心教训是:没有提前区分攻击类型,也没有建立分层防御体系,导致单点防御被击穿后全线崩溃。
3. 四层(L4)攻击特征
四层攻击主要针对传输层,利用 TCP/UDP 协议特性耗尽带宽或连接资源。常见类型如下:
| 攻击类型 | 攻击原理 | 典型特征 |
|---|---|---|
| SYN Flood | 发送大量 SYN 报文,不完成三次握手,耗尽半连接队列 | 半连接数暴涨、SYN 重传率升高 |
| UDP Flood | 向目标端口发送大量 UDP 报文,消耗带宽和处理资源 | UDP 流量占比异常升高、带宽打满 |
| ACK Flood | 发送大量 ACK 报文,迫使设备进行无意义的状态查询 | CPU 占用升高、连接表膨胀 |
| ICMP Flood | 发送海量 Ping 报文,耗尽带宽 | ICMP 流量异常、丢包率升高 |
四层攻击的识别要点:流量特征明显、协议行为异常,通常可以通过流量分析和连接状态统计快速定位。
4. 七层(L7)攻击特征
七层攻击针对应用层,模拟真实业务请求,更难识别。常见类型如下:
| 攻击类型 | 攻击原理 | 典型特征 |
|---|---|---|
| CC 攻击 | 高频请求动态接口,耗尽应用处理能力 | 单 IP 请求频率异常、接口响应变慢 |
| 慢速攻击 | 低速发送不完整请求,长期占用连接 | 连接数缓慢增长、请求迟迟不结束 |
| HTTP 洪水 | 大量合法格式的 HTTP 请求打满应用层 | QPS 异常升高、日志量暴涨 |
| 低频攻击 | 分散 IP 低频请求,绕过频率限制 | 单 IP 不明显、整体流量缓慢上升 |
七层攻击的识别要点:请求格式合法、单点特征不明显,需要结合行为分析和业务特征进行判断。
5. 分层防护方案
针对四层和七层攻击的不同特征,建议建立「网络层清洗 + 应用层防护 + 业务层兜底」的分层防御体系。
5.1 网络层防护(对抗四层攻击)
- 高防 IP / 高防机房:将流量引流到清洗中心,过滤异常报文后再回源。
- SYN Cookie:在网关开启 SYN Cookie,缓解半连接队列耗尽问题。
- 限速与黑白名单:对异常来源 IP 进行限速或封禁。
- 带宽冗余:预留一定带宽余量,为清洗争取时间。
5.2 应用层防护(对抗七层攻击)
- WAF 规则:配置 CC 防护规则,识别高频访问并触发验证码或限流。
- 频率限制:按 IP、账号、设备维度设置接口调用频率上限。
- 行为分析:识别异常请求路径、异常 User-Agent、异常请求间隔。
- 动态令牌:对关键接口增加签名校验或滑块验证,拦截自动化脚本。
5.3 业务层兜底
- 缓存降级:核心数据提前缓存,攻击时优先返回缓存结果。
- 熔断限流:网关层配置熔断策略,保护下游数据库和核心服务。
- 独立资源池:将核心业务与边缘业务隔离,避免整体雪崩。
6. 监控与告警优化
本次复盘暴露的另一个问题是告警滞后。建议从以下维度完善监控:
- 入口带宽:设置带宽使用率告警,超过阈值立即通知。
- 连接状态:监控 SYN 半连接数、TIME_WAIT 数量等指标。
- 应用指标:监控 QPS、响应时间、错误率,设置分级告警。
- 日志分析:接入日志平台,快速定位异常来源和攻击特征。
7. 总结
DDoS 防护不是单一产品能解决的问题,而是需要根据攻击类型建立分层防御体系。四层攻击靠网络层清洗,七层攻击靠应用层识别,业务层做好兜底降级。同时,监控告警要前置、阈值要合理,才能在攻击发生时快速响应,避免业务被打崩。