Radius协议
Radius协议是什么:
Radius是Remote Authentication Dial In User Service的简称,即远程验证拨⼊⽤户服务。当⽤户想要通过某个⽹络(如电话⽹)与⽹络接⼊服务器NAS(Network Access Server)建⽴连接从⽽获得访问其它⽹络的权⼒时,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是AAA协议的⼀个实现,那么什么是AAA协议?
AAA是鉴别,授权和记账(Authentication, Authorization, Accounting)的简称,它是运⾏于NAS上的客户
端程序,提供了⼀个⽤来对鉴别,授权和记账这三种安全功能进⾏配置的⼀致的框架。⼀个⽹络允许外部⽤户通过公⽤⽹对其进⾏访问,从⽽⽤户在地理上可以极为分散。⼤量分散⽤户通过Modem等设备从不同的地⽅可以对这个⽹络进⾏随机访问。⽤户可以把⾃⼰的信息传递给这个⽹络,也可以从这个⽹络得到⾃⼰想要的信息。由于存在内外的双向数据流动,⽹络安全就成为很重要的问题了。⼤量的modem形成了Modem pools。对modem pool的管理就成为⽹络接⼊服务器或路由器的任务。管理的内容有:哪些⽤户可以获得访问权,获得访问权的⽤户可以允许使⽤哪些服务,如何对使⽤⽹络资源的⽤户进⾏记费。AAA很好地完成了这三项任务。AAA的配置实际上是对⽹络安全的⼀种管理,这⾥的⽹络安全主要指访问控制,包括哪些⽤户可以访问⽹络服务器,具有访问权的⽤户可以得到哪些服务,如何对正在使⽤⽹络资源的⽤户进⾏记账。下⾯简单介绍⼀下鉴别,授权,记账的作⽤。
鉴别(Authentication):鉴别⽤户是否可以获得访问权,可以选择使⽤RADIUS协议。
授权(Authorization) :授权⽤户可以使⽤哪些服务。
记账(Accounting) :记录⽤户使⽤⽹络资源的情况。
Radius作⽤
Radius服务器能⽤来管理使⽤串⼝和调制解调器的⼤量分散⽤户。当⽤户想要通过某个⽹络(如电话⽹)
与NAS建⽴连接从⽽获得访问其他⽹络的权利(或取得使⽤某些⽹络资源的权利)时,NAS起到了过问⽤户(或这个连接)的作⽤。NAS负责把⽤户的鉴别,授权,记账信息传递给Radius服务器。Radius协议规定了NAS与Radius服务器之间如何传递⽤户信息和记账信息,即两者之间的通信规则。Radius服务器负责接收⽤户的连接请求,完成鉴别,并把传递服务给⽤户所需的配置信息返回给NAS。⽤户获得授权后,在其正常上线、在线和下线过程
中,Radius服务器完成对⽤户账号计费的功能。
RADIUS协议的认证端⼝号为1812(1645端⼝由于冲突已经不再使⽤),计费端⼝号为1813或(1646端⼝由于冲突已经不再使⽤)。RADIUS通过建⽴⼀个唯⼀的⽤户数据库,存储⽤户名,⽤户的密码来进⾏鉴别、存储传递给⽤户的服务类型以及相应的配置信息来完成授权。RADIUS协议具有很好的扩展性。RADIUS包是由包头和⼀定数⽬的属性(Attribute)构成的。新属性的增加不会影响到现有协议的实现。通常的NAS⼚家在⽣产NAS时,还同时开发与之配套的Radius服务器。为了提供⼀些功能,常常要定义⼀些⾮标准的(RFC上没有定义过的)属性。
Radius的主要特点:
1.客户端/服务器模型
⽹络访问服务器(NAS)作为RADIUS的客户端运⾏。该客户负责将⽤户信息传递给指定RADIUS服务器,然后对返回的响应进⾏操作。RADIUS服务器负责接收⽤户连接请求,认证⽤户,然后返回所有客户端交付所需的配置信息服务给⽤户。
RADIUS服务器可以作为其他RADIUS服务器的代理客户端或其他种类的认证服务器。
2.⽹络安全
radius软件客户端和RADIUS服务器之间的事务是通过使⽤共享密钥进⾏⾝份验证。另外,发送任何⽤户密码在客户端和RADIUS服务器之间加密,消除有⼈窥探不安全⽹络确定⽤户密码的可能性。
3.灵活的认证机制
RADIUS服务器可以⽀持多种认证⽅式认证⼀个⽤户。它可以⽀持PAP或CHAP,UNIX登录等认证机制。
4.可扩展协议
所有交易均由可变长度Attribute-长度值3元组。可以添加新属性值从⽽影响协议的现有实现。
Radius操作流程:
发送流程:
当客户端配置为使⽤RADIUS时,客户端的任何⽤户向客户端提供认证信息。例如⽤户希望输⼊他们的⽤户名和密码。或者,⽤户可以使⽤a链路成帧协议,如点对点协议(PPP),其具有承载该信息的认证分组。⼀旦客户端获得了这样的信息,它可以选择使⽤RADIUS进⾏⾝份验证。为此,客户端创建⼀个“Access-Request”包含⽤户名称,密码等⼀系列的属性,客户端的ID和⽤户所在的端⼝ID访问。当存在密
码时,则需要对密码进⾏加密,采⽤的是基于RSA消息摘要算法MD5来加密的。Access-Request通过⽹络提交给RADIUS服务器。如果在⼀段时间内没有返回响应,请求会进⾏多次重发。客户端也可以转发请求在主服务器的⽆响应的情况下,将请求转发到备⽤服务器备⽤处理请求
接收流程:
⼀旦Radius服务器收到请求,它会验证发送客户。如果该请求包没有公共密钥是会被默认丢弃的。如果客户是有效,RADIUS服务器咨询⽤户的数据库查名称与请求相匹配的⽤户。数据库中的⽤户条⽬包含必须满⾜的要求列表以允许访问⽤户。这总是包括验证密码,还可以指定⽤户允许的客户端或端⼝访问,通过校验返回⼀个Access-Accept反之发送Access-Reject。
认证⽅式:
远端(Radius)验证——PAP⽅式:
采⽤ PAP 验证过程如下:
1.⽤户以明⽂的形式把⽤户名和他的密码传递给 NAS。
2.NAS把⽤户名和加密过的密码放到认证请求包的相应属性中传递给 RADIUS 服务器。
3.根据RADIUS服务器的返回结果来决定是不允许⽤户上⽹。
PS:此处的加密是采⽤密码明⽂与共享秘钥异或作为加密⽅式。⽤户端得到了加密信息根据相同的共享秘钥异或取得密码明⽂
远端(Radius)验证——CHAP⽅式:
CHAP 验证过程如下:
1、当⽤户请求上⽹时,NAS 产⽣⼀个 16 字节的随机码给⽤户(同时还有⼀个 ID 号,本地路由器的 host name)。
2、⽤户端得到这个包后使⽤⾃⼰独有的设备或软件对传来的各域进⾏加密,⽣成⼀个 response 传给 N
AS。
3、 NAS 把传来的 CHAP ID 和 response 分别作为⽤户我和密码,并把原来的 16 字节随机码(challenge)传给 RADIUS 服务器。
4、 RADIUS 根据⽤户名在服务器端查数据库,得到和⽤户端进⾏加密所有的⼀样的密码,然后根据传来的 16 的字节的随机码进⾏加密,将其结果与传来的 password 作⽐较,如果相同表明验证通过,如果不相同表明验证失败。另外,如果验证成功, RADIUS 服务器同样也要以⽣成⼀个 16 字节的随机码对⽤户进⾏询问(challenge,暂不⽀持)
Radius数据包结构:
1.Code
代指数据包的编号,标识了该数据包是什么类型的,如果是未知类型的数据包就会被默认丢弃,⽬前⼤致有⼀下⼏种编号:
编号类型描述
---------------------------------------------------------------------------------------------------
1 Access-Request ---访问请求包
2 Access-Accept ---访问接受包
3 Access-Reject ---访问拒绝包
4 Accounting-Request ---计费请求包
5 Accounting-Response ---计费反馈包
11 Access-Challenge ---转发(⼆次验证)包
255 Reserved ---保留,在⽣成⼀个新的数据包时使⽤
2.Identifier
指的是⼀个⼋位的字节编码,有助于匹配请求,例如能标识出短时间内同⼀个IP端⼝发出的重复请求,防⽌重放攻击,将重复的数据包直接丢弃,不做任何处理。
3.Length
该字段为长度字段是两个⼋位字节。它表⽰的数据包的长度包括代码,标识符,长度,认证器和属性字段。最⼩长度为20和最⼤长度是4096。超过长度字段范围外的字节在接收时会被忽略⽽如果数据包⽐长度字段表⽰短则会被认为是数据丢失⽽被默认丢弃。
a)请求认证器
在Access-Request数据包中,Authenticator值为16⼋位字节随机数,称为请求认证器。这个值应该要是⼀个唯⼀的不可预测的特殊并且值客户端和RADIUS服务器之间共享的防被他⼈攻击获取。这个值通过客户端和服务器共享⼀个共享秘钥以及其他信息进⾏MD5加密(具体的加密操作是否类似响应认证器以及是否能换成Sha-256没有测试过)。
b)响应认证器
在Access-Accept,Access-Reject和Access-Challenge数据包中的Authenticator被称为响应认证器。
ResponseAuth =MD5(Code+ID+Length+RequestAuth+Attributes+Secret)。
其中“+”为连接符号,Secret为共享密钥。
5.Attributes
存储⽤户的信息,如⽤户名,IP地址等。
6.共享密钥(Secret):共享密钥在密码加密以及数据包的鉴别码部分都参与了运算,即使RADIUS数据包被截获,但不知道共享密钥,很难破解⽤户的密码伪造数据。共享密钥应采⽤合适的长度,不应过短,宽⼤密码范围能有效提供对穷举搜寻攻击的防卫,随着密钥长度的增加,其破解花费的时间将⼤⼤增加。
Radius属性字段:
RADIUS属性携带特定的认证,授权,请求和回复的信息和配置详细信息。。
Type:
类型字段是⼀个⼋位字节。是⽤于区分数据包中的数据类型,例如常⽤的User-Name字段就是表⾯这个属性所附带的信息就是⽤户名字段,在默认的数据字典中,Radius服务器定义了⼤约有60种左右的数据类型,如果你想要使⽤默认的数据类型的话,你需要对新增的数据类型进⾏定义,否则RADIUS服务器/客户端会忽略具有未知类型的属性。⽬前我所接触到的常⽤类型共有以下种类:
1、User-Name
该字段表⽰⽤户名,它必须在Access-Request数据包中发送
2、User-Password
该字段表⽰⽤户密码,该属性指⽰⽤户的密码进⾏⾝份验证,或者⽤户在访问访问后的输⼊。只⽤在访问请求包中。
3、NAS-IP-Address
该字段表⽰请求访问的地址
4、NAS-Port
该字段表⽰请求访问的端⼝号
5、Service-Type
该字段⽤于确定请求包所请求的是什么服务,通常服务有⼀下⼏种:
1 Login
2 Framed
3 Callback Login
4 Callback Framed
5 Outbound
6 Administrative
7 NAS Prompt
8 Authenticate Only
9 Callback NAS Prompt
11 Callback Administrative
关于加密:
RADIUS 协议的加密是使⽤ MD5 加密算法进⾏的,在 RADIUS 的客户端(NAS)和服务器端(Radius Server)保存了⼀个密钥(key),RADIUS 协议利⽤这个密钥使⽤ MD5 算法对 RADIUS 中的数据进⾏加密处理。密钥不会在⽹络上传送(两端使⽤⼀个都知晓的密钥,从⽽不需要再从⽹络上传输告之)。RADIUS 的加密主要体现在两⽅⾯:
包加密:
在 RADIUS 包中,有 16 字节的验证字(authenticator)⽤于对包进⾏签名,收到 RADIUS 包的⼀⽅要查看该签名的正确性。如果包的签名不正确,那么该包将被丢弃,对包进⾏签名时使⽤的也是 MD5 算法(利⽤密钥),没有密钥的⼈是不能构造出该签名的。
⼝令加密:
在认证⽤户时,⽤户的⼝令不会在⽹上明⽂传送,⽽是使⽤了 MD5 算法对⼝令进⾏加密。没有密钥的⼈是⽆法正确加密⼝令的,也⽆法正确地对加密过的⼝令进⾏解密。
包的签名与加密:
包的签名指的是 RADIUS 包中 16 字节的 Authenticator,我们称其为“验证字”。
·认证请求包:RequestAuth=Authenticator,认证请求包的验证字是⼀个不可预测的 16 字节随机数。这个随机数将⽤于⼝令的加密。
·认证响应包:ResponseAuth = MD5(Code+ID+Length+Authenticator+Attributes+Key)
·计费请求包:RequestAcct= MD5(Code+ID+Length+16ZeroOctets+Attributes+Key)
·计费响应包:ResponseAcct = MD5(Code+ID+Length+RequestAcct+Attributes+Key) ⼝令的加密:
称共享密钥(key)为 Key;16 字节的认证请求验证字(Authenticator)为 Auth;将⼝令 (Password)分割成 16 字节⼀段(最后⼀段不⾜ 16字节时⽤ 0 补齐),为p1、p2 等;加密后的⼝令块为 c(1)、c(2)等。下⾯运算中 b1、b2 为中间值:
那么加密后的⼝令为 c(1)+c(2)+...+c(i)。
上⾯是协议规定的算法,也有的 RADIUS 服务器为了实现起来简单,修改了上述的算法,具体的讲,b1 的算法同上,但 bi=b2=b1(i>=1),其他运算不变。当⽤户的⼝令长度不超过 16 字节时,两种算法的结果是⼀样的
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论