1、PORT中文称为主动模式,工作原理是: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口,FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据。所以在此种模式下,FTP服务器只需用到21、20两个端口,而客户端则需用到一些不确定的随机端口。
2、PASV中文称为被动模式,工作原理是:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器,服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的随机端口上进行数据传输。所以在此种模式下,FTP服务器需用到21端口以及一些不确定的随机端口,而客户端则无需考虑端口问题。
综合来看,使用被动(PASV)模式比较实用,因为这种模式只需考虑服务器端口问题,服务器端口对于运维人员来讲是很容易配置的,而客户端(即用户那边)则无需操心任何问题了。
接下来再讲下FTP服务器端口配置问题, 一般的服务器都有设置防火墙,必须把FTP用到的那些端口列入防火墙白名单中才行,没有防火墙的服务器可无视此问题,不过即便你的服务器没有防火墙,也难保你的服务器的上级网络没有设置防火墙,比如阿里云服务器,它里面有个安全组规则,这个规则就是你服务器的上级防火墙,所以要在这个上级防火墙里面设置好端口才行。另外,在设置之前我们先要确定哪些端口被FTP使用,21端口是确定的,而随机端口只好在FTP服务的配置文件中设定一个范围,比如以pureftp为例,随机端口取值范围为20000-20500的配置方法如下:
# 在pure-ftpd.conf文件中
PassivePortRange 20000 20500
确定好端口后,就可以配置防火墙了,以Centos本地防火墙为例,在/etc/sysconfig/iptables中的配置规则示例如下:
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT -A INPUT -p tcp -m tcp --dport 20000:20500 -m state --state NEW -j ACCEPT
在阿里云安全组规则中的配置示例如下: