萬盛學電腦網

 萬盛學電腦網 >> 網絡應用技術 >> 應用教程 >> Netfilter與iptables的區別與特點

Netfilter與iptables的區別與特點

  Netfilter與iptables的關系

  我們常聽說Linux防火牆叫做“iptables”,其實這樣的稱呼並不是很正確,什麼是iptables呢?在前面我們提過Netfilter所需要的規則是存放在內存中的,但問題是防火牆管理人員該如何將規則存放到內存呢?因此,防火牆管理人員會需要一個規則編輯工具,通過這個工具來對內存中的規則執行添加、刪除及修改等操作,這個工具就是iptables以及ip6tables,其中iptables是在IPV4網絡環境中使用,而ip6tables是在IPV6網絡環境中使用,因此,Linux防火牆比較正確的名稱應該是Netfilter/iptables。

  此外,對於iptables結構上的問題我們必須加以了解,前面曾提到,Netfilter的模塊越多,防火牆的功能也就越多,而且我們可以通過升級內核的方式來達到一起升級Netfilter的目的。不過,防火牆的升級不是僅僅升級內核就可以解決的,也並非一味增加Netfilter的模塊,就可以無限擴充Netfilter的功能。我們要知道,防火牆管理人員是通過iptables工具,將“規則”寫入到Netfilter的規則數據庫(就是前面所提到的鏈)中,而這些規則有特定的“語法”,例如:“iptables -t filter -A INPUT -p tcp -m state --state ESTABLISHED, RELATED -jACCEPT ”,因此,當我們將規則傳給iptables工具時,iptables工具會先檢查語法是否正確,如果不正確,則iptables工具會顯示語法錯誤的警告信息;反之,iptables就會把這些規則寫入到規則數據庫中。問題是iptables工具如何得知一個“新模塊”?其語法該如何下達呢?

  事實上,不是只有Netfilter有模塊,iptables工具也有模塊,這些模塊就存放在/lib/x Tables目錄下,該目錄包含了iptables及ip6tables兩個工具的模塊。表2-2即為iptables及ip6tables工具的所有模塊,其中libxt開頭的文件是iptables的模塊,libip6t開頭的文件則為ip6tables的模塊;這些模塊理應與Netfilter的模塊是一一對應的,如/lib/modules/kernel_version/kernel/net/netfilter/目錄中有一個模塊稱為xt_string.ko,在/lib/x Tables/目錄中就會有一個叫libxt_string.so的模塊,也就是說,當我們下達與xt_string.ko相關的語法時,iptables工具會根據libxt_string.so模塊的指示去檢查語法是否正確,並將Netfilter的libxt_string.ko模塊載入到系統內存中,iptables最後將規則寫入到規則數據庫中。

  表2-2 iptables及ip6tables工具的模塊列表

  從以上內容我們可以推斷,如果iptables工具沒有包含下達規則中所需的模塊,那麼iptables會說你所下達的語法不正確,又如果iptables包含了我們所下達語法的模塊,但Netfilter沒有對應的模塊可用,iptables會告訴我們某個Netfilter的模塊不存在,因此,如果升級內核或Netfilter,iptables的軟件也應隨之升級才行。

copyright © 萬盛學電腦網 all rights reserved