访问控制列表 ACL

 访问控制列表(Access Control List,ACL) 是路由器交换机接口的指令列表,用来控制端口进出的数据包。其目的是为了对某种访问进行控制。


作用

       ACL可以限制网络流量、提高网络性能。例如,ACL可以根据数据包的协议,指定数据包的优先级。

ACL提供对通信流量的控制手段。例如,ACL可以限定或简化路由更新信息的长度,从而限制通过路由器某一网段的通信流量。

         ACL是提供网络安全访问的基本手段。ACL允许主机A访问人力资源网络,而拒绝主机B访问。

         ACL可以在路由器端口处决定哪种类型的通信流量被转发或被阻塞。例如,用户可以允许E-mail通信流量被路由,拒绝所有的Telnet通信流量。 

                                                                                                                                                                                                               
3P原则!!!!

       记住 3P 原则(呵呵呵呵)你便记住了在路由器上应用 ACL 的一般规则。您可以为每种协议 (per protocol)、每个方向 (per direction)、每个接口 (per interface) 配置一个 ACL

       每种协议一个 ACL:要控制接口上的流量,必须为接口上启用的每种协议定义相应的 ACL。

       每个方向一个 ACL :一个 ACL 只能控制接口上一个方向的流量。要控制入站流量和出站流量,必须分别定义两个 ACL。

       每个接口一个 ACL :一个 ACL 只能控制一个接口(例如快速以太网0/0)上的流量。

ACL 的编写可能相当复杂而且极具挑战性。每个接口上都可以针对多种协议和各个方向进行定义。示例中的路由器有两个接口配置了 IP、AppleTalk 和 IPX。该路由器可能需要 12 个不同的 ACL — 协议数 (3) 乘以方向数 (2),再乘以端口数 (2)。

          ACL 的编写可能相当复杂而且极具挑战性。每个接口上都可以针对多种协议和各个方向进行定义。


执行过程

         一个端口执行哪条ACL,这需要按照列表中的条件语句执行顺序来判断。如果一个数据包的报头跟表中某个条件判断语句相匹配,那么后面的语句就将被忽略,不再进行检查。

数据包只有在跟第一个判断条件不匹配时,它才被交给ACL中的下一个条件判断语句进行比较。如果匹配(假设为允许发送),则不管是第一条还是最后一条语句,数据都会立即发送到目的接口。如果所有的ACL判断语句都检测完毕,仍没有匹配的语句出口,则该数据包将视为被拒绝而被丢弃。这里要注意,ACL不能对本路由器产生的数据包进行控制。

如果设备使用了TCAM,比如aute U3052交换机,那么所有的ACL是并行执行的。举例来说,如果一个端口设定了多条ACL规则,并不是逐条匹配,而是一次执行所有ACL语句。

                                                                                              ACL分类

         目前有三种主要的ACL:标准ACL扩展ACL命名ACL。其他的还有标准MAC ACL、时间控制ACL、以太协议 ACL 、IPv6 ACL等。

        标准的ACL使用 1 ~ 99 以及1300~1999之间的数字作为表号
        扩展的ACL使用 100 ~ 199以及2000~2699之间的数字作为表号。

        标准ACL可以阻止来自某一网络的所有通信流量,或者允许来自某一特定网络的所有通信流量,或者拒绝某一协议簇(比如IP)的所有通信流量。

        扩展ACL比标准ACL提供了更广泛的控制范围。例如,网络管理员如果希望做到“允许外来的Web通信流量通过,拒绝外来的FTP和Telnet等通信流量”,那么,他可以使用扩展ACL来达到目的,标准ACL不能控制这么精确。

        在标准与扩展访问控制列表中均要使用表号,而在命名访问控制列表中使用一个字母或数字组合的字符串来代替前面所使用的数字。使用命名访问控制列表可以用来删除某一条特定的控制条目,这样可以让我们在使用过程中方便地进行修改。 在使用命名访问控制列表时,要求路由器的IOS在11.2以上的版本,并且不能以同一名字命名多个ACL,不同类型的ACL也不能使用相同的名字。

        随着网络的发展和用户要求的变化,从IOS 12.0开始,思科(CISCO)路由器新增加了一种基于时间的访问列表。通过它,可以根据一天中的不同时间,或者根据一星期中的不同日期,或二者相结合来控制网络数据包的转发。这种基于时间的访问列表,就是在原来的标准访问列表和扩展访问列表中,加入有效的时间范围来更合理有效地控制网络。首先定义一个时间范围,然后在原来的各种访问列表的基础上应用它。

        基于时间访问列表的设计中,用time-range 命令来指定时间范围的名称,然后用absolute命令,或者一个或多个periodic命令来具体定义时间范围。


ACL放置位置

标准ACL要尽量靠近目的端
       
扩展ACL要尽量靠近源端

              

                                                                                                                  注意事项
     
 1.最有限制性的语句应该放在ACL语句的首行。把最有限制性的语句放在ACL语句的首行或者语句中靠近前面的位置上,把“全部允许”或者“全部拒绝”这样的语句放在末行或接近末行,可以防止出现诸如本该拒绝(放过)的数据包被放过(拒绝)的情况

2.增加:标准ACL、扩展ACL,新的表项只能被添加到ACL的末尾,这意味着不可能改变已有访问控制列表的功能。如果必须改变,只有先删除已存在的ACL,然后创建一个新ACL,将新ACL应用到相应的接口上。
       命名ACL可以在指定的位置添加新的一行。

3.删除:!!!标准ACL、扩展ACL语句不能被逐条的删除,只能一次性删除整个ACL。命名ACL可以单一删除某一行,

4.在ACL的最后,有一条隐含的“全部拒绝”的命令,所以在 ACL里一定至少有一条“允许”的语句

5.ACL只能过滤穿过路由器的数据流量,不能过滤由本路由器上发出的数据包

6.路由器选择进行以前,应用在接口进入方向in的ACL起作用。路由器选择决定以后,应用在接口离开方向out的ACL起作用

7.如果建立一个空的ACL,绑定至端口,则会允许所有流量通过。如果ACL中有一句规则,则ACL末尾会隐含一条
deny any any

 

第一部分

(1)标准访问列表

access-list   access-list-number  { permit | deny }  {source [source-wildcard] | any|host source}

                                                                                                                 源IP地址      源IP地址的通配符
access-list-number  : 1~991300~1999
{ permit | deny }:   permit、deny 、 remark
{source [source-wildcard] | any|host source}:192.168.1.0  0.0.0.255     host 192.168.0.1     any

access-list  编号 动作 源地址

access-list 1 deny host 172.17.31.222 
       access-list 1 permit any 

允许172.17.31.0/24通过,其他主机禁止 

access-list 1 permit 172.17.31.0  0.0.0.254 
          (反码255.255.255.255减去子网掩码,如172.17.31.0/24的255.255.255.255—   255.255.255.0=0.0.0.255) 
     
         禁止172.17.31.0/24通过,其他主机允许 
         access-list 1 deny 172.17.31.0  0.0.0.254 
         access-list 1 permit any


(2)扩展访问列表

access-list    access-list-number  { permit | deny }    { protocol \ protocol-keyword }                                                              { source [ source-wildcard ] | any|host source }   
                           { destination destination-wildcard } | any |
host source}     
                            [protocol-specific options]     
                           [established]
      [log]


access-list-number :100-199、2000-2699
      { permit | deny } :permit   deny    remark 
      { protocol \ protocol-keyword } : tcp   udp   ip   icmp   ……    
     
{ source [ source-wildcard ] | any|host source }  :192.168.1.0  0.0.0.255     host 192.168.0.1     any
     
{ destination destination-wildcard } | any |host source}:同上
     [protocol-specific options]:eq等于   lq小于   gq大于   范围rang 15 20
     [established] :established选项只适用于TCP,限制外部发起的TCP连接,外网只能回应内网的TCP连接,
      而不能发起对内网的TCP连接!
      [log]:将匹配的记录记载至日志。

access-list  编号 动作 协议 源地址 目的地址 端口

 

允许所有主机访问172.17.31.222的www服务
       access-list 100  permit  tcp host 172.17.31.222    any    eq www 
      允许所有主机访问172.17.31.222主机telnet(23)端口其他禁止
      access-list 100 permit  tcp  any  host 172.17.31.222    eq 23


  如果禁用了icmp包,可禁止外部的ping 消息

(3)将acl应用到端口

进入端口:interface f0/0
      绑定命令:ip access-group 
acl_number  out | in

   再一次强调,在标准ACL和扩展ACL中,如果执行no 
         access-list acl_number 会删除整个acl及其引用的命令。
       用no 作为任何acl语句的开头,会有完全相同的效果。
       千万不要在生产设备上轻易使用此命令!

 

 

第二部分

从IOS11.2开始,思科路由器同时支持编号acl和命名acl

(1)在路由器上配置命名的标准ACL.

ip access-list standard acl名称 回车
       动作   源地址

       ip access-list standard 
acl__name  回车

permit | deny     source source_netmask | host x.x.x.x | any 回车

 

       (2)命名扩展ACL
        ip access-list extended  acl名称 回车
        动作   协议  源地址 目的地址 端口号 ……

        ip access-list exteded acl__name  回车
       permti | deny    tcp | udp | ip ……      源地址    目的地址  eq | lg | gq | rang    端口号|服务   [established]    [log]

 

       (3)应用到端口

        interface  f0/0 
        ip access-group 
acl_name  in | out

        

修改命名ACL
    在cisco的IOS新版本(12.2(14)S,12.2(15)T,12.3(2)T以上)中引入了ACL序列编号(ACL Sequence Numbering)功能,使得访问控制列表的编辑变得非常的方便和快捷,
   序列号不会显示在 show running-config 路由器运行配置中。只有运行show access-list查看访问列表显示命令才能显示输入的序列号信息。

例如:

show running-config
ip access-group test in
ip access-list extended tset
permit ip 10.10.10.0 0.0.0.255 any
permit icmp 10.10.10.0 0.0.0.255 any
deny ip 10.10.20.0 0.0.0.255 any
permit tcp 10.10.30.0 0.0.0.255 host 192.168.87.65 eq www


    show access-list
Extended IP access list tset
10 permit ip 10.10.10.0 0.0.0.255 any
20 permit icmp 10.10.10.0 0.0.0.255 any
30 deny ip 10.10.20.0 0.0.0.255 any
40 permit tcp 10.10.30.0 0.0.0.255 host 192.168.87.65 eq www

我们可以再指定的位置增加一行语句,
        1.建立一个测试用访问控制列表
   R1(config)#ip access-list extended test
   R1(config-ext-nacl)#deny tcp any any eq 80
   R1(config-ext-nacl)#deny udp any any eq 8000
   R1(config-ext-nacl)#permit ip any any
    
    2.显示访问控制列表语句的当前序号

    R1#show ip access-lists test
    Extended IP access list test
     10 deny tcp any any eq www
     20 deny udp any any eq 8000
     30 permit ip any any

      3.在访问控制列表中指定的位置上增加一个语句(注意新增语句的序列号)
   R1(config)#ip access-list extended test
   R1(config-ext-nacl)#12 permit udp any host 192.168.1.1 eq 8000
   
     R1#show ip access-lists test

   Extended IP access list test
     10 deny tcp any any eq www
     12 permit udp any host 192.168.1.1 eq 8000
     20 deny udp any any eq 8000
     30 permit ip any any

 

      新增语句排在第二的位置


  删除命名ACL
  在命名ACL中,我们可以删除特定的一行,
   
删除访问控制列表中的某个特定语句

   R1(config)#ip access-list extended test
   R1(config-ext-nacl)#no 20 deny udp any any eq 8000
   
     R1#show ip access-lists test

   Extended IP access list test
     10 deny tcp any any eq www
     12 permit udp any host 192.168.1.1 eq 8000
     30 permit ip any any

 


重新编排一个访问控制列表的序号
   R1(config)#ip access-list resequence test 10 10

(从序号10开始排序,每次增加为10)
   R1(config)#do show ip access-lists test
   Extended IP  list test
     10 deny  any any eq 
     20 permit udp any host 192.168.1.1 eq 8000
     30 permit ip any any
   (在这里do 命令运行您在配置模式下执行一个EXEC命令,该命令要求IOS版本12.2(8)T 以上) 



第三部分
    ACL的查看、注释、分析

查看:

show running-config:可以显示ACL,以及哪些接口启动ACL
show ip interfaces: 在路由器接口上启动了哪个ACL
show access-lists :显示ACl中的语句(可以显示每条规则被匹配的次数),可以使用
        clear access-list counters [acl_number | acl_name]来清除计数器
show access-list [acl_number | acl_name] :查看特定ACL 
show ip access-list :只列出 IP协议的ACL


注释:

    在大型网络环境中可能同时存在上百条ACL,上千行规则语句。从 IOS12.0(2)T 开始可以在ACL语句中嵌入
注释或备注,对编号ACL和命名ACL都有效果。
编号ACL  access-list 1 remark 
this is access
命名ACL  ip access-list standard|extended ACL_NAME 回车
         remark 
this is access


分析:

     如果在ACL语句后加log 选项,则匹配语句的访问都会被记录,问题是被记录到哪里?
 默认地,日志记录只在路由器的控制台线路上打开,我们必须让电脑连接路由器,在电脑上看这些记录,当消息滚过屏幕并超出了终端软件的历史缓存,我们则没有任何机制可以再看到那些丢失的消息。
    如果把日志消息记录到除了线路以外的其他目的地,则可以避免这个问题。
要在其他地方记录日志,则必须相应地打开日志记录并进行配置。使用以下命令打开日志记录:

Router(config)#logging on      允许将日志记录到非控制台目的地
可以将日志信息转发到以下4种基本目的地
●线路;
●内部缓存;
●系统日志服务器;
●SNMP管理台;

Router(config)#logging console [severity_level]    记录到控制台
Router(config)#logging monitor [severity_level]    
记录到逻辑VTY
Router(config)#logging buffered [buffer_size|severity_level]    记录到路由器的内部缓存      
    该命令有两个参数,buffer_size指定为内部缓存分配多大的内存,以字节为单位。使用default logging buffered命令将缓存大小设回     出厂的默认值。severity_level指出应该记录的严重级别。默认的大小和严重级别(通常是7)依赖于平台型号。
Router(config)#logging host {IP_address|hostname}    记录到日志服务器中

查看时使用的命令为 show logging 
更多日志信息参考(http://bbs.51cto.com/thread-911912-1.html

                          

 

posted @ 2017-10-17 11:31  乌托邦眺望  阅读(2968)  评论(0编辑  收藏  举报