「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》
802.1x协议
- 1、什么是802.1x协议
- 2、802.1x架构
- 3、触发认证
- 4、工作原理/认证过程
- 5、认证方式
- 5.1、MAB认证
- 6、EAPOL协议报文格式
- 7、EAP协议报文格式
在以前的IEEE802LAN协议中,只要用户可以「接入局域网」,就能「访问」局域网中的资源,比如我拿根网线插到交换机上,就能访问网络了,这是存在「安全隐患」的。
为了解决安全问题,802.1x协议出现了。
1、什么是802.1x协议
802.1x协议是基于端口的「访问控制和认证协议」,工作在数据链路层,用来限制未授权的用户/设备通过接入端口访问LAN/WLAN。
这样一来,我直接拿网线插到交换机上,就不能访问网络,而是要先认证/授权。
802.1x协议将每个物理接入端口划分为可控和不可控两个「逻辑端口」,从而实现业务与认证的分离。
- 「不可控端口」始终处于双向连通状态,只接收EAP报文,保证客户端可以发送/接收「认证消息」。通过认证结果(Accept/Reject)控制可控端口的授权状态。
- 「可控端口」默认不接收任何报文,只有认证通过后,才用来传递「业务报文」。
2、802.1x架构
802.1x协议采用C/S架构,由「客户端」、「接入设备」、「认证服务器」三个部分组成。
- 「客户端」(Supplicant System):用户终端设备,安装802.1x客户端,发起802.1x认证。
- 「接入设备」(Network Access System ):交换机等网络设备,为客户端提供接入网络的端口(物理端口/逻辑端口)。
- 「认证服务器」(Authentication Server System):radius服务器,保存用户的认证信息,对用户进行认证。
扩展:
- 认证系统(Authenticator System)也叫NAS(Network Access System,即网络接入系统),为了便于理解,文章中使用接入设备来代替。
3、触发认证
用户上网时,打开802.1x客户端,输入用户名和口令进行认证,认证通过才能访问网络,认证不通过则不能访问。
802.1x的认证可以由「客户端主动发起」,也可以由「接入设备主动发起」。
- 「客户端主动发起」:使用客户端软件向接入设备发送 EAPOL-Start 报文触发认证。
- 「接入设备主动发起」:用于客户端不能主动发送EAP报文的场景。
「接入设备主动发起」又有两种具体的触发方式:
- DHCP报文触发:接入设备在收到客户端的DHCP请求后,主动对用户发起802.1x认证,仅适用于客户端采用DHCP自动分配IP地址的场景。因为DHCP请求报文是以广播的形式发送的,同一网段的设备都可以收到,所以接入设备不一定就是DHCP服务器。
- 源MAC地址未知报文触发:接入设备收到源MAC地址未知的报文时,主动对用户发起802.1x认证,如果在规定时间内没有收到客户端的响应,就重发这个报文。
无论哪种触发方式,都会使用EAP协议来交换认证信息。
4、工作原理/认证过程
触发认证后,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 )报文,确认客户端下线。
5、认证方式
802.1x协议的认证方式除了上面提到的 「ERP中继」,还有 「ERP终结」。两种方式的区别在于:加密口令的位置不同。
- 「ERP中继」:由认证(radius)服务器生成加密字(MD5 Challenge)并加密口令,交换机只充当中介的角色转发报文。
- 「ERP终结」:由接入设备(交换机)生成加密字(MD5 Challenge)并加密口令,之后把用户名、加密字、加密后的口令一起发送给认证服务器,进行认证处理。
5.1、MAB认证
MAB(Mac Address Bypass)也叫MAB地址认证,或者Mac地址白名单。
因为802.1x认证需要终端输入账号密码,但打印机这类「哑终端」没法输账号密码,就用Mac地址作为用户名和密码来认证。
1、先收集设备的「Mac地址」,存到Radius服务器里。
2、设备入网的时候,通过交换机将Mac地址转发给Radius服务器。如果有,就入网;如果没有,就禁止入网。
扩展:
- 「MAB哑终端」是指无法输入账号密码、没有交互接口的设备,比如打印机、扫描仪、IP电话。
6、EAPOL协议报文格式
EAPOL(EAP over LANs)是802.1X协议定义的一种报文封装格式,可以在客户端和NAS之间传递用户信息,也就是说允许EAP协议报文直接在LAN环境中传递。
字段解析:
- PAE Ethernet Type:2字节,以太网协议类型,802.1x为其分配的协议类型为0x888E。
- Protocol Version:1字节,发送方所使用的协议版本号。
- Packet Type:1字节,EAPOL数据帧类型。
- Packet Body Length:2字节,数据域(Packet Body)的长度。当 Packet Type 为 EAPOL-Start或EAPOL-Logoff时,该字段值为0。
- Packet Body:数据内容。
EAPOL数据帧类型(Packet Type):
- EAP-Packet(值为0x00):认证信息帧,该帧在接入设备重新封装成Radius报文,发送给radius服务器。
- EAPOL-Start(值为0x01):认证发起帧,只在客户端和接入设备之间存在。
- EAPOL-Logoff(值为0x02):退出请求帧,只在客户端和接入设备之间存在。
- EAPOL-Key(值为0x03):密钥信息帧,对EAP报文加密(无线接入专用)。
7、EAP协议报文格式
802.1X协议使用EAP(Extensible Authentication Protocol,可扩展认证协议)来实现客户端、NAS和认证服务器之间认证信息的传递。
当 EAPOL 报文的 Packet Type 字段值为0000 0000时,表明Packet Body字段封装的是一个EAP 数据包。
字段解析:
- Code:1字节,EAP帧类型,(Request、Response、Success、Failure)
- Identifier:1字节,匹配Request消息和Response消息
- Length:2字节,EAP帧的总长度(Code + Identifier + Length + Data域)
- Data:0或更多字节,EAP包的内容
当 Code 字段的值为 Success、Failure 时,Data的值为空。
当 Code 字段的值为 Request、Response 时,Data才有值,值包含 Type、Type data 两部分;其中 Type 的类型有:
- Type=1 -Identifier(要求客户端程序发送用户输入的用户名信息)
- Type=2 -Notification(非必须的一个消息,传送一些警告消息)
- Type=3 -Response Only(Request报文中的认证类型不可接受时回应该类型的报文)
- Type=4 -MD5-Challenge(类似于CHAP中的MD5-Challenge)
- Type=5 -One-Time Password (OTP)(一种密码交互的方式)
- Type=6 -Generic Token Card(支持Challenge和Response时使用令牌)
- Type=254 -Expanded Types(支持厂商自己扩展的类型)
- Type=255 -Experimental use(实验新的类型时做测试用的类型)