我正在首次设置 vsftpd 服务器。这是一个 openstack VM,因此我们的安全和云团队拥有大量默认配置,这些配置会自动应用于 vsftpd 实例。
以下是我们的配置(由我们的安全团队决定):
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
xferlog_std_format=NO
log_ftp_protocol=YES
pasv_enable=NO
我为 ftp 创建了一个名为 ftpuser 的本地系统用户。我的目的是让用户以该用户身份登录,并将文件写入该用户的目录。
当我们尝试登录时,执行任何命令都会得到以下结果:
msarro:~/ $ ftp x.x.x.x
Connected to x.x.x.x.
220 (vsFTPd 2.2.2)
Name (x.x.x.x:msarro): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
550 Permission denied.
200 PORT command successful. Consider using PASV.
此时,它挂起了。
大约 30 秒后,显示以下消息:
421 Service not available, remote server timed out. Connection closed.
连接关闭。
我们在 RHEL6 上运行 vsftpd-2.2.2-13。我已确保将以下行添加到 /etc/hosts.allow:
vsftpd : ALL
目前,除了切换到被动模式之外,我找不到任何关于如何解决问题的建议。这样做会出现以下情况:
msarro:~/ $ ftp x.x.x.x [13:13:08]
Connected to x.x.x.x.
220 (vsFTPd 2.2.2)
Name (x.x.x.x:msarro): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||31582|).
然后它会挂起约 1 分钟,并显示以下行:
ftp: Can't connect to `x.x.x.x': Operation timed out
200 EPRT command successful. Consider using EPSV.
如有任何建议,我们将不胜感激。
答案1
FTP 总是存在防火墙问题,因为它对数据使用单独的连接。
通过主动 FTP,数据连接将返回到客户端,因此它可能会被客户端防火墙(或可能是服务器端严格的传出规则)阻止。
使用被动 FTP 时,会与服务器建立第二个连接,这可能会被服务器端防火墙阻止。无论如何,“pasv_enable=NO”都会排除此选项。因此,您只能使用主动 FTP。
因此从服务器开始,查看防火墙规则是否阻止了从端口 20 出站的 TCP;然后移至边界防火墙(如果适用),然后移至台式机。