快速匹配之对象(附C++代码)

本文探讨了现代防火墙中如何通过快速匹配算法提高安全策略的性能,包括正确性、高效性和实时性。作者构建了用户-策略映射表,并提供了C源代码示例。实测显示,即使面对大量策略,映射表构建时间也在1秒内,且能处理配置变化。
摘要由CSDN通过智能技术生成

一、背景介绍

在现代防火墙中,可能存在着海量的安全策略,传统逐个策略检查不再能满足高性能方面的需求。本文提出一种快速匹配算法提升安全策略之匹配性能,这种算法需要解决如下问题:

  • 正确性:功能与逐个策略检查结果一致;
  • 高效性:匹配性能不能随配置量增加而明显降低;
  • 实时性:配置变更后需要立刻生效;

安全策略之过滤条件大体分为 地址类、端口类、对象类,我们分别进行探讨,给出快速匹配机制,并尝试完成代码实现(CentOS C++)。理论上,同等 C 代码实现能做到更优性能,但由于业时间有限而选用 C/C++混合编码则是一种折中。另外,受个人水平所限,文章观点未必是此问题之最优解,思路和代码也难免存在错误或纰漏,如有可供参考之处不胜荣幸。本文先从对象类快速匹配机制开始探讨。

二、问题描述

讨论对象快速匹配之前,以用户为例,假设我们的防火墙上存在如下配置:

策略名称优先级IP 端口用户动作
POLICY1 1192.168.1.0/2480USER1permit
POLICY22192.168.1.0/2422USER2,USER3deny
POLICY33192.168.1.0/2423USER2,USER5permit
...
POLICY999999192.168.1.0/24443USER1,USER999permit
POLICY10001000192.168.1.0/248080ANYdeny

说明:每个USER有唯一ID,本文需要解决的问题就是:如何根据 ID 快速找到所有匹配指定USER的安全策略。关于用户身份如何识别,地址、端口快速匹配以及多种匹配条件如何协作,我们会在后面单独探讨,不在本文之讨论范围。

针对上述配置,我们设法得到如下的“用户-策略“映射表:

策略匹配列表代号
USER-1POLICY1 ,POLICY999,POLICY1000USER-1-MATCH-LIST
USER-2POLICY2,POLICY3,POLICY1000USER-2-MATCH-LIST
USER-3POLICY2,POLICY1000USER-3-MATCH-LIST
...
USER-999POLICY999,POLICY1000USER-999-MATCH-LIST
USER-1000POLICY1000USER-1000-MATCH-LIST

三、构建“用户-策略“映射表

我们对策略的用户配置情况做如下三种分类:

策略的用户配置情况策略别名
1策略中未配置用户NONE-USER-POLICY
2策略中配置ANY用户ANY-USER-POLICY
3策略中配置正常用户XXX-USER-POLICY

我们很容易想到建立一个哈希来表示,以用户ID为KEY,以策略匹配列表为VALUE。我们只需要遍历所有配置便很容易构建出如下的“用户-策略”映射表:

用户策略匹配列表
NONE-USERNONE-USER-MATCH-LIST
ANY-USERANY-USER-MATCH-LIST
USER-1USER-1-MATCH-LIST
USER-2USER-2-MATCH-LIST
USER-3USER-3-MATCH-LIST
...
USER-999USER-999-MATCH-LIST
USER-1000USER-1000-MATCH-LIST

由于ANY-USER包含了任意用户,对于USER-1来说,我们将ANY-USER-MATCH-LIST和USER-1-MATCH-LIST之和,即为USER-1最终的策略匹配结果。

四、用户匹配过程

用户匹配过程,如下图所示:

ANY-MATCH和USERX-MATCH的规则按优先级从高到低排序,分别取第一个策略比较优先级即为最终结果。

五、配置变化

从100万策略实测情况来看,构建映射表时间在1秒以内,暂时还不需要引入增量加速。

六、C源代码

链接:https://pan.baidu.com/s/1XTaaLUxQMrPGTvfamff4Ug 
提取码:pzzf

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值