1. 程式人生 > 實用技巧 >ftp之主被動模式

ftp之主被動模式

主動模式:
(1)客戶端在非特殊埠N(N>1024)連結服務端的21埠(傳輸命令)
(2)客戶端開啟N+1埠,並通過N埠向服務端21埠傳送PORT命令,將接收資料的N+1埠告知服務端
(3)服務端反過來用20埠(預設)主動連線客戶端N+1埠進行資料傳輸

被動模式:
(1)客戶端開啟N和N+1埠(N>1024)
(2)客戶端N埠連線服務端21埠,併發送PASV命令
(3)服務端開啟任意埠P(P>1024),併發送PORT命令給客戶端,告訴客戶端開啟了P埠用於傳輸資料
(4)客戶端N+1埠主動連線服務端P埠,進行資料傳輸

  原文連結: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伺服器,可以檢視 目錄下的檔案,但是卻無法下載或者上傳檔案,如果排除許可權方面的限制外,那麼很有可能就是這個操作模式選擇錯誤。系統管理員告訴使用者選擇合適的操作模式, 基本上就可以解決檔案傳輸的問題了。