连接FTP目录无法列出Failed to establish connection.

情况如下图所示,网络中一台Linux服务器(SUSE Linux定制系统)上运行了vsftpd服务,从网络中另一台Linux主机和Windows主机上访问FTP服务,可以登陆上去却无法列出目录内容和传输文件:
FTPError1

可以确定的是其FTP服务是正常的,因其它服务器会从此机器上Down文件下去。

从图中也可以看出,服务器是拒绝PASV模式连接的,那么就是采用PORT模式连接。这里介绍下两种模式的差异:

  • PASV(被动)模式;客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用 PORT指令告诉服务器:“我打开了xx端口,你过来连接我”。于是服务器从20端口向客户端的xx端口发送连接请求,建立一条数据链路来传送数据。
  • PORT(主动)模式;客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用 PASV指令告诉客户端:“我打开了xx端口,你过来连接我”。于是客户端向服务器的xx端口发送连接请求,建立一条数据链路来传送数据。

从服务端的配置文件中看到配置port_enable=YES  pasv_enable=NO也印证了此想法。

那么从模式定义就已经得知,主动模式是要服务器主动向客户端建立连接的,这样一来主机防火墙就是一个问题了,于是添加相关条目:
FTPError2

然后再次访问成功:
FTPError3

小记: Linux中ftp命令连接默认使用PASV模式,Windows中ftp命令连接默认PORT模式;由于此环境中安全需要,服务器系统为集团公司定制,所以采用默认为主动模式;主动模式有助于网络防火墙策略添加。

发表评论

error: Content is protected !!