一、FTP

网络诞生最初的动因就是去中心化和资源共享,文件是初期最主要的资源共享形式,把文件存放在集中的位置供大家访问。今天的互联网是由数以亿计的个人PC、工作站、服务器、小型机、大型机等具有不同型号、不同架构的物理设备所组成,而且还有不同的操作系统。那么如何在如此复杂的设备之间解决文件传输问题呢?

FTP(File Transfer Protocol,文件传输协议)用于局域网或者公网的文件共享。早期互联网的文件分享并没有考虑到安全问题,所以使用的是明文传输,使用TCP协议。特点就是使用简单、兼容性好、基于C/S架构。

二、FTP原理

FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,C端则是向FTP服务器发送连接请求,以建立数据传输链路的主机。FTP服务端口和工作模式都有两个:

1、FTP工作模式

1)主动模式

主动模式(port)由客户端确定数据端口。

Step1. C端端口N首先和FTP服务器的TCP 21建立连接(即命令通道建立)。

Step2. 当C端想要接收数据时,通过命令通道发送命令(port N+1,表示C端允许S端回连数据端口N+1传输数据)。

Step3. S端传输数据前,先和C端的N+1端口连接,然后通过20端口传输数据至C端N+1端口。

vsftpd开启主动模式:pasv_enable=no

主动模式缺点:FTP企图与C端的高位随机端口建立连接,这个高位端口可能会被C端防火墙阻塞

2)被动模式

被动模式(pasv)是由FTP服务器确定数据端口:C端主动向S发起数据连接。

Step1. C端端口N连接到S端的21/tcp。

Step2. C端想要接收数据,通过命令通道发送命令(pasv,表示被动模式),S端接收命令开启端口P。

C端需要明确告知S端采用被动模式,S端知道C端采用被动模式后,根据配置文件中的高端口范围,开启范围内的随机一个端口用来进行数据传输

Step3. S端通过命令通道发送命令(port P,表示连接P端口)。

S端告知C端,连接数据端口P

Step4. C端使用N+1端口连接S端P端口,进行数据传输。

注意:如果FTP服务器前存在防火墙,那么就必须放行以下会话或者端口:

  • C端高端口(>1024端口)N主动连接到S端21端口;所以S端防火墙需要放开21/tcp

  • C端高端口(>1024端口)N+1主动连接到S端高端口;所以S端防火墙需要放开ftp配置文件中的高端口范围

vsftpd开启被动模式:pasv_enable=YES
数据连接的最大端口和最小端口,其中0表示任意端口:
pasv_min_port=30000
pasv_max_port=30099

被动模式缺点:C端要与FTP建立两个连接,其中一个要和高位端口连接,可能被S端防火墙阻塞。如果FTP需要和更多的C端建立连接,那么就必须支持pasv,为了安全和避免被防火墙阻塞,需要一个有限的端口范围来减少服务器高位端口的暴露,这样不在这个范围的任何端口会被服务器的防火墙阻塞(防火墙上需要放开相应端口),尽管没有消除对FTP的威胁,但是减少了很多危险。

2、传输类型

3、企业部署FTP服务注意事项

企业通常考虑安全性方面,会将FTP服务器放置在独立于企业防火墙之外/DMZ区,采取只读挂载存储,这样C端只能读取和下载文件,不能上传文件。这就避免了黑客将文件上传至FTP服务器,导致其他C端下载了恶意文件。同时企业FTP服务器采用被动模式,可以使得更多的客户端连接到FTP。