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