FTP有主动模式和被动模式,平常使用都是被动模式,而且各种FTP客户端默认也都是被动模式
被动模式的数据连接端口号不是21,20,所以还需要开通相应端口才可以。
相应端口是什么端口?先看下原理
一、FTP的两种连接
FTP(文件传输协议)是最典型的双连接协议,需要用到控制连接和数据连接。
顾名思义,控制连接用于控制指令,比如协商ftp的验证方式(是否允许匿名,允许的话用什么代表身份,不允许的话要传用户名密码等),这里没有进行真正的文件传输。
数据连接用于真正的文件传输,包括列出文件列表,上传下载文件等。
二、FTP的两种模式及端口号
FTP的主动和被动两种模式,最关键的区别在于两点
1、数据连接谁发起
2、数据连接的端口号是什么
主动FTP,数据连接由服务器发起,也就是三次握手的第一次是服务器先来的,端口号服务器端20,客户端随机,这时按题主的操作,只要放行20和21就可以。其中21是控制连接的端口号。
下图为主动FTP的工作过程

被动FTP,数据连接由客户端发起,也就是三次握手的第一次是客户端先来的,端口号服务器端和客户端都是随机,下图为被动FTP的工作过程

但是,端口都是随机这怎么放行??总不能放行所有吧
三、解决方案
也是腾讯云推荐的解决方案,在Linux的ftp配置中,设置被动FTP的端口号范围,比如39000到40000,那么接下来在安全组放行这个端口范围及可。
以vsftpd为例,当然vsftpd也是最常用的ftp软件
在配置文件(默认位置/etc/vsftpd/vsftpd.conf)里加入以下内容,并重启vsftpd服务就可以了。
pasv_enable=YES
pasv_min_port=39000
pasv_max_port=40000
那么问题来了,为什么不改成主动??
因为主动是服务器主动,对客户端来说是被动,被动就是别人进来,别人进来对客户端来说就是入站连接,防火墙是默认禁止陌生的入站连接的,所以经常会导致无法成功连接ftp
阿里云、腾讯云安全组设置
首先登录阿里云(或腾讯云)网站,进入控制台,进入服务器实例列表,找到想要增加端口的实例,到安全组配置,增加配置 39000/40000端口放行
文章转摘自链接:https://www.zhihu.com/question/62312887/answer/1296199208