我有一台通过 aws 运行 pure-ftp 的 centos 服务器。我已配置 PureDB 并添加了具有正确权限的用户。我在 aws 安全组内打开了入站端口 20/21 和 49152-65534,然后使用Passive Port Range
pure-ftpd 配置文件中的设置将这些端口映射回 pure-ftpd。在此阶段,使用机器上的测试ftp localhost
按预期工作;我可以与我的用户连接并列出文件。
现在,当我尝试从我的机器连接到服务器时,我ForcePassiveIP
在服务器上添加了设置,并将其设置为 aws 实例的公共 ip,然后尝试连接;ftp <public-ip>
。连接成功,我可以登录,但 90% 的时间被动连接处于挂起状态,仅227 Entering Passive Mode (<public-ip>,<ports>)
在我尝试列出文件时显示。同样,尝试使用 ftp 客户端上传新文件也会挂起然后失败:
Response: 227 Entering Passive Mode (<public-ip>,<ports>) Command: MLSD Error: Connection timed out Error: Failed to retrieve directory listing
有人知道为什么会发生这种情况吗?任何帮助都将不胜感激。
注意:我在具有相同操作系统/设置(减去设置)的 Vagrant 机器上遇到了类似的问题ForcePassiveIP
,运行后工作正常modprobe ip_conntrack_ftp
,但 aws 服务器并非如此。
答案1
您是否已使用以下参数正确配置了 pure-ftpd 配置文件:
PassivePortRange 49152 65534
ForcePassiveIP AWS_SERVER_PUBLIC_IP
您可以使用以下命令检查操作系统允许的端口范围:
cat /proc/sys/net/ipv4/ip_local_port_range