FTP 是所有通訊協定裡最特殊的,其他的通訊協定例如 HTTP、SMTP、POP3...都只需要一條連線、一個通訊埠,然而 FTP 卻需要兩條連線、兩個通訊埠。FTP的連線包括兩種不同用途,一個是傳遞客戶端與伺服器之間的Command的,也就是一般我們在設定的FTP通訊埠(預設21)。另一個是資料傳送的連線,FTP資料傳送的模式又分二種:PORT、PASV。兩者主要分別在於它們會向FTP伺服器發出不同的FTP Command。

為了釐清者兩者的差別,以及其工作原理,特別撰寫這篇文章加以說明。

以下的文章,將由 FTP 的工作原理開始介紹,希望能清楚的描述兩者的差別以及正確的設定方式。文章中,我們也將透過實際連線,了解不同模式所傳遞的訊息,這將有助於您未來的故障排除能力。

【基本原理】

FTP 是屬於 TCP 服務的一種, FTP 是所有通訊協定裡最特殊的,其他的通訊協定例如 HTTP、SMTP、POP3...都只需要一個通訊埠,然而 FTP 卻需要兩個通訊埠,一個用來傳遞客戶端與伺服器之間的命令,一般設在 port 21,稱之為命令通訊埠(Command Port);另一個是真正用來傳遞資料的,一般都設在 port 20,稱之為資料通訊埠(Data Port)。

而問題就出在 Data Port !

因為初期定義 FTP 通訊定的時候,並沒有考慮到後來防火牆的發展,使得傳統的 FTP 的工作原理無法完全適用在網際網路環境,因此就發展出了另外一種替代模式的 FTP 連線方式,在這種模式底下,Data Port 不再只是 20,也因此造成很多讀到舊資料的人,認為只要將 20, 21 兩個通訊埠打開,FTP Server 就能正常運作這樣的錯誤觀念。 以下就由傳統模式開始介紹。

【主動式 FTP】

傳統式 FTP 連線方式是採用主動模式,由用戶端隨機使用一個大於 1023 (也就是1024以上)的通訊埠(為了方便說明我們以 port N 來代表),與 FTP 伺服器的命令通訊埠(port 21) 建立連線,同時用戶端自己開啟一個 N+1 的通訊埠等待伺服器連線。伺服器接到用戶端的命令之後,便使用資料通訊埠(port 20)主動與用戶端的 port N+1 建立資料連線。

這樣的模式有點像我們開車去加油的溝通方式,駕駛打開窗戶(port N)對著服務人員(port 21)要求加油命令,同時打開油箱蓋、露出加油孔(port N+1),服務人員及拿著油槍(port 20)對著加油孔(port N+1)加油。

所謂的主動式,是以伺服器的觀點來看。要完成一個主動式連線,伺服器必須提供以下幾個溝通管道:

FTP 伺服器開啟 port 21 接受來自外部任意通訊埠的連線(由用戶端要求建立連線)
FTP 伺服器使用 port 21 連線到外部任一大於 1023 的通訊埠(回應用戶端的命令埠)
FTP 伺服器使用 port 20 連線到外部任一大於 1023 的通訊埠(伺服器主動建立資料連線)
FTP 伺服器開啟 port 20 接受來自外部任一大於 1023 的通訊埠連線 (用戶端回覆伺服器資料連線)

以下我們利用一張圖來做說明:



步驟一、用戶端使用 port 1024 與伺服器建立連線,並提供 port 1025 的資訊給伺服器。

步驟二、伺服器回應用戶端的連線。

步驟三、伺服器主動與用戶端的 port 1025 建立連線。

步驟四、用戶端回覆伺服器。

由以上的說明可以理解,主動式連線的真正問題不在於伺服器,而是在於用戶端的防火牆。由於用戶端程式並不是自行建立資料連線,而是自己開啟一個通訊埠,要求伺服器連線進來,這對用戶端的防火牆來說是一個危險的安全警訊,大部分的網路環境,都不允許防火牆外部的系統連線到內部的用戶端電腦。

以下為實際的主動式 FTP 連線範例,我們以Rainbow FTP Server 與 ezFTP 用戶端程式為例,觀察其連線的訊息。




圖中出現的 PORT 192,168,1,100,6,160 代表用戶端 IP 192.168.1.100, 通訊埠 256*6 + 160,也就是有用戶端只定通訊埠。這和後面要介紹的被動模式完全不同。

【被動式 FTP (PASV)】

為了解決由伺服器連線到用戶端所產生的安全疑慮,因此發展出了另一種不同的連線模式,稱之為被動模式(Passive Mode, PASV)。讓用戶端程式可以在連線的時候,通知伺服器使用動模式連線。

使用被動模式 FTP ,不論命令連線或是資料連線都是由用戶端建立,以解決防火牆以及相關資安問題。當用戶端開啟 FTP 連線時,用戶端程式先在本機開兩個大於1023的通訊埠(N, N+1),利用 port N 與伺服器的 port 21 建立連線。不同於主動模式的連線方式,用戶端這次不再提供 N+1 port 與 IP 位址給伺服器,而是送出 PASV 的命令。伺服器收到 PASV 的命令之後,即開啟一個大於 1023 的通訊埠(P),並將這個通訊埠連同伺服器 IP 回覆給用戶端,被動等待用戶端連線,用戶端即利用 port N+1與伺服器所提供的 port P 建立資料連線。

以伺服器的觀點來看,要完成一個被動式連線,伺服器必須提供以下幾個溝通管道:

FTP 伺服器開啟 port 21 接受來自外部任意通訊埠的連線(由用戶端要求建立連線)
FTP 伺服器使用 port 21 連線到外部任一大於 1023 的通訊埠(回應用戶端的命令埠)
FTP 伺服器開啟一個大於 1023 的通訊埠,接受來自外部任一大於 1023 的通訊埠連線 (用戶端與伺服器建立資料連線)
FTP 伺服器使用一個大於 1023 的通訊埠,連線到外部任一大於 1023 的通訊埠(伺服器回復資料給用戶端)
以下我們利用一張圖來做說明:



步驟一、用戶端使用 port 1024 與伺服器建立連線,並發出 PASV 的要求。
步驟二、伺服器回應用戶端的連線,並通知用戶端,伺服器已開啟 port 1120 等待資料連線。
步驟三、用戶端使用 port 1025 與伺服器的 port 1120 建立資料連線。
步驟四、伺服器回覆用戶端。

使用被動模式雖然解決了用戶端的問題,卻也為伺服器帶來了一些問題,最大的問題在於伺服器必須開啟一定範圍的通訊埠供用戶端連線,好在目前絕大部分的 FTP 伺服器軟體,皆可以由管理者決定開啟哪些範圍的通訊埠。

另一個問題則是部分作業系統提供的的FTP命令列,不支援被動模式,因此必須使用其他的用戶端程式。

以下為實際的被動式 FTP 連線範例,我們以Rainbow FTP Server 與 ezFTP 用戶端程式為例,觀察其連線的訊息。



請注意紅色箭頭標式的部份,前一行用戶端程式發出 PASV 的命令,伺服器則回應 210,202,94,228,8,0,也就是由伺服器開啟 256*8 +0 這個通訊埠,等待用戶端連線。



以下做個簡單的總結:

主動式 FTP :

命令連線: 用戶端 port N --> 伺服器 port 21

資料連線: 伺服器 port 20 --> 用戶端 N+1

被動式 FTP :

命令連線: 用戶端 port N --> 伺服器 port 21

資料連線: 用戶端 port N+1 --> 伺服器 port P

其中 N、P 都必須大於 1023

兩種模式各有優缺點,主動模式對伺服器來說比較安全,但對用戶端來說卻是可能帶來危險,因此很可能被用戶端的防火牆所阻擋了。使用被動模式雖然解決了用戶端的問題,但相對的伺服器必須開啟一定範圍的通訊埠供用戶端連線,好在目前絕大部分的 FTP 伺服器軟體,皆可以由管理者決定開啟哪些範圍的通訊埠。

特別注意的是,要使用那種模式連線是由用戶端決定(發出 PORT 或是 PASV 命令),但是伺服器卻可決定要不要支援這種模式的連線。


謝謝收看!
簡單明暸,讓我對FTP運作又多了更深一層的認識~加分
所以一半正常模式該開啟那個 Port 才能正常架設 FTP 呢?
感謝對於FTP基本觀念的分享.增長不少見聞
另外可否針對自行架設FTP的保護措施觀念略介紹一二?以造福我等經驗不足者.
rakkinen wrote:
所以一般正常模式該開...(恕刪)


目前絕大部分的用戶端都不允許外部連線進來,因此如果您要提供給外部連線,您的 FTP Server 最好支援 PASV 模式,否則您的客戶可能無法正常連線。
症狀:登入成功,但是一片空白,或是告訴您權限不夠...

使用 PASV 模式,Server 必須開啟 1024 ~65535 之間的通訊部,不過目前的 FTP Server 都允取設定一定範圍,例如平常最大連線只有 10 個人,那就開 1024~1033 就好了(這是理論值),如果要讓連線順暢,最好開個兩倍以上,例如 1024~1048,這樣 Server 就會在這範圍內開啟資料連線通訊部(DATA PORT)。

Server 設定好之後,您必須設定防火牆或寬頻分享器,將這些 Port 對應到您的 FTP Server。

有關寬頻分享器的設定,您可以參考線上教學課程。

以下幾項重點請參考:
1.使用什麼模式,是由 Client 決定,所以開啟 PASV 模式,只是代表 Server [可以]接受這種模式,原有 PORT 模式還使可以用。

2.如果是在 Lan 裡面使用,因為都在防火牆內,可以不需要使用 PASV 模式,全部使用 PORT 模式。不過因為作業系統防火牆的問題,Client 端將會出現警告訊息

這是因為 Server要連線到Client的原因。您必須解除封鎖。

3. IE 預設是 PASV 模式,因此鄉民流傳一句話[IE很爛,不要用它當作 FTP Client],雖然有點爛,但不能全部叫他背黑鍋,原因在於很多人的 FTP Server 不支援或是沒設定好 PASV 模式,但是 IE 預設又是 PASV ,所以不通,只要到IE的 [工具] -> [網際網路選項] ->[進階] 往下拉找到 [瀏覽],其中有一個選項[使用被動式 FTP],把勾勾取消就變成 PORT 模式了。

其他參考資源:
1.FTP 教學課程
2.免費 FTP 下載軟體
3.簡易用戶端程式產生器 (Give Me Files)
本生物已配置全天候戰鬥系統~ 手機不通、Skype 離線時,請託夢,或留言!
亮哥 wrote:
感謝對於FTP基本觀...(恕刪)

1.只開啟必要的通訊埠,如果允許上傳檔案,那防毒軟體是不可少的。

2.身份驗證權限控管,除非是提供非特定對象的下載,否則最好不要用匿名存取。

3.公用資料夾可以採用虛擬目錄,取代匿名存取。
範例: Alex, Bobby, Candy, David, Public(共用)

傳統作法:
開啟 5 個帳號,其中 Public 為匿名存取

缺點:
任何人(不限定以上 4 人)都可以連上 Public
登入自己的帳號之後,必須切換身分才可以讀取 Public

虛擬目錄作法:
開啟 4 個帳號,將 Public 建立成虛擬目錄,指定給以上 4 個人
優點:
只有指定的人才能存取
不需要重複登入,因為使用者登入之後,虛擬目錄就像是帳號底下的一個資料夾一樣

4.啟用 IP 封鎖功能。(大部分軟體都有)

5.登入失敗自動封鎖,避免使用工具嘗試登入。(大部分軟體都有)

6.單一 IP 連線數限制,不要讓一個人把所有資源吃光了。(大部分軟體都有)

7.事件提醒,例如 IP 連線數超過了,發出音效提醒,可警覺是否有人砍站。

8.統計資料一定要有的,必須能分析每一使用者或 IP 的使用狀況,畢竟站長不是一直都在線上。

9.線上使用者的監控,發現異常能及時強制離線。



另外這是小弟個人意見,僅供參考,我不大喜歡用 Web 的管理工具。IE -> Web Server -> FTP Server 這樣的管理模式不是很喜歡。

以前玩 UNIX 到 Window,或是後來自己開發 FTP Server,習慣都是下指令直接透過 Command Port (21)和 FTP Server 溝通。

現在大部分的 FTP Server 都具有遠端管理的功能及指令。不過不是每個管理者都熟悉指令,以前曾幫客戶針對他們的需求寫過一支Windows版的,各位大大也可以試用一下 Rainbow FTP Server 的遠端管理工具,可以透過網際網路,管理 FTP Server(當然必須具有一定權限)。

PS:為了能兼顧安全與方便性,遠端管理工具最好是免安裝、檔案小,否則就只能下指令了
本生物已配置全天候戰鬥系統~ 手機不通、Skype 離線時,請託夢,或留言!
寫的不錯,觀念的釐清很有幫助,推薦本文.

雖然現在大多數的人都喜歡用 GUI,但我倒蠻常用 CUI 的.
ping,ipconfig,tracert,nslookup,arp,net share ....
telnet bbs.xxx.edu.tw
telnet msx.hinet.net 110
telnet msx.hinet.net 25
ftp msx.hinet.net

FTP 我都是把常用的/程式/工具/Driver/Bug Fix/Tips/等等放在公司的 FTP 或 Hinet FTP 主機上,
修電腦或解毒或裝軟體時,我就直接開 CMD Console,ftp 到 FTP server 抓檔案,
一來 FTP 抓比較快,二來 FTP 是 OS 標準外部指令,不用再裝軟體.

對 IT 人員蠻方便的.

PS:我跟您一樣也是從 UNIX(IBM/HP/SGI/SUN) 用到 Windows.
認為只要將 20, 21 兩個通訊打開

要買時不降價嫌吃人好貴,買了過幾個月降價又嫌不保值。奇怪,後面又不是掛LV
plusv wrote:
PS:我跟您一樣也是從 UNIX(IBM/HP/SGI/SUN) 用到 Windows

01 的電腦黑手很多喔~

drabbit wrote:
認為只要將 20, ...(恕刪)

感謝!已修正...

本生物已配置全天候戰鬥系統~ 手機不通、Skype 離線時,請託夢,或留言!
不過目前的 FTP Server 都允取設定一定範圍,例如平常最大連線只有 10 個人,那就開 1024~1033 就好了(這是理論值)

請問一下Windows 2K server內建的FTP server是否也可設定一固定開放的port範圍?
請問該如何設定?

關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!