proFTPd w/ MySQL Auth,位于 NAT 后面 - 无法检索目录列表

proFTPd w/ MySQL Auth,位于 NAT 后面 - 无法检索目录列表

我在我的 CentOS linux VM(位于 NAT 后面)上运行 proFTPd。

这是我proftpd.conf目前的配置:http://pastebin.com/raw.php?i=X8rXYbSJ

每当我连接到 FileZilla 客户端中的 ftp 帐户时,我都会收到以下信息:

Status: Connecting to 109.xxx.xx.xxx:2121...
Status: Connection established, waiting for welcome message...
Response:   220 FTP Server Ready.
Command:    USER exampleuser
Response:   331 Password required for exampleuser
Command:    PASS ******
Response:   230 User exampleuser logged in
Command:    SYST
Response:   215 UNIX Type: L8
Command:    FEAT
Response:   211-Features:
Response:    MDTM
Response:    MFMT
Response:    LANG ja-JP;ko-KR;bg-BG;zh-TW;en-US;ru-RU;it-IT;fr-FR;zh-CN
Response:    TVFS
Response:    UTF8
Response:    MFF modify;UNIX.group;UNIX.mode;
Response:    MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
Response:    REST STREAM
Response:    SIZE
Response:   211 End
Command:    OPTS UTF8 ON
Response:   200 UTF8 set to on
Status: Connected
Status: Retrieving directory listing...
Command:    PWD
Response:   257 "/" is the current directory
Command:    TYPE I
Response:   200 Type set to I
Command:    PASV
Response:   227 Entering Passive Mode (109,xxx,xx,xxx,237,74).
Command:    MLSD
Error:  Connection timed out
Error:  Failed to retrieve directory listing

我查看了/var/log/proftpd/文件夹,它是空的。

我在此文件中发现以下内容/var/log/messages

Oct 29 12:34:33 mageDev proftpd[27542]: 127.0.0.1 - ProFTPD killed (signal 15)
Oct 29 12:34:33 mageDev proftpd[27542]: 127.0.0.1 - ProFTPD 1.3.3g standalone mode SHUTDOWN
Oct 29 12:34:34 mageDev proftpd[27560]: 127.0.0.1 - ProFTPD 1.3.3g (maint) (built Sat Sep 14 2013 20:13:10 UTC) standalone mode STARTUP
Oct 29 12:34:53 mageDev proftpd[27562]: 127.0.0.1 (::ffff:46.xx.xxx.xx[::ffff:46.xx.xxx.xx]) - FTP session opened.
Oct 29 12:34:53 mageDev proftpd[27562]: 127.0.0.1 (::ffff:46.xx.xxx.xx[::ffff:46.xx.xxx.xx]) - Preparing to chroot to directory '/ftp/exampleuser'

我该如何诊断此错误/问题?为什么会抛出此错误Failed to retrieve directory listing

这是服务器文件夹exampleuser

在此处输入图片描述

我意识到这里已经问过类似的问题:proftpd、动态 IP 和 filezilla:端口问题

与此用户不同,如果我删除我的,MasqueradeAddress我会收到此警告并且仍然出现同样的错误:

Status: Server sent passive reply with unroutable address. Using server address instead.
Command:    LIST
Error:  Connection timed out
Error:  Failed to retrieve directory listing

答案1

您收到“无法检索目录列表”错误消息,因为 FTP 客户端未从服务器获取目录列表,这很可能是由于防火墙或网络问题。

FTP 协议是在网络防火墙和网络地址转换出现之前发明的,它使用单独的命令通道和数据通道进行通信。

当您登录时,只有命令通道正在使用。

当您执行目录列表时,客户端和服务器在命令通道上互相告知应在哪个 IP 地址和端口(在您的示例中为 60746)上动态设置数据通道以传输目录列表数据。

这是通过 FTP 命令 PORT 或 PASV 完成的。

在您的情况下,客户端发出 PASV 命令,服务器回复: 227 Entering Passive Mode (109,xxx,xx,xxx,237,74).

括号内的前 4 个八位字节构成 IP 地址,后两个八位字节构成端口号(256*237 + 74 = 60746)。

您是否在虚拟机中运行 FTP 服务器,并且NAT为虚拟机配置了 样式的网络适配器(而不是Bridged)?那么这很可能是导致问题的原因,因为这些类型的 VM 通常无法从“外部”访问,因为它们共享物理主机的 IP 地址。

服务器上的端口 60000-65535 是否打开?您的配置指定了用于被动连接的范围。您可以将其缩小到更短的范围,以便在防火墙中要求更少的打开端口。

答案2

1)确保您的虚拟机在Bridged网络模式下运行,这样您就可以从路由器的 NAT 获取 IP,并且不会被两次 NAT。

2)你必须MasqueradeAddress在 ProFTPd 配置中启用该选项,并在其中输入你的公共 IP(尝试whatismyip.com

3) 您必须取消注释 ProFTPd 配置中的 Passive Ports 选项。它有两个数字,它们应该构成一个范围 FROM - TO。如果您愿意,可以将范围缩小很多。

3) 您必须将路由器上的以下端口转发到相应的 FTP VM 端口:20、21 和整个被动端口范围。

相关内容