「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》
在以前的IEEE802LAN协议中,只要用户可以「接入局域网」,就能「访问」局域网中的资源,比如我拿根网线插到交换机上,就能访问网络了,这是存在「安全隐患」的。
为了解决安全问题,802.1x协议出现了。
802.1x协议是基于端口的「访问控制和认证协议」,工作在数据链路层,用来限制未授权的用户/设备通过接入端口访问LAN/WLAN。
这样一来,我直接拿网线插到交换机上,就不能访问网络,而是要先认证/授权。
802.1x协议将每个物理接入端口划分为可控和不可控两个「逻辑端口」,从而实现业务与认证的分离。
802.1x协议采用C/S架构,由「客户端」、「接入设备」、「认证服务器」三个部分组成。
扩展:
用户上网时,打开802.1x客户端,输入用户名和口令进行认证,认证通过才能访问网络,认证不通过则不能访问。
802.1x的认证可以由「客户端主动发起」,也可以由「接入设备主动发起」。
「接入设备主动发起」又有两种具体的触发方式:
无论哪种触发方式,都会使用EAP协议来交换认证信息。
触发认证后,802.1x协议开始认证,这里以ERP中继方式解释一下认证流程(为了方便理解,接入设备用交换机来代替;认证服务器用radius服务器来代替):
1)用户访问网络时,客户端向交换机发送( EAPOL-Start ),开启802.1x认证。
2)交换机收到请求后,向客户端发送( EAP-Request/Identity )请求,要求客户端把用户名发过来。
3)客户端收到请求后,向交换机发送( EAP-Response/Identity )响应,同时把用户名传给交换机。
4)交换机把客户端响应的报文(原封不动的)封装成radius报文( RADIUS Access-Request ),发送给radius服务器。
5)认证服务器收到后,取出里面的用户名,到数据库的用户名列表查询对应的密码,并随机生成一个加密字(MD5 Challenge)加密这个密码,然后把加密字封装成radius报文( RADIUS Access-Challenge )发送给交换机。
6)交换机收到后,把里面的加密字发送给客户端( EAP-Request/MD5 Challenge )。
7)客户端收到加密字后,用加密字对密码进行MD5加密,然后把加密后的密码( EAP-Response/MD5 Challenge )发送给交换机。
8)交换机再封装成radius报文( RADIUS Access-Request )发送给radius服务器。
9)radius服务器把收到的加密密码和自己生成的加密密码做对比,如果相同,就给交换机发送认证通过的报文( RADIUS Access-Accept )。
10)交换机把收到的radius报文解封后,发给客户端( EAP-Success ),并把端口授权改为已授权状态,允许用户通过这个端口访问网络。认证通过后,DHCP分配IP地址。
11)交换机会定期向客户端发送「握手」报文,以检测用户的在线情况。客户端发送应答报文则表示在线;如果连续两次握手报文没有应答,就会让用户下线。
12)客户端可以主动要求「下线」,发送( EAPOL-Logoff )帧。交换机收到后,把端口状态改成未授权,并向客户端发送( EAP-Failure )报文,确认客户端下线。
MAB(Mac Address Bypass)也叫MAB地址认证,或者Mac地址白名单。
因为802.1x认证需要终端输入账号密码,但打印机这类「哑终端」没法输账号密码,就用Mac地址作为用户名和密码来认证。
1、先收集设备的「Mac地址」,存到Radius服务器里。
2、设备入网的时候,通过交换机将Mac地址转发给Radius服务器。如果有,就入网;如果没有,就禁止入网。
扩展:
EAPOL(EAP over LANs)是802.1X协议定义的一种报文封装格式,可以在客户端和NAS之间传递用户信息,也就是说允许EAP协议报文直接在LAN环境中传递。
字段解析:
EAPOL数据帧类型(Packet Type):
802.1X协议使用EAP(Extensible Authentication Protocol,可扩展认证协议)来实现客户端、NAS和认证服务器之间认证信息的传递。
当 EAPOL 报文的 Packet Type 字段值为0000 0000时,表明Packet Body字段封装的是一个EAP 数据包。
当 Code 字段的值为 Success、Failure 时,Data的值为空。
当 Code 字段的值为 Request、Response 时,Data才有值,值包含 Type、Type data 两部分;其中 Type 的类型有: