我正在 Azure 上的 Ubuntu 16.04 机器上设置安全 FTP 服务器。它是通过 TLS 进行的 FTP,匿名访问已禁用。
尝试使用 Filezilla 的服务器工作正常 - 身份验证、传输、目录列表 - 一切...除了我收到来自 Filezilla 的以下警告:
服务器发送了带有不可路由地址的被动回复。请改用服务器地址。
当然,这是有道理的 - VM 有一个私有 IP 地址,在被动模式下,它会将该私有 IP 地址发送给客户端。解决方案 - 将以下内容添加到 vsftp.conf(这是一个示例,而不是实际配置):
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 发送的 IP 地址是0.0.0.0
显然,vsftp在进入被动模式时这这个问题似乎相关。
答案1
我在实验室里测试,一开始遇到了和你一样的问题。我按照以下步骤检查:
1.netstat -ant
我得到以下结果
tcp6 0 0 172.17.1.4:21 167.220.255.56:10979 TIME_WAIT
根据我的经验,ftp 应该在Azure VM上监听,tcp
而不是在 Azure VM 上监听tcp6
2.我尝试更改配置文件/etc/vsftpd.conf
。
listen=yes
listen_ipv6=no
然后我重新启动 ftp 服务并检查使用netstat -ant
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
- 使用 Filezilla 进行测试。
注意:您应该在 Azure NSG 上打开端口 20、21、12345-12346(入站规则)
答案2
您只需要进行一点小修改。编辑 /etc/vsftpd.conf 或任何配置文件,并进行以下更改:
pasv_address=public_ip_of_aws_instance_not_hostname_or_private_ip
保存文件,重新启动 vsftpd 服务并再次检查!
确保软管被动端口位于安全组中的 TCP 允许列表中(您可以从 AWS EC2 仪表板配置这些端口)。