首先,讲下FTP的工作模式,FTP般有2个通道分别为:

控制通道:管理用户登录等,常用端口号:TCP的21;客户端主动与服务器建立连接

数据通道:用户传输数据时所要用到的,如,浏览目录,上传、下载等;这个端口要分2种情况了,一种当FTP工作在主动模式(默认为主动模式)时开放20端口,服务器主动用20端口去连接客户端的动态端口;另一种情况是当FTP工作在被动模式时,客户端会用自己的动态端口去连接到FTP服务器的动态端口(服务器开放动态端口被客户端连接)。

1、我们知道VSFTP这个软件,安全性很好,但是设置时候我们发现vsftp在开放防火墙时烦人得很,因为VSFTP的控制端口是21,数据端口在被动模式下是动态的,这一点很头痛,如果防火墙只开放21端口的话,client便无法浏览、下载等建立数据通道;此时可以这样设置,方法如下 :


vim /etc/vsftpd/vsftpd.conf

#connect_from_port_20=YES          #设置数据端口为20,此行注释!

pasv_enable=YES                    #启用被动模式

pasv_min_port=9000               #设置被动模式最小端口

pasv_max_port=9010              #设置被动模式最大端口

我们再设置防火墙规则:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

iptables -A INPUT -p tcp --dport 9000:9010 -j ACCEPT          #放行9000:9010端口

IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"             #让kenel加载FTP模块

或modprobe  ip_nat_ftp ip_conntrack_ftp

然后重启vsftpd服务即可!

好处:ftp客户端无需关心防火墙的设置,只要在服务器端开放21及数据端口就OK!

2、当FTP服务器工作在主动模式下时,Linux防火墙要开放21端口及ip_nat_ftp,ip_conntrack_ftp模块;

如:vim /etc/sysconfig/iptables-config在最后加上下面2行

IPTABLES_MODULES="ip_nat_ftp"
IPTABLES_MODULES="ip_conntrack_ftp"

再开防火墙策略,如下:

iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT

另一点要注意的是,客户端默认状态是被动模式,一定要记得改为主动模式,否则你在客户端登录后提示你权限不足,是因为数据端口的原因!

注意:FTP客户端的防火墙要开通20数据端口!