实施CISCO访问控制列表
cisco路由器安全很大程度上依赖于好的ACL,通过ACL来限制对路由器网络服务的访问,当数据包通过路由器时对其进行过滤。
   识别访问控制列表
   1-99 ip标准ACL
   100-199 ip扩展ACL
   200-299 以太网类型码ACL, 透明桥接ACL,源路由桥接ACL
   300-399 DECnet 和扩展DECnet ACL
   400-499 Xerox网络系统XNS 标准ACL
   500-599 XNS扩展ACL
   600-699 APPLETALK ACL
   700-799 以太网地址ACL 透明桥接ACL,源路由桥接ACL
   800-899 IPX标准ACL
   900-999 IPX扩展ACL
   1000-1099 IPX服务广告协议 SAP ACL
   1100-1199 扩展透明桥接ACL
   1200-1299 IPX summary地址ACL
   1300-1999 IP标准ACL 扩展范围
   2000-2699 IP扩展ACL 扩展范围
IP访问控制列表类型
    cisco 路由器支持两类IP ACL:
    标准IP ACL--基于源地址来过滤IP数据包
    扩展IP ACL--可以基于以下属性来过滤IP数据包
      --源IP地址
      --目的IP地址
      --源TCP/UDP端口
      --目的TCP/UDP端口
      --ICMP和IGMP消息类型
      --可选协议类型消息,用于细粒度控制
  标准编号ACL格式
  access-list access-list-number [deny | permit] source [source-wildcard]
    access-list-number  是ACL的编号   规定了一个标准的IP协议ACL (1-99 1300-1999)
    deny 丢弃所有与特定源地址相匹配的数据包
    permit 允许与特定源地址相匹配的数据包穿过接口
    source  规定一台主机或主机组的IP地址,检查其数据包
    source-wildcard 应用于源地址的通配符掩码定义了一个源主机组,这些主机组会被检查。如果没有规定掩码,缺省掩码是0.0.0.0
例子:
    config t
    access-list 2 permit 36.48.0.3
    access-list 2 deny 36.48.0.0 0.0.255.255
    access-list 2 permit 36.0.0.0 0.255.255.255
    36.0.0.0 是一个A类网络,其第二个字节规定了一个子网,子网掩码 255.255.0.0;
 在通配符使用中,0代表是必须匹配的一部分地址,255代表不需要匹配的一部分地址
    ACL是顺序处理,如果满足第一条,匹配过程就结束。
    务必记住,最后一条是隐藏的,deny any;也就是说如果你不配置一条permit,任何数据多不允许出去。
    标准IP ACL还支持以下关键字:
    any  --任何主机  如果用通配符标志就是0.0.0.0 255.255.255.255
    host --规定一个确切的主机匹配。 如果用通配符标志0.0.0.0相同
    log  --对于匹配拒绝或允许语句的数据包,进行日志记录
标准命名ACL格式
    config t
    ip access-list standard access-list-name
    access-list-name ----ACL名字
    deny 36.48.0.0 0.0.255.255
    permit 36.0.0.0 0.255.255.255
    exit
扩展编号ACL格式
    例子:
    config t
    access-list 103 permit tcp any 128.88.0.0 0.0.255.255 established
    access-list 103 permit tcp any host 128.88.1.2 eq smtp
    interface e0/0
    ip access-group 103 in
    ACL中有一个关键字 established,只用在TCP报文上,代表一个已经建立的连接。
    务必记住,最后一条是隐藏的,deny any;也就是说如果你不配置一条permit,任何数据多不允许出去。
    上面established关键字说明:如果TCP报文带有确认ACK或者重置RST位,匹配发生,这表明该数据包属于一个现有的连接。
                               如果ACK没有置位,而同步SYN有效,则意味网络上有人发起一次会话连接,数据包会被拒绝。
    access-list access-list-number [deny |permit][protocol-number|protocol-keyword] [source source-wildcard | any | host] [destination-port][established][log|log-input]
        access-list-number  是ACL的编号   规定了一个扩展的IP协议ACL (100-199 2000-2699)
    deny 丢弃所有与特定源地址相匹配的数据包
    permit 允许与特定源地址相匹配的数据包穿过接口
    protocol-number 整数值,范围从0-255,代表一种IP协议
    protocol-keyword IP协议的命令,可能是EIGRP GRE ICMP IGMP IGRP IP IPINIP NOS OFPF TCP UDP
    source  规定一台主机或主机组的IP地址,检查其数据包
    source-wildcard 应用于源地址的通配符掩码
    source-port 规定数据包最初的来源端口,可以是实际的端口号(80)或通过名(HTTP),对于TCP和UDP数据包来说,source-port也支持这些操作符:gt(大于)lt(小于)eq(等于)neq(不等于)
    destination 数据包发往的主机的和网络的IP地址
    destination-wildcard 应用于目的地址的通配符掩码
    destination-port 规定数据包发往的端口,可以是实际的端口号(80)或通过名(HTTP),对于TCP和UDP数据包来说,source-port也支持这些操作符:gt(大于)lt(小于)eq(等于)neq(不等于)
    established (仅限于TCP) 校验是否RST或ACK置位,如果两者有一个置位,就说明数据包属于之前已经建立的一个连接。此关键字可被用来限制对某一方向的TCP响应,如果会话是从相反方向开启的。
    log
    log-input
    any
    host
 扩展命名ACL格式
    config t
    ip access-list extended access-list-name (IOS11.2的版本不能识别命令ACL)
    permit tcp any 128.88.0.0 0.0.255.255 established
    permit tcp any host 128.88.1.2 eq smtp
    exit
 除了上述之外,扩展编号IP ACL和扩展命名IP ACL也都支持以下关键字:
   icmp-type  规定ACL基于ICMP消息类型(0-255)来实施过滤
   icmp-message 规定ACL基于ICMP消息符号名(例如echo-reply)来实施过滤
   precedence precedence 规定ACL基于优先级名称或编号(0-7)来实施过滤
   remark 用来给ACL添加注解 最多100个字符长,CISCO IOS12.0以后支持该特性
注释IP ACL条款
   config t
   access-list 102 remark allow traffic to file server
   access-list 102 permit ip any host 128.88.1.6
     remark message(不超过100个字符长)
开发ACL规则
  规则1:写下来 将ACL实现的一系列要求写下来,可以很简单
  规则2:建立一个开发系统  可以将配置COPY 到一个文件中去
 注意:***者很喜欢获取对路由器配置开发系统或TFTP服务器的访问,因为这些地方存储有ACL,为此必须保证选择用来开发和存储路由器文件的系统是安全的。
  规则3:测试 如果可能,在把ACL置于生产系统之前,应该在一个安全的环境里先进行测试。
ACL定向过滤
  ACL必须应用到一个路由器的接口才能生效。用在某个接口的ACL是基于数据流方向的。
     入站(IN)---ACL应用于进入路由器接口的数据流
     出站(OUT)---ACL应用于离开路由器接口的数据流
   
将ACL应用到接口
   在将ACL应用到路由器接口之前,一定要确保过滤的方向
   例子
    config t
    interface e0/1
    ip access-group 2 in
    interface e0/2
    ip access-group mailblock out
    exit
   命令行:
    ip access-group {access-list-number|access-list-name}{in|out}
       access-list-number  ip标准编号或扩展编号ACL的编号 1-199 1300-2699
       access-list-name   ip标准命名或扩展命名ACL的名字 用IP ACCESS-LIST命令来规定
       in --过滤入站 (流向路由器接口)数据包
       out--过滤出战 (离开路由器接口)数据包
显示ACL:
     en
     show access-lists
     命令行:
     show access-list {access-list-number|access-list-name}
     可以选择性用show ip interface命令来查看隶属于路由器接口的ACL。
     show ip interface {type number}
启用turbo ACL (IOS12.0以后支持,针对CISCO7200 和7500系列路由器)
    turbo ACL特性:将ACL编入一套查询表中,同时保持最先匹配的要求。用来访问的这些表是数据包头部,访问是在一个小的,固定数量的查询中进行的。并且独立于ACL条款现有的编号。
    该特性特点:
        对于多于三个条款的ACL,需要用数据包去匹配预定义规则的CPU负载会降低。CPU负载被固定,无论ACL大小如何,都会使更大的ACL不至于增加CPU的负担。ACL越大,所表现出来的优势也就越大。
        匹配数据包的时间被固定,数据包更小,并且保持一致性,这回改善网络的稳定性和传输时间的精确性。
在全局模式下配置命令:
     config t
     access-list compilied
     exit
 查看其状态命令:
     show access-list compiled
增强ACL
   增强ACL特点:
   动态(DYNAMIC)--动态ACL为响应用户认证而提供了特定的,临时的机会。动态ACL与扩展ACL语法类似,可用于CISCO 11.1及后续版本。
       实例:
       一个用户发起对路由器的TELNET会话
       路由器用用户名和口令查询来认证用户
       路由器关闭TELNET会话,在ACL中建立一个动态条款:允许已被认证的用户源IP地址的数据包
       一旦用户关闭会话,动态条款会被去掉
    基于时间(time based)--这些ACL其实就是编号或命名ACL,只不过是基于每天的时间和每周天数来实现的。
       基于时间的ACL可用于CISCO IOS 12.0及后续版本
    自反(Reflexive)--也被称作IP会话过滤,这种ACL在路由器的一个接口上为IP流量建立了动态条款,依据是发自另一个不同接口的会话。
        有了这种ACL,当一个连接发自路由器可信一端时,就可以对不可信一端的连接进行控制
        这种ACL实际上对扩展IP命名ACL修改而得来。用于CISCO IOS 11.3及后续版本
    基于上下文的访问控制(CBAC context-based access control)
         自反ACL只能保护单个通道的应用,例如TELNET;CBAC能基于上层信息而对多通道操作进行保护。
         CBAC建立的基础是防火墙特性集,它会在数据包进入或离开路由器接口时进行检查,确定是否允许相应的应用协议。
         CBAC ACL用于CISCO IOS 12.0T 及后续版本
关于配置ACL,这里有几点需要强调的:
     1 隐含拒绝一切  所有ACL末尾,都会跟一个隐含的拒绝一切的语句
     2 标准ACL限制   标准ACL只能对源地址进行过滤,要实施安全策略,可能还需要扩展ACL
     3 语句评价次序  ACL语句的评价是从第一条开始的,顺序进行(自顶向下)
     4 特别语句  某些ACL语句更特别一些,需要放在ACL更高位
           例如:放在高位的阻塞所有UDP流量的语句,就会覆盖掉低位的阻塞SNMP数据包的语句。因此必须确保高位的语句不能使低位的语句无效。
     5 定向过滤  CISCO ACL支持定向过滤,检查的是入站数据包(进入接口)或出站数据包(离开接口)。
     6 添加语句  在现有的ACL里添加新的语句,总是被附加在ACL最后的。由于ACL匹配原则,很有可能新加的语句不起作用,因此需要增加ACL条目时候,必须
     7 特别数据包  像路由选择表更新这样的路由器生成的数据包,并不准循出站ACL语句,所以如果对此ACL增加新语句,建议删除老的,将新的整个COPY过去。
     8 扩展ACL放置 务必将扩展ACL放置在离过滤源比较接近的地方
     9 标准ACL放置 务必将标准ACL放置在离目的地接近的地方