Iptables 使用簡介
Iptables是一種功能強大的基于包過濾的網絡工具,本文簡單介紹了iptables的使用方法,以及如何利用它來構建一個網絡防火墻。
Iptables由兩個子系統組成,即內核模塊和用戶接口應用程序,它可以被編譯進系統內核,也可以編譯成可裝卸的內核模塊,之后還可以選擇安裝一些能夠完成一定功能的部件,這些部件實現了IP地址偽裝,端口映射,包過濾等等一系列功能。
安裝iptables
iptables很多組件的配置、編譯是與內核的配置、編譯相關聯的,一些Linux發行版已經預先安裝好了iptables,如RedHat,RedFlag等。但是您還是有可能需要自己安裝。
首先您需要2.4.X以上版本的內核,可以從http://Kernel.org下載。
您還需要iptables的用戶空間程序,它可以從Netfilter主頁下載。
當您做好準備工作后就開始編譯內核,在Networking Options下找到 Network packet filtering子項,選擇Network packet filtering replaces ipchains并進行配置。
使用新內核引導后編譯iptables的用戶空間程序,安裝程序會將可執行文件拷貝到/usr/local/sbin目錄。
如果一切都很順利,我們就已經在內核中成功地安裝了對iptables和Netfilter的支持了。
用戶可以通過service iptables start啟動服務。
表和鏈
這里我們討論一下數據包在iptables的各個鏈和表之間是怎么傳遞的。
舉例來說,一個從外部主機發往本機的數據包需要經過以下的途徑才能被應用程序接收:
1. 數據包從網絡傳入,并由網卡接收
2. 隨后轉入mangle表的PREROUTING鏈。
3. 再轉入nat表的PRETOUTING鏈,這個鏈主要用來做DNAT,即目的地址轉發。
4. 路由判斷。
5. 因為數據包是傳入本機的,因此轉入mangle表的INPUT鏈。
6. 轉入filter表的INPUT鏈。
7. 最終到達接收數據包的應用程序。
同樣,一個從本地發往外部主機的數據包也經過了下列途徑,才開始真正的網絡傳輸:
1. 應用程序生成數據包,根據源地址,目的地址,外出接口等信息進行路由判斷。
2. 隨后轉入mangle表的OUTPUT鏈。
3. 再轉入nat表的OUTPUT鏈,這個鏈可以用來做DNAT。
4. 進入filter表的OUTPUT鏈,對該數據包進行選擇性過濾。
5. 然后進入mangle表的POSTROUTING鏈。
6. 進入nat表的POSTROUTING鏈,該鏈可以做SNAT,即源地址轉發,最終進入網絡。
對于轉發的包,即傳入包的目的地址是另一個網絡中的某個主機時,也有下列途徑:
1. 數據報傳入,進入mangle表的PREROUTING鏈
2. 轉入nat表的PREROUTING鏈。
3. 進行路由判斷。該包的目的地址是另一臺主機,所以轉入mangle表的FORWARD鏈
4. 再轉入filter表的FORWARD鏈,針對這類包的所有過濾操作都在該鏈進行。
5. 過濾后轉入mangle鏈的POSTROUTING鏈,最后通過nat表的POSTROUTING鏈進行SNAT,最終進入網絡。
在對網絡數據包的流向有了一些了解后,下一節我們將介紹如何編寫iptables規則。