访问FTP服务器需要开启的端口并不固定,核心是21号控制端口,外加主动模式下的20号数据端口,或被动模式下动态分配的高位端口,配合云安全组和防火墙放行才能完整跑通。
很多人设置FTP服务器时只放行了21端口,结果客户端能登录却列不出目录,或者传文件卡死,原因就在于FTP和HTTP不一样,它的控制通道和数据通道是分开的,不同传输模式需要开放的端口完全不同。
FTP的21端口到底是干什么的
21端口是FTP服务器的“大门”,专门负责控制连接,客户端通过它发送用户名、密码、切换目录、删除文件等指令,服务器也通过这个端口返回操作结果,无论你用的是主动模式还是被动模式,21端口都必须开放,这是FTP服务工作的前提。
默认情况下,FTP服务监听在TCP 21端口,如果你改了服务端配置,比如把监听端口改成2121,那客户端连接时也得指定2121,否则连不上。
日常排查中,ping通不代表21端口通畅,因为ICMP协议和TCP协议是两回事,用命令telnet 服务器IP 21可以快速验证控制端口是否可达,如果连接成功,终端会返回一个以220开头的欢迎信息,220 (vsFTPd 3.0.3)”,如果提示“无法打开到主机的连接”,请确认服务是否启动、防火墙和安全组是否放行。
FTP主动模式和被动模式的端口差异
这是配置FTP端口时最让人困惑的部分,也是ftp端口21和20的区别的核心所在,FTP的数据连接用哪个端口,取决于当前使用的是主动模式还是被动模式。
主动模式下的20端口
主动模式下,客户端通过21端口发送PORT指令,告诉服务器“我这边开了某个高位端口等你连过来”,服务器随后用自己的TCP 20端口主动向客户端指定的那个端口发起连接,数据传输走这条新链路。
这意味着,主动模式下你需要在服务器端放行20端口,同时客户端所在网络的防火墙不能拦截入站连接,如果客户端在NAT后面,比如家庭宽带或公司局域网,主动模式经常失败,因为服务器无法直接连到客户端的内网IP。
被动模式下的随机端口范围
被动模式是为了解决主动模式在NAT环境下频频出错而设计的,客户端通过21端口发送PASV指令,服务器收到后回复一个IP地址和一个高位端口号,然后客户端主动去连服务器的那个端口。

这个高位端口是动态分配的,不同FTP服务器软件有不同的默认范围:
- vsftpd默认没有限制范围,可能使用系统分配的任意高位端口,通常在1024到65535之间
- ProFTPD的PassivePorts指令可自定义范围,比如
PassivePorts 60000 61000 - Windows IIS FTP默认使用1024到65535的随机端口
如果你使用被动模式,不能只开21端口,还需要把服务器上整个被动端口范围都放行,否则客户端登录正常,但传输数据时会长时间卡住,最终超时。
行业共识认为,在云服务器和NAT环境下,被动模式是主流选择,因为客户端只需要能访问服务器的端口,无需服务器回连客户端,省去了大量网络兼容性麻烦,配置时建议把被动端口范围缩小到1000个以内,比如30000到31000,这样安全组规则比较好写,也不用担心端口被占用。
被动模式FTP端口范围怎么对外开放
搞清楚被动模式需要开哪些端口后,实操层面要注意两点:一是FTP服务端的被动端口范围要配置明确,二是防火墙和安全组要精确放行。
先固定FTP服务端的被动端口段
以CentOS系统上常用的vsftpd为例,编辑/etc/vsftpd/vsftpd.conf,加入两行:
pasv_min_port=30000
pasv_max_port=31000
保存后重启服务。
Windows IIS的配置位置在“FTP防火墙支持”设置里,填入“数据通道端口范围”,例如30000-31000,同时填写防火墙的外部IP地址,如果服务器在NAT后面,这个外部IP必须填写公网IP,否则客户端拿到的还是内网地址,连接依然会失败。
防火墙和安全组两处都要放行
很多人在服务器本地防火墙开了端口,却忘了云控制台的安全组,或者反过来,结果FTP还是不通。本地防火墙和云安全组是两道关卡,任何一个没放行都不行。
以简米云和酷番云为例,安全组入方向规则需要放行:
TCP 21端口,控制连接TCP 30000-31000
端口段,被动模式数据连接
本地防火墙同步放行,CentOS 7以上使用firewalld:
firewall-cmd --permanent --add-port=21/tcp firewall-cmd --permanent --add-port=30000-31000/tcp firewall-cmd --reload
放行之后用客户端测试,观察能否登录并列出目录,再尝试上传下载文件验证数据连接是否通畅。
SFTP和FTP用的端口一样吗
这是另一个高频混淆点,SFTP虽然名字里有FTP三个字母,但它和FTP完全是两套协议,使用的端口也不同。
SFTP基于SSH协议,默认走TCP 22端口,它不需要单独的控制端口和数据端口分离设计,所有认证、指令、传输都复用同一条SSH加密连接,SFTP只需要开放22端口即可,节点少,配置简单,安全性也更高。
如果你用FileZilla连接SFTP,填写的端口是22,而不是21,有一部分用户在配置FTP时误把SFTP当FTP处理,或者反过来,导致连接失败,核心判断标准是:对方给你的登录信息里有没有指定协议类型,如果端口号明确写了22,那就是SFTP;如果只给了一个FTP地址和账号密码,默认走21。
FTPS是另一种情况,它在FTP基础上加了SSL/TLS加密,默认使用990端口做隐式TLS控制连接,数据端口则根据主动或被动模式动态分配,FTPS的部署复杂度比SFTP高,但兼容性更好,适合需要和现有FTP流程无缝衔接的场景。
FTP服务器端口配置的常见故障排查顺序
端口都开了,FTP还是连不上或者传不了文件,一般按以下顺序排查,能解决相当一部分问题:
- 确认FTP服务进程在运行,监听端口是否正常,用
netstat -tlnp | grep 21或ss -tlnp | grep 21查看,没有输出说明服务没起来,或者端口被改过 - 确认安全组入方向放行了对应端口,且端口范围或协议类型没写错
- 确认服务器本地防火墙状态,测试时可以临时执行
systemctl stop firewalld验证是否防火墙拦截,但验证完要赶紧恢复,线上环境不要长期关防火墙 - 在客户端更换传输模式,FileZilla默认是“主动”模式,可以手动切到“被动”模式再测试,如果切了模式就好了,说明问题出在数据连接端口放行不对
- 确认FTP配置里的初始化IP地址,NAT环境下,vsftpd需要设置
pasv_address为公网IP,ProFTPD也要配MasqueradeAddress,不然客户端收到的是内网IP,连接必然失败

配置FTP端口这件事,90%以上的问题都出在被动模式端口范围没放行,或者服务端NAT配置缺失,把21端口和被动端口范围一起在安全组和防火墙里放行,FTP服务器基本就能正常工作了。FTP不是只开一个21端口那么简单,完整的数据传输链路才是真正的关键。 建议上线前主动测试一遍上传和下载,确认数据端口真的通了再交付使用,省得后面反复排查。
FTP服务器端口开放哪些算合理
开放端口越少越安全,但FTP本身需要多个端口协作,合理的最小集合是:
- 21端口,用于FTP控制连接
- 20端口,仅在主动模式下使用,如果确定只用被动模式,可以不开放
- 一段高位端口,如30000-31000,用于被动模式数据传输
如果你不确定客户端会用哪种模式,最稳妥的方案是两种模式的数据端口都放行,同时在客户端配置里锁定被动模式,减少变量。
为什么FTP传不了大文件
大文件传输失败,多数情况下不是端口问题,而是连接超时或者防火墙对长连接做了空闲断开,FTP控制连接和数据连接都是TCP长连接,长时间不操作容易被中间设备掐断,可以在客户端设置保活机制,或者调整防火墙的连接超时时间,也有较大比例的情况是服务器端被动端口范围太窄,多个并发传输占满了所有可用端口,导致新传输无法建立。
简米云FTP服务器端口怎么配置
简米云服务器上配置FTP,和普通Linux服务器逻辑一致,只是多了一层云安全组,登录简米云控制台,找到对应ECS实例,在安全组规则里添加入方向规则,放行TCP 21和TCP 30000-31000,优先级默认即可,服务器内部再用firewalld或iptables放行同样的端口,注意,简米云安全组有地域属性,如果实例迁移过地域,安全组也要跟着重新绑定。
配置完成后,用FileZilla验证,登录成功后查看“信息”窗口,能看到“使用被动模式”或“服务器发来了目录列表”之类的日志,这代表FTP服务器端口配置已经生效。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/700038.html

