AAAの練習
本エントリについて
Dynagen、Dynamips、freeradius を使って、AAA認証の設定を練習します。
Dynagen、Dynamips の利用環境はすでに整っているものとします。
参考
環境について
r1 を radius client とします。
r1 へ telnet するときの認証について、r1 から radius server へ問合せます。
r2 から r1 へ telnet することで動作を確認します。
[radius server] .1 === (10.2.0.0/24) === .254 f0/0[r1]f0/1 .253 === (10.2.1.0/24) === .254 f0/0[r2]
[[ETHSW sw1]]
1 = access 1
2 = access 1
3 = access 1 NIO_udp:30001:127.0.0.1:20001
[[ROUTER r1]]
f0/0 = nio_tap:tap0
f0/1 = sw1 1
[[ROUTER r2]]
model = 3725
f0/0 = sw1 2
radius サーバ基本設定
radius サーバは、Debian buster で動かします。パッケージで利用できる freeradius
を利用します。
ローカルでの動作テストで radtest を実行するため freeradius-utils
も追加します。こちらはサーバの動作自体には不要です。
$ sudo apt install -y freeradius freeradius-utils
インストールしたら、/etc/freeradius/clients.conf ファイルに接続元のクライアント(Cisco機器)のアドレスやシークレットを記載します。
記載したら radius サーバを再起動します。
$ sudo cp -pi /etc/freeradius/3.0/clients.conf{,.000}
$ sudo vi /etc/freeradius/3.0/clients.conf
$ sudo diff -u /etc/freeradius/3.0/clients.conf{,.000}
@@ -266,8 +266,3 @@
# secret = testing123
# }
#}
-client ciscolabo {
- ipaddr = 10.2.0.0/16
- secret = radiussecret
-}
-
$ sudo systemctl restart freeradius
なお、radius サーバは、udp で動作します。
admin@ip-10-0-0-73:~$ sudo ss -apn | grep 1812
udp UNCONN 0 0 127.0.0.1:18120 0.0.0.0:* users:(("freeradius",pid=938,fd=7))
udp UNCONN 0 0 0.0.0.0:1812 0.0.0.0:* users:(("freeradius",pid=938,fd=8))
udp UNCONN 0 0 [::]:1812 [::]:* users:(("freeradius",pid=938,fd=10))
admin@ip-10-0-0-73:~$
admin@ip-10-0-0-73:~$ sudo ss -apn | grep 1813
udp UNCONN 0 0 0.0.0.0:1813 0.0.0.0:* users:(("freeradius",pid=938,fd=9))
udp UNCONN 0 0 [::]:1813 [::]:* users:(("freeradius",pid=938,fd=11))
admin@ip-10-0-0-73:~$
認証(authentication)
認証は「誰に何を許可する」の 誰に
の部分です。
freeradius 側設定
freeradius のユーザデータベースとして、rdb や ldap も使うことも可能ですが、ここではシンプルに、テキストファイルを利用します。
ユーザを追加したら、デーモンを再起動します。
$ sudo cp -pi /etc/freeradius/3.0/mods-config/files/authorize{,.000}
$ sudo vi /etc/freeradius/3.0/mods-config/files/authorize
$ sudo diff -u /etc/freeradius/3.0/mods-config/files/authorize{,.000}
@@ -1,4 +1,3 @@
-ccna Cleartext-Password := "cisco"
$ sudo systemctl restart freeradius
いったんローカルで radtest
コマンドで動作テストをしてみます。
以下は認証成功の例です。
$ radtest ccna cisco 127.0.0.1 1812 testing123
Sent Access-Request Id 241 from 0.0.0.0:38371 to 127.0.0.1:1812 length 74
User-Name = "ccna"
User-Password = "cisco"
NAS-IP-Address = 127.0.1.1
NAS-Port = 1812
Message-Authenticator = 0x00
Cleartext-Password = "cisco"
Received Access-Accept Id 241 from 127.0.0.1:1812 to 127.0.0.1:38371 length 20
$ radtest ccna cisco 10.2.0.1 1812 radiussecret
Sent Access-Request Id 160 from 0.0.0.0:34124 to 10.2.0.1:1812 length 74
User-Name = "ccna"
User-Password = "cisco"
NAS-IP-Address = 127.0.1.1
NAS-Port = 1812
Message-Authenticator = 0x00
Cleartext-Password = "cisco"
Received Access-Accept Id 160 from 10.2.0.1:1812 to 10.2.0.1:34124 length 20
radius サーバが起動していないときは下記が表示されます。
(0) No reply from server for ID 35 socket 3
認証が通らなかった時のメッセージは下記のようになります。
Received Access-Reject Id 245 from 10.2.0.1:1812 to 10.2.0.1:47980 length 20
(0) -: Expected Access-Accept got Access-Reject
Cisco デバイス側設定
radius サーバの情報を設定します。
r1(config)#aaa new-model
r1(config)#radius-server host 10.2.0.1 auth-port 1812 acct-port 1813
r1(config)#radius-server key radiussecret
設定した内容を確認します。
r1#show aaa servers
RADIUS: id 2, priority 1, host 10.2.0.1, auth-port 1812, acct-port 1812
State: current UP, duration 1247s, previous duration 0s
Dead: total time 0s, count 0
Quarantined: No
Authen: request 12, timeouts 0
Response: unexpected 0, server error 0, incorrect 1, time 1567699ms
Transaction: success 11, failure 1
Author: request 0, timeouts 0
Response: unexpected 0, server error 0, incorrect 0, time 0ms
Transaction: success 0, failure 0
Account: request 0, timeouts 0
Response: unexpected 0, server error 0, incorrect 0, time 0ms
Transaction: success 0, failure 0
Elapsed time since counters last cleared: 20m
Estimated Outstanding Access Transactions: 0
Estimated Outstanding Accounting Transactions: 0
設定した radius サーバに対していったんテストします。
正しい認証情報を与えてみます。
r1#test aaa group radius server 10.2.0.1 ccna cisco legacy
Attempting authentication test to server-group radius using radius
User was successfully authenticated.
誤った認証情報を与えてみます。
r1#test aaa group radius server 10.2.0.1 cca cisco legacy
Attempting authentication test to server-group radius using radius
User authentication request was rejected by server.
下記でもテスト実行できます。
r1#test aaa group radius ccna cisco legacy
Attempting authentication test to server-group radius using radius
User was successfully authenticated.
仮想端末に認証設定を追加
最初に、ローカルデータベースにフォールバック用のユーザを作成しておきます。
r1(config)#username user privilege 1 password 0 cisco
「デフォルトだと、最初に radius 認証、radius に接続できないときはローカル認証」 するように設定します。
r1(config)#aaa authentication login default group radius local
r1(config)#line vty 0 4
r1(config-line)#login authentication default
ログインテストします。
r2#telnet 10.2.1.253
Trying 10.2.1.253 ... Open
User Access Verification
Username: ccna
Password:
r1>
radius サーバを停止して、フォールバックの確認をしてみます。
admin@ip-10-0-0-73:~$ sudo systemctl stop freeradius
このように、radius サーバが応答しない場合、ローカル認証でログインすることができます。
なお、パスワードを入力してから radius サーバとの接続がタイムアウトするまで少し時間がかかります。
r2#telnet 10.2.1.253
Trying 10.2.1.253 ... Open
User Access Verification
Username: ccna
Password:
% Authentication failed
Username: user
Password:
r1>
テストを終えたら、radius サーバを起動しておきます。
admin@ip-10-0-0-73:~$ sudo systemctl start freeradius
認可(authorization)
認可(許可)は「誰に何を許可する」の 何を
の部分です。
権限レベルを指定することで、何を許可するのかを定義します。
freeradius 側設定
下記のように、ユーザごとに権限レベルを設定します。認証と認可は同じ設定ファイルに記載します。
設定ファイルを変更したら radius サーバを再起動します。
$ sudo ls -l /etc/freeradius/3.0/mods-config/files/authorize{,.001}
$ sudo cp -p /etc/freeradius/3.0/mods-config/files/authorize{,.001}
$ sudo vi /etc/freeradius/3.0/mods-config/files/authorize
$ sudo diff -u /etc/freeradius/3.0/mods-config/files/authorize{,.001}
@@ -1,11 +1,4 @@
-ccna Cleartext-Password := "cisco"
- Cisco-AVPair = "shell:priv-lvl=0"
-
-ccnp Cleartext-Password := "cisco"
- Cisco-AVPair = "shell:priv-lvl=1"
-
-ccie Cleartext-Password := "cisco"
- Cisco-AVPair = "shell:priv-lvl=15"
+ccna Cleartext-Password := "cisco"
$ sudo systemctl restart freeradius
Cisco デバイス側設定
認可の設定を追加します。
switch(config)#aaa authorization exec default group radius if-authenticated
ccna ユーザで接続してみます。
権限レベル0なので、実行できるコマンドがごく限られたものになります。
r2#telnet 10.2.1.253
Trying 10.2.1.253 ... Open
User Access Verification
Username: ccna
Password:
r1>
r1>?
Exec commands:
<1-99> Session number to resume
disable Turn off privileged commands
enable Turn on privileged commands
exit Exit from the EXEC
help Description of the interactive help system
logout Exit from the EXEC
r1>
ccie ユーザで接続してみます。
権限レベル15なので、特権レベルとなり、プロンプトが #
となります。
r2#telnet 10.2.1.253
Trying 10.2.1.253 ... Open
User Access Verification
Username: ccie
Password:
r1#
アカウンティング(accounting)
アカウンティングの設定を追加します。
r1(config)#aaa accounting exec default start-stop group radius
ログイン、ログアウトしてみます。
r2#telnet 10.2.1.253
Trying 10.2.1.253 ... Open
User Access Verification
Username: ccna
Password:
r1>
r1>exit
[Connection to 10.2.1.253 closed by foreign host]
radius サーバに、下記のようにログが出力されます。
admin@ip-10-0-0-73:~$ sudo ls -lR /var/log/freeradius/radacct
/var/log/freeradius/radacct:
total 4
drwx------ 2 freerad freerad 4096 Dec 19 08:03 10.2.0.254
/var/log/freeradius/radacct/10.2.0.254:
total 8
-rw------- 1 freerad freerad 4882 Dec 19 20:41 detail-20221219
admin@ip-10-0-0-73:~$ sudo cat /var/log/freeradius/radacct/10.2.0.254/detail-20221219
Mon Dec 19 20:41:05 2022
Acct-Session-Id = "00000006"
User-Name = "ccna"
Acct-Authentic = RADIUS
Acct-Status-Type = Start
NAS-Port = 98
NAS-Port-Id = "tty98"
NAS-Port-Type = Virtual
Calling-Station-Id = "10.2.1.254"
Service-Type = NAS-Prompt-User
NAS-IP-Address = 10.2.0.254
Acct-Delay-Time = 0
Event-Timestamp = "Dec 19 2022 20:41:05 JST"
Tmp-String-9 = "ai:"
Acct-Unique-Session-Id = "593a6a14c7b4bf3364eda1acdc6ab048"
Timestamp = 1671450065
Mon Dec 19 20:41:40 2022
Acct-Session-Id = "00000006"
User-Name = "ccna"
Acct-Authentic = RADIUS
Acct-Terminate-Cause = User-Request
Acct-Session-Time = 35
Acct-Status-Type = Stop
NAS-Port = 98
NAS-Port-Id = "tty98"
NAS-Port-Type = Virtual
Calling-Station-Id = "10.2.1.254"
Service-Type = NAS-Prompt-User
NAS-IP-Address = 10.2.0.254
Acct-Delay-Time = 0
Event-Timestamp = "Dec 19 2022 20:41:40 JST"
Tmp-String-9 = "ai:"
Acct-Unique-Session-Id = "593a6a14c7b4bf3364eda1acdc6ab048"
Timestamp = 1671450100
まとめ
freeradius を使用して、Cisco デバイスのAAA認証の設定を練習しました。
ユーザデータベースを、今回のようなファイルではなく、外部の rdb サーバや ldap サーバと連携してみるのも楽しい勉強になると思います。
Discussion