实例透析 FTP

作者:刘强国 来源:techtarget 日期:2009-2-18

公司新买了台服务器,只用来提供 FTP 和 SQL Server 服务,为保证安全,只开放 21 和 1433 端口。但 FTP 不能访问,于是我就花了点时间研究了一下防火墙的日志和在网上找了些相关的资料,有了以下的总结。

由于前段时间公司新买了台服务器,只用来提供 FTP 和 SQL Server 服务(有固定公网 IP 并且对外服务),于是我就想用防火墙封住除开 FTP 和 SQL Server 之外的所有端口(也就是只开放 21 和 1433 啦),以保证服务器的安全,但是想不到的是开了 21 端口之后,FTP 依旧不能访问,让我很纳闷,于是我就花了点时间研究了一下防火墙的日志和在网上找了些相关的资料,有了以下的总结。

1、完成一个 FTP 的传输过程不仅仅只需要 21 一个端口,而是 2 个端口,21 端口只是一个命令端口,其实另外还有一个数据端口,我想这就是有些朋友在内网架设 FTP 并且在网关上做了 21 端口的映射之后外网还是不能访问的原因吧,另外一个数据端口是多少呢?这又牵涉到另外一个问题。

2、FTP 具有两种模式,分别是 PORT 模式(也叫主动模式)和 PASV 模式(也叫被动模式),怎么来理解这两种模式呢?我来打个比喻吧,在主动模式下:客户端给服务器端的 21 端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的某个端口,你就从这里把东西给我吧,服务器知道后就会通过另外一个数据端口把东西传给客户端,这就是主动模式,可以理解为服务端主动给客户端传输文件;在被动模式下:客户端给服务器端的 21 端口发命令说,我要下载什么什么,服务器端知道后,就打开一个端口,然后告诉客户端,我已经打开了某某端口,你自己进去拿吧,于是客户端就从那个端口进去拿文件了,这就是被动模式,可以理解为服务端被客户端拿走了东西,哈哈,可以看懂吧。

在 FTP 的历史中,本来只有主动模式的,但是为什么又出现了被动模式呢?这又牵涉到另外一个问题了,呵呵~

3、在很久以前(我也不知道多久),地球上还没有什么共享上网这种技术,但是后来出现了,所以也就有了下面的问题,大家都知道,共享上网就是很多台电脑共享一个公网 IP 去使用 Internet,再打个比喻吧,某个局域网共享 210.33.25.1 这个公网 IP 上网,当一个内网用户 192.168.0.100 去访问外网的 FTP 服务器时,如果采用主动模式的话,192.168.0.1 告诉了 FTP 服务器我需要某个文件和我打开了 x 端口之后,由于共享上网的原因,192.168.0.1 在出网关的时候自己的IP地址已经被翻译成了 210.33.25.1 这个公网 IP,所以服务器端收到的消息也就是 210.33.25.1 需要某个文件并打开了 x 端口,FTP 服务器就会往 210.33.25.1 的 x 端口传数据,这样当然会连接不成功了,因为打开 x 端口的并不是 210.33.25.1 这个地址,在这种情况下被动模式就有用了,相信大家已经能够理解被动模式是怎么个连接法了吧。(由于网关可以进行 NAT 转换,所以在局域网中也是可以使用主动模式的。ITPOW编辑注)

好了,说了这么多,现在可以回到第一个问题了。

在主动模式中,FTP 的两个端口是相对固定的,如果命令端口是 x 的话,那数据端口就是 x-1,也就是说默认情况下,命令端口是 21,数据端口就是 20;你把命令端口改成了 600,那么数据端口就是 599。这样使用防火墙就很方便了,只要开通这两个端口就可以了,但是如果客户端是共享上网的话那岂不是不能正常使用 FTP 了,这样还是不行,一定需要被动模式。

在被动模式中就麻烦了些,默认情况下命令端口是 21,但是数据端口是随机的,这个问题又让我头痛了一下,还好,我又找到了办法,因为被动模式中数据端口的范围是可以自定义的,在此我以 Serv-U 6.1.0.5 版为例,在 /Local Server/Settings/Advanced/ 中,看图:

Serv-U

这下好了,我把被动模式中的端口范围也设置为 20-20,那么不管客户端使用何种模式来访问我的 FTP,都只需要开通这两个端口了,再加上 SQL Server 的 1433,一台服务器总共才开了 3 个端口,这下应该比较安全了,装上防火墙,收工……

相关文章