当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > 搭建Linux下RADIUS服务器(1)

Linux服务器
linux下用cron定时执行任务的方法
.htaccess绑定域名到子目录的方法
linux apache下虚拟主机配置方法
apache 局域网访问配置方案
linux Apache服务器系统安全设置与优化
linux中mac地址绑定方法
linux托盘不断闪烁之解决方法
Apache配置 虚拟转向实例
Apache No space left on device的解决办法
Apache rewrite的重写相关的参数说明
LINUX入门级常用命令20条整理
Ubuntu设置开机自动挂载所有格式硬盘分区
5个可能被你忽略的Linux安全设置方法
学习Apache的mod rewrite、access写法
改版时保留原链接,创建新的URL的方法
rsync中文手册之使用rsync实现网站镜像和备份linux
rsync 数据同步使用详解
linux URL的301重定向代码分析
eclipse3.2.2 + MyEclipse5.5 + Tomcat5.5.27 配置数据库连接池
Apache服务器二级域名的完美实现

Linux服务器 中的 搭建Linux下RADIUS服务器(1)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-18   浏览: 50 ::
收藏到网摘: n/a


作者:何千军

RADIUS主要用于对远程拨入的用户进行授权和认证。它可以仅使用单一的“数据库”对用户进行认证(效验用户名和口令)。它主要针对的远程登录类型有:SLIP、PPP、telnet和rlogin等。

其主要特征有:

1.客户机/服务器(C/S)模式

一个网络接入服务器(以下简称NAS)作为RADIUS的客户机,它负责将用户信息传入RADIUS服务器,然后按照RADIUS服务器的不同的响应来采取相应动作。另外,RADIUS服务器还可以充当别的RADIUS服务器或者其他种类认证服务器的代理客户。

2.网络安全(NetworkSecurity)

NAS和RADIUS服务器之间的事务信息交流由两者共享的密钥进行加密,并且这些信息不会在两者之间泄漏出去。

3.灵活认证机制(FlexibleAuthenticationMechanisms)

RADIUS服务器支持多种认证机制。它可以验证来自PPP、PAP、CHAP和UNIX系统登录的用户信息的有效性。

4.协议可扩展性(ExtensibleProtocol)

所有的认证协议都是基于“属性-长度-属性值”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服务器会直接抛弃那些没有加“共享密钥”(SharedSecret)的请求而不做出反应。如果数据包有效,则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,PPP,LoginUser等)和其附属的信息。例如:对于SLIP和PPP,回应中包括了IP地址、子网掩码、MTU和数据包过滤标示信息等。

数据包结构

RADIUS数据包被包装在UDP数据报的数据块(Datafield))中,其中的目的端口为1812。具体的数据包结构如表1。


8位8位16位
codeIdentifierLength
Authenticator(128位)
Attributes…(不定长)



·CodeCode域长度为8位,具体取值见表2。其中,1、2、3用于用户认证,而4、5则是统计流量用,12、13用于试验阶段,255作为保留。


code含义
1Access-Request
2Access-Accept
3Access-Reject
4Accounting-Request
55Accounting-Response
11Access-Challenge
12Status-Server(experimenta)
13Status-client(experimenta)
255Reserved



·IdentifierIdentifier域长度为8位,主要用于匹配请求和回应数据包,也即是数据包的编号。

·Length长度为16位,取值范围(20<=Length<=4096),此长度包括Code、Identifier、Length、Authenticator和Attribute五个数据域的长度总和(Code、Identifier、Length、Authenticator为定长,Attribute为变长)。超出范围的数据将被视为附加数据(Padding)或直接被忽略。

·Authenticator长度为16个字节(128位),主要用于鉴定来自RADIUS服务器的回应,同时也用于对用户口令进行加密。

(1)RequestAuthenticator

在“Access-Request”数据包中,Authenticator是一个16字节的随机数,称为“RequestAuthenticator”。它在NAS和RADIUS服务器之间通过“共享密码”(secret)传输数据的整个生命周期中是唯一的。

(2)ResponseAuthenticator

在“Access-Accept”、“Access-Reject”和“Access-Challenge”中的Authenticator域被称为“ResponseAuthenticator”。

有下面的计算方法:

ResponseAuth=MD5(Code+ID+Length+RequestAuth+Attributes+Secret)——(公式1)



·Attributes属性域的数据格式如表3所示。


8位8位不定长(0或多个字节)
TypeLengthvalue…



Type指示了Atribute的类型,通用的有几十种,如表4所示。


Type说明Type说明
1User-Name5NAS-Port-Id
2Password6Service-Type
3CHAP-Password7Framed-Protocol
4NAS-IP-Address……



数据包类型

RADIUS数据包的类型由其Code域(头8位)指定。

·Access-Request(接入-请求)

“Access-Request”数据包由NAS发出,由RADIUS服务器接收。

其中的“User-Password”或“CHAP-Password”属性值被默认地以MD5方法加密。

数据包结构如表5所示。


8位8位16位
Code=1Identifier-随着Attributes的Value变化而变化,重传时则保持不变Length
Authenticator(128位)—根据Identifier变化而变化
Attributes…(不定长)



Attributes应该包括以下几个属性:

◆“User-Name”
◆“User-Password”或“CHAP-Password”
◆“NAS-IP-Address”
*“NAS-Identifier”
◆“NAS-Port”
◆“NAS-Port-Type”



·Access-Accept

“Access-Accept”由RADIUS服务器发出,返回给NAS。表示用户的信息是合法的。其中包括了必要的配置信息,以便下一步为用户提供服务。数据包结构如表6所示。


8位8位16位
Code=2Identifier-和“Access-Request”的Identifier相同Length
Authenticator(128位)-属于ResponseAuthenticator,由公式1计算得到
Attributes…(不定长)



Access-Reject“Access-Reject”由RADIUS服务器发出,返回给NAS。表示用户的信息是非法的。其中应该包括一个或多个的“Reply-Message”(回复消息,包含一些便于NAS返回给用户的一些错误信息)。数据包结构如表7所示。


8位8位16位
Code=3Identifier-和“Access-Request”的Identifier相同Length
Authenticator(128位)-属于Response的Authenticator,由公式1计算得到
Attributes…(不定长)



属性

属性如表8所示。其中,Length的计算方法为:Type+Length+Value。


8位8位不定长(0或多个字节)
TypeLengthValue…



Value有4种类型: