我已经在FileZilla服务器上设置了自签名证书,并通过TLS启用了FTP。 当我从客户端FileZilla连接,我能够进行身份validation,每天1-2次我得到目录列表…
Status: Connection established, waiting for welcome message... Status: Initializing TLS... Status: Verifying certificate... Status: TLS connection established. Status: Logged in Status: Retrieving directory listing... Status: Directory listing of "/" successful
但剩下的时间不能得到一个目录列表
Status: Connection established, waiting for welcome message... Status: Initializing TLS... Status: Verifying certificate... Status: TLS connection established. Status: Logged in Status: Retrieving directory listing... Command: PWD Response: 257 "/" is current directory. Command: TYPE I Response: 200 Type set to I Command: PORT 192,168,1,119,88,109 Response: 200 Port command successful Command: MLSD Response: 150 Opening data channel for directory listing of "/" Response: 425 Can't open data connection for transfer of "/" Error: Failed to retrieve directory listing
作为一个协议FTP是有点奇怪的鸭。 它使用两个TCP连接 ,而不仅仅是大多数协议使用的一个。 您有端口21的命令和login连接和第二个连接,数据连接。
对于被动FTP,第二个连接是在1024以上的随机分配的可用TCP端口。
你的问题似乎表明你的防火墙没有第二个端口。
通常情况下,智能防火墙会自动打开第二个端口。 由于FTP是明文协议,因此您的防火墙可以扫描端口21上的命令连接上的stream量。它将识别将要分配的PASV端口并dynamic打开防火墙,并允许该特定客户端与该端口使用的PASV端口之间的stream量会话。
由于您正确使用不起作用的TLSencryption。 使用FTPS防火墙不能再在COMMAND频道上窥探。
解决scheme:修复PASV端口(-range):
一种解决scheme是将您的FTP服务器configuration为使用一个小范围的端口,或者只是一个端口,并创build一个防火墙规则来打开这些端口。 这在FileZilla文档中有解释:
常规设置==>被动模式设置==>自定义端口范围
然后在防火墙中打开该端口范围。
另外,如果您位于NAT路由器的后面,还有第二个问题,即PASV响应不仅包括端口号,还包括FTP服务器的IP地址。
如果您仍然使用明文forms的FTP,则NAT路由器通常可以使用正确的外部IP地址重写该内部IP地址响应。
再次因为你使用TLS的FTP不再工作。
幸运的是,FileZilla还有一个解决scheme,它可以纠正这个问题,并通告外部/公共IP地址,而不是实际的(内部)IP地址。