AAA是Authentication(认证)、Authorization(授权)和Accounting(计费)的简称,是网络安全的一种管理机制,提供了认证、授权、计费3种安全功能。同时提供本地认证/授权方式、RADIUS服务器认证/授权和计费方式、HWTACACS服务器认证/授权和计费三种AAA方案。后两种可视为“委托认证/授权/计费”方式,因为这两种方式中的认证/授权/计费功能的实现不是由本地设备完成的,而是所配置的远程RADIUS服务器或HWTACACS服务器完成的。
与NAC方案中的802.1x认证、MAC地址和Portal认证方式基于接入设备接口(仅可在接入设备上部署)进行的认证方式不同,AAA采用基于用户(可以是所有用户,也可以是特定用户组中的用户)进行认证、授权和计费的方案。NAC的各种认证方式中,也是需要借助AAA方案中配置的本地用户信息或远程RADIUS服务器上配置的用户信息进行认证。
AAA基础
“认证”是用来验证用户是否可以获得网络访问权;“授权”是授权通过认证的用户可以使用哪些服务;“计费”是记录通过认证的用户使用网络资源的情况。在实际网络应用中,可以只使用AAA提供的一种或两种安全服务。
——认证是获得网络访问权限,即网络报文可以在网络中进行传输;授权是通过认证的用户可以使用的服务,如使用FTP服务器,认证是授权的前提,没有通过认证而给用户授权,也无法访问FTP服务器,只是进行了认证,而没有授权,则不能访问FTP服务器,认证是对网络的使用权,授权是对具体的服务的使用权,具体的服务也可以是某段网络资源,相当于也对网络访问进行授权。
一、AAA的基本构架
AAA是采用“客户端/服务器”(C/S)结构,其中AAA客户端(也称网络接入服务器——NAS)就是使能了AAA功能的网络设备(可以是网络中任意一台设备,不一定是接入设备,而且可以在网络中多个设备上使能),而AAA服务器就是专门用来认证、授权和计费的服务器(可以由服务器主机配置,也可以由提供了对应服务器功能的网络设备上配置)
——这里有点绕,AAA客户端也称网络接入服务器,客户端也是服务器。其实按照上图的示意,有点代理服务器的意味,用户是通过AAA客户端从AAA服务器获得相应的认证、授权后才能访问网络和服务。
在设备上使能了AAA功能后,当用户要通过AAA客户端访问某个网络前,需要先从AAA服务器中获得访问该网络的权限。但这个任务通常不是由担当AAA客户端的设备自己来完成的,而是通过设备把用户的认证、授权、计费信息发送给AAA服务器来完成的。当然,如果在担当AAA客户端的设备上同时配置了相应的AAA服务器功能,则此时客户端和服务器端就为一体了,这时实现的是AAA本地认证和授权(本地方式不提供计费功能)了。
1、AAA认证
华为S系列交换机的AAA功能支持以下认证方式:
(1)不认证:对用户非常信任,不对其进行合法检查,一般情况下不采用这种方式。
(2)本地认证:将用户信息配置在本地设备上。本地认证的优点是速度快,可以为运营商降低成本,缺点是存储信息量受设备硬件条件限制。
(3)远程认证:将用户信息配置在AAA认证服务器上。支持通过RADIUS(Remote Authentication Dial In User Service,远程认证拨入用户服务)协议或HWTACACS(HuaWei Terminal Access Controller Access Control System,华为终端访问控制系统)协议进行远程认证。
2、AAA授权
华为S系列交换机的AAA功能支持5中授权方式:
(1)不授权:不对用户进行授权处理。
(2)本地授权:根据本地设备为本地用户账号配置的相关属性(如允许使用的接入服务类型和FTP访问目录等)进行授权。
(3)HWTACACS授权:由HWTACACS服务器对用户进行远程授权。
(4)if-authenticated授权:如果用户通过了认证,而且使用的认证模式是本地或远程认证,则直接为用户授权。
(5)RADIUS认证成功后授权:RADIUS协议的认证和授权是绑定在一起的,不能单独使用RADIUS进行授权。
3、计费
华为S系列交换机的AAA功能支持3种计费方式(不支持本地计费方式):
(1)不计费:不对用户计费。
(2)RADIUS计费:设备将计费报文送往RADIUS服务器,由RADIUS服务器完成对用户的计费。
(3)HWTACACS计费:设备将计费报文送往HWTACACS服务器,由HWTACACS服务器完成对用户的计费。
二、AAA基于域的用户管理
华为S系列交换机通过域来进行AAA用户管理,每个域下可以应用不同的认证、授权和计费方案,以及RADIUS或者HWTACACS服务器模板,相当于对用户进行分类管理。属于域中的用户通过在该域中应用的认证、授权和计费方案进行认证、授权和计费。所以AAA方案配置中,一定要在对应的域下被绑定、应用才能对具体用户生效。
缺省情况下,设备存在配置名为default和default_admin两个域,全局缺省普通域为default,全局缺省管理域为default_admin。两个域均不能删除,只能修改。当无法确认接入用户的域时使用缺省域,default域为接入用户的缺省域,缺省为本地认证;default_admin域为管理员账户(如http、SSH、telnet、terminal和ftp用户)的缺省域,缺省为本地认证。
用户所属的域是由域分隔符后的字符串来决定的。域分隔符可以是为“@”、“|”、“%”等符号,如user@huawei就表示属于huawei域。如果用户名中没有带@,就属于系统缺省的default域。
——这里需要注意,不带域分隔符@的用户,属于系统缺省的default域,如果是是管理员账户,是否缺省是default_admin域。
自定义的域可以同时被配置成全局缺省普通域和全局缺省管理域。但域下配置的授权信息较AAA服务器的授权信息优先级低,即优先使用AAA服务器下发的授权属性,在AAA服务器无该项授权或不支持该项授权时域的授权属性才生效。当然通常是两者配置的授权属性一致。
三、RADIUS协议
RADIUS最初仅是针对拨号用户的AAA协议,后来随着用户接入方式的多样性,RADIUS也适应多种用户接入方式,如以太网接入,ADSL接入。它通过认证授权来提供接入服务,通过计费来收集、记录用户对网络资源的使用。该协议定义了基于UDP的RADIUS帧格式及其消息传输机制,并规定UDP端口1812、1813分别作为认证(包括授权)、计费端口。
1、RADIUS服务器
RADIUS服务器程序一般运行在中心计算机或工作站上,维护相关的用户认证和网络服务访问信息,负责接收用户连接请求并认证用户,然后给客户端返回所有需要的信息(如接受/拒绝认证请求)。RADIUS服务器通常要维护以下3个数据库:
(1)Users:用于存储用户信息(如用户名、口令以及使用的协议、IP地址等配置信息)。
(2)Clients:用于存储RADIUS客户端的信息(如接入设备的共享秘钥、IP地址等)。
(3)Dictionary:用于存储RADIUS协议中的属性和属性值含义的信息。
2、RADIUS客户端
RADIUS客户端程序一般位于网络接入服务器NAS(Network Access Server)设备上,可以遍布整个网络,负责传输各个接入网络用户信息到指定的RADIUS服务器,然后根据从RADIUS服务器返回的信息进行相应处理(如接受/拒绝用户接入)。——RADIUS客户端就相当于一条看门狗,负责传递用户信息,根据主人返回的信息拒绝或放行。
3、安全机制
RADIUS客户端和RADIUS服务器之间认证消息的交互是通过共享秘钥来对传输数据加密的,但共享秘钥不通过网络来传输,增强了信息交互的安全性。
4、认证和计费消息流程
RADIUS客户端与服务器间的信息交互流程如下图:
(1)用户访问RADIUS客户端设备时,会按照提示输入用户名和密码,发送给客户设备。
(2)客户端设备在收到用户发来的用户名和密码信息向RADIUS服务器发送认证请求。
(3)RADIUS服务器接收到合法的请求后,完成认证,并把所需的用户授权信息返回给接入设备;对于非法的请求,RADIUS服务器返回认证失败的信息给客户端设备。
RADIUS计费的信息交互流程和认证/授权的信息交互流程类似。
四、HWTACACS协议
HWTACACS是在TACACS(RFC1492)基础上进行了功能增强的安全协议。该协议与RADIUS协议类似,也是采用C/S模式实现NAS与HWTACACS服务器之间的通信。
HWTACACS协议主要用于点对点协议PPP和VPDN(VirtualPrivate Dial-up Network,虚拟私有拨号网络)接入用户及终端用户的认证、授权和计费。典型应用是对需要登录到设备上进行操作的终端用户进行认证、授权和计费。同样,这时的设备是作为HWTACACS的客户端,负责将用户名和密码发给HWTACACS服务器进行验证。
HWTACACS协议与RADIUS协议都实现了认证、授权、计费功能,它们有很多相似点:结构上都采用C/S模式,都使用公共秘钥对传输的用户信息进行加密。与RADIUS相比,HWTACACS具有更加可靠的传输和加密特性,更加适合于安全控制。
五、报文协议帧格式
字段 |
长度 |
描述 |
Code |
1 byte |
用来标识RADIUS报文类型。
|
Packet Identifier |
1 byte |
用于匹配请求和回应报文。如果在一个很短的时间内接收到相同的源IP地址、源UDP端口号和相同的Identifier域的请求报文,RADIUS服务器就可以认为是重复的请求报文。 |
Packet Length |
2 bytes |
包含了报文中的Code域,Identifier域,Length域,Authenticator域和属性域的总长度。如果收到的报文实际长度超过Length,超过部分被当做填充内容忽略掉,如果实际长度小于Length,报文被丢弃。 |
Authenticator |
16 bytes |
用于认证来自服务端的响应,也用于用户密码的加密处理中。 |
AVPs |
变长 |
属性字段,承载认证、授权、计费以及配置等信息。采用TLV格式:
|
Radius属性: AVPs(Attribute Value Pairs)中的A
属性编号 |
属性名 |
1 |
User-Name |
2 |
User-Password |
3 |
CHAP-Password |
4 |
NAS-IP-Address |
5 |
NAS-Port |
6 |
Service-Type |
7 |
Framed-Protocol |
8 |
Framed-IP-Address |
9 |
Framed-IP-Netmask |
10 |
Framed-Routing |
11 |
Filter-Id |
12 |
Framed-MTU |
13 |
Framed-Compression |
14 |
Login-IP-Host |
15 |
Login-Service |
16 |
Login-TCP-Port |
18 |
Reply-Message |
19 |
Callback-Number |
20 |
Callback-Id |
22 |
Framed-Route |
23 |
Framed-IPX-Network |
24 |
State |
25 |
Class |
26 |
Vendor-Specific |
27 |
Session-Timeout |
28 |
Idle-Timeout |
29 |
Termination-Action |
30 |
Called-Station-Id |
31 |
Calling-Station-Id |
32 |
NAS-Identifier |
33 |
Proxy-State |
34 |
Login-LAT-Service |
35 |
Login-LAT-Node |
36 |
Login-LAT-Group |
37 |
Framed-AppleTalk-Link |
38 |
Framed-AppleTalk-Network |
39 |
Framed-AppleTalk-Zone |
40 |
Acct-Status-Type |
41 |
Acct-Delay-Time |
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-Cause |
50 |
Acct-Multi-Session-Id |
51 |
Acct-Link-Count |
52 |
Acct-Input-Gigawords |
53 |
Acct-Output-Gigawords |
55 |
Event-Timestamp |
60 |
CHAP-Challenge |
61 |
NAS-Port-Type |
62 |
Port-Limit |
63 |
Login-LAT-Port |
64 |
Tunnel-Type |
65 |
Tunnel-Medium-Type |
66 |
Tunnel-Client-Endpoint |
67 |
Tunnel-Server-Endpoint |
68 |
Acct-Tunnel-Connection |
69 |
Tunnel-Password |
70 |
ARAP-Password |
71 |
ARAP-Features |
72 |
ARAP-Zone-Access |
73 |
ARAP-Security |
74 |
ARAP-Security-Data |
75 |
Password-Retry |
76 |
Prompt |
77 |
Connect-Info |
78 |
Configuration-Token |
79 |
EAP-Message |
80 |
Message-Authenticator |
81 |
Tunnel-Private-Group-ID |
82 |
Tunnel-Assignment-ID |
83 |
Tunnel-Preference |
84 |
ARAP-Challenge-Response |
85 |
Acct-Interim-Interval |
86 |
Acct-Tunnel-Packets-Lost |
87 |
NAS-Port-Id |
88 |
Framed-Pool |
89 |
Chargeable-User-Identity |
90 |
Tunnel-Client-Auth-ID |
91 |
Tunnel-Server-Auth-ID |
94 |
Originating-Line-Info |
95 |
NAS-IPv6-Address |
96 |
Framed-Interface-Id |
97 |
Framed-IPv6-Prefix |
98 |
Login-IPv6-Host |
99 |
Framed-IPv6-Route |
100 |
Framed-IPv6-Pool |
101 |
Error-Cause |
192-223 |
保留给实验用 |
224-240 |
保留给特定实现用 |
241-255 |
预留的,而且不应该使用它们 |
RADIUS报文类型
目前RADIUS定义了16种报文类型,认证报文、计费报文、授权报文。
认证报文类型
报文类型 |
说明 |
Access-Request |
认证请求报文,是RADIUS报文交互过程中的第一个报文,用来携带用户的认证信息(例如:用户名、密码等)。认证请求报文由RADIUS客户端发送给RADIUS服务器,RADIUS服务器根据该报文中携带的用户信息判断是否允许接入。 |
Access-Accept |
认证接受报文,是服务器对客户端发送的Access-Request报文的接受响应报文。如果Access-Request报文中的所有属性都可以接受(即认证通过),则发送该类型报文。客户端收到此报文后,用户才能认证通过并被赋予相应的权限。 |
Access-Reject |
认证拒绝报文,是服务器对客户端的Access-Request报文的拒绝响应报文。如果Access-Request报文中的任何一个属性不可接受(即认证失败),则RADIUS服务器返回Access-Reject报文,用户认证失败。 |
Access-Challenge |
认证挑战报文。EAP认证时,RADIUS服务器接收到Access-Request报文中携带的用户名信息后,会随机生成一个MD5挑战字,同时将此挑战字通过Access-Challenge报文发送给客户端。客户端使用该挑战字对用户密码进行加密处理后,将新的用户密码信息通过Access-Request报文发送给RADIUS服务器。RADIUS服务器将收到的已加密的密码信息和本地经过加密运算后的密码信息进行对比,如果相同,则该用户为合法用户。 |
EAP认证具体见——https://blog.csdn.net/kaoa000/article/details/90666583
计费报文类型
报文类型 |
说明 |
Accounting-Request(Start) |
计费开始请求报文。如果客户端使用RADIUS模式进行计费,客户端会在用户开始访问网络资源时,向服务器发送计费开始请求报文。 |
Accounting-Response(Start) |
计费开始响应报文。服务器接收并成功记录计费开始请求报文后,需要回应一个计费开始响应报文。 |
Accounting-Request(Interim-update) |
实时计费请求报文。为避免计费服务器无法收到计费停止请求报文而继续对该用户计费,可以在客户端上配置实时计费功能。客户端定时向服务器发送实时计费报文,减少计费误差。 |
Accounting-Response(Interim-update) |
实时计费响应报文。服务器接收并成功记录实时计费请求报文后,需要回应一个实时计费响应报文。 |
Accounting-Request(Stop) |
计费结束请求报文。当用户断开连接时(连接也可以由接入服务器断开),客户端向服务器发送计费结束请求报文,其中包括用户上网所使用的网络资源的统计信息(上网时长、进/出的字节数等),请求服务器停止计费。 |
Accounting-Response(Stop) |
计费结束响应报文。服务器接收计费停止请求报文后,需要回应一个计费停止响应报文。 |
授权报文类型
报文类型 |
说明 |
CoA-Request |
动态授权请求报文。当管理员需要更改某个在线用户的权限时(例如,管理员不希望用户访问某个网站),可以通过服务器发送一个动态授权请求报文给客户端,使客户端修改在线用户的权限。 |
CoA-ACK |
动态授权请求接受报文。如果客户端成功更改了用户的权限,则客户端回应动态授权请求接受报文给服务器。 |
CoA-NAK |
动态授权请求拒绝报文。如果客户端未成功更改用户的权限,则客户端回应动态授权请求拒绝报文给服务器。 |
DM-Request |
用户离线请求报文。当管理员需要让某个在线的用户下线时,可以通过服务器发送一个用户离线请求报文给客户端,使客户端终结用户的连接。 |
DM-ACK |
用户离线请求接受报文。如果客户端已经切断了用户的连接,则客户端回应用户离线请求接受报文给服务器。 |
DM-NAK |
用户离线请求拒绝报文。如果客户端无法切断用户的连接,则客户端回应用户离线请求拒绝报文给服务器。 |
RADIUS认证、授权和计费
接入设备作为RADIUS客户端,负责收集用户信息(例如:用户名、密码等),并将这些信息发送到RADIUS服务器。RADIUS服务器则根据这些信息完成用户身份认证以及认证通过后的用户授权和计费。用户、RADIUS客户端和RADIUS服务器之间的交互流程如下图所示。
RADIUS认证、授权和计费的交互流程
1、当用户需要访问外部网络时,用户发起连接请求,向RADIUS客户端(即接入设备)发送用户名和密码。
2、RADIUS客户端根据获取的用户名和密码,向RADIUS服务器提交认证请求报文。该报文中包含用户名、密码等用户的身份信息。
3、RADIUS服务器对用户身份的合法性进行检验:
● 如果用户身份合法,RADIUS服务器向RADIUS客户端返回认证接受报文,允许用户进行下一步工作。由于RADIUS协议合并了认证和授权的过程,因此认证接受报文中也包含了用户的授权信息。
● 如果用户身份不合法,RADIUS服务器向RADIUS客户端返回认证拒绝报文,拒绝用户访问接入网络。
4、RADIUS客户端通知用户认证是否成功。
5、RADIUS客户端根据接收到的认证结果接入/拒绝用户。如果允许用户接入,则RADIUS客户端向RADIUS服务器发送计费开始请求报文。
6、RADIUS服务器返回计费开始响应报文,并开始计费。
7、用户开始访问网络资源。
8、(可选)在使能实时计费功能的情况下,RADIUS客户端会定时向RADIUS服务器发送实时计费请求报文,以避免因付费用户异常下线导致的不合理计费。
9、(可选)RADIUS服务器返回实时计费响应报文,并实时计费。
10、用户发起下线请求,请求停止访问网络资源。
11、RADIUS客户端向RADIUS服务器提交计费结束请求报文。
12、RADIUS服务器返回计费结束响应报文,并停止计费。
13、RADIUS客户端通知用户访问结束,用户结束访问网络资源。
CoA
用户认证成功后,管理员可以通过CoA(Change of Authorization)报文来修改在线用户的权限。例如,通过CoA为用户下发VLAN,可以保证某一部分的员工无论从哪个设备端口接入网络,均属于同一个VLAN。CoA的报文交互流程如图2-5所示。
图2-5 CoA的交互流程
1、RADIUS服务器根据业务信息,向RADIUS客户端发送CoA-Request报文,请求更改用户的授权信息。该报文中可以包括策略名(具体策略在RADIUS客户端上配置)或是ACL规则。
2、RADIUS客户端根据CoA-Request报文里的授权属性,在保持用户在线的情况下更改用户的授权信息。
3、RADIUS客户端再回应CoA-ACK/NAK报文。
● 如果更改成功(例如:CoA报文中的策略名与客户端上的配置匹配),则RADIUS客户端向RADIUS服务器回应CoA-ACK报文。
● 如果更改失败,则RADIUS客户端向RADIUS服务器回应CoA-NAK报文。
DM
DM(Disconnect Message)是指用户离线报文,RADIUS服务器端通过DM报文主动发起强迫用户下线操作。DM的报文交互流程如图2-6所示。
图2-6 DM的交互流程
1、管理员在RADIUS服务器上强制用户下线,RADIUS服务器向RADIUS客户端发送DM Request报文,请求用户下线。
2、RADIUS客户端接收到RADIUS服务器的DM Request报文后,通知用户离线。
3、RADIUS客户端回应DM ACK/NAK报文。
● 如果用户成功离线,RADIUS客户端给RADIUS服务器回应DM ACK报文;
● 否则,RADIUS客户端给RADIUS服务器回应DM NAK报文。
HWTACACS报文介绍
HWTACACS报文与RADIUS报文的格式不同。所有RADIUS报文均采用相同的报文格式,而HWTACACS的报文除了具有相同的报文头之外,认证、授权和计费报文的格式均不同。
HWTACACS报文头
所有的HWTACACS报文都是用12字节长的报文头,如图3-1所示。
图3-1 HWTACACS报文头部
字段 |
含义 |
major version |
HWTACACS协议主版本号,当前版本号为0xc。 |
minor version |
HWTACACS协议次版本号,当前版本号为0x0。 |
type |
HWTACACS协议报文类型,包括认证(0x01)、授权(0x02)和计费(0x03)。 |
seq_no |
对于同一个会话,当前报文的序列号,取值范围为1~254。 |
flags |
报文主体加密标记,目前只支持8位中的第1位,0表示对报文主体加密,1表示不对报文主体加密。 |
session_id |
会话ID,当前会话的唯一标识。 |
length |
HWTACACS报文主体的长度,不包括报文头。 |
HWTACACS认证报文格式
HWTACACS认证报文包括三种类型:
● 认证开始报文Authentication Start:认证开始时,客户端向服务器发送认证开始报文,该报文中包括认证类型、用户名和一些认证数据。
● 认证持续报文Authentication Continue:客户端接收到服务器回应的认证回应报文后,如果确认认证过程没有结束,则使用认证持续报文响应。
● 认证回应报文Authentication Reply:服务器接收到客户端发送的认证开始报文或认证持续报文后,向客户端发送的唯一一种认证报文,用于向客户端反馈当前认证的状态。
HWTACACS认证报文的具体格式如下:
HWTACACS认证开始报文格式
HWTACACS认证开始报文中各个字段的含义
字段 |
含义 |
action |
具体的认证操作,目前只支持“认证登录(0x01)”动作。 |
priv_lvl |
用户的权限级别。 |
authen_type |
认证的类型,目前设备仅支持:
|
service |
请求认证的服务类型,当前版本支持PPP(0x03)、LOGIN(0x01)、NONE(0x00)三种服务类型,分别对应PPP用户、管理员用户和其他用户。 |
user len |
登录用户输入的用户名长度。 |
port len |
port字段的长度。 |
rem_addr len |
rem_addr字段的长度。 |
data len |
认证数据区的长度。 |
user |
请求认证的用户名,最大长度为129。 |
port |
请求认证的用户接口名,最大长度为47。
|
rem_addr |
登录用户的IP地址。 |
data |
认证数据区,根据action和authen_type的不同封装不同的数据。例如PAP认证时,该字段内容为PAP显式密码。 |
HWTACACS认证持续报文格式
HWTACACS认证持续报文中各个字段的含义
字段 |
含义 |
user_msg len |
登录用户输入的字符串长度。 |
data len |
认证数据区的长度。 |
flags |
认证持续标记,0表示认证过程持续,1表示认证过程终止。 |
user_msg |
登录用户输入的字符串,用于回应认证回应报文中的server_msg字段,向服务器提供用户登录时输入的密码。 |
data |
认证数据区,根据action和authen_type的不同封装不同的数据。例如PAP认证时,该字段内容为PAP显式密码。 |
这个报文是需要延续认证开始报文,即需要上下文的,因为这里的data字段需要根据action和authen_type不同封装不同的数据,而认证持续报文中没有这两个字段。
HWTACACS认证回应报文格式
HWTACACS认证回应报文中各个字段的含义
字段 |
含义 |
status |
认证的状态,包括:
|
flags |
控制客户端是否将用户输入的密码回显。如果该标志位置1,则用户输入的密码不会回显。 |
server_msg len |
server_msg字段的长度。 |
data len |
认证数据区的长度。 |
server_msg |
可选字段,用于服务器将一些附加信息带给用户。 |
data |
认证数据区,用于向客户端提供一些信息。 |
HWTACACS授权报文包括两种类型:
● 授权请求报文Authorization Request:HWTACACS的认证和授权是分离的,用户可以使用HWTACACS认证而使用其他协议进行授权。如果需要通过HWTACACS进行授权,则客户端向服务器发送授权请求报文,该报文中包括了授权所需的一切信息。
● 授权回应报文Authorization Response:服务器接收到授权请求报文后,向客户端发送授权回应报文,该报文中包括了授权的结果。
HWTACACS授权报文的具体格式如下:
字段 |
含义 |
authen_method |
指定用户的认证方式,包括:
|
authen_service |
请求认证的服务类型,当前版本支持PPP(0x03)、LOGIN(0x01)和NONE(0x00)三种服务类型,分别对应PPP用户、管理员用户和其他用户。 |
arg_cnt |
授权请求报文中携带的属性数。 |
argN |
指定授权请求报文的属性。 |
其它字段同前面。
HWTACACS授权回应报文格式
字段 |
含义 |
status |
指定用户的授权状态,包括:
|
arg_cnt |
授权回应报文中携带的授权属性数。 |
argN |
指定HWTACACS授权服务器下发的授权属性。 |
HWTACACS计费报文包括两种类型:
● 计费请求报文Accounting Request:该报文中包括了计费所需的信息。
● 计费回应报文Accounting Response:服务器接收并成功记录计费请求报文后,需要回应一个计费响应报文。
HWTACACS计费报文的具体格式如下:
字段 |
含义 |
flags |
计费类型:
|
authen_service |
请求认证的服务类型,当前版本支持PPP(0x03)、LOGIN(0x01)和NONE(0x00)三种服务类型,分别对应PPP用户、管理员用户和其他用户。 |
arg_cnt |
计费请求报文中携带的属性数。 |
argN |
指定计费请求报文的属性。 |
HWTACACS计费回应报文格式
字段 |
含义 |
server_msg len |
server_msg字段的长度。 |
data len |
data字段的长度。 |
status |
指定计费状态:
|
server_msg |
指定计费服务器带给客户端的信息。 |
data |
服务器提供给管理员的信息。 |
HWTACACS属性
在HWTACACS授权或计费报文中,argN字段携带了服务器下发给用户或用户传输给服务器的信息。
表3-10描述了设备支持的HWTACACS属性,对于不在该表内的属性,设备不对属性进行解析,直接忽略具体的属性内容。
表3-10 常用HWTACACS属性
属性名 |
属性说明 |
acl |
授权的ACL ID。 |
addr |
用户的IP地址。 |
autocmd |
用户登录到设备后自动执行的命令。 |
bytes_in |
设备接收到的字节数,K、M、G分别表示KByte,MByte,GByte,如果没有单位则表示Byte。 |
bytes_out |
设备发送的字节数,K、M、G分别表示KByte,MByte,GByte,如果没有单位则表示Byte。 |
callback-line |
回呼号码,即服务器传递过来可以显示给用户的信息,例如移动电话号码等。 |
cmd |
在shell上执行的命令行,最大长度为251字符。命令行记录时封装的是完整的命令行,命令行授权时封装的是命令行的第一个关键字。 |
cmd-arg |
命令行授权请求时,请求授权的命令行参数。最后一个参数命令行参数后需要再封装一个cmd-arg= |
disc_cause |
下线原因,仅结束计费请求报文支持该属性。包括:
|
disc_cause_ext |
扩展的下线原因,仅结束计费请求报文支持该属性。包括:
|
dnaverage |
下行平均速率,单位是bit/s。 |
dnpeak |
下行峰值速率,单位是bit/s。 |
dns-servers |
主DNS服务器的IP地址。 |
elapsed_time |
用户的在线时长,单位是秒。 |
ftpdir |
FTP用户的初始目录。 |
gw-password |
隧道密码,字符串类型,长度范围是1~248。如果所包含的属性值超出了允许的设置范围则仅取前248个字符。 |
ideltime |
空闲切断时间,即服务器会自动切断空闲切断时间内没有进行任何操作的用户。 |
-hello-interval |
L2TP Hello报文的间隔时间,目前设备尚不支持该属性。 |
-hidden-avp |
L2TP的隐藏属性值对AVP(Attribute Value Pair),目前设备尚不支持该属性。 |
-nosession-timeout |
L2TP无会话时切断时间,即无会话时,L2TP隧道将会该时间间隔后被拆除。目前设备尚不支持该属性。 |
-group-num |
L2TP组号,只有下发了该属性,其他的L2TP属性才能生效,如果没有下发该属性,其他L2TP属性都会被忽略。 |
-tos-reflect |
L2TP的TOS的值,目前设备尚不支持该属性。 |
-tunnel-authen |
是否进行L2TP的隧道认证。0表示不进行隧道认证,1表示进行隧道认证。 |
-udp-checksum |
L2TP的UDP包的检验和。 |
nocallback-verify |
回呼之后不需要验证。 |
nohangup |
设备是否自动切断用户的连接,取值为true或者false。该属性依附于autocmd属性,在配置了autocmd参数后,用户执行完autocmd的命令后是否将用户切断。ture表示不切断,false表示切断。 |
paks_in |
设备接收到的包数,单位是个。 |
paks_out |
设备发送的包数,单位是个。 |
priv-lvl |
用户的级别。 |
protocol |
协议类型,是业务类型的一个子集,针对ppp、connection业务类型生效。目前支持“pad”、“telnet”、“ip”和“vpdn”四种协议类型。
|
task_id |
任务ID,对于同一任务,其开始和结束记录的task_id必须相同。 |
timezone |
当地时区。 |
tunnel-id |
建立隧道时的隧道本端用户名,字符串形式,长度范围是1~29。如果所包含的属性值超出了允许的设置范围则仅取前29个字符。 |
tunnel-type |
将要建立的隧道类型。目前只支持L2TP类型的隧道,对应的tunnel-type是3。 |
service |
业务类型,标识当前计费或授权的业务。 |
source-ip |
隧道本端IP的地址。 |
upaverage |
上行平均速率,单位是bit/s。 |
uppeak |
上行峰值速率,单位是bit/s。 |
HWTACACS属性在报文中的支持情况
按照报文类型划分,HWTACACS授权报文可以分为授权请求报文和授权回应报文。但在实际使用过程中,HWTACACS授权可以划分为EXEC用户授权、命令行授权和接入用户授权三种,不同类型的授权报文中使用的属性不完全相同,具体请参见表3-11。
● EXEC授权:通过HWTACACS服务器对telnet、terminal、SSH和FTP登录的管理用户进行权限控制。
● 命令行授权:用户执行每条命令行时均进行权限控制,只有授权通过后才可以执行该命令,否则不能执行。
● 接入用户授权:通过HWTACACS服务器对802.1X、Portal等NAC接入用户进行权限控制。
按照报文类型划分,HWTACACS计费报文可以分为计费请求报文和计费回应报文。但在实际使用过程中,根据连接类型的不同,HWTACACS计费可以划分为网络计费、连接计费、EXEC计费、系统计费和命令计费五种类型。不同类型的计费报文中使用的属性不完全相同,具体请参见表3-12。
● 网络计费:适用于PPP等普通用户接入网络的场景。例如,PPP用户初始接入时发送开始计费报文,用户在线过程中定时发送实时计费报文,用户下线时发送结束计费报文。
● 连接计费:适用于当用户将设备作为Telnet或者FTP的客户端登录到服务器端的场景。用户与设备建立连接后,可以输入命令建立与远程服务器的连接并访问远程主机上的文件。当登录到远程服务器时发送开始计费报文,退出时发送结束计费报文。
● EXEC计费:适用于用户通过Telnet或者FTP等方式登录到设备的场景。用户初始登录时发送开始计费报文,用户在线过程中发送实时计费报文,用户退出时发送结束计费报文。
● 系统计费:适用于用户对网络进行故障诊断时的场景。通过在服务器上记录系统级事件,可以帮助管理员用户根据服务器上的记录信息进行故障定位。
● 命令计费:当管理员用户在设备上执行任意命令时,可以通过命令结束计费报文把该用户输入的命令上报给HWTACACS服务器,以便服务器对用户的操作进行记录。
表3-11 HWTACACS授权报文中属性的支持情况
属性 |
命令行授权请求报文 |
EXEC授权回应报文 |
接入用户授权回应报文 |
acl |
N |
Y |
N |
addr |
N |
N |
Y |
addr-pool |
N |
N |
Y |
autocmd |
N |
Y |
N |
callback-line |
N |
Y |
Y |
cmd |
Y |
N |
N |
cmd-arg |
Y |
N |
N |
dnaverage |
N |
N |
Y |
dnpeak |
N |
N |
Y |
dns-servers |
N |
N |
Y |
ftpdir |
N |
Y |
N |
gw-password |
N |
N |
Y |
idletime |
N |
Y |
N |
ip-addresses |
N |
N |
Y |
-group-num |
N |
N |
Y |
-tunnel-authen |
N |
N |
Y |
nocallback-verify |
N |
Y |
N |
nohangup |
N |
Y |
N |
priv-lvl |
N |
Y |
N |
source-ip |
N |
N |
Y |
tunnel-type |
N |
N |
Y |
tunnel-id |
N |
N |
Y |
upaverage |
N |
N |
Y |
表3-12 HWTACACS计费报文中属性的支持情况
属性 |
网络计费开始请求报文 |
网络计费结束请求报文 |
网络计费实时请求报文 |
连接计费开始请求报文 |
连接计费结束请求报文 |
EXEC计费开始请求报文 |
EXEC计费结束请求报文 |
EXEC计费实时请求报文 |
系统计费结束请求报文 |
命令计费停止计费报文 |
addr |
Y |
Y |
Y |
Y |
Y |
N |
N |
N |
N |
N |
bytes_in |
N |
Y |
Y |
N |
Y |
N |
Y |
Y |
N |
N |
bytes_out |
N |
Y |
Y |
N |
Y |
N |
Y |
Y |
N |
N |
cmd |
N |
N |
N |
Y |
Y |
N |
N |
N |
N |
Y |
disc_cause |
N |
Y |
N |
N |
N |
N |
Y |
Y |
N |
N |
disc_cause_ext |
N |
Y |
N |
N |
N |
N |
Y |
Y |
N |
N |
elapsed_time |
N |
Y |
Y |
N |
Y |
N |
Y |
Y |
Y |
N |
paks_in |
N |
Y |
Y |
N |
Y |
N |
Y |
Y |
N |
N |
paks_out |
N |
Y |
Y |
N |
Y |
N |
Y |
Y |
N |
N |
priv-lvl |
N |
N |
N |
N |
N |
N |
N |
N |
N |
Y |
protocol |
Y |
Y |
Y |
Y |
Y |
N |
N |
N |
N |
N |
service |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
task_id |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
timezone |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
Y |
tunnel-id |
N |
N |
N |
N |
N |
N |
N |
N |
N |
N |
tunnel-type |
Y |
N |
N |
N |
N |
N |
N |
N |
N |
N |
HWTACACS认证、授权、计费流程
下面以Telnet用户为例,说明使用HWTACACS对用户进行认证、授权和计费的过程。
在整个过程中的基本消息交互流程如下:
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服务器发送计费结束回应报文,指示计费结束请求报文已经收到。
六、AAA特性的产品支持
华为S系列交换机除了支持通过RADIUS协议或HWTACACS协议进行认证、授权、计费外,还支持本地认证和授权。且理论上,设备支持本地、RADIUS、HWTACACS三种协议间的认证、授权、计费的随意组合,比如本地认证、本地授权和RADIUS计费。实际中,常见的是三种协议的单独应用。
1、本地认证、授权
如果需要对用户进行认证或授权,但是在网络中没有部署RADIUS服务器和HWTACACS服务器,那么可以采用本地方式进行认证和授权。本地方式进行认证和授权的优点是速度快,可以降低运营成本;缺点是存储信息量受设备硬件条件限制。通常仅对管理员用户采用本地方式进行认证和授权。
2、RADIUS认证、计费
因为RADIUS服务器不是位于设备上,而是位于远程主机上,且设备与RADIUS服务器之间的通信是加密的,所以采用RADIUS方式进行认证、计费可以防止非法用户对网络的攻击,常应用在既要求较高安全性又要求控制远程用户访问权限的网络环境中。但RADIUS服务器不支持单独授权功能,必须与认证功能一起,只要使能它的认证功能,就同时使能了它的授权功能。
3、HWTACACS认证、授权、计费
与RADIUS服务器一样,采用HWTACACS方式进行认证、授权、计费也可以防止非法用户对网络的攻击,还支持为用户进行具体的命令行授权。且与RADIUS相比,HWTACACS的认证、授权和计费是单独进行的,可以单独配置和使能,在一些大的网络中,更加方便部署多台用途不同的HWTACACS服务器。
此外,设备还支持一个方案中使用多种协议模式,比如本地认证还常用于RADIUS认证和HWTACACS认证的备份认证方案,本地授权作为HWTACACS授权的备份授权方案。
本地方式认证和授权配置
本地方式就是交换机同时配置为AAA客户端和AAA认证、授权服务器(不能另外配置计费功能,总是采用不计费方案),认证和授权信息是在本地设备上配置的,无需另外配置专门的认证服务器。配置采用本地方式进行认证和授权后,设备根据本地的用户信息对接入用户进行认证和授权。
本地认证、授权配置流程为配置AAA方案——>配置本地用户——>配置业务方案——>配置域的AAA方案。其中第三步的“配置业务方案”是可选项,通常采用缺省配置,仅当需要特定的IP业务调用本地认证、授权方案时才需要配置,其余三项是必选的,但前面两项配置任务没有严格先后顺序,都是为最后一项配置任务“配置域的AAA方案”而服务的。
一、配置AAA方案
配置AAA方案就是配置AAA中的认证、授权和计费方案,用于“域的AAA方案”中绑定这些方案使用(所配置的各种方案只有在域中绑定后才能得到应用)。在本地方式中仅支持认证和授权方案,所以仅需要在认证方案中配置认证模式为本地认证,在授权方案中配置授权模式为本地授权,其他均为可选的。
二、配置本地用户
当采用本地方式进行认证和授权时,需要在本地设备上配置用户的认证和授权信息,如用于认证的用户名和密码,用于授权的用户优先级、用户组、允许接入的服务类型、可建立的连接数和FTP访问目录等。这些均需要在AAA视图下进行配置。
三、(可选)配置业务方案
“业务方案”其实是一种授权方案,它是专门针对一些IP业务(如管理员权限、DHCP服务、DNS服务和策略路由等)所进行的授权,所以也可以称为“业务授权方案”。可通过配置业务方案管理用户的业务授权信息,但在业务方案下通常只需要使用admin-user privilege level命令配置管理员用户的用户级别,其余命令在业务方案被其他特性(比如IPSec特性)调用时才需要配置。
四、配置域的AAA方案
在前面创建的认证和授权方案和配置的业务方案只有在“域的AAA方案”中绑定后才能得到应用(在本地认证、授权方案中无需配置RADIUS、HWCACS服务器模板)。不同的域可以绑定不同的以上认证、授权、业务方案,以便实现灵活的用户接入控制。
本地认证授权的配置步骤:进入AAA——创建认证方案——创建方案名称(同时进入方案)——配置认证模式、提升级别时的认证模式——退出认证方案,配置域名解析方向——创建授权方案——创建方案名称(同时进入方案)——配置授权模式——退出授权方案,配置授权服务器下发用户授权信息的生效模式——在aaa下创建本地用户(包括用户名、密码、级别、允许的接入类型、空闲时间、ftp访问目录、用户状态、连接数上限)——可选的创建业务方案——创建方案名称(同时进入方案)——配置作为管理员登录的用户的管理员级别等——域中的AAA方案配置——在AAA下创建域(同时进入域配置界面)——绑定认证方案、授权方案、业务方案——配置域状态——配置域名分隔符。