标题: [转] FTP协议对防火墙安全性的挑战
cjc


软件作者



UID 1
精华 18
积分 2773
帖子 1467
威望 2773
金钱 72
阅读权限 200
注册 2002-5-7
发表于 2009-1-16 13:48  资料  个人空间  短消息  加为好友 
[转] FTP协议对防火墙安全性的挑战

from: http://bbs.et8.net/bbs/showthread.php?t=419780

FTP协议对防火墙安全性的挑战(Little@FAT翻译)

FTP协议对防火墙安全性的挑战
作者:Stefaan Pouseele 2002年7月
最后更新: 09/08/2003
翻译: Littlefat 2003年9月29日
(最后将附上完整的中文DOC和中英文对照DOC,翻译疏漏和差错之处,欢迎指正)
原文URL: http://www.isaserver.org/article ... ewall_Security.html
(转贴请保持完整,引用请指明出处)
1. 摘要
FTP(文件传输协议)是最流行,但也几乎是最容易被错误理解的协议之一。最常见也是被问得最多的问题之一是:为什么一些特定的FTP客户端或者服务器配置在防火墙、路由器和其他Internet连接设备的环境中不能工作。如果网络和防火墙的管理员理解FTP协议是如何工作的,他们在碰到这些和FTP相关的问题时就比较容易解决了。
在这篇文章中,我们会关注以下的问题:
· FTP协议是如何工作的
· FTP协议带来的挑战
· 解决FTP协议的问题
· 关于Secure FTP
必须说明,在这篇文章中,我们只会从FTP连通性的角度来看问题,即我们只对FTP协议是怎样连接的和那些连接之间有什么相互关系感兴趣。我们不会关心某个特定的FTP客户端和FTP服务器软件应该如何配置。
2. FTP协议是如何工作的?
2.1. 一些历史(背景)
自从文件传输协议(FTP)在1970年代出现以来,它已经成为第一个在TCP/IP网络上建立的文件交换标准之一。FTP的设计有很大的可伸缩性,所以FTP协议也可以在非TCP/IP网络上使用,也可以在多种不同类型的设备间互相交换文件。
FTP协议设计成客户端和服务器端在最少限制条件下互相交互。换句话说,FTP的设计是基于(假设)数据包(能够)直接传送到目的地的(条件下)建立在通道上通讯。这和现在的网络环境中可能有中间设备(防火墙,NAT设备等等)来负责将数据包从一个主机传递(传入和传出)到一个私有网络的情形形成鲜明对比。
(FTP协议的)基本的描述文档是1985年10月的 RFC 959 。这里还有一些和FTP协议相关的RFCs文档。你可以在RFC Sourcebook中找到所有有关FTP协议的技术文档的索引。
2.2. FTP模式
FTP使用TCP传输协议建立端到端的可靠连接。FTP会使用两个连接:第一个是控制连接,第二个是管理数据传输的数据连接。首先开始初始化控制连接的用户被视作客户端,服务器端的功能则是由远程主机提供的。
在FTP应用的两端都有一个协议解释器(PI)和一个数据传送进程(DTP)。在连接的客户端还有一个用户界面。



用户界面和协议解释器通讯,而协议解释器掌控着控制连接。协议解释器除了要对控制连接做出反应,还要管理数据连接。在文件传输期间,数据管理是DTP实现的。
2.3. FTP协议模式
FTP协议是一个复杂的协议,因为它要用到一个控制连接(第一连接)和一个数据连接(第二连接)。数据连接(第二连接)是怎样产生的取决于FTP协议模式。FTP有两种模式:
· 普通或端口活动模式
· 被动或被动模式
我们现在来看看连接创建的细节有何不同,它们之间又有怎样的关系。
2.4. 控制连接
控制连接是USER-PI和SERVER-PI之间交换命令和应答的通讯通道。这种连接和Telnet协议类似。
当一个FTP客户端希望和一个FTP服务器交换文件时,FTP客户端必须首先建立控制连接。客户端使用一个没有什么特别的端口N(N>1023)来和服务器的众所周知的端口21(IANA分配的)建立一个TCP连接。


需要注意的是数据传输的过程中控制连接仍需要保持。换句话说,没有控制连接数据连接就不可能存在。另一方面,在一个控制连接的会话期间(即整个FTP会话期间――译者注),数据连接不需要时刻存在,并且一个控制连接会话期间可能有多个数据连接同时存在。最后需要注意,客户端有责任在使用FTP服务结束后,主动关闭控制连接。但是不管怎样,服务器也会发出关闭控制连接的动作。
2.5. 数据连接
数据连接是USER-DTP和SERVER-DTP间用来交换真正数据的通讯通道。按照所选择FTP模式的不同,数据连接是由服务器端初始化(端口模式(或活动模式))或者是客户端初始化的(被动模式)。
在端口模式(active mode)中,客户端发送PORT命令到服务器,这个命令告诉服务器如果要和客户端建立数据连接应该使用哪个主机(IP地址)和哪个端口(大于1023)。在服务器接受了PORT命令后,它会使用自己的端口20(IANA指定)和从PORT命令中得知的(客户端的)IP地址和端口号和客户端建立数据连接。
在被动(Passive Mode)模式中,客户端发送PASV命令到服务器,(客户端使用)这个命令是询问服务器将会在哪个数据端口(不是缺省的20端口)“侦听”并等待(客户端主动过来)连接而不是(直接和服务器)建立一个数据连接。如果服务器支持被动模式,它会应答这个命令,应答包中包含了主机(IP地址)和服务器(启用的)正在侦听的端口号(大于1023)。然后客户端会在本地随机找一个空闲的端口(大于1023)来和从服务器的应答中得到的IP地址和端口号(与服务器)建立数据连接。
需要注意的是数据连接只有在收诸如LIST,RETR,STORE等传送命令的应答后才会被建立。所以,FTP模式必须在客户端发送传送命令之前确定。而且,那些传送命令会得到不止一个回复:第一个应答('Positive Preliminary Reply')是表明数据传送可以开始,而在数据传输结束后会传送第二个应答('Positive Completion Reply')。
信息流转如下图所示:



我尽量将图画得浅显易懂。我的目的是要说明,最重要的信息是谁向谁、用哪个端口来初始化控制连接和数据连接。这在图中已经表示得很清楚了。如果你对更深的技术细节感兴趣,你可以参考相关的RFC文档。
3. FTP协议带来的挑战
在下面的讨论中我假设你只有基本的包过滤(防护手段)来保护你不被入侵。这种情形看起来已经过时了,但是现在仍然有很多实际的应用环境中只有基本的包过滤防护。基本包过滤只能单独分析每个包,而不会关心连接状态和包与包之间的关系。
注: RFC1579文档中有关于如何修改FTP客户端程序特性以使其能够更好地和防火墙互动(在防火墙下更好地工作)的描述。
3.1. 端口模式
使用端口模式的FTP(会话)的主要问题还是在客户端。FTP客户端实际上没有真正和服务器建立数据连接。它只是告诉服务器它在哪个端口侦听并等到服务器主动过来连接。从客户端的角度看来这就象是外部系统要使用任意一个高编号端口来和内部的客户机建立连接。要允许如此广阔范围的、不确定端口号的向内连接在安全性上考虑实在是有很大的风险。
解决这个问题的一个办法是只允许那些TCP源端口号是20的连接向内连接到高编号端口。这种方法假设连接进来的是FTP服务器的数据端口,但是有很多工具可以让你手工设置源端口号,所以,你无法保证那些向内连接的源端口号是20的连接一定是由FTP服务器发起的。
这种情形的改进是你限制向内连接到高编号端口的TCP连接的源端口号是20并且同时发起连接的源IP地址也是你所信任的FTP服务器的。这里主要的缺点是你必须预先确定你可以信任的FTP服务器的地址,并且你还要小心那些源端口号和地址都是假的的欺骗(攻击)。
这种情形下服务器端的危险要比客户端的小一些。但是,仍然要考虑允许向外访问如此大范围的端口而只是为了一个服务应用的安全性是很低的。(因为这样与FTP服务器在同一网络内的)任何一个客户端都可使用一个高编号端口(作为源端口)去访问外部Internet上的一个网络应用并且作为第一连接。
(进一步的)一个改进是只允许源端口号是20的连接才能连接到外部的高编号端口(在FTP服务器的出口防火墙上限制)。这样,你可以假定只有FTP服务才能在Internet上连接到高编号端口。再进一步的改进是你限制源端口号为20的连接只能访问有限的内部网络IP地址。但是, 你仍然要处理那些IP和端口号欺骗(的攻击)。
3.2. 被动模式
被动模式的客户端除了需要(主动)向外访问(而端口模式是服务器是向里)高编号端口之外,所需要访问的端口(范围)和端口模式的客户端没有什么不同。这看起来好像没有什么不同,但是实际上从安全性的角度来看有极大的区别。原因是在一个好的包过滤(防火墙设定的条件下),连接访问的方向是向外比向里要更加安全。
因为你无法预计FTP服务器会将数据通道分配到哪个高编号端口上,所以你必须打开所有的高编号端口。这在你能够确保只有FTP客户端在只有在访问FTP服务器时才会使用那些(高编号端口的情况下)固然很好。并且你可以限制只有FTP客户端才能使用那些(高编号端口),这样你就可以阻止其他的应用访问高编号端口。
很不幸,你还必须允许所有向内对高编号端口的访问。这就是说你要同时允许向内和向外对所有高编号端口的访问。你可以用限制向内访问高编号端口的数据包必须是属于一个已经存在的连接(TCP头部的ACK位被设定)来改善这种情形。但是你还是会陷入(有可能碰到)被修改过的TCP头部的ACK位的欺骗(攻击的危险)。
FTP的被动模式解决了客户端的问题,(但是)所有的问题都(被推)到了服务器端。其中最大的问题是必须让客户端能够连接所有(服务器端)的高编号端口。如果FTP服务器(软件)能够让管理员设定一个FTP服务器所使用端口的范围,这种情形下的(安全性)问题就会得到极大改善。(据我所知,SERV-U这个非常优秀的FTP服务器端软件可以做到这一点――译者注)
第二个问题是解决客户端是支持(或者不支持)被动模式。例如,有一些基于命令行的FTP工具不支持被动模式,(这就)迫使我们使用第三方的FTP客户端(软件)。而且,因为WWW的流行,很多用户会使用浏览器来当做FTP客户端,但是又不总是配置正确。
3.3. NAT(网络地址转换)
因为可以路由的IP地址的短缺,把客户端甚至服务器放在网络地址转换(NAT)设备的后面是很普遍的做法。NAT设备有两种:只转换IP地址部分(称作1:1NAT)的和(同时)转换IP地址和端口部分(称作N:1NAT或者PAT)。很明显网络地址转换中的PAT在绝大部分的网络实施中得到应用,因为(使用PAT)你可以映射很多不可路由的私有IP到一个可路由的公共IP地址上。
尽管网络地址转换是有趣的(有用的)技术并可以减轻公共可路由IP地址短缺的问题,但是它也带来了全新领域的问题。原因就是很多协议并不是专门为NAT/PAT设计的。例如象FTP协议,IP地址和数据连接时所使用的端口号是动态协商的。简单的NAT/PAT设备只会查看IP地址和端口号(第3层和第4层信息),而并不分析应用层(第7层)的实际协商过程(端口和被动模式的指令)。所以,如果没有额外的支持(手段),简单的NAT/PAT设备很可能会阻断这些复杂的协议,包括FTP协议在内。
4. 解决FTP协议的问题
有了上面的知识,就可以很容易理解ISA Server如何来处理FTP协议了。我们很幸运,ISA Server比那些简单的包过滤(防火墙或类似设备)要聪明一些。现在我们来关注一下细节。
4.1. 军事化管理区域
ISA Server支持一种叫做“军事化管理区域”的配置(也叫做边界网络、或者遮蔽子网)。(要支持)军事化管理区域(的模式应用下)的ISA Server计算机(通常)配置有三块网卡,其中两块是公共接口(即有公共网络IP地址),令一块是私有接口(即有私有网络IP地址),就这就说军事化管理区内的网络地址是被特别考虑并且不会出现在LAT(Local Address Table,即本地地址表,ISA Server用以区分本地计算机和远程计算机的数据表格――译者注)中。如果你难以理解我们在说什么,你可以阅读下面(连接)的文章。
· ISA Server DMZ Scenarios by Thomas Shinder.
· Support WebCast: Microsoft Internet Security and Acceleration Server 2000 and Perimeter Networks.
要实现对军事化管理区域网络中的主机的访问控制,应该使用下面这些基本规则:
· 数据包在直接和公共网段之间路由 ,而不使用网络地址转换。
· 对军事化管理区域网络的访问被静态包过滤(规则)所控制。
· 向内的包过滤(规则)应该允许外部的流量流入内部并且允许(相应的)应答(数据包)向外(流出)。
· 如果连接是边界网络内的主机发出的,向外的包过滤(规则)应该让该流量流出。
这意味着ISA Server扮演了包过滤路由器的角色。换句话说,就是不需要应用层知道。但是,如果你仔细查看包过滤规则的属性,你会看到你需要指定初始化数据包的方向。所以,你可以说ISA的包过滤器或多或少地知道连接(的意图,或者说用途)。
在指定包过滤(规则)时选择端口,你有下面(两种)选择(方案):
· 本地端口:任何,动态并且是固定的。
· 远程端口:任何并且是固定的。
根据(一些)文档(所讲)选择动态端口是指端口1025-5000。如果这是正确的话,你将能使用高编号端口(大于1023)的子集来替代所有动态端口。在做了一些测试后,我可以告诉你这些文档绝对错了。使用工具 Netcat 或者 WinsockTool你自己很容易发现动态端口是指端口1025到65534(大于1024并且小于65535)。所以,你可以认为(所谓的)选择动态端口就是选择所有高编号端口。
在(存在)军事化管理区域的配置下,如果你要将你的FTP服务器放在军事化管理区域或者要让位于军事化管理区域的FTP客户端访问外部(的FTP服务器),应该小心考虑我们在这篇文章中的挑战部分所讲的内容并考虑它们之间互相关连的关系。因此不建议将FTP服务器或者客户端放在军事化管理区域,除非你需要很高的安全性。
但是,如果你必须让FTP协议进出军事化管理区域网络,(就需要)从下面的包过滤(规则)开始做起:
· 军事化管理区域网络中的FTP客户端向外访问:
Packet Filter Name : FTP Client control connection
Enabled : True
Filter Mode : Allow
Filter Type : Custom
Protocol : TCP
Direction : Outbound
Local Port: Dynamic Port
Remote Port : 21
Local Computer Filter Applies to Computer : IP address FTP Client
Remote Computer Filter Applies to Network : All Remote Computers


Packet Filter Name : FTP Client data connection active
Enabled : True
Filter Mode : Allow
Filter Type : Custom
Protocol : TCP
Direction : Inbound
Local Port : Dynamic Port
Remote Port : 20
Local Computer Filter Applies to Computer : IP address FTP Client
Remote Computer Filter Applies to Network : All Remote Computer


Packet Filter Name : FTP Client control connection + data connection passive
Enabled : True
Filter Mode : Allow
Filter Type : Custom
Protocol : TCP
Direction : Outbound
Local Port : Dynamic Port
Remote Port : Any Port
Local Computer Filter Applies to Computer : IP address FTP Client
Remote Computer Filter Applies to Network : All Remote Computers



· 向内访问位于军事化管理区域的FTP 服务器:
Packet Filter Name : FTP Server control connection
Enabled : True
Filter Mode : Allow
Filter Type : Custom
Protocol : TCP
Direction : Inbound
Local Port: 21
Remote Port : Any Port
Local Computer Filter Applies to Computer : IP address FTP Server
Remote Computer Filter Applies to Network : All Remote Computers


Packet Filter Name : FTP Server data connection active
Enabled : True
Filter Mode : Allow
Filter Type : Custom
Protocol : TCP
Direction : Outbound
Local Port : 20
Remote Port : Any Port
Local Computer Filter Applies to Computer : IP address FTP Server
Remote Computer Filter Applies to Network : All Remote Computers


Packet Filter Name : FTP Server data connection passive
Enabled : True
Filter Mode : Allow
Filter Type : Custom
Protocol : TCP
Direction : Inbound
Local Port : Dynamic Port
Remote Port : Any Port
Local Computer Filter Applies to Computer : IP address FTP Server
Remote Computer Filter Applies to Network : All Remote Computers

顶部
cjc


软件作者



UID 1
精华 18
积分 2773
帖子 1467
威望 2773
金钱 72
阅读权限 200
注册 2002-5-7
发表于 2009-1-16 14:01  资料  个人空间  短消息  加为好友 
续:

注:到底使用上面什么过滤规则,取决于你要支持的FTP模式(端口模式还是被动模式)
4.2. SecureNAT客户端
ISA Server的文件传输协议过滤器将SecureNAT客户端的FTP请求转发到防火墙服务(引擎)。过滤器动态打开FTP协议所需要的第二个端口,并且根据需要为SecureNAT客户端作地址转换。下面描述它是如何何工作的:
· 客户端打开和FTP服务器的第一连接(控制连接)。
· ISA Server 计算机将此连接(的情况)向过滤器通报 。
· 过滤器检查分析第一连接的后继数据(实际上就是分析控制连接中来回传输的命令,比如客户端是使用了PORT还是PASV命令,并且记录这些命令中的参数,即端口号和IP地址等,这实际上已经是应用层的事情了――译者注)并决定什么时候客户端要开始使用第二连接(数据连接)。
· 过滤器通知ISA Server(并要求其)允许特定的第二连接(所谓特定就是连接的端口号和IP地址是前面分析第一连接中的PORT、PASV命令中的指定的端口号和IP――译者注)。
· ISA Server打开应用层过滤器所指定端口。
如果你查看那些预定义的协议,你可以找到为FTP客户端和服务器定义的FTP协议。这两个(预定义的)协议都是应用层过滤器。这就是 说ISA完全支持FTP客户端的向外访问和(内部的)FTP服务器的发布。要配置ISA支持FTP客户端(对外的)访问和FTP服务器的发布,你首先要检查FTP应用层过滤是启用的(这应该是缺省值)。对于客户端访问,也必须有一条允许客户端使用FTP协议的规则。对于FTP服务器发布,要确保在服务器发布规则中FTP服务器规则被选择(启用)。
注:很显然你必须允许FTP服务器访问所有的站点和内容。如果你没有站点和内容规则,或者在访问所有站点和 内容时需要(用户)认证,FTP发布规则将会失败。注意FTP服务器的发布不需要协议规则来支持。
很明显这种方法支持下的FTP协议安全性是很高的。但是,你要记住FTP过滤器只在标准的FTP控制端口(TCP端口21)上“侦听”。很多人认为这是一个很大的限制。从个人角度讲,我不这么认为。任何协议的目的是要让所有不同系统之间让通讯尽可能简单地实现,固定的端口号是一个协议完整性的一部分。所以,使用其他的背离标准的端口号会带来问题。另外,从安全性的角度来讲也没有任何理由将FTP站点发布的到非标准的端口上。除非你认为偏执就是安全。
因为SecureNAT用户没有应用层过滤器的帮助就不能建立第二连接,所以你就不能访在(发布在)非标准端口号(上的FTP服务器)或在非标准端口号发布FTP服务器。如果你一定要这样做,那只剩下使用防火墙客户端(一条路)了(参见4.3防火墙客户端)。
另外一个经常被问到的问题是你能否将和ISA运行在同一台计算机上的FTP服务发布出去。尽管这样作是不推荐的(ISA被认为是防火墙,而不是其他一般用途的应用服务器),但确实是可以做到的。下面的文章解释如何这样做:
· 发布运行在ISA Server上的FTP服务 (作者 Thomas Shinder)。
· 在ISA上发布FTP服务(作者 Johan Loos)。
· 如何让外部客户端计算机访问FTP服务器。
现在,如果还有什么没有按照我们的预期进行工作,你可以参考ISA的日志文件。这是你排错时主要的参考(依据)。要从日志文件中得到更多的信息,我强烈建议你将日志设定为记录所有字段。在MMC中,找到Monitoring Configuration,选择Logs,在details版面上,右击applicable service,点击Properties。在记录字段的表格中,选择Select All。
很多人在查阅日志文件时有困难。实际上并不难,但是你应该理解记录的是什么。在ISA的帮助文件中有一节叫做Firewall and Web Proxy log fields,你必须阅读,在那里你可以找到额外的(有用)信息:
· 各种日志文件和记录字段的说明 。
· INFO: WinInet 错误代码 (12001 到 12156)。
· Windows Sockets 错误代码。
举一个例子,这是一个成功(进行)的SecureNAT(客户)的FTP会话的防火墙日志的片断:

FTP Client access active:
       c-ip    time        r-ip r-port cs-prot cs-trans  s-oper sc-stat rule#1  rule#2  sessid connid
172.16.16.2 14:41:0 64.90.59.34     21      21      TCP Connect       0 SPECIAL INTERNT   6556  20504
172.16.16.2 14:41:0 64.90.59.34     20       0      TCP  Accept       0 SPECIAL -         6556  20505
172.16.16.2 14:41:0 64.90.59.34     20       0      TCP  Accept   20000 SPECIAL -         6556  20505
172.16.16.2 14:43:4 64.90.59.34     21      21      TCP Connect   20000 SPECIAL INTERNT   6556  20504FTP Client access passive:
       c-ip    time        r-ip r-port cs-prot cs-trans  s-oper sc-stat rule#1  rule#2  sessid connid
172.16.16.2 14:44:5 64.90.59.34     21      21      TCP Connect       0 SPECIAL INTERNT   6557  20506
172.16.16.2 14:44:5 64.90.59.34  61659   61659      TCP Connect       0 SPECIAL INTERNT   6557  20507
172.16.16.2 14:45:2 64.90.59.34  61659   61659      TCP Connect   20000 SPECIAL INTERNT   6557  20507
172.16.16.2 14:46:2 64.90.59.34     21      21      TCP Connect   20000 SPECIAL INTERNT   6557  20506FTP Server publishing active:
      c-ip     time         r-ip r-port cs-prot cs-trans  s-oper sc-stat rule#1 rule#2  sessid connid
10.0.129.2 15:46:18 193.75.143.3  29611      21      TCP  Accept       0 FTPsrv -            3   1404
10.0.129.2 15:46:18 193.75.143.3  29612   29612      TCP Connect       0 -      -            3   1438
10.0.129.2 15:46:42 193.75.143.3  29612   29612      TCP Connect   20000 -      -            3   1438
10.0.129.2 15:47:37 193.75.143.3  29611      21      TCP  Accept   20000 FTPsrv -            3   1404FTP Server publishing passive:
      c-ip    time          r-ip r-port cs-prot cs-trans  s-oper sc-stat rule#1 rule#2  sessid connid
10.0.129.2 15:48:34 193.75.143.3  29637      21      TCP  Accept       0 FTPsrv -            3   1404
10.0.129.2 15:48:34 -                 0       0      TCP    Bind       0 FTPsrv -            3   1443
10.0.129.2 15:48:34 -             11411       0      TCP  Listen       0 -      -            3   1443
10.0.129.2 15:48:34 193.75.143.3  29464       0      TCP  Accept       0 FTPsrv -            3   1443
10.0.129.2 15:48:34 -                 0       0      TCP    Bind   20000 FTPsrv -            3   1443
10.0.129.2 15:48:42 193.75.143.3  29464       0      TCP  Accept   20000 FTPsrv -            3   1443
10.0.129.2 15:50:56 193.75.143.3  29637      21      TCP  Accept   20000 FTPsrv -            3   1404Note: for better readability, I removed the less important fields and abbreviated some of the remaining field names.


4.3. 防火墙客户端
防火墙客户端的最大好处是它允许任何基于TCP/UDP协议的应用通过ISA而应用自己并不知道它自己正处于防火墙或者代理的后面。但是,一个缺点是防火墙客户端只能支持Windows 95 OSR2和更高版本的操作系统。不过,在客户端计算机上安装防火墙客户端是很容易的。
你已经知道SecureNAT客户端在没有应用层过滤器的帮助下是无法建立第二连接的,但是对于防火墙客户端来说可不是这样。实际上,防火墙客户端(软件)是和ISA Server上运行的防火墙服务(引擎)协同运作的。你可以认为那是为了不受到某个特定应用层协议的限制的应用层过滤器功能的分布式实现。
在我的文章理解防火墙客户端的通道控制 (一篇如果你要更深入了解防火墙客户端是如何工作的必读文章)中你可以找到防火墙客户端是如何支持一个普通的对外FTP会话的细节分析。我在这里就不重复了,但是我要重点提出那些要在FTP协议上使用非常规端口的一些要(重点)注意的问题。
要允许一个防火墙客户端用户向外访问FTP服务器,你必须允许这个用户可以使用预定义的FTP协议(规则),并且确保FTP应用层过滤器是启用的。你可能想知道为什么后一点也是必须的,因为这看起来和我前面提到关于防火墙客户端是如何工作的有些矛盾。再次(说明),如果你仔细查看预定义的FTP协议(规则),你就可以看到(在这个规则中)只有第一连接(FTP控制连接)是被定义的,而没有(定义)第二连接。所以,如果FTP应用层过滤器没有被启用,就不可能建立FTP数据连接。除非你启用并允许了一条“'All IP traffic”的规则。
就象3.2节SecureNAT客户端中所说的,如果防火墙客户端(软件)安装到客户计算机上后,(该客户端)就可以访问(发布在)非常规端口上的FTP服务器。基本的配置步骤如下:
· 创建一个定制的FTP协议定义(规则)。
· 允许防火墙客户端使用这条新建立的协议定义(规则)。
要记住协议定义(规则)只定义哪个协议和哪个端口可能会在哪个方向被使用。虽然这是应用层自己应该做的事,但是在防火墙客户端的帮助下,防火墙客户端软件将会向ISA Server动态请求打开协议所需要用到的端口并(同时)指明访问的方向。
这是一个用户自定义的FTP协议定义(规则),该定义允许客户端访问发布在TCP端口2121上的FTP服务器。



在上面自定义FTP协议(规则)中定义了两个第二连接。向内访问是用来支持端口模式的FTP的第二连接数据连接的,向外访问是用来支持被动模式的第二数据连接的。
这是防火墙客户端在上面的FTP访问规则下的(一次)成功会话的日志片断:


FTP Client access active:
        c-ip     time           r-ip r-port cs-prot cs-trans  s-oper sc-stat rule#1 rule#2 sessid connid
10.0.129.21 14:05:38 193.75.143.200   2121    2121      TCP Connect       0 FTPcln INTERNT     7     11
10.0.129.21 14:05:52 -                   0       0      TCP    Bind       0 FTPcln -           7     12
10.0.129.21 14:05:52 -                3236       0      TCP  Listen       0 -      -           7     12
10.0.129.21 14:05:52 193.75.143.200     20       0      TCP  Accept       0 FTPcln -           7     12
10.0.129.21 14:05:52 193.75.143.200     20       0      TCP  Accept   20000 FTPcln -           7     12
10.0.129.21 14:06:51 193.75.143.200   2121    2121      TCP Connect   20001 FTPcln INTERNT     7     11FTP Client access passive:
       c-ip     time           r-ip r-port cs-prot cs-trans  s-oper sc-stat rule#1 rule#2 sessid connid
10.0.129.21 14:08:03 193.75.143.200   2121    2121      TCP Connect       0 FTPcln INTERNT     9     15
10.0.129.21 14:08:22 193.75.143.200   1133    1133      TCP Connect       0 FTPcln INTERNT     9     16
10.0.129.21 14:09:11 193.75.143.200   1133    1133      TCP Connect   20000 FTPcln INTERNT     9     16
10.0.129.21 14:09:55 193.75.143.200   2121    2121      TCP Connect   20001 FTPcln INTERNT     9     15

上面用户自定义的FTP协议(规则)中,我将向内访问的第二连接的端口范围设定为’0-0’。通常你可能会使用’1025-65534’范围的端口,但是我在我的测试配置中发现这样无法工作。出现的问题是向内的连接被包过滤器阻止,尽管一切看起来无懈可击,源端的操作是正常的,ISA也正在我们所需要的端口侦听(你可以使用netstat-an来检查)。但是将端口范围修改为’0-0’解决了这个问题。所以,如果谁有其他更好的方法,我将很高兴。
前面已经提到,通常你无法将FTP服务发布到非标准端口上。但是,如果你可以在FTP服务器上安装防火墙客户端,可就可能。下面的文章中解释了应该如何做:
· 在非常规端口上发布FTP站点 (作者 Thomas Shinder )
· 使用非标准端口安装和配置位于ISA Server 2000后的FTP服务器 (作者 Hadyn-wang)
注 1: 很显然你需一条可以让FTP服务器访问所有站点和内容的规则,因为FTP服务器要建立新连接。
注 2: 要记住你不能在运行ISA Server的计算机上安装防火墙客户端()软件,也不能在非windows操作系统上运行的FTP服务器上安装。因此,在这些特别的配置(情况下)你不能将FTP服务器发布到非标准端口。


4.4. Web代理客户端
Internet浏览器是怎样处理FTP协议的取决于浏览器的版本和ISA客户端的配置类型。需要注意的是单台客户端计算机可以被同时配置成SecureNAT,防火墙客户端或者Web代理客户端,并且它们之间不会互相干扰。在这一节里我们来看看Internet Explorer 版本6.0 ,如果你关注老版本可以参阅Thomas Shinder的 Internet Explorer FTP客户端的问题 一文。
我假设你有一个客户端同时配置成Web代理客户端、防火墙客户端和SecureNAT客户端。现在查看Internet选项的高级菜单,你可以找到两个会影响IE如何使用FTP协议的选项。
· 启用FTP站点文件夹视图。
· 使用被动FTP (为了和防火墙和 DSL 调制解调器兼容)。
如果没有选用启动FTP站点文件夹视图选项,FTP请求将会被IE发送到ISA Server的Web代理服务(引擎)。这是通过HTTP协议完成的,并且(客户端)没有办法浏览(FTP站点文件夹),也没有可以让用户指定是使用被动模式还是端口模式的选项。然后ISA上的Web代理服务(引擎)将客户的将请求用真正的端口模式的FTP会话进行转发。但是,要记住ISA的Web代理服务仅仅支持FTP下载。
注 1: Web代理服务缺省使用端口模式的FTP方式。你可以修改注册表来允许ISA Server的Web代理服务使用被动模式的FTP会话(来完成客户端的请求)。查看 HOW TO: Enable Passive CERN FTP Connections Through Internet Security and Acceleration Server 2000来获得更多信息。
注 2: 有一些FTP服务器在用户端使用了FTP的USER命令后不询问口令,这将让Web代理服务不知所措。要解决这个问题,查看Web Proxy Service Returns "The User Name Was Not Allowed" Error Message After the FTP Server Returns the "User Logged In" Message一文来获得更多信息。
下面是一个跟踪Web代理服务(如何)发出一个FTP请求的例子:



如果启用了启动FTP站点文件夹视图选项,FTP请求将会被IE发送给ISA的防火墙服务(引擎)。换句话说就是真正的FTP会话。如果安装了防火墙客户端(软件)并启用的话,(IE的FTP)请求将会被防火墙客户端拦截(并转发给ISA的防火墙服务引擎)。相反,如果没有安装防火墙客户端或者安装防火墙客户端但是被禁用了,那么请求将会被当是做SecureNAT客户端发送的。这时是使用端口模式还是被动模式的FTP是由被动FTP(为和防火墙和DSL调制解调器兼容)选项决定的。
注: 这在 Internal Clients Cannot Access FTP Sites Through Internet Security and Acceleration Server 2000一文中也有解释。
下面是一个跟踪防火墙客户端向ISA的防火墙服务(引擎)发出FTP请求的例子:


下面是一个跟踪SecureNAT客户端向ISA的防火墙(引擎)发出FTP请求的例子:



从上面的例子你可以看到,在三种情况下6.0版本的Internet浏览器向ISA Server发出FTP请求的方式完全不同。这就是说一些FTP请求将会被记录在Web代理的日志中,而另一部分会被记录在防火墙的日志中。
5. 关于Secure FTP
文档 RFC2228中定义了FTP协议的安全性扩展。这些扩展同时在数据通道和控制通道对认证,完整性,和机密性都有所加强。该文还介绍了新增的命令、应答和文件传输的加解码。
一个广泛使用的加强FTP协议的安全性的方法是使用3.0版的SSL(安全套接层)或者1.0版的TLS(传输层加密)协议。这在Internet-Draft Securing FTP with TLS 中有详细描述。SSL/TLS协议在传输层(TCP/IP)之上、但是在应用层之下工作的。因此,它可以很容易在诸如HTTP,Telnet,POP3,IMAP4,SMTP和FTP等应用层协议上实现。
在实际的FTP客户端和服务器的应用中,SSL安全扩展至少有两种不同的初始化方法:显式安全(端口模式)和隐式安全(被动模式)。
· 显示安全:为了建立SSL连接,显式安全要求FTP客户端在和FTP服务器建立连接后发送一个特定的命令给FTP服务器。客户端使用服务器的缺省端口。具体实现方法详见RFC 2228文档。
· 隐式安全: 当FTP客户端连接到FTP服务器时,隐式安全将会自动和SSL连接一起开始运行。在隐式安全中服务器定义了一个特定的端口(TCP端口990)让客户端来和其建立安全连接。
注: 隐式安全在很多SSL草案中都有讨论,但是没有被RFC正式采纳。为了依从标准,请使用显式安全。
可以认为隐式安全总是“始终打开”的,而显式安全是要被“打开”(才能使用)的。下面是GlobalScape 公司(著名的CuteFTP FTP客户端软件)站点上的一个很好图示,说明了显式和隐式安全SSL连接的区别:



当通过SSL/TLS来使用FTP时(缩写为FTPS),FTP客户端和FTP服务器之间的控制连接就被加密了,因此除了它们之外谁也不能读懂(它们之间的控制连接的信息)。正式因为这样,NAT/PAT设备和防火墙再也不能监控控制连接(原文是数据连接,而实际上应该是控制连接――译者注)(并且从中得到有用的信息)从而再(有针对性地)做一些事情了。(所以)FTPS协议在所有种类的防火墙和网络地址转换(环境下)的实际应用受到严重的限制。
注:在 FTP/TLS Friendly Firewalls一文可以找到关于在防火墙上环境下运行使用SSL/TLS的安全FTP的很好的讨论。但是请注意Internet-Draft 仅仅是 “正在制定中”(尚未正式发布)。
必须清楚的是ISA Server的FTP应用层过滤器(同样也)不能帮助你解决这种情况(问题)。因此,ISA Server是几乎不可能支持在SecureNAT客户端上运行的FTPS协议的。实际上,许多防火墙在完全支持安全的FTPS协议(端口模式和被动模式)时都是有问题的。但是,在ISA Server下你(也)完全可以支持FTPS,(条件是)你在客户端上安装了防火墙客户端(软件)。在这种情况下,你必须按照要点的步骤来配置,以让FTP客户端(可以)访问(发布在)非常规端口上的FTP服务器或者将FTP服务器发布到非常规端口上。
对于(客户端的)FTPS访问,应该继续采用我前面提到到自定义FTP协议规则(参见4.3节,防火墙客户端)。对于隐式安全模式,第一连接应该是对TCP端口990的向外访问。如果你也必须同时支持显式安全,那么还要做一些额外的事情。因为显式安全使用标准的TCP 21号控制端口,所以你必须将FTP应用过滤器禁用。否则,FTP应用过滤器会干扰FTP的控制连接。接下来,在自定义FTP规则中让第一连接向外访问21号端口。因而,SecureNAT客户再也不能访问FTP服务器了。
6. 结束语
FTP协议是一个显得稍微有点凌乱的协议,并且没有任何为(应用于)防火墙(环境中)的(特别)设计。FTP客户端可以使用两种模式中的一种:端口模式和被动模式。端口模式已经存在很长时间了,但是被动模式更加流行,因为其不需要FTP服务器主动向内访问从而和FTP客户端建立(第二)连接。现在的防火墙和NAT设备可以在(第一连接中,即控制连接中的)PORT和PASV命令中得到FTP连接的详细信息来支持客户端的FTP请求(和会话),从而增强了FTP协议的安全性。
我希望你能够对我的这篇文章满意并且能够从中得到一些你可以在你自己网络中使用的东西。如果你对我们的讨论有什么疑问,请在查看 http://forums.isaserver.org/ultimatebb.cgi?ubb=get_topic;f=3;t=002268 并发布消息。你的回复我会收到通知并且我会尽快回复。谢谢!-Stefaan。


英文原版: http://www.isaserver.org/article ... ewall_Security.html

顶部
 



当前时区 GMT+8, 现在时间是 2024-5-7 04:24

粤ICP备2021113670号
访问量: - 清除 Cookies - 联系我们 - CJC学习与技术分享