FTP服务器的工作模式主要分为主动模式(Active Mode)和被动模式(Passive Mode)两种,核心区别在于数据连接的发起方不同,主动模式由FTP服务器主动发起数据连接,被动模式则由FTP客户端主动发起数据连接,实际部署中超过九成的场景推荐使用被动模式。
FTP服务器工作模式的基本原理
文件传输协议(FTP,File Transfer Protocol)从诞生之日起就采用双通道机制:一个用于发送指令的控制连接,一个用于传输文件的数据连接,搞清楚数据连接由谁发起,是理解FTP服务器工作模式的钥匙。
控制连接永远由客户端发起,目标是服务器的21号端口,当你在FTP客户端输入账号密码登录时,这条控制通道就建立起来了,但真正传输文件时,还需要另一条数据通道来完成。
主动模式和被动模式的区别,恰恰就藏在这条数据通道的建立方式里。
主动模式:服务器主动找上门
主动模式下,FTP客户端在控制连接上告诉服务器“我开放了一个端口,你主动来连我”,服务器收到指令后,从自己的20号端口向客户端的这个指定端口发起数据连接。
整个过程可以拆解为四步:
- 客户端随机开放一个大于1024的端口,等待服务器连接
- 客户端通过控制连接把端口号发送给服务器
- 服务器从20号端口主动向客户端这个端口发起连接
- 数据连接建立成功,开始传输文件
这种模式在早期的互联网环境中没有问题,因为当时的客户端和服务器都暴露在公网之中,可以直接互通,但放到今天,问题就出现了。
被动模式:客户端反客为主
被动模式的出现,主要是为了解决NAT和防火墙带来的连接障碍,现在绝大多数客户端都躲在路由器后面,内网IP无法被外部直接访问,如果服务器主动来连客户端的随机端口,这个连接请求会被客户端的防火墙和路由器的NAT机制拦截。
被动模式的运作逻辑完全反过来:
- 客户端在控制连接上发送PASV指令
- 服务器开启一个随机端口并告知客户端
- 客户端主动向服务器的这个随机端口发起数据连接
- 连接成功后开始传输文件
这样一来,整个连接过程都由客户端主动发起,客户端只需要允许出站连接即可,不用再开放任何入站端口,穿越防火墙的成功率大幅提升。
FTP主动模式和被动模式的区别详解
要判断你的应用场景适合哪种模式,得从以下几个维度对比:
| 对比维度 | 主动模式 | 被动模式 |
|---|---|---|
| 数据连接发起方 | 服务器主动连客户端 | 客户端主动连服务器 |
| 服务器所需开放端口 | 仅21号控制端口 + 20号数据端口 | 21号控制端口 + 随机数据端口段 |
| 客户端防火墙要求 | 需要开放入站端口,配置复杂 | 只需允许出站连接,几乎零配置 |
| 穿越NAT能力 | 极差,内网客户端基本不可用 | 很强,适配绝大多数网络环境 |
| 服务器带宽占用 | 相同 | 相同,性能无明显差异 |
| 安全性 | 服务器不易被端口扫描 | 若端口范围过大,暴露面稍大 |
主动模式在什么场景下还有用武之地
别急着全盘否定主动模式,在一些特殊环境里,主动模式反而是唯一选择。
最常见的场景是服务器端有严格的防火墙策略,只允许服务器对外发起连接,比如某些银行业的内网灾备系统,安全等级极高,服务器侧只放行特定端口的出站流量,此时被动模式需要开放服务器的大范围入站端口,安全部门根本不会批准,主动模式则只需要在防火墙上额外放行20号端口的出站连接,策略可控性更好。
另一个场景是FTP服务器与客户端处于同一内网且双方防火墙规则简单,比如企业内部的文件分发服务器,所有机器都在同一个网段,没有NAT干扰,主动模式可以减少一个随机端口的占用,对安全审计更友好。
为什么被动模式是大多数情况下的首选
行业共识认为,被动模式如今是FTP部署的标准选择,原因非常直白:互联网架构已经彻底改变了,客户端几乎都位于NAT之后,被动模式可以让客户端免于任何入站端口配置。
如果你在公司搭建FTP服务器供外网同事访问,千万别选主动模式,外网同事的路由器几乎不可能允许外部主动建立连接穿进来,他们会反复报“FTP连接超时”或“数据传输失败”,部署被动模式后,把所有数据端口范围加入防火墙白名单,一次配置,永久解决问题。
如何在实际环境中配置FTP服务器的两种模式
理解了原理,还得落到具体操作上,以最常见的vsftpd为例,看一台Linux服务器如何支持两种模式。
主动模式配置要点
在vsftpd的配置文件(/etc/vsftpd.conf)中:
connect_from_port_20=YES
这行代码确保服务器使用20号端口发起主动模式的数据连接,需要提醒的是,如果服务器本身没有公网IP或处于NAT后面,即便配置了主动模式,外网客户端依然无法完成连接,因为服务器发给客户端的IP地址无法被路由,客户端根本无从响应。
被动模式配置要点
被动模式需要明确指定数据端口的范围,否则服务器每次启用一个随机端口,防火墙规则没法写死:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
配置完成后,需要在服务器防火墙上放行30000-31000这个端口段:
firewall-cmd --permanent --add-port=30000-31000/tcp
firewall-cmd --reload
如果用的是云服务器,还得在简米云、酷番云等安全组里添加相同的端口段规则,这一步经常被忽略,导致FTP能登录但下载文件时卡死。
判断当前模式的小技巧
在Linux终端用curl命令,可以直观的看到当前工作模式:
curl -v ftp://your-server-ip -u username:password
如果输出里包含“Entering Active Mode”,说明服务器在尝试主动模式,如果包含“Entering Passive Mode”,则是被动模式,同时留意PASV指令的响应,服务器返回的IP和端口就是客户端将要连接的目标。
FTP服务器工作模式的进阶演变
主动模式和被动模式并不是FTP的终点,随着网络安全要求的提高,衍生出了两种重要的扩展工作模式。
FTPS:基于TLS加密的FTP工作模式
FTPS在原有的FTP协议基础上加入SSL/TLS加密层,工作模式延伸为显式(Explicit)和隐式(Implicit)两种:
- 显式FTPS:客户端先通过普通FTP协议连接21号端口,然后发送AUTH TLS指令请求升级为加密连接。
- 隐式FTPS:客户端从握手阶段就必须建立TLS连接,默认使用990端口。
这两种模式下的数据连接,同样区分主动和被动,对于传输敏感文件的企业场景,建议至少选择显式FTPS的被动模式,兼顾防火墙穿越与传输安全。
SFTP:并非FTP工作模式,但常被误认
很多人会把SFTP当成FTP加密版,其实它是基于SSH协议的文件传输协议,但SFTP的讨喜之处在于:它只用22号端口一个通道,不存在主动或被动的数据连接概念,从机制上彻底解决了端口开放问题。
如果你的文件传输场景适合用SFTP,可以省去不少防火墙配置工作,但传统FTP服务器的既有客户端和脚本依然兼容FTP模式,所以在特定场景下FTP依然有市场需求。
FTP服务器工作模式常见问题解答
问:无法使用FTP服务器,应该先排查主动模式还是被动模式?
先从客户端着手,尝试切换到被动模式看能否恢复传输,如果文件列表和目录访问正常,但下载文件时提示“数据连接建立失败”,大概率是主动模式受阻,将客户端模式切换为被动模式,并确认服务器被动模式的端口段已放行防火墙。
问:被动模式配置了还是连不上,问题出在哪里?
常见原因有两个,第一,防火墙只放行了21端口,没有放行配置的被动端口段,第二,服务器返回给客户端的IP地址是内网地址,客户端无法路由,在vsftpd配置中加入pasv_address=指令,指定服务器的公网IP地址,若服务器IP变化频繁,需要配合DDNS动态域名使用。
问:FTP服务器主动模式和被动模式对带宽和速度有没有影响
模式选择不会改变文件的传输速度,带宽消耗取决于文件大小和网络链路本身的吞吐量,与连接方式无关,主动模式和被动模式的区别集中在连接建立的三个阶段,数据传输的速率和效率一致,因此实际业务中无需因性能问题纠结模式选择,优先根据网络环境决定部署方式。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/732919.html





