Created
May 24, 2018 02:40
-
-
Save zhuchaowe/0dea9c39e3f19a3194d4395c5df43bc6 to your computer and use it in GitHub Desktop.
如何对服务器上某个特定IP出口/入口流量进行进行统计
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 相信有人会想过如何对服务器上某个特定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