FTP/FTPS/FTPES/SFTP主被動模式詳解

什麼是FTP的主被動模式

FTP客戶端從任意的非特殊的端口N > 1023連入到FTP服務器的命令端口21端口,然後客戶端在N+1 (N+1 >= 1024)端口監聽,並且通過N+1 (N+1 >= 1024)端口發送命令給FTP服務器,服務器會連接用戶本地指定的數據端口,比如20端口,以服務器端防火牆爲立足點,要支持主動模式FTP需要打開如下交互中使用到的端口:

命令端口21接受客戶端命令端口的連接(客戶端初始連接)
命令端口21到客戶端命令端口N > 1023(服務器響應客戶端命令)
數據端口20到客戶端數據端口N+1 > 1024(服務器初始化數據連接到客戶端數據端口)
數據端口20接受客戶端數據端口N+1 > 1024(客戶端發送ACK包到服務器的數據端口)

示例

客戶端的命令端口1023與服務器的命令端口21建立連接,併發送命令"PORT 1024"服務器給客戶端的命令端口返回一個"ACK",服務器發起一個從它自己的數據端口20到客戶端先前指定的數據端口1024的連接,客戶端的數據端口1024給服務器端數據端口20返回一個"ACK"
***Attention***
對於客戶端的防火牆來說這是從外部系統建立到內部客戶端的連接,所以,此模式需要客戶端擁有公網IP並開放端口予以訪問,當前運營商,如電信,通常會把用戶拉入自己的私網IP,故需要聯繫運營商開通私網轉公網業務,此業務是免費的。

被動模式:

爲了解決服務器發起到客戶的連接的問題,增加了一種被動模式PASV,當客戶端通知服務器它處於被動模式時才啓用,在被動方式FTP中,命令連接和數據連接都由客戶端發起,這樣就可以解決從服務器到客戶端的數據端口的入方向連接失敗的問題,客戶端打開兩個任意的非特殊端口N > 1023 和 N+1 >= 1024N連接服務器的21端口,但與主動模式不同,客戶端不會提交PORT命令並允許服務器來回連它的數據端口,而是提交PASV命令,於是服務器會開啓一個任意的非特殊端口P > 1023,併發送”PORT {P}”命令給客戶端,然後客戶端發起從N+1到服務器的端口P的連接用來傳送數據,對於服務器端的防火牆來說,必須允許下面的通訊才能支持被動模式:

服務器命令端口21接受客戶端命令端口(客戶端初始連接)
服務器命令端口21到客戶端命令端口N > 1023(服務器響應客戶端命令)
服務器數據端口P > 1023接受客戶端數據端口N+1 > 1024(客戶端初始化數據連接到服務器數據端口)
服務器數據端口P > 1023到客戶端數據端口N+1 > 1024(服務器發送ACK響應到客戶端的數據端口)

示例:

客戶端的命令端口與服務器的命令端口建立連接,併發送命令"PASV"服務器返回命令"PORT 1023",客戶端初始化一個從自己的數據端口到服務器端指定的數據端口的數據連接,服務器的數據端口1023給客戶端數據端口1024返回一個"ACK"
***Attention***
被動模式解決了客戶端的許多問題,但同時給服務器端帶來了更多的問題,最大的問題是需要允許從任意遠程終端到服務器高位端口的連接,第二個問題是客戶端有的支持被動模式,有的不支持被動模式,必須考慮如何能支持這些客戶端,以及爲他們提供解決辦法。

當NAT(Network Address Translation)設備以主動模式訪問FTP服務器時,由於NAT設備不會變更數據包中的IP地址,從而導致無法訪問服務器,最權威的FTP參考資料是RFC 959,它是FTP協議的官方規範。

FTPS是一種擴展的FTP協議,它支持Transport Layer Security(TLS)和Secure Sockets Layer(SSL)加密協議,當使用FTPS與服務器連接時,有兩種方法:顯式和隱式顯示又叫FTPES,FTPS客戶端跟FTPS服務器必須顯式使用一種同樣的加密方法,如果客戶端不要求加密,服務器也允許非加密通訊
隱式就是客戶端直接通過TSL/SSL加密與服務器通訊,如果服務器無響應,則停止通訊。

劃重點

SFTP是Secure File Transfer Protocol的縮寫,安全文件傳送協議,可以爲傳輸文件提供一種安全的網絡的加密方法與FTP有着幾乎一樣的語法和功能SFTP爲SSH的其中一部分,在SSH軟件包中已經包含了一個叫作SFTP(Secure File Transfer Protocol)的安全文件信息傳輸子系統,SFTP本身沒有單獨的守護進程,它必須使用SSHD守護進程(端口號默認是22)來完成相應的連接和答覆操作,所以從某種意義上來說,SFTP並不像一個服務器程序,而更像是一個客戶端程序。

SFTP同樣是使用加密傳輸認證信息和傳輸的數據,所以,使用SFTP是非常安全的。並且,SFTP不需要客戶端開放任何可以被服務器連接的端口也不需要服務器開放非22的其他端口,只要服務器支持SSH連接,即可直接使用SFTP且SFTP在CentOS自帶的SSH包(SSH/SSHD)中默認是啓用狀態(需要OpenSSH版本大於4.8p1)其他系統未經測試,可自行測試,至於用戶名和密碼就是你使用SSH連接服務器並進行操作的賬戶,至於權限,就是這個系統賬戶和所屬用戶組的文件訪問權限,root用戶具有最高訪問權限,如果沒有開啓,只需要修改sshd_config配置文件:

Subsystem sftp /usr/libexec/openssh/sftp-server #去掉此行的註釋
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章