FileZilla客户端连接腾讯云FTP服务器时出现“227 Entering Passive Mode”

FTP的主动模式(PORT Mode)及被动模式(Passive Mode)

FTP的特殊性:

大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。但是,FTP协议却有所不同,它使用双向的多个连接,而且使用的端口很难预计。一般,FTP连接包括:

1)一个控制连接(Control Connection)

这个连接用于传递客户端的命令和服务器端对命令的响应。它使用服务器的21端口,生存期是整个FTP回话时间。

2)几个数据连接(Data Connection)

这些连接用于传输文件和其他数据,例如:目录列表等。这种连接在需要数据传输时建立,而一旦数据传输完毕就关闭。每次使用的端口也不一定相同。而且,数据连接即可能是客户端发起的,也可能是服务器端发起的。

 

FTP有两种工作模式,PORT方式和PASV方式,中文意思为主动式和被动式 ,详细介绍如下:

主动模式(PORT Mode):在FTP协议中,控制连接使用周知端口21。相反,数据传输连接的目的端口通常实现无法知道。FTP协议使用一个标准的端口21作为ftp-data端口,但是这个端口只用于连接的源地址是服务器端的情况,在这个端口上根本就没有监听进程。FTP的数据连接和控制连接的方向一般是相反的,也就是说,是服务器向客户端发起一个用于数据传输的连接。连接的端口是由服务器端和客户端协商确定的。FTP协议的这个特征对ISA转发以及防火墙和NAT的配置增加了很多困难。

被动模式(Passive Mode):在这种模式下,数据连接是由客户程序发起的,和主动模式相反。是否采取被动模式取决于客户程序,在客户端ftp命令行中使用passive命令就可以关闭/打开被动模式。

 

主动 FTP :

命令连接:客户端 >1024 端口 → 服务器 21 端口 (FTP客户端随机开启一个大于1024的本地端口向服务器的21号端口发起连接)

数据连接:客户端 >1024 端口 ← 服务器 20 端口

被动 FTP :

命令连接:客户端 >1024 端口 → 服务器 21 端口

数据连接:客户端 >1024 端口 ← 服务器 >1024 端口

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

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

从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。

 

解决此问题的办法也很简单,我们需要在云主机控制台上创建安全组规则,设置入站规则如:1024到65535端口和21端口

 或者开启PASV(被动模式)

在 /etc/vsftpd/vsftpd.conf 的最下面加入

pasv_enable=YES

pasv_min_port=30000

pasv_max_port=30999

wq 保存退出

重启FTP服务器

systemctl restart vsftpd

同样在云主机控制台上创建安全组规则,设置入站规则:30000到30999端口和21端口,就OK了!

 

转载于:https://www.cnblogs.com/opsprobe/p/10672752.html