安全策略增量加速之对象

1. 前言

在实际防火墙中,可能存在着海量的安全策略,传统的逐个规则进行检查不再能满足防火墙在高性能方面的需求。因此,需要提出一种快速匹配算法来提升安全策略的匹配性能,这种快速匹配算法需要解决如下问题:

  • 功能正确:功能与逐个规则匹配结果一致;
  • 匹配高效:匹配性能不能随配置量增加而明显降低;
  • 快速生效:配置变更后需要做到立刻生效;
  • 增量构建:配置变更时不需要完全重新构建;

安全策略中的过滤条件大体可以分为IP地址类、服务端口类、对象类等,我们将分别进行探讨其加速机制,并尝试逐步完成加速代码的实现(CentOS C++)。理论上,同等功能的C代码实现能做到更优性能,但由于业余时间有限而采用C++实现也是一种无奈的妥协。受水平所限,文章观点未必为此问题之最优解,文章和代码也难免可能会存在错误或纰漏,还请不吝指出。本文先从对象加速机制入手。

2. 抛出问题

在讨论正题前,我们先假设防火墙上存在如下配置:

策略名称 优先级 IP地址 端口 用户 动作
policy1  1 192.168.1.0/24 80 user1 permit
policy2 2 192.168.1.0/24 80 user2,user3 deny
policy3 3 192.168.1.0/24 443 user2,user5 permit
... ... ... ... ... ...
policy49999 49999 192.168.1.0/24 23 user1,user49999 pass
policy50000 50000 192.168.1.0/24 23 any deny

我们设定每个用户都有唯一标识ID,关于流量如何识别用户身份不在本文的讨论范围。关于IP地址类、服务端口类快速匹配算法,以及多种匹配条件之间如何协作,我们会在后面的专题中逐一讨论。本文要解决的问题是:如何根据用户ID快速找到所有此能匹配此用户的安全策略。

针对上述配置我们需要解决如下问题:

输入用户ID 输出此用户能匹配的规则列表
user1(ID) policy1, policy49999, policy50000
user2(ID) policy2, policy3, policy50000
user3(ID) policy2, policy50000
... ...
user49999(ID) policy49999, policy50000
user50000(ID) policy50000

 

待续(2024/4/29)

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章