目录
Do show run | sec acl 查看设置的acl
一、基础
ACL:access control list —— 访问控制列表
平时上网,其实就是数据包的传输,不同的上网行为,传输的数据包不同
数据包的五元组:源IP地址、目的IP地址、协议、源端口、目的端口
Telnet 192.168.10.1 192.168.10.254 TCP 随机 23
QQ 192.168.10.1 QQ服务器 oicq 随机 8000 //端口和协议不同来区分包
QQ通话:本机的IP地址、QQ服务器的IP地址、UDP、本台设备的任意端口、8000
PING:自己的IP地址、对方的IP地址、ICMP、echo-request、echo-reply
TELNET:自己的IP地址、对方的IP地址、TCP、本台设备的任意端口、23
ACL的两大功能:
1、匹配感兴趣流量 //接口下调用,从上而下执行(in/out)
2、过滤数据包 //ACL可以根据数据包的五元组进行对数据包过滤
二、三种ACL
(实则两种,写法三种) 注意:只能删除整个表,不能单独删除表中的一个条目(标准/拓展acl)
1.标准ACL
编号1-99【1300-1999】,最简单,只能根据源IP地址过滤数据包的,只关注数 据包由谁发送,不能针对目的地址,也不能针对协议和端口,也不针对协议 一个any
2.拓展ACL
编号100-199【2000-2699】,更精确,可以根据源、目IP地址、协议以及端口号过滤数据包 两个any
3.命名ACL
可以对ACL进行命名,并且单独控制其中一条(方便删减)
三、部署实例
host IP地址 = IP地址 = IP地址 0.0.0.0 //只允许设定的ip
原则:
1.按照序列号以此往下匹配,精确地ACL需要置顶(范围小的排前面)
ACL默认的序列号是10,并且以10递增
2.配置ACL要在全局模式下,只有在接口(以太网接口、串行接口、VTY接口)下调用
3.ACL最后一条默认隐藏式拒绝所有
4.配置ACL时后面带上反掩码表示匹配范围,如果没有带上反掩码则默认跟上0.0.0.0
5.一个接口只能在一个方向调用一个ACL,远程都是in
6.只能针对过往的数据包进行过滤,自己发出的数据包无法过滤
推荐标准ACL靠近目标配置,拓展ACL靠近源配置(避免误杀,节省资源)
案例:
案例1:使用标准ACL实现PC1不能ping通PC2 icmp echo包
R3(config)#access-list 1 deny 192.168.10.0 0.0.0.255 //ACL 1第一条拒绝
R3(config)#access-list 1 permit any //ACL 1第二条允许剩下的所有
R3(config)#int e0/1
R3(config-if)#ip access-group 1 out //当数据包从e0/1出去时,调用ACL进行数据包过滤
案例2:使用拓展ACL实现PC1无法访问192.168.20.254 (不要再PC上启用ACL)
R1(config)#access-list 102 deny icmp 192.168.10.0 0.0.0.255 host 192.168.20.254 echo
//ACL 102第一条拒绝192.168.10.0 0.0.0.255到192.168.20.254这个地址发送的icmp协议的echo包
R1(config)#access-list 102 permit ip any any //ACL 102允许剩下的所有报文
R1(config)#int e0/0
R1(config-if)#ip access-group 102 in //当数据包进入e0/0时,调用ACL进行数据包过滤
案例3:使用命名类的标准ACL实现PC1不能ping通PC2
R3(config)#ip access-list standard PC1notoPC2 //创建一个命名类标准ACL,名字为PC1notoPC2
R3(config-std-nacl)#deny 192.168.10.0 0.0.0.255 //第一条拒绝192.168.10.0 0.0.0.255
R3(config-std-nacl)#permit any //第二条允许剩下的所有
R3(config)#int e0/1
R3(config-if)#ip access-group PC1notoPC2 out //当数据包从e0/1出去时,调用ACL进行数据包过滤
案例4:使用拓展ACL实现只有192.168.10.1能ping通PC2 --- PC2只给PC1回包
(ping IP地址 source 指定端口)
R3(config)#access-list 114 permit icmp host 192.168.20.1 host 192.168.10.1 echo-reply
//ACL 114第一条允许192.168.20.1这个地址发给192.168.10.1这个地址的icmp协议的echo-reply报文
R3(config)#access-list 114 deny ip any any //ACL 114第二条拒绝剩下所有报文
R3(config)#int e0/1
R3(config-if)#ip access-group 114 in //当PC2的回包进入e0/1接口时,调用ACL进行数据包过滤
案例5:实现PC2能ping通R1,但是无法进行远程登录
法1:在本台设备的VTY接口调用ACL(只能写标准ACL)
R1(config)#access-list 105 deny ip 192.168.20.0 0.0.0.255 any //ACL 105第一条拒绝192.168.20.0 0.0.0.255发的所有数据包
R1(config)#access-list 105 permit ip any any //ACL 105第二条允许剩下所有报文
R1(config)#line vty 0 4
R1(config-line)#access-class 105 in //当流量进入VTY口时,调用ACL进行数据包过滤
法2:在物理接口调用ACL
R1(config)#access-list 115 deny tcp host 192.168.20.1 host 202.101.12.1 eq 23 //ACL 115第一条拒绝192.168.20.1给202.101.12.1的23端口通过tcp发送数据包【Telnet流量】
R1(config)#access-list 115 deny tcp host 192.168.20.1 host 192.168.10.254 eq 23 //ACL 115第二条拒绝192.168.20.1给192.168.10.254的23端口通过tcp发送数据包【Telnet流量】
R1(config)#access-list 115 permit ip any any //ACL115允许剩下所有报文
R1(config)#int e0/1
R1(config-if)#ip access-group 115 in //当流量进入e0/1时,调用ACL进行数据包过滤
案例6:实现PC1能ping通PC2,但是PC2ping不通PC1【单向通信】
R3(config)#access-list 106 deny icmp host 192.168.20.1 host 192.168.10.1 echo
//ACL106 第一条拒绝192.168.20.1到192.168.10.1的icmp协议的echo报文
R3(config)#access-list 106 permit ip any any //ACL106 第二条允许剩下所有
R3(config)#int e0/1
R3(config-if)#ip access-group 106 in //当流量进入e0/1时,调用ACL进行数据包过滤