前言
ACL(Access Control List)访问控制列表是一种基于包过滤的访问控制技术,它可以根据设定的条件对接口上的数据包进行控制, 允许其通过或丢弃。
本文要点:
ACL的类型
基础ACL(standard)也称标准ACL,只能基于源IP进行定义和过滤。数字命名范围为1-99。
扩展ACL(extended)可以基于源IP、目的IP、ICMP、TCP、UDP等一系列方式过滤,此次只用得上源IP和目的IP的过滤方式,也比较容易理解,比较简单,其他的就不讲了。
其他的ACL就不讲了,这里也用不上。
ACL的动作
deny:拒绝,禁止匹配到的ACL条目通行。
permit:允许,放行匹配到的ACL条目。
注ACL是一条一条匹配的,第一条ACL没有匹配上就会匹配第二条以此类推知道匹配到最后一条,如果最后一条ACL也未匹配上则会默认拒绝(deny)此条ACL。
这张图看起来应该容易些,切记ACL默认是拒绝的,如果没有写一条permit(允许)的ACL会发现没有一个数据包可以同行,也就是说一个也ping不通。
下面是实验内容。
实验topo
这里这个内部网络部分是一个单臂路由这里就不多做介绍了,不理解的朋友可以去自行了解一下。不了解也没有关系我也会把步骤列举出来(*^▽^*)
实验步骤:
单臂路由-->全网通-->配置ACL策略-->查看结果
单臂路由
VPC1
配置IP和网关
VPC2
SW
vlan rang 10,20 //批量创建vlan10,20
show vlan //查看已经创建完成的vlan
int g0/0 //进入G0/0接口
switchport mode access //将接口模式设置为access模式,接口默认为access模式不敲此命令也可以。
switchport access vlan 10 //将vlan 10划入此接口
show this //查看当前接口或者当前模式下配置了哪些命令
int g0/1 //进入g0/1接口
switchport access vlan 20 //将vlan 20划入此接口
这里就没有写switchport mode access这条命令因为默认是access模式就算写了也看不到。
int g0/2 //进入g0/2接口
switchport mode trunk //将此接口改为trunk模式
switchport trunk allowed vlan only 10,20 //将vlan10,20划入此接口
R1
int g0/2 //进入g0/2 接口
no switchport //开启三层功能,不开启三层无法配置IP
int g0/2.10 //创建g0/2.10子接口(子接口就相当于一个虚拟接口)
encapsulation dot1Q 10 //绑定VID 10(vlan10)
ip address 192.168.10.254 255.255.255.0 //配置vlan10 的网关
arp gratuitous-send enable //开启arp的广播发送(默认开启,不配置也可以,配置了也看不见此命令)
int g0/2.20 //创建g0/2.20子接口
encapsulation dot1Q 20 //绑定VID 20(vlan20)
ip address 192.168.20.254 255.255.255.0 //配置vlan20 的网关
到此单笔路由就结束了。此时PC1和PC2就算是不同的vlan也可以通信了
PC1--ping--PC2
接下来就是ACL部分了
全网通
R1
int g0/0 //进入g0/0接口
no switchport //开启三层
ip address 12.1.1.1 255.255.255.0 //配置IP
R2
int g0/0 //进入g0/0接口
no switchport //开启三层
ip address 12.1.1.2 255.255.255.0 //配置IP
此时VPC1和2还是ping不通运营商R2
因为R2没有抢网VPC1和2的路由,也就是没有前往192.168.10.0和192.168.20.0的路由,因此我们要写两条静态路由,这里我就直接写一条192.168.0.0的汇总路由了。能偷懒就偷懒( •̀ ω •́ )✧
show ip route //查看路由表,这里只有直连的12.1.1.0的路由,并没有192.168.10.0和192.168.20.0的路由
ip route 192.168.0.0 255.255.0.0 12.1.1.1 //这里我写的路由汇总就是说将192.168.10.0和192.168.20.0这两个网段的路由合并成一条路由,如果大家不会的话建议就别这么做了,这样做是容易出问题的◑﹏◐。
大家可以写两条
ip route 192.168.10.0 255.255.255.0 12.1.1.1
ip route 192.168.20.0 255.255.255.0 12.1.1.1
静态路由格式如下
ip route 192.168.10.0 255.255.255.0 12.1.1.1
ip route 目的IP网络地址 子网掩码 下一跳IP
写完之后就有路由了
此时PC就可以ping通运营商了。
接下来就是写ACL策略了
ACL策略
ACL的策略一般只需要在边界设备上做就可以了,当然要根据实际情况来判断,我们这里只需要在R1上面配置就OK啦φ(* ̄0 ̄)
先讲基础ACL,在讲扩展ACL
R1
ACL的配置写法有两种,但是配置完成的格式只有一种,两种我都会介绍一下
标准ACL
标准写法
ip access-list standard 10 //创建ACL为标准ACL数字范围为10(标准ACL的数字范围是1-99,每一个数字编号都是不同的ACL。)
10 deny 192.168.10.0 0.0.0.255 // 拒绝192.168.10.0的路由
20 permit any //放行所有未匹配到的路由,一定要敲,因为ACL默认拒绝,不敲的话不仅是192.168.10.0的路由被拒绝了,所有的路由包括192.168.20.0的路由也会被拒绝。
格式如下:
10 deny 192.168.10.0 0.0.0.255
序列号 动作 源IP 掩码
序列号:我喜欢叫进程,从低到高排序,数字越小的条目越优,就是说条目10和条目20相比较条目10就先匹配,条目10未匹配到再去匹配条目20。范围是<1-2147483647>每次以10叠加
动作 :之前讲过就是deny和permit,拒绝通行和允许通行
源IP :你需要匹配哪条路由那么他就是源IP
掩码 :子网掩码
为什么说这是标准写法呢,因为你在show run查看的时候他是这样显示的
接下来就是关键的一步,最开始学的时候大家很容易忽略,那就是接口调用,没有调用ACL写了也没有用。
int g0/2.10 //进入子接口
ip access-group 10 in //调用ACL10
int g0/2.20 //进入子接口
ip access-group 10 in //调用ACL10
此时VPC1就ping不通运营商的12.1.1.2了,因为前面拒绝了192.168.10.0的路由条目
这里放行了VPC1也就是192.168.10.0以外的所有路由所以VPC2 的192.168.20.0就可以ping通12.1.1.2要是没有写20 permit any 的话VPC2的IP也会被默认拒绝掉从而ping不通。
接下来是简单方法
简单写法
简单写法可以说非常常用,这里我就演示把VPC2拒绝掉,为了演示效果我会先把前面的配置删除。
no ip access-list standard 10 //只需要把创建ACL的命令删除会连带性把所有下级命令删掉,接口的调用也是。
access-list 10 deny 192.168.20.0 0.0.0.255 //拒绝192.168.20.0的路由,简单写法只需要写策略就可以了,ACL会自动创建
access-list 10 permit any //允许所有路由
格式和上面的差不多无非就是在上面的基础上加了一个access-list,可以看到结果还是一样的。
调用
这次PC1就可以ping通了
PC2就ping不通了。
扩展ACL
这里我就只介绍简单写法了标准写法的话大家自行按照红框内的来写就行了。
扩展ACL的数字编号在100-199
格式如下
access-list 100 deny ip 192.168.10.0 0.0.0.255 12.1.1.2 0.0.0.255
access-list 数字编号 动作 匹配类型 源IP 掩码 目的IP 掩码
接口调用
结果如下
到此就结束了ヾ(≧▽≦*)o