HCIA 访问控制列表ACL
一、前言
ACL又称访问控制列表,其实这个东西在很多地方都有用,可能名字不太一样但原理和功能都差不太多,比如服务器、防火墙,都有类似的东西,功能其实也就是“过滤”掉不想收到的数据包。为什么不想收到一些数据包呢?为了安全啊。
比如你有一台对外提供web服务的服务器,所以你需要开放80端口,但是服务器内部可能还跑了一些其他的业务,使用的是6666端口。不做任何限制的话,外面的坏人就会来尝试连6666端口并试图通过这个端口获取到额外你不想对外提供的信息。ACL就是干这个的,基本操作是把所有对外端口都封闭了,然后只开80端口对外。
二、ACL概述
从名字上看ACL访问控制列表就是一张表,表里列了一行行的控制条件,其特性是在进行某个访问时就来查看这张表,先从第一条开始看,如果满足条件就执行这个控制条件然后结束,如果不满足这个条件就继续看下一条,直到把表内所有控制条件都看完。
基于这样的特性,ACL的使用有两种思路,一是默认开启所有访问权限,然后将不想要的访问都拒绝了。二是默认拒绝所有访问权限,然后将需要开放的访问打开。一般来说都是采用第二种思路,第一种方式你可能写几千几万条规则不一定写的完,但对外提供的服务总是有限的。
接着需要说的是,由于ACL这样的特性,每次有访问都需要看ACL控制表,那问题就来了,如果你写的规则特别多,可能就会直接影响路由器的效率,这也就是为什么路由器有ACL的功能我们还是需要防火墙。
三、ACL规则
一个简单的ACL控制条件如下:
system-view
acl 3500 #创建一个编号为3500的规则
rule deny icmp source 3.3.3.2 0 destination 2.2.2.2 0 icmp-type echo #写一条控制指令
quit
interface GigabitEthernet 0/0/0 #进入端口
traffic-filter inbound acl 3500 #绑定规则
其效果是,在路由器的G0/0/0端口会按acl规则进行过滤,当发现源地址为2.2.2.2的IP,同时目的地址为3.3.3.2的包,会拒绝其icmp报文。
所以具体流程是:
(1)创建某个编号的规则
(2)在规则里写控制指令
(3)将规则绑定到路由器端口
关于编号的一些约定如下,不同大小的编号会影响你写控制指令,比如acl 2001这样的规则就不能对目的IP进行筛选,必须要使用大于3000的编号。
四、ACL实例
考虑下面的网络结构。
免ping示例
其实就是前面的示例,因为我们需要用到源IP和目的IP,所以acl编号必须大于3000。同时这里我们要禁止所有IP的ping,所以还是有小小的修改。
system-view
acl 3500 #创建一个编号为3500的规则
rule deny icmp source any destination 2.2.2.2 0 icmp-type echo #写一条控制指令
quit
interface GigabitEthernet 0/0/0 #进入端口
traffic-filter inbound acl 3500 #绑定规则
效果是任何设备的ping包都无法通过AR1的G0/0/0端口,换句话说,如果这个包不经过这个特定端口,那么是不受限的。
五、回顾
ACL访问控制列表如其名字那样,就是一张表,通过表里的控制指令来控制外来的访问。需要注意的是,路由器中可以自定义多个列表,不同的表编号还决定了它的功能特性。最后将表编号与端口绑定则控制策略生效。