内容概述:在ISA Server 2004中提供了对于HTTP压缩(常见的是GZIP压缩)的支持,但是从安全的角度,在大部分环境下禁止了HTTP压缩。通过这篇文章,你可以学习到如何在ISA Server 2004中启用对HTTP压缩的支持。
在ISA Server 2004中提供了对于HTTP压缩(常见的是GZIP压缩)的支持,ISA Server 2004可以转发从外部Web服务器获得的压缩过的HTTP数据到位于ISA防火墙保护网络中的客户计算机,并且ISA Server 2004的Web发布规则允许发布的内部Web服务器向浏览的外部网络中的客户机发送压缩过的HTTP数据。不过需要注意的是,这个“压缩过的HTTP数据”仅是数据包的内容被压缩,HTTP头信息是不会进行压缩的。
ISA防火墙中的Web发布规则可以配置为转发客户发送的原始Accept-Encoding头到发布的Web服务器。如果客户发送Accept-Encoding请求头,这表明它可以接受压缩过的内容,Web服务器则向它发送压缩过的HTTP数据,同时会在HTTP头中指出压缩的方式,同样的,ISA防火墙也会转发Web服务器回复的数据包给外部客户。
ISA防火墙不会对数据包的主体进行任何压缩;对于压缩过的数据,ISA防火墙不会进行任何应用层检查或者执行链接转换。不过,ISA防火墙会和处理未压缩的HTTP传输的HTTP头一样来处理压缩过的HTTP传输的HTTP头 ;同样的,任何匹配的访问规则或者HTTP应用层过滤对于压缩过的HTTP数据依然有效。不过,如果你在HTTP过滤器中配置了签名或者执行方式的应用层过滤,而传输的HTTP数据是经过编码(压缩)的,那么ISA防火墙会拒绝通信,会显示请求被HTTP过滤器拒绝的错误页面(如:Blocked by the HTTP security filter: the response content is encoded and cannot be scanned.)。因为ISA防火墙是不会对编码(压缩)过的HTTP数据进行检查的,如果防火墙策略要求它进行检查,那么ISA防火墙会从安全方面考虑,拒绝未经过检查的数据传输。
另外,如果ISA防火墙删除了客户端发送的
“Accept-Encoding”HTTP头,而访问的Web服务器仍然返回压缩过的数据,那么ISA防火墙同样会拒绝通信。
ISA防火墙不支持对压缩过的内容进行缓存,对于包含Content-Encoding请求头的内容也不会进行缓存,除非是Content-Encoding身份识别请求头。在通常情况下,HTTP传输也不会进行压缩,不过,有两个常用的应用程序Microsoft Outlook Web Access (OWA)和Microsoft BizTalk Server会对HTTP传输进行压缩。
根据不同的情况,ISA防火墙的Web代理组件对于压缩的HTTP传输会有以下行为: ? 在前向代理模式下(例如Web代理),ISA防火墙总是会去掉客户发送的Accept-Encoding请求头,所以,Web服务器不会对回复的HTTP传输进行压缩;
在反向代理模式下(例如Web服务器发布),你可以决定是否去掉Accept-Encoding请求头,这是通过控制每条Web发布规则的 IFPCWebPublishingProperties::SendAcceptEncodingHeader COM组件属性来进行,在后面有范例。
不过,在OWA发布和典型的Web发布之间有以下不同: ? 在OWA的Web发布规则中,SendAcceptEncodingHeader的默认值是True,这样ISA防火墙就不会移除客户端发送的Accept-Encoding头;
在典型的Web发布规则中,SendAcceptEncodingHeader的默认值是False,这样ISA防火墙会移除客户端发送的Accept-Encoding头;
ISA防火墙会转发发布的OWA服务器传输的压缩HTTP数据,但是不会对它进行任何压缩或解压,也不会进行任何状态过滤检查或者链接转换,只是仅仅转发而已。
ISA防火墙的HTTP过滤器提供了数据包头和数据包主体的签名匹配功能,不过,因为ISA防火墙不能对压缩的HTTP传输进行检查,这样降低了安全性,所以你可能想阻止加密的HTTP传输,你可以通过配置HTTP过滤器来阻止,执行步骤如下:
1. 打开ISA防火墙管理控制台,展开服务器名;
2. 点击防火墙策略,右击你想要进行配置的访问规则,然后点击配置HTTP;
3. 点击头标签,然后点击添加;
4. 在查找于列表,点击请求头;
5. 在HTTP头文本框,输入Content-Encoding,然后点击确定;
6. 再次点击确定回到防火墙策略面板,点击应用按钮以保存修改和更新防火墙策略;
因为压缩HTTP传输极大的降低了网络的安全性,所以ISA默认会拒绝。但是在实际使用中,很多网站或者论坛为了提高网络访问速度,大量的采用了GZIP进行压缩。可能你想要发布的网站就采用了GZIP压缩,这种时候,你需要配置ISA防火墙来允许Accept-Encoding请求头。
注意:使用OWA发布向导来伪造一条允许Accept-Encoding请求头的OWA发布规则是不行的,只有通过修改IFPCWebPublishingProperties::SendAcceptEncodingHeader COM组件属性来进行。
在Tristank的Blog上发布了关于如何修改这个属性的技术文章,修改的代码如下,复制到记事本中,另存为vbs文件,修改文件尾部的规则名字为你需要修改的规则名字,运行即可:
==================================================================================
''''' SAEHeader.vbs
''''' This script is a SAMPLE ONLY and is provided as is, without warranty
''''' The user variable is at the bottom of the script, called "rulename"
Function ToggleClientAcceptHeaders(targetrulename)
Dim root
Set root = CreateObject("FPC.Root")
Dim firewall ' An FPCArray object
Dim policyrules' An FPCPolicyRules collection
Set firewall = root.GetContainingArray
Set policyrules = firewall.ArrayPolicy.PolicyRules
foreach rule in policyrules
if rule.Name = targetrulenamethen
wscript.echo " Found target rule: " + rule.Name
if rule.WebPublishingProperties.SendAcceptEncodingHeader = falsethen
wscript.echo " SendAcceptEncodingHeader WAS DISABLED, now ENABLING."
rule.WebPublishingProperties.SendAcceptEncodingHeader = true
elseif rule.WebPublishingProperties.SendAcceptEncodingHeader = truethen
wscript.echo " SendAcceptEncodingHeader WAS ENABLED, now DISABLING."
rule.WebPublishingProperties.SendAcceptEncodingHeader = false
endif
wscript.echo "Saving Rule..."
rule.Save
endif
next
wscript.echo "Done."
EndFunction
''''''''''''''''''''''''''
''''' Program starts here
''''''''''''''''''''''''''
dim rulename
rulename = "Test Headers Rule" ' Should be unique,修改为你想要修改的规则的名称即可
ToggleClientAcceptHeaders(rulename) ' set the option for all rules with this name
=================================================================================
修改成功后重启ISA Server服务。
不过在这种情况下你需要禁止通过ISA防火墙的ZIP文件的下载,因为ISA防火墙会认为ZIP文件是经过ZIP编码的,并且会拒绝访问,在日志中会有记录。另外,你也不能再配置HTTP应用层过滤,原因前面已经说了,从安全的角度考虑,ISA防火墙会拒绝它不能进行检查的数据。