らくがきちょう

なんとなく

Cisco ACI へのログイン時に RADIUS 認証出来るようにする

Cisco ACI へのログイン時に RADIUS 認証されるように設定する方法をメモしておきます。

試験環境

RADIUS サーバには CentOS7 上の FreeRADIUS を使いました。 インストール手順は CentOS7 に FreeRadius をインストールする に記載してある通りです。 但し、後述しますが /etc/raddb/usersCisco-avpair を追加設定する必要があります。 検証環境では具体的に以下のバージョンを用いました。

  • CentOS7
    • freeradius-3.0.13-8.el7_4
  • Cisco ACI 2.3(1f)

APIC へのログイン画面

APIC へ Web ブラウザでログインする場合、Login Domains の設定内容 (設定数) によって表示が変化します。 Login Domains の設定は Admin → AAA → AAA Authentication → Login Domains にあります。

Login Domains 設定 User ID Password Domain Mode
fallback のみ ×
fallback 含め、複数設定されている

実際には以下のように表示が異なります。 f:id:sig9:20170917154918p:plain

Domain 選択欄を 表示しない 設定

fallback しか設定されていない(※ 初期状態)では左側のように Domain 欄が表示されません。 RADIUS や TACACS+、LDAP 等の外部認証を設定しつつ、Domain の選択欄は表示しないようにする場合、設定は以下の流れで行います。

  1. RADIUS Providers
  2. RADIUS Provider Groups
  3. AAA Authentication

Domain 選択欄を 表示する 設定

fallback 以外にも Login Domain を設定すると右側のように Domain 欄が表示されます。 Domain 欄から Login Domain を選択することで認証方式を選択出来るようになります。 この場合、設定は以下の流れで行います。 Login Domains を設定するのがポイントです。

  1. RADIUS Providers
  2. RADIUS Provider Groups
  3. Login Domains
  4. AAA Authentication

APIC の初期設定

2.3(1f) の初期状態では Login DomainsAAA Authentication の設定は以下のようになっていました。

Login Domains

fallback のみ、設定されています。 また、fallback の認証先は Local となっていることが分かります。

f:id:sig9:20170917155158p:plain

AAA Authentication

Default AuthenticationConsole Authentication 共に Local になっていることが分かります。

f:id:sig9:20170917155211p:plain

設定

それでは RADIUS 認証の設定を進めていきます。

Step.1

まず最初に (APIC では無く) FreeRADIUS のユーザ定義ファイルに Cisco-avpair を付与しておきます。 具体的には Cisco-avpair を使って認証成功時に該当ユーザへ付与する Security DomainRoles を付与します。 CentOS7 に FreeRadius をインストールするに記載した手順でインストールした場合、ユーザ定義ファイルは /etc/raddb/users です。 設定例は以下の通りです。

user1 Cleartext-Password := "password1"
    Cisco-avpair = "shell:domains = all/admin/(16001)"
user2 Cleartext-Password := "password2"
    Cisco-avpair = "shell:domains = all/read-all/(16002)"

この例では以下のような設定になります。 UNIX ID にはユーザ毎に一意になるよう、16,000 ~ 23,999 間の値を割当てます。

ユーザ名 パスワード UNIX ID Security Domain Role
user1 password1 16001 all admin
user2 password2 16002 all read-all

Step.2

Admin → AAA → RADIUS Management → RADIUS Providers と辿り、RADIUS Provider を設定します。 一般的なパラメータばかりなので、難しい部分は無いと思います。

f:id:sig9:20170917161135p:plain

設定が完了すると以下のように表示されるはずです。

f:id:sig9:20170917200328p:plain

Step.3

Admin → AAA → RADIUS Management → RADIUS Provider Groups と辿り、RADIUS Provider Group を設定します。 定義済みの RADIUS Provider をグルーピングします。 今回は RADIUS Provider をひとつしか定義していない為、「グループ」と言っても参照先 RADIUS はひとつしかありません。

f:id:sig9:20170917200354p:plain

設定が完了すると以下のように表示されるはずです。

f:id:sig9:20170917200405p:plain

Step.4

Admin → AAA → AAA Authentication → Login Domains と辿り、Login Domains を設定します。 Realm を RADIUS とし、RADIUS Provider Group には先程設定したものを指定します。

f:id:sig9:20170917201718p:plain

設定が完了すると以下のように表示されるはずです。

f:id:sig9:20170917201728p:plain

Step.5

Admin → AAA → AAA Authentication と辿り、AAA Authentication を設定します。 Default AuthenticationConsole Authentication の Realm 及び Provider を指定します。 これで RADIUS 認証の設定は完了です。

f:id:sig9:20170917201747p:plain

Step.6

一度、ログアウトしてログイン画面を表示し直します。 Login Domain の設定を増やしたので Domain 欄が増えています。 今回は Domain 欄から RadiusLoginDomain を選択した上で、FreeRADIUS 上に定義した「user1」のユーザ名とパスワードを指定してログインしてみます。 ここで Domain 欄を空欄にしたり、DefaultAuth を選択しても Step.5 で Default AuthenticationRADIUS 認証に指定している為、いずれにしろ RADIUS で認証されます。

f:id:sig9:20170917210125p:plain

ログイン出来たら Admin → AAA → Security Management → Remote Users → user1 と辿ります。 すると、user1 というリモートユーザが指定した UNIX ID や Security DomainRole で作成されていることが分かります。

f:id:sig9:20170917210133p:plain

エラー

ログイン時に発生するエラーのうち、数パターンを見てみます。

Cisco AV Pair の値が不適切な場合

FreeRADIUS で /etc/raddb/users でユーザ毎に定義する Cisco AV Pair (Cisco-avpair) は以下のように all/admin/(16001) とするのが正しい設定です。

user1 Cleartext-Password := "password1"
    Cisco-avpair = "shell:domains = all/admin/(16001)"

これを意図的に 誤った設定 に書き換えます。 具体的には all/admin(16001) とし、/ を削除しました。

user1 Cleartext-Password := "password1"
    Cisco-avpair = "shell:domains = all/admin(16001)"

すると APIC のログイン画面でユーザ名&パスワードを入力しても以下のエラーになってしまいます。 Cisco AV Pair に記載した文字列が間違っているとしても FreeRADIUS としては問題無く起動してしまうので、やや気が付きづらいかも知れませんが、APIC 上のエラーを読めばすぐに原因(=Cisco AV Pair の記載ミス)は分かると思います。

Invalid Cisco AV Pair for AAA user roles and APIC policy is set to reject logins in this case (AVPair Parsing Library Error: ‘Invalid shell:domains string (shell:domains = all/admin(16001)) received from AAA server’)

f:id:sig9:20170917220122p:plain

RADIUS サーバから応答が無い場合

RADIUS サーバがシャットダウンしている といった理由で応答が無い場合は以下のようなエラーになります。

AAA server is unresponsive or too slow to respond

f:id:sig9:20170917221012p:plain

参考