什么是RADIUS?
RADIUS(Remote Authentication Dial In User Service,远程用户拨号认证)协议是一种分布式的、客户端/服务器结构的信息交互协议,能保护网络不受未授权访问的干扰,常应用在既要求较高安全性、又允许远程用户访问的各种网络环境中。RADIUS协议为标准协议,基本所有主流设备均支持,在实际网络中应用最多。RADIUS使用UDP(User Datagram Protocol,用户数据报协议)作为传输协议,具有良好的实时性;同时也支持重传机制和备用服务器机制,具有较好的可靠性;实现较为简单,适用于大用户量时服务器端的多线程结构。
为什么需要RADIUS?
AAA是Authentication(认证)、Authorization(授权)和Accounting(计费)的简称,提供了在NAS(Network Access Server,网络接入服务器)设备上配置访问控制的管理框架,它决定哪些用户能够访问网络,具有访问权的用户能够访问哪些资源或者得到哪些服务,以及如何对正在使用网络资源的用户进行计费。AAA可以通过多种协议实现,在实际应用中,最常使用RADIUS协议。
RADIUS是用于NAS与AAA服务器间通信的一种协议。RADIUS协议最初用来管理使用串口和调制解调器的大量分散用户,后来广泛应用于NAS系统。当用户想要通过某个网络(如电话网络)与NAS建立连接从而取得访问其他网络的权利或取得使用某些网络资源的权利时,NAS起到了认证用户或对应连接的作用。NAS负责把用户的认证、授权和计费信息传递给RADIUS服务器。RADIUS协议规定了NAS与RADIUS服务器之间如何传递用户信息和计费信息。RADIUS服务器负责接收用户的连接请求,完成认证,并把用户所需的配置信息返回给NAS。
RADIUS有哪些特点?
RADIUS协议具备如下三个特点。
- 服务器/客户端结构
- 安全的消息交互机制
- 良好的扩展性。
客户端/服务器结构
RADIUS协议采用典型的客户端/服务器结构。这种结构既具有良好的可扩展性,又便于用户信息的集中管理。
RADIUS客户端
一般位于NAS设备上,可以遍布整个网络,负责传输用户信息到指定的RADIUS服务器,然后根据从服务器返回的信息进行相应处理(如接受/拒绝用户接入)。
RADIUS协议的客户端能够实现以下功能:
- 支持标准RADIUS协议及扩展属性。
- 支持华为RADIUS扩展属性。
- 对RADIUS服务器状态探测功能。
- RADIUS服务器的自动切换功能。
- 计费报文的本地缓存重传功能。
- RADIUS服务器主备或负载分担功能。
RADIUS服务器
一般运行在中心计算机或工作站上,维护相关的用户认证和网络服务访问信息,负责接收用户连接请求并认证用户,然后给客户端返回所有需要的信息(如接受/拒绝认证请求)。一个RADIUS服务器可以同时对应多个RADIUS客户端。
RADIUS服务器通常要维护三个数据库,如下图所示。
RADIUS服务器的组成
- Users:用于存储用户信息(如用户名、密码以及使用的协议、IP地址等配置信息)。
- Clients:用于存储RADIUS客户端的信息(如共享密钥、IP地址等)。
- Dictionary:用于存储RADIUS协议中的属性和属性值含义的信息。
安全的消息交互机制
RADIUS客户端和RADIUS服务器之间认证消息的交互是通过共享密钥的参与来完成的。共享密钥是一个客户端和服务器都知道的字符串,不需要单独进行网络传输。RADIUS报文中有一个16字节的验证字字段,它包含了对整个报文的数字签名数据,该签名数据是在共享密钥的参与下利用MD5算法计算得出。收到RADIUS报文的一方要验证该签名的正确性,如果报文的签名不正确,则丢弃它。通过这种机制,保证了RADIUS客户端和RADIUS服务器之间信息交互的安全性。
另外,为防止用户密码在不安全的网络上传递时被窃取,在RADIUS报文传输过程中还利用共享密钥对用户密码进行了加密。
良好的扩展性
RADIUS属性即RADIUS报文中的Attribute字段,用来携带专门的认证、授权和计费信息。RADIUS报文是由报文头和一定数目的属性构成,新属性的加入不会破坏协议的原有实现。
RADIUS是如何工作的?
RADIUS认证、授权、计费
RADIUS协议支持AAA中的认证、授权和计费三个组件。由于定义RADIUS协议的时间早于AAA框架模型,所以RADIUS协议并没有将认证和授权分开,而是将认证和授权在同一个流程中进行处理。RADIUS认证和计费可以在不同的服务器上进行。
RADIUS客户端负责收集用户信息(例如:用户名、密码等),并将这些信息发送到RADIUS服务器。RADIUS服务器则根据这些信息完成用户身份认证以及认证通过后的用户授权和计费。用户、RADIUS客户端和RADIUS服务器之间的交互流程如下图所示。
RADIUS认证、授权和计费的交互流程
- 当用户接入网络时,用户发起连接请求,向RADIUS客户端发送用户名和密码。
- RADIUS客户端向RADIUS服务器发送包含用户名和密码信息的认证请求报文。
- RADIUS服务器对用户身份的合法性进行检验:
- 如果用户身份合法,RADIUS服务器向RADIUS客户端返回认证接受报文,允许用户进行下一步动作。由于RADIUS协议合并了认证和授权的过程,因此认证接受报文中也包含了用户的授权信息。
- 如果用户身份不合法,RADIUS服务器向RADIUS客户端返回认证拒绝报文,拒绝用户访问接入网络。
- RADIUS客户端通知用户认证是否成功。
- RADIUS客户端根据接收到的认证结果接入/拒绝用户。如果允许用户接入,则RADIUS客户端向RADIUS服务器发送计费开始请求报文。
- RADIUS服务器返回计费开始响应报文,并开始计费。
- 用户开始访问网络资源。
- (可选)在使能实时计费功能的情况下,RADIUS客户端会定时向RADIUS服务器发送实时计费请求报文,以避免因付费用户异常下线未发送计费结束请求报文导致的不合理计费。发送实时计费报文的时间间隔可以在客户端上进行配置。
- (可选)RADIUS服务器返回实时计费响应报文,并实时计费。
- 用户发起下线请求,请求停止访问网络资源。
- RADIUS客户端向RADIUS服务器提交计费结束请求报文。
- RADIUS服务器返回计费结束响应报文,并停止计费。
- RADIUS客户端通知用户访问结束,用户结束访问网络资源。
RADIUS动态授权
RADIUS协议支持CoA(Change of Authorization,授权变更)功能。用户认证成功后,RADIUS服务器能够通过RADIUS协议修改在线用户的权限。CoA报文包含CoA-Request、CoA-ACK和CoA-NAK三种类型,分别为动态授权请求报文、动态授权请求接收报文和动态授权请求拒绝报文。CoA的报文交互流程如下图所示。
CoA的报文交互流程
- RADIUS服务器根据业务信息,向RADIUS客户端发送CoA-Request报文,请求更改用户的授权信息。该报文中可以包括ACL规则等授权。
- RADIUS客户端收到CoA-Request报文后,与RADIUS客户端上的用户信息匹配来识别用户。如果匹配成功,则更改用户的授权信息;如果匹配失败,则保持用户原有授权信息。
- RADIUS客户端回应CoA-ACK/NAK报文。
- 如果更改成功,则RADIUS客户端向RADIUS服务器回应CoA-ACK报文。
- 如果更改失败,则RADIUS客户端向RADIUS服务器回应CoA-NAK报文。
RADIUS强制用户下线
RADIUS协议也支持DM(Disconnect Message,断开连接消息)功能。用户上线后,管理员在RADIUS服务器主动发起的使用户下线的报文,强制用户下线。DM报文同样分为三种类型:DM-Request、DM-ACK和DM-NAK,分别表示用户离线请求报文、用户离线请求接受报文和用户离线请求拒绝报文。DM的报文交互流程如下图所示。
DM的报文交互流程
- 管理员在RADIUS服务器上使用户下线,RADIUS服务器向RADIUS客户端发送DM-Request报文,请求用户下线。
- RADIUS客户端收到DM-Request报文后,与RADIUS客户端上的用户信息匹配来识别用户。如果匹配成功,则通知用户下线;如果匹配失败,则用户保持在线。
- RADIUS客户端回应DM-ACK/NAK报文。
- 如果用户成功下线,RADIUS客户端给RADIUS服务器回应DM-ACK报文。
- 如果用户未下线,RADIUS客户端给RADIUS服务器回应DM-NAK报文。
与用户上线授权或用户主动下线过程相比,CoA/DM的特点是请求报文是由服务器发送的,回应报文是由客户端发送的,成功则回应ACK报文、失败则回应NAK报文。
RADIUS如何保证传输的可靠性?
RADIUS协议采用UDP协议来保证数据传输的实时性,但在网络条件不好的情况下,UDP可能会带来传输过程中的丢包问题。为了提高数据传输的可靠性,RADIUS支持备用服务器机制和重传机制。
RADIUS备用服务器机制
大型网络中通常会部署多台RADIUS服务器,这样做的目的一是为了在一台服务器故障的情况下,不会影响用户接入;二是为了在大量用户接入时,多个服务器之间能够负载均衡,单个服务器的资源不会被耗尽。当RADIUS服务器模板中配置了多个服务器,RADIUS客户端在向服务器发送报文时,可以根据主备算法或负载分担算法选择RADIUS服务器。
主备模式
RADIUS服务器模板支持配置一个主服务器和零个或多个备份服务器。当主服务器存在并且处于活跃状态时,RADIUS客户端选择主服务器处理用户请求,否则选择备份服务器处理用户请求。RADIUS客户端接收到AAA请求时,首先判断主服务器是否存在并且处于Up状态。如果存在且处于Up状态,选择主服务器处理请求报文,否则选择第一个备份服务器处理用户请求报文。
负载分担模式
在负载分担模式下,可以使更多的RADIUS服务器得到有效利用,可以更快地处理更多用户的请求。选择负载均衡算法后,RADIUS客户端在向服务器发送认证或计费报文时,会根据配置RADIUS认证服务器或RADIUS计费服务器时的权重来分配报文发送的服务器。
RADIUS报文重传机制
用户认证过程中,RADIUS客户端会发送认证请求报文到RADIUS服务器。为避免由于网络故障、时延等原因导致设备无法收到服务器的回应报文,设备在发送认证请求报文到服务器时具有超时重传机制。在超时时间范围内,客户端没有接收到服务器的应答报文,客户端将重新发送请求报文。在配置的重传次数范围内,客户端将请求报文发给相同的服务器。如果还不能收到响应,客户端将报文发给不同的服务器处理,无论是主备模式还是负载分担模式。RADIUS客户端支持为服务器组和服务器组中的服务器配置重传时间和响应超时时间。
RADIUS 和 HWTACACS有哪些不同?
TACACS(Terminal Access Controller Access-Control System,终端访问控制器控制系统)是一种起源于二十世纪八十年代的AAA协议。华为公司在TACACS协议的基础上进行了增强,开发了HWTACACS协议。HWTACACS是一种集中式的、客户端/服务器结构的信息交互协议。HWTACACS协议与RADIUS类似,采用客户端/服务器模式实现用户的认证、授权和计费。但与RADIUS协议不同,HWTACACS协议使用TCP提供可靠传输,且将认证和授权分离。HWTACACS协议具有更加可靠的传输和加密特性,更加适用于安全控制。
RADIUS协议与HWTACACS协议的主要区别如下图所示。
RADIUS协议与HWTACACS协议对比