凌晨三点,监控告警响起,网站彻底无法访问——这是很多服务器运维人员都经历过的噩梦。DDoS攻击往往在最意外的时刻爆发。本文提供从攻击识别到应急处置的完整操作流程,帮助你在最短时间内恢复业务。
一、如何判断是否遭受DDoS攻击
典型症状
- 网站突然无法访问,但服务器本身可以SSH登录。
- 服务器带宽监控显示流量突增至正常值的数十倍以上。
- CPU或内存占用异常飙升,但没有明显的业务高峰。
- Nginx/Apache日志中出现大量来自同一IP段或分散IP的异常请求。
- 服务商发送了带宽超限或IP被封的通知邮件。
快速检测命令
SSH登录服务器后执行以下命令查看当前连接状态:
netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c | sort -rn | head -20
如果 SYN_RECV 数量异常高(数千以上),基本可判定为SYN Flood攻击。
查看当前访问量最高的IP:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
二、应急处置步骤
第一步:立即联系服务商开启防护
第一时间通过工单或客服告知服务商正在遭受攻击,请求开启流量清洗或切换至高防IP。这是最快恢复访问的途径,通常15~30分钟内可生效。
第二步:临时封锁攻击IP段
如果攻击IP相对集中,可通过iptables临时封锁:
iptables -A INPUT -s 攻击IP/24 -j DROP
注意:大规模DDoS的攻击IP通常分散在全球各地,单独封IP效果有限,这一步主要应对CC攻击。
第三步:限制连接频率
针对CC攻击,可在Nginx配置中添加频率限制:
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
在具体location块中应用:
limit_req zone=api burst=20 nodelay;
第四步:接入CDN隐藏真实IP
将域名解析切换至Cloudflare等CDN服务,启用代理模式(橙色云朵),隐藏源站IP。攻击者无法获取真实IP,后续攻击将被CDN层吸收。
第五步:更换IP(必要时)
如果源站IP已完全暴露且持续被攻击,联系服务商更换一个新的IP,并确保新IP不被泄露(关闭所有可能暴露IP的服务,如直接返回IP的邮件服务器)。
三、攻击后的复盘与加固
| 加固措施 | 作用 | 优先级 |
|---|---|---|
| 接入高防服务器 | 根本性防御 | 高 |
| CDN隐藏源站IP | 降低直接攻击面 | 高 |
| WAF规则(CC防护) | 过滤应用层攻击 | 高 |
| 监控告警配置 | 攻击早期预警 | 中 |
| 多机房容灾 | 单节点被打时切换 | 中(大型业务) |
四、预防比处置更重要
- 业务上线前评估攻击风险,有风险的业务直接选高防服务器。
- 不在任何公开场合暴露服务器真实IP(邮件头、历史DNS记录等)。
- 配置完善的监控系统,实现攻击秒级告警。
- 与服务商提前签订应急响应协议,确认遭受攻击时的SLA和处理流程。