Cisco ASAへのTelnetをFreeRADIUSで認証してログイン直後に自動でPriv15にしてみた

# はじめに
この記事は、管理しないといけないASAがたくさんあって、下記のように考えている人向けです。
・ASAにログインするときに、RADIUSで認証したい
・ログイン後、enableコマンドを打ちたくない

# やってみたこと
下の構成図のように構築して、タイトルの内容をやってみました。
![0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2795509/cf483f08-a3a3-ae10-0fae-f4652c6d6f70.png)

ログインに成功すると、すぐさまプロンプトが```#```になります。
```
User Access Verification

Username: bob
Password: *****
User bob logged in to fw1
Logins over the last 1 days: 10.  Last login: 04:23:19 UTC Aug 20 2022 from 192.168.0.100
Failed logins since the last login: 0.
Type help or '?' for a list of available commands.
fw1#
```

# 手順
### ①事前準備
ASA、Rocky Linux、PCの初期セットアップとPing疎通確認を行いますが、
詳細は省略します。

### ②FreeRADIUSインストール
下記を順番に実行してインストールします。LDAPは今回は不要ですが、インストールしておきます。
```
$ sudo dnf -y update
$ sudo dnf makecache --refresh
$ sudo dnf -y install freeradius
$ sudo dnf -y install freeradius-ldap
$ sudo dnf -y install freeradius-utils
```
### ③FreeRADIUS設定
``/etc/raddb/client.conf``を編集して、Cisco ASAからの認証リクエストを受け付けるようにします。緩めに設定します。
``` /etc/raddb/client.conf
client test-network {
        ipaddr          = 192.168.0.0/24
        secret          = testing123
}
```

``/etc/raddb/mods-config/files/authorize``を編集して、テストで使用するユーザー``bob``を追加します。
1行目は、同じ内容が設定ファイルにコメントアウトされて記載されていますので、
近辺に追加します。

``` /etc/raddb/mods-config/files/authorize
bob     Cleartext-Password := "hello"
        Service-Type = Administrative-User,
        Cisco-AVPair = "shell:priv-lvl=15"
```

### ④証明書作成
EAP-TLSを実施したいわけではないのですが、作成しないとFreeRADIUSが動かないようなので作成します。
rootユーザになってから実行します。

```
# cd /etc/raddb/certs/
# make ca.pem
# make server.pem
# make client.pem
# openssl pkcs12 -export -in ca.pem -out ca.p12
# openssl dhparam -out /etc/raddb/certs/dh 2048
# chmod 644 /etc/raddb/certs/client.crt
# chmod 644 /etc/raddb/certs/client.key
# chmod 644 /etc/raddb/certs/server.pem
```

### ⑤Rocky LinuxのFirewall設定
初期状態でFirewallが有効になっていると、RADIUSの通信パケットが破棄されますので、破棄されないように許可設定を追加します。
```
$ sudo firewall-cmd --zone=public --permanent --add-service=radius
$ sudo firewall-cmd --reload
```

### ⑥FreeRADIUS起動と確認
FreeRADIUSを起動させます。2行目のコマンドで状態を確認します。
```
$ sudo systemctl start radiusd
$ sudo systemctl status radiusd
```
起動している場合、2行目のコマンドの実行結果として、``active (running)``という表示が見つかると思います。

### ⑦Cisco ASAの設定
Interfaceは設定済ということで進めていますが、Interface設定も書いておきます。
下記を設定します。コピペですね。
```
hostname fw1
interface Management0/0
 management-only
 nameif management
 security-level 100
 ip address 192.168.0.200 255.255.255.0 
exit

aaa-server freeradius protocol radius
aaa-server freeradius (management) host 192.168.0.43
 key testing123
 authentication-port 1812
 accounting-port 1813
exit

telnet 192.168.0.0 255.255.255.0 management
username woo password hello privilege 15
no username bob
aaa authentication telnet console freeradius LOCAL
aaa authorization exec authentication-server auto-enable
```

### ⑧テスト
いきなり、Telnetしてみても動くと思いますが、動かない場合を考慮して動作確認です。下記はCisco ASA側でのテスト成功例です。
```
fw1# test aaa-server authentication freeradius host 192.168.0.43 username bob password hello 
INFO: Attempting Authentication test to IP address (192.168.0.43) (timeout: 12 seconds)
INFO: Authentication Successful
fw1#
```
成功しない場合は、Rocky Linux側で下記を実施してみます。
下記は成功例です。
```
$ radtest bob hello 192.168.0.43 0 testing123
Sent Access-Request Id 203 from 0.0.0.0:42680 to 192.168.0.43:1812 length 73
        User-Name = "bob"
        User-Password = "hello"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 0
        Message-Authenticator = 0x00
        Cleartext-Password = "hello"
Received Access-Accept Id 203 from 192.168.0.43:1812 to 192.168.0.43:42680 length 51
        Service-Type = Administrative-User
        Cisco-AVPair = "shell:priv-lvl=15"
$
```
③で設定した``key``が違う場合は、RADIUS Serverが応答しませんので、応答がないという表示がでます。ユーザー名／パスワードが違う場合は、応答として、Access-Rejectを受け取ります。

# やってみた
Cisco ASAにTelnetを実行してみます。下記のようにログインできて、プロンプトが``fw1#``となっていれば、成功です。

```
User Access Verification

Username: bob
Password: *****
User bob logged in to fw1
Logins over the last 1 days: 10.  Last login: 04:23:19 UTC Aug 20 2022 from 192.168.0.100
Failed logins since the last login: 0.
Type help or '?' for a list of available commands.
fw1#
```

# 補足
Rocky Linuxを再起動した場合に、FreeRADIUSを自動起動させるには、下記を実行する必要があります。
```
$ sudo systemctl enable radiusd
```