Cisco ACI で外部認証を利用する方法、及び関連サーバの構築方法に関して以下のエントリーを記載しました。
- CentOS7 に FreeRadius をインストールする
- Cisco ACI へのログイン時に RADIUS 認証出来るようにする
- Cisco ACI へのログイン時に Active Directory 認証出来るようにする
現在は ACI も 5.x 系までバージョンアップしており、以前に書いたエントリー時点から設定方法も少しだけ変わっています。 今回は改めて 5.x 系での RADIUS 認証設定方法をメモしておきます。
試験環境
RADIUS サーバには CentOS7 上の FreeRADIUS を使いました。 インストール手順は CentOS7 に FreeRadius をインストールする に記載してある通りです。 但し、後述しますが /etc/raddb/users に Cisco-avpair を追加設定する必要があります。 検証環境では具体的に以下のバージョンを用いました。
- Cisco ACI 5.1(1h)
- CentOS8
- freeradius-3.0.17-7
CentOS8 に FreeRADIUS をインストールする
CentOS8 に FreeRADIUS をインストールします。 現時点では 3.0.17 がインストールされるようです。
# dnf info freeradius freeradius-utils
Last metadata expiration check: 1:50:56 ago on Sun Nov 1 15:06:04 2020.
Available Packages
Name : freeradius
Version : 3.0.17
Release : 7.module_el8.2.0+321+f9fd5d26
Architecture : x86_64
Size : 1.1 M
Source : freeradius-3.0.17-7.module_el8.2.0+321+f9fd5d26.src.rpm
Repository : AppStream
Summary : High-performance and highly configurable free RADIUS server
URL : http://www.freeradius.org/
License : GPLv2+ and LGPLv2+
Description : The FreeRADIUS Server Project is a high performance and highly configurable
: GPL'd free RADIUS server. The server is similar in some respects to
: Livingston's 2.0 server. While FreeRADIUS started as a variant of the
: Cistron RADIUS server, they don't share a lot in common any more. It now has
: many more features than Cistron or Livingston, and is much more configurable.
:
: FreeRADIUS is an Internet authentication daemon, which implements the RADIUS
: protocol, as defined in RFC 2865 (and others). It allows Network Access
: Servers (NAS boxes) to perform authentication for dial-up users. There are
: also RADIUS clients available for Web servers, firewalls, Unix logins, and
: more. Using RADIUS allows authentication and authorization for a network to
: be centralized, and minimizes the amount of re-configuration which has to be
: done when adding or deleting new users.
Name : freeradius-utils
Version : 3.0.17
Release : 7.module_el8.2.0+321+f9fd5d26
Architecture : x86_64
Size : 239 k
Source : freeradius-3.0.17-7.module_el8.2.0+321+f9fd5d26.src.rpm
Repository : AppStream
Summary : FreeRADIUS utilities
URL : http://www.freeradius.org/
License : GPLv2+ and LGPLv2+
Description : The FreeRADIUS server has a number of features found in other servers,
: and additional features not found in any other server. Rather than
: doing a feature by feature comparison, we will simply list the features
: of the server, and let you decide if they satisfy your needs.
:
: Support for RFC and VSA Attributes Additional server configuration
: attributes Selecting a particular configuration Authentication methods
インストールします。
dnf -y install freeradius freeradius-utils
RADIUS 認証を許可する範囲を設定ファイルである /etc/raddb/clients.conf
追加します。 下記では 10.0.0.0/8 から SECRET
という Radius Secret 文字列での認証要求を受け付けるよう、設定しています。
cat << EOF >> /etc/raddb/clients.conf
client private-nw1 {
ipaddr = 10.0.0.0/8
proto = *
secret = SECRET
require_message_authenticator = no
nas_type = other # localhost isn't usually a NAS...
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
EOF
今回は以下のユーザを定義します。
Login ID | Password | Security Domain | Role | UNIX User ID |
---|---|---|---|---|
user1 | password1 | all | admin | 16001 |
user2 | password2 | all | read-all | 16002 |
具体的にはユーザの定義を設定ファイルである /etc/raddb/users
に追記します。
cat << EOF >> /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)"
EOF
FreeRADIUS の設定が完了したのでサービスを開始します。
systemctl start radiusd
systemctl enable radiusd
サービスが起動したことを確認しておきます。
systemctl status radiusd
FreeRADIUS が意図した通りに設定していることを確認するには freeradius-utils
のインストールされた別の Linux から radtest
でテストを行います。 以下のように Received Access-Accept
を受信すれば意図した通りに設定されています。 意図しないレスポンスがあった場合や、応答が無く、タイムアウトしてしまう場合は FreeRADIUS の設定を見直します。
# radtest user1 password1 10.0.0.1 0 SECRET
Sent Access-Request Id 52 from 0.0.0.0:38503 to 10.0.0.1:1812 length 75
User-Name = "user1"
User-Password = "password1"
NAS-IP-Address = 127.0.0.1
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "password1"
Received Access-Accept Id 52 from 10.0.0.1:1812 to 10.0.0.2:38503 length 61
Cisco-AVPair = "shell:domains = all/admin/(16001)"
APIC への Web UI によるログイン画面
Admin
→ AAA
→ Authentication
→ AAA
→ Policy
→ Login Domains
はデフォルトだと fallback
という設定がひとつだけ、存在します。 この fallback
という設定は削除出来ません。
ACI での RADIUS 設定に関する用語
ACI での RADIUS 設定時に登場する用語について整理しておきます。
- Radius Provider
- RADIUS サーバのこと
- Login Domain
- 認証に利用出来るドメインのこと。 デフォルト状態では
fallback
という LOCAL ドメインだけ存在している為、LOCAL 認証が行われる。 RADIUS などの外部認証を行う場合は Login Domain を追加する
- 認証に利用出来るドメインのこと。 デフォルト状態では
- Default Authentication
- ログイン画面で Domain を指定しない場合に用いられる認証ドメインのこと
Cisco ACI に RADIUS 認証の設定を行う
ここからは ACI に RADIUS 認証の設定を行っていきます。
Step.1
Admin
→ AAA
→ Authentication
→ AAA
→ Policy
の設定画面は初期状態でこのようになっていました。
Step.2
Admin
→ Authentication
→ RADIUS
→ Create RADIUS Provider
をクリックします。
Step.3
RADIUS サーバの定義を行います。
RADIUS サーバが定義されました。
Step.4
Admin
→ AAA
→ Authentication
→ AAA
→ Policy
→ Login Domains
にある +
マークをクリックします。
Step.5
RADIUS 用の Login Domain を追加します。 Realm
は RADIUS
を選択します。 Provider
から +
をクリックして次へ進みます。
Step.6
先の手順で定義した RADIUS サーバを追加します。 追加が完了したら Submit
をクリックします。
Step.7
Admin
→ AAA
→ Authentication
→ AAA
→ Policy
から Default Authentication
を RADIUS
に変更し、先程設定した RADIUS 用の Login Domain を設定します。
これで RADIUS 認証の設定は完了です。
Fallback 動作について
「レガシー機器と同じ動作をするはず」と思い込んでいると「実は ACI だと異なる動作をする」という場合があります。 そのひとつに「外部認証利用時の Fallback 動作」が挙げられます。 具体的には「外部認証サーバがダウンしている場合の動作」がレガシー機器と ACI では異なります。
対象 | 外部認証サーバがダウン時の動作 |
---|---|
レガシー機器 | 次の認証方式へ 移行する |
ACI | 次の認証方式へ 移行しない |
Fallback 時の動作は Admin
→ AAA
→ Authentication
→ AAA
→ Policy
→ Fallback Domain Availability
から設定可能です。 ACI バージョン 4 と異なり、バージョン 5 からは下記のように Always Available
または Available only in no providers are reachable via ICMP
を選択出来ます。
これらは以下のように動作します。
設定項目 | 外部サーバアップ時の動作 | 外部サーバダウン時の動作 |
---|---|---|
Always Available |
fallback Domain で認証可能 | fallback Domain で認証可能 |
Available only in no providers are reachable via ICMP |
fallback Domain で認証不可 | fallback Domain で認証可能 |
fallback Domain で認証させる場合、以下のように Username
には apic:fallback\\admin
のように指定します。
( 実際にこういったケースが発生するのか?は分かりませんが…) 例えば Login Domain として「fallback」と「RADIUS」のふたつだけが設定されているとします。 Fallback Domain Availability
が Available only in no providers are reachable via ICMP
だとすると RADIUS ユーザのパスワードが不明な場合、fallback 認証を利用出来なくなってしまう為、ログイン出来ません。 こういったケースに対応するには下記いずれかを設定しておけば回避可能と思われます。
Always Available
を設定しておく (この設定であれば外部サーバの死活に関わらず、apic:fallback\\admin
でログイン可能)Login Domains
に LOCAL 認証を追加しておく
コメント