TinyRadius.docx
- 文档编号:4729322
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:29
- 大小:329.39KB
TinyRadius.docx
《TinyRadius.docx》由会员分享,可在线阅读,更多相关《TinyRadius.docx(29页珍藏版)》请在冰豆网上搜索。
TinyRadius
Radius原理
RADIUS(RemoteAuthenticationDialInUserService)协议最初是由Livingston公司提出的,原先的目的是为拨号用户进行认证和计费。
后来经过多次改进,形成了一项通用的认证计费协议。
RADIUS认证要用到基于挑战/应答(Challenge/Response)的认证方式。
RADIUS是一种C/S结构的协议,它的客户端最初就是NAS(NetAccessServer)服务器,现在任何运行RADIUS客户端软件的计算机都可以成为RADIUS的客户端。
RADIUS协议认证机制灵活,可以采用PAP、CHAP或者Unix登录认证等多种方式。
RADIUS是一种可扩展的协议,它进行的全部工作都是基于Attribute-Length-Value的向量进行的。
RADIUS的基本工作原理是用户接入NAS,NAS向RADIUS服务器使用Access-Require数据包提交用户信息,包括用户名、密码等相关信息,其中用户密码是经过MD5加密的,双方使用共享密钥,这个密钥不经过网络传播;RADIUS服务器对用户名和密码的合法性进行检验,必要时可以提出一个Challenge,要求进一步对用户认证,也可以对NAS进行类似的认证;如果合法,给NAS返回Access-Accept数据包,允许用户进行下一步工作,否则返回Access-Reject数据包,拒绝用户访问;如果允许访问,NAS向RADIUS服务器提出计费请求Account-Require,RADIUS服务器响应Account-Accept,对用户的计费开始,同时用户可以进行自己的相关操作。
RADIUS服务器和NAS服务器通过UDP协议进行通信,RADIUS服务器的1812端口负责认证,1813端口负责计费工作。
采用UDP的基本考虑是因为NAS和RADIUS服务器大多在同一个局域网中,使用UDP更加快捷方便。
RADIUS协议还规定了重传机制。
如果NAS向某个RADIUS服务器提交请求没有收到返回信息,那么可以要求备份RADIUS服务器重传。
由于有多个备份RADIUS服务器,因此NAS进行重传的时候,可以采用轮询的方法。
如果备份RADIUS服务器的密钥和以前RADIUS服务器的密钥不同,则需要重新进行认证。
RADIUS协议应用范围很广,包括普通电话、上网业务计费,对VPN的支持可以使不同的拨入服务器的用户具有不同权限。
越来越多的软件开始内置RADIUS协议,以方便和各种业务系统对接,如ERP、OA、VPN等,随着这些软件对安全性要求的日益增高,一部分软硬件开始采用双因素方式进行认证,静态密码+动态密码(动态令牌/短信密码)形式,那些支持RADIUS协议的ERP、OA、VPN,在无需对客户端做任何修改情况下就能很好整合动态密码,增强系统身份认证安全。
基本概念
简称
英文全称
中文解释
AAA
Authentication、Authorization、Accounting
验证、授权、计费
PAP
PasswordAuthenticationProtocol
口令验证协议
CHAP
Challenge-HandshakeAuthenticationProtocol
挑战握手认证协议
NAS
NetworkAccessServer
网络接入服务器
RADIUS
RemoteAuthenticationDialInUserService
远程用户拨号认证服务
TCP
TransmissionControlProtocol
传输控制协议
UDP
UserDatagramProtocol
用户数据报协议
PPP
PointtoPointProtocol
点对点协议
AAA可以通过两种途径实现:
1、在NAS端进行认证、授权和计费
2、通过协议进行远程认证、授权和计费。
实现了AAA的协议有:
RADIUS、Kerberos、TACACS等
当用户想要通过某个网络(如电话网)与NAS建立连接从而获得访问其他网络的权利时,
NAS可以选择在NAS上进行本地认证计费,或把用户的信息传递给RADIUS服务器,由Radius进行认证计费;RADIUS协议规定了NAS与RADIUS服务器之间如何传递用户信息和计费信息;RADIUS服务器负责接收用户的连接请求,完成验证,并把传递服务给用户的配置信息返回给NAS.
本地(NAS)验证——PAP方式:
用户以明文的形式把用户名和密码传递给NAS,NAS根据用户名在NAS端查找本地数据库,如果存在相同的用户名和密码表明验证通过,否则验证未通过。
本地(NAS)验证——CHAP方式:
SecretPassword=MD5(ChapID+Password+challenge)
当用户请求上网时,
1、服务器产生一个16字节的随机码(challenge)给用户(同时还有一个ID号,本地路由器的hostname).
2、用户端得到这个包后使用自己独用的设备或软件对传来的各域进行加密,生成一个SecretPassword传给NAS。
3、NAS根据传来的用户名查找自己本地的数据库,得到和用户端进行加密所用的一样的密码,然后根据原来的16字节的随机码进行加密,将其结果与SecretPassword作比较,如果相同表明验证成功,否则失败.
远端(Radius)验证——PAP方式:
如果用户配置了RADIUS验证,其PAP验证过程如下:
采用PAP验证:
1.用户以明文的形式把用户名和他的密码传递给NAS。
2.NAS把用户名和加密过的密码放到认证请求包的相应属性中传递给RADIUS服务器
3.根据RADIUS服务器的返回结果来决定是不允许用户上网。
例1:
1)NAS:
192.168.1.16发送Access-RequestUDP数据包到RADIUSServer。
User-name:
nemo
Portloggingin:
3
Code=1(Access-Request)
ID=0
Length=56
RequestAuthenticator={16octetrandomnumber}
Attributes:
User-Name="nemo"
User-Password={16octetsofPasswordpaddedatendwithnulls,
XORedwithMD5(key|RequestAuthenticator)}
NAS-IP-Address=192.168.1.16
NAS-Port=3
2)RADIUSserver验证了nemo,并且发送了Access-AcceptUDP数据包到接入服务器,告诉把用户nemo登陆到主机192.168.1.3.
Code=2(Access-Accept)
ID=0(sameasinAccess-Request)
Length=38
ResponseAuthenticator={16-octetMD-5checksumofthecode
(2),id(0),Length(38),theRequestAuthenticatorfromabove,theattributesinthisreply,andthesharedsecret}
Attributes:
Service-Type=Login-User
Login-Service=Telnet
Login-Host=192.168.1.3
远端(Radius)验证——CHAP方式:
如果用户配置了RADIUS验证,其CHAP验证过程如下:
1、当用户请求上网时,NAS产生一个16字节的随机码给用户(同时还有一个ID号,本地路由器的hostname)。
2、用户端得到这个包后使用自己独有的设备或软件对传来的各域进行加密,生成一个response传给NAS。
3、NAS把传来的CHAPID和response分别作为用户我和密码,并把原来的16字节随机码(challenge)传给RADIUS服务器。
4、RADIUS根据用户名在服务器端查找数据库,得到和用户端进行加密所有的一样的密码,然后根据传来的16的字节的随机码进行加密,将其结果与传来的password作比较,如果相同表明验证通过,如果不相同表明验证失败。
另外,如果验证成功,RADIUS服务器同样也要以生成一个16字节的随机码对用户进行询问(challenge,暂不支持)
例2:
接入服务器192.168.1.16发送一个Access-RequestUDP数据包到RADIUSServer。
User-name:
floppy
Portloggingin:
20
Protocol:
PPP
接入服务器发送的数据包包含属性Service-Type=Frameduser,Framed-Protocol=PPP
暗示RADIUSserver这个用户要使用PPP服务。
Code=1(Access-Request)
ID=1
Length=71
RequestAuthenticator={16octetrandomnumberalsousedasCHAPchallenge}
Attributes:
User-Name="floppy"
CHAP-Password={1octetCHAPIDfollowedby16octetCHAPresponse}
NAS-IP-Address=192.168.1.16
NAS-Port=20
Service-Type=Framed-User
Framed-Protocol=PPP
RADIUSserver验证floppy,并发送Access-AcceptUDP数据包到NAS告诉NAS可以允许PPP服务并从它的动态地址池中分配一个网络地址给用户。
Code=2(Access-Accept)
ID=1(sameasinAccess-Request)
Length=56
ResponseAuthenticator={16-octetMD-5checksumofthecode
(2),id
(1),Length(56),theRequestAuthenticatorfromabove,theattributesinthisreply,andthekey}
Attributes:
Service-Type=Framed-User
Framed-Protocol=PPP
Framed-IP-Address=255.255.255.254
Framed-Routing=None
Framed-Compression=1(VJTCP/IPHeaderCompression)
Framed-MTU=1500
RADIUS协议
Radius服务分客户端和服务器端
通常对Radius协议的服务端口号是1645(认证)、1646(计费)或1812(认证)、1813(计费)。
下图是radius协议包结构:
各个域的解释:
Num
域名
长度
描述
1
Code(包类型)
1字节
指示Radius包的类型
2
Identifier(包标识)
1字节
用于匹配请求包和响应包,同一组请求包和响应包的Identifier应相同。
3
Length(包长度)
2字节
整个包的长度
4
Authenticator(验证字)
16字节
用于对包进行签名
5
Attributes
属性
1)Code,包类型:
类型名
描述
1
Access-Request——认证请求过程
2
Access-Accept——认证接受过程
3
Access-Reject——认证拒绝过程
4
Accounting-Request——计费请求过程
5
Accounting-Response——计费响应过程
Radius认证计费过程:
1、用户拨入后
(1),所拨入的设备(比如NAS)将拨入用户的用户信息(比如用户名、口令、所占用的端口等等)打包向RADIUS服务器发送
(2)。
2、如果该用户是一个合法的用户,那么Radius告诉NAS该用户可以上网,同时传回该用户的配置参数(3);否则,Radius反馈NAS该用户非法的信息(3)。
3、如果该用户合法,MAS就根据从RADIUS服务器传回的配置参数配置用户(4)。
如果用户非法,NAS反馈给用户出错信息并断开该用户连接(4)。
4、如果用户可以访问网络,RADIUS客户要向RADIUS服务器发送一个记费请求包表明对该用户已经开始记费(5),RADIUS服务器收到并成功记录该请求包后要给予响应(6)。
5、当用户断开连接时(连接也可以由接入服务器断开)(7),RADIUS客户向RADIUS服务器发送一个记费停止请求包,其中包含用户上网所使用网络资源的统计信息(上网时长、进/出的字节/包数等)(8),RADIUS服务器收到并成功记录该请求包后要给予响应(9)。
2)Identifier,包标识:
用以匹配请求包和响应包,该字段的取值范围为0~255
协议规定:
1、在任何时间,发送给同一个Radius服务器的不同包的Identifier域不能相同,如果出现相同的情况,Radius将认为后一个包是前一个包的拷贝而不对其进行处理
2、Radius针对某个请求包的响应包应该与该请求包在Identifier上相匹配(相同)。
3)Length,包长度:
整个包长度,包括Code,Identifier,Length,Authenticator,Attributes域的长度。
4)Authenticator,验证字:
该验证字分为两种:
1、请求验证字---RequestAuthenticator
用在请求报文中,必须为全局唯一的随机值。
2、响应验证字---ResponseAuthenticator
用在响应报文中,用于鉴别响应报文的合法性。
响应验证字=MD5(Code+ID+Length+请求验证字+Attributes+Key)
RADIUS主要特征
Radius是一种流行的AAA协议,同时其采用的是UDP协议传输模式。
1)为什么使用UDP?
1、NAS和RADIUS服务器之间传递的一般是几十至上百个字节长度的数据,用户可以容忍几秒到十几秒的验证等待时间。
当处理大量用户时服务器端采用多线程,UDP简化了服务器端的实现过程。
2、TCP是必须成功建立连接后才能进行数据传输的,这种方式在有大量用户使用的情况下实时性不好。
3、当向主用服务器发送请求失败后,还要必须向备用的服务器发送请求。
于是RADIUS要有重传机制和备用服务器机制,它所采用的定时,TCP不能很好的满足。
2)C/S结构
RADIUS采用客户/服务器(Client/Server)结构:
1、RADIUS的客户端通常运行于接入服务器(NAS)上,RADIUS服务器通常运行于一台工作站上,一个RADIUS服务器可以同时支持多个RADIUS客户(NAS)。
2、RADIUS的服务器上存放着大量的信息,接入服务器(NAS)无须保存这些信息,而是通过RADUIS协议对这些信息进行访问。
这些信息的集中统一的保存,使得管理更加方便,而且更加安全。
3、RADIUS服务器可以作为一个代理,以客户的身份同其他的RADIUS服务器或者其他类型的验证服务器进行通信。
用户的漫游通常就是通过RADIUS代理实现的。
3)网络安全
RADIUS协议的加密是使用MD5加密算法进行的,在RADIUS的客户端(NAS)和服务器端(RadiusServer)保存了一个密钥(key),RADIUS协议利用这个密钥使用MD5算法对RADIUS中的数据进行加密处理。
密钥不会在网络上传送(两端使用一个都知晓的密钥,从而不需要再从网络上传输告之)。
RADIUS的加密主要体现在两方面:
1、包加密:
在RADIUS包中,有16字节的验证字(authenticator)用于对包进行签名,收到RADIUS包的一方要查看该签名的正确性。
如果包的签名不正确,那么该包将被丢弃,对包进行签名时使用的也是MD5算法(利用密钥),没有密钥的人是不能构造出该签名的。
2、口令加密:
在认证用户时,用户的口令不会在网上明文传送,而是使用了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为中间值:
b1=MD5(Key+Auth)c
(1)=p1xorb1
b2=MD5(Key+c
(1))c
(2)=p2xorb2
………………
bi=MD5(Key+c(i-1))c(i)=pixorbi
那么加密后的口令为c
(1)+c
(2)+...+c(i)。
上面是协议规定的算法,也有的RADIUS服务器为了实现起来简单,修改了上述的算法,具体的讲,b1的算法同上,但bi=b2=b1(i>=1),其他运算不变。
当用户的口令长度不超过16字节时,两种算法的结果是一样的。
4)灵活的验证机制
RADIUS协议允许服务器支持多种验证方式,比如PPP的PAP和CHAP、UNIX登录以及其
他认证机制。
通常的RADIUS服务器都支持PAP,但有些RADIUS服务器不支持CHAP,原因在于有些RADIUS服务器在保存用户的口令时是加密保存的。
而要验证一个CHAP用户的合法性,必须能够获得该用户的明文口令才行。
5)扩展性
RADIUS协议具有很好的扩展性。
RADIUS包是由包头和一定数目的属性(Attribute)构
成的。
新属性的增加不会影响到现有协议的实现。
通常的NAS厂家在生产NAS时,还同时开发与之配套的RADIUS服务器。
为了提供一些功能,常常要定义一些非标准的(RFC上没有定义过的)属性。
关于各个厂家有那些扩展的属性,一般可以从相应的RADIUS服务器的字典(dictionary)文件中找到(tinyRadius的字典在:
/org/tinyradius/dictionary/default_dictionary)。
计费保护:
由于计费是个用户敏感的问题,我们提供的计费信息要求准确外更要求完备,不能丢失话单,而Radius计费服务器的计费很容易受通讯不畅或计费服务器工作超负荷等意外因素的影响而丢失话单,为此我们提供了本地计费的保护能力,即话单从NAS发送出去以后如果没有收到计费服务器的确认信息我们就认为计费失败,并将该话单(不论是实时计费中间话单还是离线话单)送到本地话单池中。
RADIUS协议属性
认证报文的常用属性
属性值
属性名称
意义
1
User-Name
用户名
2
User-Password
用户密码
3
Chap-Password
Chap认证方式中的用户密码
4
Nas-IP-Address
NAS的ID地址
5
Nas-Port
用户接入端口号
6
Service-Type
服务类型
7
Framed-Protocol
协议类型
8
Framed-IP-Address
为用户提供的IP地址
9
Framed-IP-NetMask
地址掩码
10
Framed-Routing
为路由器用户设置的路由方式
11
Filter-Id
过滤表的名称
12
Framed-MTU
为用户配置的最大传输单元
13
Framed-Compression
该连接使用压缩协议
14
Login-IP-Host
对login用户提供的可连接主机的ip地址
15
Login-Service
对login用户可提供的服务
16
Login-TCP-Port
TCP服务端口
18
Reply-Message
认证服务器返回用户的信息
24
State
认证服务器发送challenge包时传送的需在接
下来的认证报文中回应的字符串(与Acess-Challenge相关的属性)
25
Class
认证通过时认证服务器返回的字符串信息,要求在该用户的计费报文中送给计费服务器
26
Vendor-Specific
可扩展属性
27
Session-Timeout
在认证通过报文或Challenge报文中,通知NAS该用户可用的会话时长(时长预付费)
28
Idle-Timeout
允许用户空闲在线的最大时长
32
NAS-Identifier
标识NAS的字符串
33
Proxy-State
NAS通过代理服务器转发认证报文时服务器添加在报文中的属性
40
Acct-Status-Type
计费请求报文的类型
41
Acct-Delay-Time
Radius客户端发送计费报文耗费的时间
42
Acct-Input-Octets
输入字节数
43
Acct-Output-Octets
输出字节数
44
Acct-Session-Id
计费会话标识
45
Acct-Authentic
在计费包中标识用户认证通过的方式
46
Acct-Session-Time
用户在线时长
47
Acct-Input-Packets
输入包数
48
Acct-Output-Packets
输出包数
49
Acct-Terminate-Case
用户下线原因
50
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TinyRadius
![提示](https://static.bdocx.com/images/bang_tan.gif)