使用 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