RADIUS简介
Radius概述
RADIUS(Remote Authentication Dial-In User Server,远程认证拨号用户服务)是一种分布式的、C/S架构的信息交互协议,能包含网络不受未授权访问的干扰,常应用在既要求较高安全性、又允许远程用户访问的各种网络环境中。
协议定义了基于UDP(User Datagram Protocol)的RADIUS报文格式及其传输机制,并规定UDP端口1812、1813分别作为认证、计费端口。
如果是思科设备:认证和授权端口为UDP1645,计费端口1646.
RADIUS最初仅是针对拨号用户的AAA协议,后来随着用户接入方式的多样化发展,RADIUS也适应多种用户接入方式,如以太网接入等。它通过认证授权来提供接入服务,通过计费来收集、记录用户对网络资源的使用
Radius架构(c/s模式)
- radius客户端:一般位于网络接入服务器NAS(Network Access Server)上,可以遍布整个网络,负责传输用户信息到指定的RADIUS服务器,然后根据从服务器返回的信息进行相应处理(如接受/拒绝用户接入)
- 设备作为RADIUS协议的客户端,实现以下功能:
支持标准RADIUS协议及扩充属性,包括RFC(Request For Comments)2865、RFC2866。
支持华为扩展的私有属性。
对RADIUS服务器状态的主动探测功能。
计费结束报文的本地缓存重传功能。
RADIUS服务器的自动切换功能。
- radius服务器:一般运行在中心计算机或工作站上,维护相关的用户认证和网络服务访问信息,负责接收用户连接请求并认证用户,然后给客户端返回所有需要的信息(如接受/拒绝认证请求)。RADIUS服务器通常要维护三个数据库。
Users:用于存储用户信息(如用户名、口令以及使用的协议、IP地址等配置信息)。
Clients:用于存储RADIUS客户端的信息(如接入设备的共享密钥、IP地址等)。
Dictionary:用于存储RADIUS协议中的属性和属性值含义的信息。
Radius特点
- 网络安全:RADIUS客户端和RADIUS服务器之间认证消息的交互是通过共享密钥的参与来完成的,并且共享密钥不能通过网络来传输,增强了信息交互的安全性。另外,为防止用户密码在不安全的网络上传递时被窃取,RADIUS协议利用共享密钥对RADIUS报文中的密码进行了加密。
- 良好的扩展性:RADIUS报文是由包头和一定数目的属性(Attribute)构成,新属性的加入不会破坏协议的原有实现。
Radius报文
各字段解释:
- Code:长度为1个字节,用来说明RADIUS报文的类型。
- Identifier:长度为1个字节,用来匹配请求报文和响应报文,以及检测在一段时间内重发的请求报文。客户端发送请求报文后,服务器返回的响应报文中的Identifier值应与请求报文中的Identifier值相同。
- Length:长度为2个字节,用来指定RADIUS报文的长度。超过Length取值的字节将作为填充字符而忽略。如果接收到的报文的实际长度小于Length的取值,则该报文会被丢弃。
- Authenticator:长度为16个字节,用来验证RADIUS服务器的响应报文,同时还用于用户密码的加密。
- Attribute:不定长度,为报文的内容主体,用来携带专门的认证、授权和计费信息,提供请求和响应报文的配置细节。Attribute可以包括多个属性,每一个属性都采用(Type、Length、Value)三元组的结构来表示。
Radius认证报文
报文名称 | 说明 |
---|---|
Access-Request | 认证请求报文,是RADIUS报文交互过程中的第一个报文,用来携带用户的认证信息(例如:用户名、密码等)。认证请求报文由RADIUS客户端发送给RADIUS服务器,RADIUS服务器根据该报文中携带的用户信息判断是否允许接入。 |
Access-Accept | 认证接受报文,是服务器对客户端发送的Access-Request报文的接受响应报文。如果Access-Request报文中的所有属性都可以接受(即认证通过),则发送该类型报文。客户端收到此报文后,认证用户才能认证通过并被赋予相应的权限。 |
Access-Reject | 认证拒绝报文,是服务器对客户端的Access-Request报文的拒绝响应报文。如果Access-Request报文中的任何一个属性不可接受(即认证失败),则RADIUS服务器返回Access-Reject报文,用户认证失败。 |
Access-Challenge | 认证挑战报文。EAP认证时,RADIUS服务器接收到Access-Request报文中携带的用户名信息后,会随机生成一个MD5挑战字,同时将此挑战字通过Access-Challenge报文发送给客户端。客户端使用该挑战字对用户密码进行加密处理后,将新的用户密码信息通过Access-Request报文发送给RADIUS服务器。RADIUS服务器将收到的已加密的密码信息和本地经过加密运算后的密码信息进行对比,如果相同,则该用户为合法用户。 |
Radius计费报文
报文名称 | 说明 |
---|---|
Accounting-Request(Start) | 计费开始请求报文。如果客户端使用RADIUS模式进行计费,客户端会在用户开始访问网络资源时,向服务器发送计费开始请求报文 |
Accounting-Response(Start) | 计费开始响应报文。服务器接收并成功记录计费开始请求报文后,需要回应一个计费开始响应报文 |
Accounting-Request(Interim-update) | 实时计费请求报文。为避免计费服务器无法收到计费停止请求报文而继续对该用户计费,可以在客户端上配置实时计费功能。客户端定时向服务器发送实时计费报文,减少计费误差 |
Accounting-Response(Interim-update) | 实时计费响应报文。服务器接收并成功记录实时计费请求报文后,需要回应一个实时计费响应报文 |
Accounting-Request(Stop) | 计费结束请求报文。当用户断开连接时(连接也可以由接入服务器断开),客户端向服务器发送计费结束请求报文,其中包括用户上网所使用的网络资源的统计信息(上网时长、进/出的字节数等),请求服务器停止计费 |
Accounting-Response(Stop) | 计费结束响应报文。服务器接收计费停止请求报文后,需要回应一个计费停止响应报文 |
Radius授权报文
报文名称 | 说明 |
---|---|
CoA-Request | 动态授权请求报文。当管理员需要更改某个在线用户的权限时(例如,管理员不希望用户访问某个网站),可以通过服务器发送一个动态授权请求报文给客户端,使客户端修改在线用户的权限 |
CoA-ACK | 动态授权请求接受报文。如果客户端成功更改了用户的权限,则客户端回应动态授权请求接受报文给服务器 |
CoA-NAK | 动态授权请求拒绝报文。如果客户端未成功更改用户的权限,则客户端回应动态授权请求拒绝报文给服务器 |
DM-Request | 用户离线请求报文。当管理员需要让某个在线的用户下线时,可以通过服务器发送一个用户离线请求报文给客户端,使客户端终结用户的连接 |
DM-ACK | 用户离线请求接受报文。如果客户端已经切断了用户的连接,则客户端回应用户离线请求接受报文给服务器 |
DM-NAK | 用户离线请求拒绝报文。如果客户端无法切断用户的连接,则客户端回应用户离线请求拒绝报文给服务器 |
- CoA:(Change of Authorization)是指用户认证成功后,管理员可以通过RADIUS协议来修改在线用户的权限
- DM:(Disconnect Message)是指用户离线报文,即由RADIUS服务器端主动发起的强迫用户下线的报文
Radius工作原理
- radius认证、授权、计费
- 接入设备作为RADIUS客户端,负责收集用户信息(例如:用户名、密码等),并将这些信息发送到RADIUS服务器。RADIUS服务器则根据这些信息完成用户身份认证以及认证通过后的用户授权和计费。用户、RADIUS客户端和RADIUS服务器之间的交互流程如下: