自反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特性來完成。