天天看點

FTP協定的主動模式和被動模式的差別

最近準備做一個《FtpCopy系列教程》,主要講解Ftp協定主動模式和被動模式的差別、以及FTP伺服器的安裝部署,然後通過幾個常用執行個體示範,詳細講解如何使用FtpCopy進行資料自動備份。

什麼是FTP協定?

FTP的中文名稱是“檔案傳輸協定”,是File Transfer Protocol三個英文單詞的縮寫。FTP協定是TCP/IP協定組中的協定之一,其傳輸效率非常高,在網絡上傳輸大的檔案時,經常采用該協定。

一個完整的FTP由

FTP伺服器

FTP用戶端

組成,用戶端可以将伺服器上的檔案通過FTP協定下載下傳到本地,也可以将本地資料通過FTP協定上傳到伺服器上。

(1)伺服器端需要安裝FTP服務軟體,常用的有FileZilla Server、IIS、Serv-U、OSSFTP等等。

  • 不同的FTP軟體對FTP協定标準支援有所差别,從我的使用經驗感覺FileZilla Server是對FTP協定支援最好的軟體,它具有以下幾個特點:體積小(2M左右)、免費開源、操作簡單、功能完善(我們所需要的有功能它基本都支援)。
  • IIS對FTP協定的支援也很不錯。
  • Serv-U有幾個指令支援不是很好,這個軟體也是收費軟體,沒感覺比FileZilla Server好多少。
  • OSSFTP是阿裡雲對象存儲提供的FTP Server,對FTP标準協定支援就更差了。

(2)FTP用戶端軟體就比較多了,常用的有FileZilla、FlashFXP、WinSCP、甚至在浏覽器和windows資料總管中輸入FTP位址都可以當做FTP用戶端來使用。我們的FtpCopy也屬于FTP用戶端。

FTP協定的兩個TCP連接配接

FTP協定的主動模式和被動模式的差別

左側為用戶端,右側為FTP伺服器,無論是上傳還是下載下傳,用戶端與伺服器之間都會建立2個TCP連接配接會話,綠色是

控制連接配接

,紅色的是

資料連接配接

。其中,

控制連接配接

用于傳輸FTP指令,如:删除檔案、重命名檔案、下載下傳檔案、列取目錄、擷取檔案資訊等。真正的資料傳輸時通過

資料連接配接

來完成的。

預設情況下,伺服器21端口作為指令端口,20端口為資料端口。但被動模式下就有所差别了。

剛接觸FTP的朋友,經常搞不清楚FTP的主動模式和被動模式,造成連接配接被防火牆攔截,下面我們就詳細了解下FTP的這兩種模式:

FTP主動模式

首先,來了解下FTP的主動模式,主動模式是FTP的預設模式,也稱為PORT模式。

FTP協定的主動模式和被動模式的差別

1. 在主動模式下,用戶端會開啟N和N+1兩個端口,N為用戶端的指令端口,N+1為用戶端的資料端口。

第一步,用戶端使用端口N連接配接FTP伺服器的指令端口21,建立

控制連接配接

并告訴伺服器我這邊開啟了資料端口N+1。

第二步,在

控制連接配接

建立成功後,伺服器會使用資料端口20,主動連接配接用戶端的N+1端口以建立

資料連接配接

。這就是FTP主動模式的連接配接過程。

我們可以看到,在這條紅色的

資料連接配接

建立的過程中,伺服器是主動的連接配接用戶端的,是以稱這種模式為主動模式。

FTP協定的主動模式和被動模式的差別

上面這張圖是通過netstat指令檢視到的ftp主動模式下TCP的連接配接資訊,首先用戶端使用49195端口連接配接伺服器21端口建立

控制連接配接

,然後伺服器使用20端口連接配接用戶端49197端口建立

資料連接配接

這裡需要補充下,用戶端的指令端口和資料端口實際中并不是有些文章寫道的N和N+1的關系,兩個端口比較接近而已。

2. 主動模式有什麼利弊呢?

主動模式對FTP伺服器的管理有利,因為FTP伺服器隻需要開啟21端口的“準入”和20端口的“準出”即可。

但這種模式對用戶端的管理不利,因為FTP伺服器20端口連接配接用戶端的資料端口時,有可能被用戶端的防火牆攔截掉。

3. 如何解決用戶端防火牆攔截“資料連接配接”的建立呢?

(1)如果防火牆開啟了“攔截通知”,在使用FTP軟體連接配接伺服器時,防火牆會彈出下面這個提醒,隻需要點選“允許通路”就可以建立連接配接了。

FTP協定的主動模式和被動模式的差別

(2)如果防火牆沒有開啟“攔截通知”,則需要我們的應用程式添加到防火牆的“允許的程式”清單中。如圖所示,允許FlashFXP.exe和WinSCP以主動模式連接配接FTP伺服器。

FTP協定的主動模式和被動模式的差別

FTP被動模式

上面所講的是FTP主動模式,簡單的了解就是伺服器的資料端口20主動連接配接用戶端的資料端口,來建立

資料連接配接

,用來傳輸資料,這個

資料連接配接

的建立有可能被用戶端防火牆攔截掉。為了解決這個問題就衍生出另外一種連接配接模式---被動模式。被動模式也稱為passive模式。

1. 被動模式是如何運作的呢?來看下這張圖

FTP協定的主動模式和被動模式的差別

第一步,用戶端的指令端口N主動連接配接伺服器指令端口21,并發送PASV指令,告訴伺服器用“被動模式”,

控制連接配接

建立成功後,伺服器開啟一個資料端口P,通過PORT指令将P端口告訴用戶端。

第二步,用戶端的資料端口N+1去連接配接伺服器的資料端口P,建立

資料連接配接

資料連接配接

建立的過程中,伺服器是被動的等待用戶端來連接配接的,是以稱這種模式為被動模式。

FTP協定的主動模式和被動模式的差別

上面這張圖是通過netstat指令檢視到的“被動模式”下的TCP連接配接情況,首先用戶端49222端口去連接配接伺服器的21端口,建立

控制連接配接

。然後用戶端的49224端口連接配接伺服器的6008端口去建立

資料連接配接

這裡有兩點需要補充

  • 第一,用戶端的指令端口和資料端口實際中并不是有些文章寫道的N和N+1的關系,兩個端口比較接近而已;
  • 第二,伺服器的資料端口P是随機的,這個用戶端連接配接過來用的是6008端口,另外一個連接配接過來可能用的就是7009,不過P端口的範圍是可以設定的。

2. 被動模式有什麼利弊呢?

被動模式對FTP用戶端的管理有利,因為用戶端的指令端口和資料端口都是“準出”,windows防火牆對于“準出”一般是不攔截的,是以用戶端不需要任何多餘的配置就可以連接配接FTP伺服器了。

但對伺服器端的管理不利。因為用戶端資料端口連到FTP伺服器的資料端口P時,很有可能被伺服器端的防火牆阻塞掉。

4. 如何解決伺服器端防火牆攔截“資料連接配接”的建立呢?

為了解決P端口的“準入”不被伺服器防火牆攔截,需要在伺服器端設定P端口的範圍,并在防火牆中開啟這個範圍端口的“準入”。這張圖是在FileZilla Server中指定被動模式的資料端口範圍為6000-7000,然後在windows防火牆中配置6000-700端口允許“準入”。

FTP協定的主動模式和被動模式的差別
FTP協定的主動模式和被動模式的差別

FTP伺服器安全性設定

一般我們使用FTP主要用于備份下載下傳伺服器上的資料,有時也需要将本地的資料上傳至伺服器上備份。如果伺服器在外網之中,伺服器的每個端口的開放都需要嚴格控制,如何安全的設定我們的FTP伺服器呢,我個人有以下幾個使用經驗:

1. 合理的設定FTP賬号和權限

為每個賬号設定密碼和權限,比如說:如果隻是下載下傳資料,隻要給FTP賬号配置設定檔案的read權限和目錄的List列取目錄權限即可。

FTP協定的主動模式和被動模式的差別

2. 伺服器21端口添加21端口限定

無論是主動模式還是被動模式,第一步都是用戶端連接配接伺服器的21端口建立

控制連接配接

。是以我們可以在防火牆的21端口上設定IP限定,僅允許我們的備份電腦的IP或IP段連接配接伺服器21端口,這樣其他人就無法使用FTP暴力破解FTP賬号和密碼了。

FTP協定的主動模式和被動模式的差別

3. 禁止FTP伺服器管理控制台的遠端管理功能

FTP伺服器管理控制台:主要用于設定FTP賬号、FTP目錄、FTP的指令端口和資料端口、下載下傳速度和上傳速度等等。

FTP管理控制台并不是所有FTP軟體都支援遠端通路的,比如IIS中設定FTP需要在IIS中設定,它的控制台就是IIS,隻有登入伺服器系統才可以設定IIS。

預設情況下FileZilla Server的控制台是隻允許本機登入的,我們不需要做任何設定,保持預設配置即可。

這裡我們還是有必要了解下如何開啟FileZilla Server控制台的遠端通路:

(1)防火牆打開14147端口的“準入”,14147端口為FileZilla Server控制台端口;

(2)配置FTP伺服器的IP位址;

(3)配置允許通路FileZilla Server控制台的終端。

FTP協定的主動模式和被動模式的差別

這樣我們配置的192.168.25.1就可以遠端連接配接192.168.25.133伺服器上的控制台,進行賬号和權限設定等。

防火牆設定總結

1. FTP主動模式下防火牆設定

(1)伺服器沒有“實體防火牆”的情況下,隻需要在伺服器作業系統中開啟21端口的準入,20端口的準出預設是允許的(Windows系統防火牆預設是不攔截“準出”的)。

(2)伺服器有“實體防火牆”的情況下,需要在“實體防火牆”中開啟21端口的準入,20端口的準出。

(3)用戶端需要設定“允許應用程式通過防火牆”(WinSCP.exe、FlashFXP等)

2. FTP主動模式下防火牆設定

(1)伺服器需要開啟21端口準入,并設定被動模式資料端口範圍P,并在防火牆中開啟P的準入。

(2)用戶端一般不需要設定任何防火牆,因為N和N+1一般是可以出去的。