目錄
前言
Authentication丶Authorization 及 Accounting 合称 AAA,泛指伺服器或网络设备上对使用者的控制和监察,以达至企业或组织的保安准则。本文会先介绍网络设备的 Local AAA 机制,然後再进一步介绍 Remote AAA Server 的种类和设定方法。
Authentication 认证
Authentication 就等於网络设备在问:「你是谁?」。透过输入 Username 让设备知道你是谁人,并输入 Password 去证明你的身份。所以我们需要预先告诉网络设备什麽 Username 将会用什麽 Password 登入,最直接的方法是在设备上设定,称为 Local 设定,又或者另设 Authentication Server 作遥距设定 (Remote),Remote Authentication Server 最常用的有 RADIUS 和 TACACS+,Remote 设定稍後说明。以下先在 Router 上设定 Local AAA,相信大家对这些设定并不陌生:
如输入时不选参数 0 或 7,预设使用 0,即没有加密。
R1(config)#username alice password ?
0 Specifies an UNENCRYPTED password will follow
7 Specifies a HIDDEN password will follow
LINE The UNENCRYPTED (cleartext) user password
R1(config)#username alice password 123
但没有加密的密码会在 Running-config 中显示。
R1(config)#do sh run | i username username alice password 0 123 R1(config)#
用 service password-encryption 可把密码加密,以下可见密码 123 经加密後变成 1543595F,而参数自动变成 7,方便网管人员把设定复制到其他设备上。
R1(config)#service password-encryption R1(config)#do sh run | i username username alice password 7 1543595F
但这是很阳春的加密,网上已有破解,所以还是比较建议使用 secret。如用 GNS3 做实验,会见到 4 (SHA256) 和 5 (MD5),而 SHA256 因安全问题已被移除了,在新的 IOS 中应看见选项 8 和 9,是安全性较高的加密。
R1(config)#username bob secret ?
0 Specifies an UNENCRYPTED secret will follow
5 Specifies a MD5 HASHED secret will follow
8 Specifies a PBKDF2 HASHED secret will follow
9 Specifies a SCRYPT HASHED secret will follow
LINE The UNENCRYPTED (cleartext) user secret
R1(config)#username bob secret 123
R1(config)#do sh run | i username
username alice password 7 14464058
username bob secret 8 daKYKG/09tp/TYVbvxlDi8/85nzz5u/yaMu4xzSWSiA
有一个设定是比较容易被忽略的,就是 User 的 Privilege。Cisco IOS 让我们为 User 设定 0 至 15 一共 16 个层级的 Privilege,如不填写则预设为 1。Privilege 的概念是:层级越低则权限越少,可用的指令就越少;相反层级越高,可用的指令越多。每一个层级可用指令必然包含较低的所有层级,举例:Privilege 10 的 User 除了可使用 Privilege 10 的指令,也可使用全部 Privilege 0 至 9 的指令。IOS 原厂设定只使用了 16 个 Privilege 里面其中 3 个,分别是 0丶1 和 15。
Privilege | 俗称 | 可用指令 |
---|---|---|
0 | – | 只有 enable, disable, exit, help, logout 5 个指令可用。 |
1 | User Mode | 多了很多资讯性的指令可用,例如 show version 和 show inventory 等, 但不包括 show running-config。此层级也不能做任何设定。 |
2 – 14 | – | 层级可用的指令由网络人员设定,设定方法稍後说明。 |
15 | Privileged / Enable Mode | 可使用全部指令。 |
以下指令把 Charlie 的 Privilege 设为 5:
R1(config)#username charlie privilege ?
User privilege level
R1(config)#username charlie privilege 5 secret 456
虽然我们为每位 User 设定好 Privilege,但因应工作关系,他们可能需要把 Privilege 升级去使用某些高阶指令。升级需要输入该层的通关密码,网管人员可预先把每层的密码设定好:
R1(config)#enable secret level 1 S01 R1(config)#enable secret level 2 S02 R1(config)#enable secret level 3 S03 . . . R1(config)#enable secret level 14 S14 R1(config)#enable secret level 15 S15
如果你用 GNS3 来做以下实验,必需先把 line console 0 (Console 登入) 和 line vty 0 4 (SSH 或 Telnet 登入) 里面的 privilege level 15 移除,这是 GNS3 为了方便我们才加上去的设定。另外,也要告诉 line 和 vty 使用 Local 来验证 User。
R1(config)#line console 0 R1(config-line)#no privilege level 15 R1(config-line)#login local R1(config-line)#line vty 0 4 R1(config-line)#no privilege level 15 R1(config-line)#login local
所以,现在当 Charlie 登入时会在 Privilege 5,可用指令 show privilege 去确认。後来,她用了某些方法向网管人员取得了通关密码 😳,此时她用 enable <level> 并输入密码去到她想去的层级。
User Access Verification
Username: charlie
Password:
R1#show privilege
Current privilege level is 5
R1#enable 10
Password:
R1#show privilege
Current privilege level is 10
升级至 Privilege 10 後 Charlie 除了可使用 Privilege 10 的指令,也包括了 0 至 9 的所有指令。如用 enable 指令时不输入层级,则预设为最高层级 15。当然她要知道 level 15 的 enable secret。
R1#enable Password: R1#show privilege Current privilege level is 15
除了升级也可降级,降级是不需要使用密码的,指令是 disable <level>。
R1#disable 7 R1#show privilege Current privilege level is 7
Authorization 授权
如果 Authentication 等於网络设备在问:「你是谁」,那麽 Authorization 就是问:「你可以做什麽?」。我们在上一个部份已解释过,Router 会跟据 Privilege Level 去配指令。原厂设定下,Privilege 0 只有几个指令可用,Privilege 1 可用大部份 show 指令,而 Privilege 15 则可用全部指令。如果我们想容许 Privilege 5 可以做 Interface 的 IP Address 设定,指令如下:
首先在 exec mode 为 Privilege 5 开放 configure terminal 指令。
R1(config)#privilege exec level 5 configure terminal
然後在 configure mode 里开放 interface 指令。
R1(config)#privilege configure level 5 interface
最後在 interface mode 里开放 ip address 指令。
R1(config)#privilege interface level 5 ip address
现在,Privilege 5 或以上的 user 可以为 interface 设定 ip 了。
R1#show privilege Current privilege level is 5 R1#configure terminal Enter configuration commands, one per line. End with CNTL/Z. R1(config)#interface ethernet 1/1 R1(config-if)#ip address 192.168.100.1 255.255.255.0
Accounting 计费
Accounting 带出的问题是:「你做过什麽?」网络设备可以把 User 登入登出时间和下过的指令记录下来,方便日後问责之用 🤨。译作计费的原因是古时在网络服务还在按用量付费时,Accounting 的登入登出纪录真的可用作计费之用。但 Accounting 必需配合 TACACS+ Server,因而没有 Local 设定。
TACACS+ Server
假如你管理的网络 User 少而且网络设备数量少,Local AAA 设定是足够应付的。相反,如果规模大则应使用 Remote AAA 设定。RADIUS Server 可管理用户的 Authentication,而 TACACS+ Server 则可进一步处理用户的 Authorization 和 Accounting。不缺钱的公司多会使用 Cisco ACS (Cisco Access Control System) 用作 TACACS+ Server,预算较紧张或者只作学习用途的话,笔者介绍 tac plus,这是一套在 Linux 上运行的 TACACS+ Server,功能齐备而且免费。
安装 tac plus
首先你要有 Linux,以下用 CentOS 6.9 示范如何使用 yum 来安装 tac plus。
[root@TACPLUS ~]#vim /etc/yum.repos.d/nux-misc.repo
填入以下内容:
[nux-misc] name=Nux Misc baseurl=http://li.nux.ro/download/nux/misc/el6/x86_64/ enabled=0 gpgcheck=1 gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
然後安装 tac_plus:
[root@TACPLUS ~]#yum --enablerepo=nux-misc install tac_plus
tac plus 的设定档在 /etc/tac_plus.conf。以下是 tac_plus.conf 档的一些基本参数和说明。
# TACACS+ Server 的 Key,网络设备需设定相同的 Key 才能与其连接。 key = ccie # 用作 Accounting 的记录档位置 accounting file = /var/log/tac.acct # 把 User jan 放进 user5 这个 User Group user = jan { member = user5 } group = user5 { # PAM 即是使用 Linux 本机的登录帐号 login = PAM # 把这个 group 的 privilege 设为 5 service = exec { priv-lvl = 5 } } # 可设定不同 Privilege 层级的 enable 密码,为方便测试使用了 cleartext (不加密),真实环境建议用 des 加密。 user = $enab5$ { login = cleartext s5 } user = $enab10$ { login = cleartext s10 } user = $enab15$ { login = cleartext s15 }
别忘记在 Linux 新增 jan 这位 User。
[root@TACPLUS ~]# useradd jan [root@TACPLUS ~]# passwd jan Changing password for user jan. New password: BAD PASSWORD: it is WAY too short BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully.
最後把 tac_plus 这个服务启动。
[root@TACPLUS ~]# service tac_plus start Starting tacacs+: [ OK ]
网络设备连接 TACACS+
现在示范怎样把 AAA 连接到 TACACS+ Server,有一个技巧是要留意的,因为 TACACS+ 始终是依靠网络连接,一旦网络发生问题时,网络设备无法连接 TACACS+ Server,岂不是无法进行登入?因此我们通常把 TACACS+ 设为首选 AAA 方案,而 Local 会被设为第二方案,好让 TACACS+ 无法连接时,设备自动使用第二方案来认证 User。
第一步:启动 AAA new-model
R1(config)#aaa new-model
第二步:设定 TACACS+ 资料
R1(config)#tacacs server TACACS-SERVER R1(config-server-tacacs)#address ipv4 192.168.1.21 R1(config-server-tacacs)#key ccie
第三步:设定 Authentication
首先,建立一组用来做 Authentication 的 Priority List,LIST_LOGIN 为 List 的名称,使用 group tacacs+ 为第一方案,local 为第二方案。
R1(config)#aaa authentication login LIST_LOGIN group tacacs+ local
然後告诉 Console 登入时按 LIST_LOGIN 的设定来检查认证。
R1(config)#line console 0 R1(config-line)#login authentication LIST_LOGIN
同样在 VTY 进行设定。
R1(config)#line vty 0 4 R1(config-line)#login authentication LIST_LOGIN
另外,把 Enable Password 也设定成查找 TACACS+,第二方案 enable 意思是本机的 enable secret,List 名称不用设,用 default 便可以了。
R1(config)#aaa authentication enable default group tacacs+ enable
第四步:设定 Authorization
当 User Login 时,我们想去 TACACS+ 查找这 User 获得什麽 Privilege 层级。步骤相若,先建 Authorization 的 Priority List。
R1(config)#aaa authorization exec LIST_PRIV group tacacs+ local
在 Console 加入 List 设定,然後会看到系统要求再加一条 aaa authorization console 的设定,照办便可。
R1(config)#line console 0 R1(config-line)#authorization exec LIST_PRIV %Authorization without the global command 'aaa authorization console' is useless R1(config-line)#exit R1(config)#aaa authorization console
VTY 设定。
R1(config)#line vty 0 4 R1(config-line)#authorization exec LIST_PRIV
除此之外,各 Privilege 所用的指令也可透过 TACACS+ 设定,但已超出了 CCIE 的范围,不在此详述。
第五步:设定 Accounting
Accounting 可以把登入者的登入时间及所下过的指令记录下来,传送到 TACACS+ Server。
同样地,先设定 List,留意 accounting 并不可使用 Local。exec 中的参数 start-stop 即登入和登出都记录,如使用 stop-only 则只记录登出。用在 commands 则没有影响。
aaa accounting exec LIST_ACC start-stop group tacacs+ aaa accounting commands 5 LIST_COMM_5 start-stop group tacacs+ aaa accounting commands 10 LIST_COMM_10 start-stop group tacacs+ aaa accounting commands 15 LIST_COMM_15 start-stop group tacacs+
把 List 放到 Console。
R1(config)#line console 0 R1(config-line)#accounting exec LIST_ACC R1(config-line)#accounting commands 5 LIST_COMM_5 R1(config-line)#accounting commands 10 LIST_COMM_10 R1(config-line)#accounting commands 15 LIST_COMM_15
也把 List 放到 VTY。
R1(config)#line vty 0 4 R1(config-line)#accounting exec LIST_ACC R1(config-line)#accounting commands 5 LIST_COMM_5 R1(config-line)#accounting commands 10 LIST_COMM_10 R1(config-line)#accounting commands 15 LIST_COMM_15
最後可以在 TACACS+ Server 中查看这些纪录。
[root@TACPLUS etc]# cat /var/log/tac.acct
Jul 22 13:29:06 192.168.1.88 jan tty0 async start task_id=42 timezone=UTC service=shell
Jul 22 13:47:53 192.168.1.88 jan tty0 async stop task_id=10 timezone=UTC service=shell disc-cause=1 disc-cause-ext=9 pre-session-time=2 elapsed_time=2 stop_time=1532267261
Jul 22 13:48:37 192.168.1.88 jan tty0 async stop task_id=12 timezone=UTC service=shell priv-lvl=15 cmd=configure terminal
Jul 22 13:48:50 192.168.1.88 jan tty0 async stop task_id=13 timezone=UTC service=shell priv-lvl=15 cmd=configure terminal
Jul 22 13:48:52 192.168.1.88 jan tty0 async stop task_id=14 timezone=UTC service=shell priv-lvl=15 cmd=interface Ethernet 1/0
Jul 22 13:49:04 192.168.1.88 jan tty0 async stop task_id=15 timezone=UTC service=shell priv-lvl=15 cmd=show running-config
Jul 22 13:49:17 192.168.1.88 jan tty0 async stop task_id=16 timezone=UTC service=shell priv-lvl=15 cmd=configure terminal
Jul 22 13:49:19 192.168.1.88 jan tty0 async stop task_id=17 timezone=UTC service=shell priv-lvl=15 cmd=do-exec sh run
Jul 22 13:49:19 192.168.1.88 jan tty0 async stop task_id=18 timezone=UTC service=shell priv-lvl=15 cmd=show running-config
Jul 22 13:49:40 192.168.1.88 jan tty0 async stop task_id=20 timezone=UTC service=shell priv-lvl=15 cmd=configure terminal
Jul 22 13:49:43 192.168.1.88 jan tty0 async stop task_id=21 timezone=UTC service=shell priv-lvl=15 cmd=interface Ethernet 1/0
Jul 22 13:50:31 192.168.1.88 jan tty0 async stop task_id=11 timezone=UTC service=shell disc-cause=1 disc-cause-ext=9 pre-session-time=3 elapsed_time=26 stop_time=1532277298
相關主題
Jan Ho 2021-07-22
Posted In: 保安 Security
发表回复