正确理解防火墙策略的执行过程
 
很多初次接触ISA的管理员,经常会发现自己的管理意图没有得到贯彻。自己明明禁止用户使用QQ聊天,可你看这个老兄正在和多个MM聊得热火朝天;早就禁止在上班时间访问游戏网站,可这个家伙不正在和 别人下棋吗?最郁闷的是就连简单的禁止访问百度搜索引擎都做不到,照样有很多人用百度搜来搜去……不少深感智力受到侮辱的网管愤怒地发出了“ISA就是不灵”的吼声。ISA真是不灵吗?不是的,其实发生这些的主要原因是ISA管理员并没有真正理解防火墙策略的执行过程。今天我们就来好好地分析 一下ISA防火墙策略的执行过程,避免在以后 的工作中犯类似的错误。
首先声明,我们今天讨论的是ISA2006标准版的策略执行过程,企业版比标准版要复杂一些,以后我们再讨论。我们可以把ISA当作是信息高速公路上的一个检查站,当有数据包要通过ISA时,ISA就会利用策略对数据包进行检查,检查通过就放行,否则就拒绝。ISA检查数据包的顺序是:
检查是否符合网络规则
检查是否符合系统策略
检查是否符合防火墙策略
 
网络规则
一个数据包通过ISA时,ISA首先要检查的就是网络规则。网络规则是ISA中非常重要而又很容易被忽视的一个因素。ISA检查数据包时首先要考虑的就是这个数据包是从哪个网络到哪个网络,这 两个网络间的网络规则是什么。也就是说ISA是基于网络进行控制,而不是很多朋友认为的基于主机进行控制。网络规则只有两种,路由或NAT。如果A网络到B网络的网络规则为路由,那么数据包从A网络到B网络或者从B网络到A网络都有可能;如果A网络到B网络的网络规则为NAT,那么数据包只有可能从AB,而不可能从BA。我们可以把两个网络比喻为两个城市,网络规则就象是城市之间的高速公路,如果两个网络 之间的网络规则为路由,那就象是两个城市之间有一条双向高速公路;如果网络规则为NAT,则就相当于两个城市之间有一条单行高速公路。
明白了网络规则的作用,有些问题就很好解释了。有些ISA管理员问过这样一个问题:“我在ISA的防火墙策略中已经允许外网访问内网,为什么外网机器还是访问不进 来?”现在来看这个问题就很简单了,因为ISA认为内网和外网之间的网络规则是NAT,如下图所示,NAT规则决定了只有可能从内网到外网而不可能从外网到内网,因此当外网访问内网时,ISA只需检查网络规则就。因此如果你确实需要外网访问内网,你就应该先把 内网和外网之间的网络规则改为路由。
 
还有一个网络规则的例子,有一个管理员用ISADMZ区的一个FTP服务器发布到了外网和内网,结果外网用户访问正常,内网用户却无法访问。为什么,因为DMZ和外网是NAT关系,而DMZ和内网是路由关系。由于从DMZ到外网是NAT关系,外网用户无法通过访问规则直接访问,所以通过发布规则访问是合理的;而内网和 DMZ是路由关系,因此内网用户就应该通 过访问规则而不是发布规则来访问。
综上所述,网络规则是ISA进行访问控制时所要考虑的第一要务,只有从源网络到目标网络被网络规则许可了,ISA才会继续检查系统策略和防火墙策略;如果网络规则不许可,ISA会直接拒绝访问,根本不会再向下检查系统策略和防火墙策略。大家写访 问规则时一定要注意这点。
系统策略
如果一个数据包通过了网络规则的检查,ISA接下来就要看看它是否符合系统策略了。ISA2006标准版中预设了30条系统策略,系统策略应用于ISA本地主机,控制着从其他网络到本地主机或者从本地主机到其他网络的通 讯,系统策略中启用了一些诸如远程管理,日志,网络诊断等功能。一般情况下,我们对系统策略只能允许或禁止,或对少数策略的某些属性作一些修改。
以前曾经有朋友问我,为什么ISA安装后防火墙策略中明明禁止了所有通讯,但ISA主机还是可以ping到其他计算机,是否ISA本机有某些特权呢?不是的,ISA能对其他网络进行有限访问完全是由系统策略决定的,只是由于系统策略没有显示出来,因此 安装完ISA后我们并没有注意到它。
我们来看看系统策略到底有哪些内容,打开ISA服务器管理,右键点击防火墙策略,如下图所示,在查看中选择“显示系 统策略规则”。

 
如下图所示,我们看到了30条系统策略的内容。
 
 
编辑系统策略也可以用系统策略编辑器,系统策略编辑器为 管理员提供了更为友好的管理界面,如下图所示,右键点击“防火墙策略”,选择“编辑系统策略”。
 
 
如下图所示,我们可以在系统策略编辑器中编辑系统策略。
 
 
系统策略的优先级比防火墙策略高,因此如果任务可以用系统策略完成,就不要用防火墙策 略。例如有时候我们为了测试需要,允许从内网ping ISA服务器,这种需求完全可以用系统策略完成,如下图所示,我们只要把内部网络添加到允许ping本地主机的集合中,就可以完成任务了。
 
 
防火墙策略
防火墙策略用来控制源网络和目标网络的通讯,是ISA管理员控制网络访问的常规武器,也是本文讨论的重点所在。防火墙策略 的优先级就是按照规则排列的顺序,而不是按照拒绝优先原则。由于系统策略优先级也是按照序号排列,和防火墙策略优先级完全一样,我们甚至可以把防火墙策略 看成是从31开始编号的系统策略。
数据包通过网络规则的检查后,就要面临系统策略和防火墙策略的考验了。ISA将从第一条策略开始检查,检查数据包的访问请求是否匹配策略,如果匹 配,就按照策略的规定执行,结果无非是禁止或允许。如果不匹配,ISA就将按顺序检查下一条策略,从第一条系统策略一直检查到最后一条防火墙策略。那有人要问 了,如果把所有策略都检查完了还不匹配怎么办?呵呵,这是不可能的,ISA自带的最后一条防火墙策略内容是禁止所有网络间的一切通讯,如下图所示,这条防火墙策略可以与所有的网络访问相匹配,因此ISA实际上使用了隐式拒绝,也就是说如果某个访问请求如果没有被策略显式允许,那肯定会被最后一条防火墙策略所拒绝。
 
 
看了上面的介绍,我们要注意两点,一是策略顺序,二是策略匹配。
 
A 策略顺序
防火墙策略的排列顺序决定了优先级,排在前面的策略优先 执行,根据这个原则,我们要好好设计一下防火墙策略的顺序。例如,我们写了两条防火墙策略,一条是允许内网用户任意访问,另外一条是拒绝内网用户访问联众 游戏网站。如果排列顺序如下图所示,允许策略排在拒绝策略之前,那就是个错误的决定。拒绝访问联众的策略永远不会被执行,因为当用户访问联众时,访问请求 匹配第一条防火墙策略,用户就被防火墙放行了,第二条策略根本没有执行的机会。正确的做法是将拒绝策略放到允许策略之前!
 
 
B 策略匹配
策略匹配是ISA管理员关注的核心问题。前面我们一直在提如果网络访问和防火墙策略匹配,则按防火墙策略 执行允许或禁止的操作。那么,问题是,怎么才算和防火墙策略匹配呢?
只有把这个问题搞清楚了,才能写出符合你设计初衷的策 略。
ISA检测到访问请求时,ISA会检查访问请求能否匹配防火墙策略中的策略元素,策略元素的检查顺序为 协议,从(源网络),计划时间,到(目标网络),用户,内容类型。如果和这些元素都能匹 配,ISA就认为访问请求匹配防火墙策略。
从被检查的策略元素来看, 到(目标网络)元素最容易出问题。
目标网络元素的问题容易出在哪儿呢?容易出现在DNS上,确切地说是出现在DNS的反向解析上!这个结论估计是很多管理 员始料未及的,还是举个例子加以说明吧,假设我们要禁止内网访问百度,我见过很多管理员的处理方法都是这样的,首先创建一个域名集,将[url]www.baidu.com[/url]包含进去,如下图所示。
 
 
然后就写出一条拒绝内网访问百度的访问规则,如下图所示
 
 
我们在一台内网计算机Denver上测试一下,Denver使用Web代理访问百度,如下图所示,错误信息表明ISA拒绝了Denver访问百度的请求。这说明访问请求和拒绝百度访问的防火墙策略匹配成功,哈哈,看样子大功 告成了?且慢,再向下看。
 
 
我们在Denver上换用IP访问,在IE中输入202.108.22.5,如下图所示,熟悉的百度界面已经出来了,哈哈,貌似严谨的访问规则竟如此不堪一击!这 说明这次的访问请求没有和拒绝百度访问的防火墙策略匹配成功,而是和第二条允许内网用户任意访问的防火墙策略匹配成功了。
 
 
看到这儿,有些朋友可能得出结论了,哦,原来用域名禁止访问某个网站是不成立的。错!如 果202.108.22.5的反向解析结果为[url]www.baidu.com[/url],那么拒绝百度的防火墙 策略就是成立的!
还是来认真分析一下原理吧,当客户机用HTTP协议访问目标网络时,ISA判断目标网络的根据是HTTP主机头,主机头的内容显然源自我 们在浏览器中的输入。当我们在浏览器中输入[url]www.baidu.com[/url]时,ISA开始检查访问请求能否匹配第一条防 火墙策略,也就是拒绝内网访问百度的那条策略。ISA先检查协议,从(源网络),计划时间三个元素,这三个元素都能和访问请求匹配,然后ISA检查到(目标网络)元素,ISA根据主机头内容判断访问请求中的目标网络是[url]www.baidu.com[/url],而防火墙策略中的目标网络元素也包含了[url]www.baidu.com[/url],因此ISA判断访问请求和到(目标网络)元素 也能匹配上。然后ISA检查用户和内容类型两个元素也可以匹配,所以ISA判断访问请求和拒绝访问百度的防火墙策略完全匹配,于是按照防火墙策略的要求拒绝了这次访问请求。
当我们在浏览器中输入202.108.22.5时,ISA是这么检查的。首先还是判断 协议,从(源网络),计划时间三个元素匹配策略,然后检查到(目标 网络)元素,ISA判断访问请求的目标是202.108.22.5,而防火墙策略的目标网络是包含[url]www.baidu.com[/url]的域名集,这时ISA会对202.108.22.5进行DNS反向解析,如果解析的结果等于[url]www.baidu.com[/url]。,ISA就认为访问请求的目标网络和策略的 目标网络也是匹配的。如果反向解析的结果不等于[url]www.baidu.com[/url](解析的结果确实不是百度的域名),ISA就认为访问请求的目标网络和防火墙策略的目标网络不匹配。这样ISA就会停止匹配第一条拒绝访问百度的 防火墙策略,转而匹配第二条允许内网任意访问的防火墙策略,匹配结果是完全成功,因此ISA执行第二条防火墙策略规定的动作, 允许了对202.108.22.5的访问。
如果客户机不是用HTTP协议访问目标网络,那么匹配的过程 又稍微有些不同。例如客户机用FTP协议访问[url]www.baidu.com[/url],那么客户机在发送访问请求时不会把[url]www.baidu.com[/url]作为目标网络,而是先对[url]www.baidu.com[/url]进行域名解析,然后把解析出来的IP作为目标网络发送给ISAISA对访问请求进行匹配时,如果被匹配的防火墙策略用域名描述目标网络,ISA就会对访问请求发来的IP进行反向解析,看解析出的域名能否和防火墙策略的目标网络相匹配。根据这个结论,我们用IE访问[url]www.baidu.com[/url]会被拒绝,因为刚才分析过了,此时客户机将域名[url]www.baidu.com[/url]作为访问请求中的目标网 络发送给ISAISA认为访问请求和拒绝访问百度的防火墙策略完全匹配,因此客户机被拒绝 访问。但如果客户机在命令行下输入telnet [url]www.baidu.com[/url] 80,如下图所示,直接连接百度的80端口,ISA会如何处理呢?
 
 
如下图所示,ISA对访问请求放行了,显然这次的访问请求没有和拒绝访问百度的策略匹配上,原因是什么呢?
 
 
客户机telnet百度80端口时,我在ISA上启用了实时日志,日志记录的结果如下图所示。从日志上我们很清楚地看到,客户机先对[url]www.baidu.com[/url]进行了DNS解析,解析结果为202.108.22.5,然后客户机把202.108.22.5作为访问请求的目标网络发送给ISAISA202.108.22.5进行反向解析,解析出的域名并不是[url]www.baidu.com[/url],因此ISA认为访问请求和第一条防火墙策略并不匹配。然后ISA将访问请求和第二条策略进行匹配,匹配成功后正从我们在日志中看到的 那样,访问请求被第二条允许内网用户任意访问的策略放行了。
 
 
我们可以总结一下,客户机使用HTTP协议访问时,目标网络取决于主机 头,而访问者输入的主机头既可能是域名也有可能是IP(一般以域名居多);。客户机使用其他协议访问时,目标网络一定是以IP进行描述!
现在我们考虑一下应该如果用ISA禁止用户访问某个目标网络,那这个 目标网络应该如何描述,显然只用域名描述是不严谨的,除非你确信DNS反向解析的结果对你有利(大部分情 况下你会失望的)。如果保险一些,我们应该用域名+IP来描述目标网络。以刚才的限制百度为例,用nslookkup查出[url]www.baidu.com[/url]的域名解析结果为202.108.22.43202.108.22.5。创建一个计算机集将这两个地址包含进去,如下图所示。
 
 
然后就可以在拒绝访问百度的策略中加入刚创建的计算机 集,如下图所示,这样做效果如何大家可以自己试试看,肯定比只用域名要好得多。
 
 
 

本文出自 “岳雷的微软网络课堂” 博客,请务必保留此出处http://yuelei.blog.51cto.com/202879/84995