0%

FTP和FTPS

FTP和FTPS

做了FTP服务器之后经常用到的几条要点,记录一下方便复习,免得查半天。

FTP的被动模式和主动模式

直接走WIKI抄下来:

FTP有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且监听一个端口以创建连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。

一个主动模式的FTP连接创建要遵循以下步骤:

  • 客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,该tcp连接的来源地端口为客户端指定的随机端口x,目的地端口(远程端口)为服务器上的21号端口。
  • 客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。
  • 服务器打开20号源端口并且创建和客户端数据端口的连接。此时,来源地的端口为20,远程数据(目的地)端口为(x+1)。
  • 客户端通过本地的数据端口创建一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经创建好了一个连接。

简单来说,就是主动模式就是服务端主动向客户端指定的某个随机端口连接传输数据;但弊端是,如果客户端防火墙没有打开这个端口,传输就会失败。
而被动模式是服务端主动放开一个随机的端口,让客户端用它已经开放的端口去连接这个端口,这样就不需要客户端防火墙多做什么了。

更详细的讲解见此:FTP协议的主动模式和被动模式的区别

FTPS的显式链接和隐式链接

直接走WIKI抄下来:

隐式(Implicit)
隐式模式FTPS下不支持协商是否使用加密,所有的连接数据均为加密。客户端必须先使用TLS Client Hello消息向FTPS服务器进行握手来创建加密连接。如果FTPS服务器未收到此类消息,则服务器应断开连接。 为了保持与现有的非FTPS感知客户端的兼容性,隐式FTPS默认在IANA规定的端口990/TCP上监听FTPS控制通道,并在端口989/TCP上监听FTPS数据通道。这使得管理员可以保留端口(控制通道21/TCP与数据通道20/TCP)以兼容原始的FTP。 RFC4217中未定义隐式模式。因此,它被认为是FTP协商TLS/SSL中过时的早期方法。

显式(Explicit)
显式模式(也称为FTPES),FTPS客户端先与服务器创建明文连接,然后从控制通道明确请求服务端升级为加密连接(Cmd: AUTH TLS)。 控制通道与数据通道默认端口与原始FTP一样。控制通道始终加密,而数据通道是否加密则为可选项。 同时若服务器未限制明文连接,也可以使用未加密的原始FTP进行连接,也就是说服务器在相同的端口上同时提供FTP与FTPS服务。

这个讲的感觉挺清楚的,没必要讲解了。
如果FTPS服务器仅允许FTPS连接,则FTP客户端在连接时需要选择隐式FTPS;如果FTP服务器允许FTP与FTPS连接,则FTP客户端在连接时可选择显式FTPS。

闲谈

我自用的服务器使用了允许显式FTPS的设置,但似乎并不是每个客户端的网络状况都允许使用显式,可能和我用路由器做了端口映射有关。
此外,使用路由器的端口映射也会导致FTPS不可用,可能还是得在设置里改端口。

这里仅作速查笔记:使用ftps,隐式传输,被动模式。