访问控制列表ACL的配置与应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问控制列表ACL的配置与应用相关的知识,希望对你有一定的参考价值。

   访问控制列表(Access Control List,ACL)是应用在路由器接口的指令列表(即规则)。这些指令列表用来告诉路由器,哪些数据包可以接收,哪些数据包需要拒绝。其基本原理如下:ACL使用包过滤技术,在路由器上读取OSI七层模型的第三层及第四层包头中的信息,如源地址、目的地址、源端口、目的端口等,根据预先定义好的规则,对包进行过滤,从而达到访问控制的目的。

   ACL通过在路由器接口处控制数据包的转发还是丢弃,从而过滤通信流量。路由器根据ACL中指定的条件来检测通过路由器的数据包,从而决定是转发还是丢弃数据包。


ACL的类型

   ACL可分为以下三种类型:

标准ACL:检查数据包的源地址。其结果基于源网络/子网/主机IP地址,来决定允许还是拒绝转发数据包。它使用1-99之间的数字作为表号。

扩展ACL:对数据包的源地址与目标地址均进行检查。它也能检查特定的协议、端口号以及其他参数。它使用100-199之间的数字作为表号。

命名ACL:命名访问控制列表允许在标准和扩展访问控制列表中使用名称代替表号。具有灵活性,可以单独添加、删除单条ACL语句,而不必删除整个ACL。


ACL的工作原理

   ACL是一组规则的集合,它应用在路由器的某个接口上。对路由器接口而言,访问控制列表有两个方向:

出:已经过路由器的处理,正离开路由器接口的数据包。

入:已到达路由器接口的数据包,将被路由器处理。

   如果对接口应用了访问控制列表,也就是说该接口应用了一组规则,那么路由器将对数据包应用该组规则进行顺序检查。

(1)如果匹配第1条规则,则不再往下检查,路由器将决定该数据包允许通过或拒绝通过。

(2)如果不匹配第1条规则,则依次往下检查,直到有任何一条规则匹配,路由器将决定该数据包允许通过或拒绝通过。

(3)如果最后没有任何一条规则匹配,则路由器根据默认的规则将丢弃该数据包。

   由此可见,数据包要么被允许,要么被拒绝。

   技术分享

   根据以上的检查规则可知,在ACL中,各规则的放置顺序是很重要的。一旦找到了某一匹配规则,就结束比较过程,不再检查以后的其他规则。




标准ACL的配置

1. 创建ACL

创建标准ACL的命令语法如下:

 Router(config)# access-list access-list-number {permit | deny} source [source-wildcard] 
 
 access-list-number:访问控制列表表号,对于标准ACL来说,该表号是1-99中的一个数字
 permit|deny:如果满足测试条件,则允许/拒绝该通信流量
 source:数据包的源地址,可以是主机地址,也可以是网络地址。
 source-wildcard:通配符掩码,也叫做反码。在用二进制0和1表示时,如果某位为1,表明这一位不需要进行匹配操作,如果为0,则表明这一位需要严格匹配

例如:允许来自网络192.168.1.0/24和主机192.168.2.2的流量通过,标准ACL命令如下

  Router(config)# access-list 1 permit 192.168.1.0  0.0.0.255   
  Router(config)# access-list 1 permit 192.168.2.2  0.0.0.0

   192.168.1.0/24的子网掩码是255.255.255.0,那么其反码可以通过255.255.255.255减去255.2553.255.0得到0.0.0.255。

   同样,主机192.168.2.2的子网掩码是255.255.255.255,那么其反码可以通过255.255.255.255减去255.255.255.255得到0.0.0.0。


(1)隐含的拒绝语句

  每一个ACL都有一条隐含的拒绝语句,拒绝所有流量,语句如下:

  Router(config)# access-list 1 deny 0.0.0.0 255.255.255.255    

(2)关键字host、any

  在上面的例子中,192.168.2.2 0.0.0.0可以用“host 192.168.2.2”来表示,相应的ACL可改写为:

  Router(config)# access-list 1 permit host 192.168.1.2         

  0.0.0.0 255.255.255.255可以使用关键字“any”来表示,相应的ACL可改写为:

  Router(config)# access-list 1 deny any                        

(3)删除已建立的标准ACL

删除语法如下:

  Router(config)# no access-list access-list-number             

  对标准ACL来说,不能删除单条ACL语句,只能删除整个ACL。这意味着如果要改变一条或几条ACL语句,必须先删除整个ACL,然后再输入所要的ACL语句。


2. 将ACL应用于接口

  创建ACL后,只有将ACL应用于接口,ACL才会生效。命令语法如下

 Router(config-if)# ip access-group access-list-number {in| out}

参数in|out:用来指示该ACL是应用到入站接口(in),还是出站接口(out)。

  要在接口上取消ACL的应用,可以使用如下命令: 

 Router(config-if)# no ip access-group access-list-number {in| out}

注意:每个方向上只能有一个ACL,也就是每个接口最多只能有两个ACL:一个入方向ACL,一个出方向ACL。


3. 标准ACL的配置实例

  如图所示,要求配置标准ACL实现:禁止PC2访问PC1,而允许其他所有流量

  技术分享

  配置步骤如下:

(1)分析在哪个接口应用标准ACL

  标准ACL既可以应用在入站接口,也可以应用在出站接口,二者有何不同呢?

  路由器对进入的数据包先检查入访问控制列表,对允许传输的数据包才查询路由表,而对于外出的数据包先查询路由表,确定目标接口后才查看出访问控制列表。因此应该尽量把访问控制列表应用到入站接口,因为它比应用到出站接口效率更高:将要丢弃的数据包早路由器进行路由表查询出路之前就拒绝掉。

(2)配置全网互通(略)

(3)配置标准ACL并应用到接口上。

 Router(config)# access-list 1 deny host 192.168.2.2  
 Router(config)# access-list 1 permit any             
 Router(config)# int f0/0                   
 Router(config-if)# ip access-group 1 in



(4)查看并验证配置

  使用show access-list命令查看ACL配置

  Router# show access-lists   

验证配置

  PC2不能ping通主机PC1,但PC3可以ping通主机PC1



扩展ACL的配置

1. 创建ACL

 创建扩展ACL的命令语法如下:

 Router(config)# access-list access-list-number {permit|deny} protocol {source source-wildcard destination destination-wildcard} [operator operan]
 
 accessi-list-number:ACL表号,对于扩展ACL来说,是100-199的一个数字
 protocol:用来指定协议,如IP、TCP、UDP、ICMP等
 source、destination:源、目的,分别用来标识源地址、目的地址
 source-wildcard、destination-wildcard:反码、目的反码
 operator operan:lt(小于)、gt(大于)、eq(等于)、neq(不等于)一个端口

案例1:允许网络192.168.1.0/24访问网络192.168.2.0/24的IP流量通过,而拒绝其它任何流量

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 1.0 deny ip any any

案例2:拒绝网络192.168.1.0/24访问FTP服务器192.168.2.2/24的IP流量通过,而允许其他任何流量

Router(config)# access-list 102 deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.2 eq 21
Router(config)# access-list 102 permit ip any any

案例3:禁止网络192.168.1.0/24中的主机ping通服务器192.168.2.2/24,而允许其他任何流量

Router(config)# access-list 103 deny icmp 192.168.1.0 0.0.0.255 host 192.168.2.2 echo
Router(config)# access-list 103 permit ip any any

  

2. 将ACL应用于接口

  与标准ACL一样,只有将ACL应用于接口,ACL才生效。配置命令与标准ACL一样(略)


注意:扩展ACL和标准ACL一样,也不能删除单条ACL语句,只能删除整个ACL



3. 扩展ACL的配置实例

  如图所示,要求配置扩展ACL实现:允许PC1访问Web服务器的WWW服务,而禁止主机PC1访问WWW服务器其他任何服务;允许主机PC1访问网络192.168.2.0/24

技术分享

  配置步骤如下:

(1)分析在哪个接口应用扩展ACL

 与标准ACL一样,应尽量把ACL应用到入口。

  最好把ACL应用到路由器R1的入口处,否则会浪费R2、R3的资源。也就是说,应该把ACL应用于离地址最近的路由器上


(2)配置全网互通(略)

(3)配置扩展ACL并应用到接口上。

R1(config)# access-list 101 permit tcp host 192.168.1.1 host 192.168.3.1 eq 80
R1(config)# access-list 101 deny ip host 192.168.1.1 host 192.168.3.1
R1(config)# access-list 101 permit ip host 192.168.1.1 192.168.2.0 0.0.0.255
R1(config)# int f0/0
R1(config-if)# ip access group 101 in


(4)查看并验证配置

  使用show access-list命令查看ACL配置

  Router# show access-lists   



命名ACL的配置

1. 创建ACL

 创建命名ACL的命令语法如下:

 Router(config)# ip access-list {standard|extended} access-list-name
 
 standard|extended:决定是标准命名ACL、扩展命名ACL
 access-list-name:有字母、数字组成的字符串

(1)如果是标准命名ACL,命令语法如下:

Router(config-std-nacl)# [Sequence-Number] {permit|deny} source [source-wildcard]

(2)如果是扩展命名ACL,命令语法如下:

Router(config-ext-nacl)# [Sequence-Number] {permit|deny} source [source-wildcard destination destination-wildcard] [operator operan]
Sequence-Number:可选参数,表明配置的ACL语句在ACL中的位置,默认第一条为10,第二条20…

案例1:允许来自主机192.168.1.1/24的流量通过,而拒绝其它流量,使用标准命名ACL

Router(config)# ip access-list standard yangshufan
Router(config-std-nacl)# permit host 192.168.1.1    //默认ACL语句序列号为10
Router(config-std-nacl)# deny any                  //默认ACL语句序列号为20

  更改需求,除了192.168.1.1/24外,还允许192.168.2.1/24的流量通过

Router(config)# ip access-list standard yangshufan
Router(config-std-nacl)# 15 permit host 192.168.2.1   //配置ACL语句序列号为15

案例2:拒绝网络192.168.1.0/24访问FTP服务器192.168.2.2/24的流量通过,而允许其他任何流量,使用扩展命名ACL

Router(config)# ip access-list extended yangshufan
Router(config-ext-nacl)# deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.2 eq 21
Router(config-ext-nacl)# permit ip any any


2. 删除ACL  

  对于命名ACL,可以删除单条ACL语句,而不必删除整个ACL。并且,ACL语句可以有选择的插入到列表某个位置,是ACL配置更加灵活方便

  删除已建立的命名ACL,命名语法如下:

Router(config)# no ip access-list {standard|extended} access-list-name

  删除某一ACL语句,有两种方法:

例如:在案例1删除ACL语句“permit host 192.168.1.1”

Router(config)# ip access-list standard yangshufan
Router(config-std-nacl)# no 10

还可以采用以下命令:

Router(config)# ip access-list standard yangshufan
Router(config-std-nacl)# no permit host 192.168.1.1


2. 将ACL应用于接口

   创建命名ACL后,也必须将ACL应用于接口,ACL才生效。命令语法如下:

Router(config-if)# ip access-group access-list-name {in| out}

  要在接口上取消ACL的应用,可以使用如下命令: 

 Router(config-if)# no ip access-group access-list-name {in| out}


3. 扩展ACL的配置实例

(1)公司新建了一台服务器(IP地址:192.168.100.100),出于安全考虑,要求如下:

* 192.168.1.0/24网段中除了192.168.1.5-192.168.1.8外,其他地址都不能访问服务器

* 公司的其他网段都可以访问服务器

 配置ACL

Router(config)# ip access-list extended yangshufan
Router(config-ext-nacl)# permit ip host 192.168.1.5 host 192.168.100.100
Router(config-ext-nacl)# permit ip host 192.168.1.6 host 192.168.100.100
Router(config-ext-nacl)# permit ip host 192.168.1.7 host 192.168.100.100
Router(config-ext-nacl)# permit ip host 192.168.1.8 host 192.168.100.100
Router(config-ext-nacl)# deny ip 192.168.1.0 0.0.0.255 host 192.168.100.100
Router(config-ext-nacl)# permit any 192.168.100.100

使用show access-lists命令查看配置的ACL信息

技术分享

(2)网络运行一段时间后,由于公司人员调整,需要变更访问服务器的ACL,要求如下:

* 不允许192.168.1.6和192.168.1.8主机访问服务器

* 允许192.168.1.10主机访问服务器

 ACL变更配置:

Router(config)# ip access-list extended yangshufan
Router(config-ext-nacl)# no 20
Router(config-ext-nacl)# no 40
Router(config-ext-nacl)# 15 permit ip host 192.168.1.10 host 192.168.100.100

再次查看配置的ACL信息,结果如下:

技术分享

注意:如果不指定序列号,新添加的ACL语句被添加到列表的末尾


本文出自 “杨书凡” 博客,请务必保留此出处http://yangshufan.blog.51cto.com/13004230/1958558

以上是关于访问控制列表ACL的配置与应用的主要内容,如果未能解决你的问题,请参考以下文章

ACL标准访问控制列表

ACL的三种访问控制列表的概述及实验配置

华为 ACL访问控制列表 (高级ACL为例)

ACL访问控制列表配置实例

华为HCNA访问控制列表ACL实例配置

ACL(访问控制列表)