• 欢迎访问MACD实战投资网站,推荐使用最新版谷歌Chrome浏览器访问本网站,关注公众号 丁火甲木庚金 www.macd11.com/subscriptions

ipsec的匹配机制、权重计算公式

未分类 丁火 15年前 (2010-06-14) 1676次浏览 1个评论

iptables: First match wins.

多数人都知道,iptables的规则匹配是简单的top-down:无论有多少条规则匹配中,永远都是第一条生效。因此,下面的第三条规则不会生 效,192.168.93.35还是能访问21端口。iptables构造的mind picture非常直观。

-A INPUT -s 192.168.93.35/32 -p tcp --dport 21 -j ACCEPT
-A INPUT -s 192.168.12.31/32 -p tcp --dport 21 -j ACCEPT

# redundant, iptables won't even look this one
-A INPUT -s 192.168.93.35/32 -p tcp --dport 21 -j DROP

ipsec: Most specific match wins.


ipsec就没那么简单了。同事翻箱倒柜后,终于找出唯一一篇文档,全 文亮点就是这句了:The IPsec filter list is ordered based on a weight value calculated by the IPsec Policy Agent component, with the highest weight value first.

也就是说,ipseciptables要更仔细一点:它会考虑所有匹配中的规则,根据精确程度来决出最终赢家。所谓“精确”,通过权重来判断。权 重可以通过“控制台 -> IP安全监视器 -> 快速模式 -> 特别筛选器”查看,如下图:

ipsec weight

从文档可知,不考虑隧道的话,权重的计算公式依赖且仅依赖以下元素:

  • 源IP,源IP掩码
  • 目的IP,目的IP掩码
  • 协议
  • 源端口与目的端口(对于UDP/TCP协议)

其中的关键是对于某个元素,只关心其是否被指定,不关心具体的指定 值。例如:指定了协议就得256分,无论是TCP、UDP还是ICMP。指定源端口得2分,目的端口得4分。无论端口号具体是多少。

想想也很简单,权重目的是在多条规则匹配成功时,选择最精确的。既然这些规则已经是候选了,它们的内容并不重要。我自己对权重的计算方法很感兴趣, 但微软根本没对权重如何计算进行描述,所以只能反推了。

反推也不难,先确定单个元素的权重,然后验证多个元素并存时,推理值是否与实际值相符即可。结论是这样的:

  • 什么都不指定 +1分
  • 指定了源端口 +2分
  • 指定了目的端口 +4分
  • 指定了协议 +256分

子网掩码比较复杂,举例子更好理解:

对于源地址的子网掩码:

  • 255.255.255.255 +528 * 2^16分
  • 255.255.255.254 +527 * 2^16分
  • 255.255.255.252 +526 * 2^16分
  • 255.255.255.248 +525 * 2^16分
  • 255.255.255.0 +492 * 2^16分
  • 255.255.0.0 +392 * 2^16分
  • 255.0.0.0 +228 * 2^16分

目的地址子网掩码均比子源子网掩码多1。万事俱备,只欠东风,现在就能自 己算权重了,例如

源:192.168.0.0(255.255.0.0) +392*2^16
目的: 10.10.95.39 +528*2^16+1
源端口:任何 +0
目的端口:21 +4
协议:TCP +256
动作:许可 +0
方向:入站 +0
权重:(392+528)*2^16 + 1 + 4 + 256 = 60293381

有兴趣的可以添加这条规则用监视器验证一下。

Use linear algebra to obtain the actual formula

本质上,这种推算方法就是找7个线性无关的方程组一个矩阵,然后解矩阵。用MATLAB能轻松搞定。

W = left[ {begin{array}{ccccccc} 1 & 0 & 0 & 1 &  0 & 1 & 1  \ 1 & 1 & 1 & 0 & 0 & 0 & 0   \ 0 & 0 & 1 & 1 & 0 & 1 & 1 \ 0 & 1  & 1 & 1 & 0 & 1 & 0 \ 1 & 1 & 0 & 1  & 1 & 1 & 1  \ 1 & 0 & 0 & 1 & 1 & 1  & 1  \ 1 & 1 & 0 & 1 & 0 & 1 & 1  end{array} } right]

作者:hydra


macd11.com 和 丁火甲木庚金 公众号版权所有丨如未注明 , 均为原创丨转载请注明原文链接。
喜欢 (0)
[sp91@qq.com]
分享 (0)

您必须 登录 才能发表评论!

(1)个小伙伴在吐槽
  1. 路过。。。
    huage2011-07-11 17:43