有时候不是你的FTP软件出了问题,而是云服务器本身的策略把路堵上了。云服务器连不上FTP,绝大多数情况是安全组规则没放行端口、防火墙拦截、或者主动与被动模式不匹配导致的。
ftp连接不上服务器怎么办?先排查安全组放行顺序
很多用户第一次用云主机时,习惯先装FTP软件,然后直接拿客户端去连,结果就是一直卡在“连接超时”,这背后最常见的元凶是云平台的安全组。
安全组才是第一道门
安全组是云服务器外层的虚拟防火墙,简米云叫安全组,酷番云叫安全组,华为云也叫安全组,它的工作逻辑是:在数据到达服务器操作系统之前,安全组先过滤一遍,如果你的安全组没放行FTP相关端口,就算你在服务器里面把vsftpd配置得再完美,外部也连不进来。
登录云平台控制台,找到你的服务器实例,点击“安全组”或“防火墙”标签页,检查入站规则里有没有放行:
- 端口 21(FTP控制连接端口)
- 端口 20(主动模式数据传输端口)
- 30000-50000 这样的被动模式端口段
不建议把入方向规则设置成“放行所有端口”,更稳妥的做法是只放行FTP需要的端口,有些用户会直接放行0.0.0.0/0的21端口,但被动模式的数据端口没放行,结果就是能登录却列不出目录,或者传文件卡住不动。
操作系统防火墙别漏掉
安全组放行之后,还需要确认服务器系统内部的防火墙没拦住,云服务器上常见的防火墙工具是firewalld或iptables。
用root身份登录服务器,执行以下命令查看firewalld状态:
systemctl status firewalld
如果返回结果带 active (running),说明防火墙开着,可以这样放行相关端口:
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=30000-50000/tcp
firewall-cmd --reload
如果用的是iptables,执行:
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 30000:50000 -j ACCEPT
service iptables save
顺手提一句,国内一些云服务商的默认系统模板会启用防火墙,装好FTP后连不上,先怀疑安全组,第二件事就是查系统防火墙。
本地电脑的条件

云服务器那边都通透了,本地这一侧也有讲究,有些办公网络或家宽环境会封禁21端口出站,特别是部分运营商对低端口有限制,这种情况下,用手机开热点给电脑连一下试试,如果热点能连上,说明是本地网络把21端口禁了。
主动模式与被动模式的区别:为什么FTP连接云服务器总是卡在目录列表
FTP跟HTTP不一样,它用两个通道:控制通道和数据通道,这两种通道的建立方式不一样,就衍生出主动模式和被动模式两套逻辑,很多“能登录但列不出目录”的问题,就出在这里。
主动模式:云服务器主动找客户端
主动模式下,客户端向服务器的21端口发连接请求,服务器认可后,由服务器的20端口主动向客户端的随机端口发起数据连接。
问题来了:客户端电脑通常在NAT路由器后面,并没有一个公网IP,服务器的20端口根本找不到客户端的那个随机端口,所以主动模式在云服务器场景下很容易卡住。
被动模式:更适配云环境
被动模式下,客户端先跟服务器的21端口建立控制连接,然后服务器返回一个随机端口(比如45000),客户端再去连接这个端口做数据传递。
这个模式规避了客户端没有公网IP的问题,但要求安全组和防火墙放行那段随机端口范围,比如vsftpd配置文件中指定的30000-50000段。
多数FTP客户端工具的默认模式就是被动模式,但也有一些老旧工具默认用主动模式,如果你是运维人员,在浏览器地址栏输入 ftp://公网IP 这种方式通常用的是被动模式;如果使用Windows资源管理器直接访问,有时候不好控制模式切换,这可能是你连不上的原因之一。
抓包定位模式问题
如果分不清是哪一侧导致连不上,可以在服务器上用tcpdump看一眼:
tcpdump -i eth0 port 21 -nn
再在客户端触发了连接之后,观察服务器日志,如果控制连接建立了,但列目录时客户端一直转圈,然后报“数据连接超时”,基本就是被动模式端口段没放行,这时候回到安全组设置里,确认放行了你指定的被动端口段。
服务端配置检查:vsftpd这两个参数决定连接成败
Linux服务器上常用的FTP服务是vsftpd,它的配置文件位于 /etc/vsftpd/vsftpd.conf,很多细节没配好,外部就访问不正常。

开启被动模式和端口段
配置文件里需要显式打开被动模式相关的三项:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=50000
设置完记得重启vsftpd服务:
systemctl restart vsftpd
然后回到云平台控制台,把30000-50000这个TCP端口段加到安全组入方向规则里,这一步很关键,很多人只放行了21端口,看到“需要被动模式”的消息后不知道去哪开端口,结果一直无法连接。
别忽略了写权限
如果你连得上但无法上传文件,检查配置里有没有这一行:
write_enable=YES
还有个常见情况:root用户默认被禁止登录FTP,配置里有这一行:
local_root=/var/ftp
或者你创建了专门用于FTP的普通用户,用户的主目录要有可写权限,这里权限搞错,客户端能连上但传不了任何文件。
监听地址配置错误
如果listen_address填了某个内网IP,而你的云服务器有多个网卡(比如内网网卡和公网网卡),FTP服务只监听内网IP,从公网怎么都连不上,一般建议把监听地址留空,或者直接监听0.0.0.0。
还要看云服务器的安全策略,部分云服务商的底层网络还可能限制FTP这类明文传输协议的某些行为,如果平台推送过“基础网络安全防护”类似的通知,里面有关于FTP的拦截选项,记得关了或者加白名单。
本地客户端设置与常见错误形态
配置层面都对了,还要看FTP客户端这边的设置是否匹配。
FileZilla的坑
FileZilla是比较常用的FTP客户端,使用它连接云服务器时,注意两点:
- 加密方式:如果服务器端没启用TLS,客户端默认请求“如果可用则使用显式FTP over TLS”,可能因为版本协商导致连接被重置,把加密设置改为“仅使用普通FTP”就能解决。
- 传输模式:传输设置里选“被动”,并勾选“如果服务器在被动模式下发送回错误IP地址,则回退到主动模式”这个选项,部分云环境里,FTP服务器返回的内网IP地址是10开头或172开头的,客户端无法直接访问,就会超时。
连接超时与“网络错误”提示
用命令行工具测试会更直观:
ftp 你的云服务器公网IP
输入用户名密码后,如果提示 Connection closed by remote host,大概率是vsftpd主机的userlist_enable=YES配置把用户拒了,看看 /etc/vsftpd/user_list 文件里是不是把你的登录用户加进去了。
换个角度说,大批用户反馈的“ftp 连接不上云服务器”问题,通过以上几个步骤基本都能找到原因,优化云服务器FTP访问,在传统数据中心里常用的小技巧比如让FTP服务同时监听IPv4和IPv6在大多数云平台同样适用。
排错顺序建议
当遇到连不上云服务器FTP时,按照这个顺序排查能少走弯路:
- 云平台控制台安全组规则:确认21端口和被动端口段已经放行
- 服务器系统内防火墙:确认firewalld或iptables没有拦截
- vsftpd服务状态:执行
systemctl status vsftpd看是否在运行 - 配置文件参数:确认
pasv_enable、pasv_min_port、pasv_max_port三个值 - 客户端模式:切换成被动模式再试
- 云平台是否开放了21端口:部分平台为了安全默认不开放21端口,需要在控制台手动添加规则
有时候你买的是简米云服务器,但仔细检查后发现用的是VPC网络,安全组规则里入方向全是拒绝的,那自然连不上,只要按照步骤逐一确认,问题总会暴露出来。
相关问答:关于FTP无法连接云服务器的常见疑问
问:ftp连接不上服务器怎么办,服务器上服务明明在运行
答:服务在运行只是表象,需要确认它在正确的接口上监听,执行 ss -lntp 查看21端口的状态,如果监听地址是127.0.0.1,说明只能本机访问,更常见的是安全组规则没生效,修改安全组后立即生效,可以先通过 telnet 公网IP 21 测试端口通不通,如果telnet显示拒绝连接或超时,参照前文配置检查安全组。
问:云服务器FTP被动模式需要开放哪些端口?
答:在你打开的vsftpd配置文件中,pasv_min_port 和 pasv_max_port 两个值定义的就是被动模式端口范围,比如配置了30000到50000,那么就放行这个TCP范围,注意在云平台安全组和服务器系统防火墙中都要放行,两个地方缺一不可,数据传输正常需要保证被动模式端口范围内的TCP连接被放行。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/861483.html


评论列表(1条)
读了这篇文章,我深有感触。作者对端口的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!