一、访问控制列表介绍:
访问控制列表(ACL,access control list)是应用在路由器的接口上的指令列表(即规则).这些规则告诉路由器,哪些数据包需要被拒绝,哪些被允许. 访问控制列表的基本原理是:ACL使用包过滤技术,在路由器上读取OSI七层模型中的第3层和第4层包头的信息,如源IP、目的IP、源端口、目的端口等,根据预先定义好的规则,对包进行过滤,从而达到访问控制的目的. ACL可分为两种基本类型: >标准访问控制列表:检查数据包的源地址,其结果基于源网路/子网/主机IP地址,来决定允许还是拒绝,使用1-99之间的数字作为表号. >扩展访问列表:对数据包的源地址与目的地址均检查,它也能检查特定的协议、端口号以及其他参数.使用100-199之间的数字作为表号. 二、访问控制列表的工作原理 访问控制列表是一组规则的集合,它应用在路由器的接口上,有进和出2个方向. 出:已经经过路由器的处理,正离开路由器接口的数据包. 入:已到达路由器接口的数据包,将被路由器处理. 如果对路由器的接口应用的ACL,也就是说该接口应用了一组规则,那么路由器将对数据包按照顺序进行检查. >如果第一条规则被匹配了,则不往下检查,直接决定数据包是被丢弃还是转发 >如果第一条不匹配,则向下检查,直到有一条规则被匹配,决定该数据包是被丢弃还是转发 >如果最后没有任何一条规则被匹配,则路由器根据默认的规则来决定是丢掉还是转发 访问控制列表对路由器本身产生的数据包不起作用 由此可见,在ACL中,规则的顺序很重要,一旦匹配了规则,就不再向下检查. 三、访问控制列表的类型: 1.标准访问控制列表 标准访问控制列表根据数据包的源IP地址来决定数据包是丢弃还是转发,表号1-99 2.扩展访问控制列表 扩展访问控制列表根据数据包的源IP地址、目的IP地址、协议、端口号来允许或者拒绝数据包,表号100-199 3.命名访问控制列表: 允许在标准和扩展访问控制列表中使用名称代替表号. 4.定时访问控制列表 定时访问控制列表提供基于时间的附加控制特性,定义在什么时间允许或者拒绝数据包. 四、访问控制列表的配置 4.1.标准访问控制列表的配置 1.创建ACL Router(config)#access-list access-list-number { permit | deny } source [source-wildcard] access-list-number:访问控制列表表号,范围1-99 permit | deny :允许 | 拒绝 source :数据包的源地址,可以值主机地址,也可以是网络地址,也就是网段或者具体的IP地址 source-wildcard:通配符掩码,也叫反掩码,在用二进制0和1表示时,如果某位为1,表明这一位不需要进行匹配,为0,则表明这一位需要严格匹配. 例: Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255 192.168.1.0/24的子网掩码是255.255.255.0,反掩码可以通过255.255.255.255减去255.255.255.0得到 Router(config)#access-list 1 permit 192.168.2.2 0.0.0.0 192.168.2.2的子网掩码是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代替 Router(config)#access-list 1 permit host 192.168.2.2 0.0.0.0 255.255.255.255 可以使用关键字any代替 Router(config)#access-list 1 deny any 3)删除已建立的标准ACL Router(config)#no access-list access-list-number 对于标准访问控制列表,不能删除单条ACL语句,只能删除整个ACL,这意味着如果要改变一条或者几条ACL语句,必须先删除整个ACL,然后再添加想要的ACL语句 2.将ACL应用于接口 创建ACL之后,只有将ACL应用到接口,ACL才会生效 Router(config)#ip access-group acess-list-number { in | out} 参数in | out 用来表示是应用到入站接口还是出站接口 要取消接口上的ACL,在前面加no Router(config)#no ip access-group access-list-number { in | out } 3.标准ACL配置实例 如图:要求配置标准ACL实现,禁止PC1访问PC2,而允许所有其他流量 步骤如下: 1)分析是在入站接口/出站接口上应用ACL 路由器对于in的数据包,先查看访问控制列表,通过后才查看路由表.对于out的数据包是先查看路由表,确定目标后才查看访问控制列表,因此尽量把ACL应用到入站接口上,因为它比出站接口效率要高.将要丢弃的数据包在进行路由表查询处理之前就拒绝掉. 2)应用在哪台路由器上 因为标准访问控制列表只能根据源IP地址过滤,如果在R1/R2上配置ACL,PC1不仅不能访问PC2,而且不能访问192.168.2.0/24.所以应该把标准ACL配置在离目的最近的路由器上. 3)配置ACL R3(config)#access-list 1 deny 192.168.1.1 0.0.0.255 或者 R3(config)#access-list 1 deny host 192.168.1.1 R3(config)#access-list 1 permit any R3(config)#int f0/0 R3(config-if)#ip access-group 1 in 使用show access-lists命令查看ACL配置 4.2扩展访问控制列表 1.创建ACL Router(config)#access-list access-list-number { permit | deny } protocol { source source source-wildcard destination destination-wildcard } [ operator operan ] access-list-number:访问控制列表表号,对于扩展ACL来说,范围是100-199 permit | deny :允许 | 拒绝 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 100 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255 Router(config)#access-list 100 deny ip any any 例2:拒绝192.168.1.0/24访问FTP服务器192.168.2.2/24的流量通过,而允许其他任何流量 Router(config)#access-list 100 deny tcp 192.168.1.0 0.0.0.255 192.168.2.2 0.0.0.255 Router(config)#access-list 100 permit ip any any 删除扩展ACL和删除标准ACL一样 Router(config)#no access-list access-list-number 扩展ACL与标准ACL一样,也不能删除单独的ACL语句,只能删除整个ACL 2.将ACL应用于接口 和标准ACL一样,需要将ACL应用到接口上,ACL才会生效 命令和标准ACL一样 Router(config-if)#ip access-group 100 in | out 取消的命令 Router(config-if)#no ip access-group 100 in | out 3.扩展ACL配置实例 步骤: 1)分析将ACL应用在入站接口还是出站接口 和标准ACL一样,尽量将ACL应用在入站接口上 2)该应用在哪台路由器上 由于扩展ACL可以根据源IP/目的IP/协议/端口,因此尽量将ACL应用到离源IP最近的路由器上,这样避免经过过多的路由器占用不要的资源. 3)配置ACL,并应用到接口上 R1(config)#access-list 100 permit tcp 192.168.1.1 0.0.0.255 192.168.3.1 0.0.0.255 eq 80 (www) R1(config)#access-list 100 deny ip 192.168.1.1 0.0.0.255 192.168.3.1 0.0.0.255 R1(config)#access-list 100 permit ip 192.168.1.1 0.0.0.255 192.168.2.0 0.0.0.255 R1(config)#int f0/0 R1(config-if)#ip access-group 100 in 4.3命名访问控制列表的配置 1.创建ACL Router(config)#ip access-list { standard | extended } access-list-name 参数access-list-name 可以使用一个由字母、数字组合的字符串 如果是标准ACL,命令: Router(config)#[Sequence-number] { permit | deny } source [ source-wildcard ] 如果是扩展ACL,命令: Router(config-ext-nacl)#[ Sequence-Number ] { permit | deny } protocol { source source-wildcard destination destination-wildcard } [ operator operan] 无论是标准命名ACL还是扩展命名ACL,都有一个可选参数Sequence-Number,Sequence-Number表明配置此ACL语句在ACL中所处的位置,默认情况下,第一条为10,第二条为20,以此类推. Sequence-Number可以很方便的将新添加的ACL语句插入到指定位置,如果不选择Sequence-Number,那么ACL语句就会被添加到列表末尾,并且序列号加10. 例:允许来自主机192.168.1.1/24的流量通过,而拒绝其他流量,标准命名ACL命令为: Router(config)#ip access-list standard cisco Router(config-std-nacl)#permit 192.168.1.1 0.0.0.255 Router(config-std-nacl)#deny any 例:拒绝192.168.1.0/24访问FTP服务器192.168.2.2/24的流量通过,而允许其他任何流量.扩展命名ACL: Router(config)#ip access-list extended cisco1 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 删除已建立的命名ACL: Router(config)#no ip access-list { standard | extended } access-list-name 对于命名ACL来说,可以删除单条的ACL语句,而不必删除整个ACL,而且命令ACL可以有选择性的插入到指定位置,是ACL配置更加方便. 如果要删除一条ACL语句,可以使用"no Sequence-Number"或者"no acl语句"两种方式. 例如: Router(config)#ip access-list standard cisco Router(config-std-nacl)#no 10 2.将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 } 4.4 定时访问控制列表的配置 配置定时ACL,需要建立一个时间范围,然后使用扩展ACL或者命名扩展ACL引用这个时间范围. 1.定义时间范围的名称 Router(config)#time-range time-range-name 2.指定该时间范围何时生效 指定该时间范围何时生效有二种方式:定义一个时间周期或者定义一个绝对的时间. 1).定义一个时间周期 Router(config-time-range)#periodic days-of-the-week hh:mm to [ days-of-the-week ] hh:mm Router(config-time-range)#absolute [ start hh:mm day month year ] [ end hh:mm day month year ]2).在扩展ACL中引入时间范围
Router(config)#access-list access-list-number { permit | deny } protocol { source source-wildcard destination destination-wildcard } [ operaor operan ] time-range time-range-name 3).将ACL应用于接口 Router(config-if)#ip access-group access-list-number { in | out } 例:在每周的正常工作时间(周一到周五的每天8:30-17:30),允许所有的IP流量通过网络,命令如下: Router(config)#time-range time Router(config-time-range)#periodic weekdays 8:30 to 17:30 Router(config-time-range)#exit Router(config)#access-list 101 permit ip any any time-range time Router(config)#int f0/0 Router(config-if)#ip access-group 101 in