服务器突然带宽跑满,业务访问出现卡顿或者超时的情况,在运维工作中经常发生。大多数时候不是硬件问题,而是异常请求、流量攻击或者配置错误造成的,按照固定的路径去排查一般可以很快找到原因。

第一步确定流量的流向
登录服务器之后不要马上杀掉进程,用 iftop -P 来查看实时流量分布情况,区分入站和出站占用。入站跑满一般是因为CC攻击、大量的恶意爬虫;出站跑满则是因为文件被盗链、木马外连、数据被拖取等原因造成。配合 nload 观察整个带宽曲线,判断是持续占满还是周期性突发。
第二步确定源IP地址以及连接
用 netstat -antp | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr 来统计已建立连接的源IP数量。如果少量的IP有大量的连接,那么可以认为是针对性的攻击;如果连接分散但是总数很高,则需要检查应用是否存在死循环请求或者接口被刷的情况。
第三步抓包分析协议
用 tcpdump -i eth0 -w /tmp/traffic.pcap 命令抓取一段时间内的数据包,导出后用Wireshark分析协议类型以及请求内容。HTTP异常一般可以在Nginx访问日志中看到同一个接口频繁被访问的情况,直接封禁IP或者设置访问频率限制就可以;UDP突发一般是反射攻击,在防火墙层面进行协议限制。
第四步检查进程和文件
用 nethogs 按进程维度查看实时带宽占用,找到具体的服务。如果发现异常进程读取了未知的文件,要及时隔离并进行排查,看是否存在后门。另外还要检查站点静态资源有没有被第三方盗链,Nginx配置referer防盗链可以迅速止损。
日常建议开启监控告警,当带宽超过阈值时及时通知,防止故障扩大。