FTP是常見的基于TCP的網(wǎng)絡服務,它使用了兩個TCP連接來建立邏輯通信信道,即控制連接和數(shù)據(jù)連接。當客戶端與服務器建立一個FTP會話時,使用TCP創(chuàng)建一個持久的控制連接以傳遞命令和應答。當發(fā)送文件和其它數(shù)據(jù)傳輸時,它們在獨立的TCP數(shù)據(jù)連接上進行傳遞,這個連接根據(jù)需要創(chuàng)建和拆除。
FTP標準指定了創(chuàng)建數(shù)據(jù)連接的兩種不同方法,即主動數(shù)據(jù)連接和被動數(shù)據(jù)連接。FTP的控制連接總是由客戶端首先發(fā)起的,主動數(shù)據(jù)連接是由客戶端發(fā)起的,被動數(shù)據(jù)連接是由服務器端發(fā)起的。FTP創(chuàng)建數(shù)據(jù)連接的工作機制帶來了一個嚴重的問題,在FTP的命令或對它們的回答中傳遞IP地址及端口號與網(wǎng)絡分層機制嚴重沖突,在FTP客戶端與服務器的通信信道之間的網(wǎng)關設備(防火墻或路由器)上啟用了NAT功能的情況下將出現(xiàn)連接性問題。
對于FTP的多端口連接的TCP應用,防火墻的影響是很大的。FTP主動模式下,F(xiàn)W檢測PORT命令報文的應用層信息,將應用層攜帶的IP地址和端口記錄在Server-map表中。由于PORT命令的應用層信息中攜帶了客戶端的IP地址和向服務器隨機開放的端口,F(xiàn)W通過分析PORT命令的應用層信息,提前預測到后續(xù)報文的行為方式,根據(jù)應用層信息中的IP和端口創(chuàng)建Server-map表。服務器向客戶端發(fā)起數(shù)據(jù)連接的報文到達FW后命中該Server-map表項,不再受安全策略的控制。
FTP被動模式下,客戶端使用隨機端口xxxx向服務器的21端口發(fā)起連接請求建立控制通道,然后使用PASV命令協(xié)商兩者建立數(shù)據(jù)通道的端口號,協(xié)商出來的端口是yyyy。然后客戶端主動向服務器的yyyy端口發(fā)起連接請求,建立數(shù)據(jù)通道。數(shù)據(jù)通道建立成功后再進行數(shù)據(jù)傳輸。由于PASV命令的應用層信息中攜帶了數(shù)據(jù)連接中客戶端使用的ip地址和端口號,防火墻通過分析PASV命令中的參數(shù),提前預測到后續(xù)報文的行為方式,根據(jù)應用層信息中的IP和端口創(chuàng)建Server-map表。后續(xù)客戶端向服務器端發(fā)起的數(shù)據(jù)連接就會命中該server-map表項,不用查詢防火墻的策略表就可以放行后續(xù)報文。