1. 程式人生 > >ftp-主動模式(PORT)和被動模式(PASV)

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:選項 -> 引數選擇 -> 代理/防火牆/標識 -> “使用被動模式” 或站點管理 -> 對應站點 -> 選項 -> “使用被動模式”或快速連線 -> 切換 -> “使用被動模式”。

參考站點: