访问控制列表(Access Control Lists,ACL)与哈希查找的爱恨情怨

访问控制列表(Access Control Lists,ACL)与哈希查找

什么是访问控制列表ACL?

直接说ACL是干啥的

通俗来说ACL就是一个网络流量过滤器。具体来说读取数据包中的IP头部,TCP/DUP 头部中的源IP地址,目的IP地址,和源端口,目的端口根据设置好的ACL决定数据的丢弃还是允许通过。

ACL概念

ACL,中文名称是"访问控制列表",它由一系列规则(即描述报文匹配条件的判断语句)组成。这里的条件包括五元组-分别是报文的源地址、目的地址、源端口、目的端口、端口号等

为什么需要ACL

根据规则过滤的ACL,能够做到阻塞攻击报文、为不同类报文流提供差分服务、对Telnet登录/FTP文件下载进行控制等的功能,从而提高网络环境的安全性和网络传输的可靠性。

ACL类型

  1. 基本ACL:(2000-2999) 只使用报文的源IP地址、分片信息、生效时间段信息来定义规则
  2. 高级ACL:(3000-3999) 可使用IPv4报文的源IP地址、目的IP地址、IP协议类型、ICMP类型、TCP源/目的端口号、UDP源/目的端口号、生效时间段等来定义规则
  3. 二层ACL:(4000-4999) 可根据源MAC、目的MAC、二层协议类型匹配
  4. 用户自定义ACL:(5000-5999) 使用报文头,偏移位置,字符串掩码,用户自定义字符串来定义规则
  5. 用户ACL:(6000-6999) 既可使用IPv4报文的源IP地址或源UCL(User Control List)组,也可使用目的IP地址或目的UCL组、IP协议类型、ICMP类型、TCP源端口/目的端口、UDP源端口/目的端口号等来定义规则

ACL匹配机制

一条ACL可以由多条"deny或permit"语句组成,每一条语句描述一条规则,这些规则可能存在包含关系,也可能有重复或矛盾的地方,因此ACL的匹配顺序是十分重要的。

华为设备支持两种匹配顺序:自动排序(auto模式)和配置顺序(config模式)。缺省的ACL匹配顺序是config模式。
自动排序 ,是指系统使用"深度优先"的原则,将规则按照精确度从高到低进行排序,并按照精确度从高到低的顺序进行报文匹配。
配置顺序,系统按照ACL规则编号从小到大的顺序进行报文匹配,规则编号越小越容易被匹配。

使用例子

  1. 仅允许pc访问168.127.27.0/24网络
c 复制代码
[Huawei]acl number 2000  (创建ACL 2000)
[Huawei-acl-basic-2000]rule permit source 168.127.2.0 0.0.0.255  
		(添加一条规则:允许168.127.27.1这台主机通过, 0.0.0.255地址表示主机)
[Huawei-acl-basic-2000]dis th(查看状态)
[V200R003C00]
#
acl number 2000  
  rule 5 permit source 168.127.2.0 0.0.0.255 (这里多了一个设定好的规则 rule 5 是
  他的规则序号,序号越小执行优先级越高)
#
return
[Huawei-acl-basic-2000]rule deny source any   (添加一个拒绝规则,any 表示所有地址
都不允许通过)
[Huawei-acl-basic-2000]dis th  (再次查看状态)
[V200R003C00]
#
acl number 2000  
 rule 5 permit source 168.127.2.0 0.0.0.255 
 rule 10 deny   (这里又多了一条规则 ,规则号是10)
#
return
[Huawei]int g0/0/2  (进入接口)
[Huawei-GigabitEthernet0/0/2]ip add 168.127.27.254 24  (给接口添加IP地址)
[Huawei-GigabitEthernet0/0/2]traffic-filter outbound acl 2000  (给端口调用 acl
 2000 的配置,outbound表示将这个端口设置为出口模式即从路由器出来的数据要经过 acl 规则
  进行匹配)

哈希查找

什么是哈希查找?

哈希查找是一种用于快速检索数据的算法。它通过将关键字(例如IP地址、MAC地址等)转换为一个固定长度的索引值,并使用这个索引值在哈希表中查找对应的数据,从而大大提高检索速度。

哈希查找的基本原理

  1. 哈希函数:将关键字转换为固定长度的哈希值。好的哈希函数应当尽量将不同的关键字映射到不同的哈希值,以减少冲突。
  2. 哈希表:一种数据结构,用于存储哈希值和对应的数据项。哈希表通常是一个数组,哈希值作为索引,用于定位数据项。

哈希查找的步骤

  1. 计算哈希值:使用哈希函数计算关键字的哈希值。
  2. 查找数据项:在哈希表中通过哈希值定位数据项。如果没有冲突,可以直接找到数据项;如果有冲突,根据处理冲突的方法找到数据项。

哈希查找在ACL中的作用

具体作用

在访问控制列表(ACL)管理中,哈希查找用于快速匹配数据包与ACL规则,提高匹配效率。ACL用于控制网络流量,包含一系列规则,规定哪些流量可以通过,哪些需要阻止。使用哈希查找可以加速ACL规则的匹配过程,尤其在规则数量较多时效果显著。

代码解析

c 复制代码
static void
vl_api_acl_plugin_use_hash_lookup_get_reply_t_handler (
  vl_api_acl_plugin_use_hash_lookup_get_reply_t *mp)
{
    vat_main_t *vam = acl_test_main.vat_main;
    clib_warning ("ACL hash lookups enabled: %d", mp->enable);
    vam->result_ready = 1;
}
  1. 主要功能
    消息类型:处理 vl_api_acl_plugin_use_hash_lookup_get_reply_t 类型的API消息回复。这种消息类型通常包含哈希查找使能状态的信息。
  2. 参数说明:
    mp:指向 vl_api_acl_plugin_use_hash_lookup_get_reply_t 结构体的指针,包含哈希查找使能状态信息。
    vam:指向 vat_main_t 结构体的指针,从 acl_test_main 全局变量中获取。
  3. 处理逻辑:
    clib_warning ("ACL hash lookups enabled: %d", mp->enable);:打印哈希查找使能状态。mp->enable 是一个整数,通常值为0或1,分别表示哈希查找未使能或已使能。
    vam->result_ready = 1;:设置 vat_main_t 结构体中的 result_ready 标志为1,表示结果已准备好。

实际应用

假设在一个大型网络环境中,网络管理员需要管理数千条ACL规则。为了提高效率,可以通过API启用哈希查找功能,然后通过上述代码检查哈希查找是否已成功启用。

相关推荐
劲夫学编程39 分钟前
leetcode:杨辉三角
算法·leetcode·职场和发展
毕竟秋山澪41 分钟前
孤岛的总面积(Dfs C#
算法·深度优先
浮生如梦_3 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
幺零九零零4 小时前
【计算机网络】TCP协议面试常考(一)
服务器·tcp/ip·计算机网络
励志成为嵌入式工程师5 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉5 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer5 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
wheeldown6 小时前
【数据结构】选择排序
数据结构·算法·排序算法
hikktn7 小时前
如何在 Rust 中实现内存安全:与 C/C++ 的对比分析
c语言·安全·rust
观音山保我别报错7 小时前
C语言扫雷小游戏
c语言·开发语言·算法