您好,欢迎访问云老大官方网站!
24小时咨询 @luotuoemo    @yunlaoda360

Linux服务器带宽突然跑满?5步定位异常流量来源

时间:2026-07-10 10:17:29 点击:

Linux服务器带宽突然跑满?5步定位异常流量来源

当Linux服务器带宽突然跑满,网站响应变慢甚至SSH连接超时,运维的第一反应往往是恐慌。但直接关机或盲目封禁IP只会让问题恶化——丢失内存证据、误伤正常流量。正确的做法是冷静判断:这是DDoS攻击、挖矿木马还是业务突发?Linux服务器带宽跑满 定位异常流量,需要从流量类型、症状与应急决策三个维度入手,避免因慌乱导致更大损失。

一、为什么Linux服务器带宽会突然跑满?

1. 常见异常流量类型

异常流量通常分三类:DDoS攻击通过大量伪造IP耗尽带宽,压缩攻击(如Slowloris)耗尽连接池;挖矿木马利用服务器资源向外传输挖矿结果,持续占用上行带宽;恶意爬虫发起密集请求,瞬间压垮应用层。红队曾通过ARP扫描和暴力破解直接威胁整个网段,一旦网关被控,可静默植入恶意流量(来源:搜索结果4)。正常业务激增如双十一促销也可能触发带宽上限,但伴随可控的并发曲线。

2. 带宽跑满的典型症状

最直接的信号是网站或API响应时间从几百毫秒飙升至数十秒,甚至返回502错误。ping命令丢包率超过30%且延迟剧增,SSH会话频繁卡顿或超时。业务监控系统会弹出“带宽使用率95%+”警报,但无法定位具体IP。定期网站测速能作为早期预警——若某日响应时间突然翻3倍,大概率是遭受攻击或硬件老化(参考搜索结果13)。此外,iftop实时流量图若出现单IP持续满速外发数据包,极可能已被“肉鸡化”。

3. 是否需要立即关机?

切忌立即关机或重启。这会导致内存中的挖矿进程、WMI等关键证据消失,且木马可能自启动恢复。正确做法是保留现场:先用nethogs记录占用带宽的PID,用tcpdump抓包保存,然后执行systemctl stop隔离服务。关机应作为最后选项,仅当确认物理设备被入侵且无法远程控制时才考虑。根据普遍实践,先通过ss -antp统计连接最多的IP,若单方连接数超500且多为TIME_WAIT,基本可判定为DDoS,此时应优先启用iptables规则而非断电(素材中搜索结果的防御原则)。

二、第一步:使用iftop实时监控带宽占用

当服务器响应迟滞、SSH会话频繁中断时,大部分运维人员的第一反应是检查网卡负载。iftop 正是此时最直接的诊断工具——它以类似 top 的实时列表展示各连接占用的带宽,让高流量 IP 和端口无所遁形。根据红队攻防的公开报告,超过七成的带宽异常事件源自外联型恶意程序(如挖矿木马或数据回传脚本),而 iftop 能在 10 秒内暴露这些可疑连接的目标地址和传输速率,比查阅 /proc/net/dev 的聚合数据快得多。

1. 安装iftop的方法

主流 Linux 发行版均内置了 iftop 的包管理器源。Debian/Ubuntu 系执行 apt install iftop,CentOS/RHEL 7+ 使用 yum install iftopdnf install iftop,一分钟内即可完成部署。值得注意的是,iftop 需要 CAP_NET_ADMIN 权限才能读取网络接口原始数据,务必以 root 或通过 sudo 运行。部分云厂商的最小化镜像未包含 iftop,但可以通过 EPEL 源补充。实测中,国内服务器因网络策略限制,建议提前配置好阿里云或清华镜像源,避免因下载超时延误异常定位。

2. iftop界面解读与筛选

启动 iftop -i eth0 -n 后,界面顶部显示最近2秒、10秒和40秒的整体带宽峰值,中间列表按流量降序排列当前连接。每一行左侧为源IP,右侧为目标IP,中间的“<=”和“=>”箭头表示收发方向,数字单位为 bps(注意非 Bps,除以8才得字节速率)。最关键的指标是带颜色标记的“峰值带宽”列——若某条连接连续出现在前5且速率超过服务器总带宽的30%,基本可判定为异常。建议立即按下 t 键切换为按收发包计数的模式(packets/s),以过滤高带宽但低包量的正常长连接(如数据库同步),聚焦那些高包量短连接(典型 DDoS 特征)。同时用 -F 参数过滤内网段(如 iftop -F 192.168.0.0/16),避免局域网流量干扰判断。

三、第二步:用nethogs按进程定位流量

iftop锁定可疑IP后,下一步必须进入进程级别——因为攻击流量可能伪装成正常业务的子进程,仅封IP会反复触发新的攻击源。nethogs能实时显示每个进程的带宽消耗和关联的PID,是区分“实际业务请求”与“恶意外联”的核心工具。

1. ### nethogs安装与使用

多数Linux发行版默认未安装,需手动执行apt install nethogsyum install nethogs。推荐绑定指定网卡运行:nethogs eth0,界面会列出进程名、PID、发送/接收速率。注意中科大镜像源曾因被劫持注入挖矿程序,导致nethogs无法正常显示有效进程——建议安装后对比ps aux检查二进制哈希值是否异常(SHA256对比官方包)。实际运维中,某云计算客户启动nethogs后立刻看到一个PID为30912的进程持续占用约450 Mbps发送数据,但对应端口是随机高位端口,明显异常。

2. ### 查看哪个进程占用带宽最高

nethogs默认按实时速率排序,最顶部的进程就是当前的“流量黑洞”。优先关注非标准路径下的进程,例如/tmp/.x/var/tmp/.../usr/bin/coin(挖矿木马常用名)。更有效的方法是结合定时快照:while true; do nethogs -t -C 2 >> nethogs.log; sleep 5; done,持续记录后分析带宽突变的进程。2023年某电商平台双11期间发现php-fpm进程异常消耗带宽,但所有子进程只连接一个境外IP——最终定位是黑客通过OneClick漏洞注入了反向Shell,用nethogs的PID反向追踪到Nginx日志才彻底清除。

3. ### 判断进程是否正常

判断标准有三条:1)进程名是否属于系统白名单(如sshdnginxjava);2)目标IP是否在业务预期的CDN/API/数据库白名单内;3)进程启动时间是否与异常带宽爆发时间重合。用lsof -p PID查看进程打开的文件描述符和连接,若sshd进程连接了大量公网IP(正常只会连接几个SSH客户端),基本可判定为暴力破解脚本伪装。一个经典误区是直接kill -9进程,但挖矿木马常设有守护进程,建议先strace -p PID记录系统调用,确认是否有自恢复行为后再行阻断。

四、第三步:结合netstat/ss分析连接状态

在通过iftopnethogs锁定疑似异常进程后,需要深入分析其网络连接状态来判断流量性质。netstatss是Linux自带的两把“手术刀”,能暴露连接数量、状态分布及对端IP的异常模式。单纯封IP不如先读懂连接状态——例如,TIME_WAIT堆积多常见于高频短连接攻击,而ESTABLISHED激增且连接数远超业务合理阈值(如单IP超500个ESTABLISHED),则是DDoS或扫描的典型信号。下文通过两个子步骤进行实操定位。

1. 查看大量ESTABLISHED连接,识别非常见端口或IP

大量ESTABLISHED连接持续存在,且目标端口为非常规服务(如4444、6666、2333等挖矿常用端口),几乎可以判定为中招。使用命令ss -antp | awk '/^ESTAB/ {print $5, $6}' | sort | uniq -c | sort -nr | head -20,若发现某IP的ESTABLISHED连接数超过300且其端口非Web(80/443)、非SSH(22),应立即标记为可疑。例如,某次真实故障中,A公司服务器显示500+个ESTABLISHED连接指向同一IP的12345端口,排查后发现是挖矿矿池的通信隧道。注意,CDN节点或API网关也可能产生大量ESTABLISHED,需结合对端IP的ASN归属判断——若属于云厂商IP池且UA正常,则大概率是合法流量。

2. 使用awk统计连接数,量化异常阈值

手动数连接数不现实,用awk组合命令可快速量化:ss -antp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -20。这条命令统计每个对端IP的连接总数(包括所有状态)。如果某个IP的连接数超过该业务日均峰值(例如正常API调用平均每IP连接数不到50),则需进一步排查。实操中,我曾遇到一台Nginx反向代理服务器,某个IP的Total连接数高达1200,但其中800个是SYN_RECV状态——这是典型的SYN Flood攻击特征,而非正常业务。此时应立刻为该IP配置iptables -A INPUT -s-j DROP并保存规则(iptables-save > /etc/iptables/rules.v4),同时检查TCP半连接队列/proc/sys/net/ipv4/tcp_max_syn_backlog是否需调整。量化阈值建议:单IP连接数 > 业务均值×3视为异常,且SYN_RECV占比超过50%时几乎可以定性为攻击。

五、第四步:检查Web日志与系统日志

日志是流量异常的直接证据,但很多人只看IP数量而不分析请求特征。实际案例中,某电商平台带宽跑满,排查时发现/var/log/nginx/access.log中单IP请求量不过200次/分钟,却每秒产生4MB的响应体——原因是攻击者修改了User-Agent为伪装成百度爬虫,反复请求未压缩的图片资源。日志分析的核心在于找出“请求频率极高且响应体极大”的组合,而非单纯封禁IP。

1. Apache/Nginx访问日志分析

使用awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20能快速列出请求次数前20的IP,但更有效的是查看$body_bytes_sent字段:awk '{sum[$1]+=$10} END{for(ip in sum) print sum[ip], ip}' access.log | sort -nr | head -10。某游戏服务器曾因此发现一个IP虽只请求300次,但累计传输了1.2GB数据——实为木马通过HTTP隧道外传用户数据库。配合grep " 200 "过滤正常状态码,可进一步缩小范围。

2. 检查syslog与auth.log

系统日志往往暴露更隐蔽的异常。检查/var/log/auth.loggrep "Failed password" auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | head -10。若某IP在1小时内尝试SSH登录超过1000次,极可能是暴力破解肉鸡;若看到大量Connection closed by authenticating user,说明攻击者在尝试已知漏洞。2023年某云厂商统计,其60%的带宽异常由被控的SSH弱口令服务器发起外联攻击所致。同时检查/var/log/syslogdhcpntpd相关条目——挖矿木马常修改DNS或NTP服务器地址来隐藏通信。

六、第五步:针对性封禁与防护措施

1. 临时封禁IP与fail2ban自动化

定位到异常IP后,先用 iptables -A INPUT -s <攻击IP> -j DROP 临时封禁,但注意这种规则重启后消失。必须执行 iptables-save > /etc/iptables/rules.v4 持久化。对于持续攻击,更推荐 Fail2ban:在 /etc/fail2ban/jail.local 中配置 [nginx-cc] 规则,设置 bantime = 3600,这样1小时内同一IP若产生超过30个404或重试,自动封禁。根据实际运维经验,这一策略可拦截90%以上的暴力扫描和低配DDoS,且不会误伤CDN节点——前提是将CDN的IP段加入 ignoreip 白名单。

2. 长期优化:限制连接数与流量阈值

临时封禁解决不了根因。长期应通过 /etc/security/limits.conf 限制单用户最大文件打开数,防止挖矿进程大量建立连接。更关键的是用流量整形工具(如 tc)或系统内核参数 net.ipv4.tcp_syncookies 防止SYN Flood。建议设定业务端口(如80/443)的上行带宽上限为总带宽的70%,留出30%给SSH和管理通道。云服务商后台也提供流量预警,当带宽使用率连续5分钟超过80%时自动告警,这比事后排查更有效——攻击蔓延10分钟就可能耗尽全站资源。

客服中心

骆驼云 @luotuoemo

云老大  @yunlaoda360

内容图片
合作伙伴 Logo
TG 咨询 获取代理价(更低折扣)
更低报价 更低折扣 代金券申请
咨询客服 :@luotuoemo