首页 / 资讯动态 / ubuntu服务器异常流量排查运维技巧

ubuntu服务器异常流量排查运维技巧

Ubuntu服务器出现异常流量,最直接的判断依据是网卡吞吐量突然跑满、云服务商后台告警、或者业务响应变慢但CPU和内存占用并不高。先不要急着重启服务,重启会丢失现场,应该先定位流量来源、确认是入站还是出站、是正常业务增长还是被恶意利用。第一步在终端执行iftop -i eth0或者nethogs,这两个工具能快速看到哪个进程、哪个连接在占用带宽。如果没装,用apt install iftop nethogs -y安装。iftop按连接显示实时速率,nethogs按进程显示,两个配合基本能在一分钟内判断出流量是哪个程序产生的。

确认异常流量的方向和协议特征

用ss -tunap可以列出所有TCP和UDP连接,观察状态异常的连接。重点看SYN-SENT、SYN-RECV数量是否异常多,这通常意味着服务器在对外发起大量连接,可能被植入挖矿程序或者被当作DDoS攻击跳板。还要看UDP连接,很多反射放大攻击利用UDP协议,比如DNS、NTP、Memcached反射。执行ss -u -a统计UDP连接数,如果出现大量连接到一个固定目标IP的不同端口,基本可以判定是出站攻击流量。再用tcpdump抓包确认,命令示例:tcpdump -i eth0 -nn -c 200 not port 22,抓200个非SSH包看源地址、目的地址和协议。如果看到大量目的端口为53、123、11211的UDP包,而且源IP是本机,说明服务器被利用做反射攻击。

检查系统是否被植入恶意程序

异常流量很多时候不是配置错误,而是系统被入侵。先检查计划任务,执行ls -la /etc/cron.d/ /etc/cron.hourly/ /var/spool/cron/crontabs/,看有没有不属于系统自带的脚本。再检查systemd服务,执行systemctl list-unit-files --type=service | grep -v enabled,列出所有非默认启动的服务,逐个排查。重点看/usr/bin、/usr/local/bin、/tmp、/var/tmp目录下最近被修改的可执行文件,用find / -type f -mtime -3 -perm -111 2>/dev/null查找最近三天内新增的可执行文件。很多挖矿木马会伪装成类似syslogd、kworker、sshd这样的名字,用ps auxf查看进程树,如果发现进程的父进程是init或systemd但路径可疑,比如从/tmp目录启动,就要高度警惕。

分析网络连接与进程的对应关系

lsof -i -P -n可以列出所有打开网络套接字的进程,比netstat更直观。如果发现某个进程占用了大量连接,先确认这个进程的绝对路径,用readlink -f /proc/PID/exe查看。如果路径指向/usr/bin/ssh但进程行为异常,可能是被替换的二进制文件。再用strace -p PID -f -e trace=network跟踪进程的网络系统调用,看它在向哪些地址发送什么数据。对于高流量进程,还可以用cat /proc/PID/status查看进程的启动时间、内存占用等信息,配合cat /proc/PID/cmdline查看启动参数。如果启动参数里包含矿池地址或者陌生的URL,基本可以确认是恶意程序。

检查SSH登录日志和系统认证记录

很多异常流量来源于服务器被暴力破解后植入后门。执行grep "Failed password" /var/log/auth.log | tail -20查看最近失败的SSH登录尝试,统计来源IP:grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head。如果某个IP尝试了成百上千次,说明有人在爆破。再检查成功登录记录:grep "Accepted" /var/log/auth.log | tail -20,看有没有在异常时间、异常IP的成功登录。如果发现陌生IP成功登录过,立即用last -a查看登录历史,然后修改密码、检查authorized_keys文件是否被添加了公钥。很多攻击者会在/root/.ssh/authorized_keys或者用户目录下添加自己的公钥以便持续访问。

使用nethogs实时定位流量进程

nethogs是最直接的流量排查工具,执行nethogs eth0后,它会按进程实时显示上传和下载速率。如果看到某个进程持续以几MB/s甚至更高的速度上传数据,立即记录PID,然后执行systemctl status PID或者ps -fp PID查看详细信息。如果是nginx、apache这类Web服务进程,可能是网站被挂马或者被用来做代理;如果是mysql、redis这类数据库进程,可能是被利用进行数据外传;如果是未知进程,直接kill掉然后排查来源。nethogs的缺点是只能看到进程名,看不到具体连接,所以需要配合iftop或者ss进一步分析。

配置iptables临时限制异常流量

在确认了异常流量的目标IP或端口后,可以用iptables临时阻断。比如发现服务器在向某个IP的53端口发送大量UDP包,执行iptables -A OUTPUT -d 目标IP -p udp --dport 53 -j DROP。如果发现某个进程在对外发起大量连接,但不确定目标IP,可以先用iptables限制该进程的UID,例如:iptables -A OUTPUT -m owner --uid-owner 1000 -j DROP,这会阻断该用户的所有出站流量。注意这些规则重启后会失效,所以只是临时措施。永久限制需要写入/etc/iptables/rules.v4或者使用ufw。ufw的配置更简单,执行ufw deny out to 目标IP port 53 proto udp即可。但要注意不要误伤正常业务,尤其是DNS查询,很多程序依赖DNS解析。

检查DNS配置和解析行为

有些异常流量表现为服务器频繁向外发起DNS查询,这可能是DNS劫持或者恶意程序在解析矿池域名。检查/etc/resolv.conf,确认DNS服务器地址是否被篡改。执行dig +short example.com或者nslookup example.com测试解析是否正常。如果发现解析结果指向陌生IP,检查/etc/hosts文件是否被添加了恶意条目。还可以用tcpdump -i eth0 port 53 -nn抓取DNS查询包,看查询的域名是什么。如果出现大量随机子域名查询,可能是DNS隧道,攻击者在利用DNS协议传输数据。这种情况下需要检查系统里是否有可疑进程在持续进行DNS查询,用lsof -i :53查看哪些进程在使用53端口。

排查Web服务异常流量

如果服务器上运行着Nginx或Apache,异常流量可能来自网站被攻击或被利用。查看Nginx访问日志:tail -f /var/log/nginx/access.log,观察请求频率、请求路径和User-Agent。如果某个IP在短时间内发起大量请求,可以用awk统计:awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head。如果请求路径中带有大量随机参数或者指向不存在的文件,可能是扫描器或者CC攻击。检查Nginx配置中是否有被添加的代理规则,比如location / { proxy_pass http://某个陌生地址; },攻击者可能修改配置将服务器变成代理节点。还要检查网站目录下是否有新增的WebShell文件,用find /var/www -type f -mtime -3 -name "*.php"查找最近修改的PHP文件,逐个检查内容。

分析系统资源占用与流量关联

异常流量往往伴随CPU或内存占用异常,但也不绝对。有些恶意程序会限制自己的资源占用以避免被发现。执行top -c查看CPU占用最高的进程,注意那些CPU占用不高但网络IO很高的进程。用pidstat -d 1可以查看每个进程的磁盘IO,用pidstat -n 1查看网络IO。如果发现某个进程的网络IO远高于其他进程,结合前面的排查结果基本可以定位问题。还要检查系统负载:uptime,如果负载很高但CPU和内存占用都不高,可能是网络IO或者磁盘IO瓶颈,也可能是进程数量过多。执行ps -eLf | wc -l统计线程数,如果线程数异常多,可能是某个服务被攻击导致大量线程阻塞。

清理恶意程序和修复系统

确认恶意程序后,不要只删除文件,要彻底清理。先kill -9 进程PID,然后删除恶意文件,检查启动项、计划任务、systemd服务中是否有相关条目并删除。如果恶意程序替换了系统命令,比如ps、top、ss等,需要用dpkg -V检查包完整性,或者重新安装coreutils、procps等包。执行debsums -c可以检查所有已安装包的文件完整性,如果发现被修改的文件,用apt install --reinstall 包名重新安装。清理完成后,修改所有用户密码,尤其是root和具有sudo权限的用户。检查/root/.ssh/authorized_keys和所有用户的.ssh目录,删除不明公钥。最后更新系统补丁:apt update && apt upgrade -y,修复可能被利用的漏洞。

建立长期监控和预防机制

排查完当前问题后,需要建立监控机制防止再次发生。安装并配置fail2ban,自动封禁暴力破解的IP:apt install fail2ban -y,编辑/etc/fail2ban/jail.local启用sshd、nginx等服务的防护。配置logwatch或自写脚本定期分析日志,发现异常登录或流量告警。使用vnstat统计网卡流量,vnstat -d可以查看每日流量,如果某天流量突然增大,及时排查。对于云服务器,在云控制台配置流量告警,设置阈值,超过后自动通知。还可以安装auditd审计系统,记录关键文件和目录的修改,一旦有异常修改可以及时发现。最后,定期备份重要数据,确保即使系统被入侵也能快速恢复。

总结排查思路和常用命令

Ubuntu服务器异常流量排查的核心思路是:先定位流量方向,再定位进程,然后分析连接,最后清理和修复。常用命令包括iftop、nethogs、ss、tcpdump、lsof、ps、strace、grep、awk。排查过程中要保持冷静,不要随意重启服务或系统,否则会丢失现场。如果确认是恶意程序,清理后一定要检查启动项和计划任务,防止残留。同时要分析入侵原因,是密码太弱、漏洞未修复还是配置错误,从根源上解决问题。对于生产环境,建议提前部署监控和告警,做到早发现早处理。