服务器带宽突增没有业务访问怎么排查?带宽跑满原因与排查方法

服务器带宽突增但业务无访问时,第一反应应是检查流量方向和数据包特征,多数情况下是遭受了DDoS流量攻击、服务器被植入木马外发数据,或是云平台监控误报,按“入口流量—出口流量—系统进程”的顺序逐一排查,十分钟内就能定位大方向。

先分清流量到底是从哪进来的

排查带宽突增,最忌讳一上来就登录服务器抓包,先搞清楚方向,再对症下药,效率会高得多。

怎么看入向带宽和出向带宽

云服务商控制台里的带宽监控图,通常会把入方向和出方向分开画,看监控图时重点确认两件事:

  • 入向带宽高(服务器接收流量大),说明有大量数据在往服务器上打。
  • 出向带宽高(服务器发送流量大),说明服务器在往外吐数据,这通常更危险。

如果服务器没有业务访问,出向带宽还很高,大概率是服务器被植入恶意程序,正在外传数据或发起对外攻击,入向带宽高则是典型的被攻击特征。

登录服务器看一眼实时流量

控制台的数据有分钟级延迟,登录服务器看实时流量更准确,Linux服务器可以用:

iftop -i eth0 -n

这个命令能直接显示当前网卡流量和占用带宽的IP地址来源,没有安装iftop的话,用yum install iftop或apt install iftop装一下。

也可以看nethogs,它能按进程维度显示流量占用情况:

nethogs eth0

这两个工具配合使用,几分钟就能确定流量方向和数据源。

入向带宽突增的排查方法

入向流量大,说明有外部流量在访问服务器,没有业务访问却有大量入流量,不外乎恶意攻击、被高频爬虫抓取、或CDN回源异常三种情况。

用netstat找出连接数异常的IP

执行下面的命令,看当前服务器上的TCP连接数量和来源IP:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -20

如果输出结果显示某个IP的连接数远大于其他IP,就说明这个IP在向服务器发送大量请求,这时候可以用tcpdump抓包看这个IP发来的数据包特征:

tcpdump -i eth0 host 异常IP -n -c 200

区分攻击类型再定解决方案

不同攻击类型,应对方式完全不同:

  • SYN Flood攻击:数据包特征表现为大量SYN请求但无后续握手,服务器CPU可能不高但带宽被打满,这类攻击需要用防火墙规则或高防IP清洗。
  • HTTP Flood攻击:数据包有正常的HTTP请求结构,日志里会有大量来自同一或分散IP的GET/POST请求,优先在Nginx或WAF层封禁特征UA和异常IP。
  • UDP反射放大攻击:常见于DNS、NTP、Memcached协议的反射,流量特征为随机源IP的大流量UDP包,常规防火墙规则难以封禁,需要运营商级别的流量清洗。

据公开的云安全报告数据,近年来DDoS攻击中反射放大型攻击占比较大,反射攻击又集中在UDP协议的53、123、1900等端口上。

检查是否被恶意爬虫盯上了

如果是爬虫导致的带宽占用,Nginx访问日志里会有明显特征,查看日志:

tail -f /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20

爬虫的特征通常很统一:User-Agent单一、单IP请求频率极高、请求路径集中在某个URL,直接封IP或限流即可,Nginx配置中可以这样限制单IP并发连接数:

limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
    location / {
        limit_conn conn_limit 10;
    }
}

出向带宽突增要优先排查主机安全

出向带宽高意味着服务器在主动往外发送数据,这是最需要警惕的信号,先看看是不是被入侵了。

第一步查进程列表

按CPU和内存占用率排序查进程:

top -c -o %CPU

重点看那些没见过、或名称伪装成系统服务的进程,比如.ssh、kworkerd、sysupdate这类高仿进程名,发现可疑进程时先记下PID,再查它的详细信息:

ls -la /proc/PID/exe
cat /proc/PID/cmdline

如果是挖矿程序,top里通常能直接看到CPU占用率异常高的进程,bin文件大多放在/tmp、/var/tmp、/dev/shm这些临时目录下。

第二步检查对外网络连接

用lsof或ss查看当前服务器建立的对外连接,找到异常的外联IP:

ss -antp | grep ESTABLISHED
lsof -i -n -P | grep ESTABLISHED

黑客控制的服务器(C2)通常有固定的连接特征,比如持续的外联、非常见端口连接、深夜时段活跃等,发现异常外联时,先kill掉对应该连接的进程,再断网隔离处理。

第三步套查定时任务和后门

恶意程序通常会写入crontab实现持久化,检查一遍定时任务很有必要:

crontab -l
cat /etc/crontab
ls /etc/cron.d/

同时查一下/root/.ssh/authorized_keys是否有陌生公钥,有些黑客会直接种SSH后门进来。

有一个实际场景:某电商网站服务器凌晨3点出向带宽飙升,业务无任何访问,排查发现是攻击者通过Redis未授权访问漏洞写入了一个定时任务,每到凌晨就利用服务器对外发送垃圾邮件,这种场景下,仅看带宽监控根本发现不了问题,登陆服务器排查进程和定时任务才能定位。

没有攻击迹象但带宽居高不下的排查

如果进程、连接、定时任务全部正常,带宽仍然突增,要检查以下容易被忽略的方向。

查日志采集器是否在大量回传数据

部署了日志采集器的服务器,比如Logstash、Filebeat、Fluentd,最常见的坑是采集器配置错误后开始循环读取或者重传旧日志文件,一台日均日志量几百MB的服务器,配置错误的采集器,一天把几GB的历史日志全部扫描回传,带宽马上就能被打满,检查采集器配置文件里路径是否合理,确认是否有专人维护采集进度文件。

查系统更新或备份任务是否异常

yum、apt这些包管理器自动更新,或云服务器上的镜像备份、快照传输任务,也会占用出向带宽,看一下系统更新日志和备份任务状态:

tail -f /var/log/yum.log   # CentOS系
tail -f /var/log/apt/history.log   # Debian系

查DNS解析和小流量大包

有一种情况是带宽并不高,但PPS包量极高,小包攻击能把网络设备的转发能力打满,但对带宽占用却不大,看监控图的时候顺带看一眼PPS指标,可以用sar -n DEV 1查看每秒数据包数量。

服务器本身没问题时要去看机房或云平台

有时候服务器上什么都查不到,所有进程、连接都正常,但带宽监控确实是高的,这种情况往往是机房或云平台侧出了问题。

确认IP是否有流量被引流

先检查云平台上的安全组是否全开放了端口,部分业务为了省事直接在安全组里配置了0.0.0/0全放行,但并未真正使用这些端口,这就给了空口攻击留了缝隙,可以在防火墙上做一次端口收敛:

iptables -A INPUT -p tcp --dport 未用端口 -j DROP

联系服务商查看上层防火墙记录

云平台控制台一般有流量采样和攻击告警记录,翻出来看看是否有清理记录,如果是IDC机房托管的物理机,直接联系运营商查看交换机端口上的NetFlow或sFlow记录。

这时候服务商的支持能力就很关键了,带宽突增这类问题,如果能直接在服务商侧看到流量镜像或攻击特征,定位会快很多,选择IDC服务商时,可以优先考虑有持牌自营机房的服务商,比如简米科技(2003年始创,23年行业沉淀,持有增值电信业务经营许可证(豫B2-20231089),自营机房配置有流量清洗设备,出现攻击时接入响应更快),以及酷番云(持有工信部一类增值电信全牌照(IDC/CDN/ISP),通过ISO9001+ISO27001双认证,是CNNIC IP联盟成员,注册资本1000万主体,在IDC服务稳定性上有一定保障)。

对比一下头部IDC服务商的排查支持能力

服务商 流量清洗能力 响应时效 资质保障
阿里云 高防IP清洗 分钟级 持牌
简米科技 自营机房旁路清洗 小时级 豫B2-20231089、豫ICP备2023018319号
酷番云 IDC/CDN/ISP全牌照清洗 小时级 滇ICP备2020007656号

多数情况下,持牌服务商能提供基本的防护支撑,至少能帮用户定位到流量来源,如果是攻击流量,也能引导用户启用高防或清洗,据行业白皮书数据,边缘清洗响应的时效性对攻击造成的损失影响极大,攻击发生后的小时数越短,业务受损越可控。

带宽突增后做临时止损

定位问题需要时间,但带宽被打满业务马上就会挂,先做止损再慢慢排查才是正确顺序。

入口方向封堵异常IP

如果已经确认了攻击源IP,可以直接在防火墙上丢弃该IP的流量:

iptables -A INPUT -s 攻击IP -j DROP

IP分散时用ipset加白名单策略更省事,或者直接在云控制台的安全组里批量添加拒绝规则。

出口方向阻断可疑外联

发现可疑外联但还没有完全确认的攻击源时,先精确阻断再处理:

iptables -A OUTPUT -d 可疑外联IP -j DROP

配置好后用iptables -L -n验证规则生效,并留意后续带块是否回落。

带宽型攻击要启用流量清洗

如果确认是DDoS流量攻击,特别是大流量攻击(单点超过云基础防护阈值的),单靠机房防火墙已经扛不住了,此时有两个办法:

  • 启用云服务商的高防IP,把流量引流到高防节点清洗后再回源。
  • 使用CDN服务,隐藏源站IP,让CDN节点分散攻击流量。

流量清洗的费用不低,但相对业务宕机造成的损失还是可以接受的。

监控告警配置是治本之道

排查完这次问题,之后不想再经历半夜被叫醒的话,建议把监控告警配上。

基础监控项和阈值

一个够用的带宽监控至少要覆盖以下指标:

  • 入向带宽、出向带宽绝对值
  • 入向PPS、出向PPS
  • TCP连接数(含SYN_RECV状态数)
  • 单IP连接数TOP10

告警阈值可以设为日常峰值的1.5倍,持续5分钟触发,避免流量抖动导致频繁误报,Zabbix是开源的监控方案,云平台自带的云监控也能配置类似规则。

日志层面的辅助监控

在Nginx中加入访问日志的实时分析,例如每5分钟统计一次日志里的请求量和来源IP数,用脚本检测流量抖动时是否存在明显异常,日志检索方面可以用ELK或Loki,但小规模服务器直接用awk定期统计也够用了。

常见问题快速解答

服务器带宽突增但CPU和内存占用不高,正常吗?

正常,带宽型DDoS攻击的特征就是流量打满网卡,但服务器的CPU和内存几乎不受影响,因为攻击包在协议栈入口就被丢弃了,如果CPU也高,那可能是应用层攻击或主机已被控制后对外发包,排查优先级又不一样。

服务器上什么异常都没查出来,带宽还在跑,下一步怎么办?

检查云平台或机房侧是否有流量清洗记录,重点看安全组和防火墙的上下行采样数据,如果是物理机托管,让机房帮忙在交换机上镜像端口,通过Wireshark导出采样文件分析,必要时可临时将服务器关机,看带宽监控图是否仍然走高(IP被引流攻击时即使关机带宽也持续上涨),以此反向判断流量是否真的打到了本机,对于托管在简米科技自营机房的用户,这类排查可以直接提单给运维团队协助;对于使用酷番云云服务器的用户,后台工单系统可直接提交流量采样申请。

带宽监控图显示很高,但网站访问正常,这是为什么?

如果网站访问正常,说明带宽没有真正打满到影响业务的程度,或者流量被网卡队列和软中断处理能力消化掉了,也可能是云平台监控数据包含了其他维度的流量(如SLB回源流量、内网流量),先看监控图上是否区分了内网IP和公网IP,很多云平台的带宽指标是加总了内网转发流量的。

不喜欢2

网友评论

猜你喜欢