FTP 主動模式和被動模式
FTP主動模式和被動模式
引言:
在使用FTP時,如果客戶端機器和FTP服務器雙方之間的所有端口都是開放的,那連接不存在問題。如果客戶端與服務器之間有防火墻,如果沒配置好防火策略和采用合適的連接模式,會導致登錄成功,但無法List列表的問題。要避免出現這樣的問題,首先要了解FTP的工作模式。
基本概念
一次完整的FTP會話,包含有兩個連接,一個稱之為命令通道,一個稱之為數據通道
命令通道用來傳遞一些“命令”和反饋,包括用戶名密碼登陸,而且眾所周知是明文。默認此通道是21端口 當然 管理員也可以修改為其他端口 是什么都無所謂 但若建立多個FTP的話 端口不能重復
建立數據通道分兩種方式,一是PORT模式(主動),二是PASV模式(被動)
PORT(主動模式)
PORT中文稱為主動模式,說白了就是在建立數據通道時,服務端去連接別人。
工作的原理: FTP客戶端連接到FTP服務器的21端口,發送用戶名和密碼登錄,登錄成功后要list列表或者讀取數據時,客戶端隨機開放一個端口(1024以上),發送 PORT命令到FTP服務器,告訴服務器客戶端采用主動模式并開放端口;FTP服務器收到PORT主動模式命令和端口號后,通過服務器的20端口和客戶端開放的端口連接,發送數據。
兩種模式的比較
從上面的運行原理圖可以看到,主動模式和被動模式的不同簡單概述為:
主動模式傳送數據時是“服務器”連接到“客戶端”的端口;被動模式傳送數據是“客戶端”連接到“服務器”的端口。
主動模式需要客戶端必須開放端口給服務器,很多客戶端都是在防火墻內,開放端口給FTP服務器訪問比較困難。被動模式只需要服務器端開放端口給客戶端連接就行了。
不同工作模式的網絡設置
我在實際項目中碰到的問題是,FTP的客戶端和服務器分別在不同網絡,兩個網絡之間有至少4層的防火墻,服務器端只開放了21端口, 客戶端機器沒開放任何端口。FTP客戶端連接采用的被動模式,結果客戶端能登錄成功,但是無法LIST列表和讀取數據。很明顯,是因為服務器端沒開放被動模式下的隨機端口導致。
由于被動模式下,服務器端開放的端口隨機,但是防火墻要不能全部開放,解決的方案是,在ftp服務器配置被動模式下開放隨機端口在 50000-60000之間(范圍在ftp服務器軟件設置,可以設置任意1024上的端口段),然后在防火墻設置規則,開放服務器端50000-60000之間的端口端。
主動模式下,客戶端的FTP軟件設置主動模式開放的端口段,在客戶端的防火墻開放對應的端口段。