淺談防火墻對FTP的影響及故障排除分析
FTP是常見的基于TCP的網絡服務,它使用了兩個TCP連接來建立邏輯通信信道,即控制連接和數據連接。當客戶端與服務器建立一個FTP會話時,使用TCP創建一個持久的控制連接以傳遞命令和應答。當發送文件和其它數據傳輸時,它們在獨立的TCP數據連接上進行傳遞,這個連接根據需要創建和拆除。
更為復雜的是,FTP標準指定了創建數據連接的兩種不同方法,即正常(主動)數據連接和被動數據連接。FTP的控制連接總是由客戶端首先發起的,主動數據連接是由服務器端發起的,被動數據連接是由客戶端發起的。
成功建立控制連接后,在進行主動連接時,客戶端發送PORT命令,其中內嵌了地址和端口信息,以告知服務器進行連接,然后服務器打開默認端口20建立到客戶端已告知地址和端口的數據連接。在進行被動連接時,客戶機使用PASV命令告訴服務器等待客戶機建立數據連接,服務器響應,告訴客戶機為了數據傳輸它應該使用服務器上的什么端口(隨機打開)。這種工作機制帶來了一個嚴重的問題:在FTP的命令(PORT或PASV)或對它們的回答中傳遞IP地址及端口號與網絡分層機制嚴重沖突,在FTP客戶端與服務器的通信信道之間的網關設備(防火墻或路由器)上啟用了NAT功能的情況下將出現連接性問題。
防火墻對于像FTP這樣的多端口連接的TCP應用,其影響是深遠的,在復雜的網絡環境中,更是由于設備、軟件的多樣性可能導致不可預知的問題。作為一名網絡管理員,深入了解防火墻和FTP的工作原理及其在NAT環境下防火墻對FTP的影響,對于選擇FTP服務軟件及安裝、部署、管理及維護FTP服務和實際工作中排除FTP應用故障是大有裨益的。本文就以一個在實際環境中比較常見的FTP部署和應用拓撲為例,來詳細解讀防火墻(啟用了NAT功能)對FTP的影響。如有不當之處,敬請指正。
一、網絡拓撲圖
二、主動模式的連接分析
如本例中網絡拓撲所示,IP為192.168.1.1客戶端計算機打開一個可用的TCP端口1025,經過其前端的防火墻進行NAT轉換成地址1.1.1.1和端口1025后建立到目標地址為2.2.2.2的21端口的連接,然后服務器前端的防火墻將此連接信息傳遞到服務器172.16.6.1的21端口,成功建立FTP控制連接。
服務器則經由這個已經建立的邏輯連接通道返回數據包,與客戶端進行交互。接著,客戶端發出PORT指令,在指令中嵌入了地址信息(IP:192.168.1.1,Port:1026),告知服務器用于數據連接,并打開端口1026,等待服務器連接。當承載PORT指令的數據包到達客戶機前端的防火墻時,由于NAT的緣故,在成功創建NAT表項,改寫數據包的IP和TCP端口信息后:
如果此時防火墻不能識別并檢查此連接是FTP應用,便不能對PORT指令中嵌入的地址和端口信息進行改寫,則將此數據包通過先前已建立的控制連接通道傳遞到服務器后,服務器則打開20端口,將建立到192.168.1.1的1026端口的數據連接。
顯然,此連接數據包要么被其前端的防火墻丟棄,要么在流入因特網后立刻被丟棄,永遠無法到達客戶端。在這種情況下,客戶端一直處在控制連接階段發送含有PORT指令的數據包,以便建立數據連接;而服務器則在打開了20端口后,一直嘗試建立到客戶端的數據連接,但始終收不到應答。
直接的結果就是:客戶端成功連接了FTP服務器,卻無法進行數據傳輸。這里可能還包含一個隱藏的安全威脅:如果恰巧192.168.1.1對于服務器主機來說是直接可達的,則此時服務器便將數據包發送到這臺計算機,在這兩臺主機之間產生莫名的數據流。其他可能更隱蔽、更不好的情況,筆者不再做假設論述了。
如果此時防火墻能支持對FTP應用進行審查和跟蹤,即能識別PORT指令中的內容,就將其中嵌入的地址信息改寫成(IP:1.1.1.1,PORT:1026)并動態打開1026端口,并建立新的NAT轉換表項,等待連接,則當服務器收到PORT指令后,打開20端口,建立到1.1.1.1上1026端口的連接,成功交互后,便能進行數據傳輸了。
三、被動模式的連接分析
控制連接建立后,客戶端發出的PASV指令到達服務器,服務器則隨機打開一個可用的TCP端口,并將地址和端口信息(IP:172.16.6.1,Port:50000)返回給客戶端,告知客戶端利用這些信息進行數據連接。當包含服務器地址信息的這個數據包到達其前端的防火墻時:
如果防火墻不能識別并檢查此數據包的應用層數據,無法判定它是FTP的PASV指令的返回包,并對其中嵌入的地址信息進行重寫,則當此數據包返回到客戶端時,客戶端將隨機打開端口3000,以目的地址172.16.6.1、端口50000來進行數據連接,同理,此連接數據包永遠不能到達服務器端。
這種情況下,客戶端將一直嘗試建立數據連接,卻總是不能收到應答。這里可能包含的隱藏安全威脅,如前所述。
如果防火墻能對FTP應用進行審查和跟蹤,并將返回包中嵌入的服務器地址信息進行重寫,即轉換成(IP:2.2.2.2,Port:50000),然后建立新的NAT表項,動態打開50000端口,等待連接。則此返回包到達客戶端時,客戶端將隨機打開端口3000,以目的地址2.2.2.2、端口50000來新建連接,便能成功建立數據連接。
根據以上分析,為成功進行FTP數據傳輸,主動模式下要求客戶機前端的防火墻在啟用NAT后能對FTP應用進行審查和跟蹤,識別并改寫PORT指令中的客戶端地址信息;被動模式下則要求服務器前端的防火墻能改寫服務器響應PASV指令后返回數據包中的服務器地址信息。
當然,為保險起見,為保證FTP應用的正常使用,建議兩端的防火墻都需要支持對FTP進行識別和內容審查。
四、網絡防火墻與FTP
大多數網管設置防火墻的默認訪問控制策略是:允許從內部到外部的一切流量,禁止從外部到內部的一切流量。
就FTP應用來說,為了簡化防火墻策略的配置又兼顧安全策略要求,客戶機選擇被動模式進行數據連接較好,不需要對其前端的防火墻設置特別的訪問控制策略,但要求服務器前端的防火墻能動態打開數據連接所需的隨機端口;服務器端則選擇主動連接較好,為允許客戶端的訪問,其前端防火墻的訪問控制策略僅需要顯式對外開放21端口即可,但需要客戶機前端的防火墻能動態打開數據連接所需的端口。
從方便使用的角度考慮,既然提供FTP服務,就要配置好服務器前端的防火墻,使其訪問控制策略能支持兩種模式下的FTP服務正常工作。
如果客戶機前端的NAT設備為路由器,不是防火墻,并不能審查和跟蹤FTP應用,從前面的分析可以推斷出,主動模式下肯定存在連接性問題,需要以被動方式建立數據連接才能成功使用FTP服務。
如果FTP控制端口非默認,而是定制的TCP端口(比如2121),在這種情況下,服務器前端的防火墻通過配置命令顯式指示FTP的控制端口,便能進行審查和跟蹤。但客戶機前端的防火墻即使其能識別默認端口下的FTP應用,此時也會把控制端口非21的FTP服務當作一般的TCP應用對待,這種情形下,便不能改寫主動模式下的客戶端地址端口信息,導致服務器在建立數據連接時失敗,但客戶端使用被動連接模式能正常工作。
綜上所述,客戶端使用被動方式連接FTP服務器是最恰當的,能最大限度地降低連接性問題。同時降低了對客戶機前端防火墻備的要求,不需要像主動方式那樣動態開放允許輸入的隨機端口,把可能的安全威脅推給了服務器端。這或許是微軟的IE瀏覽器(資源管理器)默認設置使用被動方式的原因。如圖表2所示。另外需要注意的,在Windows命令行下,FTP默認是使用主動方式進行數據連接的。
五、主機防火墻與FTP
如果將FTP服務器架設在Windows Server 2008上,由于它內置Windows防火墻,而且默認已經啟用,所以客戶端建立到這臺FTP服務器的控制連接便會被封鎖,此時需要在防火墻上開放對TCP 21端口的傳入連接。
被動模式下,由于服務器通過控制信道將用來監聽客戶端請求的端口號是隨機產生的,此時需要在防火墻上開放的傳入連接的端口也是隨機的。由于Windows防火墻不能像網絡防火墻那樣根據需要動態打開和關閉FTP服務要求的隨機端口,所以需要靜態開放全部可能的隨機端口。
Windows Server 2008默認的動態端口范圍是49152-65535,而Windows防火墻的例外開放規則只能針對單一端口來開放,要開放49152-65535這個范圍內的一萬多個端口,非常不切實際,更是會給運行FTP服務器的主機帶來嚴重的安全威脅。
所幸的是,基于IIS7.0建立的FTP服務器允許將端口號固定在自行指定的一個范圍中,如50000-50005,此時便只需要開放這一小段范圍的端口即可,大大提升了安全性和配置Windows防火墻的效率。如果服務器上部署的是第三方防火墻,則需要慎重考慮如何設置使之能安全保障FTP服務的正常運行。
小編補充:
因為現在大家服務器基本上都是用 FileZilla Server FTP服務器,他的例外方法就是通過添加端口或FileZilla server.exe為例外,最近因為針對 FileZilla Server 的提權
對于利用方法大家可以看下這篇文章(https://www.jb51.net/books/552915.html),那么就需要屏蔽本地14147端口的對外連接(使用防火墻或ip安全策略)。
相關文章:
