应用层协议——RADIUS

一、前言

RADIUS简介

应用层协议Radius是Remote Authentication Dial In User Service的简称,即远程认证拨号用户服务。当用户想要通过某个网络(如电话网)与网络接入服务器NAS(Network Access Server)(此NAS非彼NAS)建立连接从而获得访问其它网络的权力时,NAS可以选择在NAS上进行本地认证计费,或把用户信息传递给Radius服务器,由Radius进行认证计费。Radius协议规定了NAS与Radius服务器之间如何传递用户信息和记账信息,Radius服务器负责接收用户的连接请求,完成验证,并把传递服务给用户所需的配置信息返回给NAS。例如:用户要求得到某些服务(如SLIP, PPP, telnet),必须通过NAS,由NAS依据某种顺序与所连服务器通信从而进行验证。用户通过拨号进入NAS,然后NAS按配置好的验证方式(如PPP PAP, CHAP等)要求输入用户名,密码等信息,用户按提示输入。通过与NAS的连接,NAS得到这些信息。而后,NAS把这些信息传递给Radius服务器,并根据服务器的响应来决定用户是否可以获得他所要求的服务。

二、什么是AAA协议

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

Radius是AAA协议的一个实现,那么什么是AAA协议?

AAA是鉴别,授权和记账(Authentication, Authorization,Accounting)的简称,它是运行于NAS上的客户端程序,提供了一个用来对鉴别,授权和记账这三种安全功能进行配置的一致的框架。一个网络允许外部用户通过公用网对其进行访问,从而用户在地理上可以极为分散。大量分散用户通过Modem(调制解调器,猫)等设备从不同的地方可以对这个网络进行随机访问。用户可以把自己的信息传递给这个网络,也可以从这个网络得到自己想要的信息。由于存在内外的双向数据流动,网络安全就成为很重要的问题了。大量的modem形成了Modem pools。对modem pool的管理就成为网络接入服务器或路由器的任务。管理的内容有:哪些用户可以获得访问权,获得访问权的用户可以允许使用哪些服务,如何对使用网络资源的用户进行记费。AAA很好地完成了这三项任务。AAA的配置实际上是对网络安全的一种管理,这里的网络安全主要指访问控制,包括哪些用户可以访问网络服务器,具有访问权的用户可以得到哪些服务,如何对正在使用网络资源的用户进行记账。下面简单介绍一下鉴别,授权,记账的作用。

  • 鉴别(Authentication):鉴别用户是否可以获得访问权。

  • 授权(Authorization) :授权用户可以使用哪些服务。

  • 记账(Accounting) :记录用户使用网络资源的情况。

AAA的各类功能

  • 认证功能,AAA支持以下认证方式:

    • 不认证:对用户非常信任,不对其检查,一般情况下不采用这种方式。

    • 本地认证:将用户信息(包括本地用户的用户名、密码和各种属性)配置在接入服务器上。本地认证的优点是速度快,降低运营成本;但存储信息量受设备硬件条件限制。

    • 远端认证:支持通过RADIUS协议或HWTACACS协议进行远端认证,由接入服务器作为Client端,与RADIUS服务器或TACACS服务器通信。

  • 授权功能,AAA支持以下授权方式:

    • 直接授权:对用户非常信任,直接授权通过。

    • 本地授权:根据宽带接入服务器上为本地用户账号配置的相关属性进行授权。

    • HWTACACS授权:由TACACS服务器对用户进行授权。

    • if-authenticated授权:如果用户通过了认证,并且使用的认证方法不是none,则对用户授权通过。

    • RADIUS认证成功后授权:RADIUS协议的认证和授权是绑定在一起的,不能单独使用RADIUS进行授权。

  • 计费功能,AAA支持以下计费方式:

    • 不计费

    • 远端计费:支持通过RADIUS服务器或TACACS服务器进行远端计费。

三、RADIUS为何采用UDP,而不是TCP

在这里插入图片描述

RADIUS协议采用的是UDP协议,数据包可能会在网络上丢失,如果客户没有收到响应,那么可以重新发送该请求包。多次发送之后如果仍然收不到响应,RADIUS客户可以向备用的RADIUS服务器发送请求包。
RADIUS是一种分布式的、C/S架构的信息交互协议,能包含网络不受未授权访问的干扰,常应用在既要求较高安全性、又允许远程用户访问的各种网络环境中。

协议定义了基于UDP(User Datagram Protocol)的RADIUS报文格式及其传输机制,并规定UDP端口1812作为认证端口、1813计费端口。

如果是思科设备:认证和授权端口为UDP1645,计费端口1646。

RADIUS最初仅是针对拨号用户的AAA协议,后来随着用户接入方式的多样化发展,RADIUS也适应多种用户接入方式,如以太网接入等。它通过认证授权来提供接入服务,通过计费来收集、记录用户对网络资源的使用。

采用UDP的原因如下

  • NAS和RADIUS服务器大多在同一个局域网中,使用UDP更加快捷方便。

  • 简化了服务端的实现。

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

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

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

  • RADIUS有自己的机制,来解决UDP丢包特点。

    如果NAS向某个RADIUS服务器提交请求没有收到返回信息,那么可以要求备份RADIUS服务器重传。由于有多个备份RADIUS服务器,因此NAS进行重传的时候,可以采用轮询的方法。如果备份RADIUS服务器的密钥和以前RADIUS服务器的密钥不同,则需要重新进行认证。

四、Radius的架构:

客户端/服务器模式。

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的主要特点

  • 客户端/服务器模型

网络访问服务器(NAS)作为RADIUS的客户端运行。该客户负责将用户信息传递给指定RADIUS服务器,然后对返回的响应进行操作。RADIUS服务器负责接收用户连接请求,认证用户,然后返回所有客户端交付所需的配置信息服务给用户。

RADIUS服务器可以作为其他RADIUS服务器的代理客户端或其他种类的认证服务器。

  • 网络安全

客户端和RADIUS服务器之间的事务是通过使用共享密钥进行身份验证。另外,发送任何用户密码在客户端和RADIUS服务器之间加密,消除有人窥探不安全网络确定用户密码的可能性。

  • 灵活的认证机制

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

  • 可扩展协议

所有交易均由可变长度Attribute长度值3元组。可以添加新属性值从而影响协议的现有实现。

六、RADIUS报文

RADIUS报文格式

基于UDP报文传输消息
在这里插入图片描述
各字段的解释如下:

  • Code:长度为1个字节,用来说明RADIUS报文的类型。
Code值 报文类型
1 Access-Request
2 Access-Accept
3 Access-Reject
4 Accounting-Request
5 Accounting-Response
11 Access-Challenge
255 Reserved(保留,在生成一个新的数据包时使用)
  • Identifier:长度为1个字节(0~255),用来匹配请求报文和响应报文,以及检测在一段时间内重发的请求报文(防止重放攻击)。客户端发送请求报文后,服务器返回的响应报文中的Identifier值应与请求报文中的Identifier值相同
  • Length:长度为2个字节,用来指定RADIUS报文的长度。表示RADIUS数据区(包括Code, Identifier, Length, Authenticator, Attributes)的长度,单位是字节,最小为20,最大为4096。超过Length取值的字节将作为填充字符而忽略。如果接收到的报文的实际长度小于Length的取值,则该报文会被丢弃。
  • Authenticator:长度为16个字节,用来验证RADIUS服务器的响应报文,同时还用于用户密码的加密。
  • Attribute:不定长度,为报文的内容主体,用来携带专门的认证、授权和计费信息,提供请求和响应报文的配置细节。Attribute可以包括多个属性,每一个属性都采用(Type、Length、Value)三元组的结构来表示(具体属性值代表的含义不做过多阐述)。

RADISU报文类型:

目前RADIUS定义了十六种报文类型。

RADIUS认证报文
  • Access-Request:认证请求报文,是RADIUS报文交互过程中的第一个报文,用来携带用户的认证信息(例如:用户名、密码等)。认证请求报文由RADIUS客户端发送给RADIUS服务器,RADIUS服务器根据该报文中携带的用户信息判断是否允许接入

  • Access-Accept:认证接受报文,是服务器对客户端发送的Access-Request报文的接受响应报文。如果Access-Request报文中的所有属性都可以接受(即认证通过),则发送该类型报文。客户端收到此报文后,认证用户才能认证通过并被赋予相应的权限。

  • Access-Reject:认证拒绝报文,是服务器对客户端的Access-Request报文的拒绝响应报文。如果Access-Request报文中的任何一个属性不可接受(即认证失败),则RADIUS服务器返回Access-Reject报文,用户认证失败。

RADIUS计费报文
  • Accounting-Request(Start):计费开始请求报文。如果客户端使用RADIUS模式进行计费,客户端会在用户开始访问网络资源时,向服务器发送计费开始请求报文。

  • Accounting-Response(Start):计费开始响应报文。服务器接收并成功记录计费开始请求报文后,需要回应一个计费开始响应报文。

  • Accounting-Request(Interim-update):实时计费请求报文。为避免计费服务器无法收到计费停止请求报文而继续对该用户计费,可以在客户端上配置实时计费功能。客户端定时向服务器发送实时计费报文,减少计费误差。

  • Accounting-Response(Interim-update):实时计费响应报文。服务器接收并成功记录实时计费请求报文后,需要回应一个实时计费响应报文。

  • Accounting-Request(Stop):计费结束请求报文。当用户断开连接时(连接也可以由接入服务器断开),客户端向服务器发送计费结束请求报文,其中包括用户上网所使用的网络资源的统计信息(上网时长、进/出的字节数等),请求服务器停止计费。

  • Accounting-Response(Stop):计费结束响应报文。服务器接收计费停止请求报文后,需要回应一个计费停止响应报文。

RADIUS授权报文

CoA:(Change of Authorization)是指用户认证成功后,管理员可以通过RADIUS协议来修改在线用户的权限。

DM:(Disconnect Message)是指用户离线报文,即由RADIUS服务器端主动发起的强迫用户下线的报文。

  • CoA-Request:动态授权请求报文。当管理员需要更改某个在线用户的权限时(例如,管理员不希望用户访问某个网站),可以通过服务器发送一个动态授权请求报文给客户端,使客户端修改在线用户的权限。

  • CoA-ACK:动态授权请求接受报文。如果客户端成功更改了用户的权限,则客户端回应动态授权请求接受报文给服务器。

  • CoA-NAK:动态授权请求拒绝报文。如果客户端未成功更改用户的权限,则客户端回应动态授权请求拒绝报文给服务器。

  • DM-Request:用户离线请求报文。当管理员需要让某个在线的用户下线时,可以通过服务器发送一个用户离线请求报文给客户端,使客户端终结用户的连接。

  • DM-ACK:用户离线请求接受报文。如果客户端已经切断了用户的连接,则客户端回应用户离线请求接受报文给服务器。

  • DM-NAK:用户离线请求拒绝报文。如果客户端无法切断用户的连接,则客户端回应用户离线请求拒绝报文给服务器。

七、RADIUS工作过程

在这里插入图片描述

  1. 用户拨入

  2. 所拨入的设备(比如NAS)将拨入用户的用户的信息(比如用户名、口令、所占用的端口等等)打包向RADIUS服务器发送。如果Radius服务器发送Access-Challenge要求二次验证,则Radius客户端将再次收集用户信息通过Access-Request发送。

  3. 如果该用户是一个合法的用户,那么Radius告诉NAS该用户可以上网,同时传回该用户的配置参数;否则,Radius反馈NAS该用户非法的信息。

  4. 如果该用户合法,NAS就根据从RADIUS服务器传回的配置参数配置用户。如果用户非法,NAS反馈给用户出错信息并断开该用户连接。

  5. 如果用户可以访问网络,RADIUS客户要向RADIUS服务器发送一个记费请求包表明对该用户已经开始计费。

  6. RADIUS服务器收到并成功记录该请求包后要给予响应。

  7. 当用户断开连接时(连接也可以由接入服务器断开)。

  8. RADIUS客户向RADIUS服务器发送一个计费停止请求包,其中包含用户上网所使用网络资源的统计信息(上网时长、进/出的字节/包数等)。

  9. RADIUS服务器收到并成功记录该请求包后要给予响应。

八、RADIUS代理

对RADIUS代理服务器来说,一个RADIUS服务器在收到一个来自RADIUS客户端(例如NAS服务器)的认证请求(或者计费请求)后,向一个远程的RADIUS服务器提交该请求,收到来自远程服务器的回复后,将这个回复传输给客户,这个回复可能带有反映本地管理策略的变化。使用RADIUS代理服务器通常是为了漫游。漫游功能使两个或更多的管理实体允许每一个用户为某项服务而拨入到任一个实体网络中。

一个RADIUS服务器可以同时作为转送服务器和远程服务器运行。在某些域中作为一个转发服务器,在其他域中作为一个远程服务器。一个转发服务器可以作为任何数量远程服务器的转发者。一个远程服务器可以有任意数量的转发服务器向它转发,也能向任意数量域提供认证。一个转发服务器可以向另一个转发服务器转发,从而生成一个代理链,应当注意避免循环引用。

下面的过程解释了一个代理服务器在一个NAS服务器、转发服务器和远程服务器之间的通信。

  1. NAS向一个转发服务器发出接入请求。
  2. 转发服务器把这个请求转发给一个远程服务器。
  3. 远程服务器给转发服务器送回接入允许、接入拒绝或接入盘问。此时,服务器送回的是接入允许。
  4. 转发服务器将接入允许传输给NAS。

转发服务器必须把已经存在于数据包中的任何代理状态属性当作不可见的数据。它的操作禁止依靠被前面服务器添加到代理状态属性中的内容。

如果收到来自客户端的请求中有任何代理状态属性,在给客户端的回复中,转发服务器必须在给客户端的回复中包括这些代理状态属性。当转发服务器转发这个请求时,它可以把代理状态属性包含在其中,也可以在已转发的请求中忽略代理状态属性。如果转发服务器在转发的接入请求中忽略了代理状态属性,它必须在响应返回给用户之前把这些代理状态属性添加到该响应中。

猜你喜欢

转载自blog.csdn.net/qq_40741808/article/details/106721220