Sep 202006
 

接着上次开始我们的体验之旅。

上次只是简单介绍了一下安装和安装结束后的第一印象,并没有接触到任何实质内容,并不是因为我不想写,而是觉得要写的东西实在太多了,无法一一道完。在经过了几个星期的捣鼓之后,我决定先写一下Windows Firewall这个东西。因为以前的自带防火墙简直就是丑陋的代名词,而在LH/Vista上的防火墙,则是脱胎换骨的东西。首先是名字,还记得以前的Firewall叫什么名字吗–Windows Firewall/Internet Connection Sharing (ICS)。从名字来看,这实际包含了两部分功能:1,防火墙,2,连接共享。不知道为什么微软把这两个东西捏在一起,或许是实现的技术层面相似?导致我们都约定俗成将防火墙缩写成ICS,而实际从字面来看ICS根本不带有防火墙的意思。
而今天这两兄弟终于分家了。现在我们有两个服务了!Windows Firewall和Internet Connection Sharing (ICS)。其中,后一个服务默认是禁用的,而Firewall比较有意思,刚装完系统它是关闭的。但当你勾选了欢迎页中的“Don’t showme”的选项后,它会变成Auto的状态,也就是自动启动。在微软官方查到些资料,说是对于服务器操作系统,因为刚安装好可能需要远程连接维护或者是需要打补丁之类的操作,此时防火墙的存在是个阻碍,因此默认关闭,一旦你把欢迎页点掉之后,这代表你的服务器已经Standby了,因此系统会帮你启动防火墙,并且此时会根据你定义的Role类型自动开放某些服务端口。微软产品的人性化考虑,可见一斑。前面我还在大呼“”为什么ICS默认是关闭的“,想来可笑,因为我为了方便,没有关掉欢迎页。更可笑的是,这个机制是Win2003SP1引入的,这么久竟然都没发现。
ICS(这里该指的是真正的ICS而不是ICS+Firewall了)暂且不表,先来看看Windows Firewall的变化。
首先最引人注目的是网卡属性中的高级选项卡不见了,其实验证选项卡也没了。也就是说通过我们熟悉的方式来设置Windows防火墙行不通了。它去哪儿了呢?实际上它跑到Administrative Tools里去了,防火墙作为一个全新的mmc插件存在了,名字叫做”Windows Firewall with Advanced Security“。看这图:

接下来就是新特性介绍了,相信看文章的人也都不是初学者,我也懒得搞什么看图说话了,直接列流水账:
1,防火墙现在是以规则(Rule)为核心执行单元的运作方式了。Rule分为两大部分:Inbond和Outbond,分别代表入站连接也出站连接。每部分都可设定一个默认值,也就是没有合适的规则匹配的行为,例如可以默认禁止所有入站连接,而允许所有出站连接,以避免从外向内的入侵行为,同时不影响自己访问网络。
2,一条完整的Rule分为几个部分:
第一项是type,可供选择的有Program,Port,Predefined,Custom,前二者容易理解,一个是匹配应用程序,一个是匹配端口,这些在以往的ICS和大多防火墙系统里都存在。Predefined则预定义了数个类型组,例如简单的有RemoteDesktop代表3389端口,复杂的有Files and Prints Sharing定义了多个端口(138,139,445)和多个服务(Server,Spoller)的连接等等。使用这些预定义规则就可以解决以往的一些防火墙软件造成正常网络服务无法连接的问题而并不需要知道细节。而Custom则代表以上几种的组合,可以做任何你想做的微调。
第二项则是根据第一项的选择而定的,像type为Program就会让你选择程序名称,type为port则让你选择协议类型和端口号,type为Predefine则让你选择预定义规则类型的具体条目。而custom的话,可以让你选择程序,协议,端口,外加服务,应用区域(定义from ip to ip)。想来这些搭配已经比市面大多防火墙软件要灵活了。
第三项则为action,很好理解,就是对于匹配到规则应当采取的行动,有allow,block,allow only secure connections三种选择,前两种好理解,后一种则比较复杂,貌似牵扯到了用户和计算机验证,可以使用kerbose和证书方式鉴别连接,好像还可以使用ipsec,启用了这种方式甚至可以验证建立连接的双方机器和用户身份。属于非常好玩的东西,有空要研究下。不过如果要最大限度发挥这个选项的威力,应该只能是处于域的环境,估计如果是工作组的话顶多只能进行类似NTLM的验证鉴别。
第四项为profile,这也是很有意思的一个设置。总共只有3个固定的profile,一个为Domain,一个为Private,一个为Public,Domain代表同域的环境,Private代表与你同一网络的环境,可以理解为同一ip段吧,而Public很显然代表整个Internet了。所有的Rule都可以针对这三者做设定,以达到分层次的规则匹配。另外补充一下前面所说的防火墙开启还是关闭,以及Inbond和Outbond默认行为都可以为这3个profile做单独设置的。不过很遗憾的是似乎目前不能自己建立特定的profile,例如我建立一个profile用于针对特定ip段的连接,这是不可以的。不过这也只是使用方便程度的区别而已,可以在任意rule的scope中指定。
第五项为name,这个不说了吧。

3,基本上通过调配这些Rule,我们就能弄出一个很高级的防火墙来了,到底有多高级呢?你去看看默认的那些规则列表,如果你能全部弄懂,那估计你可以被称赞为“非常棒的SysAdmin”了。
4,这里要介绍到Windows Firewall的另一重要新特性,IPSec的集成–在这里被叫做Connection Security Rules,这里牵扯到更多的技术细节了,像鉴别,端到段连接,隧道等东西,说实话我自己都要找不少资料才搞定,IPSec在我MCSE考试中属于比较头疼的一个范畴,有兴趣自己研究吧。
不过这里要说的一点是关于IPSec在Win系统的定位问题,我觉得这个很有意思。在Win2000/NT系统,IPSec的配置位于网卡属性-tcp/ip属性-高级-选项。一个非常深的地方,和tcp/ip筛选放在一起。而2003中呢,IPSec放到本地安全策略中去了,tcp/ip选项中就只有筛选一个孤零零的仍在那里,到了现在LH,IPSec又跑到Windows Firewall这里来了,而tcp/ip筛选则貌似找不到了。这里可以但到这些不同技术的地位的一些变化,Firewall是不停的在提高和强大,侵占其他技术的领域,从简单的端口过滤,慢慢到应用层网络连接拦截,再到安全连接以及身份验证,不断地引入其他技术。而IPSec因为牵扯到多方面的应用,一方面可以看作是网络协议的安全机制,另一方面可以看作系统安全策略在网络连接、身份验证等方面的应用,所以在哪里都能看到它的身影。而tcp/ip筛选嘛,虽说是最底层tcp/ip服务层的机制,属于最简单高效的,但是弱智的配置方式,管理复杂程度,无API调用实现,修改一次都要reboot机器,至今为止还有人想用它吗?

总体看来,这一代的Windows Firewall可以说是一个全新的强大产品,其底层应该得益于LH/Vista新的网络架构。毕竟从最初的ip协议端口过滤,到tcp的端口过滤,以及中间的ipsec层的安全连接,以及系统服务层过滤,最终到应用层程序拦截,目前没有任何一个Firewall产品能够同时做到如此多的事情。有人会指出因为微软对自己产品了解,所以才有可能做的出来,但你见过有哪些其他操作系统有类似的实现吗?Linux/netfilter?Solaris/ipfilter?还是FreeBSD/ipfw&pf?虽然我们一再指责微软,但不得不承认我们一直都在不知不觉地享受微软带来的创新。
现在看来唯一的问题就是性能问题,如此多层次的网络拦截不带来性能的损失是不可能的。netfilter的conntrack已经算是非常优秀的机制了,但同样免不了受指责说性能有问题,所以我们从不奢望在Windows Firewall开启的情况下,我们的Server还可以狂飙。不过这也不是问题,我们从来没有奢望拿Windows去跑核心服务,我们所要的只是一个高级玩具。君不见那些跑核心服务的机器简陋到只有操作系统+应用架构,但我们通常把这种简陋称之为“性能优化”。这不是Windows Server现阶段的努力方向,因此没必要强求。

废话写了不少,以后有机会继续。
最后放上微软为我们精心准备的上百条默认的Rules,搞懂这些就可以算是大师级别了,看图,注意我这是在1600×1200分辨率截下的图,还要很大一部分规则无法显示。

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>