iptables的限速测试总结
admin
2023-01-29 14:43:15
0

         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条链之间的关系:

iptables的限速测试总结

    数据包来了先经过判断,然后选择是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虚拟机)

iptables的限速测试总结

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 去保存定义好的规则,这样重启还是会存在的

iptables的限速测试总结

 

 

5)测试数据

下面是一些线下测试限速的结果,仅供参考,具体以线上实际稳定的速率为准:

测试命令是通过:wget http://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限速的一些数据:

iptables的限速测试总结

6)分析

   通过对上面的数据分析,可以知道,利用iptables进行限速主要是利用率iptables的limit模块对数据包进行匹配处理,从而实现限速的;--limit=match,这个是限定了匹配包的速率,换句话说就是每秒可以转发多少个数据包,这是对iptables做限速的最主要的参数,通过制定它就基本可以确定要控制的限制速率是多少;--limit-burst是允许触发 limit 限制的最大次数,默认预设是5;也就是说最开始的5个包会被直接转发,这时burst就会减为0,再来的包就会丢给下一条规则去处理(这里设定是DROP),直到limit参数产生新的令牌,才会继续去匹配转发。

    简单来说限速最主要的就是limit和burst,burst是最初有多少令牌可以去转发包,后面limit会进行按速率匹配,相当于按时间补充令牌数,第一条规则达到速率上限就会把剩下的包丢给下一条规则去处理,我们下一条和它对应的就是DROP,所以会把剩下的包丢弃,从而实现了限速。


相关内容

热门资讯

特朗普第三度通谍伊朗,红线划到... 前一天刚刚宣称“赢麻了”的美国总统特朗普,22日突然通过社交媒体向伊朗强硬喊话。“即刻起,只要伊朗伊...
2男子涉嫌盗窃转运数百只猫,警... 山东莱州市公安局7月23日通报,7月22日5时许,该局接群众报警称有人盗猫。接警后,公安民警迅速到达...
东方空间引力一号一箭9星发射成... 上证报中国证券网讯(记者 于祥明)记者7月22日从东方空间商业航天公司获悉,东方空间引力一号(遥四)...
湖北交投:用“积木”搭出长寿桥... 7月20日,汉宜高速改扩建项目施工现场一片繁忙,一块预制UHPC盖梁模壳借助吊机平稳落位,短短半小时...
李尔平院士:为智能时代筑牢“电... 封面新闻记者 刘叶 车家竹 摄影 何宏杰 在人工智能浪潮席卷全球的今天,一个名为“电磁兼容”的专业领...
江苏、上海等地将机器人纳入“国... 南都讯记者杨文君 发自北京 7月22日,记者从商务部获悉,2026年上半年,消费品以旧换新累计带动相...
“引力一号”成功发射一箭九星,... IT之家 7 月 22 日消息,今天上午,引力一号运载火箭在上海东部海域点火升空,成功将 9 颗卫星...
特朗普向4名士兵灵柩敬礼,均阵... 当地时间7月22日,美国总统唐纳德·特朗普率领数位高官,来到位于特拉华州的多佛空军基地,参加了阵亡美...
“特朗普这么干,10年后,美国... 据南华早报7月23日报道,分析人士认为,北京如今在语言能力方面更善于解读美国战略,而美国却难以做到同...
墨西哥一市长在市政厅内遭枪击死... 综合法新社等多家外媒报道,墨西哥检方当地时间22日通报称,该国中部一地方市长在市政厅内遭枪击死亡。今...