分类: LINUX
2015-01-16 16:53:18
RADIUS(Remote Authentication Dial-In User Service,远程认证拨号用户服务)是一种分布式的、客户端/服务器结构的信息交互协议,能保护网络不受未授权访问的干扰,常应用在既要求较高安全性、又允许远程用户访问的各种网络环境中。该协议定义了RADIUS的报文格式及其消息传输机制,并规定使用UDP作为封装RADIUS报文的传输层协议(UDP端口1812、1813分别作为认证、计费端口)。
RADIUS最初仅是针对拨号用户的AAA协议,后来随着用户接入方式的多样化发展,RADIUS也适应多种用户接入方式,如以太网接入、ADSL接入。它通过认证授权来提供接入服务,通过计费来收集、记录用户对网络资源的使用。
· 客户端:RADIUS客户端一般位于NAS上,可以遍布整个网络,负责传输用户信息到指定的RADIUS服务器,然后根据从服务器返回的信息进行相应处理(如接受/拒绝用户接入)。
· 服务器:RADIUS服务器一般运行在中心计算机或工作站上,维护相关的用户认证和网络服务访问信息,负责接收用户连接请求并认证用户,然后给客户端返回所有需要的信息(如接受/拒绝认证请求)。
RADIUS服务器通常要维护三个数据库,如图1-2所示:
图1-2 RADIUS服务器的组成
· “Users”:用于存储用户信息(如用户名、口令以及使用的协议、IP地址等配置信息)。
· “Clients”:用于存储RADIUS客户端的信息(如NAS的共享密钥、IP地址等)。
· “Dictionary”:用于存储RADIUS协议中的属性和属性值含义的信息。
RADIUS客户端和RADIUS服务器之间认证消息的交互是通过共享密钥的参与来完成的,并且共享密钥不能通过网络来传输,增强了信息交互的安全性。另外,为防止用户密码在不安全的网络上传递时被窃取,在传输过程中对密码进行了加密。
RADIUS服务器支持多种方法来认证用户,如基于PPP的PAP、CHAP认证。另外,RADIUS服务器还可以作为一个代理,以RADIUS客户端的身份与其它的RADIUS认证服务器进行通信,负责转发RADIUS认证和计费报文。
用户、RADIUS客户端和RADIUS服务器之间的交互流程如图1-3所示。
图1-3 RADIUS的基本消息交互流程
消息交互流程如下:
(1) 用户发起连接请求,向RADIUS客户端发送用户名和密码。
(2) RADIUS客户端根据获取的用户名和密码,向RADIUS服务器发送认证请求包(Access-Request),其中的密码在共享密钥的参与下由MD5算法进行加密处理。
(3) RADIUS服务器对用户名和密码进行认证。如果认证成功,RADIUS服务器向RADIUS客户端发送认证接受包(Access-Accept);如果认证失败,则返回认证拒绝包(Access-Reject)。由于RADIUS协议合并了认证和授权的过程,因此认证接受包中也包含了用户的授权信息。
(4) RADIUS客户端根据接收到的认证结果接入/拒绝用户。如果允许用户接入,则RADIUS客户端向RADIUS服务器发送计费开始请求包(Accounting-Request)。
(5) RADIUS服务器返回计费开始响应包(Accounting-Response),并开始计费。
(6) 用户开始访问网络资源。
(7) 用户请求断开连接,RADIUS客户端向RADIUS服务器发送计费停止请求包(Accounting-Request)。
(8) RADIUS服务器返回计费结束响应包(Accounting-Response),并停止计费。
(9) 用户结束访问网络资源。
RADIUS采用UDP报文来传输消息,通过定时器管理机制、重传机制、备用服务器机制,确保RADIUS服务器和客户端之间交互消息的正确收发。RADIUS报文结构如图1-4所示。
图1-4 RADIUS报文结构
各字段的解释如下:
(1) Code域
长度为1个字节,用于说明RADIUS报文的类型,如表1-1所示。
表1-1 Code域的主要取值说明
Code |
报文类型 |
报文说明 |
1 |
Access-Request认证请求包 |
方向Client->Server,Client将用户信息传输到Server,由Server判断是否接入该用户。该报文中必须包含User-Name属性,可选包含NAS-IP-Address、User-Password、NAS-Port等属性 |
2 |
Access-Accept认证接受包 |
方向Server->Client,如果Access-Request报文中的所有Attribute值都可以接受(即认证通过),则传输该类型报文 |
3 |
Access-Reject认证拒绝包 |
方向Server->Client,如果Access-Request报文中存在任何无法被接受的Attribute值(即认证失败),则传输该类型报文 |
4 |
Accounting-Request计费请求包 |
方向Client->Server,Client将用户信息传输到Server,请求Server开始/停止计费,由该报文中的Acct-Status-Type属性区分计费开始请求和计费结束请求 |
5 |
Accounting-Response计费响应包 |
方向Server->Client,Server通知Client已经收到Accounting-Request报文,并且已经正确记录计费信息 |
(2) Identifier域
长度为1个字节,用于匹配请求包和响应包,以及检测在一段时间内重发的请求包。类型一致的请求包和响应包的Identifier值相同。
(3) Length域
长度为2个字节,表示RADIUS数据包(包括Code、Identifier、Length、Authenticator和Attribute)的长度,范围从20~4096。超过Length域的字节将作为填充字符被忽略。如果接收到的包的实际长度小于Length域的值时,则包会被丢弃。
(4) Authenticator域
长度为16个字节,用于验证RADIUS服务器的应答报文,另外还用于用户密码的加密。Authenticator包括两种类型:Request Authenticator和Response Authenticator。
(5) Attribute域
不定长度,用于携带专门的认证、授权和计费信息,提供请求和响应报文的配置细节。Attribute可包括多个属性,每一个属性都采用(Type、Length、Value)三元组的结构来表示。
· 类型(Type),1个字节,取值为1~255,用于表示属性的类型,表1-2列出了RADIUS认证、授权、计费常用的属性。
· 长度(Length),表示该属性(包括类型、长度和属性)的长度,单位为字节。
· 属性值(Value),表示该属性的信息,其格式和内容由类型和长度决定,最大长度为253字节。
表1-2 RADIUS属性
属性编号 |
属性名称 |
属性编号 |
属性名称 |
1 |
User-Name |
45 |
Acct-Authentic |
2 |
User-Password |
46 |
Acct-Session-Time |
3 |
CHAP-Password |
47 |
Acct-Input-Packets |
4 |
NAS-IP-Address |
48 |
Acct-Output-Packets |
5 |
NAS-Port |
49 |
Acct-Terminate-Cause |
6 |
Service-Type |
50 |
Acct-Multi-Session-Id |
7 |
Framed-Protocol |
51 |
Acct-Link-Count |
8 |
Framed-IP-Address |
52 |
Acct-Input-Gigawords |
9 |
Framed-IP-Netmask |
53 |
Acct-Output-Gigawords |
10 |
Framed-Routing |
54 |
(unassigned) |
11 |
Filter-ID |
55 |
Event-Timestamp |
12 |
Framed-MTU |
56-59 |
(unassigned) |
13 |
Framed-Compression |
60 |
CHAP-Challenge |
14 |
Login-IP-Host |
61 |
NAS-Port-Type |
15 |
Login-Service |
62 |
Port-Limit |
16 |
Login-TCP-Port |
63 |
Login-LAT-Port |
17 |
(unassigned) |
64 |
Tunnel-Type |
18 |
Reply-Message |
65 |
Tunnel-Medium-Type |
19 |
Callback-Number |
66 |
Tunnel-Client-Endpoint |
20 |
Callback-ID |
67 |
Tunnel-Server-Endpoint |
21 |
(unassigned) |
68 |
Acct-Tunnel-Connection |
22 |
Framed-Route |
69 |
Tunnel-Password |
23 |
Framed-IPX-Network |
70 |
ARAP-Password |
24 |
State |
71 |
ARAP-Features |
25 |
Class |
72 |
ARAP-Zone-Access |
26 |
Vendor-Specific |
73 |
ARAP-Security |
27 |
Session-Timeout |
74 |
ARAP-Security-Data |
28 |
Idle-Timeout |
75 |
Password-Retry |
29 |
Termination-Action |
76 |
Prompt |
30 |
Called-Station-Id |
77 |
Connect-Info |
31 |
Calling-Station-Id |
78 |
Configuration-Token |
32 |
NAS-Identifier |
79 |
EAP-Message |
33 |
Proxy-State |
80 |
Message-Authenticator |
34 |
Login-LAT-Service |
81 |
Tunnel-Private-Group-id |
35 |
Login-LAT-Node |
82 |
Tunnel-Assignment-id |
36 |
Login-LAT-Group |
83 |
Tunnel-Preference |
37 |
Framed-AppleTalk-Link |
84 |
ARAP-Challenge-Response |
38 |
Framed-AppleTalk-Network |
85 |
Acct-Interim-Interval |
39 |
Framed-AppleTalk-Zone |
86 |
Acct-Tunnel-Packets-Lost |
40 |
Acct-Status-Type |
87 |
NAS-Port-Id |
41 |
Acct-Delay-Time |
88 |
Framed-Pool |
42 |
Acct-Input-Octets |
89 |
(unassigned) |
43 |
Acct-Output-Octets |
90 |
Tunnel-Client-Auth-id |
44 |
Acct-Session-Id |
91 |
Tunnel-Server-Auth-id |
· 表1-2中所列的属性由RFC 2865、RFC 2866、RFC 2867和RFC 2868所定义。
· 常用RADIUS标准属性的介绍请参见“1.1.7 1. 常用RADIUS标准属性”。
RADIUS协议具有良好的可扩展性,RFC 2865中定义的26号属性(Vendor-Specific)用于设备厂商对RADIUS进行扩展,以实现标准RADIUS没有定义的功能。
设备厂商可以封装多个自定义的“(Type、Length、Value)”子属性来扩展RADIUS。如图1-5所示,26号属性报文内封装的子属性包括以下四个部分:
· Vendor-ID,表示厂商代号,最高字节为0,其余3字节的编码见RFC 1700。H3C公司的Vendor-ID是25506。H3C RADIUS扩展属性的介绍请参见“1.1.7 2. H3C RADIUS扩展属性”。
· Vendor-Type,表示子属性类型。
· Vendor-Length,表示子属性长度。
· Vendor-Data,表示子属性的内容。
图1-5 包括扩展属性的RADIUS报文片断
HWTACACS(HW Terminal Access Controller Access Control
System,HW终端访问控制器控制系统协议)是在TACACS(RFC 1492)基础上进行了功能增强的安全协议。该协议与RADIUS协议类似,采用客户端/服务器模式实现NAS与HWTACACS服务器之间的通信。
HWTACACS协议主要用于PPP(Point-to-Point Protocol,点到点协议)和VPDN(Virtual
Private Dial-up Network,虚拟专用拨号网络)接入用户及终端用户的认证、授权和计费。其典型应用是对需要登录到设备上进行操作的终端用户进行认证、授权以及对终端用户执行的操作进行记录。设备作为HWTACACS的客户端,将用户名和密码发给HWTACACS服务器进行验证,用户验证通过并得到授权之后可以登录到设备上进行操作,HWTACACS服务器上会记录用户对设备执行过的命令。
HWTACACS协议与RADIUS协议都实现了认证、授权、计费的功能,它们有很多相似点:结构上都采用客户端/服务器模式;都使用公共密钥对传输的用户信息进行加密;都有较好的灵活性和可扩展性。两者之间存在的主要区别如表1-3所示。
表1-3 HWTACACS协议和RADIUS协议区别
HWTACACS协议
RADIUS协议
使用TCP,网络传输更可靠
使用UDP,网络传输效率更高
除了HWTACACS报文头,对报文主体全部进行加密
只对验证报文中的密码字段进行加密
协议报文较为复杂,认证和授权分离,使得认证、授权服务可以分离在不同的安全服务器上实现。例如,可以用一个HWTACACS服务器进行认证,另外一个HWTACACS服务器进行授权
协议报文比较简单,认证和授权结合,难以分离
支持对设备的配置命令进行授权使用。用户可使用的命令行受到用户级别和AAA授权的双重限制,某一级别的用户输入的每一条命令都需要通过HWTACACS服务器授权,如果授权通过,命令就可以被执行
不支持对设备的配置命令进行授权使用
用户登录设备后可以使用的命令行由用户级别决定,用户只能使用缺省级别等于/低于用户级别的命令行
下面以Telnet用户为例,说明使用HWTACACS对用户进行认证、授权和计费的过程。基本消息交互流程图如图1-6所示。
图1-6 Telnet用户认证、授权和计费流程图
在整个过程中的基本消息交互流程如下:
(1) Telnet用户请求登录设备。
(2) HWTACACS客户端收到请求之后,向HWTACACS服务器发送认证开始报文。
(3) HWTACACS服务器发送认证回应报文,请求用户名。
(4) HWTACACS客户端收到回应报文后,向用户询问用户名。
(5) 用户输入用户名。
(6) HWTACACS客户端收到用户名后,向HWTACACS服务器发送认证持续报文,其中包括了用户名。
(7) HWTACACS服务器发送认证回应报文,请求登录密码。
(8) HWTACACS客户端收到回应报文,向用户询问登录密码。
(9) 用户输入密码。
(10) HWTACACS客户端收到登录密码后,向HWTACACS服务器发送认证持续报文,其中包括了登录密码。
(11) HWTACACS服务器发送认证回应报文,指示用户通过认证。
(12) HWTACACS客户端向HWTACACS服务器发送授权请求报文。
(13) HWTACACS服务器发送授权回应报文,指示用户通过授权。
(14) HWTACACS客户端收到授权回应成功报文,向用户输出设备的配置界面。
(15) HWTACACS客户端向HWTACACS服务器发送计费开始报文。
(16) HWTACACS服务器发送计费回应报文,指示计费开始报文已经收到。
(17) 用户请求断开连接。
(18) HWTACACS客户端向HWTACACS服务器发送计费结束报文。
(19) HWTACACS服务器发送计费结束报文,指示计费结束报文已经收到。
LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)是一种基于TCP/IP的目录访问协议,用于提供跨平台的、基于标准的目录服务。它是在继承了X.500协议优点的基础上发展起来的,并对X.500在读取、浏览和查询操作方面进行了改进,适合于存储那些不经常改变的数据。
LDAP协议的典型应用是用来保存系统中的用户信息,如Microsoft的Windows操作系统就使用了Active Directory Server来保存操作系统的用户、用户组等信息,用于用户登录Windows时的认证和授权。
LDAP中使用目录记录并管理系统中的组织信息、人员信息以及资源信息,目录是按照树型结构组织,由多个条目(Entry)组成的。条目是具有DN(Distinguished
Name,识别名)的属性(Attribute)集合。
LDAP的目录服务功能建立在Client/Server的基础之上,所有的目录信息数据存储在LDAP服务器上。目前,Microsoft的Active Directory Server、IBM的Tivoli
Directory Server和Sun的Sun ONE Directory Server都是常用的LDAP服务器软件。
LDAP协议中定义了多种操作来实现LDAP的各种功能,用于认证和授权的操作主要为绑定和查询。
· 绑定操作的作用有两个:一是与LDAP服务器建立连接并获取LDAP服务器的访问权限。二是用于检查用户信息的合法性。
· 查询操作就是构造查询条件,并获取LDAP服务器的目录资源信息的过程。
使用LDAP协议进行认证时,其基本的工作流程如下:
(1) LDAP客户端使用LDAP服务器管理员DN与LDAP服务器进行绑定,与LDAP服务器建立连接并获得查询权限。
(2) LDAP客户端使用认证信息中的用户名构造查询条件,在LDAP服务器指定根目录下查询此用户,得到用户的DN。
(3) LDAP客户端使用用户DN和用户密码与LDAP服务器进行绑定,检查用户密码是否正确。
使用LDAP协议进行授权的过程与认证过程相似,首先必须通过与LDAP服务器进行绑定,建立与服务器的连接,然后在此连接的基础上通过查询操作得到用户的授权信息。与认证过程稍有不同的是,在查询用户DN时,除能够获得用户DN外,还可以获得用户信息中的授权信息。如果查询用户DN时便能够获得相应的授权信息,则授权过程与认证过程相同;否则还需要再次以LDAP服务器管理员身份与LDAP服务器进行绑定,并在获得相应的目录查询权限后,使用查询到的用户DN构造查询条件,继续对该用户的其它授权信息进行查询。
下面以Telnet用户登录设备为例,说明如何使用LDAP来对用户进行的认证和授权。基本消息交互流程如图1-7所示。
图1-7 LDAP认证的基本消息交互流程
在整个过程中的基本消息交互流程如下:
(1) 用户发起连接请求,向LDAP客户端发送用户名和密码。
(2) LDAP客户端收到请求之后,与LDAP服务器建立TCP连接。
(3) LDAP客户端以管理员DN和管理员DN密码为参数向LDAP服务器发送管理员绑定请求报文(Administrator Bind Request)获得查询权限。
(4) LDAP服务器进行绑定请求报文的处理。如果绑定成功,则向LDAP客户端发送绑定成功的回应报文。
(5) LDAP客户端以输入的用户名为参数,向LDAP服务器发送用户DN查询请求报文(User DN Search
Request)。
(6) LDAP服务器收到查询请求报文后,根据报文中的查询起始地址、查询范围、以及过滤条件,对用户DN进行查找。如果查询成功,则向LDAP客户端发送查询成功的回应报文。查询得到的用户DN可以是一或多个。
(7) LDAP客户端以查询得到的用户DN和用户输入的密码为参数,向LDAP服务器发送用户DN绑定请求报文(User DN Bind Request),检查用户密码是否正确。
(8) LDAP服务器进行绑定请求报文的处理。
· 如果绑定成功,则向LDAP客户端发送绑定成功的回应报文。
· 如果绑定失败,则向LDAP客户端发送绑定失败的回应报文。LDAP客户端以下一个查询到的用户DN(如果存在的话)为参数,继续向服务器发送绑定请求,直至有一个DN绑定成功,或者所有DN均绑定失败。如果所有用户DN都绑定失败,则LDAP客户端通知用户登录失败并拒绝用户接入。
(9) LDAP客户端与LDAP服务器进行授权报文的交互。如果需要使用其它方案(如HWTACACS等)继续进行授权,则与对应服务器进行授权报文的交互。
(10) 授权成功之后,LDAP客户端通知用户登录成功。
一个ISP(Internet Service Provider,互联网服务提供商)域是由属于同一个ISP的用户构成的群体。
NAS对用户的管理是基于ISP域的,每个接入用户都属于一个ISP域。用户所属的ISP域是由用户登录时提供的用户名决定的,如图1-8所示。
图1-8 用户名决定域名
用户的认证、授权、计费都是在相应的ISP域视图下应用预先配置的认证、授权、计费方案来实现的。AAA有缺省的认证、授权、计费方案,分别为本地认证、本地授权、本地计费。如果用户所属的ISP域下未应用任何认证、授权、计费方案,系统将使用缺省的认证、授权、计费方案。
为便于对不同接入方式的用户进行区分管理,AAA将用户划分为以下几个类型:
· lan-access用户:LAN接入用户,如802.1X认证、MAC地址认证用户。
· login用户:登录设备用户,如SSH、Telnet、Web、FTP、终端接入用户。
· Portal接入用户。
· PPP接入用户。
· WAPI接入用户。
PPP接入用户、WAPI接入用户的支持情况与设备的型号有关,请参见“配置指导导读”中的“特性差异情况”部分的介绍。
用户登录设备后,AAA还可以对其提供以下服务,用于提高用户登录后对设备操作的安全性:
· 命令行授权:用户执行的每一条命令都需要接受授权服务器的检查,只有授权成功的命令才被允许执行。关于命令行授权的详细介绍请参考“基础配置指导”中的“配置用户通过CLI登录设备”。
· 命令行计费:用户执行过的所有命令或被成功授权执行的命令,会被计费服务器进行记录。关于命令行计费的详细介绍请参考“基础配置指导”中的“配置用户通过CLI登录设备”。
· 级别切换认证:在不退出当前登录、不断开当前连接的前提下,用户将自身的用户级别由低向高切换的时候,需要通过服务器的认证,级别切换操作才被允许。关于用户级别切换的详细介绍请参考“基础配置指导”中的“CLI”。
AAA支持在ISP域视图下针对不同的接入方式配置不同的认证、授权、计费的方法(一组不同的认证/授权/计费方案),具体的配置步骤请参见“1.4 在ISP域中配置实现AAA的方法”。
与AAA、RADIUS、HWTACACS、LDAP相关的协议规范有:
· RFC 2865:Remote Authentication Dial In
User Service (RADIUS)
· RFC 2866:RADIUS Accounting
· RFC 2867:RADIUS Accounting Modifications
for Tunnel Protocol Support
· RFC 2868:RADIUS Attributes for Tunnel
Protocol Support
· RFC 2869:RADIUS Extensions
· RFC 1492:An Access Control Protocol,
Sometimes Called TACACS
· RFC 1777:Lightweight Directory Access
Protocol
· RFC 2251:Lightweight Directory Access
Protocol (v3)
表1-4 常用RADIUS标准属性
属性编号
属性名称
描述
1
User-Name
需要进行认证的用户名称
2
User-Password
需要进行PAP方式认证的用户密码,在采用PAP认证方式时,该属性仅出现在Access-Request报文中
3
CHAP-Password
需要进行CHAP方式认证的用户密码的消息摘要。在采用CHAP认证方式时,该属性出现在Access-Request报文中
4
NAS-IP-Address
Server通过不同的IP地址来标识不同的Client,通常Client采用本地一个接口的IP地址来唯一的标识自己,这就是NAS-IP-Address。该属性指示当前发起请求的Client的NAS-IP-Address。该字段仅出现在Access-Request报文中
5
NAS-Port
用户接入NAS的物理端口号
6
Service-Type
用户申请认证的业务类型
7
Framed-Protocol
用户Frame类型业务的封装协议
8
Framed-IP-Address
为用户所配置的IP地址
11
Filter-ID
访问控制列表的名称
12
Framed-MTU
用户与NAS之间数据链路的MTU(Maximum Transmission Unit,最大传输单元)值。例如在802.1X的EAP方式认证中,NAS通过Framed-MTU值指示Server发送EAP报文的最大长度,防止EAP报文大于数据链路MTU导致的报文丢失
14
Login-IP-Host
用户登录设备的接口IP地址
15
Login-Service
用户登录设备时采用的业务类型
18
Reply-Message
服务器反馈给用户的纯文本描述,可用于向用户显示认证失败的原因
26
Vendor-Specific
厂商自定义的私有属性。一个报文中可以有一个或者多个私有属性,每个私有属性中可以有一个或者多个子属性
27
Session-Timeout
会话结束之前,给用户提供服务的最大时间,即用户的最大可用时长
28
Idle-Timeout
会话结束之前,允许用户持续空闲的最大时间,即用户的限制切断时间
31
Calling-Station-Id
NAS用于向Server告知标识用户的号码,在我司设备提供的lan-access业务中,该字段填充的是用户的MAC地址,采用的“HH-HH-HH-HH-HH-HH”格式封装
32
NAS-Identifier
NAS用来向Server标识自己的名称
40
Acct-Status-Type
计费请求报文的类型
· 1:Start
· 2:Stop
· 3:Interim-Update
· 4:Reset-Charge
· 7:Accounting-On(3GPP中有定义)
· 8:Accounting-Off (3GPP中有定义)
· 9-14:Reserved for Tunnel Accounting
· 15:Reserved for Failed
45
Acct-Authentic
用户采用的认证方式,包括RADIUS,Local以及Remote
60
CHAP-Challenge
在CHAP认证中,由NAS生成的用于MD5计算的随机序列
61
NAS-Port-Type
NAS认证用户的端口的物理类型
· 15:以太网
· 16:所有种类的ADSL
· 17:Cable(有线电视电缆)
· 19:WLAN-IEEE 802.11
· 201:VLAN
· 202:ATM
如果在ATM或以太网端口上还划分VLAN,则该属性值为201
79
EAP-Message
用于封装EAP报文,实现RADIUS协议对EAP认证方式的支持
80
Message-Authenticator
用于对认证报文进行认证和校验,防止非法报文欺骗。该属性在RADIUS协议支持EAP认证方式被使用
87
NAS-Port-Id
用字符串来描述的认证端口信息
5. RADIUS扩展属性
1.1.3 HWTACACS协议简介
1. HWTACACS协议与RADIUS协议的区别
2. HWTACACS的基本消息交互流程
1.1.4 LDAP协议简介
1. LDAP目录服务
2. 使用LDAP协议进行认证和授权
3. LDAP的基本消息交互流程
1.1.5 基于域的用户管理
1.1.6 协议规范
1.1.7 RADIUS属性
1. 常用RADIUS标准属性