iptables 配置LINUX防火牆

tonywi888發表於2007-04-12

iptables使用3個預設表:filter,nat,mangle。其中filter為系統預設操作表。

Filter表用於防火牆設定,對匹配條件的資料包可以選擇accessdropreject等的處理方式。Nat表用於網路地址轉發,可以將源、目的ip地址轉變為指定的ip地址。Mangle表可以實現對資料包頭的修改或給資料包附上一些帶外資料,當前mangle表支援修改TOS位及設定skbnfmard欄位。但由於某些中間層裝置會忽略tos位的值,因此實際應用較少。

Filter表中有inputforwardoutput鏈;nat表中有preroutingforwardpostrouting鏈;mangle表中有preroutingoutput鏈。

常用語法解釋:

iptables –t 表名 –A/I/D/R/ 鏈名 【匹配條件】 -j 行為

表名、鏈名不再重複,介紹一下“匹配條件”:

-p 指定協議(tcp/icmp/udp/...) etc. –p icmp (可以視為載入了相應的處理模組)

-s 源地址(ip address/masklen) etc. –s 10.1.2.0/24

-d 目的地址(ip address/masklen) etc. –d 10.1.2.3/32

-i 資料包輸入介面 etc. –I eth0

-o 資料包輸出介面 etc. –o eth1

一些模組載入後,還可以進一步指定模組所支援的子選項,如:

iptables …… -p tcp –sport 80 …… j ……

iptables …… -m mac –mac-source 00:11:22:33:44:55 …… -j ……

鑑於filter表的表述比較簡單,故不再敷述。以下介紹nat表。

NatNetwork Address Translation 網路地址轉換

linux以前的核心僅僅支援有限的NAT功能,被稱為偽裝(masquerade)。Netfilter則支援任何一種NAT。一般來講NAT可以分為源NAT和目的NAT

NAT在資料包經過postrouting時修改資料包的源地址。偽裝是一個特殊的SNAT

目的NAT在資料包經過outputprerouting 時修改資料包目的地址。埠轉發和透明代理都是DNAT

可以舉例說明:

iptables -t nat -A POSTROUTING –s 10.0.0.1/32 -j SNAT --to-source 1.2.3.4

iptables –t nat –A PREROUTING –d 1.2.3.4 –j DNAT –to-destination 10.0.0.1

公司對iptables使用還包括:masqueraderedirect

MASQUERADE

用於具有動態IP地址的撥號連線的SNAT,類似於SNAT,但是如果連線斷開,所有的連線跟蹤資訊將被丟棄,而去使用重新連線以後的IP地址進行IP偽裝。我認為與常用路由器的PAT 功能相類似。

Etc. iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0

REDIRECT

重定向資料包為目的為本地,和DNAT將目的地址修改為接到資料包的介面地址情況完全一樣。

Etc. iptables –t nat –A PREROUTING –s 10.0.0.0/24 –d ! localhost –dport 80 –j REDIRECT –to-port 3128

以上指定了到達非本機ip的其他http包,在剛進入伺服器時,更改資料包的目的ip為伺服器的ip,目的埠改為3128。我們配合squid的使用,可以實現使用者上網的透明代理。

Mangle表到目前的應用不很普遍,暫不介紹。

任何時候在任何nefilter規則鏈中,資料包都可以被排隊轉發到使用者空間去。實際的排隊是由核心模組來完成的(ip_queue.o)

資料包被髮送給使用者空間程式。該程式能對資料包進行任何處理。處理結束以後,使用者程式可以將該資料包重新注入核心或者設定一個對資料包的目標動作(如丟棄等)

這是netfilter的一個關鍵技術,使使用者程式可以進行復雜的資料包操作。從而減輕了核心空間的複雜度。使用者空間的資料包操作程式能很容易的適用ntfilter提供的稱為libipq的庫來進行開發。

最後,提醒諸位,最好將每一條iptables規則統一寫到/etc/sysconfig/iptables檔案中,iptables每次啟動時將讀取其中的指令碼,並一次性同時生效。單一的加入iptables規則將逐一生效,並重新整理整個規則鏈,處理多條規則時極不合理。

可以有命令:iptables-save 將當前啟用的所有規則寫入/etc/sysconfig/iptables檔案中。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8570952/viewspace-910220/,如需轉載,請註明出處,否則將追究法律責任。

相關文章