FTP兩種模式詳解和實踐技巧

筆者最近幾天被FTP折騰了一下,簡單的路由器ACL就是無法通過被動模式的FTP流量。經數次實驗和度娘、谷哥指導,終於對FTP模式有了深入理解。先感嘆一句,以前學藝不精,書到用時方恨少!

RFC959中文版地址:http://ishare.iask.sina.com.cn/f/25520214.html

不必要對FTP協議深究,但是看看上面的RFC文檔,對於網工來說,不無裨益。

FTP的目標是:促進程序/數據文件的共享;鼓勵(通過程序)使用遠程計算機;使用戶不必面對不同主機上不同文件系統的差異;對數據進行高效可靠的傳輸。FTP使用C/S結構,服務器通過TCP21端口建立控制連接,一般情況下通過TCP20端口建立數據連接。

爲什麼上面說是一般情況,這就引出了FTP的兩種模式:主動模式(PORT)和被動模式(PASV)。FTP服務器在主動模式時,會使用21、20兩個端口,在被動模式時仍使用21端口做控制連接,使用大於1024的端口做數據連接。請看官仔細着,這裏的被動和主動是對於服務器來說的。

以下內容引用自:http://hi.baidu.com/xianyang1981/item/20d68be050a50aaccf2d4f8e

主動模式過程:客戶端從一個任意的非特權端口N(N>1024)連接到FTP服務器的命令端口(即tcp 21端口)。緊接着客戶端開始監聽端口N+1,併發送FTP命令“port N+1”到FTP服務器。最後服務器會從它自己的數據端口(20)連接到客戶端指定的數據端口(N+1),這樣客戶端就可以和ftp服務器建立數據傳輸通道了。ftp port模式工作流程如下圖所示:

FTP兩種模式詳解和實踐技巧

針對FTP服務器前面的防火牆來說,必須允許以下通訊才能支持主動方式FTP:
1、客戶端口>1024端口到FTP服務器的21端口 (入:客戶端初始化的連接 S<-C)
2、FTP服務器的21端口到客戶端>1024的端口(出:服務器響應客戶端的控制端口 S->C)
3、FTP服務器的20端口到客戶端>1024的端口(出:服務器端初始化數據連接到客戶端的數據端口 S->C)
4、客戶端>1024端口到FTP服務器的20端口(入:客戶端發送ACK響應到服務器的數據端口 S<-C)

被動模式過程:當開啓一個FTP連接時,客戶端打開兩個任意的非特權本地端口(N > 1024和N+1)。第一個端口連接服務器的21端口,但與主動方式的FTP不同,客戶端不會提交PORT命令並允許服務器來回連它的數據端口,而是提交PASV命令。這樣做的結果是服務器會開啓一個任意的非特權端口(P > 1024),併發送PORT P命令給客戶端。然後客戶端發起從本地端口N+1到服務器的端口P的連接用來傳送數據。ftp pasv模式工作流程如下圖所示:

FTP兩種模式詳解和實踐技巧

對於服務器端的防火牆來說,必須允許下面的通訊才能支持被動方式的FTP:
1、客戶端>1024端口到服務器的21端口 (入:客戶端初始化的連接 S<-C)
2、服務器的21端口到客戶端>1024的端口 (出:服務器響應到客戶端的控制端口的連接 S->C)
3、客戶端>1024端口到服務器的大於1024端口 (入:客戶端初始化數據連接到服務器指定的任意端口 S<-C)
4、服務器的大於1024端口到遠程的大於1024的端口(出:服務器發送ACK響應和數據到客戶端的數據端口 S->C)

兩種模式最主要區別就是數據端口連接方式不同,主動模式只要開啓服務器的21和20端口,而被動模式需要開啓服務器大於1024所有TCP端口和21端口。重網絡安全的角度來看的話似乎PORT模式更安全,而PASV更不安全,那麼爲什麼RFC要在PORT基礎再製定一個PASV模式呢?其實RFC制定PASV模式的主要目的是爲了數據傳輸安全角度出發的,因爲FTP使用固定20端口進行傳輸數據,***很容易使用sniffer等探嗅器抓取ftp數據,這樣一來通過PORT模式傳輸數據很容易被***竊取,因此使用PASV方式來架設FTP服務器是最安全絕佳方案。
如果作爲一個有經驗的網工就會發現使用PASV方式會給網絡安全很大隱患,那就是PASV需要開啓服務器tcp大於1024所有端口,這樣對服務器的安全保護是非常不利的。在此我建議兩種方法來完善PASV模式的端口開放問題,第一種就是使用弱洞掃描工具比如Xscan找出服務器開放的端口然後使用ACL把端口deny掉,另外一種方法就是使用具有狀態檢測防火牆開啓PASV的端口。

在PASV模式下是使用狀態檢測防火牆比acl最大的好處就是使用狀態檢測防火牆只要開啓21端口就可以了,狀態檢測防火牆會檢測客戶端口連接FTP服務器的21命令端口,一但檢測客戶端使用21命令端口然後就會允許這個Session使用FTP服務器大於1024端口,而其他方式是無法直接訪問FTP服務器大於1024端口。通過狀態檢測防火牆就可以保證FTP服務器大於1024端口只對FTP Session開放了。思科的ASA系列防火牆完全滿足要求。

技巧:可以限制客戶端訪問服務器的端口範圍。

對於IIS搭建的FTP服務器來說,可進行如下操作:

以下內容引用自:http://blog.sina.com.cn/s/blog_44e5d6d10100sbzh.html

通過 ADSUTIL 腳本配置 PassivePortRange

1 . 單擊開始-運行,鍵入cmd, 然後確定
2 . 鍵入cd Inetpub\AdminScripts,然後按 Enter。
3 . 鍵入以下命令。
CSCRIPT.exe adsutil.vbs set /MSFTPSVC/PassivePortRange "5500-5515"
4 重新啓動 FTP 服務。
通過 ADSUTIL 腳本配置時您會看到以下輸出:
Microsoft (R) Windows Script Host 版本 5.6
版權所有 (C) Microsoft Corporation 1996 - 2001。 保留所有權利。

PassivePortRange (STRING) " 5500-5515 ":
注意:如果開了系統自帶的防火牆,必須在例外裏添加以上端口,也要添加5500-5515

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