电脑技术学习

HTTP 应用层过滤的兼容性问题及解决方案

dn001

最近论坛中有朋友提及通过 ISA Server 不能访问一些网站。对于这种问题,我首先询问是否打上了最新的补丁。补丁是故障排除的基础,只有在打上最新补丁的情况下,才能最好的分析并定位问题。

然后,我们需要从以下两方面来进行分析:

1、首先分析 ISA Server 的警告和日志,看是否是被 HTTP 过滤器拒绝访问。如果是被 HTTP 过滤器拒绝,那么你可以修改你的 HTTP 策略来允许访问,比如取消阻止高位字符、验证正则化或者你自定义的 HTTP 策略等。HTTP 策略是基于访问规则配置的,你对 HTTP 策略的修改将会影响到通过此访问规则访问的所有 Web协议通信,因此在取消之前,你应该评估一下这样做以后的安全性,如果通过相同访问规则访问的其他服务器需要此 HTTP 策略,你最好在原有规则前面单独创建一个访问规则,允许客户访问原来不能访问的那个服务器,然后在此规则上修改 HTTP 策略以实现客户的访问。

2、如果不是被 HTTP 过滤器拒绝访问,那么我们必须要确定是否是因为 ISA Server 的 HTTP 应用层过滤问题。这个可以通过完全停止 ISA Server 服务后再访问外部网站进行测试,但是我不建议大家随意停止 ISA Server 的服务,而是建议大家直接采用我在后文中提供的解决方案来进行测试。

在这篇文章中,我将重点来探讨一下第2个问题。ISA Server 基于 Web 代理筛选器提供了 HTTP 应用层过滤功能。其实 Web 代理筛选器是一个负责“装载”其他 Web 筛选器的应用程序筛选器,当 ISA Server 需要对 Web 协议进行应用层过滤时,Microsoft Firewall 服务会在用户模式下调用 Web 代理筛选器,然后 Web 代理筛选器会调用所有已启用的 Web 筛选器通过不同方面来对 Web 协议进行应用层过滤。内置的 HTTP 协议绑定了 Web 代理筛选器,因此所有的 HTTP 协议均会接受 Web 代理筛选器的应用层过滤。

ISA Server 完全按照 RFC 标准来进行开发,并且也完全按照 RFC 标准来进行应用层过滤。但是在实际环境中,由于部分 Web 应用程序并未完全按照 RFC 标准进行开发或通信,因此导致了通过 ISA Server 无法访问这些 Web 站点。例如比较常见的 Web 服务器使用了非法的 HTTP 头组合,对于普通的 IE 浏览器而言,它会忽略这种错误,但是对于 ISA Server 这种企业级的防火墙,安全是最重要的,它不能容忍有一丝的疏忽,因此它会阻止这种非法的数据包。

服务与安全永远是相对的,ISA Server 这种安全行为也给用户带来了不便。你可以配置 ISA Server 取消这种安全行为,但是这样也就降低了安全性,因此在做这种配置之前,你需要正确的进行评估。

如果的确是因为 ISA Server 的应用层过滤导致无法访问某个 Web 站点,而且很不幸的是,用户必须要访问这个站点,那么我们也只有通过降低 ISA Server 的安全性来允许用户的访问。对于这个问题,具有三种解决方案,我将按照安全性影响的大小来依次进行介绍。

方案一 自定义协议

由于内置的 HTTP 协议绑定了 Web 代理筛选器,因此我们可以自定义一个 TCP 80 出站的协议,然后允许用户使用此协议访问那个 Web 站点,这条规则需要放在其他允许用户访问此 Web 站点的规则之前。

这种方案只是降低了访问此 Web 站点的安全性,对于其他站点的访问仍然保持 HTTP 应用层过滤,因此安全影响是最小的。另外需要注意的是,如果是针对 ISA Server 本身到 Web 站点的访问,这个方案可能会出现问题,因此 ISA Server 可能会通过系统策略来访问,而不是通过你自定义的规则来访问。这种时候,你需要禁用允许本地主机访问外部 HTTP 协议的系统策略。  

方案二 禁用 Web 过滤器

Web 代理筛选器通过调用不同的 Web 过滤器来实现 HTTP 应用层过滤,如果可以确定是某个 Web 筛选器的问题,那么你可以直接禁用此 Web 筛选器,例如在 ISA Server 2004 的 HTTP 压缩补丁未出来时,ISA Server 2004 SP2 的 HTTP 压缩功能导致了部分 Web 站点无法访问,此时你就可以禁用压缩筛选器和压缩内存缓存筛选器来禁止 HTTP 压缩功能,从而避免这种访问问题。

这种方案是在 ISA Server 上全局禁用了 Web 筛选器,但是其他筛选器仍然可以使用,使用这种方案应慎重,我建议大家尽量不要使用这种方案。

方案三 禁用 HTTP 协议应用层过滤

内置的 HTTP 协议绑定了 Web 代理筛选器,因此所有的 HTTP 协议均会接受 Web 代理筛选器的应用层过滤。你可以取消 HTTP 协议的 Web 代理筛选器绑定,这样除了 Web 代理客户以外,ISA Server 不再对 HTTP 协议进行任何应用层过滤。

这种方案是在 ISA Server 上全局禁用了 HTTP 协议应用层过滤,这样的安全影响太大,我建议大家只是使用前面的两种方案,而不使用这种方案。