史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 應用軟體使用技術文件
忘記密碼?
註冊帳號 論壇說明 標記討論區已讀

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2003-07-17, 11:22 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 ISA下FTP的解決辦法

有很多人對FTP的問題多多,大家參考、討論一下。

我的環境:
SERVER:ISA SP1,IIS
CLIENT:Windows 2000 and XP, CuteFTP
主要討論ISA和FTP在同一台電腦上的處理辦法。

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本機起作用,不會造成區域網路內的客戶「放了羊」。

所以,我個人這樣做的:
(1)由於IIS和ISA都在一台電腦上,所以它倆都在偵聽21號連接阜(IIS預設情況下會偵聽所有位址的21連接阜),所以我們首先要讓IIS只偵聽內

網位址的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與客戶端防火牆的衝突。方法:修改註冊

表,HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Msftpsvc\Parameters\,將EnablePortAttack的值由0改為1,然後重新啟動FTP服務。
(4)在ISA裡面,使用SERVER PUBLISH的方法發佈FTP服務,其中:IP address of internal server 填寫ISA的內部網路卡的IP,IP address of external server 填寫ISA的外部網路卡的IP,Mapped server protocol 選項 FTP Server。
(5)然後在IP Packet Filter建立一條新RULES,Protocol->TCP,Direction->Outbound,Local Port->Dymanic,Remote Port->All。

這是我的解決辦法,但是並不完美,主要是:
(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模式的資料連接是由伺服器發起的,在伺服器一邊,不存在穿過防火牆的問題。

使用web publishing rules還有一個很令人振奮的特性,就是支持動態公用IP用戶,不需要象server publishing rules那樣,每撥一次號都要修改一次外部位址。如果在web publishing rules中也能搞定PASV問題,那麼對於那些使用撥號上網而又想在局內網發佈PASV伺服器的人來說,簡直是天大的喜訊。

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

當然,還需要考慮如何控制PASV模式連接阜的範圍,serv-u可以設定,而IIS的FTP不行。

2。是伺服器向客戶端傳送IP的問題。當FTP客戶端登入進入伺服器的時候,PASV模式伺服器會向客戶端傳送本機的IP位址和資料連接阜,當伺服器放在局內網中的時候,伺服器會向客戶端返回局內網的IP,這當然是不能完成連接的,需要讓伺服器返回ISA的外網位址。本來,解決方法可以使用firwall client的application settings中的nameresolutionforlocalhost參數,設為P就可以讓應用程式返回ISA的外網位址,但這個參數是供firewall client使用的,而發佈伺服器不能安裝firewall client,這很可惜。

幸好,還是有一個好消息,就是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以上版本提供。
psac 目前離線  
送花文章: 3, 收花文章: 1629 篇, 收花: 3202 次
 


主題工具
顯示模式

發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 09:28 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2020, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1