iptables的限速测试总结


iptables的限速测试总结一、iptables的简介iptables 是用来设置、维护和检查Linux内核的IP数据包过滤规则的。 iptables 在对信息包进行过滤处理时,是遵循一定的规则的,这些规则被存放在信息过滤表里面,防火墙会根据这些表里的规则对信息包进行相应的处理;而在这些信息过滤表中实际上是把规则下放到相应的链上;iptables就是一个可以对这些信息过滤表进行添加、修改、删除规则的工具 其分为两个模块组成,一个是netfilter和iptables;netfilter是防火墙的模块,主要在内核空间是一些信息过滤表;iptables则是管理netfilter的工具二、iptables的表和链 iptables主要由3个表组成,分别是filter、nat、mangle.在每个表里面会包含不同的链,我们主要是在表里面写链上的定义规则(策略) 默认一般不指定就是使用filter表,主要包括3个链:INPUT链、FORWARD链和OUTPUT链 INPUT主要是用来处理发送给自己的包,即数据包的目的地址是自己的。通过定义一些INPUT链的规则去对这些数据包采取一些相应的动作。 FORWARD主要是用来处理通过自己的数据包,即这个数据包通过自己,但源地址和目的地址都不是自己,针对这些数据包去采取相应的动作。 OUTPUT主要是处理自己生成的数据包,即源地址是自己的,去通过链上的规则去采取相应的动作。下面简单说明一下3条链之间的关系: 数据包来了先经过判断,然后选择是INPUT链处理还是FORWARD链处理,出去的时候会判断是不是OUTPUT链需要处理。三、iptables链上的动作 在链上有很多的动作可以执行,比如ACCEPT、DROP、REJECT ACCEPT对满足规则条件的数据包允许通过 DROP丢弃数据包,并且是不返回信息的 REJECT丢弃数据包,返回拒绝的信息四、iptables的命令参数说明下面关于iptables命令的详细参数简单说明一下:-t(table)指定表-A(append) 追加,一般将新加的规则(策略)是追加到表中链上的末尾规则-I(insert) 插入链 后面加数字可以指定讲规则加到相应的行,默认是所有规则最前面-L(list)查看规则 可以加-n、-v参数效果查看更明显-F(flush) 清除所有规则-D(delete)删除某个规则 可以指定相应链上的规则顺序号去删除,–line-numbers可以查看匹配数据包的一些条件参数:-i进入的网卡-o 出去的网卡-s ip源地址IP-d ip 目的地址IP–dport端口号 目的端口号-sdport 端口号 源端口号五、iptables的规则匹配顺序 数据包通过防火墙的时候是要顺序匹配策略的,从上往下依次匹配,一个包不符合某条规则,就会由后面的规则来处理,如果都不符合,就由缺省的策略处理。六、实际线下测试1)环境下面是我自己线下测试的环境以及所写的规则:环境:3台redhat6.5(VM虚拟机)2)定义的规则在开启iptables的机器上写入以下规则,这样我们根据实际写的规则去解释一下:#iptables -I FORWARD 1 -p tcp -i eth0 -o eth2 -s 192.168.2.3 -d192.168.3.3 –dport 80 -m limit –limit=500/s –limit-burst=1000 -j ACCEPT 这条规则是:允许转发从eth0进来的源IP为192.168.2.3,去访问从eth2出去的目的IP为192.168.3.3的80端口(即http服务)的数据包,其中会对包的速率做匹配,是每秒转发500个包,初始的burst值是1000#iptables -I FORWARD 2 -p tcp -i eth2 -o eth0 -s 192.168.3.3 -d192.168.2.3 –dport 80 -m limit –limit=500/s –limit-burst=1000 -j ACCEPT这条规则是:允许转发从eth2进来的源IP为192.168.3.3,去访问从eth0出去的目的IP为192.168.2.3的80端口(即http服务)的数据包,其中会对包的速率做匹配,是每秒转发500个包,初始的burst值是1000#iptables -A FORWARD -p tcp -i eth0 -o eth2 -s 192.168.2.3 -d192.168.3.3 –dport 80 -j DROP这是对从eth0进来的源IP为192.168.2.3,并且从eth2出去的目的IP为192.168.3.3的80端口(即http服务)的数据包进行丢弃#iptables -A FORWARD -p tcp -i eth2 -o eth0 -s 192.168.3.3 -d192.168.2.3 –dport 80 -j DROP 这是对从eth2进来的源IP为192.168.3.3,并且从eth0出去的目的IP为192.168.2.3的80端口(即http服务)的数据包进行丢弃3)limit的相关解释 其中限速的实现是依靠limit规则做限制,两条规则(ACCEPT和DROP)相配合实现的;通过对每秒匹配包的个数进行限制,多余的由后面相应的DROP规则去处理,这样就实现了iptables限速 –limit 500/s 表示每秒500次; 1/m 则为每分钟一次
–limit-burst 表示允许触发 limit 限制的最大次数 (预设5)
这里的–limit-burst=1000相当于说最开始我有1000的可以匹配的包去转发,然后我匹配的包的个数是根据–limit=500/s进行限制的,也就是每秒限制转发500个数据包,多余的会被下面符合要求的DROP规则去处理,去进行丢弃,这样就实现了对数据包的限速问题。 这里“limit”这个词准确说,应该是“按一定速率去匹配”,至于“限制”还是“放行”是后面 -j 动作来实现的,limit 仅仅是个 match 模块,他的功能是匹配,匹配方式是按一定速率.用iptables的limit模块,目标是ACCEPT.当你设置300/s时,它大约每3ms发出一个令牌,获得令牌的包可以发出去,没有获得令牌的包只能等待下一个令牌到来,这样不会造成一些包丢失,更不会造成所谓“断线”的4)实际生成规则展示 实际生成的规则如下,一般写好的规则是放在内存中的,重启就会被清除,可以通过service iptables save 去保存定义好的规则,这样重启还是会存在的5)测试数据下面是一些线下测试限速的结果,仅供参考,具体以线上实际稳定的速率为准:测试命令是通过:wgethttp://192.168.2.3/filename罗列一下–limit=1000/s–limit-burst=1000的相关数据:2016-08-2214:49:31 (55.4 MB/s) – “1M” saved [1048576/1048576]2016-08-2214:49:31 (140 MB/s) – “10M” saved [10485760/10485760]2016-08-2214:49:33 (23.7 MB/s) – “50M” saved [52428800/52428800]2016-08-2214:49:36 (40.0 MB/s) – “100M” saved [104857600/104857600]2016-08-2214:50:05 (34.8 MB/s) – “1G” saved [1073741824/1073741824]2016-08-2214:52:15 (39.7 MB/s) – “5G” saved [5368709120/5368709120]2016-08-2214:52:15 (37.4 MB/s) – “1M” saved [1048576/1048576]2016-08-2214:52:15 (33.4 MB/s) – “10M” saved [10485760/10485760]2016-08-2214:52:16 (62.5 MB/s) – “50M” saved [52428800/52428800]2016-08-2214:52:18 (54.6 MB/s) – “100M” saved [104857600/104857600]2016-08-2214:52:40 (46.9 MB/s) – “1G” saved [1073741824/1073741824]2016-08-2214:55:02 (36.1 MB/s) – “5G” saved [5368709120/5368709120]2016-08-2214:55:02 (35.3 MB/s) – “1M” saved [1048576/1048576]2016-08-2214:55:02 (35.0 MB/s) – “10M” saved [10485760/10485760]2016-08-2214:55:04 (37.4 MB/s) – “50M” saved [52428800/52428800]2016-08-2214:55:05 (58.6 MB/s) – “100M” saved [104857600/104857600]2016-08-2214:55:29 (42.8 MB/s) – “1G” saved [1073741824/1073741824]2016-08-2214:57:24 (44.6 MB/s) – “5G” saved [5368709120/5368709120]最后这是我测试改变相关参数后免费云主机域名,iptables限速的一些数据:
6)分析 通过对上面的数据分析,可以知道,利用iptables进行限速主要是利用率iptables的limit模块对数据包进行匹配处理,从而实现限速的;–limit=match,这个是限定了匹配包的速率,换句话说就是每秒可以转发多少个数据包,这是对iptables做限速的最主要的参数,通过制定它就基本可以确定要控制的限制速率是多少;–limit-burst是允许触发 limit 限制的最大次数,默认预设是5;也就是说最开始的5个包会被直接转发,这时burst就会减为0,再来的包就会丢给下一条规则去处理(这里设定是DROP),直到limit参数产生新的令牌,才会继续去匹配转发。 简单来说限速最主要的就是limit和burst,burst是最初有多少令牌可以去转发包,后面limit会进行按速率匹配,相当于按时间补充令牌数,第一条规则达到速率上限就会把剩下的包丢给下一条规则去处理,我们下一条和它对应的就是DROP,所以会把剩下的包丢弃,从而实现了限速。

相关推荐: linux交叉编译的作用是什么

本篇内容主要讲解“linux交叉编译的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux交叉编译的作用是什么”吧! 在linux中,免费云主机域名交叉编译是一种计算机环境中运行的编译程序,能编译出另…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 02/01 10:22
Next 02/01 10:22