我目前正在尝试在 ubuntu 16.04 服务器上设置 VSFTPD,并且我想使用 FTPS(理想情况下我会使用 SFTP,但不幸的是我受到旧系统的限制)
我已设法使用默认配置和无 TLS 进行设置,并且我可以通过 filezilla 正常连接。尽管在过去的两天里,我一直在尝试启用 TLS,但在 SE 或其他地方提出的任何问题似乎都没有带来积极的结果。
vsftpd.conf 文件中的我的证书详细信息如下:
rsa_cert_file=/path/to/fullchain.pem
rsa_private_key_file=/path/to/privkey.pem
allow_anon_ssl=NO
ssl_enable=YES
force_local_data_ssl=YES
force_local_logins_ssl=YES
但是我无法再连接 filezilla 控制台中显示的内容:
Status: Verifying certificate...
Status: TLS connection established.
Status: Server does not support non-ASCII characters.
Status: Logged in
Status: Retrieving directory listing...
Status: Server sent passive reply with unroutable address. Using server address instead.
Command: LIST
Error: Connection timed out after 20 seconds of inactivity
Error: Failed to retrieve directory listing
这是我第一次配置 VSFTPD,因此我一直在遵循一些在线教程。它们还涉及 UFW,并且我已按照所示打开了端口。
我还尝试将以下几行添加到我的 vsftpd.conf 文件中
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
我看到其他帖子提到了 pasv_address 选项
所以我尝试将其添加到我的配置中,并使用我服务器的外部 IP - 请注意,它托管在 Google Compute Engine 上,我还更新了 Compute 中的防火墙规则,以允许教程中指定的相同端口等。但这也不起作用。
我只能假设它与端口/防火墙或其他 TLS 选项有关,但我完全不知所措。我想我有谷歌云网络防火墙,然后有 ufw,这没用(尽管禁用 ufw 没有效果)
我的 ufw 规则如下:
20/tcp ALLOW Anywhere
21/tcp ALLOW Anywhere
990/tcp ALLOW Anywhere
40000:50000/tcp ALLOW Anywhere
如果有人想了解更多信息,可以参考我所遵循的教程:配置 FTP 访问
vsftpd.log 中似乎没有任何日志表明存在问题,但在 filezilla 中打开详细日志记录会显示以下内容:
绑定数据连接源IP和控制连接源IP 192.168.1.100
我猜想这可能是一个问题,因为它看起来像一个本地 IP。不过我不知道如何修复这个问题,尤其是因为我的 vsftpd.conf 文件中还有以下内容:
pasv_address=(外部 Google 计算 IP)
我的 Google Cloud 防火墙规则是:
IP ranges: 0.0.0.0/0
tcp:20-21
Allow
1000
default
pass-ports
sftp
IP ranges: 0.0.0.0/0
tcp:40000-50000
(这些最终将被锁定 IP 但即使测试所有我都无法使其工作)
而且在我的 vsftpd.conf 文件中,我相信我添加了这些端口作为通过以下方式使用的端口:
port_enable=YES
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=41000
更新
我现在可以使用 lftp 和以下参数从盒子本身连接到它
设置 ftp:ssl-force true
我通过域名而不是 IP 进行连接,因为证书映射到域,所以它不适用于 IP。
然后我可以通过命令行创建新目录等。但是如果我尝试这样做ls
,它就会挂在那里。我也通过外部 FTP 客户端(如 filezilla)收到错误。这只是在命令ls at 0 [Making data connection...]
时超时LIST
Command: LIST
Error: The data connection could not be established: ETIMEDOUT - Connection attempt timed out
Response: 425 Failed to establish connection.
Error: Failed to retrieve directory listing
Error: GnuTLS error -15: An unexpected TLS packet was received.
Status: Disconnected from server: ECONNABORTED - Connection aborted
我认为可能相关的其他信息只有一条,即该域由 NGINX 端口转发到节点应用程序。但我认为这只适用于端口 80 和 443,因此不会影响端口 21。
有人有什么想法吗?