远程访问ftp服务器时无法列出目录

我安装了vsftpd,并且在本地访问时一切正常,但是当远程访问文件时我无法查看文件夹。

在我的远程PC中使用filezilla,我得到这个:

status: connecting to 192.xxx status: connection established, waiting for welcome message response: welcome command: user admin response: specify pass command: pass **** response: 230 login successful command: opts utf8 on response: 200 always in utf8 mode status: connected status: retrieving directory listing.. command: pwd response: 257 "/var/ftp" command: type I response: 200 switching to binary mode command: PASV response: 227 entering passive mode (192.168.8.5,59,0). command: list 

它停在那里,然后连接超时,我无法查看文件夹或ftp服务器上的目录。

在我的iptables -L -n

 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:20 

我的/etc/vsftp/vsftp.conf

 anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 #anon_upload_enable=YES #anon_mkdir_write_enable=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES #chown_uploads=YES #chown_username=whoever #xferlog_file=/var/log/xferlog xferlog_std_format=YES idle_session_timeout=120 #data_connection_timeout=120 #nopriv_user=ftpsecure #async_abor_enable=YES #ascii_upload_enable=YES #ascii_download_enable=YES ftpd_banner= Welcome #deny_email_enable=YES #chroot_local_user=YES #chroot_list_enable=YES #chroot_list_file=/etc/vsftpd/chroot_list #ls_recurse_enable=YES listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES 

问题很可能是您要求使用被动模式 – 客户端需要在指定的端口上与服务器build立新的数据连接,但是您不允许这些端口通过防火墙。 例如,上面的数据连接预计在端口TCP / 15104(59 * 256 + 0)上,但是您只允许入站的TCP / 21和TCP / 20(或者至less,这是你所告诉我们的)。

我们无法确定,直到我们看到整个防火墙规则集。 你可以修改这个问题来包含iptables -L -n -v整个输出吗?

此时,FTP服务器希望客户端打开一个新的连接,通过端口15014(59 * 256 + 0)上的TCP进行连接来传输数据 – 服务器上的防火墙或客户端(或之间的某处)拒绝这种联系。

IIRC wsftp有一些configuration设置,可以控制数据连接的端口范围。 检查你是什么(或者将它们明确地设置为你select的范围),然后在防火墙规则中打开这些端口,就像你已经有了FTP控制连接一样。

如果您不使用被动模式,则会出现类似的问题:服务器需要能够在指定的端口上打开到客户端的连接。

控制和数据连接的分离通常会导致防火墙问题。 如果您对FTP没有特定的要求(与不能更改的现有服务兼容,或只能访问FTP客户端或类似用户的用户),我强烈build议使用大多数SSH守护进程提供的SFTP / SCP,这消除了多个任意连接问题(一切都通过一个双工TCP连接完成,通常在端口22上),并且也更加安全。

更新

控制数据连接端口的设置是pasv_min_portpasv_max_port ,虽然可能不需要。 如果您加载了ip_conntrack_ftp模块,那么它可以跟踪FTP控制连接,并将传入的数据连接标记为“相关” – 因此您可以添加iptables规则以允许来自1024或更高端口的“相关”连接的数据包,以及接受“build立”连接。 有关这方面的一个示例,请参阅http://www.cyberciti.biz/faq/iptables-passive-ftp-is-not-working/#comments

我仍然推荐通过OpenSSH或类似的SFPT / SCP – 它更安全,更容易pipe理。

如果一切正常,看起来像networking连接中止。 尝试在连接的两端使用数据包嗅探器来检查,每一方都得到所有的数据包发送到它。

也尝试启用服务器上的详细日志logging,并检查发生了什么。

它看起来有点像您的服务器暴露LAN IP地址(而不是WAN IP)。

您可以尝试使用主动模式客户端进行确认(请注意,这需要您的客户端为全球可访问,所以您不能被隐藏在防火墙之后)。

尝试在您的vsftpd.conf中添加一行pasv_address=<external ip address> 。 检查手册了解更多详情。

转到您的服务器的防火墙configuration,并将TCP / 15104作为允许的TCP_IN和TCP_OUT端口