針對不同資源提供不同安全級別的保 護,可以考慮構建一個叫做“demilitarized zone”(dmz)的區(qū)域。dmz可以理解為一個不同于外網(wǎng)或內網(wǎng)的特殊網(wǎng)絡區(qū)域。dmz內通常放置一些不含機密信息的公用服務器,比如web、 mail、ftp等。這樣來自外網(wǎng)的訪問者可以訪問dmz中的服務,但不可能接觸到存放在內網(wǎng)中的公司機密或私人信息等。即使dmz中服務器受到破壞,也 不會對內網(wǎng)中的機密信息造成影響。
許多防火墻產品都提供了dmz的接口。硬件防火墻由于 使用專門的硬件芯片,所以在性能和流量上有絕對的優(yōu)勢。軟件防火墻的性價比非常好,一般企業(yè)使用起來效果不錯。如果使用linux防火墻,其成本將更低。 因此這里將要介紹的是在linux防火墻上劃分dmz區(qū)域的方法。
構建 dmz的策略
linux從2.4內核開始,正式使用iptables 來代替以前的ipfwadm和ipchains,實現(xiàn)管理linux的包過濾功能。linux的包過濾通過一個叫netfilter的內核部件來實現(xiàn)。 netfilter內建了三個表,其中默認表filter中又包括3個規(guī)則鏈,分別是負責外界流入網(wǎng)絡接口的數(shù)據(jù)過濾的input鏈、負責對網(wǎng)絡接口輸出 的數(shù)據(jù)進行過濾的output鏈,以及負責在網(wǎng)絡接口之間轉發(fā)數(shù)據(jù)過濾的 forward鏈。要構建一個帶dmz的防火墻,需要利用對這些鏈的設定完成。首先要對從連接外部網(wǎng)絡的網(wǎng)卡(eth0)上流入的數(shù)據(jù)進行判斷,這是在 input鏈上完成。如果數(shù)據(jù)的目標地址屬于dmz網(wǎng)段,就要將數(shù)據(jù)轉發(fā)到連接dmz網(wǎng)絡的網(wǎng)卡(eth1)上;如果是內部網(wǎng)絡的地址,就要將數(shù)據(jù)轉發(fā)到 連接內部網(wǎng)絡的網(wǎng)卡(eth2)上。表1顯示了各個網(wǎng)絡之間的訪問關系。
表1 網(wǎng)絡間訪問關系表
內網(wǎng) 外網(wǎng) dmz
內網(wǎng) / y y
外
網(wǎng) n / y
dmz n n /
根據(jù)表1,可以明
確以下六條訪問控制策略。
1.內網(wǎng)可以訪問外網(wǎng)
內網(wǎng)的用戶顯然需要自由
地訪問外網(wǎng)。在這一策略中,防火墻需要進行源地址轉換。
2.內網(wǎng)可以訪問dmz
此
策略是為了方便內網(wǎng)用戶使用和管理dmz中的服務器。
3.外網(wǎng)不能訪問內網(wǎng)
很
顯然,內網(wǎng)中存放的是公司內部數(shù)據(jù),這些數(shù)據(jù)不允許外網(wǎng)的用戶進行訪問。
4.外網(wǎng)可以訪
問dmz
dmz中的服務器本身就是要給外界提供服務的,所以外網(wǎng)必須可以訪問dmz。同時,外網(wǎng)訪問dmz需要由防火墻完成對外地址到服
務器實際地址的轉換。
5.dmz不能訪問內網(wǎng)
很明顯,如果違背此策略,
則當入侵者攻陷dmz時,就可以進一步進攻到內網(wǎng)的重要數(shù)據(jù)。
6.dmz不能訪問外網(wǎng)
此
條策略也有例外,比如dmz中放置郵件服務器時,就需要訪問外網(wǎng),否則將不能正常工作。
dmz 的實現(xiàn)
根據(jù)以上訪問控制策略可以設定linux防火墻的過濾規(guī)則。下 面將在一個虛構的網(wǎng)絡環(huán)境中,探討如何根據(jù)以上六條訪問控制策略建立相應的防火墻過濾規(guī)則。這里的討論和具體應用會有所區(qū)別,不過這種討論將有助于實際應 用。用戶在實際應用時可根據(jù)具體的情況進行設置。該虛擬環(huán)境的網(wǎng)絡拓撲如圖1。
圖1 dmz網(wǎng)絡拓撲圖
如圖1所示,路由器連接internet和防火墻。作為防火墻的linux服
務器使用三塊網(wǎng)卡:網(wǎng)卡eth0與路由器相連,網(wǎng)卡
eth1與dmz區(qū)的hub相連,網(wǎng)卡eth2與內網(wǎng)hub相連。作為一個抽象的例子,我們用“[內網(wǎng)地址]”來代表“192.168.1.0/24”之
類的具體數(shù)值。同理還有“[外網(wǎng)地址]”和“[dmz地址]”。
對于防火墻,原則之一就 是默認禁止所有數(shù)據(jù)通信,然后再打開必要的通信。所以在防火墻腳本的最初,需要清空系統(tǒng)原有的規(guī)則,然后將input、output、forward的默 認規(guī)則設置為丟棄所有數(shù)據(jù)包。
對應的防火墻腳本片段如下: # flush out
the tables and delete all user-defined chains
/sbin/iptables -f
/sbin/iptables
-x
/sbin/iptables -t nat -f
/sbin/iptables -t nat -x
/sbin/iptables -p input drop
/sbin/iptables -p output drop
/sbin/iptables -p forward drop
====================================================================================== -->
六種策略的實現(xiàn)。
1.內網(wǎng)可以訪問外網(wǎng)
對應的防火墻腳本片段如下:
/sbin/iptables -t nat
-a postrouting -s [內網(wǎng)地址] -d [外網(wǎng)地址] -o eth0 -j snat --to [nat的真實ip]
當數(shù)據(jù)從連接外網(wǎng)的eth0流出時,要將來自內網(wǎng)的數(shù)據(jù)包的源地址改成internet上的真實ip,這樣才能和外網(wǎng)的主機進行通 信。“[nat的真實ip]”表示分配給nat用戶的真實ip,有幾個就寫幾個,以空格分開,但至少要寫一個。
2.內網(wǎng)可以訪問dmz
對應的防火墻腳本片段如下:
/sbin/iptables -a
forward -s [內網(wǎng)地址] -d [dmz地址] -i eth2 -j accept
以上命令允許所有來自內網(wǎng)、目的地為
dmz的數(shù)據(jù)包通過。
3.外網(wǎng)不能訪問內網(wǎng)
對應的防火墻腳本片段如下:
/sbin/iptables
-t nat -a prerouting -s [外網(wǎng)地址] -d [內網(wǎng)地址] -i eth0 -j drop
以上命令將來自
外網(wǎng)、去往內網(wǎng)的數(shù)據(jù)包全部丟棄。
4.外網(wǎng)可以訪問dmz
為了保護
dmz中的服務器,外網(wǎng)對dmz的訪問也要加以限制。通常的思路是,只允許外網(wǎng)訪問dmz中服務器所提供的特定服務,比如http。
對應
的防火墻腳本片段如下:
/sbin/iptables -t nat -a prerouting -p tcp --dport 80
-d [分配給http服務器的internet上的真實ip] -s [外網(wǎng)地址] -i eth0 -j dnat --to
[http服務器的實際ip]
/sbin/iptables -a forward -p tcp -s [外網(wǎng)地址] -d
[http服務器的實際ip] -i eth0 --dport 80 -j accept
/sbin/iptables -a
forward -p tcp -d [外網(wǎng)地址] -s [http服務器的實際ip] -i eth1 --sport 80 ! --syn -j
accept
/sbin/iptables -t nat -a prerouting -s [外網(wǎng)地址] -d [dmz地址]
-i eth0 -j drop
該防火墻腳本片段將開放http服務,使得只有訪問 dmz中http服務的數(shù)據(jù)包才能通過防火墻。
5.dmz不能訪問內網(wǎng)
對
應的防火墻腳本片段如下:
/sbin/iptables -a forward -s [dmz地址] -d [內網(wǎng)地址] -i
eth1 -j drop
以上命令將丟棄所有從dmz到內網(wǎng)的數(shù)據(jù)包。
6.dmz
不能訪問外網(wǎng)
對應的防火墻腳本片段如下:
/sbin/iptables -t nat -a postrouting
-p tcp --dport 25 -d [外網(wǎng)地址] -s [郵件服務器的ip] -o eth0 -j snat --to
[分配給smtp服務器的internet上的真實ip]
/sbin/iptables -a forward -p tcp -s
[郵件服務器的ip] -d [外網(wǎng)地址] -i eth1 --dport 25 -j accept
/sbin/iptables
-a forward -p tcp -d [郵件服務器的ip] -s [外網(wǎng)地址] -i eth0--sport 25 ! --syn -j
accept
以上命令先允許dmz中郵件服務器連接外網(wǎng)的smtp服務端口(25),然 后禁止其它從dmz發(fā)往外網(wǎng)的數(shù)據(jù)包。
針對以上基本策略例舉了實現(xiàn)它們的基本規(guī)則。在實 際應用中,需要根據(jù)具體情況進行設置。只要設置得當,linux也能成為很好的防火墻。需要補充的是,無論何種防火墻都只能提供有限的保護。設置好防火墻 不等于網(wǎng)絡就是安全的,關鍵在于綜合運用各種安全手段。