Iptables***limit模块扩展匹配规则

limit模块的作用是针对报文的速率进行限制,限制的单位有秒、分钟、小时、天等,例如一分钟内只接收10个请求报文,多余的报文则会被丢弃。

limit模块的常用参数:

  • --limit rate[/second|/minute|/hour|/day]:指定限制的平均速率单位,以秒(s)、分(m)、时(h)、天为单位,默认是3小时。
  • --limit-burst:要匹配的最大初始包的数量,例如1分钟内限制10个请求报文,那么首先一次性会接收我们指定初始化包的数量,剩余请求包按着速率单位来进行接收,默认值为5个报文。

1.限制每分钟接收10个ICMP数据报文

1.先添加一条规则,限制1分钟内只收10个icmp协议的请求报文。
[root@jxl-1 ~]# iptables -t filter -I INPUT -p icmp -m limit --limit 10/minute -j ACCEPT 2.然后添加第二条规则,超出10个报文后,其余的报文全部丢弃。
[root@jxl-1 ~]# iptables -t filter -A INPUT -p icmp -j DROP  3.查看添加的***规则
[root@jxl-1 ~]# iptables -L -n -v --line-number Chain INPUT (policy ACCEPT 1331 packets, 1111K bytes)
num   pkts bytes target     prot opt in out source destination         
1        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0 limit: avg 10/min burst 5
2        0     0 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in out source destination         

Chain OUTPUT (policy ACCEPT 1334 packets, 1844K bytes)
num   pkts bytes target     prot opt in out source destination

查看效果,可以看到前5个数据包都可以正常接收,那是因为limit默认初始包就是5个,因此没有任何问题,从第六个数据包开始后,每隔6秒才会正常处理一个数据包,因为1分钟限制10次数据包的接收,那就表示6秒收一个,效果如下图所示。

也可以理解为是一开始可以快速通过5个数据报文,后面的数据报文是每分钟通过10个。


2.允许10个数据报文快速通过,然后限制每分钟接收1个个ICMP数据报文

实现思路和1)中一模一样,只不过就是调整一下初始包的数量。

1.先添加一条规则,限制1分钟内只收10个icmp协议的请求报文。
[root@jxl-1 ~]# iptables -t filter -I INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT 2.然后添加第二条规则,超出10个报文后,其余的报文全部丢弃。
[root@jxl-1 ~]# iptables -t filter -A INPUT -p icmp -j DROP  

效果如下,首先发送了10个数据包正常接收,剩下的数据包每隔1分钟接收1个。



3.限速案例,限制网络传输的带宽不可以超过500k/s

限速如何通过limit模块来实现呢?其实也很简单,我们可以计算出1个数据包的大小,然后用500k的大小除以数据包的大小,得出500k能换算出多少个数据包,例如是300个,那么最后设置1秒钟接收的数据包的数量为300个,就可以实现每秒的传输速率带宽在500k左右。

一个数据包的大小大概在1500字节。

公式:(限制的带宽速率*1000)/(单个数据包的大小)

500k的限速,每秒可限制的数据包数量大概为(500*1000/150 = 300个)300个。

[root@jxl-1 ~]# iptables -t filter -I OUTPUT -p  tcp -m limit --limit 300/s  -j ACCEPT [root@jxl-1 ~]# iptables -t filter -A OUTPUT -p  tcp -j DROP 

速率带宽多多少少是由落差的,如果就想限制在500k以内,可以根据测试的结果来调整每秒数据包的效果,如下图所示,拉取文件的速率为327k/s,此时数据包的数量我是设置的120个。


#java#
全部评论

相关推荐

牛客722552937号:新锐之星有点坑爹,特别是对男的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务