场景如下:
- 我们有一台 AWS Ubuntu 服务器
- 该服务器正在作为 ftp 客户端运行
- 现在,当我们尝试使用此 AWS 服务器作为客户端连接到 XYZ 公司 ftp 服务器时,它会在连接到 ftp 服务器时发送其本地 LAN IP,因此目录列表不起作用。
- 日志显示我们已连接到 FTP 服务器 + 我们已正确验证...端口列表成功 + 仅目录列表失败。
- 我们可以使用 filezilla 在 FTP 中提供特定的 IP,FTP 将在离开网关时使用该 IP。
- 这里我们不能使用它,因为它没有 GUI 并且它将被 php 脚本使用。
- 这个问题在 Windows 上也存在,我们通过给 FileZilla 一个弹性 IP 解决了它。在使用这个解决方案之前,我们收到错误,日志显示如下 这。添加这一点只是为了向您提供更多详细信息。&这与 Ubuntu 存在同样的问题&我们希望在 ftp 的某处提供一个弹性 IP,以便它开始工作...我们至少希望如此。;)
最近更新
进一步澄清一下:
在这种情况下,机器“A”是我们用于内部使用的 FTP 服务器(即 AWS Ubuntu 服务器),因为许多其他流程和数据会定期上传到此 FTP 服务器(机器“A”)上,而机器“B”是我们客户的 FTP 服务器,他们将其用于内部用途。现在我们需要从我们客户的 FTP 服务器(即机器“B”)中提取一些数据到我们的服务器(即机器“A”)然后进行处理。之后,我们需要将处理后的数据放回到客户的 FTP 服务器(即机器“B”)。这就是不起作用的原因
当我们尝试连接机器“B”时,客户端防火墙的日志如下图所示。
答案1
这是我对您的场景的理解:
- 你有机器 A在您的网络与FTP 服务器和FTP 客户端;
- 您想从机器 B那是客户网络;
- 有防火墙您的网络并可能客户网络;
- 您将使用 FTP 客户端从机器 B。
FTP 工作于两种模式:
- 主动模式 -
在主动模式 FTP 中,客户端连接从一个随机的非特权端口(N > 1023)连接到 FTP 服务器的命令端口 21。然后,客户端开始监听端口 N+1,并将 FTP 命令 PORT N+1 发送到 FTP 服务器。然后,服务器将连接回客户端指定的数据端口 (...)
例子:
- FTP 客户端机器“A”连接到 FTP 服务器机器“B”在端口21上;
- 机器“A”发送“ls”至机器“B”,但由于是主动模式,所以“ls”的结果将被传送到机器“A”;
- 这会失败,因为 FTP 客户端机器“A”问机器“B”连接到私有 IP。即使 IP 是公有的,防火墙也必须打开 N+1 端口。
- 被动模式 -
在被动模式 FTP 中,客户端发起与服务器的两个连接,从而解决了防火墙过滤从服务器到客户端的传入数据端口连接的问题。打开 FTP 连接时,客户端在本地打开两个随机的非特权端口(N > 1023 和 N+1)。第一个端口在端口 21 上联系服务器,但客户端不会发出 PORT 命令并允许服务器重新连接到其数据端口,而是会发出 PASV 命令。结果是服务器随后打开一个随机的非特权端口(P > 1023)并将 P 发送回客户端以响应 PASV 命令。然后,客户端发起从端口 N+1 到服务器上的端口 P 的连接以传输数据。(...)
例子:
- FTP 客户端机器“A”连接到 FTP 服务器机器“B”在端口21上;
- 机器“A”发送“ls”至机器“B”;
- 这次,结果将不会传送到机器“A”。 反而,机器“B”通知机器“A”结果正在等待在给定的 IP 和端口中获取机器“B”。
- 如果此 IP 是私有的,并且客户端防火墙中未开放端口,则此操作会失败。因此,客户端必须将其 FTP 服务器配置为使用公共 IP 和已知端口 (参见 Cubiq 的回答)。
这些是您拥有的解决方案:
- 使用主动模式(考虑到机器“A”有 IP 175.41.135.142):连接和身份验证后,立即发出此命令:端口 175,41,135,142,14,178您需要在防火墙中打开端口 3762。,14,178来自于八位字节到十进制的转换((14*256)+ 178)。
- 使用被动模式:要使此方法有效,客户端必须具有类似 Cubiq 答案的配置。连接和身份验证后,立即发出以下命令:被动的
现在您应该能够“ls”了。
您可以在这里阅读有关 FTP 如何工作的更多信息:http://slacksite.com/other/ftp.html
此页面也有助于了解 FTP 模式:http://www.deskshare.com/resources/articles/ftp-how-to.aspx
答案2
添加到您的 vsftpd 配置(/etc/vsftpd.conf):
pasv_enable=YES
port_enable=YES
pasv_min_port=<port-start>
pasv_max_port=<port-end>
pasv_address=<your-machine-ip>
pasv_addr_resolve=NO
在实例的安全配置中为 FTP 打开端口 20-21,还启用您上面指定的范围的被动端口(pasv_min/max_port,例如:64000-64100)。
重新启动 vsftpd。
如果这不起作用,您可以尝试用以下代码替换最后两行:
pasv_address=<public-address>
pasv_addr_resolve=YES
答案3
- 我使用 File Zilla 时也收到了同样的消息。我使用的是 Azure VM;Ubuntu v20
- 我启用了 VSFTPD;默认设置(匿名禁用)
- 我创建了一个新用户
- 我使用 DOS 测试了我的连接 - 在 DOS 中可以正常工作。但在 FILE Zilla 中却不行。
- 我将 FILEZilla/Edit/Settings/FTP/PassiveMode/ 更改为‘回退到主动模式’ - 它对我有用。
參考文獻:https://ubuntu.com/server/docs/service-ftp,https://ubuntu.com/server/docs/security-users