ftp-主動模式(PORT)和被動模式(PASV)

簡介

FTP協議要用到兩個TCP連接,
一個是命令連接,用來在FTP客戶端與服務器之間傳遞命令;
另一個是數據連接,用來上傳或下載數據。
無論是主動模式還是被動模式,其要進行文件傳輸都必須依次建立兩個連接,分別爲命令連接與數據連接。而主動模式與被動模式的差異主要體現在數據連結通道上

命令連接

當FTP客戶端需要登陸到FTP服務器上的時候,服務器與客戶端需要進行一系列的身份驗證過程,這個過程就叫做命令連接

 當FTP客戶端需要登陸到FTP服務器上的時候,服務器與客戶端需要進行一系列的身份驗證過程,這個過程就叫做命令連接。如在客戶端向服務器發起連接請 求的時候,客戶端會隨即的選擇某個TCP端口來跟FTP服務器的21號端口進行連接,這主要是通過TCP三方握手來實現的。當三方握手完成之後,客戶端與 服務器之間便建立了命令連接通道。不過這個通道的用途是非常有限的,其主要用來傳輸FTP的相關指令。如查看文件列表、刪除文件等等,而不能夠用來在客戶 端與服務端進行文件傳輸。爲此這個通道就被稱之爲命令通道。到客戶端與服務器建立了連接之後,可能客戶端暫時不需要進行數據傳輸。如只是需要查看目錄下的文件或則其他相關的動作。此時之需要命令連接通道就可以完 成了。

數據連接

 如果此時客戶端需要往FTP服務器上上傳或者下載文件的話,就需要在客戶端與服務器端再建立一條額外的數據傳輸連接。

主動模式

主動模式

主動模式的FTP是指服務器主動連接客戶端的數據端口

Standard、Active
主動模式是指服務器主動連接客戶端的數據端口
在主動模式下,FTP客戶端隨機開啓一個大於1024的端口N向服務器的21號端口發起連接,然後開放N+1號端口進行監聽,並向服務器發出PORT N+1命令。服務器接收到命令後,會用其本地的FTP數據端口(通常是20)來連接客戶端指定的端口N+1,進行數據傳輸。

PORT(主動)這個方式需要在接上TCP 21端口後,服務器通過自己的TCP 20來發出數據。並且需要建立一個新的連接來傳送檔案。而PORT的命令包含一些客戶端沒用的資料,所以有了PASv的出現。

當客戶端發出數據傳輸的指令之後(如上傳數據或者下載文件),客戶端會啓用另外一個端口監聽等待連接,並利用先前建立的命令連接通道告訴FTP服務器其監 聽的端口號。然後FTP服務器會利用端口20和剛纔的FTP客戶端所告知的端口再次進行三方握手。三次握手成功後便建立了一條數據傳輸通道。注意此時數據 連結通道建立的過程中,是FTP服務器的20號端口主動連接FTP客戶端的,爲此這種連接方式就叫做主動模式。
在主動操作模式下,FTP服務器的20號端口是主動同客戶端聯繫,建立數據傳輸通道的
PASV運行方式就是當服務器接收到客戶端連接請求時,就會自動從端口1024到5000中隨機選擇一個和客戶端建立連接傳遞數據。由於被動且自動建立連接,容易受到攻擊,所以安全性差。

工作過程:

  1. 客戶端以隨機非特權端口N,就是大於1024的端口,對server端21端口發起連接

  2. 客戶端開始監聽 N+1端口;

  3. 服務端會主動以20端口連接到客戶端的N+1端口。

優點:

服務端配置簡單,利於服務器安全管理,服務器只需要開放21端口

缺點:

如果客戶端開啓了防火牆,或客戶端處於內網(NAT網關之後), 那麼服務器對客戶端端口發起的連接可能會失敗

被動模式

被動模式

被動模式的FTP是指服務器被動地等待客戶端連接自己的數據端口。

在被動操作模式下,則FTP服務器是被動的等待,等待 客戶段與其的20號端口建立連接
被動模式是指服務器被動地等待客戶端連接自己的數據端口
在被動模式下,FTP庫戶端隨機開啓一個大於1024的端口N向服務器的21號端口發起連接,同時會開啓N+1號端口。然後向服務器發送PASV命令,通知服務器自己處於被動模式。服務器收到命令後,會開放一個大於1024的端口P進行監聽,然後用PORTP命令通知客戶端,自己的數據端口是P。客戶端收到命令後,會通過N+1號端口連接服務器的端口P,然後在兩個端口之間進行數據傳輸。
(在vsftpd.conf中指定被動端口範圍爲4000-4500)

被動模式通常用在處於防火牆之後的FTP客戶訪問外界FTp服務器的情況,因爲在這種情況下,防火牆通常配置爲不允許外界訪問防火牆之後主機,而只允許由防火牆之後的主機發起的連接請求通過。因此,在這種情況下不能使用主動模式的FTP傳輸,而被動模式的FTP可以良好的工作。

PASV運行方式就是當服務器接收到客戶端連接請求時,就會自動從端口1024到5000中隨機選擇一個和客戶端建立連接傳遞數據。由於被動且自動建立連接,容易受到攻擊,所以安全性差。
被動模式的FTP通常用在處於防火牆之後的FTP客戶訪問外界FTp服務器的情況,因爲在這種情況下,防火牆通常配置爲不允許外界訪問防火牆之後主機,而只允許由防火牆之後的主機發起的連接請求通過。因此,在這種情況下不能使用主動模式的FTP傳輸,而被動模式的FTP可以良好的工作。

   被動操作模式在建立命令連接通道的時候,跟主動操作模式是相同的。

用戶需要進行數據傳輸的時候, 則FTP客戶端會通過命令通道告訴FTP服務器,如會向服務器發出一個PASV指令。

服務期會選擇自身的一個端口來進行監聽連接(而在主動操作模式下是利用客戶端的一個端口來進行監聽連接),並再次利用命令連接通道告訴客戶端“我爲 你開啓了哪個端口,你要建立數據連接的話就跟我的哪個端口聯繫”

客戶端在接到這個信息後,就會在自己操作系統上選擇一個數據連接的通信端口,與服務器提供的端口進行三方握手,並最終建立起可以進行數據傳輸的通道。

工作過程:

  1. 客戶端以隨機非特權端口連接服務端的21端口

  2. 服務端開啓一個非特權端口爲被動端口,並返回給客戶端

  3. 客戶端以非特權端口+1的端口主動連接服務端的被動端口

缺點:

服務器配置管理稍顯複雜,不利於安全,服務器需要開放隨機高位端口以便客戶端可以連接,因此大多數FTP服務軟件都可以手動配置被動端口的範圍

優點:

對客戶端網絡環境沒有要求

選擇策略

在數據通道建立的過程中,客戶端會在另一個端口上監聽等待連接,並利用命令連接通道告訴服務器其監聽的端口號。然後企業的邊界路由器會將FTP的IP地址轉換爲合法的公網IP地址(假設企業由於公網IP地址有限,在邊界路由 器上通過NAT服務向外部用戶提供FTP連接)。

採用的是主動操作模式的話,則在連接這個數據通道的過程中FTP服務器會主動跟邊界路由器的端口 進行通信(因爲FTP服務器認爲這臺邊界路由器,其實就是NAT服務器,就是FTP客戶段)。
但是實際上不是,而且也有可能沒有啓用這個端口。爲此客戶端 與FTP服務器之間的連接最終沒有建立起來。
所以說,如果採用主動操作模式的話,當FTP服務器部署在NAT等服務器後面的時候,則FTP服務器與客戶端 之間只能夠建立命令連接通道,而無法建立起數據傳輸通道。
如果FTP服務器與客戶端之間還有防火牆的話,在連接的過程中也會出現以上類似的情況。

  被動操作模式的話,是客戶端主動跟服務期的20號端口進行連接的。爲此在數據傳輸通道建立的過程中,即使中間有NAT服務器或者防火牆,也 會準確無誤的連接到FTP服務器的數據傳輸接口。
所以說,如果在客戶端與FTP服務器之間存在防火牆或者NAT服務器等類似設備的話,那麼在FTP服務器 部署的時候,最好採用被動操作模式。否則的話,很可能只能夠建立命令連接通道,而無法進行數據傳輸。

如果一些出差在外的員工或者員工在家庭辦公時也需要訪問企業內部的FTP服務器,而此時出於安全的考慮或者公網IP 地址數量的限制,企業往往會把FTP服務器部署在防火牆或者NAT服務器的後面,此時這個主動操作模式就不行了。
如果企業中通過互聯網來訪問企業內部FTP服務器的員工比較多的時候,那麼最好能夠一勞永逸的解決這個問題,即在FTP服務器上進行設置,強制客戶端在連接的時候採用被動操作模式。

用戶比較少的話,而且用戶又具有一定的計算機知識,那麼可以不在服務器上進行設置。而是在連接的過程中,通過FTP客戶端來設置。如在某些FTP客戶端 上,會有一個Passive Transfers等類似的選項。選中這個選項就表示以被動操作方式進行傳輸。而沒有選中這個選項的客戶端則仍然採用主動操作模式來進行連接。

如果把FTP服務器部署在防火牆或者NAT服務器的背後,則採用主動操作模式的客戶端只能夠建立命令連接而無法進行文件傳輸。如果部署完FTP服務器後,系統管理員發現用戶可以連接上FTP服務器,可以查看 目錄下的文件,但是卻無法下載或者上傳文件,如果排除權限方面的限制外,那麼很有可能就是這個操作模式選擇錯誤

常見客戶端設置

FTP服務器部署的時候,其默認採用的是主動操作模式。如果企業FTP服務器的用戶都是在內部網絡中的,即不用像外部網絡的用戶提供FTP連接的需求,那 麼採用這個默認操作方式就可以了。

 大部分FTP客戶端默認使用PASV方式。IE默認使用PORT方式。在大部分FTP客戶端的設置裏,常見到的字眼都是“PASV”或“被動模式”,極少見到“PORT”或“主動模式”等字眼。因爲FTP的登錄方式只有兩種:PORT和PASV,取消PASV方式,就意味着使用PORT方式。

(1)IE:工具 -> Internet選項 -> 高級 -> “使用被動FTP”(需要IE6.0以上才支持)。

(2)CuteFTP:Edit -> Setting -> Connection -> Firewall -> “PASV Mode” 或File -> Site Manager,在左邊選中站點 -> Edit -> “Use PASV mode” 。

(3)FlashGet:工具 -> 選項 -> 代理服務器 -> 直接連接 -> 編輯 -> “PASV模式”。

(4)FlashFXP:選項 -> 參數選擇 -> 代理/防火牆/標識 -> “使用被動模式” 或站點管理 -> 對應站點 -> 選項 -> “使用被動模式”或快速連接 -> 切換 -> “使用被動模式”。
  •  

http://www.cnblogs.com/swyft/p/5641720.html

http://www.cnblogs.com/ShaYeBlog/p/5897303.html

http://www.cnblogs.com/huangxm/p/6274645.html

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