HWTACACS认证、授权、计费
HWTACACS概述
华为终端访问控制器控制系统协议HWTACACS是在TACACS(RFC 1492)基础上进行了功能增强的安全协议。HWTACACS是一种集中式的、客户端/服务器结构的信息交互协议,使用TCP协议传输,TCP端口号为49。HWTACACS提供的认证、授权和计费服务相互独立,能够在不同的服务器上实现。HWTACACS兼容Cisco的TACACS+协议,华为交换机作为HWTACACS客户端可以和TACACS+服务器对接实现AAA功能。如设备使用HWTACACS协议时支持与思科服务器(如ACS)对接,但HWTACACS与思科的私有属性不一定能够兼容,原因是不同厂商在私有属性的字段定义和解释上存在区别。
HWTACACS协议主要用于采用点对点协议PPP(Point-to-Point Protocol)或虚拟私有拨号网络VPDN(Virtual Private Dial-up Network)方式接入Internet的接入用户以及对设备进行操作的管理用户的认证、授权和计费。
- 结构上都采用客户端/服务器模式。
- HWTACACS客户端:一般位于网络接入服务器NAS(Network Access Server)上,可以遍布整个网络,负责传输用户信息到指定的HWTACACS服务器,然后根据从服务器返回的信息进行相应处理。
- HWTACACS服务器:一般运行在中心计算机或工作站上,维护相关的用户认证和网络服务访问信息,负责接收用户连接请求并认证用户,然后给客户端返回所有需要的信息。
- 都使用共享密钥对传输的用户信息进行加密。
- 都有较好的灵活性和可扩展性。
与RADIUS相比,HWTACACS具有更加可靠的传输和加密特性,更加适合于安全控制。HWTACACS协议与RADIUS协议的主要区别如表1-17所示。
项目 |
HWTACACS |
RADIUS |
---|---|---|
数据传输 |
通过TCP传输,网络传输更可靠。 |
通过UDP传输,网络传输效率更高。 |
加密方式 |
除了标准的HWTACACS报文头,对报文主体全部进行加密。 |
只是对认证报文中的密码字段进行加密。 |
认证和授权 |
认证与授权分离,使得认证、授权服务可以在不同的安全服务器上实现。例如,可以用一台HWTACACS服务器进行认证,另外一台HWTACACS服务器进行授权。 |
认证与授权结合,不能分离。 |
命令行授权 |
支持对设备上的配置命令进行授权使用。即用户可使用的命令行受到命令级别和AAA授权的双重限制,某一级别的用户输入的每一条命令都需要通过HWTACACS服务器授权,如果授权通过,命令才可以被执行。 |
不支持对设备上的配置命令进行授权使用。用户登录设备后可以使用的命令行由用户级别决定,用户只能使用级别等于或低于用户级别的命令行。 |
应用场景 |
适于进行安全控制。 |
适于进行计费。 |
HWTACACS报文介绍
HWTACACS报文与RADIUS报文的格式不同。所有RADIUS报文均采用相同的报文格式,而HWTACACS报文除了具有相同的报文头之外,认证、授权和计费报文的格式均不同。
HWTACACS报文头
HWTACACS报文头长度为12字节,如图1-16所示。
字段 |
含义 |
---|---|
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认证开始报文
图1-17 HWTACACS认证开始报文格式表1-19 HWTACACS认证开始报文中各个字段的含义字段
含义
action
具体的认证操作,目前只支持“认证登录(0x01)”。
priv_lvl
用户级别,取值范围是0~15。
authen_type
认证的类型,目前设备仅支持:
- CHAP(0x03)
- PAP(0x02)
- ASCII(0x01)
service
请求认证的服务类型,当前版本支持PPP(0x03)、LOGIN(0x01)、ENABLE(0x02)、NONE(0x00)四种服务类型,分别对应PPP用户、管理员用户、管理员用户级别提升认证和其他用户。
user len
登录用户输入的用户名长度。
port len
port字段的长度。
rem_addr len
rem_addr字段的长度。
data len
认证数据区的长度。
user
请求认证的用户名,最大长度为129。
port
请求认证的用户接口名,最大长度为47。
- 对于管理员用户,该字段是指用户终端接口(例如“console0”、“vty1”等)。例如,Telnet用户的authen_type为ASCII,service为LOGIN,port为vtyx。
- 对于其他用户,该字段是指用户接入的接口名称。
rem_addr
登录用户的IP地址。
data
认证数据区,根据action和authen_type的不同封装不同的数据。例如PAP认证时,该字段内容为PAP显式密码。
HWTACACS认证持续报文
图1-18 HWTACACS认证持续报文格式表1-20 HWTACACS认证持续报文中各个字段的含义字段
含义
user_msg len
登录用户输入的字符串长度。
data len
认证数据区的长度。
flags
认证持续标记,0表示认证过程持续,1表示认证过程终止。
user_msg
登录用户输入的字符串,用于回应认证回应报文中的server_msg字段,向服务器提供用户登录时输入的密码。
data
认证数据区,根据action和authen_type的不同封装不同的数据。例如PAP认证时,该字段内容为PAP显式密码。
HWTACACS认证回应报文
图1-19 HWTACACS认证回应报文格式表1-21 HWTACACS认证回应报文中各个字段的含义字段
含义
status
认证的状态,包括:
- 认证成功PASS(0x01)
- 认证失败FAIL(0x02)
- 请求用户信息GETDATA(0x03)
- 请求用户名GETUSER(0x04)
- 请求密码GETPASS(0x05)
- 请求重新发起认证开始RESTART(0x06)
- 服务器收到认证报文有误ERROR(0x07)
- 服务器要求重新进行认证过程FOLLOW(0x21)
flags
控制客户端是否将用户输入的密码回显。如果该标志位置1,则用户输入的密码不会回显。
server_msg len
server_msg字段的长度。
data len
认证数据区的长度。
server_msg
可选字段,用于服务器将一些附加信息带给用户。
data
认证数据区,用于向客户端提供一些信息。
HWTACACS授权报文格式
HWTACACS授权请求报文
图1-20 HWTACACS授权请求报文格式priv_lvl字段、authen_type字段、authen_service字段、user len字段、port len字段、rem_addr len字段、port字段、rem_addr字段的含义和HWTACACS认证开始报文一致,此处不再赘述。
表1-22 HWTACACS授权请求报文中各个字段的含义字段
含义
authen_method
指定用户的认证方式,包括:
- 没有设置认证方式(0x00)
- 不认证(0x01)
- 本地认证(0x05)
- HWTACACS认证(0x06)
- RADIUS认证(0x10)
authen_service
请求认证的服务类型,当前版本支持PPP(0x03)、LOGIN(0x01)和NONE(0x00)三种服务类型,分别对应PPP用户、管理员用户和其他用户。
arg_cnt
授权请求报文中携带的属性数。
argN
指定授权请求报文的属性。包括:
- cmd:请求授权的命令行的第一个参数。
- cmd-arg:请求授权的命令行参数。固定格式为“cmd-arg=命令行参数”,最后一个命令行参数后需要再封装一个“cmd-arg=<cr>”结尾。“cmd-arg=命令行参数”的总长度不能超过255个字节,每个命令行参数不能超过247个字节。
HWTACACS授权回应报文
server_msg len字段、data len字段和server_msg字段的含义和HWTACACS认证回应报文一致,此处不再赘述。
图1-21 HWTACACS授权回应报文格式表1-23 HWTACACS授权回应报文中各个字段的含义字段
含义
status
指定用户的授权状态,包括:
- 授权通过(0x01)
- 授权请求报文中的属性被TACACS服务器修改(0x02)
- 授权失败(0x10)
- 授权服务器上出现了错误(0x11)
- 重新指定授权服务器(0x21)
arg_cnt
授权回应报文中携带的授权属性数。
argN
指定HWTACACS授权服务器下发的授权属性。
HWTACACS计费报文格式
HWTACACS计费请求报文
图1-22 HWTACACS计费请求报文格式authen_method字段、priv_lvl字段、authen_type字段、user len字段、port len字段、rem_addr len字段、port字段、rem_addr字段的含义和HWTACACS授权请求报文一致,此处不再赘述。
表1-24 HWTACACS计费请求报文中各个字段的含义字段
含义
flags
计费类型:
- 开始计费(0x02)
- 结束计费(0x04)
- 实时计费(0x08)
authen_service
请求认证的服务类型,当前版本支持PPP(0x03)、LOGIN(0x01)和NONE(0x00)三种服务类型,分别对应PPP用户、管理员用户和其他用户。
arg_cnt
计费请求报文中携带的属性数。
argN
指定计费请求报文的属性。
HWTACACS计费回应报文
图1-23 HWTACACS计费回应报文格式表1-25 HWTACACS计费回应报文中各个字段的含义字段
含义
server_msg len
server_msg字段的长度。
data len
data字段的长度。
status
指定计费状态:
- 计费成功(0x01)
- 计费失败(0x02)
- 计费无回应(0x03)
- 服务器要求重新进行计费过程(0x21)
server_msg
指定计费服务器带给客户端的信息。
data
服务器提供给管理员的信息。
HWTACACS认证、授权、计费流程
- Telnet用户请求登录设备。
- HWTACACS客户端收到请求之后,向HWTACACS服务器发送认证开始报文。
- HWTACACS服务器发送认证回应报文,请求用户名。
- HWTACACS客户端收到回应报文后,向用户询问用户名。
- 用户输入用户名。
- HWTACACS客户端收到用户名后,向HWTACACS服务器发送认证持续报文,其中包括了用户名。
- HWTACACS服务器发送认证回应报文,请求密码。
- HWTACACS客户端收到认证回应报文,向用户询问密码。
- 用户输入密码。
- HWTACACS客户端收到密码后,向HWTACACS服务器发送认证持续报文,其中包括了密码信息。
- HWTACACS服务器发送认证回应报文,指示用户通过认证。
- HWTACACS客户端向HWTACACS服务器发送授权请求报文。
- HWTACACS服务器发送授权回应报文,指示用户通过授权。
- HWTACACS客户端收到授权回应报文,向用户输出设备的配置界面。
- HWTACACS客户端向HWTACACS服务器发送计费开始请求报文。
- HWTACACS服务器发送计费开始回应报文,指示计费开始请求报文已经收到。
- 用户请求断开连接。
- HWTACACS客户端向HWTACACS服务器发送计费结束请求报文。
- HWTACACS服务器发送计费结束回应报文,指示计费结束请求报文已经收到。
HWTACACS协议与其他厂商支持的TACACS+协议都实现了认证、授权、计费的功能。HWTACACS和TACACS+的认证流程与实现方式是一致的,HWTACACS协议能够完全兼容TACACS+协议。
HWTACACS双因子认证流程
用户通过HWTACACS双因子认证登录到设备后,通过super命令提升用户级别时支持HWTACACS双因子认证。
用户输入用户名和PIN码后,客户端会将用户名和PIN码发送给设备。
设备将用户名和PIN码发送给HWTACACS服务器。
HWTACACS服务器会根据自己的数据库检查用户名和PIN码是否正确,并向设备返回验证结果。
如果用户名和PIN码不正确,HWTACACS服务器向设备发送认证失败的消息。
如果用户名和PIN码正确,则向设备发送Challenge消息,请求动态验证码。
设备将用户名和PIN码的验证结果返回给客户端。
如果用户名和PIN码不正确,用户客户端上显示“Access denied”。认证流程结束,用户登录失败。
如果用户名和PIN码正确,开始动态验证码的认证流程。
用户输入动态验证码。
设备将动态验证码发送给HWTACACS服务器。
HWTACACS服务器对动态验证码进行验证,并向设备返回验证结果。
如果动态验证码正确,HWTACACS服务器向设备发送认证成功的消息。
如果动态验证码不正确,HWTACACS服务器向设备发送认证失败的消息。
设备将认证结果返回给用户客户端。
HWTACACS属性
在HWTACACS授权或计费报文中,argN字段携带了服务器下发给用户或用户传输给服务器的信息。
HWTACACS属性
表1-26描述了设备支持的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=<cr>结尾。 |
disc_cause |
下线原因,仅结束计费请求报文支持该属性。包括:
|
disc_cause_ext |
扩展的下线原因,仅结束计费请求报文支持该属性。包括:
|
dnaverage |
下行平均速率,单位是bit/s。 |
dnpeak |
下行峰值速率,单位是bit/s。 |
dns-servers |
主DNS服务器的IP地址。 |
elapsed_time |
用户的在线时长,单位是秒。 |
ftpdir |
FTP用户的初始目录。 |
gw-password |
隧道密码,字符串类型,长度范围是1~248。如果所包含的属性值超出了允许的设置范围则仅取前248个字符。 |
idletime |
空闲切断时间,即服务器会自动切断空闲切断时间内没有进行任何操作的用户。
说明:
FTP用户不支持该属性。 |
l2tp-hello-interval |
L2TP Hello报文的间隔时间,目前设备尚不支持该属性。 |
l2tp-hidden-avp |
L2TP的隐藏属性值对AVP(Attribute Value Pair),目前设备尚不支持该属性。 |
l2tp-nosession-timeout |
L2TP无会话时切断时间,即无会话时,L2TP隧道将会该时间间隔后被拆除。目前设备尚不支持该属性。 |
l2tp-group-num |
L2TP组号,只有下发了该属性,其他的L2TP属性才能生效,如果没有下发该属性,其他L2TP属性都会被忽略。 |
l2tp-tos-reflect |
L2TP的TOS的值,目前设备尚不支持该属性。 |
l2tp-tunnel-authen |
是否进行L2TP的隧道认证。0表示不进行隧道认证,1表示进行隧道认证。 |
l2tp-udp-checksum |
L2TP的UDP包的检验和。 |
nocallback-verify |
回呼之后不需要验证。 |
nohangup |
设备是否自动切断用户的连接,取值为true或者false。该属性依附于autocmd属性,在配置了autocmd参数后,用户执行完autocmd的命令后是否将用户切断。true表示不切断,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属性在报文中的支持情况
- EXEC授权:通过HWTACACS服务器对telnet、terminal、SSH和FTP登录的管理用户进行权限控制。
- 命令行授权:用户执行每条命令行时均进行权限控制,只有授权通过后才可以执行该命令,否则不能执行。
- 接入用户授权:通过HWTACACS服务器对802.1X、Portal等NAC接入用户进行权限控制。
- 网络计费:适用于PPP等普通用户接入网络的场景。例如,PPP用户初始接入时发送开始计费报文,用户在线过程中定时发送实时计费报文,用户下线时发送结束计费报文。
- 连接计费:适用于当用户将设备作为Telnet或者FTP的客户端登录到服务器端的场景。用户与设备建立连接后,可以输入命令建立与远程服务器的连接并访问远程主机上的文件。当登录到远程服务器时发送开始计费报文,退出时发送结束计费报文。
- EXEC计费:适用于用户通过Telnet或者FTP等方式登录到设备的场景。用户初始登录时发送开始计费报文,用户在线过程中发送实时计费报文,用户退出时发送结束计费报文。
- 系统计费:适用于用户对网络进行故障诊断时的场景。通过在服务器上记录系统级事件,可以帮助管理员用户根据服务器上的记录信息进行故障定位。
- 命令计费:当管理员用户在设备上执行任意命令时,可以通过命令结束计费报文把该用户输入的命令上报给HWTACACS服务器,以便服务器对用户的操作进行记录。
- Y:表示该类型报文支持该属性。
- N:表示该类型报文不支持该属性。
属性 |
命令行授权请求报文 |
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 |
l2tp-group-num |
N |
N |
Y |
l2tp-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 |
属性 |
网络计费开始请求报文 |
网络计费结束请求报文 |
网络计费实时请求报文 |
连接计费开始请求报文 |
连接计费结束请求报文 |
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 |