http://www.microsoft.com/china/community/Column/72.mspx
--------------------------------------------------------------
這次筆者將介紹如何在企業中利用ISA Server部署一個DMZ區域。一般來講利用ISA Server可以實現三宿主的DMZ區域,也可以實現背靠背的DMZ區域。本文討論的焦點是三宿主的DMZ區域。
首先,我們談談為何要部署DMZ區域,也就是說一旦部署了DMZ,他對你的網絡產生什么樣的積極作用。有些企業可能從ISP申請了一個地址段的IP,但是往往出現這些IP不能有效的利用,構建了DMZ區域后,這些IP可以靈活的分配到DMZ上的主機。此外,從DMZ區域到Internet流動的數據包是被路由的,而不是被NAT,從ISA處理數據包的效率角度講,前者要優于后者。
現在,我們來看看要部署DMZ需要哪些條件
- ISA需要有至少3個網絡接口卡
- ISA Server是做為防火墻模式或者集成模式安裝的,可以是單機模式也可以是陣列模式
- 在IP PACKET Filter的全局設置中,必須啟用Enable IP Routing
- ISP分配了一個地址段的IP給你的公司
- 配置在ISA外部接口的IP的子網掩碼不能與DMZ區域的子網掩碼相同
在這篇文章里,筆者以一個模擬的真實環境來描述DMZ,試驗的拓撲如圖1所示。

(圖1)
我們假設,你的公司從ISP購買了一個C類的IP段,172.16.1.0/24。我們將172.16.1.33分配給ISA的外部接口。把172.16.1.64/26從172.16.1.0/24劃分出來分配給DMZ區域。注意,DMZ區域和ISA外部接口連接的區域是不同的邏輯網絡。一個常見的錯誤是把DMZ區域和ISA外部接口規劃在一個IP邏輯網絡里。記住,從DMZ和外部網絡的通訊角度講,ISA扮演一個有過濾功能的路由器,而不是網橋,這也是為什么必需要啟用Enable IP Routing的原因。
ISA Server的網絡接口配置如下
Internal NIC
IP:192.168.100.20/24
Defaul Gateway(DG):None
DNS:192.168.100.100
DMZ NIC
IP:192.168.100.65/26
DG:None
DNS:None
External NIC
IP:172.16.1.33/24
DG:172.16.254
DNS:10.10.10.10
DMZ上的主機的網絡接口配置
IP:172.16.1.66-126/26
DG:172.16.1.65
DNS:None
內部網絡(Internal)上的計算機
IP:192.168.100.x/24
DG:192.168.100.20
DNS:192.168.100.100
請特別注意以上的配置。對于ISA來講,缺省網關一定要配置在外部接口,原因很簡單,一個去往未知IP的數據包,目標一定位于Internet上,如果這個IP是在你的公司內部網絡,那么你的網絡中的路由設置肯定存在問題。既然是去往Internet上的,ISA必須可以將這個數據包從外部接口上送出去,所以缺省網關一定要配置在外部接口上。如果你的其他接口也配置的缺省網關,那么就一定會出現問題,因為默認情況下,各個網絡接口上配置的缺省網關的Metric都是1,所以去往未知IP的數據包,就會從所有配置了缺省網關的網卡送出,也就是負載均衡,但是另一個不應該配置缺省網關的網卡不能將數據包成功的送到目的IP,所以導致丟包,甚至無法通訊。內部接口的DNS指向公司內部的DNS服務器。外部接口的DNS指向一個可以解析Internet上所有域名的DNS服務器,這一點很重要,別忘了ISA要代理Web Proxy Client和FWC進行DNS解析。DMZ接口上,我們并沒有配置DNS,當然你也可以配置。對于DMZ區域上的主機,我們把網關指向ISA的DMZ網絡接口,因為DMZ區域上的主機需要與Internet通訊,確切的講是被Internet用戶訪問,而ISA是Internet出口的持有者。DNS指向我們也沒有在DMZ上的主機配置,因為DMZ應該是一個無人區,也就是說DMZ上應該是一個服務器農場,而不是被用戶使用,瀏覽Internet的計算機,所以它沒有必要配置DNS,除非某臺服務器運行的服務必須依賴與DNS。內部網絡的主機設置不是此文討論的重點,所以在這里不展開討論。
另外,如果你對路由非常了解,從上邊給出的ISA的網絡接口配置看,你馬上會發現一個問題。ISA外網接口連接172.16.1.0/24網段、而DMZ區域在172.16.1.64/26網段。我們假設這兩個網段的物理介質是以太網標準,當172.16.1.64/26網段中的某個主機發起和172.16.1.0/24網段中某臺主機通訊時,不妨假設172.16.1.69/26和172.16.1.254/24通訊,對于172.16.1.69/26,它認為172.16.1.254/24和自己不同屬一個邏輯網段,所以它知道要把去往172.16.1.254/24的數據包發送給自己的網關172.16.1.65/26,由于172.16.1.69/26和172.16.1.65/26在一個廣播域,所以ARP解析不會出現問題。但是反過來,當172.16.1.254/24要路由或者始發一個數據包到172.16.1.69/26時,問題就出現了。對于172.16.1.254/24來講,它認為172.16.1.69和自己在一個邏輯網段,所以這個數據包應該是直接發送到172.16.1.69/26,因此它就會ARP解析172.16.1.69/26的MAC地址,然而它們并不在同一個廣播域,所以這個ARP解析得不到答案,因此這個數據包就無法發送,然而,如果172.16.1.254/24可以成功的把去往172.16.1.69/26的數據包發送給172.16.1.33/24,也就是ISA Server,則這個數據包就可以被最終送往172.16.1.69/26。要解決這個問題,我們應該從兩個方面出發。如果ISA Server連接ISP的鏈路層協議是通過廣播技術尋址的,則解決的方法有3種,一是,與你的ISP聯系,使得和ISA相連的路由器中有一條明確的到172.16.1.64/26網絡下一跳為172.16.1.33/24的路由;二是,在ISA上實施一種對于鏈路層尋址的欺騙手段,例如,以太網的鏈路層尋址是通過ARP協議,所以你的ISA計算機上必須可以實現Proxy ARP功能,使得ISA計算機可以以自己外網接口的MAC地址回應對172.16.1.64/26網絡中主機的ARP查詢;三是,把172.16.1.0/24和172.16.1.64/26網絡規劃到一個廣播域之中,如果采用這種方法,請注意ISA只能做“半過濾”來保護DMZ區域,但是這種保護也是有效的。換句淺顯易懂的話說,從外網到DMZ區域的數據包是直接發送的,但是從DMZ區域到外網的數據包是經由ISA Server送出到外網的。如果,ISA Server連接ISP的鏈路層協議是點對點的,那么你不用做任何事情,因為只要是去往172.16.1.x的數據包,不論子網掩碼是24位還是26位還是27位,數據包都會正確無誤的發送到你的ISA Server的外網接口。在筆者的測試環境中,ISA和ISP的路由器之間的鏈路層協議是以太網,筆者對這個路由器有管理權力,所以采用了在路由器上添加路由的方法解決上述問題。
請在你安裝ISA Server之前,將這些配置設置好。一旦安裝好ISA Server,在ISA計算機上添加或者刪除網卡可能會引起意想不到的錯誤。此外,最好在安裝好ISA Server后,不要修改IP的配置,如果你不得不這樣做,請遵循以下步驟:
1, 在命令行中輸入net stop mspfltex
2, 在命令行中輸入net stop gksvc
3, 在命令行中輸入net stop IPNAT
4, 修改相應網卡的IP設置
5, 在命令行中輸入net start mspfltex
6, 在命令行中輸入net start IPNAT
7, 在命令行中輸入net start isactrl
8, 在命令行中輸入net start “Microsoft Web Proxy”
9, 在命令行中輸入net start “Microsoft Firewall”
10,在命令行中輸入net start “Microsoft Scheduled Cache Content Download”
為了驗證網絡層的連通性,我們通常會使用Ping工具。Ping工具實際上是ICMP協議的一種應用實例。為了實現目的,你需要對ICMP協議有一些了解。當一臺主機Ping一個遠端計算機時,會以ICMP協議 類型8 代碼0(也就是通常所說的ICMP Ping Query或者是ICMP Ping Request)封裝一個數據包發送出去,當遠端計算機收到這個數據包后,會以ICMP 協議類型0代碼0封裝(ICMP Ping Reply)回應的數據包發送給源端。為了使DMZ上的主機可以Ping通Internet上的主機,你需要允許DMZ主機發送的ICMP Ping Query能夠被ISA Server發送到Internet上,反過來,要允許ICMP Ping Reply進入到DMZ區域。這需要你在IP PACKET FILTER中建立2個封包過濾,具體內容如圖2-圖9。
完成之后,等待一會兒以便新建的封包過濾生效,也可以重新啟動一下Firewall Service服務。之后驗證DMZ的主機是否可以Ping通Internet上的主機(也就是我們模擬的10.10.10.10那臺計算機)。沒有問題,DMZ和Internet的網絡層確實具有連通性,但是反過來10.10.10.10卻無法Ping通DMZ上的主機,也許這恰巧是你的愿望。如果你希望Internet的主機可以Ping通DMZ的主機,也很簡單,只要把剛才建立的2個封包過濾的Direction 設置為Both即可,原理不再冗述。講到這里,如果你希望Internet上的計算機可以Ping通你的ISA Server的外部接口,就會變得極其簡單,筆者也就不必浪費筆墨。值得注意的是你不需要添加2個封包過濾,而是1個,如果你注意到IP PACKET FILTER中,已經有默認的名為ICMP outbound的封包過濾就不難理解,這個封包過濾允許ICMP 所有類型和代碼的數據包從ISA的外部接口送出,也就是說你只需為進入的ICMP Ping Query設置一個允許的封包過濾即可。如果你想了解ICMP協議的更多細節,可以參考TechNet CD或者微軟幫助站點中的Q170292文檔。
在驗證了DMZ區域和Internet的網絡層連通性后,我們要立刻切入正題:實現對DMZ區域的應用。我們的目的是要使得DMZ區域的各種服務能夠被Internet上的用戶訪問。你可以將Web服務、FTP服務、郵件服務等等部署在DMZ區域,從而提供Internet用戶的訪問。筆者舉3個典型的例子來說明ISA如何發布DMZ區域的服務器。
發布DMZ區域的Web服務
1. 首先,設置好DMZ區域的Web 服務器,默認情況下它應該在80端口監聽Web請求,如圖10。設置完成后,請利用netstat 工具查看Web服務器是否在0.0.0.0上監聽80端口(筆者假設你沒有禁用SocketPooling)
2. 在ISA Server上利用IP PACKET FILTER將Web服務發布。其實說發布有些過于牽強,ISA實際上是一個具有過濾功能的路由器,所以我們只是允許來自Internet用戶的Web請求可以進入到DMZ上的Web服務器。設置的內容如圖11-圖14所示。
3. 在Internet上的計算機驗證是否可以正確訪問位于DMZ區域的Web服務器。可以看到我們可以正確的訪問Web頁面,正如圖15顯示的那樣。在驗證之前,你應該等待一會兒以使剛剛建立的封包過濾生效,或者重新啟動Firewall Service服務。
完成了,上邊的設置后,不僅Internet上的用戶可以訪問這臺Web服務器,ISA Server連接的內部網絡中的用戶也可以訪問,因為我們在圖14中的Remote Computer中選擇的是All Remote Computers。
發布DMZ區域的FTP服務
由于FTP有兩種工作模式,PORT和PASV模式,具體區別詳見本刊雜志2002年第九期《淺析FTP工作原理》。
發布PORT模式的FTP的步驟如下
1,設置好DMZ區域的FTP服務器,使其在21端口上監聽。如圖16。當然你也可以使用其他端口,只不過要在配置IP PACKET FILTER時要做相應的調整。
2,不論哪種模式的FTP,都需要允許遠端用戶連接FTP服務器21端口的進入請求,所以需要為此建立一個封包過濾,具體設置如圖17-圖20。
3,為FTP的數據通道的建立設置一個封包過濾。由于PORT模式的數據通道的建立請求是由FTP服務器主動發起的,所以封包過濾的direction 應該是Outbound而不是Inbound。具體的設置如圖21-圖22。
發布PASV模式的FTP的步驟如下
1,設置FTP服務器在21端口監聽,如上邊所述
2,由于PASV模式的所有連接都是有FTP客戶端發起的,并且使用的端口并不是固定的,因此只需要一個“非安全”的封包過濾即可完成PASV模式的FTP服務器發布。如圖23-圖26。
完成FTP的發布后,我們在Internet上的FTP客戶端驗證是否可以正確的以PORT和PASV模式連接到位于DMZ的FTP服務器,可以看到,如圖27和圖28,連接成功。在發布PASV模式的FTP服務器時,我們設置了一個安全性較差的封包過濾,但是這也是發布位于DMZ區域的PASV模式FTP的無奈之舉。因為我們知道FTP的數據通道使用的端口是動態的,而且動態的范圍我們不易控制,特別是使用微軟IIS中提供的FTP服務,我們根本無法控制。不過你可以選擇另一款FTP服務器端軟件:ServU。這個服務器端軟件可以控制PASV模式建立數據通道時使用的端口范圍,通過設置這個端口范圍我們可以控制本地FTP數據通道使用的端口,但是相應的,在IP PACKET FILTER中的設置也會麻煩許多,你要為這個端口范圍中包含的所有端口都設置一個進入的封包過濾。如果你對安全性很重視,這個一勞永逸但是絕對麻煩的工作還是有必要的。筆者認為,將FTP服務器部署在DMZ區域也許并不是一個明智之舉,除非你可以承受這臺FTP服務器可以受到攻擊的事實,或者你放棄使用PASV模式的FTP。然而,將FTP服務器部署在內部網絡,可以在保證安全性的前提下(甚至是加強安全性)減輕許多工作,因為動態端口的問題你不必勞神,FTP Application Filter和MS Proxy Protocol可以很好的為你解決,有關在內部網絡部署FTP服務器的問題請參考《使用ISA Server發布非標準端口的FTP服務器》以及《用ISA Server 2000發布內部網絡的IIS FTP 服務器》。
此外,如果你決定為在DMZ區域部署的FTP設置那個“非安全”封包過濾,筆者有必要做一些安全警告:你的這臺FTP服務器完全暴露給Internet上的所有用戶,任何Internet用戶可以連接這臺服務器的任意端口。ISA Server唯一可以做的是利用IP PACKET FILTER中的全局配置(Instruction Detection )為這臺FTP服務器做一些保護。在這種情況下,你可以在FTP服務器上,安裝一款單機版的防火墻軟件來加強對這臺服務器的保護,這種保護是確實有效的,但是相應的也會增加成本。筆者推薦以下幾款單機版防火墻軟件:Norton Internet Security、BlackICE、ZoneAlarm、天網防火墻。
下邊,筆者介紹一個很有意思的發布DMZ區域的Mail Relay Server的案例。在很多企業中,郵件服務是非常重要的,所以要有一種可行的措施有效的保護企業內部的郵件服務器不被攻擊。如果這個郵件服務器必須被漫游的用戶使用,那么這臺郵件服務器就必須可以通過Internet被訪問,這樣就面臨兩種選擇,一是把郵件服務器部署在內部網絡,然后通過ISA發布出去;另一種是把郵件服務器部署在DMZ區域利用IP PACKET FILTER發布。我們可以綜合一下以上兩種方案的安全和性能的平衡點,把郵件服務器部署在內部網絡,在DMZ區域部署一臺郵件轉發服務器,通過ISA只發布位于DMZ區域的郵件轉發服務器,這樣不僅可以有效的保護郵件系統的真實宿主不被攻擊,因為你發布的只是一個郵件轉發服務器,同時也能夠利用郵件轉發服務器和ISA的SMTP Filter實施分級的郵件過濾。
完成這個發布工作我們需要做以下幾件事情
- 在企業內部部署Exchange Server 2000(本文不討論)
- 在DMZ區域部署郵件轉發服務器
- 發布內部網絡的郵件服務器給DMZ區域的郵件轉發服務器
- 利用IP PACKET Filter發布郵件轉發服務器