使用 iptables 对端口流量进行统计 - Himly/vps-tutorial GitHub Wiki
通过 ifconfig
只能看到所有的流量总和,如果想实时统计某个端口上用了多少流量,
最简单的方法便是通过 iptables
,它可以在不修改源代码的情况下对程序暴露端口流量
进行监控统计.
注意:在服务器重启、Iptable 服务重启的时候统计数据会被重置清零.
通过这个方法也可以去统计 shadowsocks 的每个账号用了多少流量,只需要以这个端口 为源端口,统计 OUTPUT 流量,就可以精确统计 shadowsocks 的单用户流量.
1. 添加需要统计的端口
1.1 输入监控
下面示例是监控目标端口是 8080 的 输入/上传 流量 --dport
(destination port 的缩写)
iptables -A INPUT -p tcp --dport 8080
// -A INPUT 表示在 INPUT 上增加一条规则
// -D INPUT 表示在 INPUT 上删除一条规则
// -p tcp 表示指定 tcp 协议
// –dport 8080 表示入网的端口号为 8080
1.2 输出监控
下面示例是监控来源端口是 8080 的 输出/下载 流量 --sport
(source port 的缩写)
iptables -A OUTPUT -p tcp --sport 8080
// -A OUTPUT 表示在 OUTPUT 上增加一条规则
// -D OUTPUT 表示在 OUTPUT 上删除一条规则
// -p tcp 表示指定 tcp 协议
// –sport 8080 表示出网的端口号为 8080
2. 查看统计数据
iptables -vnL
iptables -vnL>/home/iptables.log #输出内容到文件
在 INPUT 下面的就是入网流量,OUTPUT 里面的是出网流量,默认是使用易读的
单位,也就是自动转化成 MB、GB。如过需要 Bytes 做单位,则增加一个 -x
参数:
iptables -n -v -L -t filter -x
示例结果:
8080 端口 输入/上传 的流量为 2885 字节, 输出/下载 的流量是 8240 字节
Chain INPUT (policy ACCEPT 202 packets, 25187 bytes)
pkts bytes target prot opt in out source destination
18 2885 tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 184 packets, 45774 bytes)
pkts bytes target prot opt in out source destination
12 8240 tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:8080
pkts 一列是包的数量 ; bytes 一列是流量统计结果.
**注意:流量信息自添加规则之后开始统计,无法显示之前的流量信息;** 重启防火墙,流量统计数据将会被重置.
3. 重置统计数据
注意:这里是重置所有端口的统计数据
3.1 重置所有输入端口
Iptable -Z INPUT
3.2 重置所有输出端口
Iptable -Z OUTPUT
4. 移除统计端口
4.1 移除输入端口
iptables -D INPUT -p tcp --dport 8080
4.2 移除输出端口
iptables -D OUTPUT -p tcp --sport 8080