AccessControl List

ACL可以应用于很多场合,最为常见的是以下情形:

1.    过滤邻居设备间传递的路由信息;

2.    控制交互访问,以此阻止非法访问设备的行为-如对console接口,telnetssh访问实施控制;

3.    控制穿越设备的流量和网络访问;

4.    通过限制对路由器上某些服务的访问来保护路由器,如HTTP,SNMP及NTP;

5.    为DDR路由定义感兴趣流;

6.    为Ipsec ×××定义感兴趣流;

7.    能够以多种方式在IOS中实施Qos特性;

8.    在其他安全技术中的扩展应用(比如TCP拦截和IOS防火墙);

 

实施ACL的准则:

1.    ACL可以应用在一台设备的多个接口上;

2.    同一接口在同一方向只能对同一协议使用一个访问控制列表;

3.    设备会自顶向下一次对ACL进行处理,因此,在选择访问列表的顺序时一定要格外谨慎,最精确的条目一定要写在前面;

4.    在配置ACL的时候,路由器会把最新输入的ACE放在最下面;

5.    有一个“隐式拒绝”保留给那些没有被匹配的流量,ACL至少有一条permit条目,否则会拒绝所有流量;

6.    要始终遵循先创建acl,再把它应用到接口的步骤;要对ACL进行修改或编辑时,一定要先把这个acl从接口中移除,然后再进行修改,然后重新把它应用到这个接口上。

7.    应用到路由器接口的出站ACL只检查通过路由器的流量---也就是说,它不会检查那修路由器本身产生的流量;

 

访问控制列表类型:

1.    标准ACL

2.    扩展ACL

3.    命名的ip ACL

4.    锁和密钥(动态ACL)

5.    自反ACL (reflexive ACL)

6.    Established ACL

7.    使用时间范围的时间ACL (time-based ACL)

8.    分布式时间ACL

9.    Turbo ACL

10.  限速ACL(Racl)

11.  设备保护ACL(Iacl)

12.  过境ACL(transit ACL)

13.  分类ACL (classificationacl)

14.  使用ACL调试流量

 

编辑访问列表:

在IOS 12.2之前的版面,没有办法向ac中间添加一行,所有的输入行都被添加到列表尾部,如果试图删除下列一条特定的acl:

access-list101 permit tcp 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255 eq 25

那么访问列表101的所有行将与这一行一起被删掉;

简便的方法是将访问列表剪切和粘贴到pc的记事本,或者上传配置到TFTP服务器,然后在那里编辑,编辑完成后,将新的访问列表加载到路由器。

使用no access-list #清除设备正在使用的acl,这样加载到路由器上的acl每次都是重新创建的,如果省略这一部那么新加载的acl将会被添加在旧列表的尾部。

在IOS 12.2版本之后,序列号是自动增加到访问列表条目中,这个序列号允许在某个列表的顶端或中间插入一个条目。

 

Eg

1.建立一个测试用访问控制列表
 Router (config)#ip access-list extended 199
 Router (config-ext-nacl)#deny tcp any any eq 80
 Router (config-ext-nacl)#deny udp any any eq 8000
 Router (config-ext-nacl)#permit ip any any
 Router#show run | include 199
                 access-list 199deny   tcp any any eq www
                 access-list 199deny   udp any any eq 8000
                 access-list 199permit ip any any

 

2. 显示访问控制列表语句的当前序号
  Router#show ip access-lists 199
       Extended IP access list 199
                   10deny tcp any any eq www
                   20deny udp any any eq 8000
                   30 permit ip any any

 3.在访问控制列表中指定的位置上增加一个语句
Router(config)#ip access-list extended 199
Router (config-ext-nacl)#12 permit udp any host 192.168.1.1 eq 8000
Router#show ip access-lists 199
     Extended IP access list 199
                 10deny tcp any any eq www
                 12permit udp any host 192.168.1.1 eq 8000
                 20 deny udp any any eq 8000
                 30 permit ip any any

 4.删除访问控制列表中的某个特定语句
 Router (config)#ip access-list extended 199
 Router (config-ext-nacl)#no 20
 Router#show ip access-lists 199
      Extended IP access list 199
                 10 deny tcp any any eq www
                 12permit udp any host 192.168.1.1 eq 8000
                 30 permit ip any any

 5.重新编排一个访问控制列表的序号
       Router (config)#ipaccess-list resequence 199 12 10
       Router (config)#do show ipaccess-lists 199
           Extended IP access list199
                      10 deny tcp any any eq www
                      20 permit udp any host 192.168.1.1 eq 8000
                      30 permit ip any any

==========================================================================

标准ACL

标准的访问控制列表只准许过滤源地址,且功能十分有限。

基本格式:

        Access-list[listnumber][permit|deny][source address][ wildcard-mask][log]

在全局模式下输入访问列表命令,进入访问列表配置模式:

Ipaccess-list standard access-list-number|name

 

标准acl使用1-99或1300-1999作为access-list-number;

第一个条目分配的序列号为10,后续条目以10为增量递增;

默认通配符掩码是0.0.0.0(只针对标准的acl);

Noaccess-list access-list-number命令可以删除整个acl;

Remark用于向acl添加说明;

使用关键字log可以生成一个信息日志消息;

源地址:对于标准的访问控制列表,源地址是主机或一组主机的点分十进制表示;

通配符屏蔽码:Cisco访问表功能所能支持的通配符屏蔽码和子网屏蔽码的方式时相反的。这就是说,二进制数0表示一个‘匹配’条件,二进制1表示一个‘不关心’条件。

Eg:

    Router(config)#access-list 1 permit192.168.1.0 0.0.0.255 log

 

    Router(config)#ipaccess-list standard 1       

    Router(config-std-nacl)#permit 192.168.1.00.0.0.255 log

 

Host

Host表示一种精确的匹配,其屏蔽码是0.0.0.0 例如我们希望准许从198.78.48.0来的报文,就应该使用下面的访问语句

Access-list 1 permit198.78.48.0 0.0.0.0

因为host是一种精确的匹配,所以前面的语句可以使用下面的语句代替

     Access-list 1 permit  host 198.78.48.0

这样host 是 0.0.0.0 的简写

 

Any

在标准的访问列表中any 是源地址/目的地址0.0.0.0/255.255.255.255的简写。假如我们要拒绝从源地址198.78.48.0来的报文并且要准许从其他地址来的报文

   Access-list1 permit  host 198.78.48.0

   Access-list 1 permit  any

 

利用序列号在一个标准的ip访问列表之间增加一条新的语句:

ipaccess-list standard 1     

15 permit192.168.1.0 0.0.0.255

利用序列号在一个标准的ip访问列表之间删除一个条目:

ipaccess-list standard 1     

no 15  

==========================================================================

扩展的ACL

扩展IP访问控制列表比标准IP访问控制列表具有更多的匹配项,包括协议类型、源地址、目的地址、源端口、目的端口、建立连接的和IP优先级等.

控制的访问控制列表格式:

命名的IP ACL

access-listaccess-list-number

     [dynamicdynamic-name[timeout minutes]]

     {deny|permit}protocolsource source-wildcard

     destinationdestination-wildcard [precedence precedence]

     [tostos] [log|log-input][time-range time-range-name]

 

对于扩展ip访问列表来说,access-list-number 范围在100-199,或2000-2699;

Dynamic表示这个列表是一个动态的访问列表;

Timeout定义了一个临时条目在一个动态列表中保留的最大时间,缺省情况下永远超时;

protocol定义了需要被过滤的协议,例如ip tcp UDP icmp 等等;ip是一个通用的关键字可以匹配所有的ip协议;

precedence和tos是可选字段,在ip包头中的优先级字段和服务类型字段寻找匹配;

log指定打开信息日志功能,可选项;

log-input增加输入接口和源mac地址或虚链路号到日志输出;

time-range可以创建一个临时的访问列表,定义了临时acl的有效时间;

fragments定义了如何通过访问列表条目处理分段的数据包;

 

访问列表处理流程:

spacer.gif

Eg

Router(config)#access-list100 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.25

 

ICMP ACL:

access-listaccess-list-number

[dynamic dynamic-name [timeout minutes]]

{deny|permit} icmp source source-wildcard

destinationdestination-wildcard

[icmp-type[icmp-code] |icmp-message]

[precedenceprecedence] [tos tos] [log|log

 

Eg:

   Router(config)#access-list100 permit icmp 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255

TCP ACL:

access-listaccess-list-number

[dynamic dynamic-name [timeout minutes]]

{deny|permit} tcp source source-wildcard [operator[port]]

destinationdestination-wildcard [operator[port]]

[established] [precedence precedence] [tos tos]

[log|log-input] [time-range time-range-name]

 

Eg:

   Router(config)#access-list100 permit tcp 192.168.1.1 0.0.0.0 eq 80 192.168.2.1 0.0.0.0 eq 80

 

UDP ACL:

access-list access-list-number

[dynamic dynamic-name [timeout minutes]]

{deny|permit} udp source source-wildcard [operator[port]]

destinationdestination-wildcard [operator[port]]

[precedence precedence] [tos tos] [log|log-input]

[time-range time-range-name]

 

Eg:

   Router(config)#access-list100 permit udp 192.168.1.1 0.0.0.0 eq 53 192.168.2.1 0.0.0.0 eq 53

 

=========================================================================

命名的ip ACL

从IOS 11.2开始提供命名的访问列表,是庞大的访问列表更加利于管理。

使用命名访问列表,第一个行格式如下:

   ipaccess-list {extended|standard} name

 

紧接着使用许可或拒绝语句:

标准ACL:{deny|permit}source[source-wildcard]

控制ACL:{permit|deny} protocolsource source-wildcard [operator [port]]

destination destination-wildcard [precedenceprecedence] [tos tos] [log]

 

Eg

     Router(config)#ipaccess-list standard nameacl

     Router(config-std-nacl)#permithost 192.168.1.1 log    

    

     Router(config)#ipaccess-list extended nameacl

     Router(config-ext-nacl)#permittcp host 192.168.1.1 host 192.168.2.1 eq telnet

   

==========================================================================

锁和密钥(动态ACL):

锁和密钥ACL用于建立动态访问,这个动态访问使用了认证机制,可以为每个用户分别实施访问控制,使之到达不同的源/目的。锁和密钥需要使用这几个技术,telnet协议,认证机制和标准ACL。

建立锁和密钥访问需要如下几个步骤:

1.    配置一个控制的ACL来阻塞通过路由器的流量,但一定要放行所有主机去往该路由器的telnet流量;

2.    如果用户想让自己的流量能够穿锁和密钥路由器,那么必须持有有效的证书;

3.    认证可以通过路由器本地实现,也可以通过TACACS+ radius协议来远程实现;

4.    在完成telnet后,路由器会断开telnet连接,在配置好的扩展ACL中会出现一个动态的条目,这个条目在特定的时间内放行相应的流量;

 

配置锁和密钥:

1.    username user-name password password--------------建立本地用户名

line vtyline_range-----------------------------------------vty配置本地登录,触发认证机制

login local

2.    自动启用access-enable命令,并设置超时时间参数;

username usernameautocommand access-enable host timeout 10------针对每个用户

 

line vty 0 4-----------------------------------------------------为所有telnet这个台设备的用户配置一个全局超时时间值

login local

autocommand access-enable host timeout10

3.    配置一个扩展ACL,是用户登录到路由器上时触发access-enable命令

access-list 101 dynamictestlist timeout 15 permit ip 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255

access-list 101 permittcp any host 192.168.1.1 eq telnet-----放行telnet流量

4.    将ACL应用到接口;

 

==========================================================================

自反ACL

自反ACL支持基于高层的会话信息来实施ip数据包的过滤功能,自发ACL一般用于放行出站流量,同时限制返回给内部路由器的入站流量;限制条件是必须与扩展的命名IP ACL结合使用。

配置自发ACL:

ipaccess-group {number|name} {in|out}

ipaccess-list extended name

 

permitprotocol any any reflect name [timeoutseconds]

ipaccess-list extended name

evaluatename

 

Eg

     interface Ethernet1/0

     ipaddress 172.16.1.2 255.255.255.0

     ipaccess-group outbound-acl in

     ipaccess-group outbound-acl out

 

     ip access-list extended inbound-acl

     permit icmp any any

     evaluatetcp_reflect

 

     ipaccess-list extended outbound_acl

     permit icmp any any

     permit tcp 10.0.0.0 0.0.0.255 172.16.1.00.0.0.255 reflect tcp_reflect

   从网络10.0.0.0/24去往172.16.1.0/24的流量会被放行,而若该流量与inbound-acl发送匹配,它就会返回。

EstablishedACL

在扩展ACL中的关键字Established可以确认某个数据包属于一个已经建立的连接,该连接的会话时以前建立的而且连接人在使用中;同时使用这个关键字可以检查TCP报文中是否有确认ACK和复位RST位。该机制可以确保只有内部网络可以通过这台设备对外建立TCP连接,而所有由外部网络发向内部建立的TCP连接都会被丢弃。

 

spacer.gif

所以从网络A发往网络B的流量都可以放行,而所有从网络B发往网络A的流量都会被拒绝。

Eg

    interface Ethernet1/0

 ip address 10.1.1.2 255.255.255.0

ip access-group 101 in

 

access-list 101 permittcp any any established

==========================================================================

使用时间范围的时间ACL

时间范围的时间ACL可以根据时间设点访问控制的附加功能,时间范围以路由器时钟的时间为准,所以使用该特性是最好使用NTP来同步时间,只有IP和IPX的扩展ACL支持时间范围。

配置使用时间范围的时间ACL:

1.    Router(config)#time-range time-range-name------------------------------为要定义的时间范围定义一个名称

2.    Router(config)#absolute start time date end time date--------------------定义一个绝对时间

Or

Router(config)#periodicdays-of-the-week hh:mm to days-of-the-week hh:mm---------针对每周每天定义时间

3.    Router(config)#access-list number permit|denysource destination time-range time-range-name--------------在      

扩展ACL中调用时间范围

4.    Interface interface-name------------------------------------------------在接口上用于ACL

Ip access-groupacces-list-name in out

 

Eg

    time-range mytime

    absolutestart 08:00 01 June 2012 end 12:00 01 June 2012

 periodic weekdays 8:00 to 12:00

 

 access-list 101 permit ip host 192.168.1.1host 192.168.2.1 time-range mytime

 

InterfaceEthernet1/0

 ip address 10.1.1.2 255.255.255.0

 ip access-group 101 in

=========================================================================

分布式时间ACL

分布式时间ACL 主要在高端路由器上采用,设计之初是为了在启用了×××功能的7500系列路由器上实施。若在7500线卡上配置了时间ACL那么数据在达到这个接口之后就不会被分布式交换出去,而是交个路由器处理,这样分布式交换就得不到应用,而基于分布式时间ACL能解决此问题。

==========================================================================

TurboACL

传统的acl会按时间顺序自定向下搜索匹配信息,若ACL的数量增多,设备在处理数据包时就要占用更多的时间和内存来查询匹配项,降低了网络性能,turbo acl特性正是为了让路由器可以更有效的处理acl,从而提高设备性能。

 

TurboAcl在处理第一个匹配需求的时候,就会同时把ACL编译进一组查询表中,此后当数据包头部这个查询表的时候,就可以在为数不多且固定的查询项目中尝试与那些ACL条目进行匹配。启用了自反ACL和时间范围的ACL不支持turbo acl特性。

 

在全局模式下输入access-list compiled开启Turbo特性来编译所有的ACL,要在所有普通的ACL都配置好并准备进行编译后再使用。

TurboACL特性默认情况下是禁止用的,如果没有启用这个功能,普通的acl任然可以进行处理,但处理的速度不会提高,使用命令show access-list和show access-list compiled查看Turbo ACL特性是否已经生效。

 

========================================================================

限速ACL(Racl)

Cisco12000系列GSR及7500平台支持限速ACL,它可以提高安全性,避免无用流量及潜在的恶意流量的影响。

限速ACL可以使用一下的全局模式命令进行配置并且分配到路由器的各个线路卡中,标准和扩展类型的ACL都可以支持ACL。

Ipreceive access-list access-list-number

==========================================================================

设备保护ACL(Iacl)

设备保护ACL是通过精确匹配去往某台设备的流量来降低设备面临的风险,使只有经过了授权的流量才能到达要保护的设备,同时它还会拒绝外部地址访问一切无须直接访问的内部设备地址。

========================================================================

过境ACL(transit ACL)

过境ACL是根据以下原则开发的:

1.    应用了基于以下3个RFC防欺骗保护的最佳做法;

RFC1918-------------Internet不可路由的私有地址空间

RFC 3330-------------可能需要过滤的特殊地址应用

RFC 2827-------------防欺骗部署准则

2.    精确匹配所有内部网络始发连接的返回流量;

3.    精确匹配外部网络发往手保护网络的流量;

4.    在ACL末尾使用deny语句;

 

========================================================================

分类ACL(classificationacl)

分类ACL是由很多匹配协议,端口,标记等的permit语句组成,这些匹配的信息可以发送以下3个目的中的任意一个或多个:

某台网络设备,受保护区域的公共服务器,或网络中的任意其他设备。在某些情况下,分类acl可以使用关键字any来匹配任意源和目的地址,这对dos***进行分类和识别,并发现其源地址的时候非常有用。

Eg

通过分类ACL来鉴别疑似DOS***:

access-list101 permit icmp any any echo

access-list101 permit tcp any any syn

access-list101 permit tcp any any fragments

access-list101 permit udp any any fragments

access-list101 permit ip any any fragments

access-list101 permit tcp any any

access-list101 permit udp any any

access-list101 permit icmp any any

access-list101 permit ip any any

 

将这个ACL应用到不安全的入站接口上后,可以反复输入show access-list命令来查询哪一行的匹配次数最多,那么这一行所匹配的流量有可能是***流量,然后调整ACL来进一步缩小流量的类型,直到看到更接近的匹配流量。

==========================================================================

使用ACL调试流量

在路由器上是用debug是非常占用设备资源,容易导致设备死机,使用ACL来选择定义那些事需要查看的流量,可愿意降低debug是对网上所造成的影响。

 

Eg:

Router(config)#access-list101 permit ip host 10.1.1.1 host 192.168.1.1

Router(config)#access-list101 permit ip host 192.168.1.1 host 10.1.1.1

Router(config)#end

Router#debugip packet detail 101

IPpacket debugging is on (detailed) for access list 101

 

==========================================================================

把ACL应用到接口上

ACL可以应用到网络中的很多设备和接口上,但最终决定在哪里应用ACL之前,要考虑网络拓扑和需求。

1. 如果使用的是标准的ACL,就应该把它应用在流量传输过程中离目的地最近的位置。

2. 如果使用的是扩展ACL,就应该把它使用在离源最近的位置,避免数据在穿越网络是占用资源。

 

调用ACL:

在接口模式下调用该命令:Ip access-groupaccess-list-number [in|out]

 

对于控制对路由器虚拟终端线路发起的telnet会话,命令如下:access-class access-list-number [in|out]

命令access-class对于路由器传输的telnet流量不起作用,它仅影响到达路由器以及路由器发起的telnet会话。

 

==========================================================================