Skip to content

Instantly share code, notes, and snippets.

@zhuchaowe
Created May 24, 2018 02:40
Show Gist options
  • Save zhuchaowe/0dea9c39e3f19a3194d4395c5df43bc6 to your computer and use it in GitHub Desktop.
Save zhuchaowe/0dea9c39e3f19a3194d4395c5df43bc6 to your computer and use it in GitHub Desktop.
如何对服务器上某个特定IP出口/入口流量进行进行统计
相信有人会想过如何对服务器上某个特定IP出口/入口流量进行进行统计。不需要找其他程序,Linux kernel 2.6(2.4算不算?)与之后版本自带的iptables就能实现此功能。方法非常简单,在iptables处添加特定规则即可。
对特定IP进行流量统计:
例如我要统计服务器上的IP:192.168.0.10的入网流量:
iptables -I INPUT -d 192.168.0.10
统计该IP的出网流量:
iptables -I OUTPUT -s 192.168.0.10
统计特定端口的流量:
方法和统计IP的流量差不多,使用-p指定端口类型,--dport指定端口号。 例如我要统计服务器上的IP:192.168.0.10,80端口的入网流量:
iptables -I INPUT -d 192.168.0.10 -p tcp --dport 80
统计该IP 80端口的出网流量:
iptables -I OUTPUT -s 192.168.0.10 -p tcp --sport 80
上面的命令中,参数-d是目标IP,-s是源IP。因为入网的流量发送至192.168.0.10这个IP,因此把192.168.0.10作为目标IP可以统计入网的流量。出网时,192.168.0.10发出的流量来着192.168.0.10,因此把192.168.0.10作为OUTPUT的源IP可以统计流量。 不仅如此,还可以对特定来源IP,来源端口,出网的目的IP,出网的目的端口进行统计,根据需要使用-s,--sport,-d,--dport几个参数即可。
查看流量:
要查看流量,使用-v参数:
iptables -n -v -L -t filter
IPTABLES Traffic 在INPUT下面的就是入网流量,OUTPUT里面的是出网流量,默认是使用易读的单位,也就是自动转化成M,G。如过需要Bytes做单位,则增加一个-x参数:
iptables -n -v -L -t filter -x
作为路由时的流量统计:
如果服务器是做路由的,那么使用上面的命令把规则插入至INPUT/OUTPUT链中就无效了,因为那些IP根本不是在你的服务器上。但是那些IP的流量,都需要经过你的服务器的转发,因此把对于的规则插入至FORWARD表即可。、 例如我要统计IP为192.168.0.10的服务器入网流量:
iptables -I FORWARD -d 192.168.0.10
统计该IP的出网流量:
iptables -I FORWARD -s 192.168.0.10
需要注意的是,此时添加统计出网和入网流量的规则,不再需要分INPUT链和OUTPUT链,因为你服务器只负责根据目标IP,进行转发。
限制80端口连接数
iptables -A INPUT -d 104.131.106.177/32 -p tcp --dport 80 -m connlimit --connlimit-above 3 -j DROP
## IPTABLES规则的删除:
1. iptables -D chain rulenum [options]
其中: chain 是链的意思,就是INPUT FORWARD 之类的 rulenum 是规则的编号。从1 开始。可以使用 --line-numbers 列出规则的编号
2. -A 命令的映射,不过用-D替换-A。当你的链中规则很复杂,而你不想计算它们的编号的时候这就十分有用了。也就是说,你如何用iptables -A.... 语句定义了一个规则,则删除此规则时就用 -D 来代替- A 其余的都不变即可。
iptables -A OUTPUT -s 192.168.1.10/32 -p tcp -m tcp --sport 5001
iptables -D OUTPUT -s 192.168.1.10/32 -p tcp -m tcp --sport 5001
3. 清空iptables
iptables -F
iptables -F OUTPUT
iptables -F INPUT
## IPTABLES规则的保存:
一般重启后iptables规则会丢失,因此需要进行保存操作。
基于Red Hat:
service iptables save
基于Debian:
先保存:
iptables-save > /etc/iptables.rules
恢复:
iptables-restore < /etc/iptables.rules
将流量统计追加至文件,例如
iptables -vxn -L >> file
选择直接将流量值追加到文件:
iptables -n -v -L -t filter -x | awk '{print $2,$10}' >>/root/file2
当写入文件成功后,记得将流量值清0:
iptables -Z
-Z参数支持指定链名称和规则索引号,例如下列命令表示清空INPUT链的第一条规则的流量计数器。
iptables -Z INPUT 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment