RADIUS如何工作
RADIUS概述
AAA可以通过多种协议来实现,在实际应用中,最常使用RADIUS协议。
RADIUS是一种分布式的、客户端/服务器结构的信息交互协议,能保护网络不受未授权访问的干扰,常应用在既要求较高安全性、又允许远程用户访问的各种网络环境中。该协议定义了基于UDP(User Datagram Protocol)的RADIUS报文格式及其传输机制,并规定UDP端口1812、1813分别作为默认的认证、计费端口。
RADIUS最初仅是针对拨号用户的AAA协议,后来随着用户接入方式的多样化发展,RADIUS也适应多种用户接入方式,如以太网接入等。它通过认证授权来提供接入服务,通过计费来收集、记录用户对网络资源的使用。
RADIUS协议的主要特征如下:
- 客户端/服务器模式
- 安全的消息交互机制
- 良好的扩展性
客户端/服务器模式
- RADIUS客户端
一般位于网络接入服务器NAS(Network Access Server)上,可以遍布整个网络,负责传输用户信息到指定的RADIUS服务器,然后根据从服务器返回的信息进行相应处理(如接受/拒绝用户接入)。
设备作为RADIUS协议的客户端,实现以下功能:
- 支持标准RADIUS协议及扩充属性,包括RFC2865、RFC2866。
- 支持华为RADIUS扩展属性。
- 对RADIUS服务器状态探测功能。
- 计费结束请求报文的本地缓存重传功能。
- RADIUS服务器主备或负载分担功能。
- RADIUS服务器
一般运行在中心计算机或工作站上,维护相关的用户认证和网络服务访问信息,负责接收用户连接请求并认证用户,然后给客户端返回所有需要的信息(如接受/拒绝认证请求)。RADIUS服务器通常要维护三个数据库,如图1-1所示。
- Users:用于存储用户信息(如用户名、密码以及使用的协议、IP地址等配置信息)。
- Clients:用于存储RADIUS客户端的信息(如共享密钥、IP地址等)。
- Dictionary:用于存储RADIUS协议中的属性和属性值含义的信息。
安全的消息交互机制
RADIUS客户端和RADIUS服务器之间认证消息的交互是通过共享密钥的参与来完成的。共享密钥是一个带外传输的、客户端和服务器都知道的字符串,不需要单独进行网络传输。RADIUS报文中有一个16字节的验证字字段,它包含了对整个报文的数字签名数据,该签名数据是在共享密钥的参与下利用MD5算法计算得出。收到RADIUS报文的一方要验证该签名的正确性,如果报文的签名不正确,则丢弃它。通过这种机制,保证了RADIUS客户端和RADIUS服务器之间信息交互的安全性。另外,为防止用户密码在不安全的网络上传递时被窃取,在RADIUS报文传输过程中还利用共享密钥对用户密码进行了加密。
良好的扩展性
RADIUS报文是由报文头和一定数目的属性(Attribute)构成,新属性的加入不会破坏协议的原有实现。
RADIUS报文介绍
RADIUS报文格式
RADIUS协议是基于UDP协议的,RADIUS报文格式如图1-2所示。
各字段的解释如下:
- Code:长度为1个字节,用来说明RADIUS报文的类型。不同RADIUS报文的Code值不相同。例如,Code为1时表示Access-Request报文,Code为2时表示Access-Accept报文。
- Identifier:长度为1个字节,用来匹配请求报文和响应报文,以及检测在一段时间内重发的请求报文。RADIUS客户端发送请求报文后,RADIUS服务器返回的响应报文中的Identifier值应与请求报文中的Identifier值相同。
- Length:长度为2个字节,用来指定RADIUS报文的长度。超过Length取值的字节将作为填充字符而忽略。如果接收到的报文的实际长度小于Length的取值,则该报文会被丢弃。
- Authenticator:长度为16个字节,用来验证RADIUS服务器的响应报文,同时还用于用户密码的加密。
- Attribute:即RADIUS属性字段,长度不定,为报文的内容主体,用来携带专门的认证、授权和计费信息,提供请求和响应报文的配置细节。Attribute可以包括多个RADIUS属性,每一个RADIUS属性都采用(Type、Length、Value)三元组的结构来表示。
- 类型(Type):长度为1个字节,取值为1~255,用于表示RADIUS属性的编号。
- 长度(Length):长度为1个字节,表示该RADIUS属性(包括类型、长度和属性值)的长度,单位为字节。
- 属性值(Value):最大长度为253字节,表示该RADIUS属性的信息,其格式和内容由类型和长度决定。
RADIUS报文类型
目前RADIUS定义了十六种报文类型,其中认证报文类型如表1-1所示,计费报文类型如表1-2所示,RADIUS CoA/DM报文请参见RADIUS CoA/DM。
报文名称 |
说明 |
---|---|
Access-Request |
认证请求报文,是RADIUS报文交互过程中的第一个报文,用来携带用户的认证信息(例如:用户名、密码等)。认证请求报文由RADIUS客户端发送给RADIUS服务器,RADIUS服务器根据该报文中携带的用户信息判断是否允许接入。 |
Access-Accept |
认证接受报文,是RADIUS服务器对RADIUS客户端发送的Access-Request报文的接受响应报文。如果Access-Request报文中的所有属性都可以接受(即认证通过),则发送该类型报文。RADIUS客户端收到此报文后,用户才能认证通过并被赋予相应的权限。 |
Access-Reject |
认证拒绝报文,是RADIUS服务器对RADIUS客户端的Access-Request报文的拒绝响应报文。如果Access-Request报文中的任何一个属性不可接受(即认证失败),则RADIUS服务器返回Access-Reject报文,用户认证失败。 |
Access-Challenge |
认证挑战报文。EAP中继认证时,RADIUS服务器接收到Access-Request报文中携带的用户名信息后,会随机生成一个MD5挑战字,同时将此挑战字通过Access-Challenge报文发送给用户。用户使用该挑战字对用户密码进行加密处理后,将新的用户密码信息通过Access-Request报文发送给RADIUS服务器。RADIUS服务器将收到的已加密的密码信息和本地经过加密运算后的密码信息进行对比,如果相同,则该用户为合法用户。 |
报文名称 |
说明 |
---|---|
Accounting-Request(Start) |
计费开始请求报文。如果RADIUS客户端使用RADIUS模式进行计费,RADIUS客户端会在用户开始访问网络资源时,向RADIUS服务器发送计费开始请求报文。 |
Accounting-Response(Start) |
计费开始响应报文。RADIUS服务器接收并成功记录计费开始请求报文后,需要回应一个计费开始响应报文。 |
Accounting-Request(Interim-update) |
实时计费请求报文。为避免RADIUS服务器无法收到计费结束请求报文而继续对该用户计费,可以在RADIUS客户端上配置实时计费功能。RADIUS客户端定时向RADIUS服务器发送实时计费请求报文,减少计费误差。 |
Accounting-Response(Interim-update) |
实时计费响应报文。RADIUS服务器接收并成功记录实时计费请求报文后,需要回应一个实时计费响应报文。 |
Accounting-Request(Stop) |
计费结束请求报文。当用户断开连接时(连接也可以由NAS断开),RADIUS客户端向RADIUS服务器发送计费结束请求报文,其中包括用户上网所使用的网络资源的统计信息(上网时长、进/出的字节数等),请求RADIUS服务器停止计费。 |
Accounting-Response(Stop) |
计费结束响应报文。RADIUS服务器接收计费停止请求报文后,需要回应一个计费停止响应报文。 |
RADIUS认证、授权、计费流程
设备作为RADIUS客户端,负责收集用户信息(例如:用户名、密码等),并将这些信息发送到RADIUS服务器。RADIUS服务器则根据这些信息完成用户身份认证以及认证通过后的用户授权和计费。用户、RADIUS客户端和RADIUS服务器之间的交互流程如图1-3所示。
- 当用户接入网络时,用户发起连接请求,向RADIUS客户端(即设备)发送用户名和密码。
- RADIUS客户端向RADIUS服务器发送包含用户名和密码信息的认证请求报文。
- RADIUS服务器对用户身份的合法性进行检验:
- 如果用户身份合法,RADIUS服务器向RADIUS客户端返回认证接受报文,允许用户进行下一步动作。由于RADIUS协议合并了认证和授权的过程,因此认证接受报文中也包含了用户的授权信息。
- 如果用户身份不合法,RADIUS服务器向RADIUS客户端返回认证拒绝报文,拒绝用户访问接入网络。
- RADIUS客户端通知用户认证是否成功。
- RADIUS客户端根据接收到的认证结果接入/拒绝用户。如果允许用户接入,则RADIUS客户端向RADIUS服务器发送计费开始请求报文。
- RADIUS服务器返回计费开始响应报文,并开始计费。
- 用户开始访问网络资源。
- (可选)在使能实时计费功能的情况下,RADIUS客户端会定时向RADIUS服务器发送实时计费请求报文,以避免因付费用户异常下线导致的不合理计费。
- (可选)RADIUS服务器返回实时计费响应报文,并实时计费。
- 用户发起下线请求,请求停止访问网络资源。
- RADIUS客户端向RADIUS服务器提交计费结束请求报文。
- RADIUS服务器返回计费结束响应报文,并停止计费。
- RADIUS客户端通知用户访问结束,用户结束访问网络资源。
RADIUS CoA/DM
设备支持RADIUS CoA/DM功能,提供一种动态修改在线用户权限或者强制用户下线的机制。本节介绍的内容包括:
RADIUS CoA/DM报文
CoA/DM报文类型如表1-3所示。
报文名称 |
说明 |
---|---|
CoA-Request |
动态授权请求报文。当管理员需要更改某个在线用户的权限时(例如,管理员不希望用户访问某个网站),可以通过RADIUS服务器发送一个动态授权请求报文给RADIUS客户端,使RADIUS客户端修改在线用户的权限。 |
CoA-ACK |
动态授权请求接受报文。如果RADIUS客户端成功更改了用户的权限,则RADIUS客户端回应动态授权请求接受报文给RADIUS服务器。 |
CoA-NAK |
动态授权请求拒绝报文。如果RADIUS客户端未成功更改用户的权限,则RADIUS客户端回应动态授权请求拒绝报文给RADIUS服务器。 |
DM-Request |
用户离线请求报文。当管理员需要让某个在线的用户下线时,可以通过RADIUS服务器发送一个用户离线请求报文给RADIUS客户端,使RADIUS客户端终结用户的连接。 |
DM-ACK |
用户离线请求接受报文。如果RADIUS客户端已经切断了用户的连接,则RADIUS客户端回应用户离线请求接受报文给RADIUS服务器。 |
DM-NAK |
用户离线请求拒绝报文。如果RADIUS客户端无法切断用户的连接,则RADIUS客户端回应用户离线请求拒绝报文给RADIUS服务器。 |
交互流程
CoA(Change of Authorization)是指用户认证成功后,管理员可以通过RADIUS协议来修改在线用户的权限或对其进行重认证。CoA的报文交互流程如图1-4所示。
- RADIUS服务器根据业务信息,向设备发送CoA-Request报文,请求更改用户的授权信息。该报文中可以包括ACL规则等授权。
- 设备收到CoA-Request报文后,与设备上的用户信息匹配来识别用户。如果匹配成功,则更改用户的授权信息;如果匹配失败,则保持用户原有授权信息。
- 设备回应CoA-ACK/NAK报文。
- 如果更改成功,则设备向RADIUS服务器回应CoA-ACK报文。
- 如果更改失败,则设备向RADIUS服务器回应CoA-NAK报文。
DM(Disconnect Message)是指用户下线报文,即由RADIUS服务器主动发起的强制用户下线的报文。DM的报文交互流程如图1-5所示。
- 管理员在RADIUS服务器上强制用户下线,RADIUS服务器向设备发送DM-Request报文,请求用户下线。
- 设备收到DM-Request报文后,与设备上的用户信息匹配来识别用户。如果匹配成功,则通知用户下线;如果匹配失败,则用户保持在线。
- 设备回应DM-ACK/NAK报文。
- 如果用户成功下线,设备给RADIUS服务器回应DM-ACK报文。
- 如果用户未下线,设备给RADIUS服务器回应DM-NAK报文。
与用户上线授权或用户主动下线过程相比,CoA/DM的特点是请求报文是由服务器发送的,回应报文是由设备发送的,成功则回应ACK报文、失败则回应NAK报文。
会话识别
NAS设备为用户提供的每一个服务构成一个会话,会话的开头定义为首次提供服务的点,会话的结束定义为服务结束点。
设备接收到RADIUS服务器的CoA-Request报文或者DM-Request报文后,根据报文中的某些RADIUS属性来识别用户。用来识别用户的RADIUS属性包括:
- RADIUS标准属性:User-Name(1)
- RADIUS标准属性:Acct-Session-ID(4)
- RADIUS标准属性:Framed-IP-Address(8)
- RADIUS标准属性:Calling-Station-Id(31)
匹配的方式包括以下两种:
- any方式
其中一个属性与设备上的用户信息进行匹配检查。识别用户所用的RADIUS属性优先级为:Acct-Session-ID(4) > Calling-Station-Id(31) > Framed-IP-Address(8)。按照优先级在请求报文中查找属性,优先找到哪个属性就用哪个属性与设备上的用户信息进行匹配,匹配成功时,设备回应ACK报文,否则回应NAK报文。
- all方式
所有的属性与设备上的用户信息进行匹配检查。识别用户所用的RADIUS属性包括:Acct-Session-ID(4)、Calling-Station-Id(31)、Framed-IP-Address(8)和User-Name(1)。请求报文中以上属性都要与设备上的用户信息进行匹配,全部匹配成功时,设备回应ACK报文,否则回应NAK报文。
错误码说明
RADIUS服务器的CoA-Request报文或DM-Request报文与设备上的用户信息匹配失败时,设备会在回应的CoA-NAK报文或DM-NAK报文中通过错误码描述失败的原因。错误码介绍请参见表1-4和表1-5。
名称 |
数值 |
说明 |
---|---|---|
RD_DM_ERRCODE_MISSING_ATTRIBUTE |
402 |
请求报文中缺少关键属性,导致RADIUS属性完整性检查失败 |
RD_DM_ERRCODE_INVALID_REQUEST |
404 |
对请求报文进行属性解析时,解析失败 |
RD_DM_ERRCODE_INVALID_ATTRIBUTE_VALUE |
407 |
请求报文中包含不支持或不存在的属性,导致属性检查失败。 授权检查的内容包括:VLAN、ACL、CAR、重定向ACL编号以及基于接口的认证用户不支持授权华为RADIUS扩展属性RD_hw_URL_Flag和RD_hw_Portal_URL 可能出现的错误包括:
|
RD_DM_ERRCODE_SESSION_CONTEXT_NOT_FOUND |
503 |
会话请求失败。包括:
|
RD_DM_ERRCODE_RESOURCES_UNAVAILABLE |
506 |
其他授权失败的情况使用该错误码 |