Bootstrap

802.1X认证

802.1X协议是一种基于端口的网络接入控制协议(Portbased networkaccess control protocol)。“基于端口的网络接入控制”是指在局域网接入设备的端口这一级验证用户身份并控制其访问权限。

802.1X认证具有以下优点:

  • 802.1X协议为二层协议,不需要到达三层,对接入设备的整体性能要求不高,可以有效降低建网成本。

  • 认证报文和数据报文通过逻辑接口分离,提高安全性。

认证系统

802.1X系统为典型的Client/Server结构,包括三个实体:客户端、接入设备和认证服务器。

图1 802.1X认证系统

e02d40f8f98f14f069ef1771649f662d.png

  • 客户端一般为一个用户终端设备,用户可以通过启动客户端软件发起802.1X认证。客户端必须支持局域网上的可扩展认证协议EAPoL(Extensible Authentication Protocol over LANs)。

  • 接入设备通常为支持802.1X协议的网络设备,它为客户端提供接入局域网的端口,该端口可以是物理端口,也可以是逻辑端口。

  • 认证服务器用于实现对用户进行认证、授权和计费,通常为RADIUS服务器。

802.1X的基本概念

受控/非受控端口

设备端为客户端提供接入局域网的端口,这个端口被划分为两个逻辑端口:受控端口和非受控端口。

  • 非受控端口始终处于双向连通状态,主要用来传递EAPOL协议帧,保证客户端始终能够发出或接收认证报文。

  • 受控端口在授权状态下处于双向连通状态,用于传递业务报文;在非授权状态下禁止从客户端接收任何报文。

授权/非授权状态

设备端利用认证服务器对需要接入局域网的客户端执行认证,并根据认证结果(Accept或Reject)对受控端口的授权/非授权状态进行相应地控制。

图2显示了受控端口上不同的授权状态对通过该端口报文的影响。图中对比了两个802.1X认证系统的端口状态。系统1的受控端口处于非授权状态(相当于端口开关打开),系统2的受控端口处于授权状态(相当于端口开关闭合)。

图2 受控端口上授权状态的影响

d76546c108d75db7ca918b205d5f7989.png

 

802.1X的认证触发方式

802.1X的认证过程可以由客户端主动发起,也可以由设备端发起。设备支持的认证触发方式包括以下两种:

  • 客户端主动触发方式:客户端主动向设备端发送EAPOL-Start报文来触发认证。

  • 设备端主动触发方式:设备端触发方式用于支持不能主动发送EAPOL-Start报文的客户端,例如Windows系统自带的802.1X客户端。

802.1X的认证方式

802.1X认证系统使用可扩展认证协议EAP(Extensible Authentication Protocol)来实现客户端、设备端和认证服务器之间的信息交互。各实体之间EAP协议报文的交互形式如下:

  1. 在客户端与设备端之间,EAP协议报文使用EAPoL(EAP over LANs)封装格式,直接承载于LAN环境中。

  2. 在设备端与认证服务器之间,EAP协议报文可以使用以下两种方式进行交互。

  1. EAP中继:EAP协议报文由设备端进行中继,设备将EAP报文使用EAPOR(EAP over RADIUS)封装格式承载于RADIUS协议中,发送给RADIUS服务器进行认证。该认证方式的优点是:设备处理简单,可支持多种类型的EAP认证方法,例如MD5-Challenge、EAP-TLS、PEAP等,但要求服务器端支持相应的认证方法。

  2. EAP终结:EAP协议报文由设备端进行终结,设备将客户端认证信息封装在标准RADIUS报文中,与服务器之间采用密码验证协议PAP(Password Authentication Protocol)或质询握手验证协议CHAP(Challenge Handshake Authentication Protocol)方式进行认证。该认证方式的优点是:现有的RADIUS服务器基本均可支持PAP和CHAP认证,无需升级服务器,但设备处理较为复杂,且不能支持除MD5-Challenge之外的其它EAP认证方法。

说明:

EAP协议可以运行在各种底层,包括数据链路层和上层协议(如UDP、TCP等),而不需要IP地址。因此使用EAP协议的802.1X认证具有良好的灵活性。

802.1X认证流程

EAP中继和EAP终结的认证流程

802.1X系统支持EAP中继方式和EAP终结方式与远端RADIUS服务器交互完成认证。以客户端关联触发802.1X认证为例,EAP中继方式和EAP终结方式的802.1X认证流程分别如图3与图4所示。

图3 EAP中继认证流程

e2a6e53d14793bc9cbd36e8bebb5f8cd.png

 

  1. 当用户需要访问外部网络时打开802.1X客户端程序,输入已经申请、登记过的用户名和密码,发起连接请求。此时,客户端程序将向设备端发出认证请求帧(EAPOL-Start),开始启动一次认证过程。

  2. 设备端收到认证请求帧后,将发出一个Identity类型的请求帧(EAP-Request/Identity)要求用户的客户端程序发送输入的用户名。

  3. 客户端程序响应设备端发出的请求,将身份信息通过Identity类型的响应报文(EAP-Response/Identity)发送给设备端。

  4. 设备端将客户端发送的响应帧中的EAP报文封装在RADIUS报文(RADIUS Access-Request)中发送给认证服务器进行处理。

  5. RADIUS服务器收到设备端转发的用户名信息后,将该信息与数据库中的用户名列表中对比,找到该用户名对应的密码信息,用随机生成的一个MD5 Challenge对密码进行加密处理,同时将此MD5 Challenge通过RADIUS Access-Challenge报文发送给设备端。

  6. 设备端将RADIUS服务器发送的MD5 Challenge转发给客户端。

  7. 客户端收到由设备端传来的MD5 Challenge后,用该Challenge对密码部分进行加密处理,生成EAP-Response/MD5 Challenge报文,并发送给设备端。

  8. 设备端将此EAP-Response/MD5 Challenge报文封装在RADIUS报文(RADIUS Access-Request)中发送给RADIUS服务器。

  9. RADIUS服务器将收到的已加密的密码信息和本地经过加密运算后的密码信息进行对比,如果相同,则认为该用户为合法用户,并向设备端发送认证通过报文(RADIUS Access-Accept)。

  10. 设备收到认证通过报文后向客户端发送认证成功帧(EAP-Success),并将端口改为授权状态,允许用户通过端口访问网络。

  11. 用户在线期间,设备端会通过向客户端定期发送握手报文的方法,对用户的在线情况进行监测。

  12. 客户端收到握手报文后,向设备发送应答报文,表示用户仍然在线。缺省情况下,若设备端发送的两次握手请求报文都未得到客户端应答,设备端就会让用户下线,防止用户因为异常原因下线而设备无法感知。

  13. 客户端可以发送EAPOL-Logoff帧给设备端,主动要求下线。

  14. 设备端把端口状态从授权状态改变成未授权状态,并向客户端发送EAP-Failure报文。

图4 EAP终结认证流程

bb8f2b6a47dc09d15a7b7fdd3339ee0b.png

EAP终结方式与EAP中继方式的认证流程相比,不同之处在于步骤(4)中用来对用户密码信息进行加密处理的MD5 challenge由设备端生成,之后设备端会把用户名、MD5 challenge和客户端加密后的密码信息一起送给RADIUS服务器,进行相关的认证处理。

MAC旁路认证

MAC旁路认证可使802.1X认证系统中无法安装和使用802.1X客户端软件的终端,例如打印机等,以自身MAC地址作为用户名和密码进行认证。

802.1X认证过程中,设备端会首先触发用户采用802.1X认证方式,但若用户长时间内没有进行802.1X认证,则以用户的MAC地址为认证信息,把MAC地址作为用户名和密码上送认证服务器进行认证。

如图5所示,当设备端发出多次认证请求而终端没有响应后,将采用MAC旁路认证。

图5 MAC旁路认证示意图

44c7bb56ecd0edb3897d98ae7d0cf90d.png

  1. 在接入设备使能MAC旁路认证的接口上,接口收到用户终端的报文后,首先对该用户进行802.1X认证。

  2. 接入设备向终端发送一个Identity类型的请求帧(EAP-Request/Identity)要求用户的客户端程序发送输入的用户名。

  3. 如果在重传间隔内,接入设备未收到回应报文,会再次发送一个Identity类型的请求帧(EAP-Request/Identity)。

  4. 接入设备不断重复步骤2,直至收到用户终端的回应。当重传次数达到最大重传次数后,如果接入设备仍未收到回应,则向用户发送EAP请求失败报文。

  5. 此时,802.1X认证超时。接入设备将MAC认证用户名和密码发送到RADIUS服务器对该用户进行MAC认证。

  6. RADIUS服务器将收到的MAC认证用户名和密码与本地保存的用户名和密码进行比对,如果相同,则MAC认证成功,并向设备发送RADIUS认证接受报文。

802.1X授权

认证用于确认尝试接入网络的用户身份是否合法,而授权则用于指定身份合法的用户所能拥有的网络访问权限,即用户能够访问哪些资源。授权最基础也是最常使用的授权参数是VLAN、ACL和UCL组,此处以RADIUS授权进行说明。

VLAN

为了将受限的网络资源与未认证用户隔离,通常将受限的网络资源和未认证的用户划分到不同的VLAN。用户认证成功后,认证服务器将指定VLAN授权给用户。此时,设备会将用户所属的VLAN修改为授权的VLAN,授权的VLAN并不改变接口的配置。但是,授权的VLAN优先级高于用户配置的VLAN,即用户认证成功后生效的VLAN是授权的VLAN,用户配置的VLAN在用户下线后生效。RADIUS服务器授权VLAN时,必须同时使用以下RADIUS标准属性:

  • Tunnel-Type:必须配置为“VLAN”或“13”

  • Tunnel-Medium-Type:必须配置为“802”或“6”

  • Tunnel-Private-Group-ID:可以是VLAN ID、VLAN描述、VLAN名称和VLAN pool

ACL

用户认证成功后,认证服务器将指定ACL授权给用户,则设备会根据该ACL对用户报文进行控制。

  • 如果用户报文匹配到该ACL中动作为permit的规则,则允许其通过。

  • 如果用户报文匹配到该ACL中动作为deny的规则,则将其丢弃。

RADIUS服务器授权ACL方法:

  • 授权静态ACL:RADIUS服务器通过RADIUS标准属性Filter-Id将ACL ID授权给用户。为使授权的ACL生效,需要提前在设备上配置相应的ACL及规则。

  • 授权动态ACL:RADIUS服务器通过华为RADIUS扩展属性HW-Data-Filter将ACL ID及其ACL规则授权给用户。ACL ID及其ACL规则需要在RADIUS服务器上配置,设备上不需要配置。

用户组

用户组指具有相同角色、相同权限等属性的一组用户(终端)的集合。由于ACL资源有限,当每用户需要的授权ACL较多时,上线授权的用户数无法达到规格。通常情况下实际用户数很大,用户权限的分类比较少的,此时可以使用用户组,每一组用户复用ACL,以利用有限的ACL支持较大规格的用户进行ACL授权。

用户组可以在RADIUS服务器上配置,也可以在设备端配置(需在AAA域下应用)。如果用户希望使用RADIUS服务器下发的用户组授权,需要保证RADIUS服务器上下发的用户组在设备上已经配置(不需在AAA域下应用)。

RADIUS服务器下发用户组授权的方式和下发ACL ID的方式一样,都是用11号标准属性Filter-Id来携带,属性值填充用户组名称。11号属性将优先被当成ACL编号处理。当设备上不存在该ACL编号的时候,则当成用户组处理,如果设备上也不存在该用户组时,则授权失败。

RADIUS服务器下发的用户组授权优先级高于设备端配置的用户组授权,当服务器下发的用户组授权失败后,用户会采用设备端配置的用户组授权。

802.1X认证用户下线

当用户已下线,而接入设备和RADIUS服务器未感知到该用户已下线时,会产生以下问题:

  1. RADIUS服务器仍会对该用户进行计费,造成误计费。

  2. 存在非法用户仿冒合法用户IP地址和MAC地址接入网络的风险。

  3. 占用设备用户规格,已下线用户数量过多的时,可能会导致其他用户无法接入网络。

因此,接入设备要能够及时感知到用户已下线,删除该用户表项,并通知RADIUS服务器停止对该用户进行计费。

用户下线方式分为客户端主动下线,接入设备控制用户下线和服务器控制用户下线。

客户端主动下线

用户通过客户端软件发送EAPoL-Logoff报文主动下线,设备端会向客户端发一个EAP-Failure的报文,进而将端口状态由授权状态转换为非授权状态。

图6 客户端主动下线的交互流程

66a42a05ed7a3d503f9a51cbf4ab7592.png

接入设备控制用户下线

接入设备控制用户下线有两种方式:

  • 在接入设备上执行命令cut access-user强制指定用户下线。

  • 在接入设备上配置用户探测功能,用于探测用户是否在线。当用户在指定的时间内无响应,则认为用户下线,删除用户表项。

图7 用户下线探测流程

8533c625cc6731ddaf6c1ba73b44d893.png

假设用户的握手周期为3T。通过命令authentication timer handshake-period handshake-period配置。T=handshake-period/3。

  1. 用户发送任意报文触发802.1X认证,同时启动探测定时器。

  2. 在若干个T时间内,接入设备均能收到客户端流量,用户在线。

  3. 用户最后一次发送报文。在这个T时间结束时,由于有客户端流量,接入设备判断用户在线,并重启定时器。

  4. 接入设备在T时间内未收到客户端流量,发送第一次ARP请求,客户端无响应。

  5. T时间后,接入设备仍未收到客户端流量,发送第二次ARP请求,客户端无响应。

  6. T时间后,接入设备仍未收到客户端流量,探测失败,删除用户表项。

服务器控制用户下线

服务器控制用户下线有以下方式:

  • RADIUS服务器可通过DM报文(Disconnect Message)强制用户下线。DM(Disconnect Message)是指用户离线报文,即由RADIUS服务器端主动发起的强制用户下线的报文。

  • RADIUS服务器通过授权RADIUS标准属性Session-Timeout和Termination-Action。其中,Session-Timeout为用户在线时长定时器,Termination-Action属性值为0表示将用户下线。当用户在线的时长达到定时器指定的数值时,设备会将用户下线。

配置案例

企业中有线用户通过交换机接入,无线用户通过交换机下接的AP接入,用户需要经过802.1X、MAC认证后才能访问网络,由于认证服务器上不会存储AP的信息,配置AP不需要认证。

图8 组网图

6e1dcff87d3cc1f9175a6302e801c0c8.png

操作步骤

  • 汇聚交换机侧配置

1、创建并配置RADIUS服务器模板、AAA认证方案以及认证域。

# 创建并配置RADIUS服务器模板“rd1”。

[SwitchA] radius-server template rd1

[SwitchA-radius-rd1] radius-server authentication 192.168.100.100 1812

[SwitchA-radius-rd1] radius-server accounting 192.168.100.100 1813

[SwitchA-radius-rd1] radius-server shared-key cipher Huawei@2014

[SwitchA-radius-rd1] quit

# 创建AAA认证方案“abc”并配置认证方式为RADIUS。

[SwitchA] aaa

[SwitchA-aaa] authentication-scheme abc

[SwitchA-aaa-authen-abc] authentication-mode radius

[SwitchA-aaa-authen-abc] quit

# 配置计费方案“acco1”,通过计费报文维护终端的在线信息。

[SwitchA-aaa] accounting-scheme acco1

[SwitchA-aaa-accounting-acco1] accounting-mode radius

[SwitchA-aaa-accounting-acco1] accounting realtime 15 

[SwitchA-aaa-accounting-acco1] quit

# 创建认证域“isp”,并在其上绑定AAA认证方案“abc”、计费方案acco1与RADIUS服务器模板“rd1”。

[SwitchA-aaa] domain isp

[SwitchA-aaa-domain-isp] authentication-scheme abc

[SwitchA-aaa-domain-isp] accounting-scheme acco1

[SwitchA-aaa-domain-isp] radius-server rd1

[SwitchA-aaa-domain-isp] quit

[SwitchA-aaa] quit

# 配置全局默认域为“isp”。用户进行接入认证时,以格式“user@isp”输入用户名即可在isp域下进行aaa认证。如果用户名中不携带域名或携带的域名不存在,用户将会在默认域中进行认证。

[SwitchA] domain isp

2、配置AP不认证。

# 创建AAA认证方案“noauthen”并配置认证方式为none。

[SwitchA] aaa

[SwitchA-aaa] authentication-scheme noauthen

[SwitchA-aaa-authen-noauthen] authentication-mode none

[SwitchA-aaa-authen-noauthen] quit

# 创建AP的认证域。

[SwitchA-aaa] domain ap_noauthen

[SwitchA-aaa-domain-ap_noauthen] authentication-scheme noauthen

[SwitchA-aaa-domain-ap_noauthen] quit

[SwitchA-aaa] quit

# 配置用户上下文识别功能。

[SwitchA] access-context profile enable    //开启用户上下文识别功能

[SwitchA] access-context profile name ap_access    //创建用户上下文模板

[SwitchA-access-context-ap_access] if-match vlan-id 100    //配置基于VLAN的识别策略

[SwitchA-access-context-ap_access] quit

[SwitchA] access-author policy name ap_noauthen    //创建用户认证事件授权策略

[SwitchA-access-author-ap_noauthen] match access-context-profile ap_access action access-domain ap_noauthen    //配置匹配用户上下文模板的接入用户的认证域

[SwitchA-access-author-ap_noauthen] quit

[SwitchA] access-author policy ap_noauthen global    //应用用户认证事件授权策略

3、使能802.1X认证和MAC认证。

# 将NAC配置模式切换成统一模式。

[SwitchA] authentication unified-mode

说明:

设备默认为统一模式。传统模式与统一模式相互切换后,设备会自动重启。

# 配置MAC接入模板。

[SwitchA] mac-access-profile name m1

[SwitchA-mac-access-profile-m1] quit

[SwitchA-mac-access-profile-m1] quit

# 配置802.1X接入模板。

[SwitchA] dot1x-access-profile name d1

[Switch-dot1x-access-profile-d1] dot1x authentication-method eap

[SwitchA-dot1x-access-profile-d1] quit

# 在认证模板“p1”下绑定MAC接入模板、802.1X接入模板和Portal接入模板。

[SwitchA] authentication-profile name p1

[SwitchA-authen-profile-p1] mac-access-profile m1

[SwitchA-authen-profile-p1] dot1x-access-profile d1

# 使能MAC旁路认证功能和认证强制域。

[SwitchA-authen-profile-p1] authentication dot1x-mac-bypass

[SwitchA-authen-profile-p1] quit

# 在接口GE1/0/1绑定认证模板。

[SwitchA] interface gigabitethernet 1/0/1

[SwitchA-Gigabitethernet1/0/1] authentication-profile p1

[SwitchA-Gigabitethernet1/0/1] quit

  • 接入交换机侧配置

# 在SwitchC上配置802.1X报文透传功能、创建VLAN并配置接口允许通过的VLAN。

说明:

SwitchC作为二层交换机,为保证用户能够通过802.1X认证,需在SwitchC上配置802.1X报文透传功能。

​<SwitchC> system-view

[SwitchC] l2protocol-tunnel user-defined-protocol 802.1X protocol-mac 0180-c200-0003 group-mac 0100-0000-0002

[SwitchC] interface gigabitethernet 0/0/1

[SwitchC-GigabitEthernet0/0/1] l2protocol-tunnel user-defined-protocol 802.1X enable

[SwitchC-GigabitEthernet0/0/1] bpdu enable

[SwitchC-GigabitEthernet0/0/1] quit

[SwitchC] interface gigabitethernet 0/0/2

[SwitchC-GigabitEthernet0/0/2] l2protocol-tunnel user-defined-protocol 802.1X enable

[SwitchC-GigabitEthernet0/0/2] bpdu enable

[SwitchC-GigabitEthernet0/0/2] quit

[SwitchC] interface gigabitethernet 0/0/3

[SwitchC-GigabitEthernet0/0/3] l2protocol-tunnel user-defined-protocol 802.1X enable

[SwitchC-GigabitEthernet0/0/3] bpdu enable

 

;