CentOS服务器网络流量异常通常不会自己冒出来,往往是在监控告警、带宽跑满、业务响应变慢或者被机房封停端口之后才被发现。排查的核心不是盲目抓包,而是先确定流量方向、协议特征和进程归属,再决定是限速、封禁还是清除后门。下面直接按排查顺序展开。
先确认流量异常是入方向还是出方向
登录服务器后第一件事是看实时流量,别急着抓包。用nload、iftop或者sar都能快速判断流量是上行占满还是下行占满。CentOS 7/8最小化安装通常没有nload,可以临时用yum安装,或者直接用系统自带的sar命令。
sar -n DEV 1 10
观察输出中eth0或ens33等网卡的rxkB/s和txkB/s。如果rxkB/s持续接近带宽上限,说明是入站流量异常,可能是被DDoS、被扫描或对外提供了异常下载服务。如果txkB/s持续很高,说明服务器在大量对外发包,常见于被植入挖矿木马、发包工具或成为代理节点。很多运维只关注入站,其实出站流量异常更危险,因为可能意味着服务器已经被控制。
用iftop快速定位异常连接和IP
确定方向后,用iftop查看具体是哪些IP在占用流量。CentOS下安装:
yum install -y iftop iftop -i eth0 -n -P
-n表示不做域名反解,-P显示端口。iftop会按连接实时排序,流量最大的连接排在最上面。注意观察右侧的流量速率,如果某个IP持续以几MB/s甚至几十MB/s的速度传输,基本就能锁定目标。此时记录下对方IP、端口和协议,再结合下一步确认进程。
如果iftop不方便安装,也可以用ss命令查看当前连接和收发队列:
ss -ntup | sort -k6 -rn | head -20
ss输出中的Send-Q和Recv-Q如果持续很大,说明对应连接在大量堆积数据,也是流量异常的一个信号。
定位是哪个进程在产生流量
找到异常IP和端口后,用ss或netstat反查进程。例如发现异常连接是本地端口45678到外部IP的443端口,执行:
ss -ntp | grep 45678
输出中会显示进程名和PID。如果是httpd、nginx、mysql等业务进程,那可能是业务被滥用或配置错误;如果是随机字符串命名的进程,基本可以判定是恶意程序。再用lsof确认进程打开的文件和网络连接:
lsof -p PID
重点看进程的可执行文件路径和当前工作目录。很多挖矿木马会藏在/var/tmp、/dev/shm、/tmp等可写目录下,文件名随机。如果发现进程路径在/tmp下且名称无规律,立即备份样本后杀掉,并检查计划任务和启动项。
检查是否有异常监听端口和出站连接
很多流量异常来自服务器被植入后门后开放的监听端口,或者作为跳板对外发起扫描。用以下命令列出所有监听端口和对应进程:
ss -lntup
逐个核对端口是否属于已知业务。如果出现高位端口监听,比如4444、5555、6666、7777等,或者监听在0.0.0.0但业务根本用不到,就要高度警惕。同时检查出站连接:
ss -ntp | grep ESTAB
看是否有大量连接到陌生IP的短连接或长连接。如果服务器本身不提供对外爬虫、API调用等业务,却出现大量到外部IP的80/443连接,可能是被用作代理或肉鸡。
抓包分析流量内容
如果确认了异常IP和端口,但不确定流量内容,可以用tcpdump抓包。CentOS自带tcpdump,无需额外安装。针对特定IP和端口抓包:
tcpdump -i eth0 host 1.2.3.4 and port 443 -w /tmp/abnormal.pcap -c 5000
抓5000个包后停止,文件保存在/tmp/abnormal.pcap。然后用strings直接查看明文内容:
strings /tmp/abnormal.pcap | head -100
如果流量是加密的,strings看到的多是乱码,但可以观察TLS握手特征、证书信息或SNI。如果流量是明文HTTP,能直接看到请求路径、User-Agent和响应内容。很多异常流量是扫描器或恶意下载,抓包后能看到明显的攻击特征。
对于DNS流量异常,比如服务器突然产生大量DNS查询,可能是被用作DNS放大攻击的反射源,或者中了DNS隧道木马。抓DNS包:
tcpdump -i eth0 port 53 -n -c 1000
观察查询的域名是否有规律,如果大量查询随机子域名或长字符串域名,基本可以确认是DNS隧道。
检查系统资源与进程隐藏行为
流量异常往往伴随CPU、内存或负载异常。用top或htop查看CPU占用最高的进程,注意有些恶意进程会伪装成系统进程名,比如名为init、kworker、sshd但路径不对的进程。用以下命令查看进程的完整路径:
ls -l /proc/PID/exe
如果路径指向/tmp、/var/tmp、/dev/shm或用户家目录下的隐藏文件,就是恶意进程。另外检查/proc目录下是否有大量异常PID,有些木马会fork大量子进程来消耗资源。
还要检查系统是否被安装了内核级rootkit。用rpm -Va验证关键系统文件完整性:
rpm -Va | grep '^..5'
输出中如果出现/bin/ps、/bin/netstat、/usr/bin/top等文件被修改,说明系统命令可能被替换,需要从干净系统拷贝回来或重装。
检查计划任务和开机启动项
恶意程序为了持久化,通常会写入计划任务或启动脚本。检查所有用户的crontab:
cat /etc/crontab ls -la /etc/cron.d/ ls -la /var/spool/cron/
重点看是否有指向/tmp、/var/tmp、/dev/shm下脚本的任务。再看系统启动项:
systemctl list-unit-files | grep enabled
如果出现不认识的service,用systemctl cat 服务名查看具体内容。还要检查/etc/rc.local、/etc/profile、/etc/bashrc等文件是否被追加了恶意命令。
分析流量异常的具体场景与应对
场景一:服务器被用作DDoS反射源。常见于开放了DNS、NTP、Memcached、CLDAP等UDP服务的CentOS服务器。攻击者伪造源IP向服务器发送小请求,服务器向受害者返回大响应,导致出站流量暴增。排查方法是看UDP端口的响应流量,比如Memcached的11211端口、DNS的53端口。如果服务器不需要对外提供这些服务,直接防火墙封禁对应端口,或者限制UDP响应速率。
场景二:服务器被植入挖矿木马。挖矿木马通常会产生持续的出站连接到矿池,端口常见为3333、4444、5555、8080、14444等。流量特征为长连接、小包频繁、持续不断。用iftop看到某个IP持续小流量传输,再用ss反查进程,杀掉后检查计划任务和启动项,同时修补漏洞防止再次入侵。
场景三:服务器被用作代理节点。攻击者植入socks5代理或HTTP代理,对外提供代理服务,导致入站和出站流量都很大。常见端口为1080、8080、3128、8888等。用ss -lntup查看监听端口,发现非业务端口后立即封禁并清除对应进程。
场景四:业务本身被滥用。比如开放的HTTP服务被用来做代理转发,或者文件下载接口被大量盗链。这种需要从业务层面排查访问日志,找出异常请求特征,在Nginx或Apache层做限制。
使用防火墙和限速工具快速止血
在找到根本原因之前,可以先用firewalld或iptables对异常IP进行封禁。CentOS 7/8默认使用firewalld:
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=1.2.3.4 drop' firewall-cmd --reload
如果异常流量来自特定端口,可以临时关闭该端口的对外访问。对于出站流量异常,可以用tc进行限速,但tc配置复杂,紧急情况下可以先封禁异常IP的出站连接。
如果确认是某个进程在大量发包,但暂时无法清除,可以用kill -9强制终止,并用chattr +i锁定相关目录防止重新生成。不过chattr要谨慎使用,避免影响正常业务。
事后加固与监控
流量异常处理完后,必须做加固,否则很快会再次出现。首先更新系统和软件:
yum update -y
其次检查SSH配置,禁止密码登录,改用密钥,修改默认端口,限制登录IP。然后安装fail2ban防止暴力破解。对于对外开放的服务,定期审计端口和进程,建立流量基线监控,比如用Zabbix、Prometheus或云监控设置带宽告警阈值,一旦超过正常范围立即通知。
最后保留异常样本和日志,分析入侵路径。如果是通过Web漏洞进来的,检查Web日志找到攻击时间点和payload,修补对应漏洞。如果是通过弱口令进来的,检查/var/log/secure中的登录记录,确认被爆破的时间和来源IP。
CentOS服务器网络流量异常排查的关键在于快速定位方向、连接和进程,不要一上来就重装系统,那样会丢失入侵证据。按上述步骤操作,大部分流量异常都能在半小时内找到原因并止血。
