1. 程式人生 > >FTP 協議分析與指導

FTP 協議分析與指導

簡介:
FTP的傳輸使用的是TCP資料包協議,TCP在建立連線前會先進行三次握手。不過FTP伺服器比較麻煩一些,因為FTP伺服器使用了兩個連線,分別是命令通道與資料通道。因為是TCP資料包,所以這兩個連線都需要經過三次握手。
根據資料連線的建立方式,FTP服務的資料傳輸可以分為主動模式(Active)和被動(Passive)模式。下面就這兩種模式分別進行介紹。
FTP Client: 192.168.88.247
FTP Server: 192.168.20.100
二 :主動模式
1、定義
主動模式是 FTP伺服器向FTP客戶端傳輸資料的預設模式。
當FTP客戶端請求以主動模式傳輸資料時,由客戶端向伺服器端傳送準備接受資料的IP地址和埠Y,該埠應該是大於1024的非特權埠。伺服器端主動發起並建立到指定的IP地址和埠Y上的連線。由於Y端可以隨機指定,導致這種方案要求客戶端機器必須允許FTP伺服器能夠順利地連線所有的埠,因此可能存在一定的安全隱患。
2、FTP伺服器主動連線示意圖
在這裡插入圖片描述


3、主動模式分析
步驟一:建立命令通道連線
如上圖,客戶端會隨機取一個大於1024以上的埠(port AA)來與FTP伺服器端的port 21實現連線,這個過程當然需要三次握手。實現連線後客戶端便可以通過這個連線來對FTP伺服器執行命令,查詢檔名、下載、上傳等等命令都是利用這個通道來執行的。
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

步驟二:通知FTP服務端使用Active且告訴連線的埠號
FTP伺服器端的埠 21號主要用在命令的執行,但是當牽涉到資料流時,就不是使用這個連線了。客戶端在需要資料的情況下,會告知伺服器端要用什麼方式連線,如果是主動模式連線,客戶端會隨機啟用一個埠(port BB),且通過命令通道告知FTP伺服器這兩個資訊,並等待FTP伺服器端的連線。
在這裡插入圖片描述


步驟三:FTP服務端主動向客戶端連線
FTP伺服器由命令通道瞭解客戶端的需求後,會主動由port 20向客戶端port BB連線,這個連線當然也會經過三次握手。此時FTP的客戶端與伺服器端建立了兩條連線,分別用在命令的執行和資料的傳輸。而預設FTP服務端使用主動連線埠就是port 20。這樣就建立起“命令”與“資料傳輸”兩個通道。
注意:
第1點:資料傳輸通道是在有資料傳輸的行為才會建立連線,並不是一開始連線到FTP伺服器就立刻建立的資料通道。
第2點:命令通道的FTP預設為port 21。資料傳輸的FTP-DATA預設為port 20。
第3點:這兩個埠的工作原理是不一樣的,而且,兩者的連線發起端是不一樣的。首先port 21接受來自客戶端的主動連線,port 20則是FTP伺服器主動連線到客戶端。
在這裡插入圖片描述

在這裡插入圖片描述
客戶端每次對伺服器進行操作:如上次或下載等操作,都會使資料傳輸埠號增加1;如下圖
在這裡插入圖片描述
三: 被動模式
1.定義
在被動模式下,客戶端通過PASV命令獲得伺服器端IP地址和資料埠,然後向伺服器端發起連線請求,從而建立資料連線。因此伺服器端只是被動地監聽在指定埠上的請求。
當連線某個FTP伺服器失敗時可以試著修改FTP客戶端工具配置,改變傳輸模式,這樣或許能夠連線成功。
2、FTP被動連線示意圖
在這裡插入圖片描述

3、被動模式分析

步驟一:客戶端與伺服器建立命令通道
同樣需要建立命令通道,通過三次握手就可以建立起這個通道了。
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
步驟二:客戶端發起PASV的連線要求
當使用資料通道命令時,客戶端可通過命令通道發起PASV的被動式連線要求,並等待伺服器的迴應。
在這裡插入圖片描述
步驟三:FTP伺服器啟動資料埠,並通知客戶端連線
如果你使用的FTP伺服器是能夠處理被動式連線的,此時FTP伺服器會先啟動一個監聽埠。這個埠號碼可以是隨機的,也可以自定義某個範圍的埠。然後FTP伺服器會通過命令通道告知客戶端已經啟動的埠(port PASV),並等待客戶端的連線。
步驟四:客戶端隨機取用大於1024的埠進行連線
最後你的客戶端會隨機取用一個大於1024埠來進行對FTP伺服器port PASV連線。如果一切都順利,那麼FTP資料就可以通過port BB和port PASV來傳送了。
注意:
第1點:被動模式FTP資料通道是由客戶端向伺服器端發起連線的。
在這裡插入圖片描述
4、被動模式抓包分析
通過ftp到ftp.ksu.edu.tw這個FTP伺服器,我們抓一下包,下面是登入過程。
第一步:客戶端發起命令通道的三次握手。
在這裡插入圖片描述
第二步:客戶端發起PASV的連線請求。
在這裡插入圖片描述
第三步:伺服器端啟動資料埠,並告知客戶端該埠號。
在這裡插入圖片描述
第四步:客戶端發起資料通道的三次握手。
在這裡插入圖片描述
ftp 的port和pasv模式最主要區別就是資料埠連線方式不同,ftp port模式只要開啟伺服器的21和20埠,而ftp pasv需要開啟伺服器大於1024所有tcp埠和21埠。重網路安全的角度來看的話似乎ftp port模式更安全,而ftp pasv更不安全,那麼為什麼RFC要在ftp port基礎再製定一個ftp pasv模式呢?其實RFC制定ftp pasv模式的主要目的是為了資料傳輸安全形度出發的,因為ftp port使用固定20埠進行傳輸資料,那麼作為黑客很容使用sniffer等探嗅器抓取ftp資料,這樣一來通過ftp port模式傳輸資料很容易被黑客竊取,因此使用pasv方式來架設ftp server是最安全絕佳方案。
如果作為一個有經驗的網路管理員就會發現使用ftp pasv方式會給網路安全很大隱患,那就是ftp pasv需要開啟伺服器tcp大於1024所有埠,這樣對伺服器的安全保護是非常不利的。在此我建議兩種方法來完善FTP Pasv模式的埠開放問題,第一種就是使用弱洞掃描工具比如Xscan找出伺服器開放的埠然後使用acl把埠deny掉,另外一種方法就是使用具有狀態檢測防火牆開啟ftp pasv的埠。
在ftp pasv模式下是使用狀態檢測防火牆比acl最大的好處就是使用狀態檢測防火牆只要開啟ftp 21埠就可以了,狀態檢測防火牆會檢測客戶埠連線ftp server的21命令埠,一但檢測客戶端使用ftp 21命令埠然後就會允許這個Session使用ftp伺服器大於1024埠,而其他方式是無法直接訪問ftp伺服器大於1024埠。通過狀態檢測防火牆就可以保證ftp 伺服器大於1024埠只對FTP Session開放了。目前像IPtables、以及主流硬體防火牆都可以支援狀態檢測