公网网卡流量异常飙升本质是“不该进来的进了,或该进来的进太多”,排查关键在于分清来源、路径和性质:先确认是否真实异常(查/proc/net/dev、比对历史基线、iftop验证方向),再锁定源头(ss统计ip、nethogs查进程、ss -tuln查监听端口),接着区分性质(看请求节奏、路径单一性、ua/referer伪造),最后排除私网干扰(iptables、容器网络、回环污染)。

公网网卡流量异常飙升,本质是“不该进来的进了,或该进来的进太多”,排查关键不在堵,而在分清来源、路径和性质。先定位是不是真异常,再一层层剥开公网入口的流量构成。
一、确认是否真实异常:比对基线,排除误报
很多所谓“飙升”只是监控口径偏差或周期性业务高峰被误判。务必做三件事:
- 查/proc/net/dev原始计数:执行cat /proc/net/dev,看对应公网网卡(如 eth0 或 ens3)的 rx_bytes / tx_bytes 是否持续跳变、突增,避开图形化监控可能存在的采样延迟或聚合误差
- 核对历史基线:调取过去7天同一时段的小时级流量曲线,确认当前值是否超出均值±2倍标准差;若属营销活动、定时任务触发时段(如凌晨批量同步),大概率是正常业务流量
- 交叉验证出口方向:用iftop -P -t -L 5抓最近5秒实时连接,观察是 inbound 还是 outbound 主导,避免把内网服务主动外联(如日志上报、配置拉取)误认为攻击入流
二、锁定流量源头:从连接维度快速筛出大户
公网网卡本身不产生流量,它只是通道。真正要揪的是“谁在用”:
- 按连接统计:运行ss -tunp | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head -20,列出访问量TOP20的源IP,重点关注非国内主流运营商段、高匿名代理段(如 103.230.x.x、185.142.x.x)或大量端口分散但目标一致的IP集群
- 按进程统计:执行nethogs -t 5(需root),直接显示每个进程的实时上下行速率,快速识别异常进程(如未知名称的二进制、CPU低但网络占用极高的程序)
- 检查监听服务:运行sudo ss -tuln,确认公网网卡上是否有非预期端口开放(如 6379 Redis、27017 MongoDB、8080 调试接口),这些常是未授权访问或扫描入口
三、区分流量性质:正常业务 vs 恶意行为
同为高流量,处置逻辑截然不同。核心看三点:请求节奏、路径特征、用户标识:
- 节奏异常:用tail -n 10000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10查看高频访问IP,若单IP每秒请求数>10且无合理User-Agent(如空、curl/7.68、python-requests),基本可判定为爬虫或CC
- 路径单一:统计访问URL分布:awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10,若90%请求集中于/api/status、/health、/favicon.ico等无业务价值路径,属典型探测或刷量
- 标识伪造:检查日志中$http_user_agent和$http_referer字段,大量出现重复UA、缺失Referer、或Referer为已知黑产域名(如 *.xxx-cc.com),即恶意流量信号
四、检查私网侧干扰:别让内网问题“冒充”公网异常
有些流量看似走公网网卡,实则源于内网误配或容器逃逸:
- 查NAT与转发规则:iptables -t nat -vnL POSTROUTING 和 ip rule show,确认无意外SNAT规则将内网流量强行打到公网出口
- 查容器网络:docker network inspect bridge 看是否启用默认桥接并暴露了本不该对外的服务;执行sudo conntrack -L | grep ESTABLISHED | wc -l,若连接数远超业务预期(如>5000),可能存在容器内程序失控外联
- 查本地回环污染:sudo ss -tunp | grep 127.0.0.1,发现有进程绑定 0.0.0.0:80 却被公网IP访问,说明服务未限制监听地址,导致本应内网通信的流量经公网网卡绕行










