在宝塔面板里搭建好FTP服务后,不少站点维护人员会遇到一种情况:账号密码都对,21端口也放行了,可FileZilla等客户端一连接就卡在读取目录、列不出文件,甚至直接超时断开。这种现象大多和FTP的被动模式端口没有正确放行有关。FTP本身分主动和被动两种模式,现代网络环境下客户端基本都用被动模式,而被动模式除21端口外,还需要一段额外的TCP端口供数据传输,这段端口如果在面板防火墙、服务器系统防火墙或云厂商安全组里没打开,连接就会失败。

一、理解FTP被动模式与端口的关系
FTP协议使用两个通道:命令通道和数据通道。命令通道一般走21端口,负责发送账号、密码和指令;数据通道才真正传输文件列表和文件内容。在被动模式(PASV)下,服务器会随机从一个配置的端口区间里挑一个端口告诉客户端,客户端再去连这个端口。如果服务器端的这段端口被任何一层防火墙挡住,客户端能登录却拿不到目录,表现就是连接上了但操作卡死。
宝塔面板集成的pure-ftpd或proftpd,默认通常在配置中限定了被动端口范围,例如40000到50000。很多人只在面板里放了21,以为FTP就能用,忽略了这段高位端口。尤其是在阿里云、腾讯云等环境,云安全组是独立于系统防火墙之外的第一道关卡,漏掉它就会导致本地telnet通、远程连不上的怪象。
二、查看宝塔中FTP服务的被动端口配置
以pure-ftpd为例,宝塔一般在软件商店的FTP服务设置或配置文件中指定被动端口。你可以登录服务器命令行,查看对应配置段。下面是一段典型的pure-ftpd被动端口配置示例,展示了如何在配置文件中声明端口区间:
# 查看 pure-ftpd 的被动端口配置(宝塔环境常见路径) cat /www/server/pure-ftpd/etc/pure-ftpd.conf | grep -i passive # 若看到类似如下内容,说明被动端口区间为 40000-50000 # PassivePortRange 40000 50000
如果使用的是proftpd,则配置写法不同,但原理一致。你需要找到类似PassivePorts的指令,确认它指定的范围。记下这个区间,后面放行都要以它为准。若配置文件里没写,部分版本会采用随机高端口,那种情况更麻烦,建议手动固定一段并写进配置。
固定被动端口不仅方便放行,也利于排错。修改配置后必须重启FTP服务才能生效。在宝塔面板中可直接点FTP软件的重启按钮,或者用命令行执行对应服务的重启指令,不要只改了文件却忘了让进程重新加载。
三、在宝塔面板与系统防火墙放行端口
打开宝塔面板,进入“安全”菜单,在端口控制里添加放行规则。协议选TCP,端口范围填写你在配置里看到的区间,比如40000-50000,备注可写FTP被动端口。保存后宝塔会调用系统防火墙(firewalld或iptables)写入规则。
# 若宝塔面板操作不生效,可手动在系统层放行(firewalld 示例) firewall-cmd --permanent --add-port=40000-50000/tcp firewall-cmd --reload # 查看已放行端口 firewall-cmd --list-ports
有些老旧系统用iptables,那就要用iptables命令或写入配置文件后保存。务必确认规则真正生效,而不是只在面板界面点了按钮。可以用iptables -L -n或firewall-cmd --list-all核对。系统层放行后,仍连不上的话,问题通常出在云厂商安全组。
云安全组是很多人的盲点。哪怕你服务器内部端口全开,入站规则没写40000-50000/tcp,外部请求依然进不来。登录云控制台,找到对应实例的安全组,添加入站规则,端口区间和协议必须与前面一致,授权对象一般是0.0.0.0/0或你指定的运维IP段。
四、客户端与FTP软件的设置检查
服务器端端口全通了,客户端也要用对模式。FileZilla在站点管理里,传输设置选“被动”,不要选主动;有些客户端默认主动,就会反过来让服务器连客户端被挡。同时,如果服务器有多网卡或做了NAT,还需在FTP配置里设被动IP为客户可访问的公网IP,否则服务器报的内网IP会让客户端连错地址。
# pure-ftpd 指定被动模式返回的公网 IP(防止NAT下返回内网IP) # 在 pure-ftpd.conf 中加入: # ForcePassiveIP 123.123.123.123 # 修改后重启 /etc/init.d/pure-ftpd restart
宝塔面板的FTP账号本身也要确认状态正常、目录权限对。有时端口全通了,但账号被禁或家目录权限是root独占,客户端登录后会因无权读取而表现类似被动端口故障。可先用命令行ftp工具在服务器本机连一遍,排除账号和目录问题,再查网络层。
另外,部分运营商对家庭宽带封21端口,这种属于外部环境限制,只能换端口或改用SFTP。若是服务器对服务器传文件,建议直接用SCP或RSync,比FTP更稳,也不操心被动端口。
五、系统化排查流程总结
遇到宝塔FTP连不上,建议按“配置—面板—系统—云组—客户端”五层顺序查。先确定被动端口区间,再逐层确认每处都放行相同TCP区间,最后核对客户端模式与被动IP。可用telnet 服务器IP 端口对21和某个被动端口分别测试,通了说明网络层没问题。
| 排查层 | 检查点 | 常用命令或位置 |
|---|---|---|
| 配置层 | 被动端口区间 | pure-ftpd.conf / proftpd.conf |
| 面板层 | 宝塔安全端口放行 | 宝塔面板-安全 |
| 系统层 | firewalld/iptables | firewall-cmd -l / iptables -L |
| 云层 | 安全组入站规则 | 云厂商控制台 |
| 客户端 | 被动模式与IP | FileZilla传输设置 |
把这张表顺着走一遍,基本能定位九成以上的宝塔FTP被动连接故障。排错时不要只盯21端口,数据传输端口才是被动模式真正的命门。每次改完一层,就测一层,能最快缩小范围,避免盲目重启服务浪费时间。