vsftpd.conf配置文件:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=NO
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
pasv_min_port=30000
pasv_max_port=30999
pasv_address=xxx.xxx.xxx.xxx #如果不是云主机此处可省略,如果是云主机则需要写入云主机外部ip
#关闭selinux
#setenforce 0
#开通端口21,30000:30999
#iptables -I INPUT -p tcp --dport 21 -j ACCEPT
#iptables -I INPUT -p tcp --dport 30000:30999 -j ACCEPT
#创建用户,没有ssh登陆权限
#useradd -s /sbin/nologin ftpuser
#passwd ftpuser
vsftpd默认使用pasv模式,该模式在三次握手中默认使用的是本机IP而非云主机外网IP,如果配置文件中未设置pasv_address值,则会在三次握手中使用内网IP,造成客户端与服务器不能同步。
下图是未设置pasv_address的抓包,回复中使用了内网地址172.17.93.127,如果客户端使用这个IP同步则肯定连不上。
下图是设置了pasv_address=59.110.157.75的抓包,Response中则使用云主机外网IP地址