FTP 模式主动还是被动(active or passive)
很多人或许不知道,FTP 的模式会戏剧性地影响到它的运行,甚至带来一系列的网络安全问题。FTP 的模式决定了究竟是由 FTP server 还是由 FTP client 来发起 TCP 连接。FTP 支持以下两种模式:
- 第一种模式通常也被认为 normal 标准模式,虽然我们经常用 active 模式来提及它,这种模式也是 FTP 默认的
- 第二种模式就是 passive 模式。
在 active 模式下,是由客户端(client)发起控制信令(port 21),去连接 server 端的 21 端口,当客户端通过了一系列包括用户名,密码的验证后,需要接收数据时,就是由 server 端初始化 TCP 连接,使用 20 端口与客户端的 1023 以上的随机端口进行数据通信。 在 passive 模式下,客户端初始化数据通信,使用的目的端口号是由 server 端随机提供的。
主动模式(active ftp operation)
active 模式下安全性稍差,同时防火墙的配置也较为复杂,它必须预见到 FTP server 端将主动给 client 端做数据发送。主动模式下的具体运行机制如下图所示:
- 客户端使用源端口 5150 与 server 端的 21 端口通信,请求建立连接。
- server 收到后,发送应答信息,OK(ACK),client and server 通过控制端口交换控制信令。
- 当用户请求列出服务端目录或下载数据时,客户端软件会发送 PORT 命令,并包含有大于 1023 的随机端口号,告知服务端使用这个端口号将数据发送过来。这里客户端采用了 5151 端口。
- 服务端打开 20 端口做为数据发送的源端口,向客户端的 5151 端口发送。
- 客户端应答,传输过程结束。
被动模式(passive ftp operation)
这种模式较为安全,因为所有连接都是由客户端发起,所以连接被窃取的可能性减小了。之所以被称为被动模式,是因为服务端看起来完全是被动的。详细过程如下:
- 被动模式下,客户端初始化控制信令连接,使用 5150 源端口与服务端的 21 端口建立连接,并使用 PASSIVE 命令请求进入被动模式。
- 服务端同意进入 PASSIVE 模式,并随机选择一个大于 1023 的端口号,告知客户端。
- 客户端接收到此信息后,使用自已的 5151 端口与刚才服务端提供的 3268 端口进行数据通信,这里 5151 是源,3268 是目的。
- 服务端收到信息,回传数据并发送应答 ACK(OK)
主动与被动 FTP 优缺点
主动 FTP 对 FTP 服务器的管理有利,但对客户端的管理不利。因为 FTP 服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动 FTP 对 FTP 客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。