- 論壇徽章:
- 0
|
防守在網(wǎng)絡(luò)安全中的重要性不必多說(shuō)。保護(hù)網(wǎng)絡(luò)最常見(jiàn)的方法就是使用防火墻。防火墻作為網(wǎng)絡(luò)的第一道防線,通常放置在外網(wǎng)和需要保護(hù)的網(wǎng)絡(luò)之間。
最簡(jiǎn)單的情況是直接將防火墻放置在外網(wǎng)和企業(yè)網(wǎng)絡(luò)之間,所有流入企業(yè)網(wǎng)絡(luò)的數(shù)據(jù)流量都將通過(guò)防火墻,使企業(yè)的所有客戶(hù)機(jī)及服務(wù)器都處于防火墻的保護(hù)下。這
對(duì)于一些中小企業(yè)來(lái)說(shuō)是簡(jiǎn)單易行的,而且這種解決方法在某些情況下也表現(xiàn)不錯(cuò)。然而這種結(jié)構(gòu)畢竟比較簡(jiǎn)單。企業(yè)中有許多服務(wù)器、客戶(hù)機(jī)等資源需要保護(hù),不
同的資源對(duì)安全強(qiáng)度的要求也不同。不能用對(duì)待客戶(hù)機(jī)的安全級(jí)別來(lái)對(duì)待服務(wù)器,這樣服務(wù)器將會(huì)很危險(xiǎn);同樣,也不能用對(duì)待服務(wù)器的安全級(jí)別來(lái)對(duì)待客戶(hù)機(jī),這
樣用戶(hù)會(huì)感覺(jué)很不方便。 針對(duì)不同資源提供不同安全級(jí)別的保護(hù),可以考慮構(gòu)建一個(gè)叫做“Demilitarized
Zone”(DMZ)的區(qū)域。DMZ可以理解為一個(gè)不同于外網(wǎng)或內(nèi)網(wǎng)的特殊網(wǎng)絡(luò)區(qū)域。DMZ內(nèi)通常放置一些不含機(jī)密信息的公用服務(wù)器,比如Web、
Mail、FTP等。這樣來(lái)自外網(wǎng)的訪問(wèn)者可以訪問(wèn)DMZ中的服務(wù),但不可能接觸到存放在內(nèi)網(wǎng)中的公司機(jī)密或私人信息等。即使DMZ中服務(wù)器受到破壞,也
不會(huì)對(duì)內(nèi)網(wǎng)中的機(jī)密信息造成影響。
許多防火墻產(chǎn)品都提供了DMZ的接口。硬件防火墻由于使用專(zhuān)門(mén)的硬件芯片,所以在性能和流量上有絕對(duì)的優(yōu)勢(shì)。軟件防火墻的性?xún)r(jià)比非常好,一般企業(yè)使用起來(lái)
效果不錯(cuò)。如果使用Linux防火墻,其成本將更低。因此這里將要介紹的是在Linux防火墻上劃分DMZ區(qū)域的方法。
構(gòu)建DMZ的策略
Linux從2.4內(nèi)核開(kāi)始,正式使用iptables來(lái)代替以前的ipfwadm和ipchains,實(shí)現(xiàn)管理Linux的包過(guò)濾功能。Linux的包
過(guò)濾通過(guò)一個(gè)叫netfilter的內(nèi)核部件來(lái)實(shí)現(xiàn)。netfilter內(nèi)建了三個(gè)表,其中默認(rèn)表Filter中又包括3個(gè)規(guī)則鏈,分別是負(fù)責(zé)外界流入網(wǎng)
絡(luò)接口的數(shù)據(jù)過(guò)濾的INPUT鏈、負(fù)責(zé)對(duì)網(wǎng)絡(luò)接口輸出的數(shù)據(jù)進(jìn)行過(guò)濾的OUTPUT鏈,以及負(fù)責(zé)在網(wǎng)絡(luò)接口之間轉(zhuǎn)發(fā)數(shù)據(jù)過(guò)濾的FORWARD鏈。要構(gòu)建一
個(gè)帶DMZ的防火墻,需要利用對(duì)這些鏈的設(shè)定完成。首先要對(duì)從連接外部網(wǎng)絡(luò)的網(wǎng)卡(eth0)上流入的數(shù)據(jù)進(jìn)行判斷,這是在INPUT鏈上完成。如果數(shù)據(jù)
的目標(biāo)地址屬于DMZ網(wǎng)段,就要將數(shù)據(jù)轉(zhuǎn)發(fā)到連接DMZ網(wǎng)絡(luò)的網(wǎng)卡(eth1)上;如果是內(nèi)部網(wǎng)絡(luò)的地址,就要將數(shù)據(jù)轉(zhuǎn)發(fā)到連接內(nèi)部網(wǎng)絡(luò)的網(wǎng)卡
(eth2)上。表1顯示了各個(gè)網(wǎng)絡(luò)之間的訪問(wèn)關(guān)系。
表1 網(wǎng)絡(luò)間訪問(wèn)關(guān)系表
內(nèi)網(wǎng)
外網(wǎng)
DMZ
內(nèi)網(wǎng)
/
Y
Y
外網(wǎng)
N
/
Y
DMZ
N
N
/
根據(jù)表1,可以明確以下六條訪問(wèn)控制策略。
1.內(nèi)網(wǎng)可以訪問(wèn)外網(wǎng)
內(nèi)網(wǎng)的用戶(hù)顯然需要自由地訪問(wèn)外網(wǎng)。在這一策略中,防火墻需要進(jìn)行源地址轉(zhuǎn)換。
2.內(nèi)網(wǎng)可以訪問(wèn)DMZ
此策略是為了方便內(nèi)網(wǎng)用戶(hù)使用和管理DMZ中的服務(wù)器。
3.外網(wǎng)不能訪問(wèn)內(nèi)網(wǎng)
很顯然,內(nèi)網(wǎng)中存放的是公司內(nèi)部數(shù)據(jù),這些數(shù)據(jù)不允許外網(wǎng)的用戶(hù)進(jìn)行訪問(wèn)。
4.外網(wǎng)可以訪問(wèn)DMZ
DMZ中的服務(wù)器本身就是要給外界提供服務(wù)的,所以外網(wǎng)必須可以訪問(wèn)DMZ。同時(shí),外網(wǎng)訪問(wèn)DMZ需要由防火墻完成對(duì)外地址到服務(wù)器實(shí)際地址的轉(zhuǎn)換。
5.DMZ不能訪問(wèn)內(nèi)網(wǎng)
很明顯,如果違背此策略,則當(dāng)入侵者攻陷DMZ時(shí),就可以進(jìn)一步進(jìn)攻到內(nèi)網(wǎng)的重要數(shù)據(jù)。
6.DMZ不能訪問(wèn)外網(wǎng)
此條策略也有例外,比如DMZ中放置郵件服務(wù)器時(shí),就需要訪問(wèn)外網(wǎng),否則將不能正常工作。
DMZ的實(shí)現(xiàn)
根據(jù)以上訪問(wèn)控制策略可以設(shè)定Linux防火墻的過(guò)濾規(guī)則。下面將在一個(gè)虛構(gòu)的網(wǎng)絡(luò)環(huán)境中,探討如何根據(jù)以上六條訪問(wèn)控制策略建立相應(yīng)的防火墻過(guò)濾規(guī)則。
這里的討論和具體應(yīng)用會(huì)有所區(qū)別,不過(guò)這種討論將有助于實(shí)際應(yīng)用。用戶(hù)在實(shí)際應(yīng)用時(shí)可根據(jù)具體的情況進(jìn)行設(shè)置。該虛擬環(huán)境的網(wǎng)絡(luò)拓?fù)淙鐖D1。
如圖1所示,路由器連接Internet和防火墻。作為防火墻的Linux服務(wù)器使用三塊網(wǎng)卡:網(wǎng)卡eth0與路由器相連,網(wǎng)卡eth1與
DMZ區(qū)的Hub相連,網(wǎng)卡eth2與內(nèi)網(wǎng)Hub相連。作為一個(gè)抽象的例子,我們用“[內(nèi)網(wǎng)地址]”來(lái)代表“192.168.1.0/24”之類(lèi)的具體數(shù)
值。同理還有“[外網(wǎng)地址]”和“[DMZ地址]”。
對(duì)于防火墻,原則之一就是默認(rèn)禁止所有數(shù)據(jù)通信,然后再打開(kāi)必要的通信。所以在防火墻腳本的最初,需要清空系統(tǒng)原有的規(guī)則,然后將INPUT、OUTPUT、FORWARD的默認(rèn)規(guī)則設(shè)置為丟棄所有數(shù)據(jù)包。
對(duì)應(yīng)的防火墻腳本片段如下:
[color="#ff0000"]# 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
[color="#ff0000"]# Drop every packet
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP
[color="#000000"]接下來(lái),逐一解釋六種策略的實(shí)現(xiàn)。
[color="#000000"] 1.內(nèi)網(wǎng)可以訪問(wèn)外網(wǎng)
對(duì)應(yīng)的防火墻腳本片段如下:
/sbin/iptables -t nat -A POSTROUTING -s [內(nèi)網(wǎng)地址] -d [外網(wǎng)地址] -o eth0 -j SNAT --to [NAT的真實(shí)IP]
[color="#000000"] 當(dāng)數(shù)據(jù)從連接外網(wǎng)的eth0流出時(shí),要將來(lái)自?xún)?nèi)網(wǎng)的數(shù)據(jù)包的源地址改成Internet上的真實(shí)IP,這樣才能和外網(wǎng)的主機(jī)進(jìn)行通信。“[NAT的真實(shí)IP]”表示分配給NAT用戶(hù)的真實(shí)IP,有幾個(gè)就寫(xiě)幾個(gè),以空格分開(kāi),但至少要寫(xiě)一個(gè)。
[color="#000000"] 2.內(nèi)網(wǎng)可以訪問(wèn)DMZ
對(duì)應(yīng)的防火墻腳本片段如下:
/sbin/iptables -A FORWARD -s [內(nèi)網(wǎng)地址] -d [DMZ地址] -i eth2 -j ACCEPT
以上命令允許所有來(lái)自?xún)?nèi)網(wǎng)、目的地為DMZ的數(shù)據(jù)包通過(guò)。
[color="#000000"] 3.外網(wǎng)不能訪問(wèn)內(nèi)網(wǎng)
對(duì)應(yīng)的防火墻腳本片段如下:
/sbin/iptables -t nat -A PREROUTING -s [外網(wǎng)地址] -d [內(nèi)網(wǎng)地址] -i eth0 -j DROP
以上命令將來(lái)自外網(wǎng)、去往內(nèi)網(wǎng)的數(shù)據(jù)包全部丟棄。
4.外網(wǎng)可以訪問(wèn)DMZ
為了保護(hù)DMZ中的服務(wù)器,外網(wǎng)對(duì)DMZ的訪問(wèn)也要加以限制。通常的思路是,只允許外網(wǎng)訪問(wèn)DMZ中服務(wù)器所提供的特定服務(wù),比如HTTP。
對(duì)應(yīng)的防火墻腳本片段如下:
/sbin/iptables -t nat -A PREROUTING -p tcp --dport 80 -d
[分配給HTTP服務(wù)器的Internet上的真實(shí)IP] -s [外網(wǎng)地址] -i eth0 -j DNAT --to
[HTTP服務(wù)器的實(shí)際IP]
/sbin/iptables -A FORWARD -p tcp -s [外網(wǎng)地址] -d [HTTP服務(wù)器的實(shí)際IP] -i eth0 --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -d [外網(wǎng)地址] -s [HTTP服務(wù)器的實(shí)際IP] -i eth1 --sport 80 ! --syn -j ACCEPT
/sbin/iptables -t nat -A PREROUTING -s [外網(wǎng)地址] -d [DMZ地址] -i eth0 -j DROP
[color="#000000"] 該防火墻腳本片段將開(kāi)放HTTP服務(wù),使得只有訪問(wèn)DMZ中HTTP服務(wù)的數(shù)據(jù)包才能通過(guò)防火墻。
[color="#000000"] 5.DMZ不能訪問(wèn)內(nèi)網(wǎng)
對(duì)應(yīng)的防火墻腳本片段如下:
/sbin/iptables -A FORWARD -s [DMZ地址] -d [內(nèi)網(wǎng)地址] -i eth1 -j DROP
以上命令將丟棄所有從DMZ到內(nèi)網(wǎng)的數(shù)據(jù)包。
6.DMZ不能訪問(wèn)外網(wǎng)
對(duì)應(yīng)的防火墻腳本片段如下:
/sbin/iptables -t nat -A POSTROUTING -p tcp --dport 25 -d [外網(wǎng)地址] -s
[郵件服務(wù)器的IP] -o eth0 -j SNAT --to [分配給SMTP服務(wù)器的Internet上的真實(shí)IP]
/sbin/iptables -A FORWARD -p tcp -s [郵件服務(wù)器的IP] -d [外網(wǎng)地址] -i eth1 --dport 25 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -d [郵件服務(wù)器的IP] -s [外網(wǎng)地址] -i eth0--sport 25 ! --syn -j ACCEPT
[color="#000000"] 以上命令先允許DMZ中郵件服務(wù)器連接外網(wǎng)的SMTP服務(wù)端口(25),然后禁止其它從DMZ發(fā)往外網(wǎng)的數(shù)據(jù)包。
[color="#000000"] 針對(duì)以上基本策略例舉了實(shí)現(xiàn)它們的基本規(guī)則。在實(shí)際應(yīng)用中,需要根據(jù)具體情況進(jìn)行設(shè)置。只要設(shè)置得當(dāng),Linux也能成為很好的防火墻。需要補(bǔ)充的是,無(wú)論何種防火墻都只能提供有限的保護(hù)。設(shè)置好防火墻不等于網(wǎng)絡(luò)就是安全的,關(guān)鍵在于綜合運(yùn)用各種安全手段。
[color="#000000"]用iptables構(gòu)建DMZ防火墻
一般被保護(hù)的內(nèi)部網(wǎng)絡(luò)可分成兩部分,一部分是內(nèi)部通訊區(qū),只允許內(nèi)部用戶(hù)訪問(wèn),絕對(duì)禁止外部用戶(hù)訪
問(wèn),另一部分是;饏^(qū)DMZ,對(duì)外提供有條件的服務(wù)。前者是系統(tǒng)的核心子網(wǎng),后者易受到外部的攻擊,是一個(gè)比較危險(xiǎn)的子網(wǎng)環(huán)境。一方面要求嚴(yán)格保護(hù)內(nèi)部子
網(wǎng),另一方面又要滿(mǎn)足DMZ對(duì)外提供服務(wù)的需要,因此,必須采用分別保護(hù)的策略,對(duì)上述兩個(gè)區(qū)域進(jìn)行保護(hù)。兩個(gè)區(qū)域要盡量獨(dú)立,即使DMZ受到外部攻擊,
內(nèi)部子網(wǎng)仍處于防火墻的保護(hù)之下。
[color="#000000"]本文介紹利用Linux的iptables工具來(lái)建立一個(gè)具有DMZ的防火墻。
[color="#000000"]一、軟硬件要求
[color="#000000"]充當(dāng)防火墻的機(jī)器是一臺(tái)支持iptables的Linux系統(tǒng),裝有三個(gè)網(wǎng)卡。
[color="#000000"]二、具體配置
[color="#000000"]步驟1:配置內(nèi)核
[color="#000000"]netfilter要求Linux內(nèi)核版本不低于2.3.5,在編譯新內(nèi)核時(shí),要求選擇和netfilter相關(guān)的項(xiàng)目,這些項(xiàng)目通常都是位于“Networking options”子項(xiàng)下。
[color="#000000"]步驟2:環(huán)境構(gòu)造
[color="#000000"]這里給出一個(gè)用于測(cè)試的例子,實(shí)際應(yīng)用可根據(jù)具體的情況進(jìn)行設(shè)置。
對(duì)
外提供服務(wù)的內(nèi)部主機(jī)構(gòu)成一個(gè);饏^(qū)(假設(shè)分配的網(wǎng)
段為192.168.1.0/24),防火墻的兩個(gè)網(wǎng)卡eth1、eth2分別通過(guò)hub1、hub2與;饏^(qū)、內(nèi)部通訊區(qū)相連,另一個(gè)網(wǎng)卡eth0通過(guò)
直連線(或hub)與路由器的網(wǎng)卡eth1相連,路由器的另一網(wǎng)卡eth0通過(guò)一個(gè)hub與外部通訊區(qū)相連。如圖所示。
2006-03-24 11:11:35
[color="#0000ff"]大
[color="#0000ff"]中
[color="#0000ff"]小
路由器增加以下設(shè)置:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.9.200.2
arp -i eth1 -Ds 192.168.1.1 eth1 pub
防火墻的設(shè)置為:
route add default gw 192.168.1.1
route add -host 192.168.1.1 gw 192.168.1.2
route add -net 192.169.1.0 netmask 255.255.255.0 gw 192.168.1.3 eth1
;饏^(qū)主機(jī)的網(wǎng)關(guān)設(shè)為防火墻的網(wǎng)卡eth1地址192.168.1.3。
外部主機(jī)的網(wǎng)關(guān)設(shè)為路由器的外網(wǎng)卡eth0地址10.0.0.1。
內(nèi)部主機(jī)的網(wǎng)關(guān)設(shè)為路由器的內(nèi)網(wǎng)卡eth2地址168.1.1.1。
步驟3:建立規(guī)則
在防火墻上創(chuàng)建如下腳本并運(yùn)行之。
#!/bin/sh
######## default firewall rules-deny all ########
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
###############################################
# Rules between EXTERNAL LAN and INTERNAL LAN #
###############################################
######## masquerade INTERNAL Address to xx.xx.xx.xx when going out ########
iptables -t nat -A POSTROUTING -s 168.1.1.0/24 -d 10.0.0.0/24 -o eth0 -j SNAT --to xx.xx.xx.xx
######## deny all from EXTERNAL LAN to INTERNAL LAN directly ########
iptables -t nat -A PREROUTING -s 10.0.0.0/24 -d 168.1.1.0/24 -i eth0 -j DROP
######################################
# Rules between DMZ and INTERNAL LAN #
######################################
######## allow INTERNAL LAN to DMZ ########
iptables -A FORWARD -p icmp -s 168.1.1.0/24 -d 192.168.1.0/24 -m limit --limit 1/s --limit-burst 10 -j ACCEPT
iptables -A FORWARD -s 168.1.1.0/24 -d 192.168.1.0/24 -i eth2 -j ACCEPT
######## forbid DMZ to INTERNAL LAN except following instance ########
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 168.1.1.0/24 ! --syn -i eth1 -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.1.0/24 --sport 20 -d 168.1.1.0/24 -i eth1 -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type 0 -s 192.168.1.0/24 -d 168.1.1.0/24 -m limit --limit 1/s --limit-burst 10 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.1.0/24 -d 168.1.1.0/24 --sport 53 -j ACCEPT
######################################
# Rules between EXTERNAL LAN and DMZ #
######################################
### allow EXTERNAL LAN to DMZ but deny all from EXTERNAL LAN to DMZ directly ###
iptables -t nat -A PREROUTING -s 10.0.0.0/24 -d 192.168.1.0/24 -i eth0 -j DROP
### REAL_XX is real address of XX server in DMZ ###
### MASQ_XX is the masquaded address of REAL_XX supplied to EXTERNAL LAN ###
######## allow DNS service ########
iptables -t nat -A PREROUTING -p udp -d MASQ_DNS -s 10.0.0.0/24 --dport 53 -i eth0 -j DNAT --to REAL_DNS
iptables -A FORWARD -p udp -s 10.0.0.0/24 -d REAL_DNS -i eth0 --dport 53 -j ACCEPT
iptables -A FORWARD -p udp -d 10.0.0.0/24 -s REAL_DNS -i eth1--sport 53 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -d MASQ_DNS -s 10.0.0.0/24 --dport 53 -i eth0 -j DNAT --to REAL_DNS
iptables -A FORWARD -p tcp -s 10.0.0.0/24 -d REAL_DNS -i eth0 --dport 53 -j ACCEPT
iptables -A FORWARD -p tcp -d 10.0.0.0/24 -s REAL_DNS -i eth1 --sport 53 ! --syn -j ACCEPT
######## allow HTTP service ########
iptables -t nat -A PREROUTING -p tcp --dport 80 -d MASQ_HTTP -s 10.0.0.0/24 -i eth0 -j DNAT --to REAL_HTTP
iptables -A FORWARD -p tcp -s 10.0.0.0/24 -d REAL_HTTP -i eth0 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -d 10.0.0.0/24 -s REAL_HTTP -i eth1 --sport 80 ! --syn -j ACCEPT
######## allow FTP service ########
iptables -t nat -A PREROUTING -p tcp --dport 21 -d MASQ_FTP -s 10.0.0.0/24 -i eth0 -j DNAT --to REAL_FTP
iptables -A FORWARD -p tcp -s 10.0.0.0/24 -d REAL_FTP -i eth0 --dport 21 -j ACCEPT
iptables -A FORWARD -p tcp -s REAL_FTP -d 10.0.0.0/24 -i eth1--sport 20 -j ACCEPT
iptables -A FORWARD -p tcp -d 10.0.0.0/24 -s REAL_FTP -i eth1--sport 21 ! --syn -j ACCEPT
......
### You can add other services in DMZ here such as TELNET、SMTP、 POP3 & IMAP etc. ###
......
######## deny DMZ to EXTERNAL LAN except to external smtp server ########
iptables -t nat -A POSTROUTING -p tcp --dport 25 -d 10.0.0.0/24 -s REAL_SMTP -o eth0 -j SNAT --to MASQ_SMTP
iptables -A FORWARD -p tcp -s REAL_SMTP -d 10.0.0.0/24 -i eth1 --dport 25 -j ACCEPT
iptables -A FORWARD -p tcp -d REAL_SMTP -s 10.0.0.0/24 -i eth0--sport 25 ! --syn -j ACCEPT
通過(guò)以上步驟,具有DMZ的防火墻達(dá)到了以下目標(biāo): 1.內(nèi)部通訊區(qū)可以無(wú)限制的訪問(wèn)外部通訊區(qū)以及DMZ,但訪問(wèn)外部通信區(qū)時(shí)防火墻進(jìn)行了源地址轉(zhuǎn)換。
2.外部通訊區(qū)可以通過(guò)對(duì)外公開(kāi)的地址訪問(wèn)DMZ的服務(wù)器,由防火墻完成對(duì)外地址到服務(wù)器實(shí)際地址的轉(zhuǎn)換。
3.外部通訊區(qū)不能訪問(wèn)內(nèi)部通訊區(qū)以及防火墻。
4.DMZ不可以訪問(wèn)內(nèi)部通訊區(qū)。
5.除外部通訊區(qū)郵件服務(wù)器外,DMZ不能訪問(wèn)外部通訊區(qū)
本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/24390/showart_331970.html |
|