一、流量的统计
在不修改源代码的情况下对程序暴露端口流量进行监控统计,可以利用Linux中自带的Iptable添加简单的规则让其起到端口流量统计的作用。
添加需要统计的端口
1、输入监控
iptables -A INPUT -p tcp --dport 8080
2、输出监控
iptables -A OUTPUT -p tcp --sport 8080
查看统计数据
iptables -L -v -n -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
重置统计数据
移除统计端口
1、移除输入端口
iptables -D INPUT -p tcp --dport 8080
2、移除输出端口
iptables -D OUTPUT -p tcp --sport 8080
二、流量控制
可以使用iptables的limit模块对原IP或网段等进行限速,Iptables限制包的流速。
由-m limit --limit <[!]limitnum> --limit-burst <burstnum>
--limit: 速率限制/sec /minute /hour
--limit-burst: 最大的连接数。这个是用来限制最大可用数的。因为:
1、如果当前包速超过limit限定的值的时,超速部分将直接跳过当前规则,进入下一条规则的匹配。
2、如果当前没有包来,则limit会将该单位时间内的剩余量累计入下个单位时间,但最大值不超过--limit-burst指定的值。
如下例子:
iptables -A INPUT -p tcp -s 192.168.80.15 -m limit --limit 5/sec --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.80.15 -j DROP
iptables -A OUTPUT -p tcp -s 192.168.80.15 -m limit --limit 5/sec --limit-burst 3 -j ACCEPT
iptables -A OUTPUT -p tcp -s 192.168.80.15 -j DROP
测试实例:
服务器端添加限制:
iptables -A INPUT -p icmp -s 192.168.1.236 -m limit --limit 6/m --limit-burst 5 -j ACCEPT
iptables -P INPUT DROP
客户端ping包测试结果:
前四个包的回应都非常正常,然后从第五个包开始,我们每10秒能收到一个正常的回应。这是因为我们设定了单位时间(在这里是每分钟)内允许通过的数据包的个数是每分钟6个,也即每10秒钟一个;其次我们又设定了事件触发阀值为5,所以我们的前四个包都是正常的,只是从第五个包开始,限制规则开始生效,故只能每10秒收到一个正常回应。