访问控制列表(Access Control List,简称ACL)是根据报文字段对报文进行过滤的一种安全技术。访问控制列表通过过滤报文达到流量控制、攻击防范以及用户接入控制等功能,在现实中应用广泛。ACL根据功能的不同分为标准ACL和扩展ACL。标准ACL只能过滤报文的源IP地址;扩展ACL可以过滤源IP、目的IP、协议类型、端口号等。ACL的配置主要分为两个步骤:(1)根据需求编写ACL;(2)将ACL应用到路由器接口的某个方向。本篇主要介绍各种常用ACL的编写与应用。
为了更安全的公司网络环境,可以使用ACL提供的基本通信流量过滤能力来实现。
常用的流量过滤器
①集成路由器内置的防火墙
②专用的安全设备
③服务器
企业路由器能够识别有害流量并阻止它访问和破坏网络,几乎所有的路由器都可以根据数据包的源IP地址和目的IP地址来过滤流量,它还可以根据特定的应用和协议来过滤流量,例如TCP,HTTP,FTP,和Telnet
访问控制列表是应用在路由器接口的指令列表,这些指令列表用来告诉路由器哪些数据包可以接收、哪些数据包需要拒绝。
访问控制是网络安全防范和保护的主要策略,它的主要任务是保证网络资源不被非法使用和访问。它是保证网络安全最重要的核心策略之一。访问控制涉及的技术也比较广,包括入网访问控制、网络权限控制、目录级控制以及属性控制等多种手段。
访问控制列表(Access Control Lists,ACL)是应用在路由器接口的指令列表。这些指令列表用来告诉路由器哪些数据包可以收、哪些数据包需要拒绝。至于数据包是被接收还是拒绝,可以由类似于源地址、目的地址、端口号等的特定指示条件来决定。
访问控制列表不但可以起到控制网络流量、流向的作用,而且在很大程度上起到保护网络设备、服务器的关键作用。作为外网进入企业内网的第一道关卡,路由器上的访问控制列表成为保护内网安全的有效手段。
根据不同的划分规则,ACL可以有不同的分类。
1.按照创建ACL时的命令方式分为数字型ACL和命名型ACL
①创建ACL时指定一个编号,称为数字型ACL。即编号为ACL功能的标识,如基本ACL为2000~2999,
高级ACL为3000~3999.
②创建ACL时指定一个名称,称为命名型ACL
2.按照ACL的功能分类,ACL可以分为:基本ACL,高级ACL,二层ACL,用户ACL,其中应用最为广泛的是基本ACL和高级ACL
ACL分类
分类 编号范围 参数
标准(基本)ACL 2000~2999 源IP地址等
扩展(高级)ACL 3000~3999 源IP地址,目的IP地址,源端口,目的端口,协议类型等
二层ACL 4000~4999 源MAC地址,目的MAC地址,以太帧协议类型等
用户ACL 6000~6031 源IP地址,目的IP地址,源端口,目的端口,协议类型等
基本原理:ACL使用包过滤技术,在路由器上读取第三层及第四层包头中的信息如源地址、目的地址、源端口、目的端口等,根据预先定义好的规则对包进行过滤,从而达到访问控制的目的。
功能:网络中的节点有资源节点和用户节点两大类,其中资源节点提供服务或数据,用户节点访问资源节点所提供的服务与数据。ACL的主要功能就是一方面保护资源节点,阻止非法用户对资源节点的访问,另一方面限制特定的用户节点所能具备的访问权限。
1.ACL的方向
ACL是一组规则的集合,它应用在路由器的某个接口,对路由器接口而言,ACL有两个方向。
①出:已经过路由器的处理,正离开路由器的数据包。
②入:已到达路由器接口的数据包,将被路由器处理,
2.ACL语句(语句太多这里做简单介绍)
一个ACL语句通常由若干条deny I permit 语句组成,每条就是该ACL的一条规则。
3.ACL步长
步长是指在交换机自动为ACL规则分配编号的时候,每个相邻规则编号之间的差值。例如,如果将步长设定为5,规则编号分配是按照0、5、10、15…这样的规律分配的。缺省情况下,步长为5。当步长改变后,ACL中的规则编号会自动重新排列。例如,原来规则编号为0、5、10、15,当通过命令把步长改为2后,则规则编号变成0、2、4、6。
当使用命令将步长恢复为缺省值后,交换机将立刻按照缺省步长调整ACL规则的编号。例如:ACL 3001,步长为2,下面有4个规则,编号为0、2、4、6。如果此时使用命令将步长恢复为缺省值,则ACL规则编号变成0、5、10、15,步长为5。
设置适当的步长,有助于用户对ACL的管理,如方便在规则之间插入新的规则。例如配置好了4个规则,规则编号为:0、5、10、15。此时如果用户希望能在第一条规则之后插入一条规则,则可以使用命令在0和5之间插入一条编号为1的规则。另外,在定义一条ACL规则的时候,用户可以不指定规则编号,这时,系统会从0开始,按照步长,自动为规则分配一个大于现有最大编号的最小编号。假设现有规则的最大编号是28,步长是5,那么系统分配给新定义的规则的编号将是30。
IPv4 ACL支持两种匹配顺序:
l 配置顺序:按照用户配置规则的先后顺序进行规则匹配。
l 自动排序:按照“深度优先”的顺序进行规则匹配。
基本IPv4 ACL的“深度优先”顺序判断原则如下
(1) 先看规则中是否带***实例,带***实例的规则优先;
(2) 再比较源IP地址范围,源IP地址范围小(反掩码中“0”位的数量多)的规则优先;
(3) 如果源IP地址范围相同,则先配置的规则优先。
高级IPv4 ACL的“深度优先”顺序判断原则如下
(1) 先看规则中是否带***实例,带***实例的规则优先;
(2) 再比较协议范围,指定了IP协议承载的协议类型的规则优先;ip协议的范围为1—255,承载在ip上的其他协议有各自的协议号。协议范围小或协议号小的优先。如承载在ip上的协议如OSPF和GRE的协议号分别为89和47,那么GRE的优先级将高于ospf,承载在ip上的其他协议都优于ip。
(3) 如果协议范围相同,则比较源IP地址范围,源IP地址范围小(反掩码中“0”位的数量多)的规则优先;
(4) 如果协议范围、源IP地址范围相同,则比较目的IP地址范围,目的IP地址范围小(反掩码中“0”位的数量多)的规则优先;
(5) 如果协议范围、源IP地址范围、目的IP地址范围相同,则比较四层端口号(TCP/UDP端口号)范围,四层端口号范围小的规则优先;
(6) 如果上述范围都相同,则先配置的规则优先。
二层ACL的“深度优先”顺序判断原则如下
(1) 先比较源MAC地址范围,源MAC地址范围小(掩码中“1”位的数量多)的规则优先;
(2) 如果源MAC地址范围相同,则比较目的MAC地址范围,目的MAC地址范围小(掩码中“1”位的数量多)的规则优先;
(3) 如果源MAC地址范围、目的MAC地址范围相同,则先配置的规则优先。
要配置标准ACL,首先在全局配置模式中执行以下命令:
Router(config)#access-list access-list-number {remark | permit | deny} protocol source source-wildcard [log]
参数说明:
其次,配置标准 ACL 之后,可以在接口模式下使用 ip access-group 命令将其关联到具体接口:
Router(config-if)#ip access-group access-list-number {in | out}
创建标准ACL的语法如下:
Router(config)#access-list access-list-number {permit|deny} source [souce-wildcard]
下面是命令参数的详细说明
access-list-number:访问控制列表号,标准ACL取值是1-99。
permit|deny:如果满足规则,则允许/拒绝通过。
source:数据包的源地址,可以是主机地址,也可以是网络地址。
source-wildcard:通配符掩码,也叫做反码,即子网掩码去反值。如:正常子网掩码255.255.255.0取反则是0.0.0.255。
删除已建立的标准ACL语法如下:
Router(config)#no access-list access-list-number
列如:创建一个ACL允许192.168.1.0网段的所有主机。
Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255
列如:创建一个ACL允许某个主机。
Router(config)#access-list 1 permit host 10.0.0.1
列如:创建一个默认ACL拒绝所有主机访问。
Router(config)#access-list 1 deny any
注意:上述中的关键字host可以指定一个主机地址,而不用写子网反码,而any可以代表所有主机。
创建扩展的ACL语法如下:
Router(config)#access-list access-list-number {permit|deny} protocol {source souce-wildcard destination destination-wildcard} [operator operan]
下面是命令参数的详细说明
access-list-number:访问控制列表号,扩展ACL取值是100-199。
permit|deny:如果满足规则,则允许/拒绝通过。
protocol:用来指定协议的类型,如IP,TCP,UDP,ICMP等。
source、destination:源和目的,分别用来标示源地址和目的地址。
souce-wildcard、destination-wildcard:子网反码,souce-wildcard是源反码,destination-wildcard是目标反码。
operator operan:lt(小于)、gt(大于)、eq(等于)、neq(不等于)一个端口号。
删除已建立的扩展ACL语法如下:
Router(config)#no access-list access-list-number
列如:允许192.168.1.0/24访问192.168.2.0/24,而拒绝其他所有主机访问。
Router(config)#access-list 101 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
Router(config)#access-list 101 deny ip any any
列如:拒绝网络192.168.1.0/24访问FTP服务器192.168.2.100/24,而允许其他主机访问。
Router(config)#access-list 102 deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.100 eq 21
Router(config)#access-list 102 permit ip any any
列如:禁止网络192.168.1.0/24中的主机ping同服务器192.168.2.200/24,而允许其它主机访问。
Router(config)#access-list 103 deny icmp 192.168.1.0 0.0.0.255 host 192.168.1.200 echo
Router(config)#access-list 103 permit ip any any
不管是标准ACL还是扩展ACL只有将创建好的ACL应用与路由器的接口上才算是有效的。语法如下:
Router(config-if)#ip access-group access-list-number {in|out}
参数解释如下:
access-list-number:创建ACL时指定的访问控制列表号
in:应用到入站接口。
out:应用出站接口。
取消接口上的ACL应用可以使用如下命令:
Router(config-if)#no ip access-group access-list-number {in|out}
可以使用show access-lists命令查看ACL配置。
注意:不管是标准ACL或者是扩展ACL,只要应用了该规则就不可以在向里面添加新的规则了,只能是删除整个ACL。这样很不方便我们管理ACL,那么我们改这么办呢?下面我们来讲解命名访问控制列表。
所谓的命名控制列表就是给控制列表取个名字,而不是想上面所述的使用访问控制列表号。我们通过命令访问控制列表可以很方便的管理ACL规则,可以随便添加和删除规则,而无需删除整个访问控制列表了。
创建命名访问控制列表的语法如下:
Router(config)#ip access-list {standard|extended} access-list-name
下面是命令参数的详细说明
standard:创建标准的命名访问控制列表。
extended:创建扩展的命名访问控制列表。
access-list-name:命名控制列表的名字,可以是任意字母和数字的组合。
标准命名ACL语法如下:
Router(config-std-nacl)#[Sequence-Number] {permit|deny} source [souce-wildcard]
Router(config-ext-nacl)#[Sequence-Number] {permit|deny} protocol {source souce-wildcard destination destination-wildcard} [operator operan]
无论是配置标准命名ACL语句还是配置扩展命名ACL语句,都有一个可选参数Sequence-Number。Sequence-Number参数表明了配置的ACL语句在命令ACL中所处的位置,默认情况下,第一条为10,第二条为20,以此类推。Sequence-Number可以很方便地将新添加的ACL语句插于到原有的ACL列表的指定位置,如果不选择Sequence-Number,默认添加到ACL列表末尾并且序列号加10。
Router(config)#no ip access-list {standard|extended} access-list-name
对于命名ACL来说,可以删除单条ACL语句,而不比删除整个ACL。并且ACL语句可以有选择的插入到列表中的某个位置,使得ACL配置更加方便灵活。
如果要删除某一ACL语句,可以使用“no Sequence-Number”或“no ACL”语句两种方式。
列如:将一条新添加的ACL加入到原有标准命名ACL的序列15的位置。内容为允许主机192.168.1.1/24访问Internet。
Router(config)#ip access-list standard test1
Router(config-std-nacl)#15 permit host 192.168.1.1
列如:创建扩展命名ACL,内容为拒绝192.168.1.0/24访问FTP服务器192.168.2.200/24,允许其他主机。
Router(config)#ip access-list extended test2
Router(config-ext-nacl)#deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.200 eq 21
Router(config-ext-nacl)#permit ip any any
Router(config-if)#ip access-group aaccess-list-name {in|out}
取消命名ACL的应用语法如下:
Router(config-if)#no ip access-group aaccess-list-name {in|out}
1.全网互通
2.用ACL标准列表禁止v1an1o和v1an20通信
3.用ACL扩展列表禁止AR1访问ftp服务器
配置SW1
[sw1-Ethernet0/0/1]v b 10 20
[sw1-Ethernet0/0/1]port link-type access
[sw1-Ethernet0/0/1]port default vlan 10
[sw1-Ethernet0/0/1]int e 0/0/2
[sw1-Ethernet0/0/2]port link-type access
[sw1-Ethernet0/0/2]port default vlan 20
[sw1-Ethernet0/0/2]int e 0/0/3
[sw1-Ethernet0/0/3]port link-type access
[sw1-Ethernet0/0/3]port default vlan 10
[sw1-Ethernet0/0/3]int e 0/0/4
[sw1-Ethernet0/0/4]port link-type access
[sw1-Ethernet0/0/4]port default vlan 20
[sw1-Ethernet0/0/4]int g 0/0/1
[sw1-GigabitEthernet0/0/1]port link-type trunk
[sw1-GigabitEthernet0/0/1]port trunk allow-pass vlan all
配置R1
<Huawei>sys
<Huawei>system-view
Enter system view, return user view with Ctrl+Z.
[Huawei]sys r1
[r1]int g 0/0/0
[r1-GigabitEthernet0/0/0]un sh
Info: Interface GigabitEthernet0/0/0 is not shutdown.
[r1-GigabitEthernet0/0/0]q
[r1]int g 0/0/0.1
[r1-GigabitEthernet0/0/0.1]ip add 192.168.10.1 24
[r1-GigabitEthernet0/0/0.1]dot1q termination vid 10
[r1-GigabitEthernet0/0/0.1]arp broadcast enable
[r1-GigabitEthernet0/0/0.1]int g 0/0/0.2
[r1-GigabitEthernet0/0/0.2]ip add 192.168.20.1 24
[r1-GigabitEthernet0/0/0.2]dot1q termination vid 20
[r1-GigabitEthernet0/0/0.2]arp broadcast enable
[r1-GigabitEthernet0/0/0.2]int g 0/0/1
[r1-GigabitEthernet0/0/1]ip add 12.1.1.1 24
[r1-GigabitEthernet0/0/1]un sh
Info: Interface GigabitEthernet0/0/1 is not shutdown.
[r1-GigabitEthernet0/0/1]
[r1]ip route-static 0.0.0.0 0.0.0.0 12.1.1.2
[r1]
配置R2
[Huawei]sys r2
[r2]int g 0/0/0
[r2-GigabitEthernet0/0/0]ip add 12.1.1.2 24
[r2-GigabitEthernet0/0/0]int g 0/0/1
[r2-GigabitEthernet0/0/1]ip add 202.10.100.1 24
[r2-GigabitEthernet0/0/1]
[r2-GigabitEthernet0/0/1]un sh
Info: Interface GigabitEthernet0/0/1 is not shutdown.
[r2-GigabitEthernet0/0/1]q
[r2] ip route-static 192.168.20.1 24 12.1.1.1
[r2] ip route-static 192.168.10.1 24 12.1.1.1
[r2]dis ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 12 Routes : 12
Destination/Mask Proto Pre Cost Flags NextHop Interface
12.1.1.0/24 Direct 0 0 D 12.1.1.2 GigabitEthernet
0/0/0
12.1.1.2/32 Direct 0 0 D 127.0.0.1 GigabitEthernet
0/0/0
12.1.1.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet
0/0/0
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
192.168.10.0/24 Static 60 0 RD 12.1.1.1 GigabitEthernet
0/0/0
192.168.20.0/24 Static 60 0 RD 12.1.1.1 GigabitEthernet
0/0/0
202.10.100.0/24 Direct 0 0 D 202.10.100.1 GigabitEthernet
0/0/1
202.10.100.1/32 Direct 0 0 D 127.0.0.1 GigabitEthernet
0/0/1
202.10.100.255/32 Direct 0 0 D 127.0.0.1 GigabitEthernet
0/0/1
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
[r2]
下面用ACL标准列表禁止vlan10和vlan20通信
配置R1
配置ACL2000
<r1>sys
Enter system view, return user view with Ctrl+Z.
[r1]acl 2000
[r1-acl-basic-2000]rule deny source 192.168.10.0 0.0.0.255
[r1-acl-basic-2000]rule permit source any
[r1-acl-basic-2000]int g 0/0/0.2
[r1-GigabitEthernet0/0/0.2]traffic-filter outbound acl 2000
[r1-GigabitEthernet0/0/0.2]q
[r1]display acl 2000
Basic ACL 2000, 2 rules
Acl's step is 5
rule 5 deny source 192.168.10.0 0.0.0.255
rule 10 permit
下面.用ACL扩展列表禁止AR1访问ftp服务器。
注意: --扩展ACL应该放在靠近源的地方。
undo traffic-filter inbound 取消接口定义的策略
[r2]
配置ACL3001
[r2]acl 3001
[r2-acl-adv-3001]rule deny tcp source 12.1.1.1 0 destination 202.10.100.100 0.0.
0.0 destination-port eq 21
[r2-acl-adv-3001]rule deny tcp source 12.1.1.1 0 destination 202.10.100.100 0.0.
0.0 destination-port eq 20
[r2-acl-adv-3001]rule permit ip source any destination any
[r2-acl-adv-3001]q
[r2]int g 0/0/0
[r2-GigabitEthernet0/0/0]traffic-filter inbound acl 3001
[r2-GigabitEthernet0/0/0]q