现在的位置: 首页 > 综合 > 正文

Radius/Free Radius/Diameter协议

2013年10月09日 ⁄ 综合 ⁄ 共 5727字 ⁄ 字号 评论关闭

RADIUS( Remote Access Dial In User Service) Protocol主要用来提供认证(Authentication)机制,用来辨认使用者的身份与密码,确认通过之后,经由授权(Authorization)使用者登入网域使用相关资源,并可提供计费(Accounting)机制,保存使用者的网络使用记录。Radius协议详细介绍可参见RFC2865,RFC2866。RADIUS认证服务器(远程用户拨号认证系统)是目前应用最广泛的AAA协议(AAA=authentication、Authorization、Accounting,即认证、授权、计费)。随着网络安全需求提高,中小企业的局域网集中用户认证,特别是使用VPDN专网的也逐渐需要建立自己的认证服务器以管理拨号用户。但这些用户不需要使用昂贵的专业系统,采用PC服务器和Linux系统的Freeradius+MySQL就能可靠地实现。

 


基本工作原理
  用户接入NAS,NAS向RADIUS服务器使用Access-Require数据包提交用户信息,包括用户名、密码等相关信息,其中用户密码是经过MD5加密的,双方使用共享密钥,这个密钥不经过网络传播;RADIUS服务器对用户名和密码的合法性进行检验,必要时可以提出一个Challenge,要求进一步对用户认证,也可以对NAS进行类似的认证;如果合法,给NAS返回Access-Accept数据包,允许用户进行下一步工作,否则返回Access-Reject数据包,拒绝用户访问;如果允许访问,NAS向RADIUS服务器提出计费请求Account- Require,RADIUS服务器响应Account-Accept,对用户的计费开始,同时用户可以进行自己的相关操作。
  RADIUS还支持代理和漫游功能。简单地说,代理就是一台服务器,可以作为其他RADIUS服务器的代理,负责转发RADIUS认证和计费数据包。所谓漫游功能,就是代理的一个具体实现,这样可以让用户通过本来和其无关的RADIUS服务器进行认证,用户到非归属运营商所在地也可以得到服务,也可以实现虚拟运营。
  RADIUS服务器和NAS服务器通过UDP协议进行通信,RADIUS服务器的1812端口负责认证,1813端口负责计费工作。采用UDP的基本考虑是因为NAS和RADIUS服务器大多在同一个局域网中,使用UDP更加快捷方便,而且UDP是无连接的,会减轻RADIUS的压力,也更安全。
  RADIUS协议还规定了重传机制。如果NAS向某个RADIUS服务器提交请求没有收到返回信息,那么可以要求备份RADIUS服务器重传。由于有多个备份RADIUS服务器,因此NAS进行重传的时候,可以采用轮询的方法。如果备份RADIUS服务器的密钥和以前RADIUS服务器的密钥不同,则需要重新进行认证。

协议结构
  Code 域长度为1个字节,用于标明RADIUS报文的类型,如果Code域中的内容是无效值,报文将被丢弃,有效值如下:
  1、请求访问(Access-Request);
  2、接收访问(Access-Accept);
  3、拒绝访问(Access-Reject);
  4、计费请求(Accounting-Request);
  5、计费响应(Accounting-Response);
  11、挑战访问(Access-Challenge);
  12、服务器状况(Status-Server — Experimental);
  13、客户机状况(Status-Client — Experimental);
  255、预留(Reserved)
  Identifier ― 匹配请求和响应的标识符。
  Length ― 信息大小,包括头部。
  Authenticator 域占用16个字节,用于Radius Client 和Server之间消息认证的有效性,和密码隐藏算法。访问请求Access-Request报文中的认证字的值是16字节随机数,认证字的值要不能被预测并且在一个共享密钥的生命期内唯一。
  1.访问请求认证字
  在Access-Request包中认证字的值是16字节随机数,认证字的值要不能被预测,并且在一个共享密钥的生命期内唯一;
  2.访问回应认证字
  Access-Accept Access-Reject 和Access-Challenge包中的认证字称为访问回应认证字,访问回应认证字的值定义为MD5(Code+ID+Length+RequestAuth+Attributes+Secret);
  3.计费请求认证字
  在计费请求包中的认证字域称为计费请求认证字,它是一个16字节的MD5校验和,计费请求认证字的值定义为MD5(Code + Identifier + Length + 16 zero octets + request attributes +shared secret);
  4.计费回应认证字
  在计费回应报文中的认证字域称为计费回应认证字,它的值定义为MD5(Accounting-Response Code + Identifier + Length + the RequestAuthenticator field from the Accounting-Request packet being replied to +the response attributes + shared secret);

 

基本消息交互流程
  radius 服务器对用户的认证过程通常需要利用nas 等设备的代理认证功能,radius 客户端和radius 服务器之间通过共享密钥认证相互间交互的消息,用户密码采用密文方式在网络上传输,增强了安全性。radius 协议合并了认证和授权过程,即响应报文中携带了授权信息。
  基本交互步骤如下:
  (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)。

 

FreeRadius是一款OpenSource软件,基于Radius协议,实现Radius AAA(Authentication,Authorization,Accounting)功能。

 

灵活的请求处理
除了RFC和VSA的定义的以外,FreeRadius有一系列灵活的对来访请求的配置规则,这样就对一个来访的RADIUS请求的各个方面都可以有所控制。这些规则可以做以下的事情:
增加请求的定义
重写请求的任何定义
代理或复制请求到其他RADIUS服务器,可以基于任何标准,而不仅仅是“ realm"。
为个别用户选择一种认证方式
以组的方式管理用户
实现在一天内限制用户访问
执行本地程序
限制用户的并发登录数
所有的服务配置都适用于认证和计费的请求(大多数现在的服务器都只允许修改认证请求的配置)

灵活的配置
该服务器可以根据以下任何一个标准来选择配置:
已给定值的定义
未给定值的定义
请求中的定义(与他们的值无关)
请求中没有的定义
正则表达式匹配的字符串定义
匹配一个范围的整数值定义
请求的源地址(可以和NAS IP地址不同)
NAS组(可以以源IP、NAS IP或者任何其他的配置进行分组)
用户名
DEFAULT配置模板
多个级联的DEFAULT模板配置

FreeRADIUS支持以下认证方法:
本地文件
本地DB/DBM数据库
LDAP 数据库
Novell eDirectory
Sun One Directory Server
OpenLDAP
Any LDAPv3
本地可执行程序(比如一个CGI程序)
Perl 程序
Python 程序
SQL 数据库
Oracle
MySQL
PostgreSQL
Sybase
IBM DB2
Any iODBC or unixODBC supported database 

以下的认证类型是部分被该服务器支持的方法:
本地配置文件中的明文密码(PAP)
本地配置文件中的加密密码
CHAP
MS-CHAP
MS-CHAPv2
windows域控制器认证
代理到其他RADIUS服务器
系统认证(通常通过/etc/passwd)
PAM(可插拔认证模块)
LDAP(只支持PAP)
CRAM
Perl 程序
Python程序
SIP Digest(Cisco VoIP,SER)
一个本地的执行程序
Netscape-MTA-MD5加密的密码
Kerberos 认证
X9.9认证环

EAP无线的嵌入式认证方法
EAP-MD5
CISCO LEAP
EAP-MSCHAP-V2
EAP-GTC
EAP-SIM
EAP-TLS
EAP-TTLS
EAP-PEAP

计费方法
计费数据能被同步记录到不同的数据库。以下的计费记录方法都是FreeRADIUS支持的:
本地'detail'文件
本地'wtmp'和'utmp'文件
代理到其他RADIUS服务器
复制到一台或者多台RADIUS服务器
SQL数据库
Oracle
MySQL
PostgreSQL
Sybase
DB2
任何iODBC或者unixODBC支持的数据库

WEB接口的拨号管理工具
该服务器还包含了dialup_admin,服务器上的一个基于PHP4的WEB管理接口。支持管理:
LDAP数据库中的用户
SQL数据库中的用户和组
创建、测试、删除、改变个人信息,检查计费和为一个用户改变拨号设置
保持用户造成的问题记录的“坏用户功能”
在线finger功能
测试RADIUS服务
在线使用统计

编写脚本语言
FreeRADIUS支持用Perl和Python编写插件模块。

 

 

Diameter协议被IETF的AAA工作组作为下一代的AAA协议标准。Diameter(为直径,意为着Diameter协议是RADIUS协议的升级版本)协议包括基本协议,NAS(网络接入服务)协议,EAP(可扩展鉴别)协议,MIP(移动IP)协议,CMS(密码消息语法)协议等。Diameter协议支持移动IP、NAS请求和移动代理的认证、授权和计费工作,协议的实现和RADIUS类似,也是采用AVP,属性值对(采用Attribute-Length-Value三元组形式)来实现,但是其中详细规定了错误处理, failover机制,采用TCP协议,支持分布式计费,克服了RADIUS的许多缺点,是最适合未来移动通信系统的AAA协议。
  Diameter协议不是一个单一的协议,而是一个协议族,它包括基本协议(Diameter Base Protocol)和各种由基本协议扩展而来的应用协议,如NASREQ、Mobile、CMS Security等。Diameter基本协议为各种认证、授权和计费业务提供了安全、可靠、易于扩展的框架。其主要涉及性能协商、消息如何被发送、对等双方最终如何结束通信等方面,基本协议一般不单独使用,往往被扩展成新的应用来使用,所有应用和服务的基本功能都是在基础协议中实现,应用特定功能则是由扩展协议在基础协议的基础上扩展后实现的。

 

AAA协议Diameter和RADIUS进行比较总结,如下:

(1) RADIUS固有的C/S模式限制了它的进一步发展。Diameter采用了peer-to-peer模式,peer的任何一端都可以发送消息以发起计费等功能或中断连接。

(2) 可靠的传输机制。RADIUS运行在UDP协议上,并且没有定义重传机制,而Diameter运行在可靠的传输协议TCP、SCTP之上。Diameter 还支持窗口机制,每个会话方可以动态调整自己的接收窗口,以免发送超出对方处理能力的请求。

(3) 失败恢复机制。RADIUS协议不支持失败恢复机制,而Diameter支持应用层确认,并且定义了失败恢复算法和相关的状态机,能够立即检测出传输错误。

(4) 大的属性数据空间。Diameter采用AVP(Attribute Value Pair)来传输用户的认证和授权信息、交换用以计费的资源使用信息、中继代理和重定向 Diameter 消息等。网络的复杂化使Diameter 消息所要携带的信息越来越多,因此属性空间一定要足够大,才能满足未来大型复杂网络的需要。

(5) 支持同步的大量用户的接入请求。随着网络规模的不断扩大,AAA 服务器需要同时处理的用户请求的数量不断增加,这就要求网络接入服务器能够保存大量等待认证结果的用户的接入信息,而RADIUS 的255 个同步请求显然是不够的,Diameter 可以同时支持 232 个用户的接入请求。

(6) 服务器初始化消息。由于在RADIUS中服务器不能主动发起消息,只有客户能发出重认证请求,所以服务器不能根据需要重新认证。而Diameter指定了两种消息类型,重认证请求和重认证应答消息,使得服务器可以随时根据需要主动发起重认证。

(7) Diameter还支持认证和授权分离,重授权可以随时根据需求进行。而RADIUS中认证与授权必须是成对出现的。

(8) RADIUS仅仅在应用层上定义了一定的安全机制,但没有涉及到数据的机密性。Diameter要求必须支持IPsec以保证数据的机密性和完整性。

(9) RADIUS没有明确的代理概念,RADIUS服务器同时具有proxy服务器和前端服务器的功能。Diameter加入代理来承担RADIUS服务器的proxy功能

抱歉!评论已关闭.