ACL原理与配置
随着网络的飞速发展,网络安全和网络服务质量QoS(QualityofService)问题日益突出。访问控制列表(ACL,AccessControlList)是与其紧密相关的一个技术。
ACL可以通过对网络中报文流的精确识别,与其他技术结合,达到控制网络访问行为、防止网络攻击和提高网络带宽利用率的目的,从而切实保障网络环境的安全性和网络服务质量的可靠性。
一 ACL概述
ACL是由一系列permit或deny语句组成的、有序规则的列表。
ACL是一个匹配工具,能够对报文进行匹配和区分。
二 ACL的基本概念及其工作原理
1 ACL的组成
ACL由若干条permit或deny语句组成。每条语句就是该ACL的一条规则,每条语句中的permit或deny就是与这条规则相对应的处理动作。
规则的执行顺序从上而下执行,一旦匹配到某一条规则,后续规则不再匹配执行,在书写ACL是我们要遵循精确的规则在上。而粗狂的规则在下的书写原则。
ACL的隐示规则(虽然没有配置不显示,除了流量过滤-源IP以外默认为deny拒绝所有),流量过滤只能控制经过的流量,通常不能控制本地始发的流量。
2 规则编号与步长
规则编号(Rule ID)
一个ACL中的每一条规则都有一个相应的编号。
步长(Step)
步长是系统自动为ACL规则分配编号时,每个相邻规则编号之间的差值,缺省值为5。步长的作用是为了方便后续在旧规则之间,插入新的规则。
Rule ID分配规则
系统为ACL中首条未手工指定编号的规则分配编号时,使用步长值(例如步长=5,首条规则编号为5)作为该规则的起始编号;为后续规则分配编号时,则使用大于当前ACL内最大规则编号且是步长整数倍的最小整数作为规则编号。
3 ACL的分类与标识
基于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 | 传统的ACL标识方法。创建ACL时,指定一个唯一的数字标识该ACL。 |
命名型ACL | 通过名称代替编号来标识ACL。 |
相关命令
创建ACL编号
[Huawei]acl ?
INTEGER<2000-2999> Basic access-list(add to current using rules)
INTEGER<3000-3999> Advanced access-list(add to current using rules)
INTEGER<4000-4999> Specify a L2 acl group
ipv6 ACL IPv6
name Specify a named ACL
number Specify a numbered ACL
在ACL编号下创建规则
[Huawei-acl-basic-2000]rule 5 deny source ?
IP_ADDR<X.X.X.X> Address of source
any Any source
在接口下调用流量过滤的ACL规则
[Huawei-GigabitEthernet0/0/0]traffic-filter ?
inbound Apply ACL to the inbound direction of the interface
outbound Apply ACL to the outbound direction of the interface
查看所有的ACL规则
<Huawei>display acl all
实验一:配置基本ACL(入方向)
主机配置
交换机配置
[AR1]acl 2000 \\创建ACL编号2000
[AR1-acl-basic-2000]rule 5 deny source 192.168.1.5 0 \\拒绝PC1的流量
[AR1-acl-basic-2000]rule 10 deny source 192.168.1.10 0 \\拒绝PC2的流量
[AR1-acl-basic-2000]rule 10000 permit source any \\允许其他任何流量通过
[AR1-GigabitEthernet0/0/0]ip address 192.168.1.1 24 \\设置IP和掩码
[AR1-GigabitEthernet0/0/0]traffic-filter inbound acl 2000 \\在接口 GE 0/0/0 的输入方向上应用 acl 2000 的规则
测试连通性
通过测试,发现主机1和主机2无法ping通路由器,而其他2台主机可以ping通,配置成功。
实验二:配置基本ACL(出方向)
主机配置同上
路由器AR1配置
[AR1-GigabitEthernet0/0/0]undo traffic-filter inbound \\取消上个实验中在接口 GE 0/0/0的入方向上的ACL规则
[AR1-GigabitEthernet0/0/1]ip address 1.1.1.1 24 \\配置IP和掩码
[AR1-GigabitEthernet0/0/1]traffic-filter outbound acl 2000 \\在接口 GE 0/0/1 的出方向上应用ACL规则
路由器AR2配置
[AR2]ip route-static 0.0.0.0 0 1.1.1.1 \\配置静态默认路由
[AR2-GigabitEthernet0/0/1]ip address 1.1.1.2 24 \\配置IP和掩码
连通性测试
通过测试发现,主机1和主机2虽然可以ping通路由器AR1的GE 0/0/1接口,但是不能ping通路由器AR2的GE 0/0/0接口,而其他主机都可以ping通路由器AR2的GE 0/0/0接口。
实验三:配置高级ACL(基于目标IP地址)
主机配置同上
路由器AR1配置
[AR1]acl 3000
[AR1-acl-adv-3000]rule 5 deny ip destination 1.1.1.2 0
[AR1-acl-adv-3000]rule 10000 permit ip source any destination any
[AR1-GigabitEthernet0/0/1]undo traffic-filter outbound
[AR1-GigabitEthernet0/0/0]traffic-filter inbound acl 3000
连通性测试
通过测试可以看出,四台主机都能ping通1.1.1.1,但是不能ping通1.1.1.2,实验成功。
实验四:配置高级ACL(基于协议)
路由器AR2配置
[AR2]user-interface vty 0 4 \\进入用户VTY 0 4接口
[AR2-ui-vty0-4]authentication-mode password \\修改认证模式为密码方式
[AR2-ui-vty0-4]set authentication password cipher 123456 \\设置密文密码123456
[AR2-ui-vty0-4]user privilege level 15 \\配置用户权限等级为15
[AR2-ui-vty0-4]protocol inbound telnet \\开启telnet方式登录
[AR2]acl 3100 \\创建ACL编号3100
[AR2-acl-adv-3100]rule 5 deny icmp \\拒绝ICMP流量
[AR2-acl-adv-3100]rule 20 permit tcp \\允许TCP流量
[AR2-GigabitEthernet0/0/0]traffic-filter inbound acl 3100 \\在接口GE 0/0/0的入方向应用ACL3100规则
在路由器AR1上测试效果
测试发现ping(ICMP)不通,但是telnet(TCP)没问题,实验成功。
三 通配符掩码(Wildcard)
通配符掩码是一个32比特长度的数值,用于指示IP地址中,哪些比特位需要严格匹配,哪些比特位无需匹配,用于匹配多个特定的IP地址、或者一段连续的IP地址。
通配符掩码通常采用类似网络掩码的点分十进制形式表示,但是含义却与网络掩码完全不同。
匹配规则:
“0”表示“严格匹配”;“1”表示“任意”
严格匹配:意思是对应的IP地址中的这一位不发生变化。
任意:意思是对应的IP地址中的这一位既可以是0也可以是1。
举例一:匹配两个地址
192.168.1.5 0.0.0.1
首先将IP地址和通配符掩码转换为二进制
11000000 | 10101000 | 00000001 | 00000101 |
00000000 | 00000000 | 00000000 | 00000001 |
分析:通配符掩码的前面31位都是0,那么IP地址对应的前面31位都不可以发生变化,而最后位是1,那么IP地址中的最后位既可以是0,也可以是1。计算后,它匹配的是192.168.1.4和192.168.1.5这2个地址。
举例二:匹配多个地址
192.168.1.5 0.0.0.3
11000000 | 10101000 | 00000001 | 00000101 |
00000000 | 00000000 | 00000000 | 00000011 |
分析:通配符掩码的前面30位都是0,那么IP地址对应的前面30位都不可以发生变化,而最后2位是1,那么IP地址中的最2位既可以是0,也可以是1。计算后,它匹配的是192.168.1.4 --- 192.168.1.7这4个地址。
举例三:匹配整个网段
192.168.1.5 0.0.0.255
11000000 | 10101000 | 00000001 | 00000101 |
00000000 | 00000000 | 00000000 | 11111111 |
分析:通配符掩码的前面24位都是0,那么IP地址对应的前面24位都不可以发生变化,而最后8位是1,那么IP地址中的最8位既可以是0,也可以是1。计算后,它匹配的是192.168.1.0 --- 192.168.1.255,也就是192.168.1.0/24这个网段。
举例四:匹配多个不连续的地址
192.168.1.5 0.0.0.254
11000000 | 10101000 | 00000001 | 00000101 |
00000000 | 00000000 | 00000000 | 11111110 |
分析:通配符掩码的前面24位和第32位都是0,那么IP地址对应的前面24位和第32位都不可以发生变化,而第25位到31是1,那么IP地址中的第25位到31既可以是0,也可以是1。计算后,它匹配的是192.168.1.1、192.168.1.3、192.168.1.5、192.168.1.7、192.168.1.9、192.168.1.11~~~~~~,也就是192.168.1.0/24这个网段中所有的奇数。