FTP的主動模式(active mode)和被動模式(passive mode):
大多數的TCP服務是使用單個的串連,一般是客戶向伺服器的一個周知連接埠發起串連,然後使用這個串連進行通訊。但是,FTP協議卻有所不同,它使用雙向的多個串連
,而且使用的連接埠很難預計。一般,FTP串連包括:
一個控制串連
(control connection)
這個串連用於傳遞用戶端的命令和伺服器端對命令的響應。它使用伺服器的21連接埠,生存期是整個FTP會話時間。
幾個資料連線
(data connection)
這些串連用於傳輸檔案和其它資料,例如:目錄列表等。這種串連在需要資料轉送時建立,而一旦資料轉送完畢就關閉,每次使用的連接埠也不一定相同。而且,資料連線既可能是用戶端發起的,也可能是伺服器端發起的。
在FTP協議中,控制串連使用周知連接埠21
,因此使用ISA的IP PACKET FILTER就可以這種串連進行很好的安全保護。相反,資料轉送串連的目的連接埠通常實現無法知道,因此處理這樣的連接埠轉寄非常困難。F
TP協議使用一個標準的連接埠21作為ftp-data連接埠,但是這個連接埠只用於串連的源地址是伺服器端的情況,在這個連接埠上根本就沒有監聽進程。
FTP的資料連線和控制串連的方向一般是相反的,也就是說,是伺服器向用戶端發起一個用於資料轉送的串連。串連的連接埠是由伺服器端和用戶端協商確定的。FTP協議的這個特徵對ISA 轉寄以及防火牆和NAT的配置增加了很多困難。
除此之外,還有另外一種FTP模式,叫做被動模式
(passive mod)。在這種模式下,資料連線是由客戶程式發起的,和剛才討論過的模式(我們可以叫做主動模式
)相反。
是否採取被動模式取決於客戶程式,在ftp命令列中使用passive命令就可以關閉/開啟被動模式。
iptables中配置vsftp
問題:配置iptables後, vsftpd不能用。常見現象是能夠登入到伺服器,LIST列目錄失敗(逾時)。
分析:
主動模式
下,客戶串連 TCP/21,伺服器通過 TCP/20 串連客戶的隨機連接埠
————這種情況下,通過狀態防火牆可以解決 iptables -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
被動模式
下,客戶串連 TCP/21,客戶再通過其他連接埠串連伺服器的隨機連接埠
卡住的原因,是因為伺服器在被動模式下沒有開啟臨時連接埠讓 client 連過來,因此需要幾個條件
1、client 沒有防火牆時,用主動模式串連即可
2、server 沒有防火牆時,用被動模式即可
3、雙方都有防火牆時,vsftpd 設定被動模式高連接埠範圍,server 開啟那段範圍,client 用被動模式串連即可
4、載入 ip_conntrack_ftp 模組,使 server 支援 connection tracking,支援臨時打洞,client 用被動模式即可
5、server 使用 ip_conntrack_ftp、client 使用 ip_conntrack_ftp 和 ip_nat_ftp,支援臨時打洞和臨時 NAT 穿越打洞,雙方使用主動或被動模式均可
- “打洞”的配置說明:
- 優點:不影響ftp配置;缺點:客戶會感覺到串連有些延遲。原因參見ip_conntract的實現原理
在/etc/modprobe.conf中添加
alias ip_conntrack ip_conntract_ftp ip_nat_ftp
在/etc/rc.local中添加
/sbin/modprobe ip_conntract/sbin/modprobe ip_conntrack_ftp/sbin/modprobe ip_nat_ftp
這個作用就是完成上面所說的“臨時打洞”的方法。
- 限制被動模式串連連接埠的配置說明
- 優點:對連線速度沒有影響。缺點:限制了被動模式下,用戶端並發串連的數量。
在/etc/vsftpd/vsftpd.conf中添加
pasv_min_port=2222pasv_max_port=2225
iptables中開放這段連接埠
-A INPUT -m state --state
RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m
tcp --dport 21 -j ACCEPT
-A INPUT -p
tcp --dport 2222:2225 -j ACCEPT