20-ACL操作
本章节下载 (249.64 KB)
目 录
ACL(Access Control List,访问控制列表)主要用来实现流识别功能。网络设备为了过滤数据包,需要配置一系列的匹配规则,以识别需要过滤的报文。在识别出特定的报文之后,才能根据预先设定的策略允许或禁止相应的数据包通过。
ACL通过一系列的匹配条件对数据包进行分类,这些条件可以是数据包的源地址、目的地址、端口号等。
由ACL定义的数据包匹配规则,可以被其它需要对流量进行区分的功能引用,如QoS中流分类规则的定义。
根据应用目的,可将ACL分为下面几种:
l 基本ACL:只根据三层源IP地址制定规则。
l 高级ACL:根据数据包的源IP地址信息、目的IP地址信息、IP承载的协议类型、协议特性等三、四层信息制定规则。
l 二层ACL:根据源MAC地址、目的MAC地址、VLAN优先级、二层协议类型等二层信息制定规则。
l 用户自定义ACL:以数据包的头部为基准,指定从第几个字节开始进行“与”操作,将从报文提取出来的字符串和用户定义的字符串进行比较,找到匹配的报文。
交换机使用ACL来对由软件处理的报文进行过滤和流分类。此时ACL规则的匹配顺序有两种:config(指定匹配该规则时按用户的配置顺序)和auto(指定匹配该规则时系统自动排序,即按“深度优先”的顺序)。这种情况下用户可以在定义ACL的时候指定一条ACL中多个规则的匹配顺序。用户一旦指定某一条ACL的匹配顺序,就不能再更改该顺序。只有把该列表中所有的规则全部删除后,才能重新指定其匹配顺序。
ACL被软件引用的情况包括:路由策略引用ACL、对登录用户进行控制时引用ACL等。
ACL可能会包含多个规则,而每个规则都指定不同的报文范围。这样,在匹配报文时就会出现匹配顺序的问题。
ACL支持两种匹配顺序:
l 配置顺序:根据配置顺序匹配ACL规则。
l 自动排序:根据“深度优先”规则匹配ACL规则。
深度优先顺序的判断原则如下:
(1) 先比较规则的协议范围。IP协议的范围为1~255,其他协议的范围就是自己的协议号;协议范围小的优先;
(2) 再比较源IP地址范围。源IP地址范围小(掩码长)的优先;
(3) 然后比较目的IP地址范围。目的IP地址范围小(掩码长)的优先;
(4) 最后比较四层端口号(TCP/UDP端口号)范围。四层端口号范围小的优先;
如果规则A与规则B按照原有匹配顺序进行配置时,协议范围、源IP地址范围、目的IP地址范围、四层端口号范围完全相同,并且其它的元素个数相同,将按照加权规则进行排序。加权规则如下:
l 设备为每个元素设定一个固定的权值,最终的匹配顺序由各个元素的权值和元素取值来决定。各个元素自身的权值从大到小排列:DSCP、ToS、ICMP、established、VPN-instance、precedence、fragment。
l 设备以一个固定权值依次减去规则各个元素自身的权值,剩余权值越小的规则越优先。
l 如果各个规则中元素个数、元素种类完全相同,则这些元素取值的累加和越小越优先。
基于时间段的ACL使用户可以区分时间段对报文进行ACL控制。
ACL中的每条规则都可选择一个时间段。如果规则引用的时间段未配置,则系统给出提示信息,并允许这样的规则创建成功。但是规则不能立即生效,直到用户配置了引用的时间段,并且系统时间在指定时间段范围内才能生效。如果用户手工删除ACL规则引用的时间段,则在ACL规则定时器刷新后,该规则将失效。
交换机支持的ACL如下:
l 基本ACL
l 高级ACL
l 二层ACL
l 用户自定义ACL
在同一个名字下可以配置多个时间段,这些时间段之间是“或”的关系。
对时间段的配置有如下内容:配置周期时间段和绝对时间段。配置周期时间段采用的是每周的周几的形式,配置绝对时间段采用从起始时间到结束时间的形式。
配置步骤 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建一个时间段 |
time-range time-name { start-time to end-time days-of-the-week [ from start-time start-date ] [ to end-time end-date ] | from start-time start-date [ to end-time end-date ] | to end-time end-date } |
必选 |
显示时间段 |
display time-range { all | time-name } |
可选 display命令可以在任意视图下执行 |
如果一个时间段只定义了周期时间段,则只有在该周期时间段内,该时间段才进入激活状态。
如果一个时间段只定义了绝对时间段,则只有在该绝对时间段内,该时间段才进入激活状态。
如果一个时间段同时定义了绝对时间段和周期时间段,则只有同时满足绝对时间段和周期时间段的定义时,该时间段才进入激活状态。例如,一个时间段定义了绝对时间段:从2004年1月1日0点0分到2004年12月31日23点59分,同时定义了周期时间段:每周三的12:00到14:00。该时间段只有在2004年内每周三的12:00到14:00才进入激活状态。
如果不配置开始日期,时间段就是从当前时间起到结束日期为止。
如果不配置结束日期,时间段就是从配置生效之日起到系统可以表示的最大时间为止。
# 配置时间段,取值为周一到周五每天8:00到18:00。
<H3C> system-view
[H3C] time-range test 8:00 to 18:00 working-day
[H3C] display time-range test
Current time is 13:27:32 4/16/2005 Saturday
Time-range : test ( Inactive )
08:00 to 18:00 working-day
基本ACL只根据三层源IP制定规则,对数据包进行相应的分析处理。
基本ACL的序号取值范围为2000~2999。
如果要配置带有时间段参数的规则,则需要定义相应的时间段。定义时间段的配置请参见1.2 配置时间段。
确定了规则中源IP地址信息的取值。
配置步骤 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建或进入基本ACL视图 |
acl number acl-number [ match-order { config | auto } ] |
缺省情况下匹配顺序为config |
定义ACL规则 |
rule [ rule-id ] { permit | deny } [ fragment | source { sour-addr sour-wildcard | any } | time-range time-name ]* |
必选 |
定义ACL的描述信息 |
description text |
可选 |
显示ACL信息 |
display acl { all | acl-number } |
可选 display命令可以在任意视图下执行 |
对于在定义ACL规则时指定编号的情况:
l 如果指定编号对应的规则已经存在,用户将编辑该规则,规则中编辑后的部分将覆盖原来的内容,未被编辑的部分保持不变;
l 如果指定编号对应的规则不存在,用户将创建并定义一个新的规则。
l 编辑后或新创建的规则不能和已经存在的规则内容完全相同,否则会导致编辑或创建不成功,系统会提示该规则已经存在。
在定义ACL规则时如果不指定编号,用户将创建并定义一个新规则,设备将自动为这个规则分配一个编号。
# 配置一个ACL 2000,禁止源地址为1.1.1.1的报文通过。
<H3C> system-view
[H3C] acl number 2000
[H3C-acl-basic-2000] rule deny source 1.1.1.1 0
[H3C-acl-basic-2000] display acl 2000
Basic ACL 2000, 1 rule
Acl's step is 1
rule 0 deny source 1.1.1.1 0
高级ACL可以使用数据包的源地址信息、目的地址信息、IP承载的协议类型、针对协议的特性,例如TCP或UDP的源端口、目的端口,TCP标记,ICMP协议的类型、code等内容定义规则。
高级ACL序号取值范围3000~3999。
高级ACL支持对三种报文优先级的分析处理:ToS(Type Of Service,服务类型)优先级、IP优先级和DSCP(Differentiated Services Codepoint Priority,差分服务编码点优先级)。
用户可以利用高级ACL定义比基本ACL更准确、更丰富、更灵活的规则。
如果要配置带有时间段参数的规则,则需要定义相应的时间段。定义时间段的配置请参见1.2 配置时间段。
确定了规则中源IP地址信息、目的IP信息、IP承载的协议类型、针对协议的特性等参数的取值。
配置步骤 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建或进入高级ACL视图 |
acl number acl-number [ match-order { config | auto } ] |
缺省情况下匹配顺序为config |
定义ACL规则 |
rule [ rule-id ] { permit | deny } rule-string |
必选 |
定义ACL规则的注释字符串 |
rule rule-id comment text |
可选 |
定义ACL的描述信息 |
description text |
可选 |
显示ACL信息 |
display acl { all | acl-number } |
可选 display命令可以在任意视图下执行 |
rule-string:ACL规则信息,可以由表1-4中的参数组合而成,具体参数说明如表1-4所示。ACL规则信息中必须首先配置protocol参数,然后才能配置其他参数。
表1-4 ACL规则信息
参数 |
类别 |
作用 |
说明 |
protocol |
协议类型 |
IP承载的协议类型 |
用数字表示时取值范围为1~255 用名字表示时,可以选取GRE、ICMP、IGMP、IP、IPinIP、OSPF、TCP、UDP |
source { sour-addr sour-wildcard | any } |
源地址信息 |
指定ACL规则的源地址信息 |
sour-addr sour-wildcard用来确定数据包的源地址,点分十进制表示。sour-wildcard可以为0,表示主机地址 any代表任意源地址 |
destination { dest-addr dest-wildcard | any } |
目的地址信息 |
指定ACL规则的目的地址信息 |
dest-addr dest-wildcard用来确定数据包的目的地址,点分十进制表示。dest-wildcard可以为0,表示主机地址 any代表任意目的地址 |
precedence precedence |
报文优先级 |
IP优先级 |
取值范围0~7 |
tos tos |
报文优先级 |
ToS优先级 |
取值范围0~15 |
dscp dscp |
报文优先级 |
DSCP优先级 |
取值范围0~63 |
fragment |
分片信息 |
定义规则仅对非首片分片报文有效 |
- |
time-range time-name |
时间段信息 |
指定规则生效的时间段 |
- |
如果选择dscp关键字,除了直接输入数值0~63外,用户也可输入如表1-5所示的关键字。
表1-5 DSCP值说明
关键字 |
DSCP值(十进制) |
DSCP值(二进制) |
ef |
46 |
101110 |
af11 |
10 |
001010 |
af12 |
12 |
001100 |
af13 |
14 |
001110 |
af21 |
18 |
010010 |
af22 |
20 |
010100 |
af23 |
22 |
010110 |
af31 |
26 |
011010 |
af32 |
28 |
011100 |
af33 |
30 |
011110 |
af41 |
34 |
100010 |
af42 |
36 |
100100 |
af43 |
38 |
100110 |
cs1 |
8 |
001000 |
cs2 |
16 |
010000 |
cs3 |
24 |
011000 |
cs4 |
32 |
100000 |
cs5 |
40 |
101000 |
cs6 |
48 |
110000 |
cs7 |
56 |
111000 |
be (default) |
0 |
000000 |
如果选择precedence关键字,除了直接输入数值0~7外,用户也可输入如表1-6所示的关键字。
关键字 |
IP Precedence(十进制) |
IP Precedence(二进制) |
routine |
0 |
000 |
priority |
1 |
001 |
immediate |
2 |
010 |
flash |
3 |
011 |
flash-override |
4 |
100 |
critical |
5 |
101 |
internet |
6 |
110 |
network |
7 |
111 |
如果选择tos关键字,除了直接输入数值0~15外,用户也可输入如表1-7所示的关键字。
表1-7 ToS值说明
关键字 |
ToS(十进制) |
ToS(二进制) |
normal |
0 |
0000 |
min-monetary-cost |
1 |
0001 |
max-reliability |
2 |
0010 |
max-throughput |
4 |
0100 |
min-delay |
8 |
1000 |
当协议类型选择为TCP或者UDP时,用户还可以定义如下信息。
表1-8 TCP/UDP特有的ACL规则信息
参数 |
类别 |
作用 |
说明 |
source-port operator port1 [ port2 ] |
源端口 |
定义UDP/TCP报文的源端口信息 |
operator为操作符,取值可以为lt(小于)、gt(大于)、eq(等于)、neq(不等于)或者range(在范围内)。只有操作符range需要两个端口号做操作数,其他的只需要一个端口号做操作数 port1、port2:TCP或UDP的端口号,用名字或数字表示,数字的取值范围为0~65535 |
destination-port operator port1 [ port2 ] |
目的端口 |
定义UDP/TCP报文的目的端口信息 |
|
established |
TCP连接建立标识 |
定义规则匹配带有ack或者rst标志的TCP连接报文 |
TCP协议特有的参数 |
当协议类型选择为ICMP时,用户还可以定义如下信息。
表1-9 ICMP特有的ACL规则信息
参数 |
类别 |
作用 |
说明 |
icmp-type icmp-type icmp-code |
ICMP报文的类型和消息码信息 |
指定规则中ICMP报文的类型和消息码信息 |
icmp-type:ICMP消息类型,取值为0~255 icmp-code:ICMP的消息码,取值为0~255 |
当协议类型选择为ICMP时,用户也可以直接在icmp-type参数后输入ICMP的消息名称。在几种常见的ICMP消息如表1-10所示。
名称 |
ICMP TYPE |
ICMP CODE |
echo |
Type=8 |
Code=0 |
echo-reply |
Type=0 |
Code=0 |
fragmentneed-DFset |
Type=3 |
Code=4 |
host-redirect |
Type=5 |
Code=1 |
host-tos-redirect |
Type=5 |
Code=3 |
host-unreachable |
Type=3 |
Code=1 |
information-reply |
Type=16 |
Code=0 |
information-request |
Type=15 |
Code=0 |
net-redirect |
Type=5 |
Code=0 |
net-tos-redirect |
Type=5 |
Code=2 |
net-unreachable |
Type=3 |
Code=0 |
parameter-problem |
Type=12 |
Code=0 |
port-unreachable |
Type=3 |
Code=3 |
protocol-unreachable |
Type=3 |
Code=2 |
reassembly-timeout |
Type=11 |
Code=1 |
source-quench |
Type=4 |
Code=0 |
source-route-failed |
Type=3 |
Code=5 |
timestamp-reply |
Type=14 |
Code=0 |
timestamp-request |
Type=13 |
Code=0 |
ttl-exceeded |
Type=11 |
Code=0 |
对于在定义ACL规则时指定编号的情况:
l 如果指定编号对应的规则已经存在,用户将编辑该规则,规则中编辑后的部分将覆盖原来的内容,未被编辑的部分保持不变;
l 如果指定编号对应的规则不存在,用户将创建并定义一个新的规则。
l 编辑后或新创建的规则不能和已经存在的规则内容完全相同,否则会导致编辑或创建不成功,系统会提示该规则已经存在。
在定义ACL规则时如果不指定编号,用户将创建并定义一个新规则,设备将自动为这个规则分配一个编号。
# 配置ACL 3000,允许从129.9.0.0网段的主机向202.38.160.0网段的主机发送的端口号为80的报文通过。
<H3C>system-view
[H3C] acl number 3000
[H3C-acl-adv-3000] rule permit tcp source 129.9.0.0 0.0.255.255 destination 202.38.160.0 0.0.0.255 destination-port eq 80
[H3C-acl-adv-3000] display acl 3000
Advanced ACL 3000, 1 rule
Acl's step is 1
rule 0 permit tcp source 129.9.0.0 0.0.255.255 destination 202.38.160.0 0.0.0.255 destination-port eq www
二层ACL根据源MAC地址、目的MAC地址、VLAN优先级、二层协议类型等二层信息制定规则,对数据进行相应处理。
二层ACL的序号取值范围为4000~4999。
如果要配置带有时间段参数的规则,则需要定义相应的时间段。定义时间段的配置请参见1.2 配置时间段。
确定了规则中源MAC地址、目的MAC地址、VLAN优先级、二层协议类型等参数的取值。
配置步骤 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建或进入二层ACL视图 |
acl number acl-number |
必选 |
定义ACL规则 |
rule [ rule-id ] { permit | deny } rule-string |
必选 |
定义ACL规则的注释字符串 |
rule rule-id comment text |
可选 |
定义ACL的描述信息 |
description text |
可选 |
显示ACL信息 |
display acl { all | acl-number } |
可选 display命令可以在任意视图下执行 |
rule-string:ACL规则信息,可以由表1-12中的参数组合而成,具体参数说明如表1-12所示。
表1-12 ACL规则信息
参数 |
类别 |
作用 |
说明 |
format-type |
链路层封装类型 |
定义规则中的链路层封装类型 |
format-type:取值可以为802.3/802.2、802.3、ether_ii、snap |
lsap lsap-code lsap-wildcard |
lsap字段 |
定义规则中的lsap字段 |
lsap-code:数据帧的封装格式,16比特的十六进制数 lsap-wildcard:Lsap值的掩码, 16比特的十六进制数,用于指定屏蔽位 |
source { source-addr source-mask | vlan-id }* |
源MAC信息 |
定义规则的源MAC地址范围 |
source-addr:源MAC地址,格式为H-H-H source-mask:源MAC地址的掩码,格式为H-H-H vlan-id:源VLAN ID,取值范围1~4094 |
dest dest-addr dest-mask |
目的MAC信息 |
定义规则的目的MAC地址范围 |
dest-addr:目的MAC地址,格式为H-H-H dest-mask:目的MAC地址的掩码,格式为H-H-H |
cos vlan-pri |
优先级 |
定义规则的802.1p优先级 |
vlan-pri:取值范围为0~7 |
time-range time-name |
时间段信息 |
指定规则生效的时间段 |
time-name:指定规则生效的时间段名称,字符串格式,长度为1~32 |
type protocol-type protocol-mask |
以太网帧的协议类型 |
定义以太网帧的协议类型 |
protocol-type:协议类型 protocol-mask:协议类型掩码 |
如果选择cos关键字,除了直接输入数值0~7外,用户也可输入如表1-13所示的关键字。
表1-13 CoS值说明
关键字 |
CoS(十进制) |
CoS(二进制) |
best-effort |
0 |
000 |
background |
1 |
001 |
spare |
2 |
010 |
excellent-effort |
3 |
011 |
controlled-load |
4 |
100 |
video |
5 |
101 |
voice |
6 |
110 |
network-management |
7 |
111 |
对于在定义ACL规则时指定编号的情况:
l 如果指定编号对应的规则已经存在,用户将编辑该规则,规则中编辑后的部分将覆盖原来的内容,未被编辑的部分保持不变;
l 如果指定编号对应的规则不存在,用户将创建并定义一个新的规则。
l 编辑后或新创建的规则不能和已经存在的规则内容完全相同,否则会导致编辑或创建不成功,系统会提示该规则已经存在。
在定义ACL规则时如果不指定编号,用户将创建并定义一个新规则,设备将自动为这个规则分配一个编号。
# 配置ACL 4000,禁止从MAC地址000d-88f5-97ed发送到MAC地址011-4301-991e且802.1p优先级为3的报文通过。
<H3C> system-view
[H3C] acl number 4000
[H3C-acl-ethernetframe-4000] rule deny cos 3 source 000d-88f5-97ed ffff-ffff-ffff dest 0011-4301-991e ffff-ffff-ffff
[H3C-acl-ethernetframe-4000] display acl 4000
Ethernet frame ACL 4000, 1 rule
Acl's step is 1
rule 0 deny cos excellent-effort source 000d-88f5-97ed ffff-ffff-ffff dest 0011-4301-991e ffff-ffff-ffff
用户自定义ACL以数据包的头部为基准,指定从第几个字节开始进行“与”操作,将从报文提取出来的字符串和用户定义的字符串进行比较,找到匹配的报文,然后进行相应的处理。
用户自定义ACL的序号取值范围为5000~5999。
如果要配置带有时间段参数的规则,则需要定义相应的时间段。定义时间段的配置请参见1.2 配置时间段。
配置步骤 |
命令 |
说明 |
进入系统视图 |
system-view |
- |
创建或进入用户自定义ACL视图 |
acl number acl-number |
必选 |
定义ACL规则 |
rule [ rule-id ] { permit | deny } [ rule-string rule-mask offset ] &<1-8> [ time-range name ] |
必选 |
定义ACL的描述信息 |
description text |
可选 |
定义ACL规则的注释字符串 |
rule rule-id comment text |
可选 |
显示ACL信息 |
display acl { all | acl-number } |
可选 display命令可以在任意视图下执行 |
& 说明:
用户在设置偏移量offset的数值时一定要考虑如下情况:
l 交换机内部处理的报文都带有VLAN tag,1层VLAN tag占4个字节。
l 如果没有使能VLAN VPN功能,交换机内部处理的报文都带有1层VLAN tag。
l 如果端口上使能了VLAN VPN功能,交换机会给该端口接收的报文再打1层VLAN tag,无论报文原来是否带有VLAN tag,报文都将具有2层VLAN tag。
对于在定义ACL规则时指定编号的情况:
l 如果指定编号对应的规则已经存在,用户将编辑该规则,规则中编辑后的部分将覆盖原来的内容,未被编辑的部分保持不变;
l 如果指定编号对应的规则不存在,用户将创建并定义一个新的规则。
l 编辑后或新创建的规则不能和已经存在的规则内容完全相同,否则会导致编辑或创建不成功,系统会提示该规则已经存在。
在定义ACL规则时如果不指定编号,用户将创建并定义一个新规则,设备将自动为这个规则分配一个编号。
# 配置ACL 5001,禁止所有的TCP报文通过。
<H3C> system-view
[H3C] time-range t1 18:00 to 23:00 sat
[H3C] acl number 5001
[H3C-acl-user-5001] rule 25 deny 06 ff 35 time-range t1
[H3C-acl-user-5001] display acl 5001
User defined ACL 5001, 1 rules
Acl's step is 1
rule 25 deny 06 ff 35 time-range t1 (Inactive)
在完成上述配置后,在任意视图下执行display命令可以显示ACL配置后的运行情况,通过查看显示信息验证配置的效果。
表1-15 ACL的显示
操作 |
命令 |
说明 |
显示配置的ACL规则 |
display acl { all | acl-number } |
可选 display命令可以在任意视图下执行 |
显示时间段 |
display time-range { all | time-name } |
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!