目錄
前言
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 2018-07-21
Posted In: 保安 Security
發佈留言