前文我们了解了GRE over IPSec 相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16601491.html;今天我们来聊一聊mac安全相关话题;

  先来回顾下二层交换机的工作原理

  我知道对于一台二层交换机来说,它的核心功能就是根据mac地址来转发数据;之所以能够根据mac地址来转发数据,是因为交换机的工作原理;交换机收到一个帧就会记录对应的帧的源mac和对应接口做对应;这样一来,当交换机收到对应目标mac的帧的时候,它就知道该把这个帧从那个接口转发出去;如果交换机收到的目标mac帧,在对应mac地址表里没有,此时交换机就会把对应数据包进行泛洪,如果在某一个接口收到了对应包的回复,此时它就会把对应接口和对应接口回复的源mac记录到mac地址表中;简单讲就是根据mac地址表来转发数据,如果没有就泛洪;

  基于MAC的攻击

  基于mac的攻击,通常手段有两种,一种是泛洪,一种是欺骗;所谓泛洪就是指攻击者在短时间内伪造很多mac地址帧,直接把交换机的mac地址表给写满;这样做最直接的后果就是,正常的数据包,交换机里没有对应mac,它不知道怎么转发,这个时候它就会泛洪,一泛洪,对应攻击者就能抓到数据包,从而获取数据;所谓欺骗是指攻击者恶意发送arp广播,告诉交换机,网关是我(通常就是欺骗网关,当然中间人攻击,也是类似的过程,两边欺骗);交换机收到攻击者的arp广播,它肯定会记录对应mac地址和接口,同时因为是arp广播,交换机上的其他pc收到对应的包,就会在本地记录对应mac和ip地址;从而在pc和网关通信时,会封装对应的mac地址,将数据发送给攻击者;这样一来攻击者就能够通过抓包等手段获取用户的数据;总之不管是mac泛洪攻击还是欺骗攻击,都是利用交换机的工作原理,通过mac地址表项来转发数据的特性来实行的攻击;

  提示:上图为mac泛洪攻击的示意图;攻击者伪造很多mac地址,发送给交换机,以此来占用交换机mac地址表;使得正常的mac地址表项被覆盖;正常的mac地址表项被覆盖,正常用户通信时,交换机就会把对应数据包进行泛洪,使得用户数据被攻击者抓取;

  MAC地址表项分类

  提示:常见的就这三种表项,动态,静态和黑洞;动态表项是指交换机通过对帧内的源mac进行学习而来,有老化时间;静态和黑洞都是管理员手动配置的,都不会老化;黑洞表项是指收到对应mac地址的帧都会被丢弃,不管是源mac还是目标mac,交换机只要收到对应有黑洞表项的mac就会主动丢弃;

  MAC地址表安全功能

  MAC地址表特性参数

  提示:默认交换机不做任何配置,动态学习mac的功能是开启的,老化时间为5分钟,端口的mac地址的优先级都是0;如果开启了端口安全,默认端口安全mac地址学习限制数量为1,即只能学习到一个mac,多的学习不到;端口安全的保护动作为restrict,即转发合法流量和发送告警;mac地址飘逸表项老化时间为5分钟,丢弃全0非法mac地址,以及收到全0非法mac地址报警功能都是关闭的;mac刷新arp功能也是关闭的;

  实验:基于mac的泛洪攻击

  实验环境说明:如上实验拓扑,我们使用云来桥接本地lo接口,另一端开一个kali来模拟攻击者

  没有攻击,对应交换机mac地址表

  提示:正常情况下,如果交换机没有收到帧,对应是mac地址表是空的才对,上面的mac地址是我们本地lo接口的mac,这是我们使用云桥接lo接口,默认lo接口会每隔一段时间发送一个ssdp包来发现局域网里的设备,所以我们在交换机上能够看到对应lo接口的mac地址;如下抓包

  使用kali ping pc1和pc2

  在交换机上查看mac地址表项

  提示:可以看到对应的mac和接口一一对应;真是因为这个mac表项,对应交换机就能正常的将数据包转发到对应接口发送出去;

  查看交换机mac地址表项汇总

  提示:这里是模拟器bug,它的统计数据显示不出来;从上图可以看到该交换机最大容纳32768条mac地址和接口对应的记录,一旦超过这个记录就会覆盖最老的记录(覆盖只针对动态学习到的mac,静态是覆盖不了的);

  使用kali攻击sw1

  提示:使用macof工具来伪装mac地址,该工具能在一瞬间伪造大量mac地址帧,然后从网卡发送出去;-i选项是用来指定从那个网卡发送;

  提示:可以看到我们只把macof工具开来不到5秒,对应交换机就收到了大量的mac地址帧,瞬间交换机的mac地址表也多了许多mac地址条目;

  以上就是mac泛洪攻击的现象,我们总结一下,出现mac泛洪攻击时,查看交换机的mac地址表项就会发现,在某一个接口下会存在大量的mac地址条目,很显然这不正常;

  MAC安全特性配置

  1、添加静态mac地址表项

  提示:添加静态mac时,我们需要写清楚对应mac 对应的接口和vlan即可;

  验证:查看静态mac是否添加成功?

  提示:可以看到对应mac地址表里就多了一条我们刚才添加的记录;汇总里也统计出有一条静态条目;

  2、添加黑洞mac地址表项

  验证:用kali ping pc2的地址,看看是否能够ping通呢?

  提示:可以看到现在kali就不能正常ping通pc2,原因是kali拿不到pc2的mac,因为pc2的mac是一个黑洞mac,对应pc2收到kali的arp请求,在发送自己的mac时,交换机会丢弃对应pc2发送到任何包;

  提示:第二张截图是在pc2上抓取的,可以看到pc2的确回复了kali的arp请求,但是kali却没有收到,原因就是交换机丢弃了pc2的包,因为pc2发送的包,源mac被设置成黑洞mac了;

  3、配置老化时间

  提示:默认mac地址表项的老化时间为300秒;

  4、禁止mac地址学习功能

  提示:以上命令可以在vlan模式和接口模式下使用,在接口模式下使用作用范围为当前接口,在vlan模式下使用作用范围是对应vlan;该命令后面还有两个参数,一个是forward,一个是discard;默认是不写后面的动作就是forward,表示转发;即对应端口或vlan所有接口,只是关闭动态学习mac的功能,但收到arp回复包进行转发;discard则表示根据目标mac地址,如果目标mac地址在mac地址表项存在,则转发,如果目标mac地址不存在mac地址表则丢弃;

  实验:把g0/0/4接口的学习mac功能关闭,并配置默认动作为discard

  查看mac地址表,看看对应g0/0/4口是否学习到mac?

  提示:可以看到现在mac表,对应g0/0/4口没有学习到任何mac;

  用pc1 ping pc3,看看对应接口是否会学习到mac?通信是否会通呢 ?

  提示:可以看到对应pc1pingpc3并没有ping通;

  查看mac地址表项

  提示:可以看到4口也没有学习到mac;

  抓包查看过程

  提示:在pc3上抓包,可以看到对应pc3收到pc1的arp广播,并做了回复;

  在pc1上抓包

  提示:在pc1上抓包,对应pc3的arp回复包并没有收到,说明g0/0/4口丢弃了arp回复包,导致pc1拿不到pc3的mac,也就无法正常通信;

  删除g0/0/4的禁止动态学习mac地址,先让g0/0/4学习到mac,然后再禁用学习功能呢

  pc3发包,让交换机学习到mac

  禁用4口学习mac功能

  提示:可以看到现在4口已经学习到mac;

  现在pc1 ping pc3 看看是否能通?

  提示:可以看到现在pc1pingpc3是能够正常ping通的,这是因为交换机的mac地址表项里对应通信的目标mac,对应数据包会转发,如果没有则丢弃;当然,如果mac地址表老化,对应条目被删除,那么通信也无法正常进行;

  把动作改为forward,看看对应接口是否能够学习到mac呢?通信是否正常呢?

  pc1 ping pc3看看g0/0/4是否学习到mac?对应通信是否能够正常通行呢?

  提示:可以看到通信是可以正常通讯,但是对应接口是不能够学习到mac条目的;

  5、限制端口学习mac地址的数量

  提示:该命令可以在接口模式和vlan模式下使用,在接口模式下作用范围当前接口,在vlan模式下作用范围是对应vlan;

  验证:用macof工具攻击,看看对应3口是否只能学习到10条mac地址条目呢?

  提示:可以看到对应交换机的终端在报警,对应3口也只能学习到10条mac地址条目;这里需要注意,这个学习到的mac是先学满10条,后面的就不学习了,并不是重复覆盖;

  6、配置告警

  提示:开启或关闭报警,必须配置前边的最大学习限制才可以,否则它会提示Error: Failed to change the configurations of the action or alarm because the MAC-limit rule does not exist.;

  7、开启丢弃全0非法mac地址报文的功能

  提示:以上两条命令在全局模式下使用;第一条作用是开启因收到全0非法mac报警;第二条表示开启丢弃全0非法mac;

  8、配置mac刷新arp功能

  提示:arp表是ip地址和mac地址以及出接口的对应表,mac地址表是mac地址和出接口的对应表;两者老化时间不一样,就导致当mac地址表是g0/0/1接口更新到g0/0/2口,对应arp里的信息还在g0/0/1口,这会导致通信中断;为了避免这样的问题,上述命令就表示当mac表项发生变化,通知arp表项对应条目更新,从而避免通信中断的问题;

  官方文档示意图

HCNP Routing&Switching之MAC安全的更多相关文章

  1. HCNP Routing&Switching之MAC地址防漂移

    前文我们了解了二层端口安全技术相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16631222.html:今天我们来聊一聊MAC地址防漂移技术: 首先我 ...

  2. HCNP Routing&Switching之OSPF网络类型

    前文我们了解了PPPoE协议相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15182512.html:今天我们聊聊一聊OSPF中的网络类型相关话题: ...

  3. HCNP Routing&Switching之IS-IS报文结构和类型

    前文我们了解了IS-IS动态路由协议基础相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15249328.html:今天我们来聊一聊IS-IS动态路由协 ...

  4. HCNP Routing&Switching之IS-IS邻居建立、LSDB同步、拓扑计算和路由形成

    前文我们了解了IS-IS的报文结构和类型相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15260670.html:今天我们来聊一聊IS-IS建立邻居. ...

  5. HCNP Routing&Switching之BGP报文结构、类型和状态

    前文我们了解了BGP的邻居建立条件.优化以及BGP认证相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15395723.html:今天我们来聊一聊BGP ...

  6. HCNP Routing&Switching之组播技术-组播基础

    组播技术背景 随着internet网络的不断发展,网络中交互的各种数据.语音.视频信息数量突增:新型的在线直播.网络电视.视频会议等应用也在逐渐兴起:这些业务大多符合点到多点的模式,对信息安全性.传播 ...

  7. HCNP Routing&Switching之组播技术-组播地址

    前文我们聊到了组播技术背景,单播.广播在点到多点应用中的问题,以及组播对比单播.广播在点到多点的网络环境中的优势.劣势,相关回顾请参考https://www.cnblogs.com/qiuhom-18 ...

  8. HCNP Routing&Switching之组播技术-组播协议IGMP

    前文我们了解了组播地址相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15616740.html:今天我们来聊一聊组播协议中IGMP协议相关话题: 组播 ...

  9. HCNP Routing&Switching之组播技术-IGMP-Snooping

    前文我们了解了组播协议IGMP相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15700550.html:今天我们来聊一聊二层交换机处理组播报文所面临的 ...

随机推荐

  1. 数据库常用DDL语句

    一.创建表 CREATE TABLE TABLE_NAME( #create table 表名 ID INT(4) PRIMARY KEY, #字段名 数据类型 完整性约束条件 NAME VARCHA ...

  2. 关键字——this,super,static,final

    this 理解为当前对象. //测试 public static void main(String[] args){ Person person = new Person(3, "xiaoM ...

  3. 02 java包装类型的缓存机制

    02 java包装类型的缓存机制 Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能. Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,12 ...

  4. 『现学现忘』Docker基础 — 40、发布镜像到Docker Hub

    目录 1.准备工作 2.Docker登陆命令 3.Docker提交命令 4.总结: 5.补充:docker tag命令 1.准备工作 Docker Hub地址:https://hub.docker.c ...

  5. 【小程序自动化Minium】二、元素定位-Page接口中的 get_element() 与 get_elements()

    UI自动化中的重要工作就是元素定位了,高效精准的定位方法可以让工作事半功倍. 在过去的一段web自动化经历中,使用的selenium库支持了多种定位方法,我们可以利用这些定位方法来做进一步封装,写出符 ...

  6. (零)机器学习入门与经典算法之numpy的基本操作

    1.根据索引来获取元素* 创建一个索引列表ind,用来装载索引,当numpy数据是一维数据时:一个索引对应的是一个元素具体的例子如下: import numpy as np # 数据是一维数据时:索引 ...

  7. Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性

    一.简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求 ...

  8. python测试开发django-197.django-celery-beat 定时任务

    前言 django-celery-beat 可以支持定时任务,把定时任务写到数据库. 接着前面这篇写python测试开发django-196.python3.8+django2+celery5.2.7 ...

  9. 004 SpringSecurity验证规则

    SpringSecurity验证规则 SpringSecurity框架登录后,==在userDetails对象中,一定会有一个权限列表 == 登录用户对象的值可能是: {"authoriti ...

  10. CD 从抓轨到搭建流媒体服务器 —— 以《月临寐乡》为例

    2022-07-19 v0.0.1 由于某些原因,进了 Static World 的群并入坑了 月临寐乡 ,梦开始了.作为幻想乡的新人,也算是有了自己喜欢的社团.但是更细节的东西,狐狐脑子一下子塞不下 ...