最近準備做一個《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連接配接
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcukTNwgDMxIzNwETL1ITM3QjNyQTMwEDMxkTMwITL5ATNzMzLcBTM5EDMy8CX5ATNzMzLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
左側為用戶端,右側為FTP伺服器,無論是上傳還是下載下傳,用戶端與伺服器之間都會建立2個TCP連接配接會話,綠色是
控制連接配接
,紅色的是
資料連接配接
。其中,
控制連接配接
用于傳輸FTP指令,如:删除檔案、重命名檔案、下載下傳檔案、列取目錄、擷取檔案資訊等。真正的資料傳輸時通過
資料連接配接
來完成的。
預設情況下,伺服器21端口作為指令端口,20端口為資料端口。但被動模式下就有所差别了。
剛接觸FTP的朋友,經常搞不清楚FTP的主動模式和被動模式,造成連接配接被防火牆攔截,下面我們就詳細了解下FTP的這兩種模式:
FTP主動模式
首先,來了解下FTP的主動模式,主動模式是FTP的預設模式,也稱為PORT模式。
1. 在主動模式下,用戶端會開啟N和N+1兩個端口,N為用戶端的指令端口,N+1為用戶端的資料端口。
第一步,用戶端使用端口N連接配接FTP伺服器的指令端口21,建立
控制連接配接
并告訴伺服器我這邊開啟了資料端口N+1。
第二步,在
控制連接配接
建立成功後,伺服器會使用資料端口20,主動連接配接用戶端的N+1端口以建立
資料連接配接
。這就是FTP主動模式的連接配接過程。
我們可以看到,在這條紅色的
資料連接配接
建立的過程中,伺服器是主動的連接配接用戶端的,是以稱這種模式為主動模式。
上面這張圖是通過netstat指令檢視到的ftp主動模式下TCP的連接配接資訊,首先用戶端使用49195端口連接配接伺服器21端口建立
控制連接配接
,然後伺服器使用20端口連接配接用戶端49197端口建立
資料連接配接
。
這裡需要補充下,用戶端的指令端口和資料端口實際中并不是有些文章寫道的N和N+1的關系,兩個端口比較接近而已。
2. 主動模式有什麼利弊呢?
主動模式對FTP伺服器的管理有利,因為FTP伺服器隻需要開啟21端口的“準入”和20端口的“準出”即可。
但這種模式對用戶端的管理不利,因為FTP伺服器20端口連接配接用戶端的資料端口時,有可能被用戶端的防火牆攔截掉。
3. 如何解決用戶端防火牆攔截“資料連接配接”的建立呢?
(1)如果防火牆開啟了“攔截通知”,在使用FTP軟體連接配接伺服器時,防火牆會彈出下面這個提醒,隻需要點選“允許通路”就可以建立連接配接了。
(2)如果防火牆沒有開啟“攔截通知”,則需要我們的應用程式添加到防火牆的“允許的程式”清單中。如圖所示,允許FlashFXP.exe和WinSCP以主動模式連接配接FTP伺服器。
FTP被動模式
上面所講的是FTP主動模式,簡單的了解就是伺服器的資料端口20主動連接配接用戶端的資料端口,來建立
資料連接配接
,用來傳輸資料,這個
資料連接配接
的建立有可能被用戶端防火牆攔截掉。為了解決這個問題就衍生出另外一種連接配接模式---被動模式。被動模式也稱為passive模式。
1. 被動模式是如何運作的呢?來看下這張圖
第一步,用戶端的指令端口N主動連接配接伺服器指令端口21,并發送PASV指令,告訴伺服器用“被動模式”,
控制連接配接
建立成功後,伺服器開啟一個資料端口P,通過PORT指令将P端口告訴用戶端。
第二步,用戶端的資料端口N+1去連接配接伺服器的資料端口P,建立
資料連接配接
資料連接配接
建立的過程中,伺服器是被動的等待用戶端來連接配接的,是以稱這種模式為被動模式。
上面這張圖是通過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伺服器呢,我個人有以下幾個使用經驗:
1. 合理的設定FTP賬号和權限
為每個賬号設定密碼和權限,比如說:如果隻是下載下傳資料,隻要給FTP賬号配置設定檔案的read權限和目錄的List列取目錄權限即可。
2. 伺服器21端口添加21端口限定
無論是主動模式還是被動模式,第一步都是用戶端連接配接伺服器的21端口建立
控制連接配接
。是以我們可以在防火牆的21端口上設定IP限定,僅允許我們的備份電腦的IP或IP段連接配接伺服器21端口,這樣其他人就無法使用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控制台的終端。
這樣我們配置的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一般是可以出去的。