Iptables防火墻limit模塊擴展匹配規則詳解

Iptables防火墻limit模塊擴展匹配規則

@[TOC]

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個。

以上就是Iptables防火墻limit模塊擴展匹配規則詳解的詳細內容,更多關於Iptables防火墻limit模塊的資料請關註WalkonNet其它相關文章!

推薦閱讀: