古詩詞大全網 - 成語用法 - Linux下DMZ配置

Linux下DMZ配置

Linux下DMZ構建

保護網絡最常見的方法就是使用防火墻。防火墻作為網絡的第壹道防線,通常放置在外網和需要保護的網絡之間。最簡單的情況是直接將防火墻放置在外網和企業網絡之間,所有流入企業網絡的數據流量都將通過防火墻,使企業的所有客戶機及服務器都處於防火墻的保護下。這對於壹些中小企業來說是簡單易行的,而且這種解決方法在某些情況下也表現不錯。然而這種結構畢竟比較簡單。企業中有許多服務器、客戶機等資源需要保護,不同的資源對安全強度的要求也不同。不能用對待客戶機的安全級別來對待服務器,這樣服務器將會很危險;同樣,也不能用對待服務器的安全級別來對待客戶機,這樣用戶會感覺很不方便。

針對不同資源提供不同安全級別的保護,可以考慮構建壹個叫做“Demilitarized Zone”(DMZ)的區域。DMZ可以理解為壹個不同於外網或內網的特殊網絡區域。DMZ內通常放置壹些不含機密信息的公用服務器,比如Web、Mail、FTP等。這樣來自外網的訪問者可以訪問DMZ中的服務,但不可能接觸到存放在內網中的公司機密或私人信息等。即使DMZ中服務器受到破壞,也不會對內網中的機密信息造成影響。

許多防火墻產品都提供了DMZ的接口(壹般老的防火墻都只有兩個口,即做不了DMZ,現在的防火墻壹般都有三個或四個接口)。硬件防火墻由於使用專門的硬件芯片,所以在性能和流量上有絕對的優勢。軟件防火墻的性價比非常好,壹般企業使用起來效果不錯。如果使用Linux防火墻,其成本將更低。這裏將介紹的是在Linux防火墻上劃分DMZ區域的方法。

構建DMZ的策略

Linux從2.4內核開始,正式使用iptables來代替以前的ipfwadm和ipchains,實現管理Linux的包過濾功能。Linux的包過濾通過壹個叫netfilter的內核部件來實現。netfilter內建了三個表,其中默認表Filter中又包括3個規則鏈,分別是負責外界流入網絡接口的數據過濾的INPUT鏈、負責對網絡接口輸出的數據進行過濾的OUTPUT鏈,以及負責在網絡接口之間轉發數據過濾的FORWARD鏈。要構建壹個帶DMZ的防火墻,需要利用對這些鏈的設定完成。首先要對從連接外部網絡的網卡(eth0)上流入的數據進行判斷,這是在INPUT鏈上完成。如果數據的目標地址屬於DMZ網段,就要將數據轉發到連接DMZ網絡的網卡(eth1)上;如果是內部網絡的地址,就要將數據轉發到連接內部網絡的網卡(eth2)上。表1顯示了各個網絡之間的訪問關系。

表1 網絡間訪問關系表

內網 外網 DMZ

內網 / Y Y

外網 N / Y

DMZ N N /

根據表1,可以明確以下六條訪問控制策略。

1.內網可以訪問外網

內網的用戶顯然需要自由地訪問外網。在這壹策略中,防火墻需要進行源地址轉換。

2.內網可以訪問DMZ

此策略是為了方便內網用戶使用和管理DMZ中的服務器。

3.外網不能訪問內網

很顯然,內網中存放的是公司內部數據,這些數據不允許外網的用戶進行訪問。

4.外網可以訪問DMZ

DMZ中的服務器本身就是要給外界提供服務的,所以外網必須可以訪問DMZ。同時,外網訪問DMZ需要由防火墻完成對外地址到服務器實際地址的轉換。

5.DMZ不能訪問內網

很明顯,如果違背此策略,則當入侵者攻陷DMZ時,就可以進壹步進攻到內網的重要數據。

6.DMZ不能訪問外網

此條策略也有例外,比如DMZ中放置郵件服務器時,就需要訪問外網,否則將不能正常工作。

DMZ的實現

根據以上訪問控制策略可以設定Linux防火墻的過濾規則。下面將在壹個虛構的網絡環境中,探討如何根據以上六條訪問控制策略建立相應的防火墻過濾規則。這裏的討論和具體應用會有所區別,不過這種討論將有助於實際應用。用戶在實際應用時可根據具體的情況進行設置。該虛擬環境的網絡拓撲如圖1。

圖1 DMZ網絡拓撲圖

如圖1所示,路由器連接Internet和防火墻。作為防火墻的Linux服務器使用三塊網卡:網卡eth0與路由器相連,網卡eth1與DMZ區的Hub相連,網卡eth2與內網Hub相連。作為壹個抽象的例子,我們用“[內網地址]”來代表“192.168.1.0/24”之類的具體數值。同理還有“[外網地址]”和“[DMZ地址]”。

對於防火墻,原則之壹就是默認禁止所有數據通信,然後再打開必要的通信。所以在防火墻腳本的最初,需要清空系統原有的規則,然後將INPUT、OUTPUT、FORWARD的默認規則設置為丟棄所有數據包。

對應的防火墻腳本片段如下:

# 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

# Drop every packet

/sbin/iptables -P INPUT DROP

/sbin/iptables -P OUTPUT DROP

/sbin/iptables -P FORWARD DROP

接下來,逐壹解釋六種策略的實現。

1.內網可以訪問外網

對應的防火墻腳本片段如下:

/sbin/iptables -t nat -A POSTROUTING -s [內網地址] -d [外網地址] -o eth0 -j SNAT --to [NAT的真實IP]

當數據從連接外網的eth0流出時,要將來自內網的數據包的源地址改成Internet上的真實IP,這樣才能和外網的主機進行通信。“[NAT的真實IP]”表示分配給NAT用戶的真實IP,有幾個就寫幾個,以空格分開,但至少要寫壹個。

2.內網可以訪問DMZ

對應的防火墻腳本片段如下:

/sbin/iptables -A FORWARD -s [內網地址] -d [DMZ地址] -i eth2 -j ACCEPT

以上命令允許所有來自內網、目的地為DMZ的數據包通過。

3.外網不能訪問內網

對應的防火墻腳本片段如下:

/sbin/iptables -t nat -A PREROUTING -s [外網地址] -d [內網地址] -i eth0 -j DROP

以上命令將來自外網、去往內網的數據包全部丟棄。

4.外網可以訪問DMZ

為了保護DMZ中的服務器,外網對DMZ的訪問也要加以限制。通常的思路是,只允許外網訪問DMZ中服務器所提供的特定服務,比如HTTP。

對應的防火墻腳本片段如下:

/sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -d [分配給HTTP服務器的Internet上的真實IP] -s [外網地址] -i eth0 -j DNAT --to [HTTP服務器的實際IP]

/sbin/iptables -A FORWARD -p tcp -s [外網地址] -d [HTTP服務器的實際IP] -i eth0 --dport 80 -j ACCEPT

/sbin/iptables -A FORWARD -p tcp -d [外網地址] -s [HTTP服務器的實際IP] -i eth1 --sport 80 ! --syn -j ACCEPT

/sbin/iptables -t nat -A PREROUTING -s [外網地址] -d [DMZ地址] -i eth0 -j DROP

該防火墻腳本片段將開放HTTP服務,使得只有訪問DMZ中HTTP服務的數據包才能通過防火墻。

設置得當,Linux會能成為很好的防火墻。需要補充的是,任何壹種防火墻都只能提供有限的保護。設置好防火墻不等於網絡就是安全的,很多單位學校防火墻基本上是壹個心理安慰的工具,連基本的策略都是全部any,所以關鍵在於綜合運用各種安全手段。