Ubuntu(EC2)上 vsftpd 的被动模式问题

Ubuntu(EC2)上 vsftpd 的被动模式问题

我遵循了每个指南,但就是无法通过 ftp 登录。

...
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
200 Switching to Binary mode.
local: 21 remote: 21
229 Entering Extended Passive Mode (|||12028|)
550 Failed to open file.
221 Goodbye.

甚至在 iptables 中也有它:

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpts:12000:12100

我已将minmax端口设置vsftpd.conf12000-12100,并通过 AWS 控制台启用了相同的端口。

答案1

在您的具体情况下,我发现您有一个错误 550,这让我认为存在文件权限问题。

一般来说,当 vsftpd 在 EC2 上运行时,PASV 模式失败的最常见原因是 vsftpd 告诉客户端连接到私有 IP 地址并且客户端无法连接到它,原因很明显。

一种可能的解决方案是向该实例分配一个弹性 IP 地址,然后通过在 vsftpd.conf 中添加以下行来告诉 vsftpd 使用该公共 IP 地址(例如 1.2.3.4)宣布自己:

pasv_address=1.2.3.4

让我们回顾一下并看看 PASV 模式是如何工作的:

  • 客户端通过连接 EC2 实例的公网 IP 上的 21 端口来开辟一个命令通道,该端口由 AWS 自身映射到该实例的私有 IP。
  • 客户端通过打开的通道向 EC2 实例发送 PASV 命令
  • vsftpd 知道它正在监听 EC2 实例的私有 IP 地址(实例的公共 IP 由 AWS 管理,在实例内部不可见),并向客户端发送响应,其中包含实例的私有 IP 地址和 12000 到 12100 之间的随机端口
  • 客户端尝试连接 vsftpd 提供的 IP 和端口失败

当收到 PASV 命令时,强制pasv_addressvsftpd 返回指定的 IP 地址,而不是尝试猜测 IP 地址。

答案2

正如@Luca Gibelli 所说,这主要是文件权限问题。

如果您发布文件列表并检查具有哪些权限,可能会更好。

但我回答这个问题是为了提供有关pasv_addressEC2 上使用情况的一个小细节

如果您使用弹性 IP

pasv_address={your public IP address}

否则,也许最好使用

pasv_addr_resolve={your public domain or DNS}

看看这里:https://www.gosquared.com/blog/fix-ftp-passive-mode-problems-on-amazon-ec2-instances

答案3

有些路由器会阻止通过标准端口进行的常规 FTP。切换到非标准端口可以解决这个问题。

相关内容