在redhat7下用yum安装VSFTP,登录很慢,查一下,需要在 /etc/vsftpd/vsftpd.conf加入:
reverse_lookup_enable=NO
因为默认开启了reverse_lookup(反向解析)。

然后在客户上传东西,报如下的错:

原来是主被动模式的问题,在ftp里用passive 命令来选择主动、被动模式,比如本来就开被动模式,输入一次,就关掉,再输入,就开启。
关于主动、被动模式:
在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。 也就是说,如果有防火墙,只需要允许21,20端口让客户端访问就得,配置比较简单。
在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通 知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。 也就是说,如果有防火墙,要允许21,同时还需要允许大段端口让客户端访问,这些端口在配置文件里配置,相对比较麻烦,但对于数据传输,更安全。
总的来说,主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。
被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTp服务器的情况,因为在这种情况下,防火墙通常配置为不允许外界访问防火墙之后主机,而 只允许由防火墙之后的主机发起的连接请求通过。因此,在这种情况下不能使用主动模式的FTP传输,而被动模式的FTP可以良好的工作。
从网络安全的角度来看的话似乎ftp PORT模式更安全,而ftp PASV更不安全,那么为什么RFC要在ftp PORT基础再制定一个ftp PASV模式呢?其实RFC制定ftp PASV模式的主要目的是为了数据传输安全角度出发的,因为ftp port使用固定20端口进行传输数据,那么作为黑客很容使用sniffer等探嗅器抓取ftp数据,这样一来通过ftp PORT模式传输数据很容易被黑客窃取,因此使用PASV方式来架设ftp server是最安全绝佳方案。

配置主动模式(有的也叫Port模式),修改/etc/vsftpd/vsftpd.conf 加入如下的:

pasv_enable=NO     (passive模式关闭)
port_enable=YES    (active模式开启)
connect_from_port_20=YES  (即默认情况下,FTP PORT主动模式进行数据传输时使用20端口(ftp-data)。YES使用,NO不使用。)

被动模式 passive mode,/etc/vsftpd/vsftpd.conf 加入如下的:

pasv_enable=YES
pasv_min_port=3000   
pasv_max_port=4000

设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意(1024 – 65535端口)。默认值为0。把端口范围设在比较高的一段范围内,比如3000-4000。

service vsftpd restart 重启ftp服务 或systemctl restart vsftpd (REDHAT 7以上)

实际使用时,有可能客户端默认用某种模式,特别是经过防火墙时,有时非常麻烦(云主机,中间可能有nat的原因,我就曾经搞了一天),那就建议把21、20及配置的被动端口段都开,管你是主动还是被动的。