文章目錄
- 前言
- 一、FTP概述
- 二、FTP工作原理
- 2.1 FTP的作用與模式
- 2.2 FTP工作流程
- 2.2.1 主動模式(PORT模式)
- 2.2.2 被動模式(PASV模式)
- 2.2.3 對比表格
- 2.2.4 如何選擇?
- 2.2.5 補充:現代FTP服務器的常見做法
- 三、FTP服務搭建與配置
- 3.1 安裝前準備
- 3.1.1 關閉防火墻與SELinux
- 3.1.2 安裝VSFTPD
- 3.1.3 備份配置文件
- 3.2 匿名用戶配置
- 3.2.1 修改配置文件
- 3.2.2 設置目錄權限
- 3.2.3 匿名訪問測試
- 3.3 本地用戶配置
- 3.3.1 修改配置文件
- 3.3.2 用戶登錄測試
- 3.3.2.1 測試上傳下載
- 3.3.3 修改默認根目錄
- 3.3.4 用戶列表控制
- 四、總結
前言
FTP(File Transfer Protocol)作為經典的文件傳輸協議,至今仍在許多場景中發揮著重要作用。無論是網站維護、數據備份還是內部文件共享,FTP都因其簡單、穩定而備受青睞。本文基于教學實踐,系統梳理了FTP的基本概念、工作原理、服務搭建與配置方法,旨在幫助讀者快速掌握FTP服務的核心知識與實操技能。
一、FTP概述
FTP(File Transfer Protocol,文件傳輸協議)是一種典型的C/S架構的應用層協議,通過服務端和客戶端軟件共同實現文件傳輸功能。FTP使用TCP協議,端口20和21,確保連接可靠且面向連接。
- 21端口:用于傳輸控制指令。
- 20端口:用于傳輸數據。
FTP支持兩種傳輸模式:
- 主動模式(Standard/Active):客戶端發送PORT命令,服務器主動連接客戶端進行數據傳輸。
- 被動模式(Passive/PASV):客戶端發送PASV命令,服務器開放隨機端口等待客戶端連接。
二、FTP工作原理
2.1 FTP的作用與模式
FTP用于在Internet上傳送文件,常見服務端軟件包括:
- Windows:Serv-U、FileZilla Server
- Linux:VSFTP(Very Secure FTP)、ProFTPD
FTP使用TCP協議的20和21端口進行通信:
- 20端口用于數據傳輸;
- 21端口用于控制命令傳輸。
2.2 FTP工作流程
FTP會話包含兩個通道:控制通道和數據傳輸通道。
2.2.1 主動模式(PORT模式)
- 控制連接:由客戶端(Client)向服務器的21端口發起。
- 數據連接:由服務器(Server)向客戶端的指定端口發起。
- 客戶端連接到服務器的21端口,發送用戶名和密碼;
- 客戶端開放一個隨機高位端口(1024以上),并通過PORT命令告知服務器;
- 服務器使用20端口主動連接客戶端的指定端口進行數據傳輸。
-
優點
- 對服務器網絡環境要求低:服務器只需要開放21(控制)和20(數據)端口即可正常工作。客戶端負責接收來自外部的連接,這在純服務器內網環境中是優點。
-
缺點
- 客戶端防火墻/NAT不友好:這是最大的缺點。在現代網絡環境中,客戶端通常位于防火墻或NAT路由器之后。
- 問題:當服務器(外網)嘗試主動連接到客戶端告知的那個內部隨機端口(1025)時,客戶端的防火墻會認為這是一個未經請求的入站連接,從而將其阻斷,導致連接失敗。
- 現象:客戶端能列出目錄(
LIST
命令使用控制連接),但無法傳輸數據(RETR
,STOR
命令需要數據連接)。
- 安全性較差:服務器需要主動向外連接,從安全策略上講,這意味著服務器需要信任客戶端,增加了潛在的攻擊面。
- 客戶端防火墻/NAT不友好:這是最大的缺點。在現代網絡環境中,客戶端通常位于防火墻或NAT路由器之后。
2.2.2 被動模式(PASV模式)
-
控制連接:由客戶端向服務器的21端口發起(與主動模式相同)。
-
數據連接:由客戶端向服務器的一個隨機端口發起。
-
工作過程:
- 客戶端連接到服務器的21端口,發送用戶名和密碼;
- 客戶端發送PASV命令;
- 服務器開放一個隨機高位端口(1024以上)并告知客戶端;
- 客戶端連接該端口進行數據傳輸。
-
優點
- 對客戶端防火墻/NAT友好:這是被動模式成為現代默認選擇的主要原因。連接建立的方向與HTTP等普通網絡請求一致,都是客戶端主動“出站”連接。客戶端的防火墻只會檢查出站連接,通常都會放行,因此成功率高。
- 客戶端安全性更好:客戶端不再需要開放大量隨機端口來接收外部入站連接,減少了暴露給外部的風險。
-
缺點
-
服務器防火墻/NAT配置復雜:
- 問題:服務器需要在防火墻上開放一個范圍的高位隨機端口(例如 30000-35000),而不僅僅是一個20端口,并將這些端口轉發到FTP服務器上。這增加了服務器端的維護復雜度和安全風險(開放端口范圍越大,潛在風險越高)。
- 現象:服務器能正常接受控制連接,但在建立數據連接時失敗。
-
對服務器端網絡環境要求高:如果服務器位于NAT網關后面,配置會非常麻煩,需要將控制端口和數據端口范圍都正確地進行NAT映射。
-
注:主動與被動是相對于服務器而言的。服務器主動連接客戶端為主動模式,客戶端連接服務器為被動模式。
2.2.3 對比表格
特性 | 主動模式 (Active) | 被動模式 (Passive) |
---|---|---|
數據連接發起方 | 服務器 | 客戶端 |
服務器端口 | 控制:21, 數據:20 | 控制:21,數據:一個隨機高位端口 |
客戶端端口 | 控制:隨機 -> 21,數據:隨機 <- 20 | 控制:隨機 -> 21,數據:隨機 -> 服務器隨機端口 |
防火墻友好性 | 對客戶端防火墻極不友好 | 對客戶端防火墻非常友好 |
適用場景 | 客戶端沒有防火墻(如機房內部網絡) | 現代通用場景(客戶端在NAT/防火墻后,如家庭/公司網絡) |
服務器配置 | 簡單(只需開放20、21端口) | 復雜(需開放21端口+一個隨機端口范圍) |
安全性 | 較差(服務器需主動向外連接) | 較好(連接方向符合常規出站請求) |
2.2.4 如何選擇?
- 絕大多數情況下,應使用被動模式(PASV)。因為現在的用戶幾乎都處于路由器(NAT)和防火墻的保護之下,被動模式是保證FTP可用的唯一選擇。
- 只有在你知道客戶端網絡環境非常開放(沒有防火墻)且追求服務器簡單配置時,才考慮使用主動模式。例如,在兩個內部服務器之間進行數據傳輸。
2.2.5 補充:現代FTP服務器的常見做法
為了解決被動模式的服務器端防火墻問題,現代FTP服務器軟件(如 vsftpd, FileZilla Server)通常提供以下配置選項:
- 指定被動模式端口范圍:在服務器配置中限定一個較小的端口范圍(如 50000-55000),然后在服務器的防火墻中只開放這個特定的端口范圍。
- 被動模式外部IP地址:如果服務器 behind NAT,需要設置
pasv_address
為服務器的公網IP地址,這樣客戶端才能連接到正確的地址。
三、FTP服務搭建與配置
3.1 安裝前準備
3.1.1 關閉防火墻與SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
3.1.2 安裝VSFTPD
yum install -y vsftpd
systemctl start vsftpd
systemctl enable vsftpd
3.1.3 備份配置文件
cd /etc/vsftpd/
cp vsftpd.conf vsftpd.conf.bak
3.2 匿名用戶配置
3.2.1 修改配置文件
編輯 /etc/vsftpd/vsftpd.conf
:
anonymous_enable=YES #開啟匿名用戶訪問。默認已開啟
write_enable=YES #開放服務器的寫權限(若要上傳,必須開啟)。默認已開啟
anon_umask=022 #設置匿名用戶所上傳數據的權限掩碼(反掩碼)。 022--》755
anon_upload_enable=YES #允許匿名用戶.上傳文件。默認已注釋,需取消注釋
anon_mkdir_write_enable=YES #允許匿名用戶創建(上傳)目錄。默認已注釋,需取消注釋
anon_other_write_enable=YES #允許刪除、重命名、覆蓋等操作。需添加
3.2.2 設置目錄權限
chmod 777 /var/ftp/pub/
3.2.3 匿名訪問測試
在Windows命令行中:
ftp 192.168.10.120 #ip為服務端ip
用戶名:ftp
密碼:(直接回車)
在Windows的傳輸過程中需要先進入pub目錄,否則會因為沒有權限而無法上傳下載。
3.3 本地用戶配置
3.3.1 修改配置文件
編輯 /etc/vsftpd/vsftpd.conf
:
local_enable=YES
anonymous_enable=NO
write_enable=YES
local_umask=077
chroot_local_user=YES
allow_writeable_chroot=YES
注釋以下行(若存在):
# anon_mkdir_write_enable=YES
# anon_other_write_enable=YES
重啟服務:
systemctl restart vsftpd
3.3.2 用戶登錄測試
ftp 192.168.10.12
用戶名:zhangsan
密碼:(輸入對應密碼)
或使用瀏覽器訪問:
ftp://zhangsan@192.168.10.120
3.3.2.1 測試上傳下載
ftp> pwd #匿名訪問ftp的根目錄為Linux系統的/var/ftp/目錄
ftp> ls #查看當前目錄
ftp> cd pub #需要進去才能有效,因為僅設置了/var/ftp/pub目錄的777權限
ftp> get文件名 #下載文件到當前Windows本地目錄
ftp> put 文件名 #上傳文件到ftp目錄
ftp> quit #退出
3.3.3 修改默認根目錄
anon_root=/var/www/html # 匿名用戶根目錄
local_root=/var/www/html # 本地用戶根目錄
3.3.4 用戶列表控制
編輯 /etc/vsftpd/user_list
,添加用戶:
zhangsan
編輯 vsftpd.conf
:
userlist_enable=YES
userlist_deny=NO # 設置為白名單模式
四、總結
FTP作為一種經典的文件傳輸協議,在內部網絡和特定場景中仍有廣泛應用。通過本文的介紹,我們可以了解到:
- FTP的兩種工作模式(主動/被動)及其區別;
- VSFTPD的安裝與基本配置方法;
- 如何配置匿名訪問和本地用戶訪問;
- 如何通過用戶列表實現黑白名單控制。
掌握FTP服務的搭建與配置,不僅有助于理解傳統網絡服務的運作方式,也能為實際工作中的文件傳輸需求提供可靠解決方案。盡管如今SFTP、HTTP等方式逐漸普及,FTP仍在某些環境中保持著不可替代的地位。
最后,希望大家多多實踐,夯實基礎,聚沙成塔,與君共勉之!