单位以前防火墙的设置是华三的代理商给做好的,之后一段时间对于dmz区服务器起ftp应用,也没有多考虑,只是加了条策略permit destination *** destination-port ftp 搞定,如果不是因为现在增加了一块dmz区域,直接加上同样的一条策略permit destination *** destination-port ftp并没有起到作用,也不会引出以下思考!
经常听说ftp有主动模式(PORT)和被动模式(PASV)之分,但直到出现登录进去无法列出目录来,才在网上细细搜索了一下有关的资料:
网上有如下说法:
经常听说ftp有主动模式(PORT)和被动模式(PASV)之分,但直到出现登录进去无法列出目录来,才在网上细细搜索了一下有关的资料:
网上有如下说法:
FTP是仅基于TCP的服务,不支持UDP。 与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP 工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。
1、主动FTP:
命令连接:客户端 >1024端口 -> 服务器 21端口
数据连接:客户端 >1024端口 <- 服务器 20端口
命令连接:客户端 >1024端口 -> 服务器 21端口
数据连接:客户端 >1024端口 <- 服务器 20端口
2、被动FTP:
命令连接:客户端 >1024端口 -> 服务器 21端口
数据连接:客户端 >1024端口 -> 服务器 >1024端口
命令连接:客户端 >1024端口 -> 服务器 21端口
数据连接:客户端 >1024端口 -> 服务器 >1024端口
(一) 主动与被动FTP优缺点:
主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的 防火墙 阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口 很有可能被服务器端的防火墙阻塞掉。
简而言之:
主动模式(PORT)和被动模式(PASV)。主动模式是从服务器端向客户端发起连接;被动模式是客户端向服务器端发起连接。两者的共同点是都使用 21端 口进行用户验证及管理,差别在于传送数据的方式不同,PORT模式的FTP服务器数据端口固定在20,而PASV模式则在1025-65535之间随机。
(二)主动FTP
主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始 监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
针对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的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
1. 从任何大于1024的端口到服务器的21端口 (客户端初始化的连接)
2. 服务器的21端口到任何大于1024的端口 (服务器响应到客户端的控制端口的连接)
3. 从任何大于1024端口到服务器的大于1024端口 (客户端初始化数据连接到服务器指定的任意端口)
4. 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
说的很好,通过ethereal抓包,可以看出采用的是PASV被动模式,现在有个问题比较奇怪,为什么以前在dmz区加的时候也没有出现这么多麻烦呢,我也仅仅是只加了一条呢?
于是乎,我查看了防火墙相关的设置,没有找到与1024端口相关的设置,经常仔细比较,终于找到一条和我新建的dmz区不一样的设置:
firewall interzone trust dmz
packet-filter 3003 inbound
packet-filter 3003 outbound
detect ftp
packet-filter 3003 inbound
packet-filter 3003 outbound
detect ftp
以上的以前的DMZ区的设置。以下是我新加的:
firewall interzone trust dmz1
packet-filter 3102 inbound
packet-filter 3102 outbound
packet-filter 3102 inbound
packet-filter 3102 outbound
可以看出,区别在于detect ftp这一条命令,我试着将这条命令加上,奇迹出现在了,可以列出目录了~
在网上没有找到关于这条命令更详细的说明,我是这么理解的,是不是通过这条命令可以自动实现防火墙检测客户端连接ftp服务器的端口(1024<端口号>65535)。
现在测试改了ftp端口会出现什么情况,比如,将ftp改为25端口,现在即使加上那条命令detect ftp也不起作用,可以登录,但不能列目录!
detect 有一些参数:范围最大的应该是detect all加上这条也没有起到作用,实在没办法,我增加了一条permit destination *** destination-port gt 1024,现在好了,目录终于列出来了!但这不是我希望采取的最好方式!
思考:对于ftp端口更改后,能采取什么更安全的办法!是改成主动模式,还是如何设置,防火墙再做什么样的规则?请大家补充和纠正!
转载于:https://blog.51cto.com/webuser/162867