自反ACL实验
一、实验环境:
GNS3
c3640-ik9o3s-mz.124-13b.bin 模拟3560三层交换
VPCS模拟PC,使用三台PC,分别属于VLAN1,2,3
外网地址使用loopback 0接口,1.1.1.1/32表示(本实验主要是验证自反ACL)
(这个拓扑和真实环境可能不同,但区别不大,真实环境下,3560一般是trunk链路与其他接入二层交换机相连,这里我们直接把接PC的接口划分到VLAN里,两个环境都是使用三层交换SVI实现跨VLAN访问)。
二、基础配置
Sw3560# (建立VLAN与真实机不同,模拟器只能使用vlan database才能建立)
vlan data
Vlan 2
Vlan 3
Exit
SW3560(config)#
interface Loopback0
ip address 1.1.1.1 255.255.255.255
interface FastEthernet1/11
switchport access vlan 1
interface FastEthernet1/12
switchport access vlan 2
!
interface FastEthernet1/13
switchport access vlan 3
!!
interface Vlan1
ip address 172.16.10.1 255.255.255.0
!
interface Vlan2
ip address 172.16.20.1 255.255.255.0
!
interface Vlan3
ip address 172.16.30.1 255.255.255.0
先测试下实验的环境,看看VLAN间能不能互访
VLAN是可以互访的
三、需求:
VLAN1 可以访问VLAN2,3
VALN2,3不能访问VALN1
VLAN2不能访问VALN3
VLAN3可以访问VLAN2
所有VLAN都可以访问外网
四、ACL规则设计:
思路先要理清
Int vlan1
可以访问所有网络
Int vlan2
只可以响应VLAN1,VLAN3的连接,可以访问internet , 不可以访问VLAN1,3
Int vlan3
可以访问VLAN2,可以访问internet,不允许主动访问VLAN1,只可以响应VLAN1的连接
×响应连接是指其他VLAN主动建立的连接,才可以允许返回通信数据通过。×
五、根据设计思路配置:
ip access-list extended v1
permit ip 172.16.10.0 0.0.0.255 any reflect v1to23
(允许VLAN1访问所有地址,并建立v1to23的ACL映射表)
ip access-list extended v2
evaluate v1to23 (允许v1to23映射表的连接通过)
evaluate v3to2 (允许v3to2映射表的连接通过)
deny ip 172.16.20.0 0.0.0.255 172.16.10.0 0.0.0.255 (这三条保证不能主
动访问VLAN 1,3
deny ip 172.16.20.0 0.0.0.255 172.16.30.0 0.0.0.255 但可以访问internet)
permit ip 172.16.20.0 0.0.0.255 any
deny ip any any
ip access-list extended v3
evaluate v1to23 (允许v1to23映射表的连接通过)
permit ip 172.16.30.0 0.0.0.255 172.16.20.0 0.0.0.255 reflect v3to2
(建立到VLAN2的映射表)
deny ip 172.16.30.0 0.0.0.255 172.16.10.0 0.0.0.255 (这两条保证不能
主动访问VLAN1,
permit ip 172.16.30.0 0.0.0.255 any 但可以访问Internet)
deny ip any any
应用于接口
Int vlan1
Ip access-group v1 in
Int vlan2
Ip access-group v2 in
Int vlan3
Ip access-group v3 in
六、验证
1、debug ip packet detail
可以看到ACL数据包的详细信息
通过的日志
*Mar 1 05:31:10.034: IP: tableid=0, s=172.16.30.5 (Vlan3), d=172.16.20.5 (Vlan2), routed via FIB
*Mar 1 05:31:10.038: IP: s=172.16.30.5 (Vlan3), d=172.16.20.5 (Vlan2), g=172.16.20.5, len 48, forward
*Mar 1 05:31:10.042: ICMP type=8, code=0
*Mar 1 05:31:10.106: IP: tableid=0, s=172.16.20.5 (Vlan2), d=172.16.30.5 (Vlan3), routed via FIB
*Mar 1 05:31:10.110: IP: s=172.16.20.5 (Vlan2), d=172.16.30.5 (Vlan3), g=172.16.30.5, len 48, forward
*Mar 1 05:31:10.114: ICMP type=0, code=0
被阻止的日志
*Mar 1 05:31:51.446: IP: s=172.16.20.5 (Vlan2), d=172.16.10.5, len 48, access denied
*Mar 1 05:31:51.450: ICMP type=8, code=0
*Mar 1 05:31:51.450: IP: tableid=0, s=172.16.20.1 (local), d=172.16.20.5 (Vlan2), routed via FIB
*Mar 1 05:31:51.454: IP: s=172.16.20.1 (local), d=172.16.20.5 (Vlan2), len 56, sending
*Mar 1 05:31:51.458: ICMP type=3, code=13
2、show ip access-lists
查看access-list 表
SW3560#show ip access-lists
Extended IP access list v1
10 permit ip 172.16.10.0 0.0.0.255 any reflect v1to23 (37 matches)
Reflexive IP access list v1to23
permit icmp host 1.1.1.1 host 172.16.10.5 (13 matches) (time left 134)
permit icmp host 172.16.30.5 host 172.16.10.5 (19 matches) (time left 113)
permit icmp host 172.16.20.5 host 172.16.10.5 (20 matches) (time left 23)
Extended IP access list v2
10 evaluate v1to23
20 evaluate v3to2
30 deny ip 172.16.20.0 0.0.0.255 172.16.10.0 0.0.0.255 (6 matches)
40 deny ip 172.16.20.0 0.0.0.255 172.16.30.0 0.0.0.255 (3 matches)
50 permit ip 172.16.20.0 0.0.0.255 any (15 matches)
60 deny ip any any
Extended IP access list v3
10 evaluate v1to23
20 permit ip 172.16.30.0 0.0.0.255 172.16.20.0 0.0.0.255 reflect v3to2 (22 matches)
30 deny ip 172.16.30.0 0.0.0.255 172.16.10.0 0.0.0.255 (6 matches)
40 permit ip 172.16.30.0 0.0.0.255 any (30 matches)
50 deny ip any any
Reflexive IP access list v3to2
permit icmp host 172.16.20.5 host 172.16.30.5 (19 matches) (time left 267)
很详细了吧,每条匹配的数据包数后面都有显示
Reflexive IP access lis 这项下面的,看到了吧,这个就是自反ACL(reflect)建立的ACL映射表,后面还有个time left,这个就相当于老化时间吧,时间归0,这条ACL就自动删除。
整个实验完成了,也成功了,拓扑比较简单,原理差不多,主要是一定要先把自己的思路理清楚,别一来就敲命令,除非你经验很丰富或者技术很牛。
自反ACL也可以用于接口,int vlan 本来也就是一个虚拟接口。
在真实机3560交换机上,IPbase-12.2.bin的Ios带有reflect命令,但不支持这个功能,就是说这么照这篇文章的命令配置上去,但没有自反ACL的作用。官方的文档也说3560不支持动态ACL。
最后只能使用扩展ACL的TCP连接的established特性来完成。