摘要
- FTP 从一开始就把命令与文件数据放在两条连接中:客户端建立控制连接,传统主动模式却由服务器连接客户端指定的数据端口。
- 对分组过滤防火墙而言,这次回拨是一条打向随机高端口的新入站连接。RFC 1579 建议使用
PASV:服务器监听并报告端口,客户端主动建立数据连接。 - RFC 2428 的
EPSV只返回端口,沿用控制连接的地址,减少 NAT 对应用载荷的改写。方向改变并不等于完成认证;主动模式的反弹攻击与被动端口抢占仍要求实现本地约束对端。
用户看到一次登录,网络完成两次会合
RFC 959 里的 FTP 有两个清晰平面。控制连接承载命令与回复,可以维持很久;数据连接承载目录列表或文件,可以为一次传输而开、传完即关。一次看似连续的操作,实际要让两对进程分别会合。
两条连接的发起者并不相同。用户端先连接服务器的控制端口;到了数据阶段,用户数据进程通常监听,服务器数据进程再主动连接。PORT 命令允许客户端指定另一组主机地址和端口,甚至可以让用户同时控制两台服务器,叫一台直接把文件送到另一台。
这不是实现偏差,而是协议明文留下的能力。客户端给出坐标,服务器按坐标行动。在主机普遍能接收入站连接的环境里,回拨是正常流程;但坐标从来没有自动成为授权。
防火墙把第二通电话当成陌生来电
到 1994 年,RFC 1579 面对的是另一种部署现实。客户端通常每传一次数据就换一个端口,再通过 PORT 告诉服务器。保护客户端的分组过滤器因此看到:外部服务器正在向一个不可预先列入规则的高端口发起新 TCP 连接。
FTP 知道它属于已登录会话,过滤器却未必拥有这层语义。放开所有临时端口会掏空边界政策;让每台边界设备解析应用对话,又会把协议复杂性搬进中间盒。问题不在任何一方“没有遵守互联网”,而在两种本地权力分配撞到了一起:FTP 允许客户端接受回拨,防火墙只愿意让受保护端主动发起新会话。
PASV 只换了拨号的人
RFC 959 早已定义 PASV。客户端发出该命令后,服务器的数据进程在一个非默认端口监听,回复监听位置,然后等待客户端连接。控制通道与临时数据通道于是都从受保护的一侧向外发起。
RFC 1579 建议客户端供应商把 PASV 作为通常行为,即使没有防火墙也可以使用。这个改动没有合并控制与数据,没有替换文件格式,也不一定增加消息:当时的客户端本来常在传输前发送一次 PORT。
更重要的是,它不需要全网同时切换。不支持 PASV 的服务器可以返回错误,客户端在环境允许时仍可退回主动模式。旧组合没有被宣布“无效”,只是无法穿过拒绝回拨的那道边界。真正的变化发生在客户端默认值、服务器实现与防火墙规则里。
RFC 1579 还讨论过让整个会话默认被动的 APSV,却写明没有已知实现。一个没有进入运行系统的命令只是纸上的可能性;它不能靠发表替代采用。
EPSV 删除了一份容易说谎的地址
传统 PORT 和 PASV 把 IPv4 地址与 TCP 端口一起编码。IPv6 不再适合旧长度,NAT 又让控制载荷里的地址可能不同于线路上实际可见的地址。翻译器若要维持会话,就得读懂 FTP 命令并改写应用数据。
RFC 2428 定义 EPRT 与 EPSV。前者携带地址族、网络地址和端口,保留扩展后的主动模式;后者让服务器进入监听,却只在回复中给出 TCP 端口。数据连接沿用控制连接的网络协议与服务器地址。
对于同一对机器之间的普通传输,控制连接已经用运行事实确定了对端。再写一遍地址,只会制造一个可能被 NAT 改写、被实现误读的副本。EPSV 把共同信息缩到真正新增的事实:临时监听端口。
EPSV ALL 又给选择画出会话边界。服务器接受后,必须拒绝 EPRT、PORT、PASV 等其他数据连接设置命令。客户端若后来需要三方传输,应重新建立 FTP 会话。限制很强,却只作用于明确的一次会话,也有清楚的退出路径。
连接方向不能证明对方是谁
RFC 2577 揭示了主动模式授权过宽的一面。攻击者可在 PORT 中写入第三方机器与服务端口,再让 FTP 服务器向目标发送攻击者准备的内容。服务器成为“反弹”节点,真实发起者更难追踪,还可能绕过基于源地址的限制。
建议的约束包括拒绝连接 TCP 1024 以下端口、在不需要服务器间传输时禁用 PORT,以及当访问政策依赖网络位置时同时核对控制与数据连接的远端地址。
被动模式只是把监听口搬到服务器,并没有消灭抢占。如果系统按顺序分配临时端口,攻击者观察一次合法传输后就可能猜中下一端口,抢先连接,造成拒绝服务、窃取文件,或把伪造数据塞进本应属于已认证客户端的流。RFC 2577 因此建议随机化本地数据端口。
核心仍是两条连接的绑定。控制连接上的登录身份,不能凭“第一个连上临时端口”自动继承到数据连接。PASV 提供适合边界的方向,EPSV 提供更干净的坐标;两者都没有提供加密、内容认证或对端身份证明。
最小共同机制留下本地决定
共享协议只规定如何让一端监听、如何把必要坐标交给另一端。客户端选择请求哪种模式;服务器选择端口、限制主动目标;边界设备选择允许哪个方向;端点负责把控制身份与数据对端联系起来。
于是采用可以渐进发生。主动模式在合适环境继续运行,被动模式在边界后成为更好的组合,EPSV 简化两方传输,EPRT 保留特殊三方能力。兼容与否由命令回复、连接结果和实际运行决定,不需要一个持续机构给实现授予地位。
来源与边界
双连接模型、PORT 与 PASV 来自 RFC 959;防火墙分析与被动模式建议来自 RFC 1579;IPv6/NAT 扩展、EPSV 与 EPSV ALL 来自 RFC 2428;反弹攻击、地址核对与端口抢占来自 RFC 2577。
这些文档没有统计今天各种模式的部署比例,也不能保证所有客户端、服务器、代理、NAT 与防火墙都按建议工作。它们更不能证明被动 FTP 已经安全。可核实的历史结论更窄:当服务器回拨撞上新的网络边界,FTP 通过交换第二条连接的发起者继续运行,同时把剩余信任判断留给真正执行协议的系统。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
