服务器带宽被占用,教你快速定位异常流量
什么时候需要检查带宽占用?
当服务器访问变慢、网站响应超时,或者你发现带宽使用率长期接近上限,通常是有异常流量在“抢带宽”。
常见情况包括:被恶意攻击(如DDoS)、网站资源被盗链、某个进程意外下载/上传大文件、或者中了挖矿木马。
下面这套方法可以帮你从现象直达根因,不需要懂网络协议也能操作。
准备阶段:确认服务器状态与安装工具包
登录服务器前先做两件事:
- 用宝塔面板或云厂商控制台查看实时带宽曲线,确认当前是否真的跑满。如果没跑满,说明故障点可能在代码或数据库,不在本教程范围。
- 安装流量监控工具(大部分系统已自带,没带也很容易装):
- CentOS / RedHat 系列:
yum install -y iftop nethogs lsof
- Ubuntu / Debian 系列:
apt install -y iftop nethogs lsof
*如果 nethogs 安装失败,可以先用 iftop + lsof 组合,效果一样。
*
第一步:用 iftop 找出异常IP
运行 iftop 命令(需要root或sudo):
sudo iftop
你会看到一个实时刷新的界面,默认显示所有网卡流量。
重点关注 TX(发送)和 RX(接收)最高的 IP 地址。
如果某个 IP 的流量异常高(比如一直占满带宽),记下它的 IP。
按 q 退出。
小技巧:按n可以切换为数字IP格式,方便复制。按1可以查看总流量统计,避免眼花。
第二步:用 nethogs 或 lsof 锁定进程
方法A:使用 nethogs
sudo nethogs
界面会列出每个进程占用的上传/下载流量。
找到流量最大的那个进程名(比如 php-fpm、sshd、java 或奇怪的名字),记下它的 PID(进程ID)和程序路径。
如果进程名一看就是系统进程但流量极高,可能是被利用了;
如果进程名很陌生,大概率是木马。
方法B:使用 lsof 查端口关联(无 nethogs 时)
先通过 iftop 看到的 IP,再执行:
sudo lsof -i @坏IP地址
例如:
sudo lsof -i @192.168.1.100
它会显示哪个进程(PID、程序名)在跟这个IP通信。
同样,记下PID。
第三步:处理异常进程或封禁IP
情况1:进程可疑(木马、挖矿)
直接杀掉进程并清理相关文件:
sudo kill -9 PID
然后检查文件位置:
ls -la /proc/PID/exe
删除可疑程序文件。建议马上修改服务器密码并检查SSH密钥,防止再次被入侵。
情况2:受控进程(如正常业务被攻击)
先封禁攻击IP,不要直接杀进程。
使用 iptables:
sudo iptables -A INPUT -s 坏IP地址 -j DROP
如果是宝塔面板,进入 安全 → 防火墙 → 添加IP规则,输入 IP 并选择“禁止”。
情况3:盗链或爬虫导致的带宽占用
同样封禁IP,如果对方是合法爬虫但频率过高,可以考虑在 nginx 或宝塔 网站设置 → 流量限制 中做并发限制。
避坑指南与高频问题
Q:用 iftop 发现有大量连接来自同一个 IP,但不知道是正常用户还是攻击,怎么办?
A:先封禁几分钟,看带宽是否下降。
如果下降且业务无影响,基本就是异常流量。
如果影响业务,再解封,然后改用限速而非封禁。
Q:nethogs 看不到任何进程,只有IP信息?
A:可能是因为权限不足。
务必使用 sudo 运行,如果还不行,检查是否安装了 libpcap:yum install libpcap 或 apt install libpcap-dev。
Q:宝塔面板里怎么看实时流量?
A:进入宝塔面板 → 监控 → 网络,能看到实时出入流量曲线。
同时 安全 → 防火墙 可以查看封禁记录。
如果发现某IP频繁且流量大,直接在防火墙禁止该IP。
Q:封禁IP后带宽仍然很高?
A:说明可能还有多个IP在搞事。
重复第一步,找出第二个高流量IP继续封,或者先临时采取更严厉的防御,比如在云厂商安全组设置仅允许业务必须的端口。
效果验证与收尾
封禁IP或停掉恶意进程后,再次运行 iftop 或观察宝塔带宽曲线:正常状态下总流量应下降至合理范围(比如几十Mbps变成几Mbps)。
同时网站响应速度恢复。
如果做了文件清理,建议重启相关服务(如 systemctl restart nginx)确保无残留进程。
最后提醒:定期检查服务器日志(/var/log/secure、/var/log/nginx/access.log)和安装安全工具(如Fail2ban、Cloudflare WAF),能有效预防带宽被异常占用。
如果你正在处理类似问题,按本文步骤走一遍,多数情况能在10分钟内找到根源。