文件传输协议:FTP、FTPS 和 SFTP 的深度比较
文件传输协议(FTP)是应用广泛的数据传输方法之一,适用于各种应用场景。
FTP 存在不同的安全变体,例如 FTPS 和 SFTP,它们在工作原理上存在细微或显著的差异。这些差异主要体现在数据交换方式、通信的安全级别和类型以及防火墙设置等方面。
深入了解这些协议的工作机制以及它们之间的差异,将有助于您选择最符合自身需求的协议。
FTP 协议详解
FTP 是一种历史悠久的文件传输协议,最初在 RFC 114 中提出,后来演变为 RFC 959,成为目前使用的标准。
FTP 通过两个独立的通道进行信息交换:一个用于命令传输,另一个用于数据传输。 这意味着 FTP 需要开放两个端口才能正常工作,分别用于命令通道和数据通道。
命令通道在端口 21 上运行,负责接收客户端的连接并处理命令的传递。该通道在整个 FTP 会话期间保持开放,直到客户端发送 QUIT 命令,或者服务器因超时或其他原因强制断开连接。
数据通道使用按需分配的临时端口,这些端口在服务器端(被动模式)或客户端(主动模式)监听。数据通道负责服务器和客户端之间实际数据的共享,包括目录列表和文件传输。
与命令通道不同,数据通道仅在文件传输期间保持开放,传输完成后即关闭。对于多个文件或目录列表的并发传输,需要多个数据通道端口。
FTP 本质上是一种不安全的协议,因为命令和数据通道都以未加密的形式传输信息,这使得中间人攻击很容易拦截这些信息。
如上所述,FTP 需要在服务器端的端口 21/tcp 上建立一个入站连接,用于命令通道。对于文件传输和目录列表,需要定义被动端口范围并允许入站连接。具体的定义过程可能因使用的 FTP 服务器而异,详情请参考相关文档。在客户端,应允许端口 21/tcp 上的出站连接,以及服务器上定义的被动端口范围。
FTP 的身份验证
FTP 的身份验证信息在初始连接建立期间通过命令通道传递。FTP 可以使用用户名和密码进行身份验证,也可以匿名登录,允许任何人访问服务器。
主动和被动 FTP 模式
FTP 使用主动或被动模式来建立连接。
在主动模式下,用户从 FTP 客户端的随机端口连接到服务器的 FTP 端口 21/tcp,并发送 PORT 命令,指定服务器应连接的客户端端口。此端口将用于数据通道。
然后服务器从端口 20/tcp 连接到之前由客户端使用 PORT 命令指定的客户端端口。 此数据通道用于服务器和客户端之间的文件传输。
在被动模式下,客户端从 FTP 客户端的一个随机端口连接到服务器上的 21/tcp 端口,并发送 PASV 命令。然后服务器回复一个随机端口,该端口应该用于数据通道。然后客户端使用另一个随机端口连接到前面步骤中服务器回复的端口。然后,此数据通道连接用于服务器和客户端之间的文件传输。
因此,在主动模式下,初始连接请求由客户端发起,而数据通道连接请求由服务器发起。
另一方面,在被动模式下,初始连接请求和后续数据通道请求都是由客户端向服务器发起的。 由于入站/出站连接类型的方向,这种细微的差异有时会影响防火墙允许/阻止传统 FTP 请求的方式。
FTPS:加密的 FTP 协议
尽管您可能愿意承担与 FTP 相关的风险,例如未加密的数据传输和中间人攻击,但行业要求通常迫使您使用更安全的替代方案,如 FTPS 和 SFTP。 这两种协议相对更安全。
1990 年,随着安全形势的变化,网景公司创建了 SSL(安全套接字层)协议来保护网络上的通信,现在该协议称为 TLS。SSL 应用于 FTP 后,形成了 FTPS(文件传输协议安全)。FTPS 或 FTP/S 通常在端口 990/tcp 上运行,但有时也会在端口 21/tcp 上看到。类似地,对于数据通道,端口 989/tcp 是 FTPS 的常用端口。如果命令端口是 21/tcp,则其数据端口应为 20/tcp。
与 FTP 一样,FTPS 使用两个通道进行通信:命令通道和数据通道。 数据通道可以使用 FTPS 加密,或者命令和数据通道都可以加密以提高安全性。
与 FTP 类似,FTPS 也为命令和数据通道使用多个端口。端口 21/tcp 用于初始连接和身份验证信息传输。后续,需要不同的端口为每个文件传输或目录列表请求设置数据通道。因此,与 FTP 一样,您需要在防火墙中允许一系列端口。
FTPS 的身份验证
FTPS 的身份验证使用用户名和密码以及服务器证书进行加密。 当 FTPS 客户端连接到服务器时,它会检查服务器的证书是否受信任,以便继续进行连接。 此证书可以从客户端和服务器请求。
SFTP:基于 SSH 的安全文件传输
与 FTP 和 FTPS 不同,SFTP(SSH 文件传输协议)是一种完全不同的协议,它建立在 SSH(安全外壳)协议之上。默认情况下,SFTP 在端口 22/tcp 上运行,与 SSH 相同,尽管它可以配置为使用服务器上的自定义空闲端口。
SFTP 是一种安全的文件传输协议,它在底层使用 SSH 来发送和接收文件。SSH 是完全加密的,SFTP 是一种通过网络传输文件的强大且安全的方法。
SFTP 与 FTP 和 FTPS 不同之处在于,它使用单个通信通道来传输命令和数据流量,所有这些都以加密形式与初始身份验证一起传递。
SFTP 的身份验证
SFTP 的身份验证可以使用简单的用户名和密码来完成,但与 FTP 不同的是,所有信息(包括身份验证详细信息)都通过网络加密传递。
SFTP 还支持使用 SSH 密钥对(私钥和公钥组合)进行身份验证。客户端为指定用户提供私钥,服务器应具有相应的公钥才能成功进行身份验证。这种方法比使用用户名/密码组合更安全。如果在 SFTP 服务器上同时配置了这两种方法,则可以使用密码和 SSH 密钥对同一用户进行身份验证。
总结
本文总结了不同流行的文件传输协议(即 FTP、FTPS 和 SFTP)的基本特性,并重点介绍了这些协议之间的细微和主要区别。文章讨论了在防火墙中设置工作 FTP/FTPS/SFTP 服务器所需允许的端口,同时也强调了切换到更安全的协议(如 FTPS 和 SFTP)的必要性。
当本文中使用“FTP”一词时,指的是文中讨论的任何协议。FTP之所以存在已久,甚至更新的安全版本有时也称为 FTP,而不是日常使用的指定名称。
您可能对了解最佳 FTP 服务器软件和 FTP/SFTP 客户端也感兴趣。