一、简介
1、ACL - Access Control List - 访问控制列表。
2、ACL是一系列有序的语句。
(1)有序:
ACL有序号,执行时按顺序自上而下查找并匹配。
默认先写的语句序号靠前。--- 所以注意书写规则的顺序,精确的规则放在前面。
如果查完了列表没有匹配的条件,则默认拒绝所有 deny all。--- 所以全是deny的ACL中,最后一条应该写上permit any。
access-list 10 permit 0.0.0.0 255.255.255.255 等同于 access-list 10 permit any。
这里的255.255.255.255是通配符,形似子网掩码,但子网掩码的0和1必须连续,通配符不限制。通配符中,标0的位置表示固定,标1的位置表示可变。
拓展ACL的permit any要写两遍any,分别表示源和目的:access-list 100 permit any any
access-list 10 permit 10.1.1.1 0.0.0.0 等同于 access-list 10 permit host 10.1.1.1
(2)语句:
ACL语句指定了条件和动作,若满足条件则执行动作。
ACL动作有:permit/deny
ACL条件比较复杂,根据条件的书写区别分类。
3、ACL用于过滤流量/匹配流量进行下一步操作。
但ACL不能过滤自身产生的流量(比如不能过滤loopback的in方向过滤环回口产生的流量,但可以在环回口流量出接口的out方向过滤掉)
4、ACL需要在R/SW的接口处调用,物理/虚拟接口都能调用。需要区分方向in/out。
一个接口,每方向,每种ACL类型(IP、MAC、……类型),只能调用一个ACL。多个易冲突,且一个ACL够用。
5、对ACL进行删改
二、类型
1、IP ACL
- 标准ACL:只根据ip报头中的S-IP地址匹配。所以标准ACL应该写在靠近终点的地方
- 拓展ACL:基于IP包的五元组匹配(S-IP \ D-IP \ Protocol \ S-port \ D-port)五元组能判断不同数据包是否属于同个数据流。所以拓展ACL应该写在靠近起点的地方
2、二层ACL
- 基于MAC / VLAN / port的ACL
3、自定义ACL
- · 基于应用层内容的ACL,思科不支持,需要在防火墙上配
三、标准ACL
有命名/编号两种创建方式。
推荐用命名。可以调整序列号以修改语句执行顺序,也可以单独删除某条规则。
标准ACL编号的范围是1-99 1300-1999
见上图,编号方式创建的ACL在写规则的时候要带编号。
而命名方式创建的ACL直接从动作开始写即可。
四、扩展ACL
有命名/编号两种创建方式。
推荐用命名。可以调整序列号以修改语句执行顺序,也可以单独删除某条规则。
拓展ACL编号的范围是100-199 2000-2699
上图是一个扩展ACL的例子。
意思是:如果有tcp流量来自10.1.1.0/24网段,源端口小于1024(可以不写,代表任意),访问20.1.1.0/24网络的http协议,则放行。
lt - less than \ eq - equal \ gt - greater than \ neq - not equal
五、实验 - 标准ACL
1、搭建拓扑
搭好拓扑如上(R2R3之间统一都连e0/1口),配好物理和环回口的IP地址。
2、全网互通
配路由协议,测试全网互通
配个eigrp,宣告网段。这里只截取R1的命令。
3台都配完后,检查路由表:
测试连通性:
3、用编号方式写标准ACL
【先用编号做一遍,再删掉用命名做一遍。】
写两条,一条拒绝2.2.2.2 , 一条permit any。
调用。因为用的是标准ACL,所以最佳调用位置是R3环回口的in方向(这里导致后面出现问题)
检查:
show access-lists 可以加编号,因为只有一组ACL所以直接show就好
show run看loopback 0 ,往后翻也能看到ACL
4、测试连通性
???2.2.2.2还是能正常ping通4.4.4.4
4.4.4.4也能ping通2.2.2.2
怀疑是环回口的问题,把调用接口从R3环回口换成了R3连R2的e0/1。
先在环回口删掉调用命令,再进入e0/1调用。
再去R1上测试连通性,这下2.2.2.2ping不通4.4.4.4了。
......表示不通,U.U.U表示发过去没有回包。
但1.1.1.1还是正常通信。
所以ACL不能在环回口上调用吗?记得前面写过ACL不能过滤自身环回口产生的流量,但过滤2.2发来的应该没问题吧?还是说ACL不能在虚拟接口上调用呢?还是虚拟机的问题?
***猜测:环回口是路由器内的接口,在环回口调用时,2.2的流量经过e0/1已进入路由器内部,所以只会正常转发。所以可以说ACL在环回口调用无效。***
5、删掉ACL
在接口删掉调用
删掉ACL
再看已经没有了
2.2ping一下,可以通。
6、用命名方式写ACL
命名方式写前面要加ip。ip access-list + name
直接从动作开始写。写好调用
7、测试连通性
2.2ping不通4.4
show ip access-lists可以看到匹配的包数量,show access-lists看不到。
加一条序号小于10的规则,可以在保持调用ACL的情况下让2.2ping通4.4。
(这种只有命名可以做,编号的做不了)
进入命名配置ACL的模式后,先写序号,再写动作。
2.2又能ping通4.4了
六、实验 - 扩展ACL
扩展ACL,过滤条件比较细,所以应该设置在靠近源的接口。因为环回口流量是路由器自己产生的,ACL无法过滤,所以在R2 e0/0的in方向调用ACL。
1、环境准备
把R3的环回口5.5 和 telnet配置好。
测试用1.1.1.1 telnet 4.4.4.4。用2.2.2.2 ping 5.5.5.5
测试成功,可以在R2上写ACL了。
2、扩展ACL - 标号
如下图。编写,调用。
3、测试
1.1 telnet 4.4显示目的不可达
2.2 ping 5.5 显示U.U.U,不可达
成功
4、扩展ACL - 命名
先删掉之前的标号扩展ACL。
测试下,可以ping通,可以telnet上。
配置,调用如图。
tcp那行命令没加源端口号是表示源端口号任意。
icmp那行没写源&目端口号是因为icmp没有端口号。
5、测试
如图。成功!