AWS EC2上配置ftp服务器有它特殊的地方:

    1. 理论上来说,EC2的机器是在内网,机器上只有内网IP.外网IP是映射到内网IP上的。
    1. 有安全组,相当于带了一个防火墙。

一般的vsftpd配置文件是下面这样的:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES

use_localtime=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
pasv_min_port=2000
pasv_max_port=3000

这样配置后,被动模式从外网是有可能连不上的。因为ftp连上后,vsftpd将会把本机的内网IP地址传回给客户端,客户端连不上内网IP。

需要再加下面两个参数:

pasv_addr_resolve=NO
pasv_address=外网IP

也可以用域名:

pasv_addr_resolve=YES
pasv_address=解析到外网IP的域名

修改后需要重启vsftpd.

vsftpd配置好后,还需要配置安全组: 在上面的配置文件为例,需要开放的端口有: 20,21,2000-3000(全是tcp)

上面这些全做完后,一般用户都可以正常连了,包括主动模式和被动模式。

但是,如果你是从AWS的另一个机房连这台ftp服务器,主动模式和被动模式都会不行。

解决办法是在那个机房ec2的安全组上把ftp服务器的IP加上,允许全部端口。这样被动模式是可以正常使用的。但是主动模式还是不行,暂时没有找到什么解决办法。