AAA 专题
AAA 专题
基础理论
什么是AAA?
AAA是authentication(认证)、authorization(授权)、accounting(计费)三者组成的管理框架的简称,也可以把AAA当做一个概念,并且在多个领域当中应用广泛,比如百度云盘,我们在登录的时候就涉及到了认证、授权和计费。基于AAA开发出来的协议(RADIUS、HWTACACS)广泛应用于网络接入场景。
RADIUS、WTACACS、AAA之间是什么关系?
- AAA是概念,RADISU和HWTACACS根据AAA开发出来的协议。
- RADIUS:remote authentication、dial-in user service
- HWTACACS:huawei terminal access controller access control system
Redis、RADIS之间是什么关系?
都不是一个系统玩意儿,redis是数据库,RADIUS是根据AAA开发出来的协议。
Free Radius、WinRadius、RADIUS之间是什么关系?
Free Radisu、WinRadius是根据RADIUS协议开发出来的软件。
OK,我们总结一下:
AAA是一种框架,RAIDUS是根据AAA架构开发出来的协议,而Free raidus、winradius是根据radius协议而实现的具体应用。
Radius、802.1x、portal之间都是什么关系?
Radius是一种协议,各种厂商根据Radius协议开发出自己的是AAA服务器,由于Radius是C/S架构,C这一端指的不是终端,而是指的网络设备,用户终端通常不会直接与Radius服务器进行交互的,那种用户终端与Radius客户端这一段什么协议叫呢?使用802.1x协议,这个协议比较底层的,像一些主流的系统发行版都会自己携带802.1x的认证客户端,在公司内部使用radius+802.1x的认证方式没啥问题(802.1x通常用于有线的接入认证),但对于公众场合的比如超市、酒店这些移动端比较多的场景就不太合适radius+802.1x的认证方式,而是比较适合portal认证,即网页认证。
Radius认证与portal认证地位是平等的,只是应用的场景不同,他们两个是完全不同的协议,数据库在AAA服务器上当然也是分开的,所以我们在控制器上做认证的时候如果两种场景都需要用到,那就需要创建两个数据库。
AAA在网络设备上的体现:
我们知道在网络设备我们输入AAA会进入AAA专属的用户界面,在此界面上我们可以进行用户账号、密码、授权等配置,有的时候我们甚至会感觉AAA此功能很多余,因为网络设备本身不依赖AAA也能完成用户账户的管理、授权等配置,而且网络设备里面的AAA好像也没有计费的功能呀!这是怎么回事?
网络设备本身自带弱化版的AAA,只能本身管理本身;网络设备自带的AAA模块其实是AAA的客户端,客户端本身可以帮忙系统本身完成基于用户账户管理和授权,但这并不是它最正确的使用方法。网络设备上的AAA客户端的正确使用方法是让共连接AAA服务端,通过服务端上提供的统一的、标准的数据库完成AAA的所有功能,AAA客户端仅仅是一个代理的作用,如下图所示:
AAA服务器可以是多种形态,是可以开源的Free Radius,也可以是厂商自己完整的硬件产品。通常厂商自己的AAA服务器与自己的网络设备更亲和,细粒度更高,比如为思科自己的AAA服务器就可以对思科自己的网络设备的授权可以精确到命令级,指定某个人只能使用某条命。
- 能够当AAA服务器的设备
- 堡垒机
- windows server自带的AAA服务器功能(NPS)
- 华为SDN控制器
- 一些开源软件
- 厂商专业的AAA服务器
为什么需要AAA服务器?
需求 | 备注 |
---|---|
设备的数量 | 大量的网络设备、VPN服务器、无线AP要做身价验证 |
人员的数量 | 大量员工需要在各种设备上做身份验证 |
人员的变动 | 员工的入职、升职、离职、需要对相关账号属性或权限做修改 |
计费的需要 | 记录访问时间、操作过程等行为,产生日志或相关费用 |
因此,AAA给企业网络提供一种集中式、标准化、可扩展、灵活的解决方案。
AAA架构:
AAA架构采用C/S架构,由客户端与服务端组成。
角色 | 备注 |
---|---|
AAA客户端 | 开启AAA功能,通常为网络设备、服务器、无线AP等,通常被称为NAS(Network Access Server)网络接入服务器 |
AAA服务器 | 负责AAA服务端,通常为各个厂商开发的产品 |
RADISU的功能:
我们可以通过RADISU服务器不仅仅是用户认证授权之后准入,而且还能实现下发VLAN和ACL,当用户认证成功了,直接下发用户所属的VLAN和需要应用的ACL,但这种方式并不是非常完善,因为RADISU服务器仅能下发ACL的ID和VLAN,并不能直接创建,所以如果你想使用这种方案的话,就得提前在设备上创建好VLAN和ACL的。华为的虚拟化园区网方案并不是直接下发VLAN和ACL,而是通过安全组的方式。
应用场景
应用场景一:管理设备
PS:交换机只要客户端配置好radius模板指向服务端就可以了;
应用场景二:终端接入
PS:从终端到AP或交换机,可以使用802.1x,也可以使用EAP的方式,从电脑的网卡选项当中可以进行选择;
PS:使用802.1x不仅仅可以实现认证,在认证完成之后还可以直接下发策略,比如该接口的VLAN、匹配的ACL
应用场景三:
应用场景四:大型企业用户统一管理
三个方案
当我们通过AAA命令进入AAA视图之后,主要配置三个东西:认证方案、授权方案、计费方案
认证方案
- 认证方案
- none不认证
- local本地认证,默认,就要在本地创建用户账号
- radius指向radius服务器认证,用户账号放在radius服务器上
在这个地方存在一个问题,假如说我们在登录网络设备的时候使用radius认证,用户账号存放到远端服务器上,万一服务器挂了,那我们岂不是无法登录到网络设备了?对,是会存在这样的问题,应对措施是这样的,当我们定义认证方案的时候,可以先把radius写上,然后再写本地认证方案,命令是支持连着写的,这样万一radius服务器挂了之后,radisu无法连接之后,还可以使用本地认证方案。
# CE12800
<HUAWEI>sys i
Enter system view, return user view with return command.
[HUAWEI]aaa
[HUAWEI-aaa]authentication-scheme TEST_1 # 先要给认证方案起一个名字TEST_1
Info: Create a new authentication scheme.
[HUAWEI-aaa-authen-test_1]authentication-mode ?
hwtacacs HWTACACS # 指向华为私有的raidus服务器
local Local authentication #本地
none No authentication #不认证
radius RADIUS(Remote Authentication Dial In User Service) authentication # 指向raidus服务器
# 可以先写radius,然后再写local
[HUAWEI-aaa-authen-test_1]authentication-mode radius local
授权方案
- 授权方案
- local:根据设备上配置的本地用户账号的相关属性进行授权
- hwtacacs:远端授权,其实就是radius授权,hwtacacs是华为的radius服务器
- if-authentiated 如果认证方案没有制定,那就使用授权里面的方法
- none:不认证
PS:可以指定一种或多种认证方法,按照配置顺序,仅前一种授权谅无响应的时候,后面的授权方法才会被启用。
[HUAWEI-aaa]authorization-scheme TEST_2
Info: Create a new authorization scheme.
[HUAWEI-aaa-author-test_2]authorization-mode ?
hwtacacs Use HWTACACS authorization method
if-authenticated Use authorization method which lets user authorized if user
not authenticated by none authentication method
local Use local authorization method
none Use none authorization method
计费方案
计费不能本地计费,华为、华三、思科都不行,只能使用AAA服务器计费。
计费方案比较简单,就两种选择:不计费或是远端计费,远端计费就是通过AAA服务器对用户进行计费。
PS:只能选择一种计费方法
[HUAWEI-aaa]recording-scheme test_3
Info: Create a new recording scheme.
[HUAWEI-aaa-recording-test_3]recording-mode ?
hwtacacs HWTACACS recording method
协议相关
再强调一次,根据AAA开发的radius、HWTACACS都是运行在网络设备与服务端之间的,客户端与网络设备之间运行的是根据802.1x开发出来的EAPOL,抓包时候就能看出来,下面这个博客当中有报文相关体现 :
AAA协议:运行在AAA客户端与服务器之间;
RADIUS | HWTACACS |
---|---|
UDP | TCP |
1812、1813 | 49 |
IETF公开标准 | 华为私有 |
只加密密码 | 加密整个报文 |
对命令单独进行授权 | 支持对华为设备上配置的命令进行授权使用 |
认证和授权一起 | 认证和授权独立 |
PS:在实现应用当中,最常使用RADIUS协议
PS:HWTACSCS完全兼容思科、华三使用的TACACS+,机制完全一致
工作流程
RADIUS
RADIUS的工作过程比较简洁,一看就知道是公有协议,华为和思科的私有协议整个过程是比较繁琐的。
HWTACACS
HWTACACS的工作机制非常的繁琐,几乎每一步网络设备都要询问服务端。
TACACS+
思科私有的TACACS+ 工作起来也是比较繁琐,几乎每一步都要询问服务端。
域
我们也看到了在AAA视图当中,认证、授权、计费都是要单独进行配置了,但这三个东西结合起来才是一套方案呀!怎么把他们结合起来呢?其实就是通过域视图,AAA对用户的管理就是基于域的,每个用户都必须属于某个域,大概结构如下所示:
PS:认证、授权、计费组合成模板,然后模板加上域下的授权信息再组成域。
网络设备默认是有两个域的:
默认域 | 备注 |
---|---|
default_admin | 管理员用户的缺省域,默认本地认证 |
default | 普通用户的缺省域,默认本地认证 |
# 查看设备当前配置的全局默认普通域和默认管理域
# 默认这两个域已经绑定了两个方案都是本地,并且不计费,所以我们能够使用;
[HUAWEI]dis aaa configuration
---------------------------------------------------------------------------
AAA configuration information :
---------------------------------------------------------------------------
Parse priority : Domain first
Domain name delimiter : @
Domainname parse direction : Left to right
Domainname location : After-delimiter
**Administrator user default domain : default_admin # 全局默认管理域
Normal user default domain : default # 全域默认普通域**
# 创建一个新的域
[HUAWEI]aaa
[HUAWEI-aaa]domain huawei.com
Info: Create a new domain.
Warning: The service type configured contains unsecured protocol(ftp, telnet, te
rminal, http). It is recommended to configure the secure service type only.
有一个问题需要说明,既然AAA模块是通过域来管理用户的,那按理说用户在登录的时候需要携带域名,比如ssh zhangsan.huawei.com@192.168.0.1,那我们在通过ssh登录的时候为什么不加域名也能登录呢?其实这个问题很简单,当我们不加域名进行登录的时候,其实网络设备会自动帮助我们补全,网络设备怎么知道补全什么域名呢?它有默认的域,会直接将默认的域名补全上来,如下所示:
实验
- AAA的配置思路
- 创建配置服务器模板(就是指定radius的地址、端口、接入密码等信息)
- 创建配置AAA方案(指定认证、授权、计费的的数据库是从本地读取还是从raidus服务器读取)
- 创建域方案:其实就晃将服务器模板和AAA配置模板结合起来;
# 常用查看命令
# 查看AAA域名
dispaly domain
# 查看AAA域名绑定
dis domain name huawei.com
# 验证AAA认证
[Huawei]test-aaa lisi@huawei.com 123.com radius-template wakin-radius
[Huawei]
Info: Account test succeed.
NAS上的配置
第一步:创建服务器模板
为什么把服务器放到模板里面呢?直接指定不行吗?主要是因为服务器比较重要,最好是配置多台,放到一个资源池当中,而服务器模板其实就是比较方便调用的服务器资源池。
# 全局模式下创建radius服务器模板
radius-server template wakin-radius
radius-server shared-key cipher 123.com # # 配置服务器密钥
radius-server authentication 192.168.80.130 1812 # 配置认证服务器的IP地址端口
radius-server authentication 192.168.80.140 18212 secondary
radius-server accounting 192.168.80.130 1813 # 配置计费服务器的IP地址端口
radius-server accounting 192.168.80.140 1813 secondary
# 配置完之后验证一下
dis radius-server config
- NAS-IP-ADDRESS:就是客户端的IP地址,NAS就是接入设备的意思
- domain-included:默认如果不带域名会自动补全默认域名,这个参数的意思如果再遇到不加域名的请求要自动补全哪一个域名呢?
第二步:配置AAA方案模板
只讲认证方案和计费方案,授权需要厂商独有的软件才行。
aaa
authtication-scheme wakin-rz # 配置认证方案
authentication-mode hwtacacs/local/none/**radius
authentication-mode radius none # 如果radisu不响应,那就不认证**
accounting-scheme wakin-jf # 配置计费方案
accounting-mode radius
[AR220]dis authentication-scheme
-------------------------------------------------------------------
Authentication-scheme-name Authentication-method
-------------------------------------------------------------------
default Local
**wakin-rz RADIUS**
-------------------------------------------------------------------
Total of authentication scheme: 2
[AR220]dis accounting-scheme
-------------------------------------------------------------------
Accounting-scheme-name Accounting-method
-------------------------------------------------------------------
default None
**wakin-jf RADIUS**
-------------------------------------------------------------------
Total of accounting-scheme: 2
第三步:通过域模板将前面三者关联起来
aaa
domain huawei.com
authentication-scheme wakin-rz
accounting-scheme wakin-jf
radius-server wakin-radius
<AR220>dis domain
-------------------------------------------------------------------------
index DomainName
-------------------------------------------------------------------------
0 default
1 default_admin
**2 huawei.com**
-------------------------------------------------------------------------
Total: 3
<AR220>dis domain name huawei.com
Domain-name : huawei.com
Domain-state : Active
Authentication-scheme-name : wakin-rz
Accounting-scheme-name : wakin-jf
Authorization-scheme-name : -
Service-scheme-name : -
RADIUS-server-template : wakin-radius
HWTACACS-server-template : -
User-group : -
# 配置telnet登录的时候使用aaa
stelnet server enable
user-interface vty 0 4
authentication-mode aaa
protocol inbound ssh
protocol inbound telnet
一个用户都不要创建,接下来我们去radisu服务器上创建用户。
你如果现在去xshell客户端乱输入用户名和密码,在终端会不断弹出认证失败的消息,而且在终端会有明显的卡顿感,如下所示:
<AR220>
Jun 16 2023 18:00:07-08:00 AR220 %%01SSH/4/SSH_FAIL(l)[4]:Failed to log in throu
gh SSH. (Ip=192.168.80.1, UserName=zhangsan@huawei.com, Times=16777216).
<AR220>
Jun 16 2023 18:00:20-08:00 AR220 %%01SSH/4/SSH_FAIL(l)[5]:Failed to log in throu
gh SSH. (Ip=192.168.80.1, UserName=zhangsan@huawei.com, Times=33554432).
WinRidus_Server
第一步:以管理员身份运行此软件
第二步:设置-数据库-自动配置ODBC
系统默认就会产生WinRadius数据库,如下所示:通过win+Q “ODBC”打开
第三步:创建用户
-
高级—创建radius表
-
操作—添加账号
PS:通过“操作”—“查询”可以查看创建用户
第四步:验证
[C:\~]$ ssh wakin@huawei.com@192.168.80.100
你会发现这个命令好长,如果你不想写域名怎么办呢?我们可以在服务器规定默认域名,用网络设备自动补全域名,那我们就不写了,当前默认补全的是系统默认域 ,我们要把默认域修改过来才行。
domain huawei.com admin
[AR220]dis aaa configuration
Domain Name Delimiter : @
Domainname parse direction : Left to right
Domainname location : After-delimiter
Administrator user default domain: huawei.com
Normal user default domain : default
附件
快速配置
# 亲测有效
sys
stelnet server enable
int g0/0/0
ip add 192.168.80.100 24
user-interface vty 0 4
authentication-mode aaa
protocol inbound all
radius-server template wakin-radius
radius-server shared-key cipher 123.com
radius-server authentication 192.168.80.128 1812
radius-server accounting 192.168.80.128 1813
aaa
authentication-scheme wakin-rz
authentication-mode radius
accounting-scheme wakin-jf
accounting-mode radius
aaa
domain huawei.com
authentication-scheme wakin-rz
accounting-scheme wakin-jf
radius-server wakin-radius
# XSHELL连接
[C:\~]$ ssh lisi@huawei.com@192.168.80.100