ftp連線原理

2021-09-01 14:00:47 字數 2484 閱讀 7421

關於 ftp

事實上﹐僅知道如何操作 iptables 工具﹐還不足以設定好您的防火牆及 nat ﹐您還要對各種 tcp/ip 服務都要有相當程度的了才行﹕您必須知道乙個連線的建立過程是怎樣的﹐每乙個封包動作是怎樣從一端送到另一端的。您除了要知道每乙個封包的來源和目的位址﹐還要知道它們的來源埠口和目的埠口。而且﹐我們不要忘記了﹕所有連線都是雙向的﹐您除了要照顧從客戶端到伺服器端的請求﹐也要照顧從伺服器到客戶端的回應。下面﹐讓我們看一看火牆的設定如何影響 ftp 的運作的( ftp 是乙個非常經典的 nat/firewall 設定範例)。

首先﹐我們要知道 ftp 的連線模式有兩種﹕主動模式( active )和被動模式( passive )。要了解這兩個模式的不同﹐得要了解 ftp 的連線是怎樣建立的﹕

在正常模式下﹕

ftp client 開啟乙個隨機選擇的高於 1024 的 port 呼叫 ftp server 的 port 21請求連線。當順利完成 three-way handshake 之後﹐連線就成功建立﹐但這僅是命令通道的建立。

當兩端需要傳送資料的時候﹐client 透過命令通道用乙個 port 命令告訴 server ﹐客戶端可以用另乙個高於 1024 的 port 做資料通道﹐並準備好 socket 資源。

然後 server 用 port 20 和剛才 client 所告知的 socket 建立資料連線。請注意﹕連線方向這是從 server 到 client 的﹐tcp 封包會有乙個 syn 旗標。

然後 client 會返回乙個帶 ack 旗標的確認封包﹐並完成另一次的 three-way handshake 手續。這時候﹐資料通道才能成功建立。

開始資料傳送。

在 passive 模式下﹕

ftp client 開啟乙個隨機選擇的高於 1024 的 port 呼叫 ftp server 的 port 21請求連線﹐並完成命令通道的建立。

當兩端需要傳送資料的時候﹐client 透過命令通道送乙個 pasv 命令給 server﹐要求進入 passive 傳輸模式。

然後 server 像上述的正常模式之第 2 步驟那樣﹐挑乙個高於 1024 的 port ﹐並用命令通道告訴 client 關於 server 端用以做資料通道的 socket。

然後 client 用另乙個高於 1024 的 port 呼叫剛才 server 告知的 scoekt 來建立資料通道。此時封包帶 syn 標籤。

server 確認後回應乙個 ack 封包。並完成所有交握手續、成功建立資料通道。

開始資料傳送。

我們都知道﹕火牆的保護物件是內部網路的 client 主機。防火牆為了擋掉一些來自外面的危險動作﹐通常會限制那些來自外面的主動連線﹐也就是帶 syn 標籤的封包(請參考 three-way handshake 的過程)。在這樣的情況下﹐iptables 或許有這樣的乙個設定﹕

iptables -i input -i ppp0 -p tcp --syn -j drop 

iptables -i forward -i ppp0 -p tcp ! --syn -j accept

在第二行中的那個 " ! " 就是 not 的意思﹐" ! --syn " 就是 not syn 之意﹐也就是只允許非主動連線的 tcp 封包從外部介面進入﹐這和第一行的意思一樣﹕不接受來自外面主動建立的連線。

tips﹕前面我們已經說過我們可以將傳到 nat 外部介面的連線轉到 dmz 裡面去。假如我們有這樣的要求﹐卻繼續沿用前面那行帶 " ! -y " 的規則的話﹐外面的客戶主機就無從建立連線來連線我們的服務主機了。但我們又不想取消它﹐以免危害到其它非 dmz 的內部網路。

還記得 iptables 的行為習慣嗎﹕它會自上而下的對比規則﹐找到符合的就不再往下找了。根據這樣的特性﹐我們可以將 nat 外部介面進入的某些連線﹐在那行 syn 過濾規則之前 accept 進來。不過﹐就要非常小心別漏了必要的限制元素﹐有可能的話﹐盡您想象把規則設得嚴密又嚴密吧。

假設我們這時候有乙個在防火牆之後的 ftp client 要試圖連線外面的 ftp server 。在正常模式下﹐(第 3 步)來自 server 的資料通道之建立請求就會被擋下來﹐這會導致資料通道無從建立。雖然您可以 login 進遠端的 ftp 伺服器﹐但如果輸入 ls 後﹐卻看不到結果的。ftp 的 login 與 ls 是透過命令通道進行的﹐因為命令通道的建立並沒問題﹐所以 server 可以收到命令。但 ls 的結果確需要透過資料通道送回來﹐然而資料通道卻不能建立建立。所以 server 在傳送失敗後﹐再用命令通道告訴您﹕ 「can't build data connection: connection refused.」

明白了﹖是否解釋了困繞您心目中以久的疑團呢﹖ ^_^

好了﹐如果用 passive 模式又會如何呢﹖讓我們回去看看正常模式的第 3 步和 passive 模式的第 4 步﹐然後檢查它們進出防火牆的方向﹐以及防火牆如何處理 syn 封包就知道了。我不想直接把答案告訴您。自己要懂得思考﹐才會有進步﹗不是嗎﹖

FTP連線問題

1 替代方法 第一步 啟動 ie7或ie8,在選單欄選擇工具 internet 選項 高階 鉤選 啟用 ftp 資料夾檢視 在internetexplorer之外 核取方塊,然後單擊 確定 2 修改登錄檔 開啟hkey local machine software microsoft interne...

FTP工作原理

在進行檔案傳輸時,ftp的客戶端和伺服器之間會建立兩個連線 1.控制連線是客戶端和ftp伺服器之間傳送命令的通道。2.資料連線是客戶端和ftp伺服器之間傳輸檔案的通道。ftp會話時,客戶端首先和ftp 伺服器的tcp 21埠建立控制連線,通過這個通道傳送命令。ftp協議中,控制連線均有客戶端發起,而...

FTP工作原理

ftp transfer protocol 件傳輸協議的縮寫,在rfc 959中具體說明。ftp會話時包含了兩個通道,乙個叫控制通道,乙個叫資料通道。控制通道 控制通道是和ftp伺服器進行溝通的通道,連線ftp,傳送ftp指令都是通過控制通道來完成的。資料通道 資料通道是和ftp伺服器進行檔案傳輸或...