要让FTP服务器能被正常连接,至少要开放TCP 21端口用于控制连接,同时根据连接模式开放数据端口:主动模式需开放TCP 20端口,被动模式则需放行服务器指定范围内的高端口(如30000-40000)。
很多朋友搭建好FTP服务后,发现客户端怎么也连不上,排除了账号密码问题,十有八九就是端口没开对,FTP这个老资格协议,网络机制上和HTTP这种单一端口服务完全不同,搞不明白主动和被动模式的区别,很容易在防火墙配置上绕进死胡同。
FTP能连上,靠的是端口“两班倒”
FTP服务从设计之初就不是只有一个端口在工作,它划分了控制链路和数据链路,可以简单理解成一条“命令通道”和一条“数据通道”,控制链路专门负责传递登录指令、文件列表命令,而数据链路才真正负责传输文件和目录列表。
- 控制端口:TCP 21,客户端发起连接时第一个要碰的端口,任何模式的FTP连接都必须先通过它“握手”。
- 数据端口:主动模式为TCP 20,被动模式是动态端口区间。
主动模式vs被动模式:搞清楚谁先找谁
FTP的端口配置之所以让人头疼,核心就在于这主动模式(Active Mode)和被动模式(Passive Mode)两种工作方式,它们的区别不是服务端设置了个开关那么简单,而是直接决定了防火墙和安全组里要放行哪些端口。
主动模式下,服务器反过来连客户端
主动模式的工作流程是:客户端先从自己的随机端口(比如5000)连上服务器的21端口,发送数据连接请求,这时服务器会用自身的20端口主动去连接客户端“告知”的另一个随机端口(比如6000)。
这个过程中,服务器防火墙和安全组必须允许20端口对外出站,客户端的本地防火墙也要允许从服务器20端口发来的入站连接,如果你在公网环境,或者客户端本身在NAT后面,主动模式经常因为客户端接收不到服务器的回连而失败。
被动模式下,客户端大大方方来连
被动模式是当前公网环境下最常用的方案,客户端连上服务器的21端口后,服务器会回复“请用某个端口来传数据”,这个端口通常在服务器上配置的

端口范围内(比如常见的30000-40000),然后客户端再直连这个数据端口。
服务器只需要放行:21端口和配置的被动端口范围,对客户端没有额外的入站链接要求,基本绕开了客户端NAT和本地防火墙的限制,对绝大多数使用场景来说,强烈建议服务端开启被动模式,并固定一个端口范围,否则服务器默认动态分配端口,防火墙规则根本没法写。
实战:Linux和Windows服务器端口放行路径
不同系统的防火墙管理工具不一样,操作路径和指令也不同,下面按主流系统环境给出直接可用的参考操作。
在Linux服务器上放行FTP端口(以firewalld为例)
这是目前最干净的服务端配置方式,先确认你的ftp服务端程序支持被动端口范围,以vsftpd为例,编辑配置文件/etc/vsftpd/vsftpd.conf,在末尾追加两行:
pasv_min_port=30000 pasv_max_port=31000
保存后重启vsftpd服务(systemctl restart vsftpd),然后配置firewalld放行规则:
firewall-cmd --permanent --add-service=ftp firewall-cmd --permanent --add-port=30000-31000/tcp firewall-cmd --reload
这里--add-service=ftp会自动放行21端口,--add-port则放行了备用数据端口,如果在简米云、酷番云等云环境购买了云服务器,还需要到他们网页控制台的“安全组”里额外添加入方向规则,放行TCP 21和TCP 30000-31000,这一步忘了的话,杀毒软件关掉了也连不上。
行业共识认为,被动端口区间设置成30000-40000之间的连续段,能有效减少防盗链扫描软件的误判,又不至于太宽泛,65535个端口全开属实没有必要。
Windows服务器防火墙设置步骤
Windows系统以图形界面为主,在“Windows高级安全防火墙”里操作即可:
- 先新建一条入站规则,选择“端口”,协议选TCP,特定本地端口填
21。 - 再新建另一条规则,端口范围填
30000-40000(前提是FTP服务端也配置了同样的范围,比如FileZilla Server的被动模式设置中,直接可以设置这个区间)。 - 规则类型都选“允许连接”,且三种网络配置文件(域、专用、公用)全部勾选。

如果你用的是FileZilla Server,在它的管理界面里打开“被动模式设置”,勾选“使用自定义端口范围”,填入30000-40000,再输入本机公网IP或内网IP,比Windows自带IIS的FTP配置起来更直白,适合新手。
踩坑排查:开了21端口还是连不上,问题出在哪
不少用户反馈“明明把21端口加了白名单,怎么还是报错”?连不上FTP的原因通常有几种组合因素叠加影响。
| 表现 | 可能原因 | 验证方法 |
|---|---|---|
| 连接超时 | 服务端防火墙未放行21端口 | 用telnet 服务器IP 21看是否通 |
| 登录后卡在列目录 | 被动端口未放行或范围没配置 | 检查服务器是否开启被动模式,防火请墙规则是否涵盖整个范围 |
| 可以列目录,但上传大文件失败 | 数据端口被中断,被动模式不规范 | 重新配置端口范围并重启FTP服务 |
| 内网可连,外网连不上 | 云安全组NAT未映射,或端口未映射至公网 | 检查云控制台安全组入方向规则 |
特别提醒一下:很多云服务器的“防火墙规则”和“安全组”是两个平行的防线,操作系统自带的firewalld或iptables负责本机防护,云平台安全组是虚机之外的防护层,两边都要放行才可行,简米云服务器的FTP配置里,有八成以上的客户问题出在只配置了系统防火墙,忘了在安全组里加规则。
还有一点容易被忽视的细节:FTP服务绑定的监听地址,部分系统默认只监听127.0.0.1,导致外部请求到了服务器却无法进入FTP进程,检查配置里是否有listen_address=0.0.0.0或者设置为具体内网IP。
如何判断需要放行哪些数据端口
要搞清楚到底要不要开20端口,还是要先看服务端当前的工作模式。
- 如果是主动模式,一定要在防火墙里放行TCP 20出方向。
- 如果配置了被动模式,那就把被动端口范围的入和出都放行,主动模式的20端口可以不用管。
- 如果服务端没有配置被动端口范围,但它默认开了被动模式且使用随机高位端口,那么

要么改为端口段,要么把被动模式关闭
,改成主动模式统一管理。
就实际部署经验而言,自建的FTP服务器80%以上都是采用被动模式固定端口段解决,当你用FileZilla、WinSCP等客户端连接时,可以观察日志输出,里面会明确显示PASV或者PORT命令,两者分别对应被动和主动模式,也可以从客户端反向确认服务器的行为。
FTP端口相关常见问题解答
FTP服务端被动端口范围设多大合适
范围大小取决于实际并发量和网络环境,一般小型共享场景下,一个连接对应一个数据端口,并发数不高时设置2000-3000个端口区间即可,比如30000-32000,然后确保防火墙规则覆盖该区间,设置过宽会稍微增加防火墙策略的复杂程度,但影响不大。
服务器要开放哪些端口时还需要考虑安全吗
绝对需要,直接暴露21端口,会有不少社工库扫描器持续攻击,建议在服务器前置防火墙做IP白名单,或者改变监听端口为非常高区段(比如2121)再映射到外部21,但这会影响部分客户端的默认端口识别,所以多数情况下还是保留21,但隐藏系统用户和限制可访问目录是必须的,再配合fail2ban这类自动拦截工具,对暴力破解有较好的遏制效果。
云服务器FTP和普通家用宽带搭建的FTP端口配置区别
家用宽带运营商普遍封禁了80、443等常用入站端口,但21、20一般不在封禁之列,不过因为家用宽带没有公网IP(多为CGNAT大内网),客户端向内网发起的主动连接是到不了服务端的,所以必须用被动模式,而且在路由器上把FTP端口转发到内网服务器的IP,云服务器的优势在于可以直接获得公网IP,但安全组规则和系统防火墙都要配合着放行,两者缺一不可。
端口配置这件事,最关键的记住一句:FTP不是单端口服务,21端口只是入门资格,真正的数据通道才是连通性的最终裁判,动手前先确认自己的工作模式,再对着防火墙规则逐条比对入和出,特别是云环境下的安全组别漏掉,这样花十分钟就能彻底解决“端口放行却还是连不上”的疑难杂症。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/731360.html

