注:到底使用上面什么过滤规则,取决于你要支持的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