FTP 模式主动还是被动(active or passive)

很多人或许不知道,FTP 的模式会戏剧性地影响到它的运行,甚至带来一系列的网络安全问题。FTP 的模式决定了究竟是由 FTP server 还是由 FTP client 来发起 TCP 连接。FTP 支持以下两种模式:

  1. 第一种模式通常也被认为 normal 标准模式,虽然我们经常用 active 模式来提及它,这种模式也是 FTP 默认的
  2. 第二种模式就是 passive 模式。

在 active 模式下,是由客户端(client)发起控制信令(port 21),去连接 server 端的 21 端口,当客户端通过了一系列包括用户名,密码的验证后,需要接收数据时,就是由 server 端初始化 TCP 连接,使用 20 端口与客户端的 1023 以上的随机端口进行数据通信。 在 passive 模式下,客户端初始化数据通信,使用的目的端口号是由 server 端随机提供的。

主动模式(active ftp operation)

active 模式下安全性稍差,同时防火墙的配置也较为复杂,它必须预见到 FTP server 端将主动给 client 端做数据发送。主动模式下的具体运行机制如下图所示:

  1. 客户端使用源端口 5150 与 server 端的 21 端口通信,请求建立连接。
  2. server 收到后,发送应答信息,OK(ACK),client and server 通过控制端口交换控制信令。
  3. 当用户请求列出服务端目录或下载数据时,客户端软件会发送 PORT 命令,并包含有大于 1023 的随机端口号,告知服务端使用这个端口号将数据发送过来。这里客户端采用了 5151 端口。
  4. 服务端打开 20 端口做为数据发送的源端口,向客户端的 5151 端口发送。
  5. 客户端应答,传输过程结束。

主动模式

被动模式(passive ftp operation)

这种模式较为安全,因为所有连接都是由客户端发起,所以连接被窃取的可能性减小了。之所以被称为被动模式,是因为服务端看起来完全是被动的。详细过程如下:

  1. 被动模式下,客户端初始化控制信令连接,使用 5150 源端口与服务端的 21 端口建立连接,并使用 PASSIVE 命令请求进入被动模式。
  2. 服务端同意进入 PASSIVE 模式,并随机选择一个大于 1023 的端口号,告知客户端。
  3. 客户端接收到此信息后,使用自已的 5151 端口与刚才服务端提供的 3268 端口进行数据通信,这里 5151 是源,3268 是目的。
  4. 服务端收到信息,回传数据并发送应答 ACK(OK)

被动模式

主动与被动 FTP 优缺点

主动 FTP 对 FTP 服务器的管理有利,但对客户端的管理不利。因为 FTP 服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动 FTP 对 FTP 客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

-->