用iftop流量分析定位爬虫异常带宽占用
如果你发现服务器带宽被跑满,网站访问变慢,很可能是爬虫或恶意请求占用了大量带宽。
iftop 是一款实时流量监控工具,可以显示每个连接的带宽使用情况,帮你精准定位异常 IP。
下面从零开始演示如何安装、使用 iftop 并定位到消耗带宽的爬虫。
核心答案
iftop 基于 libpcap(数据包捕获库)工作,能按 IP 显示实时进出流量。
通过 iftop 可以快速发现占用带宽最多的连接,再结合日志判断是否为爬虫异常。
操作步骤包括:安装iftop → 启动监控 → 观察排名靠前的IP → 确认IP是否为爬虫 → 使用防火墙或Nginx封禁。
整个过程 10 分钟内完成,无需重启服务器。
安装 iftop(两种方式)
CentOS / RHEL / Alibaba Cloud Linux
# 先安装 EPEL 源(如果没装)
yum install -y epel-release
# 安装 iftopyum install -y iftop
Ubuntu / Debian
apt update
apt install -y iftop
安装完成后直接运行 iftop 即可进入实时监控界面。
第一次运行如果提示权限不足,请使用 sudo iftop。
快速读懂 iftop 界面
执行 iftop 后你会看到类似下图(文本模拟):
12.5Kb 25.0Kb 37.5Kb 50.0Kb
└─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────
192.168.1.100 => 203.0.113.5 2.00Kb 3.00Kb 5.00Kb
<= 1.00Kb 2.00Kb 3.00Kb
...
- 左侧列:本机 IP,右侧列:对方 IP。
- 中间的
=>表示发送(出站),<=表示接收(入站)。 - 后面三个数字分别是:最近 2 秒、10 秒、40 秒的平均速率。
- 顶部显示进出合计流量(上行/下行)。
默认只显示流量最大的前 10-20 个连接,按 P 键可以暂停刷新,方便截图分析。
定位爬虫异常带宽占用的实战步骤
1. 开启 iftop 并指定网卡
如果服务器有多个网卡(比如 eth0 和内网 eth1),建议指定外网网卡:
iftop -i eth0 # 将 eth0 换成你的外网网卡名
常用参数(可以组合):
-n不解析域名,显示 IP 更快-N显示端口号-B以字节为单位显示(默认是 bit)
推荐组合:iftop -i eth0 -nN -B
2. 观察占用带宽最高的 IP
启动后等待 30-60 秒,让 iftop 累积流量统计。
你会看到流量最高的连接排在最上面。
记下那个 IP 地址和对应的端口(如果是 80/443 通常是 HTTP 请求)。
3. 进一步确认是否为爬虫
使用 netstat 或 ss 查看该 IP 的连接数和状态:
ss -tunap | grep <目标IP>
如果发现大量 ESTABLISHED 连接,且请求频繁,大概率是爬虫。
也可以查看 Web 访问日志(Nginx 为例):
grep <目标IP> /var/log/nginx/access.log | tail -20
观察 User-Agent 是否像爬虫(如 Googlebot、Baiduspider 或自定义的奇怪 UA)。
如果 UA 是搜索引擎官方爬虫,可以不用管;
否则建议封禁。
4. 临时封禁 IP 验证效果
先使用 iptables 封禁 IP 并观察带宽是否下降:
iptables -A INPUT -s <目标IP> -j DROP
iptables -A OUTPUT -d <目标IP> -j DROP
封禁后立即回到 iftop 界面,按 L 键清除流量历史后重新观察,如果带宽恢复正常,说明就是该 IP 导致的异常。
5. 持久化封禁
- 使用 fail2ban 动态封禁(推荐)
- 在 Nginx 配置中加入
deny并重载; - 在 Cloudflare / CDN 防火墙中直接屏蔽 IP
避坑指南
不要直接封搜索引擎官方 IP:例如 Googlebot 的 IP 段是公开的,如果误封会影响收录。
建议复制 IP 到 search.google.com 的抓取工具验证。iftop 只显示实时流量,无法查看历史数据,建议结合 vnstat 或 NetFlow 做长期分析。如果 iftop 里看不到大流量但带宽依然占满,可能是出方向流量(如服务器主动往外发)被限速,检查 iftop 的方向箭头。宝塔面板用户:可直接在软件商店安装 iftop,或在宝塔终端中执行 iftop 命令,结果相同。
高频问题解答
Q1: iftop 命令找不到怎么办?
A: 检查是否正确安装了 epel-release 或更新了 apt 源,安装后重新打开终端。
Q2: 为什么 iftop 显示的总流量和云监控不一致?
A: iftop 只统计当前机器上的流量,云监控可能包含 DDoS 清洗前流量或外网带宽上限,建议以 iftop 为准排查连接。
Q3: 能否通过 iftop 定位到具体进程?
A: iftop 不能直接显示 PID,可以配合 netstat -tunap | grep IP 看到进程号,或用 iotop 观察网络 I/O。
Q4: 封禁 IP 后网站还是慢?
A: 可能同时存在多个异常 IP,建议继续用 iftop 观察,直到带宽降到正常水平,也可以考虑升级带宽防御。
如果你正在处理 iftop流量分析定位爬虫异常带宽占用,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。