服务器如何排查流量异常增长
学完这篇,你能在半小时内从服务器上定位到流量异常增长的来源,分清是正常业务、爬虫、攻击还是被入侵,并做出现场处置。
第一步:先确认流量是不是「真的」在涨
这一步要拿到网卡的原始收发字节数,排除云监控口径和单位换算带来的误判。
先看内核统计的网卡累计流量:
cat /proc/net/dev
ip -s link show eth0
用 sar 看实时速率(单位是 KB/s):
sar -n DEV 1 5
再用 vnstat -l -i eth0 看长期趋势,判断是突然暴涨还是缓慢爬升。
注意:云厂商控制台带宽单位通常是 Mbps,网卡统计是字节。1 MB/s ≈ 8 Mbps,算错 8 倍很容易把正常业务当成攻击。另外要分清「内网流量」和「公网流量」——同机房备份、拉镜像走内网,不占公网带宽。
第二步:确认流量方向,是进还是出
这一步要确定是入站被打还是出站被盗刷,方向决定了后面的排查路径。
sar -n DEV 1 5 # 看 rxkB/s 和 txkB/s 哪边大
ss -s # 看当前连接总数
ss -ant state established | wc -l # 统计已建立连接数
- 入站(rx)远大于出站:一般是被 DDoS、CC 攻击,或大量爬虫抓取。
- 出站(tx)异常大:常见于服务器被入侵后对外发包、对外下载、或被当代理/矿池中转。
第三步:找出是哪个进程在发流量
这一步把流量落到具体 PID,是整条排查链最关键的一环。
按网卡看每个进程的实时带宽:
nethogs eth0
按连接看实时带宽排行,-P 显示端口:
iftop -i eth0 -P -n
再用 ss 把端口对应到进程:
ss -antp | sort -k3 | head -50
注意:
nethogs、iftop多数发行版要额外安装(Debian/Ubuntu:apt install nethogs iftop;CentOS/RHEL:yum install nethogs iftop)。如果流量表现为大量短连接,nethogs可能只看到瞬时值,要结合ss和conntrack一起看。
第四步:统计来源 IP 和连接数
这一步找出是谁在打你,为封禁提供依据。
按连接数排序来源 IP:
ss -ant | awk 'NR>1 {print $4}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
看连接跟踪表(需要 nf_conntrack 模块):
conntrack -L | awk '{print $5}' | cut -d= -f2 | sort | uniq -c | sort -rn | head
如果单个 IP 占了几千条连接,基本可以确认是攻击或异常爬虫。
第五步:从应用日志确认请求性质
这一步区分「正常业务突增」「爬虫」「CC 攻击」,避免误封。
以 Nginx 为例,统计访问量最高的 IP、URL 和 UA:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
重点看是否存在:单一 URL 被高频请求、UA 是各类采集器/空 UA、Referer 为盗链站点。
注意:日志文件可能已按天切割,要看
/var/log/nginx/access.log和access.log.1,必要时zgrep查压缩日志,否则统计会漏。
第六步:抓包做最终确认
这一步拿到最原始的证据,确认协议特征和目的地址。
tcpdump -i eth0 -nn -c 200 -w /tmp/traffic.pcap
tcpdump -i eth0 -nn port 80 and host 1.2.3.4 -c 50
常见特征:大量 SYN 无 ACK(SYN Flood)、UDP 大包打某端口(反射放大)、固定小包高频(心跳类木马)。
第七步:处置与加固
这一步止血并防止复发。
- 封 IP:
iptables -I INPUT -s 1.2.3.4 -j DROP,或用云厂商安全组。 - 限流:Nginx 用
limit_req_zone、limit_conn_zone,对单 IP 限速限并发;系统层用tc做出口限速。 - 上防护:接入 WAF 或高防 IP,源站只放行回源段。
- 如果是被入侵:先
top、crontab -l、ls -la /tmp /var/tmp检查异常进程和定时任务,再排查 SSH 弱口令、Redis 未授权、Web 漏洞入口,封禁前先取证。
注意:封 IP 前先确认该 IP 不是公司出口或 CDN 回源节点,否则容易把自己人挡在门外。
小结
- 先用
/proc/net/dev、sar -n DEV、vnstat确认真实速率,注意 Mbps 与 MB/s 差 8 倍。 - 分清入站还是出站,方向决定排查思路:入站多为攻击/爬虫,出站多为入侵外联。
- 用
nethogs、iftop -P、ss -antp把流量落到具体进程。 - 用
ss、conntrack统计来源 IP,用 Nginx 日志区分爬虫与 CC。 - 必要时
tcpdump抓包留证,处置按「限流→封禁→WAF→查入侵」顺序推进。
原文链接:https://www.gj0.com/thread-1001.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。