Layer3 ACL

session 1 ACL
      ACL:access control list 访问控制列表,原为cisco的ASA防火墙的一部分,后被用于网络中其他设备,来进行网络匹配或者安全控制功能。
1、ACL分为两个层面:
1.1、数据层面:用于匹配网络、路由等数据
1.2、控制层面:用于控制数据的转发

ACL分为标准ACL和扩展ACL:
1、标准ACL,序号范围为1~99,1300~1999。
标准访问控制列表只能匹配源地址,例如:
R(config)#access-list 1 permit 192.168.1.0 0.0.0.255   写法1,创建列表并直接写条目
R(config)#ip access-list standard 1                              写法2,创建列表,并进入列表写条目
2、扩展ACL,序号范围为100~199,2000~2699。
扩展访问控制列表可以匹配源、目的、协议、端口、包头字段等,例如
R(config)#access-list 100 permit tcp 192.168.1.0 0.0.0.255 any syn psh     写法1,deny了tcp包头中含有的syn和psh标记的tcp包
R(config)#access-list 100 permit tcp any eq 808 any eq 8808                    写发1,指定了tcp的源、目端口
R(config)#access-list 100 permit ip 192.168.1.0 0.0.0.255 any                    写法1        
R(config)#ip access-list extended 100                                                         写法2(只针对ip的ACL)
 
ACL的方向有两个:in和out两个方向,在接口下启用策略的时候选择方向。
1、in,入方向,可以对入方向的任何流量起效
2、out,出方向,不能对自己接口始发的流量起效,只能对途径本接口的(非本接口始发的流量)流量进行控制
 
3、prefix-list前缀列表,是增强版的扩展ACL,当抓取的路由条目过多时,使用前缀列表比扩展ACL对系统硬件资源的占用要减少70-85%!
前缀列表写法:
R(config)#ip prefix-list ccie permit 192.168.1.0/24 le 25 
创建一个名为ccie的前缀列表抓取路由192.168.1.0/24,最大25(192.168.1.0/25)
 
4、ACL的重新排序resequence
假设下面这样一个场景:ACL102中必须要在10和11之间在插入一条ACL,就必须使用ACL的冲排序
R(config)#do show ip access
Extended IP access list 102
    10 permit ip any 172.17.30.56 0.0.0.7 (14 matches)
    11 permit ip 172.17.8.0 0.0.0.255 192.168.1.0 0.0.0.255 (42852 matches)
    20 permit ip any 172.17.7.0 0.0.0.255 (23414 matches)
R(config)# ip access-list resequence 102 10 10      冲排序ACL102,以10号为开始,间隔10
R(config)#do show ip access-list 102
Extended IP access list 102
    10 permit ip any 172.17.30.56 0.0.0.7 (14 matches)
    20 permit ip 172.17.8.0 0.0.0.255 192.168.1.0 0.0.0.255 (42852 matches)
    30 permit ip any 172.17.7.0 0.0.0.255 (23414 matches)
这样就将原来的10、11、20重新排序成10、20、30
 
ACL的参数
1、log/log-input
2、precedence
 
R#terminal monitor    此命令允许tlenet登录的显示系统的log,而不用使用show loggin来看log的缓存,cisco设备默认是关闭的。
 
debug等命令,当telnet上来后需要开启R#terminal monitor才可以实时显示,否则是需要show loggin来显示
debug ip packer
debug ip icmp
R(config)#access-list 1 remark R1-to-R1_deny   remark用来对ACL做注释,在show run中可以看到
 
session 2 交换机中的基于MAC地址的MAC-ACL
       MAC-ACL与IP-ACL区别在于ip-acl是针对TCP/IP协议栈生效的,而mac-acl是除了tpc/ip协议栈以外的协议生效的,比如appletalk、ipx等协议,不能对tcp/ip协议起到acl的作用,但是如果在交换机上配置了mac-acl也是可以对tcp/ip的数据起效,是因为cisco的L2层设备有能力拆开数据包的L3层头部查看acl的内容(默认),可以根据ACL的内容做出控制(只能基于in方向的),但是cisco的L2层设备不能转发L3数据包,这就是为什么在交换机上配置了mac-acl可能做控制的原因。
SW(config)#mac access-list extended mac-acl                   创建扩展mac-acl名字为mac-acl
SW(config-ext-macl)#permit host 0001.0002.0003 any      只允许0001.0002.0003到any,默认deny any
SW(config-if)#interfact f0/17 

SW(config-if)#mac access-group mac-acl in                       用在接口的in方向,二层接口只支持in方向


补充:
1、二层接口(switchport)mac-ACL只能用于in方向,而L3层接口(no switchport)ip-acl可以用于in、out方向,可以分别用L2层接口和L3层接口mac access-group和ip access-group看下方向。
2、还有一条绑定mac和vlan的命令与mac-acl功能相似,但是只当前交换机有效:
R(config)#mac-address-table static 0001.0002.0003 vlan 71 interface f0/17
将0001.0002.0003绑定在vlan71和接口f0/17上,match_all的关系(与的关系),也就是说0001.0002.0003这个mac地址的主机只能在vlan71并且连接在该交换机的f0/17口下才能通信,否则drop
R(config)#mac-address-table static 0001.0002.0003 vlan 71 drop
检测到0001.0002.0003这个地址(在vlan71中)时直接丢包,用于直接drop某个mac地址主机
 
session 3 SVI_ACL,基于L3层设备VLAN的ACL
       在三层交换中或者路由中做了VLAN的路由后,对VLAN2和VLAN3做ACL。在L3层交换机中SVI2口vlan2,SVI3口是vlan3,假设v2:2.2.2.1,v3:3.3.3.1。需求是要禁止v2中的一台主机2.2.2.2访问v2中的主机3.3.3.3,ACL有两种方法实现,in方向和out方向:
1、in方向:在VLAN2(svi2)中做
R(config)#ip access-list extended svi2
R(config-ext-nacl)#deny ip host 2.2.2.2 host 3.3.3.3
R(config-if)#ip access-group svi2 in
 
2、out方向:在VLAN3(svi3)中做
R(config)#ip access-list extended svi3
R(config-ext-nacl)#deny ip host 2.2.2.2 host 3.3.3.3

R(config-if)#ip access-group svi3 out


      为什么SVI的ACL要这样写方向,因为当VLAN2的流量进入交换机后,由于是执行L3层转发,所以交换机是直接把数据包丢给了L3层转发引擎通过CEF进行转发的(蓝色方向),而根本就不走SVI接口的(红叉的流量),SVI接口此时替代了每个vlan的L3层转发引擎!所以ACL的方向是以L3层转发引擎为方向的,那么要dney vlan2的流量去vlan3就是在L3层转发引擎为的in口和out口做参照了,所以在vlan2中写的话就是vlan2流向vlan3的方向,所以vlan2上做ACL是in方向,而vlan3上是out方向.(从L3层转发引擎来看,v2到v3的流量,从v2来的就是v2的in方向,而v2要去往v3的发到v3内的流量就是v3的out方向)

session 4 Vlan
_ACL

vlan-ACL,主要用于vlan间的ACL,过滤vlan之间的所有流量。
特点:1、对于每个调用v_acl的vlan的入向和出向都做检查,所以没有in和out的概念,都要检查执行策略。
          2、对于L2层转发引擎(CAM表)和L3层转发引擎(CEF)都生效,也就是对L2层vlan和L3层vlan都生效
拓扑如下:
PC1:vlan2------f0/2-Switch-f0/3------PC2:vlan3
要求使用v-acl过滤掉pc1到达pc2的流量。方法:对于L2层设备使用mac-acl匹配PC1或PC2的mac地址进行策略
                                                                          对于L3层设备使用ip-acl匹配PC1或PC2的ip地址进行策略
V-ACL有点类似于route-map了
 
1、做策略在L2层设备上做
sw(config)#vlan access-map pc1-deny-pc2 10                      创建一个vlan-map,名字pc1-deny-pc2,序列10
sw(config-access-map)#match mac address mac-acl_pc1    使用mac_acl匹配要进行检测的mac地址
sw(config-access-map)#action drop                                      匹配mac后的动作drop
sw(config-access-map)#exit
sw(config)#vlan filter pc1-deny-pc2 vlan-list 2                      调用在vlan2中执行
或者sw(config)#vlan filter pc1-deny-pc2 vlan-list 3               调用在vlan3中执行
或者sw(config)#vlan filter pc1-deny-pc2 vlan-list 2,3            调用在vlan2和vlan3中执行
默认有一条:
sw(config)#vlan access-map pc1-deny-pc2 20
sw(config-access-map)#match any                
sw(config-access-map)#action drop
 
2、策略在L3层设备(基于SVI的)上做
sw(config)#vlan access-map pc1-deny-pc2 10
sw(config-access-map)#match ip address ip-acl_pc1           使用ip_acl匹配要进行检测的ip地址
sw(config-access-map)#action drop
sw(config-access-map)#exit
sw(config)#vlan filter pc1-deny-pc2 vlan-list 2
或者sw(config)#vlan filter pc1-deny-pc2 vlan-list 3
或者sw(config)#vlan filter pc1-deny-pc2 vlan-list 2,3
默认有一条:
sw(config)#vlan access-map pc1-deny-pc2 20
sw(config-access-map)#match any                
sw(config-access-map)#action drop
因为V_ACL对于vlan的入和出向都进行检测的,所以调用在vlan2中时候是流量流出vlan2的时候检测并生效了,而调用在vlan3中的时候是流量进入vlan3的时候检测并生效了。


你可能感兴趣的:(Layer3 ACL)