产生背景
访问控制列表ACL (Access Control List)可以定义一系列不同的规则,设备根据这些规则对数据包进行分类,并针对不同类型的报文进行不同的处理,从而可以实现对网络访问行为的控制、限制网络流量、提高网络性能、防止网络攻击等等。
ACL的应用场景
主机A,B的流量使用红色箭头表示,C,D使用蓝色箭头表示,然后限制AB流量走上方,CD流量走下方。在其中,是ACL发挥了作用:
ACL可以通过定义规则来允许或拒绝流量的通过。
ACL可以根据需求来定义过滤的条件以及匹配条件后所执行的动作。
ACL分类
基本ACL:用于匹配整个流量。好比从A处来的流量应该怎么限制,是允许还是拒绝,是对一个整体宏观的控制,而不去进行细分(类似孔子的因材施教)。
高级ACL:在基本ACL的基础上进行了扩充,变得更加精细,对于流量更加细致。规定从哪里来的流量去哪里访问什么服务,对于更加小的条目进行了控制,而不是像基本ACL一样一刀切。
二层ACL:二层是数据链路层,主要基于MAC地址进行转发,所以主要去规定了源MAC地址,目的MAC地址,以及以太网的帧类型。
高级ACL和二层ACL也叫扩展ACL,也是相对于基本ACL而言的。
ACL规则
基本ACL
在RA上写了一条基本ACL(从编号可以看出2000-2999),并且写了三条规则:
rule 5 deny source 192.168.1.0 0.0.0.255//①拒绝来自192.168.1.0网段的流量
rule 10 deny source 192.168.2.0 0.0.0.255 //②拒绝来自192.168.2.0网段的流量
rule 15 deny source 172.16.0.0 0.0.0.255 //③拒绝来自172.16.0.0 网段的流量
(这里匹配的顺序在于rule后面的数字,谁小就先去进行匹配谁,另外规则是以5为间隔是为了给修改顺序留有余地,如果规则是紧密相连的,则修改规则会相当麻烦)
当ACL规则写完之后还要应用到相应的接口上才能起作用:
在接口的运用方向也很关键,建议模拟一遍数据传输的过程,然后再应用到接口之上,至此,一套简单的基本ACL配置完成。
当流量到达了RA之后,首先会对这个规则列表进行匹配,如果匹配的上则立即执行,如果没有匹配上对应的网段则继续匹配下一条。如果一直没有匹配上则默认是允许通过的。
现在有一个特殊的场景:
如果在一台路由器上的规则是
acl 2000
rule 5 permit source 172.16.0.0 0.0.255.255
rule 10 deny source 172.16.6.7 0.0.0.0
此时地址为172.16.6.7的主机经过这台路由器,流量能否通过?答案是肯定的,因为ACL规则就是匹配上了就执行相应的动作,最开始是允许172.16.0.0网段通过,此时流量过来发现是匹配的,就直接执行允许的操作,不在向下进行匹配。
高级ACL
ACL 3000 //从序号可以看出这是一条高级ACL
rule deny tcp source 192.168.1.0 0.0.0.255 destination 172.16.10.1 0.0.0.0 destination-port eq 21 //第一个规则就是拒绝来自192.168.1.0 网段的流量访问目的地址是172.16.10.1的FTP服务。 其中,tcp是所使用的协议,eq理解为equal的意思,端口21是FTP的流量。
rule deny tcp source 172.168.2.0 0.0.0.255 destination 172.16.10.2 0.0.0.0
//这里没有写目的地的端口号,就是拒绝了源为172.168.2.0网段的所有到达目的地址为172.16.10.2的tcp流量,就好比是一刀切了
rule permit ip //没有写源,没有写目的,ip是相应的协议,就是允许其他的所有流量
traffic-filter outbound acl 3000//将ACL应用到接口之上
基本ACL与高级ACL应用建议
现在使用基本ACL拒绝从172.16.1.0网段的流量去往10.1.1.0网段,如果放在距离源最近的AR2,那么当172.16.1.0的流量到达AR2的时候就会直接被阻塞掉,那么想要去AR3,AR4的流量也直接丢失,就好像误伤AR3,AR4,这也是基本ACL的一个缺点,太一刀切了,如果放在AR5上,那么中途的流量都可以正常到达,只有到达AR5的流量会被阻塞,符合ACL的意图。所以基本ACL推荐放在距离目的较近的地方。
现在使用高级ACL限制AR1的tcp流量到达AR5,现在如果在距离AR1最远的AR5上进行部署高级ACL,此时TCP流量会经转中间所有的链路,最终辗转来到AR5才发现不能通过,这就造成了中间带宽的浪费。就不如在最开始,距离AR1最近的地方就提前部署(说明),减少了带宽的浪费。所以推荐高级ACL部署在距离源比较近的地方。
总结
ACL用来:访问控制,匹配流量
需要注意:规则书写的顺序;接口调用的方向;高级低级ACL调用的位置。