首頁 > 軟體

使用Docker搭建Vsftpd 的 FTP 服務的詳細過程

2022-08-16 14:01:45

FTP 基礎 與 使用 Docker 搭建 Vsftpd 的 FTP 服務

前言

最近的工作中,需要將手機上的檔案傳送到公司的 FTP 的伺服器。按照從前的思路,自然是,先將檔案傳到電腦,再由電腦上傳到 FTP 伺服器上;經過一份搜尋後找到了 質感檔案 這個 Android 應用,這樣就可以通過無線網直接連線 FTP 伺服器了。

FTP 基礎FTP 需要兩個埠,一個是資料埠,一個是控制埠。在主動模式下,控制埠一般為21,資料埠一般為20(控制埠 - 1);在被動模式下,由伺服器端和使用者端協商決定。FTP 地址為:ftp://使用者名稱:密碼@IP地址或域名:控制埠號FTP 的傳輸方式有兩種:
(1)ASCII傳輸方式,即假定使用者正在拷貝的檔案包含簡單的ASCII碼文字,通常傳輸時會自動調整格式
(2)二進位制傳輸模式,即逐位傳輸FTP 的工作模式有兩種:
(1)PORT主動模式,意為伺服器端主動從20埠連線使用者端告知的埠
(2)PASV被動模式,意為伺服器端 告知 使用者端 地址和埠後,等待使用者端連線
(3)對比:主動模式需要使用者端必須開放埠給伺服器,伺服器要可以連上使用者端,這就要求使用者端為公網 IP(經過 NAT 後地址就變化了)且防火牆開啟。而實際情況下,公網 IP 比較少而且很多使用者端都是在防火牆內,由路由器交換機進行著 NAT,還要協調開放埠。被動模式只需要伺服器端開放埠給使用者端連線就行了,而伺服器為了便於存取,一般會放在公網,所以被動模式使用較多。主動被動模式選擇權在使用者端

此處比較奇怪,為什麼伺服器會告知使用者端地址,直接讓使用者端使用存取伺服器時的地址不可以嗎?我的思考是,機器一般無法取得自己外網的地址,而且 FTP 協定中確有要求,要傳輸地址:

(圖為 FileZilla 中被動模式傳輸檔案)

這裡可能就會好奇了,前面的地址好理解,後面的兩個數位是什麼意思。通過這篇文章得知,埠號為數位1 * 256 + 數位2,Wireshark 中的截圖也印證了這一點:

(圖為 Wireshark 中捕獲的傳輸介面)

使用 Docker 搭建 Vsftpd 的 FTP 服務

我們使用的 Docker 映象為 fauria/vsftpd

docker run -d -v /root/ftp:/home/vsftpd 
--p 60020:20 -p 60021:21 -p 61100-61105:61100-61105 
-e FTP_USER=battor -e FTP_PASS=nihaonihao123123 
-e PASV_ADDRESS=1.2.3.4 -e PASV_MIN_PORT=61100 -e PASV_MAX_PORT=61105 
--name vsftpd --restart=always fauria/vsftpd

-v 意為將容器中的路徑對映到本地檔案系統(“冒號”前為 本地檔案系統路徑,“冒號”後為 容器中的檔案系統路徑)。
-p 意為將容器的埠號對映到本地,可以看到對映了一個範圍的地址,這些埠是被動模式下開放給使用者端的,要與後面的 PASV_MIN_PORT (被動模式最小埠) 和 PASV_MAX_PORT (被動模式最大埠) 相對應。
--name 用於指定容器名稱。
--restart 意為當 Docker 程序重啟時,立刻啟動該容器。

我們自己部署伺服器時,應當儘量避免使用預設埠,以減少被駭客攻擊的風險。故此處使用 60020 和 60021,以及 61100 至 61105 埠

此外需要注意的是,PASV_ADDRESS 需要設定為伺服器對應的外網地址。否則無法連線:

(圖為 質感檔案 中連線時的情況)

然鵝在 FileZilla 使用者端測試中發現,即使 設定為 127.0.0.1,某些使用者端亦可以正常連線,猜測是因為使用者端中存在類似的設定:

(圖為 FileZilla 使用者端的設定)

後記

由於 FTP 中的檔案較為隱私,在這裡就不展示設定成功後的效果了,實際使用起來還是很方便滴。

再次推薦下 質感檔案 這個 APP 吧,介面 Material Design 風格,好看好用。支援 FTP 伺服器,SFTP 伺服器, SMB 伺服器,還可作為 FTP 伺服器使用。

參考

fauria/vsftpd

227 Entering Passive Mode 含義

到此這篇關於使用 Docker 搭建 Vsftpd 的 FTP 服務 的文章就介紹到這了,更多相關Docker 搭建 Vsftpd FTP 服務 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com