ftp 主動模式和被動模式

2021-09-30 08:38:31 字數 3972 閱讀 7953

轉貼:

ftp的特殊性:

大多數的tcp服務是使用單個的連線,一般是客戶向伺服器的乙個周知埠發起連線,然後使用這個連線進行通訊。但是,ftp協議卻有所不同,它使用雙向的多個連線,而且使用的埠很難預計。一般,ftp連線包括:

乙個控制連線(control connection)

這個連線用於傳遞客戶端的命令和伺服器端對命令的響應。它使用伺服器的21埠,生存期是整個ftp會話時間。

幾個資料連線(data connection)

這些連線用於傳輸檔案和其它資料,例如:目錄列表等。這種連線在需要資料傳輸時建立,而一旦資料傳輸完畢就關閉,每次使用的埠也不一定相同。而且,資料連線既可能是客戶端發起的,也可能是伺服器端發起的。

在ftp協議中,控制連線使用周知埠21,因此使用isa的ip packet filter就可以這種連線進行很好的安全保護。相反,資料傳輸連線的目的埠通常實現無法知道,因此處理這樣的埠**非常困難。ftp協議使用乙個標準的埠21作為ftp-data埠,但是這個埠只用於連線的源位址是伺服器端的情況,在這個埠上根本就沒有監聽程序。ftp的資料連線和控制連線的方向一般是相反的,也就是說,是伺服器向客戶端發起乙個用於資料傳輸的連線。連線的埠是由伺服器端和客戶端協商確定的。ftp協議的這個特徵對isa**以及防火牆和nat的配置增加了很多困難。

除此之外,還有另外一種ftp模式,叫做被動模式(passive mod)。在這種模式下,資料連線是由客戶程式發起的,和剛才討論過的模式(我們可以叫做主動模式)相反。是否採取被動模式取決於客戶程式,在ftp命令列中使用passive命令就可以關閉/開啟被動模式。

前面我們講過,ftp協議的資料傳輸存在兩種模式:主動模式和被動模式。這兩種模式發起連線的方向截然相反,主動模式是從伺服器端向客戶端發起;被動模式是客戶端向伺服器端發起連線。

我們回到isa的情況,如果採用被動模式,由於iis是完全隨機的選擇乙個埠,並告知客戶,然後客戶進行主動連線,這就意味著在isa上,你要讓所有的埠都允許動態入站連線才行,這樣肯定不行,因為太危險了,等於開啟了所有的埠連線。

如果採用主動模式(port mode),iis選擇好埠後,主動與客戶進行連線,這時候不需要像pasv模式那樣開啟所有的動態入站連線,而且正好相反,我們需要開啟所有的動態出站連線即可,安全性增加很多。而且由isa的ip packet filter只對isa本機起作用,不會造成區域網內的客戶「放了羊」。

網位址的port 21,在dos下,你可以通過netstat -na > abc.txt,然後開啟這個檔案,你會看到0.0.0.0 21 listening字樣。

輸入如下命令:

net stop msftpsvc (停止ftp服務)

進入/inetpub/adminscripts/目錄

cscript adsutil.vbs set msftpsvc/disablesocketpooling true (停止偵聽)

net start msftpsvc (啟動ftp服務)

(2)在iis控制台裡面,ftp->property->ftp site->ip address改為內網位址。現在,ftp服務只偵聽內網ip的21號埠了。

(3)大家可能這時候有疑問,如果是iis主動連線客戶端,那客戶端的防火牆是不是會阻止這個連線(pasv模式不存在這個問題)。為了防止這種情況,我們可以強制iis不能與客戶端的任意埠進行連線,而只有客戶端連線iis的埠進行資料傳輸。這樣就可以解決port mode與客戶端防火牆的衝突。方法:修改註冊

這是我的解決辦法,但是並不完美,主要是:

(1)客戶不能使用pasv方法進行連線,原因上面已經講了。

(2)由於第五條,所以isa伺服器隨著保證了對外部訪問的限制,卻無法限制isa本機對外部的訪問。

我也把我的方法做了一下實驗,使用serv-u做的,有一點錯誤,不過終歸做了出來,下面總結一下:

pasv伺服器放在isa後面,其實就是要解決兩個問題:

1。pasv的埠。我上面的方法提出使用secondary connection,但事實證明不對,應該每個pasv埠都建立一條primary connection,然後分別建立server publishing rules,有多少個pasv埠,就要建立多少條。

這裡還可以引出另乙個話題,就是對web publishing rules的運用,tony你應該知道,通過web publishing rules也可以發布ftp伺服器,但rule裡面只給了乙個ftp埠的選項,很明顯,這是為port模式的ftp伺服器準備的,因為port模式的資料連線是由伺服器發起的,在伺服器一邊,不存在穿過防火牆的問題。

需要好好考慮的是如何通過那個只能填乙個埠的選項來發布隨機的pasv埠?我從今天的實驗找到了一點靈感,就是也象上面說的那樣,每個pasv埠都設定一條web publishing rules!我還未做這個實驗,還不能證實這樣做行不行,相信晚上就會有結果了。

當然,還需要考慮如何控制pasv模式埠的範圍,serv-u可以設定,而iis的ftp不行。

幸好,還是有乙個好訊息,就是serv-u本身具有返回isa外網位址這樣的功能,方法是先選中新建ftp伺服器的屬性,在domain標籤裡選擇「enable dynamic dns」,此時會出現第二個標籤,叫「dynamic dns」,然後到tz0.com申請動態網域名稱,申請後會得到乙個key,在此標籤中填入此key即可。最後一步,是到新建伺服器的settings屬性中,選擇advanced標籤,選中「allow passive mode data transfer」,旁邊的ip位址框留空。這個框對於撥號使用者不用填,只有出口使用固定位址才需要填。

這樣,serv-u向客戶端返回ip和埠前,會先向tz0.com查詢到isa外網的位址,再傳送給客戶端。

解決了這兩個問題,剩下的工作就簡單了。

從以上內容也可以說明一點,從內網不能發布iis的ftp伺服器,因為iis既沒有選項可以選擇pasv埠的範圍,也沒有辦法讓其返回isa外網的位址。而serv-u這兩條都可以滿足。當然,在微軟的**上也可能有方法解決iis的這兩個問題。

發布ftp伺服器的時候,要注意ftp伺服器有port和pasv兩種模式。兩者的共同點,是都使用21埠進行使用者驗證及管理,差別在於傳送資料的方式不同,port模式的ftp伺服器資料埠固定在20,而pasv模式則在1025-65535之間隨機。發布的時候要考慮這個差別。

如果ftp伺服器在內部網路中,在建立server publish rules時(雖然web publish rules也能發布ftp伺服器,但它並沒有提供對port和pasv模式的處理),protocol definitions中的21 inbound條目要建立乙個secondary connection,為20埠上的inbound或1025-65535埠之間的inbound。

如果ftp伺服器建立在isa伺服器上,就需要在ip packet filters中設定相關的條目,對於port模式,很簡單,開放20 inbound就是,但pasv模式就麻煩一點,因為ip packet filters不能設定埠段,但我們也不可能把幾萬個埠逐個寫一遍,只能把local port設定為dynamic,remote port設定為all ports,當然,對安全性這是個損害。

幸運的是,有些pasv模式的ftp伺服器能夠設定pasv模式埠的範圍,比如serv-u,它能夠把pasv模式埠控制在最多50個埠範圍內,如果為serv-u設定的併發使用者數不多,那麼我們就可以為每個pasv埠寫一條filter,不需要開放所有的埠了。如果使用iis的ftp伺服器,這個ftp伺服器沒有提供選擇pasv模式埠的功能,只能如上所述那樣,開放dynamic和all ports。

從你上面的出錯資訊來看,你應該是使用ie來訪問ftp伺服器吧。ie的ftp客戶端與其它專業ftp客戶端不同,不能夠自動檢測ftp伺服器的型別以及根據伺服器的型別改變客戶端的種類。ie只提供了乙個手工選項來改變port和pasv客戶端角色,就是internet選項->高階->為ftp站點啟用資料夾檢視,選擇它,ie為pasv模式客戶端,不選則為port客戶端。你需要根據伺服器的型別手工更改這個選項。如果伺服器的出口是adsl類的鏈路,還要把「使用被動ftp(為防火牆和dsl數據機相容性)」一項選上,這兩個選項只在ie5。5以上版本提供。

FTP主動模式和被動模式

ftp主動模式和被動模式 ftp是僅基於tcp的服務,不支援udp。與眾不同的是ftp使用2個埠,乙個資料埠和乙個命令埠 也可叫做控制埠 通常來說這兩個埠是21 命令埠 和20 資料埠 但ftp工作方式的不同,資料埠並不總是20。這就是主動與被動ftp的最大不同之處。一 主動ftp 主動方式的ftp...

ftp 主動模式和被動模式

專案中使用ftp client連線ftp伺服器上傳檔案時,遇到ftp能連線上,但是上傳失敗,執行 ftp.storefile filename,input 返回false,新增 ftp.enterlocalpassivemode 切換為被動模式上傳成功。折騰了幾個小時,於是覺得有必要了解下ftp主動...

ftp主動模式和被動模式

ftp是檔案傳輸協議的簡稱,ftp傳輸協議有著眾多的優點所以傳輸檔案時使用ftp協議的軟體很多,ftp協議使用的埠是21 也稱為控制埠 其實還有乙個資料埠20,根據ftp工作方式的不同,資料埠也不都是20,主動模式的被動模式使用的資料埠是不一樣的,下面我就一步一步介紹主動ftp模式和被動ftp模式的...