基於Centos7、vsftpd3.0.2
0、前導:
- ftp通信中存在兩種連接:
- 控制連接:用於傳遞控制命令及其他小數據量通信。
- 數據連接:用於傳輸文件數據流。
- 根據數據連接的建立方式分為主動模式(active mode)和被動模式(passive mode),主動和被動都是以ftp服務端為中心來說的。
- 主動模式:顧名思義,主動模式就是ftp-erver主動發起通向ftp-client的
數據連接
。 - 被動模式:同理,被動模式就是ftp-erver不發起連接,而是被動接受ftp-client發起的
數據連接
。
- 主動模式:顧名思義,主動模式就是ftp-erver主動發起通向ftp-client的
- ftp仍然屬於tcp連接,故需三次握手。
一、主動模式:
vim /etc/vsftpd/vsftpd.conf
pasv_enable=NO #1.關閉passive模式
port_enable=YES #2.啟用active模式
connect_from_port_20=YES #3.允許從20端口連接,主動模式使用20端口進行數據傳輸
pasv_min_port=3000 #active模式下屬無效配置
pasv_max_port=4000 #active模式下屬無效配置
systemctl restart vsftpd #重啟ftp服務
ftp -A 192.168.50.87 #以active模式連接ftp-server,一定要加參數【-A】
連接過程:
- client用大於1024的任意端口(如1025)連接server的21端口,建立控制連接(controll-connection),用於控制通信。
- client另起一個大於1024的端口(如1026),並通過控制連接將此端口告訴server,server使用其20端口
主動
與此端口建立數據連接(data-connection)。
二、被動模式:
vim /etc/vsftpd/vsftpd.conf
pasv_enable=YES #1.開啟被動模式,如果不配置pasv_enable=NO,默認是passive模式
#默認值為0,表示取任意(1024 – 65535端口),把端口范圍設在比較高的一段范圍內,比如3000-4000
pasv_min_port=3000 #2.指定數據連接端口下界
pasv_max_port=4000 #3.指定數據連接端口上界
systemctl restart vsftpd #重啟ftp服務
ftp -p 192.168.50.87 #以passive模式連接ftp-server,【-p】為可選參數
連接過程:
-
client用大於1024的任意端口(如1025)連接server的21端口,建立控制連接(controll-connection),用於控制通信。
-
client告訴server要發起數據通信,此時server就從指定的端口范圍內選擇一個端口(如3001),並對其監聽,而后將此端口告訴client。client另起一個大於1024的端口(如1026),主動去連接server的3001端口,server被動接受並建立數據連接。
三、區別:
- 若ftp服務器只在局域網內使用,任選一種模式都沒問題。
- 若ftp要通過互聯網提供服務,由於邊界路由器、NAT、防火牆等機制的存在,主動模式下server會誤認為邊界路由器就是client,所以會試圖用自己的20端口去和邊界路由器的1026端口建立數據連接,而不能抵達真實client,造成能連上server但是卻不能上傳、下載、新建目錄的問題。
- 若使用被動模式則不存在這樣的問題,因為數據連接由client主動發起,能准確連接上server監聽的數據端口。