vitter
4/10/2002 IPSec Filer过滤服务在网络栈中最先处理分组,对于那些不符合过滤原则的分组一律简单丢弃。和TCP/IP Filter相比,IPSec Filer可以应用于单个接口,可以恰当的阻塞ICMP。而且IPSec Filer不需要重起就生效。他主要用于服务器的解决方案,而不是个人防火墙技术,因为它和TCP/IP Filter一样,也会阻塞合法外出连接的入端服务(除非所有高端口均允许通过)。
创建IPSec Filer可以使用管理工具》本地安全策略(sepol.msc)。可以在GUI界面中,右击左侧"IP安全策略,在本地机器"结点,然后选“管理IP筛选器表和筛选器操作”(本文不介绍GUI界面)。
我们更喜欢用ipsecpol.exe命令行工具管理IPSec过滤服务。他便于脚本编写,比IPSec策略管理器好用多了。ipsecpol.exe可以从win2000reskit包中找到的。
下面例子就是只允许80端口是可以访问的:
ipsecpol\\computername -w REG -p "Web" -o)
ipsecpol\\computername -x -w REG -p "Web" -r "BlockAll" -n BLOCK -f 0+*
ipsecpol\\computername -x -w REG -p "Web" -r "OkHTTP" -n PASS -f 0:80+*::TCP
后两条命令创建了一条叫“WEB”的IPCSec策略,包含两条过滤规则,一是“BlockAll”,即禁止所有协议进出此主机;第二条是"OkHTTP",允许80端口的服务进出此主机。如果还允许ping或ICMP(建议不打开),你可以添加下面规则:
ipsecpol\\computername -x -w REG -p "Web" -r "OkICMP" -n PASS -f 0+*::ICMP
上述例子是一个对所有地址均可用的策略,你可以用-f开关来指定单个ip地址,从而实现具体的接口的过滤。对按上述例子配置的服务器进行端口扫描的时候可以看到的只要80端口。当此策略不激活时,所有端口又都是可以访问的。
上例中的每个参数见下表:
对windows2000主机进行过滤的ipsecpol参数表:
------------------------------------------------
-w REG ipsecpol设为静态模式(static mode),此模式将策略写入指定的存储地方(不同于缺省的 动态模式,该模式下只要策略带来服务器是激活的,策略就生效,重起才去除)。REG参数指 定策略写入Registry, 这对于单独的WEB服务器来说是合适的(定一个选择是DS,即写入目录 )。
-p 为策略指定任意一个名字(比如WEB),如果已有同名的策略存在,则本规则会添加其后,比 如例子中的第三行OkHTTP规则将添加于WEB策略中
-r 为规则这指定名字,他将替代策略中已有的同名规则
-n 在静态模式中,NegotiationPolicyList选项可以指定3个项:BLOCK、PASS以及INPASS。
BLOCK 忽略NegotiationPolicyList中的其他策略,使过滤服务阻塞或丢弃所有分组;这与IPSec管 理界面中选中BLOCK单选按钮的效果一样。
PASS 忽略NegotiationPolicyList中的其他策略,允许所有分组通过过滤器。这与IPSec管理界面 中选中Permit单选按钮的效果一样。
-f 过滤表(FilterList),一个或多个空格分开的IPSec Filer。过滤规则将此格式称为 filterspec(过滤规范):
A.B.C.D /mask:port=A.B.C.D /mask:port:IP protocol
其中“=”左边是源地址目标地址在右边,如果用“+”代替“=”,则创建了2个镜像的过 滤器,两个方向均可。掩码和端口是可选的,如果省略的话,则掩码为255.255.255.255,端 口为“Any”。A.B.C.D /mask可用下面的方式代替:
0 表示本地系统地址
* 表示任何地址
DNS 名字(注意:多重解释将被忽略)
IP协议(比如:ICMP)是可选项:如果省略,则假定为“Any”IP协议。如果指定了一个IP协 议,则其前面应该有端口号或是"::"。.
-x 可选项,在LOCAK注册时激活策略(注意我们在第一条规则时使用它以激活www策略,此开关 似乎只在策略的第一个过滤器创建时起作用)。
-y 可选项,在LOCAL注册时使策略失活(inactive)。
-o 可选项,将删除由-p指定的策略(注意:它将删除指定策略的各个方面,如果你有其他策略 指向该策略中的对象时不要使用)
------------------------------------------------
我们还应当注意到,IPSec过滤器不会阻挡端口500(UDP)以及windows2000域控制器上的端口88(TCP/IP),因为他们可能用来执行IPSec认证服务(88是Kerberos ,500是IKE:Internet Key Exchange)。不过补丁1中包含了一个新注册设置,允许通过关闭IPSec驱动程序免除规则来禁止Kerberos端口,其设置为:
HKLM\SYSTEM\CurrentControlSet\Services\IPSEC\NoDefaultExempt
Type: DWORD
Max: 1
Min: 0
Default: 0
IKE分组总是免除检查的,不受注册设置影响,Kerberos和RSVP分组在此注册设置为1时将不在被免除检查。
由于ipsecpol健壮的命令行语法,他显得比较苛刻。在上面例子中过滤规则时从顶向下解析的,简单改变顺序会导致过滤的不正确。而且语法中,源或目的地址的端口范围也似乎没办法指定,因此,使用起来要格外小心,以免阻塞了必要的端口。下面是一些小技巧:
★ 如果想删除一个策略,则在用-o开关删除之前或之后,用-y开关禁止该策略。否则还起作用。
▲ 在修改策略时,要么用命令行工具ipsecpol.exe,要么用GUI图形界面。当我们用ipsecpol.exe创建策略,而用GUI进行编辑的时候,就产生了冲突,并留下了一些重要的安全漏洞。
● 一定要删除那些没有用的过滤规则,以防止产生冲突。这可是一个重要的查点对象哦。