FTP伺服器iptables的配置
系統:CentOS6.2
軟體:vsftpd, iptables
安裝完系統後,預設的iptables的規則只允許狀態為RELATED、ESTABILISHED的包和SSHD的資料包進入伺服器,當安裝好vsftpd後,通常需要在iptables上面放開21連接埠,完整的iptables配置如下:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
在這樣的規則下面,用戶端能否正常登入到FTP伺服器上進行檔案的上傳和下載呢,測試過程如下:
此例中,FTP伺服器IP地址為192.18.2.75,iptables配置如下:
用戶端使用Filezilla Client進行串連,效果如:
中,伺服器要求使用被動模式(PASV)串連,從圖上可以看出,伺服器監聽連接埠44892(175*256+92)等待用戶端的串連,但iptables的規則阻止訪問該連接埠,所以串連失敗。
將Filezilla配置為主動模式,如:
串連伺服器:
可以看出串連成功。
因此,在上面的iptables規則下,只能使用主動模式串連。
如何允許使用被動模式呢?
方法一:使用nf_conntrack_ftp模組
插曲:在kernel2.6.19前,這個模組叫ip_conntrack.ko,位於
/lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_conntrack_ftp.ko。之後,這個模組改名為nf_conntrack_ftp.ko,位於
/lib/modules/`uname -r` /kernel/net/netfilter/nf_conntrack_ftp.ko
這個模組是Netfilter專門用來處理FTP這個複雜協議的模組,它能夠將FTP的資料包標識為RELATED狀態,從而允許使用被動模式訪問。
使用命令: modprobe nf_conntrack_ftp 載入該模組,之後用戶端就能以被動模式串連至FTP伺服器了。
所示,使用被動模式,伺服器監聽連接埠號碼為159*256+8=40712,在FTP伺服器上查看TCP串連狀態,如:
的確是使用的40712號連接埠。
方法二:在vsftp的設定檔中使用如下兩個選項強制將被動模式時使用的連接埠號碼限定在一個範圍,然後在iptables上運行對這個範圍內連接埠的訪問,選項如下:
Pasv_min_port=10000
Pasv_max_port=15000