時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)
有很多人對(duì)FTP的問題多多,大家參考、討論一下。我的環(huán)境如下:
SERVER:ISA SP1,IIS
CLIENT:Windows 2000 and XP, CuteFTP
本文主要討論ISA和FTP在同一臺(tái)機(jī)器上的處理辦法。
大多數(shù)的TCP服務(wù)是使用單個(gè)的連接,一般是客戶向服務(wù)器的一個(gè)周知端口發(fā)起連接,然后使用這個(gè)連接進(jìn)行通訊。但是,F(xiàn)TP協(xié)議卻有所不同,它使用雙向的多個(gè)連接,而且使用的端口很難預(yù)計(jì)。一般,F(xiàn)TP連接包括:
一個(gè)控制連接(control connection)
這個(gè)連接用于傳遞客戶端的命令和服務(wù)器端對(duì)命令的響應(yīng)。它使用服務(wù)器的21端口,生存期是整個(gè)FTP會(huì)話時(shí)間。
幾個(gè)數(shù)據(jù)連接(data connection)
這些連接用于傳輸文件和其它數(shù)據(jù),例如:目錄列表等。這種連接在需要數(shù)據(jù)傳輸時(shí)建立,而一旦數(shù)據(jù)傳輸完畢就關(guān)閉,每次使用的端口也不一定相同。而且,數(shù)據(jù)連接既可能是客戶端發(fā)起的,也可能是服務(wù)器端發(fā)起的。
在FTP協(xié)議中,控制連接使用周知端口21,因此使用ISA的IP PACKET FILTER就可以這種連接進(jìn)行很好的安全保護(hù)。相反,數(shù)據(jù)傳輸連接的目的端口通常實(shí)現(xiàn)無(wú)法知道,因此處理這樣的端口轉(zhuǎn)發(fā)非常困難。FTP協(xié)議使用一個(gè)標(biāo)準(zhǔn)的端口21作為ftp-data端口,但是這個(gè)端口只用于連接的源地址是服務(wù)器端的情況,在這個(gè)端口上根本就沒有監(jiān)聽進(jìn)程。FTP的數(shù)據(jù)連接和控制連接的方向一般是相反的,也就是說(shuō),是服務(wù)器向客戶端發(fā)起一個(gè)用于數(shù)據(jù)傳輸?shù)倪B接。連接的端口是由服務(wù)器端和客戶端協(xié)商確定的。FTP協(xié)議的這個(gè)特征對(duì)ISA轉(zhuǎn)發(fā)以及防火墻和NAT的配置增加了很多困難。
除此之外,還有另外一種FTP模式,叫做被動(dòng)模式(passive mod)。在這種模式下,數(shù)據(jù)連接是由客戶程序發(fā)起的,和剛才討論過(guò)的模式(我們可以叫做主動(dòng)模式)相反。是否采取被動(dòng)模式取決于客戶程序,在ftp命令行中使用passive命令就可以關(guān)閉/打開被動(dòng)模式。
前面我們講過(guò),F(xiàn)TP協(xié)議的數(shù)據(jù)傳輸存在兩種模式:主動(dòng)模式和被動(dòng)模式。這兩種模式發(fā)起連接的方向截然相反,主動(dòng)模式是從服務(wù)器端向客戶端發(fā)起;被動(dòng)模式是客戶端向服務(wù)器端發(fā)起連接。
?
我們回到ISA的情況,如果采用被動(dòng)模式,由于IIS是完全隨機(jī)的選擇一個(gè)端口,并告知客戶,然后客戶進(jìn)行主動(dòng)連接,這就意味著在ISA上,你要讓所有的端口都允許動(dòng)態(tài)入站連接才行,這樣肯定不行,因?yàn)樘kU(xiǎn)了,等于打開了所有的端口連接。
如果采用主動(dòng)模式(PORT Mode),IIS選擇好端口后,主動(dòng)與客戶進(jìn)行連接,這時(shí)候不需要像PASV模式那樣打開所有的動(dòng)態(tài)入站連接,而且正好相反,我們需要打開所有的動(dòng)態(tài)出站連接即可,安全性增加很多。而且由ISA的IP PACKET FILTER只對(duì)ISA本機(jī)起作用,不會(huì)造成局域網(wǎng)內(nèi)的客戶"放了羊"。
所以,我個(gè)人這樣做的:
?。?)由于IIS和ISA都在一臺(tái)機(jī)器上,所以它倆都在偵聽21號(hào)端口(IIS默認(rèn)情況下會(huì)偵聽所有地址的21端口),所以我們首先要讓IIS只偵聽內(nèi)網(wǎng)地址的PORT 21,在DOS下,你可以通過(guò)NETSTAT -NA > abc.txt,然后打開這個(gè)文件,你會(huì)看到0.0.0.0 21 LISTENING字樣。
輸入如下命令:
net stop msftpsvc (停止FTP服務(wù))
進(jìn)入\Inetpub\adminscripts\目錄
cscript adsutil.vbs set msftpsvc/disablesocketpooling true (停止偵聽)
net start msftpsvc (啟動(dòng)FTP服務(wù))
?。?)在IIS控制臺(tái)里面,ftp->Property->FTP Site->IP Address改為內(nèi)網(wǎng)地址?,F(xiàn)在,F(xiàn)TP服務(wù)只偵聽內(nèi)網(wǎng)IP的21號(hào)端口了。
(3)大家可能這時(shí)候有疑問,如果是IIS主動(dòng)連接客戶端,那客戶端的防火墻是不是會(huì)阻止這個(gè)連接(PASV模式不存在這個(gè)問題)。為了防止這種情況,我們可以強(qiáng)制IIS不能與客戶端的任意端口進(jìn)行連接,而只有客戶端連接IIS的端口進(jìn)行數(shù)據(jù)傳輸。這樣就可以解決PORT MODE與客戶端防火墻的沖突。方法:修改注冊(cè)
表,HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msftpsvc\Parameters\,將EnablePortAttack的值由0改為1,然后重新啟動(dòng)FTP服務(wù)。
(4)在ISA里面,使用SERVER PUBLISH的方法發(fā)布FTP服務(wù),其中:IP address of internal server 填寫ISA的內(nèi)部網(wǎng)卡的IP,IP address of external server 填寫ISA的外部網(wǎng)卡的IP,Mapped server protocol 選擇 FTP Server。
?。?)然后在IP Packet Filter建立一條新RULES,Protocol->TCP,Direction->Outbound,Local Port->Dymanic,Remote Port->All。
這是我的解決辦法,但是并不完美,主要是:
(1)客戶不能使用PASV方法進(jìn)行連接,原因上面已經(jīng)講了。
?。?)由于第五條,所以ISA服務(wù)器隨著保證了對(duì)外部訪問的限制,卻無(wú)法限制ISA本機(jī)對(duì)外部的訪問。
我也把我的方法做了一下實(shí)驗(yàn),使用serv-u做的,有一點(diǎn)錯(cuò)誤,不過(guò)終歸做了出來(lái),下面總結(jié)一下:
PASV服務(wù)器放在ISA后面,其實(shí)就是要解決兩個(gè)問題:
?
1、PASV的端口。我上面的方法提出使用secondary connection,但事實(shí)證明不對(duì),應(yīng)該每個(gè)PASV端口都建立一條primary connection,然后分別建立server publishing rules,有多少個(gè)PASV端口,就要建立多少條。
這里還可以引出另一個(gè)話題,就是對(duì)Web publishing rules的運(yùn)用,tony你應(yīng)該知道,通過(guò)Web publishing rules也可以發(fā)布ftp服務(wù)器,但rule里面只給了一個(gè)ftp端口的選項(xiàng),很明顯,這是為PORT模式的FTP服務(wù)器準(zhǔn)備的,因?yàn)镻ORT模式的數(shù)據(jù)連接是由服務(wù)器發(fā)起的,在服務(wù)器一邊,不存在穿過(guò)防火墻的問題。
使用Web publishing rules還有一個(gè)很令人振奮的特性,就是支持動(dòng)態(tài)公用IP用戶,不需要象server publishing rules那樣,每撥一次號(hào)都要修改一次外部地址。如果在Web publishing rules中也能搞定PASV問題,那么對(duì)于那些使用撥號(hào)上網(wǎng)而又想在內(nèi)網(wǎng)發(fā)布PASV服務(wù)器的人來(lái)說(shuō),簡(jiǎn)直是天大的喜訊。
需要好好考慮的是如何通過(guò)那個(gè)只能填一個(gè)端口的選項(xiàng)來(lái)發(fā)布隨機(jī)的PASV端口?我從今天的實(shí)驗(yàn)找到了一點(diǎn)靈感,就是也象上面說(shuō)的那樣,每個(gè)PASV端口都設(shè)置一條Web publishing rules!我還未做這個(gè)實(shí)驗(yàn),還不能證實(shí)這樣做行不行,相信晚上就會(huì)有結(jié)果了。
當(dāng)然,還需要考慮如何控制PASV模式端口的范圍,serv-u可以設(shè)定,而IIS的FTP不行。
2、是服務(wù)器向客戶端傳送IP的問題。當(dāng)FTP客戶端登錄進(jìn)入服務(wù)器的時(shí)候,PASV模式服務(wù)器會(huì)向客戶端傳送本機(jī)的IP地址和數(shù)據(jù)端口,當(dāng)服務(wù)器放在內(nèi)網(wǎng)中的時(shí)候,服務(wù)器會(huì)向客戶端返回內(nèi)網(wǎng)的IP,這當(dāng)然是不能完成連接的,需要讓服務(wù)器返回ISA的外網(wǎng)地址。本來(lái),解決方法可以使用firwall client的application settings中的nameresolutionforlocalhost參數(shù),設(shè)為P就可以讓應(yīng)用程序返回ISA的外網(wǎng)地址,但這個(gè)參數(shù)是供firewall client使用的,而發(fā)布服務(wù)器不能安裝firewall client,這很可惜。
幸好,還是有一個(gè)好消息,就是serv-u本身具有返回ISA外網(wǎng)地址這樣的功能,方法是先選中新建FTP服務(wù)器的屬性,在domain標(biāo)簽里選擇"enable dynamic dns",此時(shí)會(huì)出現(xiàn)第二個(gè)標(biāo)簽,叫"dynamic dns",然后到tz0.com申請(qǐng)動(dòng)態(tài)域名,申請(qǐng)后會(huì)得到一個(gè)key,在此標(biāo)簽中填入此key即可。最后一步,是到新建服務(wù)器的settings屬性中,選擇advanced標(biāo)簽,選中"allow passive mode data transfer",旁邊的IP地址框留空。這個(gè)框?qū)τ趽芴?hào)用戶不用填,只有出口使用固定地址才需要填。
這樣,serv-u向客戶端返回IP和端口前,會(huì)先向tz0.com查詢到ISA外網(wǎng)的地址,再發(fā)送給客戶端。
解決了這兩個(gè)問題,剩下的工作就簡(jiǎn)單了。
?
從以上內(nèi)容也可以說(shuō)明一點(diǎn),從內(nèi)網(wǎng)不能發(fā)布IIS的FTP服務(wù)器,因?yàn)镮IS既沒有選項(xiàng)可以選擇PASV端口的范圍,也沒有辦法讓其返回ISA外網(wǎng)的地址。而serv-u這兩條都可以滿足。當(dāng)然,在微軟的網(wǎng)站上也可能有方法解決IIS的這兩個(gè)問題。
發(fā)布FTP服務(wù)器的時(shí)候,要注意FTP服務(wù)器有PORT和PASV兩種模式。兩者的共同點(diǎn),是都使用21端口進(jìn)行用戶驗(yàn)證及管理,差別在于傳送數(shù)據(jù)的方式不同,PORT模式的FTP服務(wù)器數(shù)據(jù)端口固定在20,而PASV模式則在1025-65535之間隨機(jī)。發(fā)布的時(shí)候要考慮這個(gè)差別。
如果FTP服務(wù)器在內(nèi)部網(wǎng)絡(luò)中,在建立server publish rules時(shí)(雖然Web publish rules也能發(fā)布ftp服務(wù)器,但它并沒有提供對(duì)port和pasv模式的處理),protocol definitions中的21 inbound條目要建立一個(gè)secondary connection,為20端口上的inbound或1025-65535端口之間的inbound。
如果FTP服務(wù)器建立在ISA服務(wù)器上,就需要在ip packet filters中設(shè)置相關(guān)的條目,對(duì)于PORT模式,很簡(jiǎn)單,開放20 inbound就是,但pasv模式就麻煩一點(diǎn),因?yàn)閕p packet filters不能設(shè)置端口段,但我們也不可能把幾萬(wàn)個(gè)端口逐個(gè)寫一遍,只能把local port設(shè)置為dynamic,remote port設(shè)置為all ports,當(dāng)然,對(duì)安全性這是個(gè)損害。
幸運(yùn)的是,有些PASV模式的FTP服務(wù)器能夠設(shè)置PASV模式端口的范圍,比如serv-u,它能夠把PASV模式端口控制在最多50個(gè)端口范圍內(nèi),如果為serv-u設(shè)置的并發(fā)用戶數(shù)不多,那么我們就可以為每個(gè)PASV端口寫一條filter,不需要開放所有的端口了。如果使用IIS的FTP服務(wù)器,這個(gè)FTP服務(wù)器沒有提供選擇PASV模式端口的功能,只能如上所述那樣,開放dynamic和all ports。
從你上面的出錯(cuò)信息來(lái)看,你應(yīng)該是使用IE來(lái)訪問FTP服務(wù)器吧。IE的FTP客戶端與其它專業(yè)FTP客戶端不同,不能夠自動(dòng)檢測(cè)FTP服務(wù)器的類型以及根據(jù)服務(wù)器的類型改變客戶端的種類。IE只提供了一個(gè)手工選項(xiàng)來(lái)改變P
關(guān)鍵詞標(biāo)簽:辦法,解決,服務(wù)器,FTP
相關(guān)閱讀
熱門文章 Linux下FTP的配置與應(yīng)用 什么是ftp及ftp服務(wù)器 FTP出錯(cuò)解決和分析 Windows內(nèi)置FTP服務(wù)器高級(jí)配置
人氣排行 vsftp配置大全---超完整版 IIS6.0打造FTP服務(wù)器完全圖文詳解 使用Win 2003搭建安全文件服務(wù)器 圖解Windows xp—FTP服務(wù)器配置 linux服務(wù)samba的詳細(xì)配置 在Windows 2003下搭建FTP服務(wù)器 FTP登陸錯(cuò)誤詳解 Windows內(nèi)置FTP服務(wù)器高級(jí)配置