公众号旧文
我是如何抓到每天拉我 2GB 流量的人的
我在自己的服务器上,部署了流量统计服务,近几天在一台 VPS 上,我发现了一件有意思的事情。

这台机器平时基本闲着,于是我就顺手开了两个测速服务:
- HTTP 下载(50M / 100M 文件)
- iperf3(50001 端口)
从上图可以看到最近每天都会消耗 3GB 左右的流量,而且很规律。
显然有人在用,但我完全不知道是谁。
先用系统自带工具看了一下:
vnstat
结果很明显:
yesterday 3.00 GiB
today 337.57 MiB
流量确实存在。
但问题是:
- 不知道是谁
- 不知道什么时候来的
- 不知道是 HTTP 还是 iperf3
第一步:确认“嫌疑服务”
我先查端口:
ss -ltnp | grep -E '18080|50001'
结果:
LISTEN 0 4096 *:50001 *:* users:(("iperf3",pid=538152,fd=3))
HTTP(18080)没了,只有 iperf3 在跑。
再进一步确认:
ps -fp 538152
/usr/bin/iperf3 --server -p 50001
锁定目标:流量基本来自 iperf3。
第二步:它是怎么启动的?
一开始我以为这是个“野生进程”,但查了一圈之后发现:
grep -r "50001" /etc
命中了关键文件:
/etc/systemd/system/iperf3.service.d/override.conf
再看服务状态:
systemctl status iperf3
Loaded: loaded (/lib/systemd/system/iperf3.service)
Drop-In: override.conf
Active: active (running)
这是一个 systemd 开机自启服务。
而且我自己还 override 过,只是现在忘了。
第三步:问题是之前没有日志
虽然服务在跑,但 iperf3 默认不记录连接日志。
这就导致,有人用,但我完全看不到是谁。
第四步:接管日志输出
iperf3 没有 --logfile 参数
正确做法是:用 systemd 接管 stdout
修改:
nano /etc/systemd/system/iperf3.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/iperf3 -s -p 50001
StandardOutput=append:/root/iperf3.log
StandardError=append:/root/iperf3.log
然后重启服务:
systemctl daemon-reload
systemctl restart iperf3
现在可以实时看日志:
tail -f /root/iperf3.log
第五步:统计到底是谁拿走了流量
光知道谁连接还不够,我还想知道是谁拿走了那 3GB。
于是我加了 iptables 统计:
iptables -N IPERF_MONITOR
iptables -A INPUT -p tcp --dport 50001 -j IPERF_MONITOR
iptables -A IPERF_MONITOR -j RETURN
查看:
iptables -L IPERF_MONITOR -v -n
未来就会出现:
bytes = 2147483648
source = 1.2.3.4
就能直接锁定哪个 IP 拉了多少流量
第六步:记录“作案时间”
我怀疑这是“定时行为”,于是加了一个简单监控脚本:
ss -nt | grep :50001
配合循环记录:
while true; do
ss -nt | grep :50001 >> log
sleep 5
done
这样就能得到“作案”时间和IP:
==== 03:21 ====
1.2.3.4 -> 50001
从被白嫖到全链路监控
我现在已经可以做到:
| 能力 | 工具 |
|---|---|
| 谁在用 | iperf3.log |
| 用了多少 | iptables |
| 每天总量 | vnstat |
| 什么时候来 | 自定义脚本 |
后记
我不介意有人用这台机器,反而觉得挺有意思。
欢迎使用,但我已经能看到你了。
如果你也开了测速服务,建议你至少:
- 打开日志
- 做流量统计
否则你可能每天都在被白嫖,而毫不知情。
请在微信客户端打开
扩展阅读: