原文鏈接: https://blog.csdn.net/zhangyuan12805/article/details/71425385
ftp模式分為主動模式(active mode)和被動模式(passive mode),ftp是tcp連接,所以要進行三次握手
1. active和passive模式的配置:
在命令行輸入vim /etc/vsftpd/vsftpd.conf:
1> active mode:
pasv_enable=NO (passive模式關閉)
pasv_min_port=3000
pasv_max_port=4000
port_enable=YES (active模式開啟)
connect_from_port_20=YES (即默認情況下,FTP PORT主動模式進行數據傳輸時使用20端口(ftp-data)。YES使用,NO不使用。)
2>passive mode:
pasv_enable=YES
pasv_min_port=3000
pasv_max_port=4000
設定在PASV模式下,建立數據傳輸所可以使用port范圍的下界和上界,0 表示任意(1024 – 65535端口)。默認值為0。把端口范圍設在比較高的一段范圍內,比如3000-4000。
在linux上,如果不配置pasv_enable=NO,默認是passive模式。
2. service vsftpd restart 重啟ftp服務;
3. 通過命令行連接ftp server:
1> active mode: ftp -A 3.3.3.3
active模式連接ftp server時一定要加-A
2> passive mode: 可以直接使用 ftp 3.3.3.3 也可以使用 ftp -p 3.3.3.3
4. ftp client: 192.168.168.169 ftp server: 3.3.3.3
1> active 模式:
在active模式下,如下圖抓的包中,在命令連接部分(ftp類型的包),client端使用的端口是36439,這個端口是大於1024的任意端口,ftp server端用的端口是21:
如下圖,在active模式下,要傳輸數據時,ftp client通過第23個包通過21號端口告訴server數據傳輸聯系端口43187(大於1024的任意端口),並進行listen,server端用端口20主動和client端43187建立數據傳輸通道,並傳輸數據(第30,32,34個包)。這里是server知道了client端的數據通道監聽端口后,主動建立了數據傳輸通道,所以是主動模式。
在active模式下,數據傳輸部分(FTP-DATA類型的包),ftp-server端用的端口是20,默認情況下,FTP PORT主動模式進行數據傳輸時使用20端口,ftp-client端用的是43187端口,是上一步client發給server的數據傳輸監聽端口。
總結:active 模式
passive 模式:
在passive 模式下,如下圖所抓的包中,在命令部分(ftp類型的包),client端使用的端口是36434,這個端口是大於1024的任意端口,ftp server用的端口是21.
在passive模式下,如下圖的第28個包,是由client端發起PASV(passive mode)的數據傳輸通道連接請求,所以為被動模式
而在passive模式的數據傳輸部分(FTP-DATA類型的包),ftp-server端用的端口是3542,這個端口是在/etc/vsftpd/vsftpd.conf文件中passive模式下設置的端口范圍(3000-4000,可以自己設置)中任意選的一個端口,ftp-client端用的是53001端口,是大於1024的任意一個端口。
總結:
passive模式
一般來說,如果這個FTP服務器只對企業的內部局域網客戶提供文件傳輸的服務,那么基本上兩者的應用效果沒有很大的差異。但是如果企業網絡外部的用戶也 需要通過互聯網與FTP服務器進行文件傳輸的話,就會有很大的不同。這主要是因為,在數據通道建立的過程中,客戶端會在另一個端口上監聽等待連接,並利用 命令連接通道告訴服務器其監聽的端口好。然后企業的邊界路由器會將FTP的IP地址轉換為合法的公網IP地址(假設企業由於公網IP地址有限,在邊界路由 器上通過NAT服務向外部用戶提供FTP連接)。如果此時采用的是自動操作模式的話,則在連接這個數據通道的過程中FTP服務器會主動跟邊界路由器的端口 進行通信(因為FTP服務器認為這台邊界路由器,其實就是NAT服務器,就是FTP客戶段)。但是實際上不是,而且也有可能沒有啟用這個端口。為此客戶端 與FTP服務器之間的連接最終沒有建立起來。所以說,如果采用主動操作模式的話,當FTP服務器部署在NAT等服務器后面的時候,則FTP服務器與客戶端 之間只能夠建立命令連接通道,而無法建立起數據傳輸通道。如果FTP服務器與客戶端之間還有防火牆的話,在連接的過程中也會出現以上類似的情況。
而如果是采用被動操作模式的話,是客戶端主動跟服務期的20號端口進行連接的。為此在數據傳輸通道建立的過程中,即使中間有NAT服務器或者防火牆,也 會准確無誤的連接到FTP服務器的數據傳輸接口。所以說,如果在客戶端與FTP服務器之間存在防火牆或者NAT服務器等類似設備的話,那么在FTP服務器 部署的時候,最好采用被動操作模式。否則的話,很可能只能夠建立命令連接通道,而無法進行數據傳輸。
在 FTP服務器部署的時候,其默認采用的是主動操作模式。如果企業FTP服務器的用戶都是在內部網絡中的,即不用像外部網絡的用戶提供FTP連接的需求,那 么采用這個默認操作方式就可以了。但是如果一些出差在外的員工或者員工在家庭辦公時也需要訪問企業內部的FTP服務器,而此時出於安全的考慮或者公網IP 地址數量的限制,企業往往會把FTP服務器部署在防火牆或者NAT服務器的后面,此時這個主動操作模式就不行了。如果企業中通過互聯網來訪問企業內部 FTP服務器的員工比較多的時候,那么最好能夠一勞永逸的解決這個問題,即在FTP服務器上進行設置,強制客戶端在連接的時候采用被動操作模式。相反如果 用戶比較少的話,而且用戶又具有一定的計算機知識,那么可以不在服務器上進行設置。而是在連接的過程中,通過FTP客戶端來設置。如在某些FTP客戶端 上,會有一個Passive Transfers等類似的選項。選中這個選項就表示以被動操作方式進行傳輸。而沒有選中這個選項的客戶端則仍然采用主動操作模式來進行連接。
總之,在FTP服務器部署的時候考慮是要采用主動操作模式還是被動操作模式,只需要記住一個原則,即如果把FTP服務器部署在防火牆或者NAT服務器的背 后,則采用主動操作模式的客戶端只能夠建立命令連接而無法進行文件傳輸。如果部署完FTP服務器后,系統管理員發現用戶可以連接上FTP服務器,可以查看 目錄下的文件,但是卻無法下載或者上傳文件,如果排除權限方面的限制外,那么很有可能就是這個操作模式選擇錯誤。系統管理員告訴用戶選擇合適的操作模式, 基本上就可以解決文件傳輸的問題了。