正確理解防火牆策略的執行過程

很多初次接觸ISA的管理員,經常會發現自己的管理意圖沒有得到貫徹。自己明明禁止用戶使用QQ聊天,可你看這個老兄正在和多個MM聊得熱火朝天;早就禁止在上班時間訪問遊戲網站,可這個傢伙不正在和別人下棋嗎?最鬱悶的是就連簡單的禁止訪問百度搜索引擎都做不到,照樣有很多人用百度搜來搜去……不少深感智力受到侮辱的網管憤怒地發出了“ISA就是不靈”的吼聲。ISA真是不靈嗎?不是的,其實發生這些的主要原因是ISA管理員並沒有真正理解防火牆策略的執行過程。今天我們就來好好地分析一下ISA防火牆策略的執行過程,避免在以後的工作中犯類似的錯誤。
首先聲明,我們今天討論的是ISA2006標準版的策略執行過程,企業版比標準版要複雜一些,以後我們再討論。我們可以把ISA當作是信息高速公路上的一個檢查站,當有數據包要通過ISA時,ISA就會利用策略對數據包進行檢查,檢查通過就放行,否則就拒絕。ISA檢查數據包的順序是:
檢查是否符合網絡規則

檢查是否符合系統策略

檢查是否符合防火牆策略

 

網絡規則

一個數據包通過ISA時,ISA首先要檢查的就是網絡規則。網絡規則是ISA中非常重要而又很容易被忽視的一個因素。ISA檢查數據包時首先要考慮的就是這個數據包是從哪個網絡到哪個網絡,這兩個網絡間的網絡規則是什麼。也就是說ISA是基於網絡進行控制,而不是很多朋友認爲的基於主機進行控制。網絡規則只有兩種,路由或NAT。如果A網絡到B網絡的網絡規則爲路由,那麼數據包從A網絡到B網絡或者從B網絡到A網絡都有可能;如果A網絡到B網絡的網絡規則爲NAT,那麼數據包只有可能從AB,而不可能從BA。我們可以把兩個網絡比喻爲兩個城市,網絡規則就象是城市之間的高速公路,如果兩個網絡之間的網絡規則爲路由,那就象是兩個城市之間有一條雙向高速公路;如果網絡規則爲NAT,則就相當於兩個城市之間有一條單行高速公路。
明白了網絡規則的作用,有些問題就很好解釋了。有些ISA管理員問過這樣一個問題:“我在ISA的防火牆策略中已經允許外網訪問內網,爲什麼外網機器還是訪問不進來?”現在來看這個問題就很簡單了,因爲ISA認爲內網和外網之間的網絡規則是NAT,如下圖所示,NAT規則決定了只有可能從內網到外網而不可能從外網到內網,因此當外網訪問內網時,ISA只需檢查網絡規則就。因此如果你確實需要外網訪問內網,你就應該先把內網和外網之間的網絡規則改爲路由。
 
還有一個網絡規則的例子,有一個管理員用ISADMZ區的一個FTP服務器發佈到了外網和內網,結果外網用戶訪問正常,內網用戶卻無法訪問。爲什麼,因爲DMZ和外網是NAT關係,而DMZ和內網是路由關係。由於從DMZ到外網是NAT關係,外網用戶無法通過訪問規則直接訪問,所以通過發佈規則訪問是合理的;而內網和DMZ是路由關係,因此內網用戶就應該通過訪問規則而不是發佈規則來訪問。
綜上所述,網絡規則是ISA進行訪問控制時所要考慮的第一要務,只有從源網絡到目標網絡被網絡規則許可了,ISA纔會繼續檢查系統策略和防火牆策略;如果網絡規則不許可,ISA會直接拒絕訪問,根本不會再向下檢查系統策略和防火牆策略。大家寫訪問規則時一定要注意這點。
系統策略

如果一個數據包通過了網絡規則的檢查,ISA接下來就要看看它是否符合系統策略了。ISA2006標準版中預設了30條系統策略,系統策略應用於ISA本地主機,控制着從其他網絡到本地主機或者從本地主機到其他網絡的通訊,系統策略中啓用了一些諸如遠程管理,日誌,網絡診斷等功能。一般情況下,我們對系統策略只能允許或禁止,或對少數策略的某些屬性作一些修改。
以前曾經有朋友問我,爲什麼ISA安裝後防火牆策略中明明禁止了所有通訊,但ISA主機還是可以ping到其他計算機,是否ISA本機有某些特權呢?不是的,ISA能對其他網絡進行有限訪問完全是由系統策略決定的,只是由於系統策略沒有顯示出來,因此安裝完ISA後我們並沒有注意到它。
我們來看看系統策略到底有哪些內容,打開ISA服務器管理,右鍵點擊防火牆策略,如下圖所示,在查看中選擇“顯示系統策略規則”。

 
如下圖所示,我們看到了30條系統策略的內容。

 

編輯系統策略也可以用系統策略編輯器,系統策略編輯器爲管理員提供了更爲友好的管理界面,如下圖所示,右鍵點擊“防火牆策略”,選擇“編輯系統策略”。

 

如下圖所示,我們可以在系統策略編輯器中編輯系統策略。

 

系統策略的優先級比防火牆策略高,因此如果任務可以用系統策略完成,就不要用防火牆策略。例如有時候我們爲了測試需要,允許從內網ping ISA服務器,這種需求完全可以用系統策略完成,如下圖所示,我們只要把內部網絡添加到允許ping本地主機的集合中,就可以完成任務了。

 

防火牆策略

防火牆策略用來控制源網絡和目標網絡的通訊,是ISA管理員控制網絡訪問的常規武器,也是本文討論的重點所在。防火牆策略的優先級就是按照規則排列的順序,而不是按照拒絕優先原則。由於系統策略優先級也是按照序號排列,和防火牆策略優先級完全一樣,我們甚至可以把防火牆策略看成是從31開始編號的系統策略。
數據包通過網絡規則的檢查後,就要面臨系統策略和防火牆策略的考驗了。ISA將從第一條策略開始檢查,檢查數據包的訪問請求是否匹配策略,如果匹配,就按照策略的規定執行,結果無非是禁止或允許。如果不匹配,ISA就將按順序檢查下一條策略,從第一條系統策略一直檢查到最後一條防火牆策略。那有人要問了,如果把所有策略都檢查完了還不匹配怎麼辦?呵呵,這是不可能的,ISA自帶的最後一條防火牆策略內容是禁止所有網絡間的一切通訊,如下圖所示,這條防火牆策略可以與所有的網絡訪問相匹配,因此ISA實際上使用了隱式拒絕,也就是說如果某個訪問請求如果沒有被策略顯式允許,那肯定會被最後一條防火牆策略所拒絕。

 

看了上面的介紹,我們要注意兩點,一是策略順序,二是策略匹配。

 

A 策略順序

防火牆策略的排列順序決定了優先級,排在前面的策略優先執行,根據這個原則,我們要好好設計一下防火牆策略的順序。例如,我們寫了兩條防火牆策略,一條是允許內網用戶任意訪問,另外一條是拒絕內網用戶訪問聯衆遊戲網站。如果排列順序如下圖所示,允許策略排在拒絕策略之前,那就是個錯誤的決定。拒絕訪問聯衆的策略永遠不會被執行,因爲當用戶訪問聯衆時,訪問請求匹配第一條防火牆策略,用戶就被防火牆放行了,第二條策略根本沒有執行的機會。正確的做法是將拒絕策略放到允許策略之前!

 

B 策略匹配

策略匹配是ISA管理員關注的核心問題。前面我們一直在提如果網絡訪問和防火牆策略匹配,則按防火牆策略執行允許或禁止的操作。那麼,問題是,怎麼纔算和防火牆策略匹配呢?
只有把這個問題搞清楚了,才能寫出符合你設計初衷的策略。
ISA檢測到訪問請求時,ISA會檢查訪問請求能否匹配防火牆策略中的策略元素,策略元素的檢查順序爲 協議,從(源網絡),計劃時間,到(目標網絡),用戶,內容類型。如果和這些元素都能匹配,ISA就認爲訪問請求匹配防火牆策略。

從被檢查的策略元素來看, 到(目標網絡)元素最容易出問題。
目標網絡元素的問題容易出在哪兒呢?容易出現在DNS上,確切地說是出現在DNS的反向解析上!這個結論估計是很多管理員始料未及的,還是舉個例子加以說明吧,假設我們要禁止內網訪問百度,我見過很多管理員的處理方法都是這樣的,首先創建一個域名集,將[url]www.baidu.com[/url]包含進去,如下圖所示。

 

然後就寫出一條拒絕內網訪問百度的訪問規則,如下圖所示

 

我們在一臺內網計算機Denver上測試一下,Denver使用Web代理訪問百度,如下圖所示,錯誤信息表明ISA拒絕了Denver訪問百度的請求。這說明訪問請求和拒絕百度訪問的防火牆策略匹配成功,哈哈,看樣子大功告成了?且慢,再向下看。

 

我們在Denver上換用IP訪問,在IE中輸入202.108.22.5,如下圖所示,熟悉的百度界面已經出來了,哈哈,貌似嚴謹的訪問規則竟如此不堪一擊!這說明這次的訪問請求沒有和拒絕百度訪問的防火牆策略匹配成功,而是和第二條允許內網用戶任意訪問的防火牆策略匹配成功了。

 

看到這兒,有些朋友可能得出結論了,哦,原來用域名禁止訪問某個網站是不成立的。錯!如果202.108.22.5的反向解析結果爲[url]www.baidu.com[/url],那麼拒絕百度的防火牆策略就是成立的!
還是來認真分析一下原理吧,當客戶機用HTTP協議訪問目標網絡時,ISA判斷目標網絡的根據是HTTP主機頭,主機頭的內容顯然源自我們在瀏覽器中的輸入。當我們在瀏覽器中輸入[url]www.baidu.com[/url]時,ISA開始檢查訪問請求能否匹配第一條防火牆策略,也就是拒絕內網訪問百度的那條策略。ISA先檢查協議,從(源網絡),計劃時間三個元素,這三個元素都能和訪問請求匹配,然後ISA檢查到(目標網絡)元素,ISA根據主機頭內容判斷訪問請求中的目標網絡是[url]www.baidu.com[/url],而防火牆策略中的目標網絡元素也包含了[url]www.baidu.com[/url],因此ISA判斷訪問請求和到(目標網絡)元素也能匹配上。然後ISA檢查用戶和內容類型兩個元素也可以匹配,所以ISA判斷訪問請求和拒絕訪問百度的防火牆策略完全匹配,於是按照防火牆策略的要求拒絕了這次訪問請求。

當我們在瀏覽器中輸入202.108.22.5時,ISA是這麼檢查的。首先還是判斷 協議,從(源網絡),計劃時間三個元素匹配策略,然後檢查到(目標網絡)元素,ISA判斷訪問請求的目標是202.108.22.5,而防火牆策略的目標網絡是包含[url]www.baidu.com[/url]的域名集,這時ISA會對202.108.22.5進行DNS反向解析,如果解析的結果等於[url]www.baidu.com[/url]。,ISA就認爲訪問請求的目標網絡和策略的目標網絡也是匹配的。如果反向解析的結果不等於[url]www.baidu.com[/url](解析的結果確實不是百度的域名),ISA就認爲訪問請求的目標網絡和防火牆策略的目標網絡不匹配。這樣ISA就會停止匹配第一條拒絕訪問百度的防火牆策略,轉而匹配第二條允許內網任意訪問的防火牆策略,匹配結果是完全成功,因此ISA執行第二條防火牆策略規定的動作,允許了對202.108.22.5的訪問。

如果客戶機不是用HTTP協議訪問目標網絡,那麼匹配的過程又稍微有些不同。例如客戶機用FTP協議訪問[url]www.baidu.com[/url],那麼客戶機在發送訪問請求時不會把[url]www.baidu.com[/url]作爲目標網絡,而是先對[url]www.baidu.com[/url]進行域名解析,然後把解析出來的IP作爲目標網絡發送給ISAISA對訪問請求進行匹配時,如果被匹配的防火牆策略用域名描述目標網絡,ISA就會對訪問請求發來的IP進行反向解析,看解析出的域名能否和防火牆策略的目標網絡相匹配。根據這個結論,我們用IE訪問[url]www.baidu.com[/url]會被拒絕,因爲剛纔分析過了,此時客戶機將域名[url]www.baidu.com[/url]作爲訪問請求中的目標網絡發送給ISAISA認爲訪問請求和拒絕訪問百度的防火牆策略完全匹配,因此客戶機被拒絕訪問。但如果客戶機在命令行下輸入telnet [url]www.baidu.com[/url] 80,如下圖所示,直接連接百度的80端口,ISA會如何處理呢?

 

如下圖所示,ISA對訪問請求放行了,顯然這次的訪問請求沒有和拒絕訪問百度的策略匹配上,原因是什麼呢?

 

客戶機telnet百度80端口時,我在ISA上啓用了實時日誌,日誌記錄的結果如下圖所示。從日誌上我們很清楚地看到,客戶機先對[url]www.baidu.com[/url]進行了DNS解析,解析結果爲202.108.22.5,然後客戶機把202.108.22.5作爲訪問請求的目標網絡發送給ISAISA202.108.22.5進行反向解析,解析出的域名並不是[url]www.baidu.com[/url],因此ISA認爲訪問請求和第一條防火牆策略並不匹配。然後ISA將訪問請求和第二條策略進行匹配,匹配成功後正從我們在日誌中看到的那樣,訪問請求被第二條允許內網用戶任意訪問的策略放行了。

 

我們可以總結一下,客戶機使用HTTP協議訪問時,目標網絡取決於主機頭,而訪問者輸入的主機頭既可能是域名也有可能是IP(一般以域名居多);。客戶機使用其他協議訪問時,目標網絡一定是以IP進行描述!

現在我們考慮一下應該如果用ISA禁止用戶訪問某個目標網絡,那這個目標網絡應該如何描述,顯然只用域名描述是不嚴謹的,除非你確信DNS反向解析的結果對你有利(大部分情況下你會失望的)。如果保險一些,我們應該用域名+IP來描述目標網絡。以剛纔的限制百度爲例,用nslookkup查出[url]www.baidu.com[/url]的域名解析結果爲202.108.22.43202.108.22.5。創建一個計算機集將這兩個地址包含進去,如下圖所示。

 

然後就可以在拒絕訪問百度的策略中加入剛創建的計算機集,如下圖所示,這樣做效果如何大家可以自己試試看,肯定比只用域名要好得多。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章