【ACCESS精品源码栏目提醒】:本文主要为网学会员提供“RADIUS(Remote_Authentication_Dial_In_User_Service)简介及Lunix平台下构建RADIUS服务器设置步骤 - 其它资料”,希望对需要RADIUS(Remote_Authentication_Dial_In_User_Service)简介及Lunix平台下构建RADIUS服务器设置步骤 - 其它资料网友有所帮助,学习一下!
RADIUSRemote Authentication DialIn User Service简介及 Lunix 平台下构建RADIUS 服务器设置步骤 RADIUS:Remote Authentication Dial In User Service,远程用户拨号认证系统,由 RFC2865,RFC2866 定义,是目前应用最广泛的 AAAAAAauthentication、Authorization、Accounting,即认证、授权、计费协议。
RADIUS 协议最初是由 Livingston 公司提出的,原先的目的是为拨号用户进行认证和计费。
后来经过多次改进,形成了一项通用的认证计费协议。
创立于 1966 年 Merit Network Inc.是密执安大学的一家非营利公司,其业务是运行维护该校的网络互联 MichNet。
1987 年,Merit 在美国 NSF(国家科学基金会)的招标中胜出,赢得了 NSFnet(即 Internet 前身)的运营合同。
因为 NSFnet 是基于 IP 的网络,而 MichNet 却基于专有网络协议,Merit 面对着如何将 MichNet 的专有网络协议演变为 IP 协议,同时也要把 MichNet 上的大量拨号业务以及其相关专有协议移植到 IP 网络上来。
1991 年,Merit 决定招标拨号服务器供应商,几个月后,一家叫 Livingston 的公司提出了建议,冠名为 RADIUS,并为此获得了合同。
1992 年秋天,IETF 的 NASREQ 工作组成立随之提交了 RADIUS作为草案。
很快,RADIUS 成为事实上的网络接入标准,几乎所有的网络接入服务器厂商均实现了该协议。
1997 年,RADIUS RFC2039 发表, 最 随后是 RFC2138, 新 的 RADIUSRFC2865 发表于 2000 年 6 月。
RADIUS 是一种 C/S 结构的协议,它的客户端最初就是 NAS(NetAccess Server)服务器,现在任何运行 RADIUS 客户端软件的计算机都可以成为 RADIUS 的客户端。
RADIUS 协议认证机制灵活,可以采用PAP、 CHAP 或者 Unix 登录认证等多种方式。
RADIUS 是一种可扩展的协议,它进行的全部工作都是基于 Attribute-Length-Value 的向量进行的。
RADIUS 也支持厂商扩充厂家专有属性。
RADIUS 的基本工作原理:用户接入 NAS(Network AccessServer),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 的基 使用 UDP本考虑是因为 NAS 和 RADIUS 服务器大多在同一个局域网中,更加快捷方便。
RADIUS 协议还规定了重传机制。
如果 NAS 向某个 RADIUS 服务器提交请求没有收到返回信息,那么可以要求备份 RADIUS 服务器重传。
由于有多个备份 RADIUS 服务器,因此 NAS 进行重传的时候,可以采用轮询的方法。
如果备份 RADIUS 服务器的密钥和以前 RADIUS 服务器的密钥不同,则需要重新进行认证。
由于 RADIUS 协议简单明确,可扩充,因此得到了广泛应用,包括普通电话上网、ADSL 上网、小区宽带上网、IP 电话、VPDN(VirtualPrivate Dialup Networks,基于拨号用户的虚拟专用拨号网业务)、移动电话预付费等业务。
最近 IEEE 提出了 802.1x 标准,这是一种基于端口的标准,用于对无线网络的接入认证,在认证时也采用 RADIUS协议。
LUNIX 平台下构建 RADIUS 服务器 下面我们一起来学习在 Linux 平台下架建一个完整的 RADIUS 服务器。
RADIUS 主要用于对远程拨入的用户进行授权和认证。
它可以仅 使用单一的“数据库”对用户进行认证(效验用户名和口令)。
它主要针对的远程登录类型有:SLIP、PPP、telnet 和 rlogin 等。
其主要特征有: 1. 客户机/服务器C/S模式 一个网络接入服务器以下简称 NAS作为 RADIUS 的客户 机,它负责将用户信息传入 RADIUS 服务器,然后按照 RADIUS 服务器的不同的响应来采取相应动作。
另外,RADIUS 服务器还 可以充当别的 RADIUS 服务器或者其他种类认证服务器的代理 客户。
2.网络安全(Network Security) NAS 和 RADIUS 服务器之间的事务信息交流由两者共享的密 钥进行加密,并且这些信息不会在两者之间泄漏出去。
3.灵活认证机制(Flexible Authentication Mechanisms) RADIUS 服务器支持多种认证机制。
它可以验证来自 PPP、PAP、CHAP 和 UNIX 系统登录的用户信息的有效性。
4.协议可扩展性Extensible Protocol 所有的认证协议都是基于“属性-长度-属性值”3 元素而组成的。
所以协议是扩展起来非常方便。
在目前很多比较高版本的 Linux 中,它们都把 RADIUS 的安装程序包含在系统
源码中。
这样使得我们可以很容易地通过免费的 Linux 系统学习RADIUS 授权、认证的原理和应用。
RADIUS 协议原理 要弄清楚 RADIUS 协议为何能实现授权和认证,我们必须应该从四个方面去认识 RADIUS 协议:协议基本原理、数据包结构、数据包类型、协议属性。
下面我们就来详细地介绍这些内容。
协议基本原理 NAS 提供给用户的服务可能有很多种。
比如,使用 telnet时,用户提供用户名和口令信息,而使用 PPP 时,则是用户发送带有认证信息的数据包。
NAS 一旦得到这些信息,就制造并且发送一个“
Access-Request”数据包给 RADIUS 服务器,其中就包含了用户名、口令(基于 MD5 加密)、NAS 的 ID 号和用户访问的端口号。
如果 RADIUS 服务器在一段规定的时间内没有响应,则 NAS 会重新发送上述数据包;另外如果有多个 RADIUS服务器的话,NAS 在屡次尝试主 RADIUS 服务器失败后,会转而使用其他的 RADIUS 服务器。
RADIUS 服务器会直接抛弃那些没有加 (Shared “共享密钥”Secret)的请求而不做出反应。
如果数据包有效,则 RADIUS服务器访问认证数据库,查找此用户是否存在。
如果存在,则提取此用户的信息列表,其中包括了用户口令、访问端口和访问权限等。
当一个 RADIUS 服务器不能满足用户的需要时,它会求助于其他的 RADIUS 服务器,此时它本身充当了一个客户端。
如果用户信息被否认,那么 RADIUS 服务器给客户端发送一个“
Access-Reject”数据包,指示此用户非法。
如果需要的话,RADIUS 服务器还会在此数据包中加入一段包含错误信息的文本消息,以便让客户端将错误信息反馈给用户。
相反,如果用户被确认,RADIUS 服务器发送“
Access-Challenge”数据包给客户端,并且在数据包中加入了使客户端反馈给用户的信息,其中包括状态属性。
接下来,客户端提示用户做出反应以提供进一步的信息,客户端得到这些信息后,就再次向 RADIUS 服务器提交带有新请求 ID 的 “
Access-Request”数据包,和起初的“
Access-Request”数据包内容不一样的是:起初“
Access-Request”数据包 中的“用户名/口令”信息被替换成此用户当前的反应信息(经过加密),并且数据包中也包含了“
Access-Challenge”中的状态属性(表示为 0 或 1)。
此时,RADIUS 服务器对于这种新的“
Access-Request”可以有三种反应:“
Access-Accept”、“
Access- Reject”或“
Access-Challenge”。
如果所有的要求都属合法,RADIUS 返回一个“
Access-Accept”回应,其中包括了服务类型SLIP PPPLogin User 等和其附属的信息。
例如:对于 SLIP 和 PPP,回应中包括了 IP 地址、 MTU 子网掩码、 和数据包过滤标示信息等。
数据包结构RADIUS 数据包被包装在 UDP 数据报的数据块(Data field)中,其中的目的端口为 1812。
具体的数据包结构如表 1。
8 位 8 位 16 位code Identifier LengthAuthenticator(128 位)Attributes…(不定长) Code Code 域长度为 8 位,具体取值见表 2。
其中,1、2、3用于用户认证,而 4、5 则是统计流量用,12、13 用于试验阶段,255 作为保留。
code 含义1
Access-Request2
Access-Accept3
Access-Reject4 Accounting-Request5 5Accounting-Response11
Access-Challenge12 Status-Serverexperimenta13 Status-clientexperimenta255 Reserved Identifier Identifier 域长度为 8 位,主要用于匹配请求和回应数据包,也即是数据包的编号。
Length 长度为 16 位,取值范围(20grant all on radius. on radiuslocalhostidentified by ‘radius’Linuxmysqladmin u root p refresh //刷新数据库内容3.导入数据表:Linux mysql -u root -pyourpassword radius radius.db修改 dictimport.pl,设置my dbusername radiusmy dbpassword radius然后, 使 导入 dictionary 内容, radius.dictionary 数据表中包含了基本的属性ATTRIBUTE和属性值VALUE等信息。
Linux ./dictimport.pl ../raddb/dictionaryRadius 数据库结构如表 10 所示。
Radius 数据库dictionary radgroupcheckhints radgroupreplynas radreplyradacct realmgroupradact_summary realmsradcheck usergroup4. 启动 radiusdLinuxcd /etc/rc.d/init.dLinuxradiusd start这样,我们已经在 Linux 上成功的安装了一个完整的 RADIUS服务器,你可以体验一下 RADIUS 服务器运行的感觉了。
若你对RADIUS 协议的开发还兴趣的话,你可以在此基础上做深入的研究