iptables hashlimit模組介紹(zz)

來源:互聯網
上載者:User
這幾天正在搗鼓防火牆,用到了hashlimit模組。Google了一圈發現相關的文檔無論英文還
是中文都很少,
所以我就把自己的折騰的心得記錄下來吧。

hashlimit是iptables的一個匹配模組,用它結合iptables的其它命令可以實現限速的功能
。(注意,單獨hashlimit模組
是無法限速的)。
不過首先必須明確,hashlimit本身只是一個“匹配”模組。我們知道,iptables的基本原
理是“匹配--處理”,hashlimit在
這個工作過程中只能起到匹配的作用,它本身是無法對網路資料包進行任何處理的。我看到
網上有些hashlimit的例子裡面說只
用一條包含hashlimit匹配規則的iptables語句就可以實現限速,那是錯誤的。
實際上,利用hashlimit來限速需要包括兩個步驟。
       1.對符合hashlimit匹配規則包允許存取
       2.丟棄/拒絕未允許存取的包
下面是一個簡單的例子:
iptables -A INPUT -p tcp --dport 22 -m hashlimit --hashlimit-name ssh
--hashlimit 5/sec --hashlimit-burst 10 --hashlimit-mode srcip
--hashlimit-htable-expire 90000 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

然後,我們來著重講講hashlimit模組具體是如何工作的。hashlimit的匹配是基於令牌桶
(Token bucket)模型的。令牌桶是一種網路通訊中常見的緩衝區工作原理,它有兩個重要
的參數,令牌桶容量n和令牌產生速率s。我們可以把令牌當成是門票,而令牌桶則是負責制
作和發放門票的管理員,它手裡最多有n張令牌。一開始,管理員開始手裡有n張令牌。每當
一個資料包到達後,管理員就看看手裡是否還有可用的令牌。如果有,就把令牌發給這個數
據包,hashlimit就告訴iptables,這個資料包被匹配了。而當管理員把手上所有的令牌都
發完了,再來的資料包就拿不到令牌了。這時,hashlimit模組就告訴iptables,這個資料
包不能被匹配。
除了發放令牌之外,只要令牌桶中的令牌數量少於n,它就會以速率s來產生新的令牌,直到
令牌數量到達n為止。
通過令牌桶機制,即可以有效控制單位時間內通過(匹配)的資料包數量,又可以容許短
時間內突發的大量資料包的通過(只要資料包數量不超過令牌桶n)。
hashlimit模組提供了兩個參數--hashlimit和--hashlimit-burst,分別對應於令牌產生速
率和令牌桶容量。

除了令牌桶模型外,hashlimit匹配的另外一個重要概念是匹配項。在hashlimit中,每個匹
配項擁有一個單獨的令牌桶,執行獨立的匹配計算。通過hashlimit的--hashlimit-mode參
數,你可以指定四種匹配項及其組合,即:srcip(每個源地址IP為一個匹配項),dstip(
每個目的地址IP為一個匹配項),srcport(每個源連接埠為一個匹配項),dstport(每個目
的連接埠為一個匹配項)

除了前面介紹的三個參數外,hashlimit還有一個必須要用的參數,即--hashlimit-name。
hashlimit會在/proc/net/ipt_hashlimit目錄中,為每個調用了hashlimit模組的iptables
命令建立一個檔案,其中儲存著各匹配項的資訊。--hashlimit-name參數即用來指定該檔案
的檔案名稱。

好了,以上我們已經介紹了hashlimit的工作原理和相應的參數,下面我們來看幾個例子。

首先是前面的那個例子:
iptables -A INPUT -p tcp --dport 22 -m hashlimit --hashlimit-name ssh
--hashlimit 5/sec --hashlimit-burst 10 --hashlimit-mode -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
在瞭解了hashlimit各參數的含義之後,我們現在就可以知道這兩條iptables命令的作用。
第一條的作用是,為所有訪問本機22連接埠的不同IP建立一個匹配項,匹配項對應的令牌桶容
量為10,令牌產生速率為5個每秒。允許存取通過匹配的資料包。
第二條的作用是,丟棄所有其它訪問本機22連接埠的資料包。

通過這兩條命令,我們就實現了限制其它機器對本機22連接埠(ssh服務)頻繁訪問的功能,

再來我們看一個複雜點的限速。假設我們現在在一台NAT Gateway上,想限制內部網某個網段
192.168.1.2/24對外的訪問頻率。(這個的主要作用是限制內部中毒主機對外的flood攻擊

那我們可以這麼做:
iptables -N DEFLOOD
iptables -A FORWARD -s 192.168.1.2/24 -m state --state NEW -j DEFLOOD
iptables -A DEFLOOD -m hashlimit --hashlimit-name deflood --hashlimit 10/sec
--hashlimit-burst 10 --hashlimit-mode srcip -j ACCEPT
iptables -P DEFLOOD -j DROP
第一條命令建立了一個自訂的處理鏈
第二條命令,所有來自192.168.1.2/24網段,並且打算建立網路連接的資料包,都進入
DEFLOOD鏈處理
第三條命令,在DEFLOOD鏈中,為每個IP建立一個匹配項,對應令牌桶容量為10,產生速率為
10個每秒。允許存取通過匹配的資料包。
第四條命令,在DEFLOOD鏈中丟棄所有其它的資料包

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.