RADIUS( Remote Authentication Dial-In User Service,远程认证拨号用户服务)是一种用于实现AAA( Authentication, Authorization and Accounting,认证、授权和计费)的协议。
RADIUS 简介
RADIUS 是一种分布式的、 客户端/服务器结构的信息交互协议, 能保护网络不受未授权访问的干扰,常应用在既要求较高安全性、又允许远程用户访问的各种网络环境中。该协议定义了基于 UDP 的RADIUS 帧格式及其消息传输机制,并规定 UDP 端口 1812、 1813 分别作为认证、计费端口。RADIUS 最初仅是针对拨号用户的 AAA 协议,后来随着用户接入方式的多样化发展, RADIUS 也适应多种用户接入方式,如以太网接入、 ADSL 接入。它通过认证授权来提供接入服务,通过计费来收集、记录用户对网络资源的使用。
客户端/服务器模式
· 客户端: RADIUS 客户端一般位于 NAS 设备上,可以遍布整个网络,负责传输用户信息到指定的 RADIUS 服务器,然后根据从服务器返回的信息进行相应处理(如接受/拒绝用户接入)。
· 服务器: RADIUS 服务器运行在中心计算机或工作站上,维护相关的用户认证和网络服务访问信息,负责接收用户连接请求并认证用户,然后给客户端返回所有需要的信息(如接受/拒绝认证请求)。
RADIUS服务器通常要维护三个数据库,如 图 1-1 所示。
· “Users”:用于存储用户信息(如用户名、口令以及使用的协议、 IP 地址等配置信息)。
· “Clients”:用于存储 RADIUS 客户端的信息(如接入设备的共享密钥、 IP 地址等)。
· “Dictionary”:用于存储 RADIUS 协议中的属性和属性值含义的信息。
安全和认证机制
RADIUS 客户端和 RADIUS 服务器之间认证消息的交互是通过共享密钥的参与来完成的, 并且共享密钥不能通过网络来传输,增强了信息交互的安全性。另外,为防止用户密码在不安全的网络上传递时被窃取,在传输过程中对密码进行了加密。
RADIUS 服务器支持多种方法来认证用户,如基于 PPP 的 PAP、 CHAP 认证。另外, RADIUS 服务器还可以为其它类型的认证服务器提供代理客户端的功能,向其提出认证请求。
RADIUS 的基本消息交互流程
用户、 RADIUS客户端和RADIUS服务器之间的交互流程如 图 1-2 所示。
消息交互流程如下:
(1) 用户发起连接请求,向 RADIUS 客户端发送用户名和密码。
(2) RADIUS 客 户 端 根 据 获 取 的 用 户 名 和 密 码 , 向 RADIUS 服 务 器 发 送 认 证 请 求 包( Access-Request),其中的密码在共享密钥的参与下由 MD5 算法进行加密处理。
(3) RADIUS 服务器对用户名和密码进行认证。如果认证成功, RADIUS 服务器向 RADIUS 客户端发送认证接受包( Access-Accept);如果认证失败,则返回认证拒绝包( Access-Reject)。由于 RADIUS 协议合并了认证和授权的过程,因此认证接受包中也包含了用户的授权信息。
(4) RADIUS 客户端根据接收到的认证结果接入/拒绝用户。如果允许用户接入,则 RADIUS 客户端向 RADIUS 服务器发送计费开始请求包( Accounting-Request)。
(5) RADIUS 服务器返回计费开始响应包( Accounting-Response),并开始计费。
(6) 用户开始访问网络资源。
(7) 用 户 请 求 断 开 连 接 , RADIUS 客 户 端 向 RADIUS 服 务 器 发 送 计 费 停 止 请 求 包( Accounting-Request)。
(8) RADIUS 服务器返回计费结束响应包( Accounting-Response),并停止计费。
(9) 用户结束访问网络资源。
RADIUS 报文结构
RADIUS采用UDP报文来传输消息, 通过定时器管理机制、 重传机制、 备用服务器机制, 确保RADIUS服务器和客户端之间交互消息的正确收发。 RADIUS报文结构如 图 1-3 所示。
各字段的解释如下:
(1) Code 域
长度为 1 个字节,用于说明RADIUS报文的类型,如 表 1-1 所示。
(2) Identifier 域
长度为 1 个字节,用于匹配请求包和响应包,以及检测在一段时间内重发的请求包。类型一致的请求包和响应包的 Identifier 值相同。
(3) Length 域
长度为 2 个字节, 表示 RADIUS 数据包(包括 Code、 Identifier、 Length、 Authenticator 和 Attribute)的长度,范围从 20~4096。超过 Length 域的字节将作为填充字符被忽略。如果接收到的包的实际长度小于 Length 域的值时,则包会被丢弃。
(4) Authenticator 域
长度为 16 个字节,用于验证 RADIUS 服务器的应答,另外还用于用户密码的加密。 Authenticator包括两种类型: Request Authenticator 和 Response Authenticator。
(5) Attribute 域
不定长度,用于携带专门的认证、授权和计费信息,提供请求和响应报文的配置细节。 Attribute 可包括多个属性,每一个属性都采用( Type、 Length、 Value)三元组的结构来表示。
· 类型( Type), 1 个字节,取值为 1 ~255,用于表示属性的类型, 表 1-2 列出了RADIUS认证、授权、计费常用的属性。
· 长度( Length),表示该属性(包括类型、长度和属性)的长度,单位为字节。
· 属性值( Value),表示该属性的信息,其格式和内容由类型和长度决定,最大长度为 253 字节。
说明:表 1-2 中所列的属性由 RFC 2865、 RFC 2866、 RFC2867 和RFC2568 分别定义。
RADIUS 扩展属性
RADIUS 协议具有良好的可扩展性,协议( RFC 2865)中定义的 26 号属性( Vendor-Specific)用于设备厂商对 RADIUS 进行扩展,以实现标准 RADIUS 没有定义的功能。
设备厂商可以封装多个自定义的“( Type、 Length、 Value)”子属性来扩展RADIUS。如 图 1-4所示, 26 号属性报文内封装的子属性包括以下四个部分:
· Vendor-ID 域占 4 字节, 表示厂商代号, 最高字节为 0, 其余 3 字节的编码见 RFC 1700。 H3C公司的 Vendor-ID 是 2011 。
· Vendor-Type,表示扩展属性的子属性类型。
· Vendor-Length,表示该子属性长度。
· Vendor-Data,表示该子属性的内容。
协议规范
与 RADIUS 相关的协议规范有:
· RFC 2865: Remote Authentication Dial In User Service (RADIUS)
· RFC 2866: RADIUS Accounting
· RFC 2867: RADIUS Accounting Modifications for Tunnel Protocol Support
· RFC 2868: RADIUS Attributes for Tunnel Protocol Support
· RFC 2869: RADIUS Extensions