一、ftp的port和pasv模式的工作方式
FTP使用2個TCP端口,首先是建立一個指令端口(控制端口),然後再産生一個資料端口。國内很多教科書都講ftp使用21指令端口和20資料端口,這個應該是教書更新太慢的原因吧。實際上FTP分為主動模式和被動模式兩種,ftp工作在主動模式使用tcp 21和20兩個端口,而工作在被動模式會工作在大于1024随機端口。FTP最權威的參考見RFC 959,有興趣的朋友可以仔細閱讀ftp://nic.merit.edu/documents/rfc/rfc0959.txt的文檔了解FTP詳細工作模式和指令。目前主流的FTP Server伺服器模式都是同時支援port和pasv兩種方式,但是為了友善管理安全管理防火牆和設定ACL了解FTP Server的port和pasv模式是很有必要的。
1.1 ftp port模式(主動模式)
主動方式的FTP是這樣的:用戶端從一個任意的非特權端口N(N>1024)連接配接到FTP伺服器的指令端口(即tcp 21端口)。緊接着用戶端開始監聽端口N+1,并發送FTP指令“port N+1”到FTP伺服器。最後伺服器會從它自己的資料端口(20)連接配接到用戶端指定的資料端口(N+1),這樣用戶端就可以和ftp伺服器建立資料傳輸通道了。
針對FTP伺服器前面的防火牆來說,必須允許以下通訊才能支援主動方式FTP:
1、用戶端口>1024端口到FTP伺服器的21端口 (入:用戶端初始化的連接配接 S<-C)
2、FTP伺服器的21端口到用戶端>1024的端口(出:伺服器響應用戶端的控制端口 S->C)
3、FTP伺服器的20端口到用戶端>1024的端口(出:伺服器端初始化資料連接配接到用戶端的資料端口 S->C)
4、用戶端>1024端口到FTP伺服器的20端口(入:用戶端發送ACK響應到伺服器的資料端口 S<-C)
我的伺服器192.168.10.1在H3C 8500的GigabitEthernet 2/1/10 我就在2/1/10建立in acl政策允許ftp 主動模式其他禁止:
rule permit tcp source 192.168.10.1 0 source-port eq 21 destination-port gt 1024
rule permit tcp source 192.168.10.1 0 source-port eq 20 destination-port gt 1024
rele deny ip
1.2 ftp pasv模式(被動模式)
在被動方式FTP中,指令連接配接和資料連接配接都由用戶端。當開啟一個FTP連接配接時,用戶端打開兩個任意的非特權本地端口(N > 1024和N+1)。第一個端口連接配接伺服器的21端口,但與主動方式的FTP不同,用戶端不會送出PORT指令并允許伺服器來回連它的資料端口,而是送出 PASV指令。這樣做的結果是伺服器會開啟一個任意的非特權端口(P > 1024),并發送PORT P指令給用戶端。然後用戶端發起從本地端口N+1到伺服器的端口P的連接配接用來傳送資料。
對于伺服器端的防火牆來說,必須允許下面的通訊才能支援被動方式的FTP:
1、用戶端>1024端口到伺服器的21端口(入:用戶端初始化的連接配接 S<-C)
2、伺服器的21端口到用戶端>1024的端口(出:伺服器響應到用戶端的控制端口的連接配接 S->C)
3、用戶端>1024端口到伺服器的大于1024端口(入:用戶端初始化資料連接配接到伺服器指定的任意端口 S<-C)
4、伺服器的大于1024端口到遠端的大于1024的端口(出:伺服器發送ACK響應和資料到用戶端的資料端口 S->C)
我的伺服器192.168.10.1在H3C 8500的GigabitEthernet 2/1/10 我就在2/1/10建立in acl政策允許ftp 主動模式其他禁止:
rule permit tcp source 192.168.10.1 0 source-port eq 21 destination-port gt 1024
rule permit tcp source 192.168.10.1 0 source-port gt 1024 destination-port gt 1024
rele deny ip
二、ftp的port和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開放了。目前像IPTable、ISA Server 2000/2004/2006、以及主流硬體防火牆都可以支援狀态檢測。