ISA防火墙同时是网络防火墙和Web代理服务器。ISA Server的防火墙组件允许它同时执行数据包过滤和应用层状态识别;而Web代理组件允许它作为CERN兼容的HTTP 1.1 Web代理服务器。Web代理组件(实际上是ISA Server 2004防火墙内部的Web代理过滤器)可以对HTTP通信进行解码,执行应用层状态过滤,然后在转发给外部的目的Web服务器时重建HTTP通信。
可是,对于在受ISA防火墙保护的网络中的主机和一台外部网络的Web服务器间建立的SSL连接有点不一样,当内部主机通过ISA防火墙的Web代理组件发起SSL请求时,ISA防火墙可以检查HTTP头或者根据访问规则来执行过滤;但是,当它们之间的SSL连接建立后,由于在它们之间传输的数据实行了SSL隧道加密,ISA防火墙将不能再检查它们之间传输的数据。
在内部Web客户和目的Web服务器之间建立SSL隧道的过程如下所示:
1、内部的Web客户通过在Web浏览器的地址栏中发起一个对目的Web服务器的SSL对象的请求,如
https:URL_Name
2、用户将把这个请求发送到ISA防火墙的8080端口(默认的Web代理侦听端口);
CONNECT URL_name:443 HTTP/1.1
3、ISA防火墙连接目的Web服务器的443端口;
4、当连接建立后,ISA防火墙返回数据给Web客户;
HTTP/1.0 200 connection established
从此时开始,客户直接和外部的Web服务器通信,而不再经过ISA防火墙的Web代理组件,因此,ISA防火墙不能再对封装在SSL隧道中的数据和命令执行应用层状态识别。
当外部Web服务器使用标准的SSL端口TCP 443时,一切都是很正常的,但是,有时候你的Web代理客户也会使用其他的端口来访问SSLWeb站点,例如,Web代理客户可能会使用端口4433替代443来访问银行的Web站点,这样会导致SNAT客户和防火墙客户产生错误,因为ISA防火墙默认会转发SNAT客户和防火墙客户的HTTP连接到Web代理过滤器,客户可能会看见空白页或者指出该页面不能访问的错误页。
这个问题就是Web代理过滤器会转发SSL连接到TCP端口443。如果客户想连接其他不使用TCP 443端口的SSL站点,那么连接尝试将会失败。你可以通过扩展SSL隧道端口范围来解决这个问题。为了做到这一点,你需要下载Jim Harrison的脚本,然后运行时输入你想让ISA防火墙Web代理组件使用的SSL隧道端口范围。
执行以下步骤以扩展SSL隧道端口范围:
下载 isa_tpr.js 文件,(http://down.isacn.org/isa_tpr.js),然后将其复制到ISA防火墙计算机上。注意,不要使用ISA防火墙上的浏览器,也不要在ISA防火墙上运行其他客户端程序,如电子邮件客户端等等;
双击运行 isa_tpr.js ,在第一个对话框上你可以看到你当前的状态信息“This is your current Tunnel Port Range list”,点击确定;
此时,NNTP端口显示出来了,点击确定;
然后,SSL端口显示出来了,点击确定;
现在复制isa_tpr.js这个文件到C盘根目录,然后打开一个命名提示符窗口,输入以下命令:
isa_tpr.js /?
你会看到以下对话框:
为了添加一个新的SSL隧道端口,例如 8848 ,则输入以下命名行,敲回车;
Cscript isa_tpr.js /add Ext8848 8848
此时,你可以看到如下的信息,提示你命令运行成功。
另外,你还可以下载Steven Soekrasno编写的.NET程序,ISATpre.zip(http://down.isacn.org/ISAtrpe.zip),然后在ISA防火墙上安装。这个程序提供了一种更为简单的方法来允许你修改SSL隧道端口范围。下图是此程序的运行界面:
输入你想定义的端口范围和名字,然后点击Add Tunnel Range按钮,再点击Refresh,你就可以看见列表中新的SSL隧道端口范围。
注意,以上的情况都只是通过Web代理过滤器访问HTTP协议的情况,如果你对HTTP协议取消了Web代理过滤器的识别,SNAT客户和防火墙客户通过ISA防火墙的HTTP访问将不会转发到Web代理过滤器。此时,你可以通过定义一个使用其他SSL端口的协议和允许访问此协议的出站访问规则来实现客户对外部非标准SSL端口(TCP 443)的Web站点的访问。