Azure VM上的vsftp – filezilla报告被动模式下服务器发送的私有IP

我正在Azure上的Ubuntu 16.04机器上安装一个安全的FTP服务器。 这是通过TLS的FTP,禁止匿名访问。

尝试使用服务器使用Filezilla工作正常 – 身份validation,传输,目录列表 – 一切…除了我从Filezilla下面的警告:

服务器发送具有不可路由地址的被动回复。 改用服务器地址。

当然,这是有道理的 – 虚拟机有一个私有IP地址,并在被动模式下,它发送私人IP地址给客户端。 解决scheme – 将以下内容添加到vsftp.conf(这是一个示例,而不是实际的configuration):

pasv_enable=YES port_enable=YES #The VM allows connections to ports 12345 & 12346 - remember, this is an example pasv_min_port=12345 pasv_max_port=12346 #The VM's domain name pasv_address=myftpservervm.cloudapp.net #Make vsftp resolve myftpservervm.cloudapp.net and send that IP address to clients pasv_addr_resolve=YES 

然后我重新启动vsftp,…没有任何反应。 我仍然得到这些:

服务器发送具有不可路由地址的被动回复。 改用服务器地址。

我甚至尝试将pasv_address设置为服务器的确切(外部)IP地址(有和没有pasv_addr_resolve=YES ),结果是一样的。

我错过了什么吗?

我在Ubuntu 16.04 x64上使用vsftpd 3.0.3(来自Ubuntu的repo)和Filezilla 3.24.0

编辑:

进入被动模式时,显然vsftp发送一个0.0.0.0的IP地址。 这个问题似乎相关。

我在我的实验室testing,起初我遇到了和你一样的问题。 我检查了以下步骤:

1. netstat -ant我得到以下结果

 tcp6 0 0 172.17.1.4:21 167.220.255.56:10979 TIME_WAIT 

根据我的经验,ftp应该在tcp上监听,而不是在Azure虚拟机上tcp6

2.我尝试更改configuration文件/etc/vsftpd.conf

 listen=yes listen_ipv6=no 

然后我重新启动ftp服务,并使用netstat -ant检查

 tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 
  1. 使用Filezilla进行testing。

在这里输入图像说明

注意:您应该打开Azure NSG上的端口20,21,12345-12346(入站规则)

你只需要稍作修改。 编辑/etc/vsftpd.conf或任何configuration文件可能是,做这个改变:

 passv_address=public_ip_of_aws_instance_not_hostname_or_private_ip 

保存文件,重新启动vsftpd服务并再次检查!

确保软pipe被动端口位于安全组的tcp允许列表中(您可以从AWS EC2仪表板中configuration这些端口)。