使用iptables统计端口流量

由于最近给google cloud上的一台ss服务新增了一个端口用户,所以想试试如何统计每个ss端口的流量。查了下,发现大部分都是用系统自带的iptables来实现。

1. 使用iptables监控端口流量

1、在iptables的INPUT链插入两条规则:监控8379,8380端口的tcp输入流量
    注意 -I 与 -A 的区别,-I表示在规则链首部插入规则,-A表示在规则链尾部追加规则
    由于这两条规则没有-j参数,即对匹配到的流量不执行任何目标动作(ACCEPT/DROP/REJECT),只做记录。所以不会影响原有规则

iptables -I INPUT -p tcp --dport 8379
iptables -I INPUT -p tcp --dport 8380

2、在iptables的OUTPUT链插入两条规则:监控8379,8380端口的tcp输出流量

iptables -I OUTPUT -p tcp --sport 8379
iptables -I OUTPUT -p tcp --sport 8380

3、检查新增的规则(-n参数表示以数值方式显示地址与端口, -v表示显示包括流量在内的详细信息)

iptables -n -v -L 

4、保存iptables,否则重启就没了

service iptables save


5、统计端口流量

iptables -nv -L INPUT | grep 8379
iptables -nv -L INPUT | grep 8380
iptables -nv -L OUTPUT | grep 8379
iptables -nv -L OUTPUT | grep 8380

关于iptables的基础操作,可以参考之前的文章《iptables基本用法》

1.1 iptables删除规则

1、先列出规则号
iptables -nvL INPUT --line-numbers
iptables -nvL OUTPUT --line-numbers

2、删除第n号规则
iptables -D INPUT 1
iptables -D OUTPUT 3

 

2. 使用shell脚本输出iptables统计信息

为了方便查看流量统计,写了一个shell脚本,并添加到crontab中每月自动运行

#!/bin/bash
# 这是一个利用iptables进行端口流量统计的脚本
# 首先请保证已经在iptables规则中加入了要监控的端口

# 需要统计的端口
PORTS=(8379 8380)

# 打印分割线
echo "**************************************************"

# 打印日期
date

# 统计iptables的INPUT链
echo "------------------------------"
echo "INPUT chain:"
for PORT in ${PORTS[@]};
do
    iptables -nv -L INPUT | grep $PORT
done

# 统计iptables的OUTPUT链
echo "------------------------------"
echo "OUTPUT chain:"
for PORT in ${PORTS[@]};
do
    iptables -nv -L OUTPUT | grep $PORT
done

# 输出换行
echo -e "\n"

3. crontab作业

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 每月1号02:00统计ss端口流量
0 2 1 * * /root/ss_statistics.sh >> /root/ss_traffic.txt

 

 

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top