什麼叫做PASV mode(被動模式傳送)?他是如何工作的?
FTP的連接一般是有兩個連接的,一個是客戶程和服務器傳輸命令的,另一個是數據傳送的連接。FTP服務程序一般會支持兩種不同的模式,一種是Port模式,一種是Passive模式(Pasv Mode),我先說說這兩種不同模式連接方式的分別。
先假設客戶端為C,服務端為S.
Port模式:
當客戶端C向服務端S連接後,使用的是Port模式,那麼客戶端C會發送一條命令告訴服務端S(客戶端C在本地打開了一個端口N在等著你進行數據連接),當服務端S收到這個Port命令後 就會向客戶端打開的那個端口N進行連接,這種數據連接就生成了。
Pasv模式:
當客戶端C向服務端S連接後,服務端S會發信息給客戶端C,這個信息是(服務端S在本地打開了一個端口M,你現在去連接我吧),當客戶端C收到這個信息後,就可以向服務端S的M端口進行連接,連接成功後,數據連接也建立了。
從上面的解釋中,大家可以看到兩種模式主要的不同是數據連接建立的不同,對於Port模式,是客戶端C在本地打開一個端口等服務端S去連接建立數據連接;而Pasv模式就是服務端S打開一個端口等待客戶端C去建立一個數據連接。
我需要把傳送模式設置成PASV mode嗎?
如果您連接到INTERNET的方式如下圖,你需要設置成為PASV mode模式傳送
路由上有兩個ip一個是內網ip(也就是你的網關地址)另外一個是外網IP,你所有LAN中的計算機都是共享這個218.63.1.5訪問INTERNET的(中間通過了192.168.1.1這個網關),讓我們來看一個連接的詳細過程,以便您
更進一步了解為什麼需要設置成為PASV mode 傳送:
當您通過下載工具或使用浏覽器下載影片的時候就開始連接FTP服務器, 當FTP服務收到你的連接請求後發送應答信息給客戶並開始等待用戶的認證信息,-->認證通過後開始建立數據連接 如果你不是設置成為pasv模式,那麼客戶段(下載工具)會在本地計算機開一個數據端口,然後發送一條“命令”給FTP服務段,(我已打開了n端口你現在可以連接我),那麼FTP服務器段就開始連接你ip地址的N端口,(但是連接是失敗的) 因為你是通過192.168.1.1 這個網關(你的路由設備)訪問internet的ftp服務段他實際上是同你的外網地址為218.63.1.5的路由設備連接,根本就連接不上你下載工具中打開的端口,例如你使用的是 192.168.1.2 這個客戶機,FTP服務段此時無法同你計算機192.168.1.2)監聽端口N連接上,所以此時你會看到服務器反饋的錯誤信息,提示你192.168.1.2打開的端口無法連接之類的, 信息此時你就需要把傳送模式設置成為PASV模式,而如果你使用的是PASV模式那麼當你ftp通過認證後,客戶段首先向服務器發送一條PASV命令,服務段接受到命令後打開一個端口並告訴客戶段“我已打開了一個端口,你此時可以來連接了" 客戶段(下載工具)接受到信息後,就去連接服務段已經打開了的端口,從而完成數據連接,所有ftp下載的數據流都將通過這個端口傳送
而且在用iptables做NAT時,應該裝載這兩個模塊(ip_nat_ftp、ip_conntrack_ftp),才能正常連到ftp服務器。否則pasv被動模式都無法連接到ftp服務器。
FTP模式與數據端口
FTP 分為兩類,PORT FTP和PASV FTP,PORT FTP是一般形式的FTP。這兩種FTP在建立控制連接時操作是一樣的,都是由客戶端首先和FTP服務器的控制端口(默認值為21)建立控制鏈接,並通過此鏈接進行傳輸操作指令。它們的區別在於使用數據傳輸端口(ftp- data)的方式。PORT FTP由FTP服務器指定數據傳輸所使用的端口,默認值為20。PASV FTP由FTP客戶端決定數據傳輸的端口。 PASV FTP這種做法,主要是考慮到存在防火牆的環境下,由客戶端與服務器進行溝通(客戶端向服務器發出數據傳輸請求中包含了數據傳輸端口),決定兩者之間的數據傳輸端口更為方便一些。
port_enable=YES|NO
如果你要在數據連接時取消PORT模式時,設此選項為NO。默認值為YES。
connetc_from_port_20=YES|NO
控制以PORT模式進行數據傳輸時是否使用20端口(ftp-data)。YES使用,NO不使用。默認值為NO,但RHL自帶的vsftpd.conf文件中此參數設為YES。
ftp_data_port=port number
設定ftp數據傳輸端口(ftp-data)值。默認值為20。此參數用於PORT FTP模式。
port_promiscuous=YES|NO
默認值為NO。為YES時,取消PORT安全檢查。該檢查確保外出的數據只能連接到客戶端上。小心打開此選項。
pasv_enable=YES|NO
YES,允許數據傳輸時使用PASV模式。NO,不允許使用PASV模式。默認值為YES。
pasv_min_port=port number
pasv_max_port=port number
設定在PASV模式下,建立數據傳輸所可以使用port范圍的下界和上界,0 表示任意。默認值為0。把端口范圍設在比較高的一段范圍內,比如50000-60000,將有助於安全性的提高。
pasv_promiscuous=YES|NO
此選項激活時,將關閉PASV模式的安全檢查。該檢查確保數據連接和控制連接是來自同一個IP地址。小心打開此選項。此選項唯一合理的用法是存在於由安全隧道方案構成的組織中。默認值為NO。
pasv_address=
此選項為一個數字IP地址,作為PASV命令的響應。默認值為none,即地址是從呼入的連接套接字(incoming connectd socket)中獲取。