ACL概述
- 访问控制列表ACL(Access Control List)是由一系列permit或deny语句组成的、有序规则的列表,它通过匹配报文的相关信息实现对报文的分类;
- ACL本身只能够用于报文的匹配和区分,而无法实现对报文的过滤功能,针对ACL所匹配的报文的过滤功能,需要特定的机制来实现(例如在交换机的接口上使用traffic-filter命令调用ACL来进行报文过滤),ACL只是一个匹配用的工具;
- ACL除了能够对报文进行匹配,还能够用于匹配路由;
- ACL是一个使用非常广泛的基础性工具,能够被各种应用或命令所调用。
一、ACL技术背景
二、ACL的应用
- 匹配IP流量(可基于源、目IP地址、协议类型、端口号等元素)
- 在Traffic-filter中被调用
- 在NAT中被调用
- 在路由路由策略中被调用
- 在IPSec VPN中被调用
- 在防火墙的策略部署中被调用
- 在QoS中被调用
- 其他……
三、ACL包过滤原理
1)基于ACL的包过滤技术
- 对进出的数据包逐个过滤,丢弃或允许通过
- ACL应用于接口上,每个接口的出入双向分别过滤
- 仅当数据包经过一个接口时,才能被此接口的此方向的ACL过滤
2)入站包过滤工作流程
3)出站包过滤工作流程
四、通配符掩码
1)概述
- 通配符掩码(wildcard-mask)俗称 反掩码
- 通配符掩码和IP地址结合使用,以描述一个地址范围
- 通配符掩码和子网掩码相似,但含义不同
- 0表示对应位须比较
- 1表示对应位不比较
2)特殊的通配符掩码
192.168.1.1 0.0.0.0 = 192.168.1.1 0
精确匹配192.168.1.1这个IP
0.0.0.0 255.255.255.255 = any
匹配所有IP
3)应用示例
示例:匹配192.168.1.0/24这个子网中最后一个8位组为基数的IP地址,例如192.168.1.1、192.168.1.3、192.168.1.5等。
五、ACL分类
1)ACL的标识
- 可以给访问控制列表指定名称,便于维护
- 利用数字序号标识访问控制列表
2)基本ACL
- 基本访问控制列表只根据报文的源IP地址信息制定规则
3)高级ACL
- 高级访问控制列表根据报文的源IP地址、目的IP地址、IP承载的协议类型、协议特性等三、四层信息制定规则
4)二层ACL
- 二层ACL根据报文的源MAC地址、目的MAC地址、802.1p优先级、二层协议类型等二层信息制定匹配规则
5)ACL的步长
- ACL 中的每条规则都有自己的编号,这个编号在该ACL中是唯一的。在创建规则时,可以手工为其指定一个编号,如未手工指定编号,则由系统为其自动分配一个编号。
- 由于规则的编号可能影响规则匹配的顺序,因此当由系统自动分配编号时,为了方便后续在已有规则之前插入新的规则,系统通常会在相邻编号之间留下一定的空间,这个空间的大小(即相邻编号之间的差值)就称为ACL的步长。
- 譬如,当步长为5 时,系统会将编号0、5、10、15……依次分配给新创建的规则。
六、配置ACL包过滤
1)ACL包过滤配置任务
- 根据需要选择合适的ACL分类
- 创建正确的规则
- 设置匹配条件
- 设置合适的动作(Permit/Deny)
- 在路由器的接口上应用ACL,并指明过滤报文的方向(入站/出站)
2)设置包过滤规则
- 包过滤功能默认开启
- 设置包过滤的默认过滤方式
- 系统默认的过滤方式是permit,即允许未匹配上ACL规则的报文通过
- 可以配置包过滤的缺省动作为deny
[H3C] packet-filter default deny
3)配置基本ACL
- 配置基本ACL,并指定ACL序号
- 基本IPv4 ACL的序号取值范围为2000~2999
[H3C] acl basic acl-number
- 定义规则
- 制定要匹配的源IP地址范围
- 指定动作是permit或deny
[H3C-acl-basic-2000] rule [ rule-id ]{ deny | permit } [ counting | fragment | logging | source{ sour-addrsour-wildcard| any }|time-range time-range-name]
4)配置高级ACL
- 配置高级IPv4 ACL,并指定ACL序号
- 高级IPv4 ACL的序号取值范围为3000~3999
[H3C] acl advanced acl-number
- 定义规则
- 需要配置规则来匹配源IP地址、目的IP地址、IP承载的协议类型、协议端口号等信息
- 指定动作是permit或deny
[H3C-acl-adv-3000]rule [ rule-id ] { deny | permit } protocol [ destination { dest-addr dest-wildcard| any } | destination-port operator port1[ port2 ] established | fragment | source { sour-addr sour-wildcard | any } | source-port operator port1[ port2 ] |time-range time-range-name ]
5)配置二层ACL
- 配置二层ACL,并指定ACL序号
- 二层ACL的序号取值范围为4000~4999
[H3C] acl mac acl-number
- 定义规则
- 需要配置规则来匹配源MAC地址、目的MAC地址、802.1p优先级、二层协议类型等二层信息
- 指定动作是permit或拒绝deny
[H3C-acl-ethernetframe-4000]rule [ rule-id ] { deny| permit } [ cos vlan-pri | dest-mac dest-addr dest-mask| lsap lsap-type lsap-type-mask | source-mac sour-addr source-mask| time-range time-range-name]
6)在接口上应用ACL
- 将ACL应用到接口上,配置的ACL包过滤才能生效
- 指明在接口上应用的方向是Outbound(数据离开路由器的方向)还是Inbound(数据进入路由器的方向)
[H3C-Serial2/0 ] packet-filter { acl-number |name acl-name } { inbound| outbound}
7)ACL包过滤显示与调试
七、ACL包过滤的注意事项
1)ACL规则的匹配顺序
- 匹配顺序指ACL中规则的优先级
- ACL支持两种匹配顺序:
- 配置顺序(config):按照用户配置规则的先后顺序进行规则匹配
-
- 自动排序(auto):按照“深度优先”的顺序进行规则匹配,即地址范围小的规则被优先进行匹配
- 配置ACL的匹配顺序:
[H3C] acl number acl-number[match-order {auto | config}]
2)不同匹配顺序导致结果不同
3)在网络中的正确位置配置ACL包过滤
- 尽可能在靠近数据源的路由器接口上配置ACL,以减少不必要的流量转发
- 高级ACL
- 应该在靠近被过滤源的接口上应用ACL,以尽早阻止不必要的流量进入网络
- 基本ACL
- 过于靠近被过滤源的基本ACL可能阻止该源访问合法目的
- 应在不影响其他合法访问的前提下,尽可能使ACL靠近被过滤的源
4)ACL部署位置示例
- 基本ACL部署位置示例
- 高级ACL部署位置示例
5)ACL包过滤的局限性
- ACL包过滤是根据数据包头中的二、三、四层信息来进行报文过滤的,对应用层的信息无法识别
- 无法根据用户名来决定数据是否通过
- 无法给不同的用户授予不同的权限级别
- ACL包过滤防火墙是静态防火墙,无法对应用层的协议进行动态检测