【双向网闸】FTP访问模块原理- FTP主动模式和被动模式的区别

林甲琦发表于:2020年09月17日 21:16:11更新于:2020年09月18日 09:54:53

适配版本

 

产品:双向网闸

版本:版本无关

平台:平台无关

关键字

关键报错信息:FTP访问、FTP的主动模式和被动模式

内容

 

背景:本文主要总结一下当前市场上配置FTP访问模块时,一线经常会咨询的问题。

如果客户端与服务器之间要加入网闸设备,没配置好网闸策略和采用合适的连接模式,很可能会导致上传、下载文件失败。

要避免出现这样的问题,首先要了解FTP的工作模式。

一、FTP协议基本常识

FTP协议不同于其他协议的是它使用了两个TCP会话流, 一个数据通道会话和一个控制通道会话。

控制通道:默认为TCP21端口,用于交互传输控制信令,如连接请求、传送请求等。

数据通道:用来连接客户端和服务期端的数据交互,比如上传文件、下载文件

二、FTP的主动模式和被动模式

两种模式在控制通道的建立过程都是一样的,但在建数据通道时不一样

主动模式下是服务端主动连接客户端以建立数据通道;被动模式下是服务端被动的,由客户端连接服务端来建立数据通道。

 

(1)PORT(主动模式)

PORT中文称为主动模式,或称active模式,最明显得特点是FTP服务器主动链接FTP客户端建立数据通道,其工作的原理如下图:

image.png 

流程

1. FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)

2. FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)

3. FTP服务器数据(20)端口到客户端端口(>1023)(服务器初始化数据连接到客户端数据端口)

4. FTP服务器数据(20)端口接受客户端端口(>1023)(客户端发送ACK包到服务器的数据端口)

简单的说,客户端使用控制通道主动告诉服务端:我打开了XX端口,你来连我吧。

 

(2)PASV(被动模式)

 PASV是Passive的缩写,即被动模式,特点是FTP客户端主动链接FTP服务器建立数据通道,工作原理:

image.png 

流程

1. FTP服务器命令(21)端口接受客户端任意端口(客户端初始连接)

2. FTP服务器命令(21)端口到客户端端口(>1023)(服务器响应客户端命令)

3. FTP服务器数据端口(>1023)接受客户端端口(>1023)(客户端初始化数据连接到服务器指定端口)

4. FTP服务器数据端口(>1023)到客户端端口(>1023)(服务器发送ACK响应和数据到客户端的数据端口)

简单的说,客户端使用控制通道主动告诉服务端:你打开端口,我来连你。

 

三、两种模式应用场景的区别

两者就应用场景和传输效率而言,是被动模式较为普遍,但个别场景主动模式更为合适。

比如,FTP服务器访问客户端设备,中间可能要经过NAT设备(如公网防火墙),如果用的是被动模式,客户端建立数据通道时访问FTP服务器IP或端口不是真实的IP或端口,被防火墙过滤了(因为没做FTP服务器的全端口映射),访问请求无法正常到达服务器,所以这种场景主动模式更为合适。

另外,主动模式下FTP服务器过NAT设备与FTP客户端建数据通道,NAT设备需要开启ALG(application-level gateway)来将数据包内容转换为内部的IP和端口

 

四、如何确定用户FTP服务器是主动还是被动模式

(1)linux上

在命令行输入vim /etc/vsftpd/vsftpd.conf:

1> active mode:

pasv_enable=NO (passive模式关闭)
port_enable=YES (active模式开启)
connect_from_port_20=YES (即默认情况下,FTP PORT主动模式进行数据传输时使用20端口(ftp-data)。YES使用,NO不使用。)

2>passive mode:

pasv_enable=YES(passive模式开启)

port_enable=NO (active模式开启)

一般默认为被动模式,如果两个参数都是“YES”,则说明服务器既支持主动模式,又支持被动模式。

(2)windows上

由于软件过多,建议自行百度。

 

(3)客户端上

image.png 

(3)抓包识别

抓包TCP21端口的控制通道,如果发现请求里带“PASV”信令的话,则此时客户端发起的请求为被动模式

image.png 

 

抓包TCP21端口的控制通道,如果发现请求里带“PORT X.X.X.X”信令的话,则此时客户端发起的请求为主动模式

image.png