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