Ubuntu 22.04及其他发行版下按指定端口/用户统计SSH隧道累计网络流量
Ubuntu 22.04及其他发行版下按指定端口/用户统计SSH隧道累计网络流量
嘿,我懂你的需求——不需要实时盯着流量数据,就想事后算清楚某个专属端口或者用户的SSH隧道累计用了多少流量对吧?下面给你几个实用的方案,在Ubuntu 22.04或者其他主流Linux发行版上都能直接用:
方法一:用iptables自带计数器(无需额外软件)
系统自带的iptables就能帮你记录指定端口/用户的累计流量,步骤简单省心:
针对指定端口(比如7070)
- 先添加带流量计数的规则(要同时统计入站和出站流量):
sudo iptables -A INPUT -p tcp --dport 7070 -j ACCEPT sudo iptables -A OUTPUT -p tcp --sport 7070 -j ACCEPT
- 查看累计流量:
sudo iptables -L INPUT -v -n | grep "dpt:7070" sudo iptables -L OUTPUT -v -n | grep "spt:7070"
输出里的bytes字段就是累计字节数,你可以自己换算成MB/GB(1GB=102410241024字节)
- 注意事项:
- 重启iptables或服务器后,计数器会清零!如果要长期统计,建议写个简单的定时脚本,每天把当前字节数写入日志文件,最后汇总。比如用
cron每天凌晨跑一次:
echo "$(date) - 入站流量: $(sudo iptables -L INPUT -v -n | grep "dpt:7070" | awk '{print $2}') 字节" >> /var/log/port7070_traffic.log echo "$(date) - 出站流量: $(sudo iptables -L OUTPUT -v -n | grep "spt:7070" | awk '{print $2}') 字节" >> /var/log/port7070_traffic.log
针对指定用户(比如TEST)
- 先找到用户TEST的UID:
id -u TEST
假设输出是1001
- 添加针对该UID的流量统计规则:
sudo iptables -A INPUT -p tcp -m owner --uid-owner 1001 -j ACCEPT sudo iptables -A OUTPUT -p tcp -m owner --uid-owner 1001 -j ACCEPT
- 查看累计流量:
sudo iptables -L INPUT -v -n | grep "owner UID 1001" sudo iptables -L OUTPUT -v -n | grep "owner UID 1001"
同样,bytes字段就是累计流量,换算方法同上。
方法二:用tcpdump抓包统计(适合短期统计)
如果只是统计一周的流量,用tcpdump抓包后再分析也很方便:
- 启动抓包,指定端口7070并保存到文件:
sudo tcpdump -i any port 7070 -w /tmp/traffic_7070.pcap
按Ctrl+C停止抓包,或者用nohup让它后台运行一周:
nohup sudo tcpdump -i any port 7070 -w /tmp/traffic_7070.pcap &
- 统计累计流量:
sudo tcpdump -r /tmp/traffic_7070.pcap -qtnp | awk '{sum += $NF} END {print "累计流量: " sum/1024/1024 " MB"}'
这个命令会直接算出总流量并转换成MB单位。
方法三:用vnstat做长期自动统计
如果需要长期稳定统计,vnstat是个不错的选择,它会自动记录流量并生成直观的报告:
- 安装vnstat:
sudo apt install vnstat # Ubuntu/Debian系列 sudo dnf install vnstat # RHEL/CentOS系列
- 针对端口7070配置自定义监控:
首先用iptables给端口7070的流量打标记:
sudo iptables -t mangle -A PREROUTING -p tcp --dport 7070 -j MARK --set-mark 1 sudo iptables -t mangle -A OUTPUT -p tcp --sport 7070 -j MARK --set-mark 1
然后修改vnstat配置文件/etc/vnstat.conf,添加以下内容:
Interface "port7070" Mark 1
- 启动并启用vnstat服务:
sudo systemctl start vnstat sudo systemctl enable vnstat
- 查看累计流量报告:
vnstat -u port7070 # 更新统计数据 vnstat -s port7070 # 查看汇总报告
报告里会直接显示累计的入站、出站和总流量,单位可以是MB/GB,非常直观。
备注:内容来源于stack exchange,提问作者Hatef
相关产品推荐
相关产品推荐

