• 欢迎访问极客公园网站,WordPress信息,WordPress教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入极客公园 QQ群
  • Git主题现已支持滚动公告栏功能,兼容其他浏览器,看到的就是咯,在后台最新消息那里用li标签添加即可。
  • 最新版Git主题已支持说说碎语功能,可像添加文章一样直接添加说说,新建说说页面即可,最后重新保存固定连接,演示地址
  • 百度口碑求点赞啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊http://koubei.baidu.com/s/gitcafe.net
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏极客公园吧

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

未分类 博客教主 15年前 (2010-06-14) 1636次浏览 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.

也就是说,ipsec比iptables要更仔细一点:它会考虑所有匹配中的规则,根据精确程度来决出最终赢家。所谓“精确”,通过权重来判断。权 重可以通过“控制台 -> 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


极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ipsec的匹配机制、权重计算公式
喜欢 (0)

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

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