RADIUS协议

Posted 扇影无风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RADIUS协议相关的知识,希望对你有一定的参考价值。

1. 摘要

目前,电信运营商和服务提供商所采用的认证方式主要有本地认证、RADIUS认证和不认证;而计费策略更是丰富多彩,常见的有不计费(包月)、按时长计费、按流量计费、按端口计费等等。目前在所有这些认证计费方式中,以采用RADIUS Server进行集中认证计费应用的最为普及和广泛。

AAA是认证(Authentication)、授权(Authorization)和计费(Accounting)的简称,它是一种对网络安全进行管理的基本框架。而RADIUS (Remote Authentication Dia• -In User Service)即远程认证拨号用户服务,是一种分布式的、客户机/服务器结构的信息交互协议,它能保护网络不受未授权访问的干扰。二者结合可以实现对远程接入用户身份、权限以及流量的严格控制。RADIUS为服务供应商和公司提供了一种灵活通用的协议,用来完成集中式的用户认证、口令加密、服务选择、过滤和帐目核对等工作。当进行PAP/CHAP连接或连接第三方认证服务器时,一个单独的RADIUS数据库服务器可以在多个复杂网络上同时管理多个安全系统,并可用于维护成千上万用户的信息安全。

RADIUS不仅指运行于服务器上的软件,还包括网络访问服务器与RADIUS服务器之间的交互操作协议。

以下即针对RADIUS协议的原理和具体的应用做详细介绍。

2. AAA介绍

2.1 AAA概述

AAA是认证(Authentication)、授权(Authorization)和计费(Accounting)的缩写,它是运行于NAS(网络访问服务器)上的客户端程序。提供了一个用来对认证、授权和计费这三种安全功能进行配置的一致性框架,实际上是对网络安全的一种管理。这里的网络安全主要指访问控制。包括哪些用户可以访问网络服务器;具有访问权的用户可以得到哪些服务;以及如何对正在使用网络资源的用户进行计费。

2.2 AAA的实现

                   AAA框架图

• 本地认证——即在NAS端进行认证、授权和计费,

• 远程认证——通过协议进行远程的认证、授权和计费。

AAA的实现可采用RADIUS协议。RADIUS用来管理使用串口和调制解调器的大量分散用户。

网络接入服务器简称NAS。当用户想要通过某个网络(如电话网)与NAS建立连接从而获得访问其他网络的权利时,NAS可以选择在NAS上进行本地认证计费,或把用户信息传递给RADIUS服务器,由RADIUS进行认证计费;RADIUS 协议规定了NAS与RADIUS 服务器之间如何传递用户信息和计费信息,即两者之间的通信规则;RADIUS服务器负责接收用户的连接请求,完成认证,并把用户所需的配置信息返回给NAS。用户获得授权后,在其正常上线、在线和下线过程中,RADIUS服务器还完成对用户账号计费的功能。

3. RADIUS协议概述

3.1 引论

RADIUS远程认证拨入用户服务,是用于NAS和AAA服务器间通信的一种协议。RADIUS对AAA的三个组件都提供支持:认证、授权和计费。

一个网络允许外部用户通过公用网对其进行访问,其用户在地理上的分布会极为分散。用户可以把自己的信息传递给这个网络,也可以从这个网络得到自己想要的信息。由于存在内外的双向数据流动,网络安全就显得尤为重要。这个网络管理的内容包括:哪些用户可以获得访问权;获得访问权的用户可以允许使用哪些服务;如何对使用网络资源的用户进行记费。AAA很好的完成了这三项任务。

RADIUS通过建立一个唯一的用户数据库,存储用户名,用户的密码来进行认证存储传递给用户的服务类型以及相应的配置信息来完成授权。

3.2 RADIUS关键特性

• 客户端/服务器模式(Client/Server)

NAS是作为RADIUS的客户端运作的。这个客户端负责将用户信息传递给指定的RADIUS服务器,并负责执行返回的响应。RADIUS服务器负责接收用户的连接请求,鉴别用户,并为客户端返回所有为用户提供服务所必须的配置信息。一个RADIUS服务器可以为其他的RADIUS Server或其他种类认证服务器担当代理。

• 网络安全 (Network Security)

客户端和RADIUS服务器之间的事务是通过使用一种从来不会在网上传输的共享密钥机制进行鉴别的。另外,在客户端和RADIUS服务器之间的任何用户密码都是被加密后传输的,这是为了避免用户密码在不安全的网络上被监听获取的可能性。

• 灵活的认证机制 (Flexible Authentication Mechanisms)

RADIUS服务器能支持多种认证用户的方法。包括点对点的PAP认证(PPP PAP)、点对点的CHAP认证(PPP CHAP)、UNIX的登录操作(UNIX login)、和其他认证机制。

• 扩展协议(Extensible Protoco• )

RADIUS协议具有很好的扩展性。RADIUS包是由包头和一定数目的属性(Attribute)构成的。新的属性可以在不中断已存在协议执行的前提下进行增加。

3.3 C/S结构

         用户, NAS,RADIUS 服务器的关系

RADIUS采用典型的客户端/服务器(Client/Server)结构,它的客户端最初就是NAS,现在任何运行RADIUS客户端软件的计算机都可以成为RADIUS的客户端。NAS上运行的AAA程序对用户来讲为服务器端,对RADIUS服务器来讲是作为客户端。负责传输用户信息到指定的RADIUS服务器,然后根据从服务器返回的信息进行相应处理(如接入/挂断用户)。RADIUS服务器负责接收用户连接请求,认证用户,然后给NAS返回所有需要的信息。

1、RADIUS的客户端通常运行于接入服务器(NAS)上,RADIUS服务器通常运行于一台工作站上,一个RADIUS服务器可以同时支持多个RADIUS客户(NAS)。

2、RADIUS的服务器上存放着大量的信息,接入服务器(NAS)无须保存这些信息,而是通过RADIUS协议对这些信息进行访问。这些信息的集中统一的保存,使得管理更加方便,而且更加安全。

3、RADIUS服务器可以作为一个代理,以客户的身份同其他的RADIUS服务器或者其他类型的认证服务器进行通信。用户的漫游通常就是通过RADIUS代理实现的。简单地说,代理就是一台服务器,可以作为其他RADIUS服务器的代理,负责转发RADIUS认证和计费数据包。所谓漫游功能,就是代理的一个具体实现,这样可以让用户通过本来和其无关的RADIUS服务器进行认证。

3.4 RADIUS在协议栈中的位置

RADIUS是一种流行的AAA协议,采用UDP协议传输,在协议栈中位置如下:

        RADIUS在协议栈中的位置

RADIUS为何采用UDP,而不是TCP的原因如下:

1、NAS和RADIUS服务器之间传递的一般是几十至上百个字节长度的数据,用户可以容忍几秒到十几秒的验证等待时间。当处理大量用户时服务器端采用多线程,UDP简化了服务器端的实现过程。

2、TCP是必须成功建立连接后才能进行数据传输的,这种方式在有大量用户使用的情况下实时性不好。

3、当向主用服务器发送请求失败后,还要必须向备用的服务器发送请求。于是RADIUS要有重传机制和备用服务器机制,它所采用的定时机制,TCP不能很好的满足。

RADIUS协议采用的是UDP协议,数据包可能会在网络上丢失,如果客户没有收到响应,那么可以重新发送该请求包。多次发送之后如果仍然收不到响应,RADIUS客户可以向备用的RADIUS服务器发送请求包。

3.5 RADIUS网络安全

RADIUS协议的加密是使用MD5加密算法进行的,在RADIUS的客户端(NAS)和服务器端(RADIUS Server)保存了一个密钥(key),RADIUS协议利用这个密钥使用MD5算法对RADIUS中的数据进行加密处理。密钥不会在网络上传送。

RADIUS的加密主要体现在以下两方面:

3.5.1 包加密

在RADIUS包中,有16字节的验证字(authenticator)用于对包进行签名,收到RADIUS包的一方要查看该签名的正确性。如果包的签名不正确,那么该包将被丢弃,对包进行签名时使用的也是MD5算法(利用密钥),没有密钥的人是不能构造出该签名的。

3.5.2 口令加密

在认证用户时,用户的口令在NAS和RADIUS Server之间不会以明文方式传送,而是使用了MD5算法对口令进行加密。没有密钥的人是无法正确加密口令的,也无法正确地对加密过的口令进行解密。

3.5.3 口令加密与口令验证过程

当用户上网时,NAS将决定对用户采用何种认证方法。下面对使用RADIUS认证的情况下PPP用户与NAS之间的PAP和CHAP认证过程进行介绍。

RADIUS服务器可使用H3C的iMC服务器,也可以使用CISCO的ACS服务器或其它第三方服务器。

• PAP 验证:

                  Radius Server PAP认证

用户以明文的形式把用户名和他的密码传递给NAS,NAS把用户名和加密过的密码放到验证请求包的相应属性中传递给RADIUS服务器。RADIUS服务器根据NAS上传的帐号进行验证来决定是否允许用户上网并返回结果。NAS可以在其中包含服务类型属性Attribute Service-Type=Framed-User,和Framed-Protoco• =PPP作为提示来告诉RADIUS服务器PPP是所希望的服务。

Secret password =Password XOR MD5(Challenge + Key)

(Challenge就是RADIUS报文中的Authenticator)

• CHAP 验证:

对于CHAP(挑战握手认证协议),它提供对用户口令进行加密的机制。

                RADIUS Server CHAP认证

当用户请求上网时,NAS产生一个16字节的随机码给用户(同时还有一个ID号,本地路由器的Host name)。用户端得到这个包后使用自己独有的设备或软件客户端将CHAP ID、用户密码(口令字)用MD5算法对该随机码进行加密生成一个Secret Password,随同用户名user name一并传给NAS。

NAS把传回来的user name和Secret Password分别作为用户名和密码,并把原来的16字节随机码以及CHAP ID传给RADIUS服务器。RADIUS根据用户名在服务器端查找数据库,得到和用户端进行加密所用的一样的密钥,用MD5算法对CHAP ID,密钥和传来的16字节的随机码进行加密,将其结果与传来的Password作比较,如果相匹配,服务器送回一个接入允许数据包,否则送回一个接入拒绝数据包。

4. RADIUS体系结构

当用户PC通过某个网络(如电话网)与 NAS建立连接从而获得访问其他网络的权利时,NAS可以选择在NAS上进行本地认证计费,或把用户信息传递给RADIUS服务器,由RADIUS进行认证计费;RADIUS 协议规定了NAS与RADIUS 服务器之间如何传递用户信息和计费信息;RADIUS服务器负责接收用户的连接请求,完成认证,并把传递服务给用户所需的配置信息返回给NAS。

通常对RADIUS协议的认证服务端口号是1645(早期实现)或1812,计费服务端口号是1646(早期实现)或1813。当我们进行NAS设备和RADIUS服务器对接的时候,由于生产厂家可能不同,所对应的服务器端口号不同,那么就需要调整服务器端口号,例如与其他厂家radius协议默认端口号是1645和1646,需要与他们协商,调整到相同的端口号,这样才能对接成功。

4.1 RADIUS报文的交互过程

RADIUS服务器对用户的认证过程通常需要利用NAS等设备的代理认证功能,RADIUS客户端和RADIUS服务器之间通过共享密钥认证相互间交互的消息,用户密码采用密文方式在网络上传输,增强了安全性。RADIUS协议合并了认证和授权过程,即响应报文中携带了授权信息。操作流程图和步骤如下所示:

                                    RADIUS的典型实现流程

在一个客户端被设置使用RADIUS协议后,任何使用这个终端的用户都需要向这个客户端提供认证信息。该信息或者以一种定制化的提示信息出现,用户需要输入他们的用户名和密码;或者也可以选择比如像点对点的传输协议(Point-to-Point Protoco• ),通过认证包来传递这种认证信息。

基本交互过程如下:

1) 用户输入用户名和口令;

2) RADIUS客户端根据获取的用户名和口令,向RADIUS服务器发送认证请求包(Access-Request)。

3) RADIUS服务器将该用户信息与Users数据库信息进行对比分析,如果认证成功,则将用户的权限信息以认证响应包(Access-Accept)发送给RADIUS客户端;如果认证失败,则返回Access-Reject响应包。

4) RADIUS客户端根据接收到的认证结果接入/拒绝用户。如果可以接入用户,则RADIUS客户端向RADIUS服务器发送计费开始请求包(Accounting-Request),Status-Type取值为start;

5) RADIUS服务器返回计费开始响应包(Accounting-Response);

6) RADIUS客户端向RADIUS服务器发送计费停止请求包(Accounting-Request),Status-Type取值为stop;

7) RADIUS服务器返回计费结束响应包(Accounting-Response)。

4.2 RADIUS协议的报文结构

RADIUS采用UDP传输消息,通过定时器管理机制、重传机制、备用服务器机制,确保RADIUS服务器和客户端之间交互消息正确收发。标准RADIUS协议报文结构如下:

0 7 8 15 16 31

RADIUS报文格式

以上是关于RADIUS协议的主要内容,如果未能解决你的问题,请参考以下文章

Radius协议

radius

RADIUS协议

Radius报文解析(转)

Python模拟radius coa报文

BAS/BRAS/RADIUS简介