防火墻對FTP的影響及故障排除分析
防火墻借由監(jiān)測所有的封包并找出不符規(guī)則的內(nèi)容,可以防范電腦蠕蟲或是木馬程序的快速蔓延。這篇文章主要介紹了淺談防火墻對FTP的影響及故障排除分析,需要的朋友可以參考下
具體介紹
FTP是常見的基于TCP的網(wǎng)絡服務,它使用了兩個TCP連接來建立邏輯通信信道,即控制連接和數(shù)據(jù)連接。當客戶端與服務器建立一個FTP會話時,使用TCP創(chuàng)建一個持久的控制連接以傳遞命令和應答。當發(fā)送文件和其它數(shù)據(jù)傳輸時,它們在獨立的TCP數(shù)據(jù)連接上進行傳遞,這個連接根據(jù)需要創(chuàng)建和拆除。
更為復雜的是,F(xiàn)TP標準指定了創(chuàng)建數(shù)據(jù)連接的兩種不同方法,即正常(主動)數(shù)據(jù)連接和被動數(shù)據(jù)連接。FTP的控制連接總是由客戶端首先發(fā)起的,主動數(shù)據(jù)連接是由服務器端發(fā)起的,被動數(shù)據(jù)連接是由客戶端發(fā)起的。
成功建立控制連接后,在進行主動連接時,客戶端發(fā)送PORT命令,其中內(nèi)嵌了地址和端口信息,以告知服務器進行連接,然后服務器打開默認端口20建立到客戶端已告知地址和端口的數(shù)據(jù)連接。在進行被動連接時,客戶機使用PASV命令告訴服務器等待客戶機建立數(shù)據(jù)連接,服務器響應,告訴客戶機為了數(shù)據(jù)傳輸它應該使用服務器上的什么端口(隨機打開)。這種工作機制帶來了一個嚴重的問題:在FTP的命令(PORT或PASV)或?qū)λ鼈兊幕卮鹬袀鬟fIP地址及端口號與網(wǎng)絡分層機制嚴重沖突,在FTP客戶端與服務器的通信信道之間的網(wǎng)關(guān)設備(防火墻或路由器)上啟用了NAT功能的情況下將出現(xiàn)連接性問題。
防火墻對于像FTP這樣的多端口連接的TCP應用,其影響是深遠的,在復雜的網(wǎng)絡環(huán)境中,更是由于設備、軟件的多樣性可能導致不可預知的問題。作為一名網(wǎng)絡管理員,深入了解防火墻和FTP的工作原理及其在NAT環(huán)境下防火墻對FTP的影響,對于選擇FTP服務軟件及安裝、部署、管理及維護FTP服務和實際工作中排除FTP應用故障是大有裨益的。本文就以一個在實際環(huán)境中比較常見的FTP部署和應用拓撲為例,來詳細解讀防火墻(啟用了NAT功能)對FTP的影響。如有不當之處,敬請指正。
一、網(wǎng)絡拓撲圖
windows_ftp_config_1
二、主動模式的連接分析
如本例中網(wǎng)絡拓撲所示,IP為192.168.1.1客戶端計算機打開一個可用的TCP端口1025,經(jīng)過其前端的防火墻進行NAT轉(zhuǎn)換成地址1.1.1.1和端口1025后建立到目標地址為2.2.2.2的21端口的連接,然后服務器前端的防火墻將此連接信息傳遞到服務器172.16.6.1的21端口,成功建立FTP控制連接。
服務器則經(jīng)由這個已經(jīng)建立的邏輯連接通道返回數(shù)據(jù)包,與客戶端進行交互。接著,客戶端發(fā)出PORT指令,在指令中嵌入了地址信息(IP:192.168.1.1,Port:1026),告知服務器用于數(shù)據(jù)連接,并打開端口1026,等待服務器連接。當承載PORT指令的數(shù)據(jù)包到達客戶機前端的防火墻時,由于NAT的緣故,在成功創(chuàng)建NAT表項,改寫數(shù)據(jù)包的IP和TCP端口信息后:
如果此時防火墻不能識別并檢查此連接是FTP應用,便不能對PORT指令中嵌入的地址和端口信息進行改寫,則將此數(shù)據(jù)包通過先前已建立的控制連接通道傳遞到服務器后,服務器則打開20端口,將建立到192.168.1.1的1026端口的數(shù)據(jù)連接。
顯然,此連接數(shù)據(jù)包要么被其前端的防火墻丟棄,要么在流入因特網(wǎng)后立刻被丟棄,永遠無法到達客戶端。在這種情況下,客戶端一直處在控制連接階段發(fā)送含有PORT指令的數(shù)據(jù)包,以便建立數(shù)據(jù)連接;而服務器則在打開了20端口后,一直嘗試建立到客戶端的數(shù)據(jù)連接,但始終收不到應答。
直接的結(jié)果就是:客戶端成功連接了FTP服務器,卻無法進行數(shù)據(jù)傳輸。這里可能還包含一個隱藏的安全威脅:如果恰巧192.168.1.1對于服務器主機來說是直接可達的,則此時服務器便將數(shù)據(jù)包發(fā)送到這臺計算機,在這兩臺主機之間產(chǎn)生莫名的數(shù)據(jù)流。其他可能更隱蔽、更不好的情況,筆者不再做假設論述了。
如果此時防火墻能支持對FTP應用進行審查和跟蹤,即能識別PORT指令中的內(nèi)容,就將其中嵌入的地址信息改寫成(IP:1.1.1.1,PORT:1026)并動態(tài)打開1026端口,并建立新的NAT轉(zhuǎn)換表項,等待連接,則當服務器收到PORT指令后,打開20端口,建立到1.1.1.1上1026端口的連接,成功交互后,便能進行數(shù)據(jù)傳輸了。
三、被動模式的連接分析
控制連接建立后,客戶端發(fā)出的PASV指令到達服務器,服務器則隨機打開一個可用的TCP端口,并將地址和端口信息(IP:172.16.6.1,Port:50000)返回給客戶端,告知客戶端利用這些信息進行數(shù)據(jù)連接。當包含服務器地址信息的這個數(shù)據(jù)包到達其前端的防火墻時:
如果防火墻不能識別并檢查此數(shù)據(jù)包的應用層數(shù)據(jù),無法判定它是FTP的PASV指令的返回包,并對其中嵌入的地址信息進行重寫,則當此數(shù)據(jù)包返回到客戶端時,客戶端將隨機打開端口3000,以目的地址172.16.6.1、端口50000來進行數(shù)據(jù)連接,同理,此連接數(shù)據(jù)包永遠不能到達服務器端。
這種情況下,客戶端將一直嘗試建立數(shù)據(jù)連接,卻總是不能收到應答。這里可能包含的隱藏安全威脅,如前所述。
如果防火墻能對FTP應用進行審查和跟蹤,并將返回包中嵌入的服務器地址信息進行重寫,即轉(zhuǎn)換成(IP:2.2.2.2,Port:50000),然后建立新的NAT表項,動態(tài)打開50000端口,等待連接。則此返回包到達客戶端時,客戶端將隨機打開端口3000,以目的地址2.2.2.2、端口50000來新建連接,便能成功建立數(shù)據(jù)連接。
根據(jù)以上分析,為成功進行FTP數(shù)據(jù)傳輸,主動模式下要求客戶機前端的防火墻在啟用NAT后能對FTP應用進行審查和跟蹤,識別并改寫PORT指令中的客戶端地址信息;被動模式下則要求服務器前端的防火墻能改寫服務器響應PASV指令后返回數(shù)據(jù)包中的服務器地址信息。
當然,為保險起見,為保證FTP應用的正常使用,建議兩端的防火墻都需要支持對FTP進行識別和內(nèi)容審查。
四、網(wǎng)絡防火墻與FTP
大多數(shù)網(wǎng)管設置防火墻的默認訪問控制策略是:允許從內(nèi)部到外部的一切流量,禁止從外部到內(nèi)部的一切流量。
就FTP應用來說,為了簡化防火墻策略的配置又兼顧安全策略要求,客戶機選擇被動模式進行數(shù)據(jù)連接較好,不需要對其前端的防火墻設置特別的訪問控制策略,但要求服務器前端的防火墻能動態(tài)打開數(shù)據(jù)連接所需的隨機端口;服務器端則選擇主動連接較好,為允許客戶端的訪問,其前端防火墻的訪問控制策略僅需要顯式對外開放21端口即可,但需要客戶機前端的防火墻能動態(tài)打開數(shù)據(jù)連接所需的端口。
從方便使用的角度考慮,既然提供FTP服務,就要配置好服務器前端的防火墻,使其訪問控制策略能支持兩種模式下的FTP服務正常工作。
如果客戶機前端的NAT設備為路由器,不是防火墻,并不能審查和跟蹤FTP應用,從前面的分析可以推斷出,主動模式下肯定存在連接性問題,需要以被動方式建立數(shù)據(jù)連接才能成功使用FTP服務。
如果FTP控制端口非默認,而是定制的TCP端口(比如2121),在這種情況下,服務器前端的防火墻通過配置命令顯式指示FTP的控制端口,便能進行審查和跟蹤。但客戶機前端的防火墻即使其能識別默認端口下的FTP應用,此時也會把控制端口非21的FTP服務當作一般的TCP應用對待,這種情形下,便不能改寫主動模式下的客戶端地址端口信息,導致服務器在建立數(shù)據(jù)連接時失敗,但客戶端使用被動連接模式能正常工作。
綜上所述,客戶端使用被動方式連接FTP服務器是最恰當?shù)?,能最大限度地降低連接性問題。同時降低了對客戶機前端防火墻備的要求,不需要像主動方式那樣動態(tài)開放允許輸入的隨機端口,把可能的安全威脅推給了服務器端。這或許是微軟的IE瀏覽器(資源管理器)默認設置使用被動方式的原因。如圖表2所示。另外需要注意的,在Windows命令行下,F(xiàn)TP默認是使用主動方式進行數(shù)據(jù)連接的。
windows_ftp_config_2
五、主機防火墻與FTP
如果將FTP服務器架設在Windows Server 2008上,由于它內(nèi)置Windows防火墻,而且默認已經(jīng)啟用,所以客戶端建立到這臺FTP服務器的控制連接便會被封鎖,此時需要在防火墻上開放對TCP 21端口的傳入連接。
被動模式下,由于服務器通過控制信道將用來監(jiān)聽客戶端請求的端口號是隨機產(chǎn)生的,此時需要在防火墻上開放的傳入連接的端口也是隨機的。由于Windows防火墻不能像網(wǎng)絡防火墻那樣根據(jù)需要動態(tài)打開和關(guān)閉FTP服務要求的隨機端口,所以需要靜態(tài)開放全部可能的隨機端口。
Windows Server 2008默認的動態(tài)端口范圍是49152-65535,而Windows防火墻的例外開放規(guī)則只能針對單一端口來開放,要開放49152-65535這個范圍內(nèi)的一萬多個端口,非常不切實際,更是會給運行FTP服務器的主機帶來嚴重的安全威脅。
所幸的是,基于IIS7.0建立的FTP服務器允許將端口號固定在自行指定的一個范圍中,如50000-50005,此時便只需要開放這一小段范圍的端口即可,大大提升了安全性和配置Windows防火墻的效率。如果服務器上部署的是第三方防火墻,則需要慎重考慮如何設置使之能安全保障FTP服務的正常運行。
補充閱讀:防火墻主要使用技巧
一、所有的防火墻文件規(guī)則必須更改。
盡管這種方法聽起來很容易,但是由于防火墻沒有內(nèi)置的變動管理流程,因此文件更改對于許多企業(yè)來說都不是最佳的實踐方法。如果防火墻管理員因為突發(fā)情況或者一些其他形式的業(yè)務中斷做出更改,那么他撞到槍口上的可能性就會比較大。但是如果這種更改抵消了之前的協(xié)議更改,會導致宕機嗎?這是一個相當高發(fā)的狀況。
防火墻管理產(chǎn)品的中央控制臺能全面可視所有的防火墻規(guī)則基礎,因此團隊的所有成員都必須達成共識,觀察誰進行了何種更改。這樣就能及時發(fā)現(xiàn)并修理故障,讓整個協(xié)議管理更加簡單和高效。
二、以最小的權(quán)限安裝所有的訪問規(guī)則。
另一個常見的安全問題是權(quán)限過度的規(guī)則設置。防火墻規(guī)則是由三個域構(gòu)成的:即源(IP地址),目的地(網(wǎng)絡/子網(wǎng)絡)和服務(應用軟件或者其他目的地)。為了確保每個用戶都有足夠的端口來訪問他們所需的系統(tǒng),常用方法是在一個或者更多域內(nèi)指定打來那個的目標對象。當你出于業(yè)務持續(xù)性的需要允許大范圍的IP地址來訪問大型企業(yè)的網(wǎng)絡,這些規(guī)則就會變得權(quán)限過度釋放,因此就會增加不安全因素。服務域的規(guī)則是開放65535個TCP端口的ANY。防火墻管理員真的就意味著為黑客開放了65535個攻擊矢量?
三、根據(jù)法規(guī)協(xié)議和更改需求來校驗每項防火墻的更改。
在防火墻操作中,日常工作都是以尋找問題,修正問題和安裝新系統(tǒng)為中心的。在安裝最新防火墻規(guī)則來解決問題,應用新產(chǎn)品和業(yè)務部門的過程中,我們經(jīng)常會遺忘防火墻也是企業(yè)安全協(xié)議的物理執(zhí)行者。每項規(guī)則都應該重新審核來確保它能符合安全協(xié)議和任何法規(guī)協(xié)議的內(nèi)容和精神,而不僅是一篇法律條文。
四、當服務過期后從防火墻規(guī)則中刪除無用的規(guī)則。
規(guī)則膨脹是防火墻經(jīng)常會出現(xiàn)的安全問題,因為多數(shù)運作團隊都沒有刪除規(guī)則的流程。業(yè)務部門擅長讓你知道他們了解這些新規(guī)則,卻從來不會讓防火墻團隊知道他們不再使用某些服務了。了解退役的服務器和網(wǎng)絡以及應用軟件更新周期對于達成規(guī)則共識是個好的開始。運行無用規(guī)則的報表是另外一步。黑客喜歡從來不刪除規(guī)則的防火墻團隊。
防火墻對FTP的影響及故障排除分析相關(guān)文章: