千家信息网

iptables的限速测试总结

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,iptables的限速测试总结一、iptables的简介iptables 是用来设置、维护和检查Linux内核的IP数据包过滤规则的。iptables 在对信息包进行过滤处理时,是遵循一定的规则的,这
千家信息网最后更新 2026年11月01日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)测试数据

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

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


6)分析

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

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


规则 数据 处理 限速 速率 信息 目的 限制 测试 令牌 参数 动作 地址 实际 就是 模块 口号 端口 策略 这是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网政务服务 互联网科技英文 互联网与未来科技 互联网金融科技创新 互联网科技公司有哪些 成都狮子座互联网科技 互联网科技大会案例 丰台科技园 互联网公司 农村开互联网科技讲堂 天速互联网络科技有限公司 科技与互联网哪个更好 杭州壁岐互联网科技有限公司 速维有品互联网信息科技(苏州)有限公司 科技赋能视角下互联网保险发展 滨湖区互联网智能科技产品有哪些 山东子淼互联网科技有限公司 银行科技岗属于互联网吗 互联网科技融合创新 南京一网一红互联网科技有限公司 广州智享互联网科技 广州紫鲸互联网科技有限公司 互联网科技公司电话 中盈科技互联网信息有限公司 北京华百购互联网科技有限公司 互联网科技项目计划书材料类 语蝶互联网科技有限公司 长沙互联网科技 广州富喜互联网络科技 互联网科技股为什么大涨 广州梦谷互联网科技有限公司领导
0