FTP分为两大类:主动FTP,也就是一般的FTP;被动FTP。

FTP是仅基于TCP的服务,不支持UDP。 与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。

(一)主动FTP

主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+X(大多数版本说X=1,即监听N+1端口,但通过多次抓包显示X=2,即监听N+2端口),并发送FTP命令“port N+X”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+X)。

抓包过程如下所示:

1、客户机192.168.80.10首先以任意端口1112,向192.168.80.248的21号端口发送建立FTP连接的控制请求。经过TCP三次会话后,成功建立FTP控制连接;之后双方维护这个FTP控制连接。

clip_p_w_picpath002

之后双方通过个FTP控制连接发送诸如用户名密码之类的控制信息,如下:

clip_p_w_picpath004

2、客户机192.168.80.10开始打开并监听自己的1114(N+2)端口,并将此端口信息通过FTP控制信息发送到FTP服务器。

clip_p_w_picpath006

概要信息中显示,请连接192.168.80.10的(4,90)端口,这里的(4,90)是点分十进制模式,换成二进制为10001011010,再换成十进制为1114。

3、FTP服务器192.168.80.240使用自己的20号端口去连接客户机192.168.80.10的1114端口,建立数据连接。

clip_p_w_picpath008

4、断开FTP连接过程如下:

clip_p_w_picpath010

针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:

1、任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)

2、FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口)

3、FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)

4、大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)

(二)被动FTP

为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。

在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。

当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。

抓包过程如下:

1、客户机192.168.80.10首先打开两个任意端口1070和1071(后面会看到),然后以1070端口向192.168.80.248的21号端口发送建立FTP连接的控制请求。经过TCP三次会话后,成功建立FTP控制连接;之后双方维护这个FTP控制连接。

clip_p_w_picpath012

之后双方通过个FTP控制连接发送诸如用户名密码之类的控制信息,如下:

clip_p_w_picpath014

2、客户机192.168.80.10使用1070端口向FTP服务器的21号发送一个PASV指令,然后FTP服务器192.168.80.248向客户机发送一个FTP指令,大意是我已打开了(70,81)端口,即18001端口。

clip_p_w_picpath016

3、然后客户机开始使用1071端口与服务器的18001端口建立TCP连接,传送数据。

clip_p_w_picpath018

对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:

1、从任何大于1024的端口到服务器的21端口 (客户端初始化的连接)

2、服务器的21端口到任何大于1024的端口 (服务器响应到客户端的控制端口的连接)

3、从任何大于1024端口到服务器的大于1024端口 (客户端初始化数据连接到服务器指定的任意端口)

4、服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)

(三) 主动与被动FTP优缺点:

主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

FTP的主动、被动访问不但由服务器端决定,客户端的访问模式也决定了实验的成功与否。如下图更改XP中FTP访问模式,默认是以被动模式访问,CMD以主动模式访问。

clip_p_w_picpath020

实例:

clip_p_w_picpath022

主动模式下访问,防火墙策略如下:

access-list in-out extended permit icmp any any

access-list in-out extended permit tcp host 192.168.80.248 eq ftp-data host 172.16.1.10 range 1024 65535

access-list out-in extended permit icmp any any

access-list out-in extended permit tcp host 172.16.1.10 host 192.168.80.248 eq ftp

access-group out-in in interface outside

access-group in-out in interface inside

被动模式下访问,防火墙策略如下:

access-list in-out extended permit icmp any any

access-list out-in extended permit icmp any any

access-list out-in extended permit tcp host 172.16.1.10 host 192.168.80.248 eq ftp

access-list out-in extended permit tcp host 172.16.1.10 host 192.168.80.248 range 18000 18010

access-group out-in in interface outside

access-group in-out in interface inside