访问控制列表(Access Control Lists,ACL)与哈希查找
什么是访问控制列表ACL?
直接说ACL是干啥的
通俗来说ACL就是一个网络流量过滤器。具体来说读取数据包中的IP头部,TCP/DUP 头部中的源IP地址,目的IP地址,和源端口,目的端口根据设置好的ACL决定数据的丢弃还是允许通过。
ACL概念
ACL,中文名称是"访问控制列表",它由一系列规则(即描述报文匹配条件的判断语句)组成。这里的条件包括五元组-分别是报文的源地址、目的地址、源端口、目的端口、端口号等
为什么需要ACL
根据规则过滤的ACL,能够做到阻塞攻击报文、为不同类报文流提供差分服务、对Telnet登录/FTP文件下载进行控制等的功能,从而提高网络环境的安全性和网络传输的可靠性。
ACL类型
- 基本ACL:(2000-2999) 只使用报文的源IP地址、分片信息、生效时间段信息来定义规则
- 高级ACL:(3000-3999) 可使用IPv4报文的源IP地址、目的IP地址、IP协议类型、ICMP类型、TCP源/目的端口号、UDP源/目的端口号、生效时间段等来定义规则
- 二层ACL:(4000-4999) 可根据源MAC、目的MAC、二层协议类型匹配
- 用户自定义ACL:(5000-5999) 使用报文头,偏移位置,字符串掩码,用户自定义字符串来定义规则
- 用户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规则编号从小到大的顺序进行报文匹配,规则编号越小越容易被匹配。
使用例子
- 仅允许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地址等)转换为一个固定长度的索引值,并使用这个索引值在哈希表中查找对应的数据,从而大大提高检索速度。
哈希查找的基本原理
- 哈希函数:将关键字转换为固定长度的哈希值。好的哈希函数应当尽量将不同的关键字映射到不同的哈希值,以减少冲突。
- 哈希表:一种数据结构,用于存储哈希值和对应的数据项。哈希表通常是一个数组,哈希值作为索引,用于定位数据项。
哈希查找的步骤
- 计算哈希值:使用哈希函数计算关键字的哈希值。
- 查找数据项:在哈希表中通过哈希值定位数据项。如果没有冲突,可以直接找到数据项;如果有冲突,根据处理冲突的方法找到数据项。
哈希查找在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;
}
- 主要功能
消息类型:处理 vl_api_acl_plugin_use_hash_lookup_get_reply_t 类型的API消息回复。这种消息类型通常包含哈希查找使能状态的信息。 - 参数说明:
mp:指向 vl_api_acl_plugin_use_hash_lookup_get_reply_t 结构体的指针,包含哈希查找使能状态信息。
vam:指向 vat_main_t 结构体的指针,从 acl_test_main 全局变量中获取。 - 处理逻辑:
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启用哈希查找功能,然后通过上述代码检查哈希查找是否已成功启用。