我设置了 vsftpd 的配置如下:
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=YES
user_sub_token=$USER
local_root=/var/www/web-moc/wordpress
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
allow_writeable_chroot=NO
然后我运行 filezilla 并使用以下参数连接到 vsftpd:
host: 52.52.40.248
username: ftp_user
password: XXXXXXXX
port: 20
press "quickconnect"`
它显示了以下消息
Status: Connecting to 52.52.40.248:21...
Status: Connection established, waiting for welcome message...
Status: Initializing TLS...
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
它可以连接,但无法执行“list”命令并超时。我原本以为“list”命令应该可以成功执行。但是,服务器重新启动后我能够连接两次?它列出了登录目录 /var/www/web-moc/wordpress/ 的目录。
有人可以告诉我问题出在哪里吗?非常感谢您的帮助。谢谢,
安德鲁
答案1
您的问题是,您的服务器将其私有 RFC1918 地址作为对 PASV 命令的回复发送,并且外部 NAT GW 可能未配置为转发 PASV 模式的端口范围。
FTP 需要数据通道和命令通道 - 在两个不同的端口上。这意味着您的 FTP 服务器必须知道它的公共 IP 地址,以及为此配置的额外端口范围。命令list
通过命令通道发送,而回复应通过数据通道发送 - 这会超时。
2023 年不要实施 FTP。
不要使用 FTP。它已经过时了,使用诸如被动模式之类的奇怪方法支持 NAT。它本身不支持加密。它效率低下。
如果您需要经过身份验证的文件传输,请使用 ssh/sftp 或 webdav 之类的协议。如果您想提供未经身份验证的下载,请使用 https。
没有理智或合法的理由在 2023 年实施 FTP。