服务器DDoS攻击应急处置流程,运维实战案例
服务器突然无法访问,带宽跑满,CPU飙升,这很可能是遭遇了DDoS攻击。
本文以一次真实运维案例为基础,梳理从发现异常到业务恢复的完整应急处置流程,适合刚接触服务器运维的读者跟着操作。
先确认是不是真的被攻击了
接到用户反馈网站打不开时,不要急着重启服务器。
先登录服务器或通过云监控面板查看几个关键指标:
- 带宽曲线:如果出方向带宽在几分钟内从几Mbps飙到几百Mbps甚至跑满,且没有对应业务增长,基本可判定为异常流量。
- 连接数:执行
netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c查看TCP连接状态。若出现大量SYN_RECV,说明可能是SYN Flood攻击。 - CPU与负载:执行
top或uptime,若负载极高但业务进程占用不高,说明大量资源消耗在网络协议栈处理上。 - 访问日志:快速查看Nginx或Apache日志
tail -f /var/log/nginx/access.log,若同一IP或同一User-Agent在极短时间内请求量巨大,可能是CC攻击。
判断结论:带宽异常增大加连接数暴增加CPU升高,同时业务无正常增长,即可初步认定为DDoS攻击。
立即执行的止损操作
确认攻击后,第一目标是保住服务器不宕机,为后续清洗争取时间。
- 联系云服务商或机房
如果你用的是阿里云、腾讯云等,登录控制台找到“DDoS防护”或“流量清洗”入口,查看是否有自动清洗。
若没有,立即提交工单说明遭受攻击,请求开启清洗或切换高防IP。
- 临时封禁攻击源IP
如果是小规模攻击,可通过防火墙快速封禁。
以iptables为例:
iptables -I INPUT -s 192.168.1.100 -j DROP
如果攻击IP很多,可借助 ipset 批量封禁,或使用 fail2ban 自动封禁频繁请求的IP。
- 限制单IP连接数
在Nginx配置中加入限速模块,缓解CC攻击:
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
server {
location / {
limit_req zone=one burst=20 nodelay;
}
}
修改后执行 nginx -t 检查语法,再 nginx -s reload 生效。
- 关闭非必要端口和服务
执行 netstat -tulnp 查看监听端口,关闭不用的服务,减少攻击面。
实战案例:一次10Gbps SYN Flood的处置
某客户一台阿里云ECS突发无法访问,监控显示入方向带宽从5Mbps瞬间升至1.2Gbps。
登录服务器后发现大量SYN_RECV连接,CPU负载超过50。
处置过程:
- 第一时间在阿里云控制台开启“DDoS基础防护”的清洗功能,并提交工单升级到高防IP。
- 在服务器上执行
sysctl -w net.ipv4.tcp_syncookies=1开启SYN Cookie,缓解SYN Flood。 - 使用
iptables -A INPUT -p tcp --syn -m limit --limit 10/s -j ACCEPT限制SYN包速率。 - 联系服务商后,流量被牵引至清洗中心,约15分钟后带宽回落正常,业务恢复。
结果验证:再次执行 netstat -an | grep SYN_RECV | wc -l 发现数量降至个位数,网站可正常打开。
恢复阶段与长期防护建议
攻击流量被清洗后,不要立刻放松。
先确认业务完全恢复,再检查是否有残留后门或异常进程。
- 执行
ps aux | grep -v grep | grep -E 'httpd|nginx|php'查看Web服务是否正常。 - 检查系统日志
tail -100 /var/log/messages有无异常登录记录。 - 建议长期开启云服务商的DDoS防护,并配置告警,当带宽超过阈值时自动通知。
- 如果业务对可用性要求高,可考虑接入CDN或高防IP,隐藏源站IP,降低被直接攻击的风险。
关键结论:DDoS应急处置的核心是快速判断、及时联系服务商清洗、临时限速封禁、验证恢复。
日常做好监控和防护配置,比攻击发生后再补救更重要。