ISA Server 阻断 HTTPS 连接问题分析
作者:高张远瞩(HiLoveS)
博客:http://www.cnblogs.com/hiloves/
转载请保留该信息
今天困扰我三年的ISA Server老是阻断HTTPS连接的问题成为历史了。之前,在ISA Server的防火墙策略中已经加入网银域名,并且规则中的出站协议为“所有出站通信”,但从日志中查询得知,通往网银443端口的连接总是被默认规则阻断掉,这条设置为允许网银的规则从来没有起过作用。作为替代方案,我只好把网银https服务器的IP找出来,放到规则中,这样才能正常访问,这就产生两个问题:现在的许多服务器采用集群方式,这意味着可能有多个IP,就必须把所有IP都找出来,步骤繁琐;如果服务器域名不变,IP变更,规则就失效了,必须时时监测。这两点都很烦。
上网咨询很多人,包括www.isacn.org、微软官方技术论坛,回答基本如下:规则中出站协议选择https(我都设为所有出站通信了,难道https还出不去?),默认规则放到允许网银规则前面了(Oh,MY GOD。什么低级错误,幼儿园的孩子都不会犯),没有允许DNS(无语)。
以建行网银作例子,建行网银使用https协议,在浏览器中输入http://www.ccb.com.cn,点击左上角的登录个人网银会打开到https://ibsbjstar.ccb.com.cn。
创建新的规则,符合规则条件时要执行的操作为“允许”,此规则应用到“所有出站通讯”,指定源为“内部”,建立与建行网银相关的域名集(包含*.ccb.com,*.ccb.com.cn),将此域名集指定为目标,用户为“所有用户”,最后保证此规则在默认规则前。并且建立一个允许DNS的规则。
从内部客户机的浏览器上访问http://www.ccb.com.cn,登录个人网银,然后浏览器一直空白直到超时。失败。
查看日志如下:
从底下数1、2行清楚表明允许DNS,第3、5、6行表明使用http的建行官网是正常。后面就杯具了,所有https连接都是红的,直接跳过新规则被默认规则阻断了。其实答案就在日志中,而我一直在其他方面打转忽略了这个地方,就是允许的连接和被拒绝的连接在日志记录类型中的区别:防火墙和Web代理的区别。在浏览器中访问HTTPS网站理应也是Web代理,而这里却是防火墙模式。问题就在于ISA没有将https连接作为Web进行处理。
其实解决方法也是极其简单,就是为浏览器手动配置代理服务器,并保证“安全HTTP”也使用此代理。以IE为例,Firefox类似。
登录网银成功,再查一下日志:
显示所有https连接被允许。注意对比第一张图的“日志记录类型”,前面是“防火墙”,后面是“Web 代理”,区别在这里。
ISA Server采用三种代理模式:Web代理、S-NAT、防火墙客户端。第一种日志记录类型为“Web 代理”,后两种则为“防火墙”。如果我们想让其工作在S-NAT模式下,不配置浏览器的代理服务器,ISA Server会自动对http连接使用Web代理模式,并且会自动关联域名与域名对应的IP,这样只要建立域名集而不需建立IP集即可正常访问http网站,网站IP变了也不怕。而杯具的是,ISA Server并没有自动对https使用Web代理模式,导致域名与IP没有自动关联,就产生了使用域名被拒绝,使用IP被允许的情况。这时,只要为浏览器配置上代理服务器,让https也使用Web代理模式就可以。
附:如果你自定义一个协议,并且目的是ISA服务器,那么协议的方向必须是“出站”。我要访问的是服务器,那方向理应是“入站”才对。如果你把“站”理解成ISA服务器那就错了,配置是在服务器上这么理解很正常。其实“站”应该指“客户端”,客户端的数据“出站”并到达ISA Server,再配合检查目标最终允许或拒绝。