らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Cisco ACI 5.x 系で RADIUS 認証の設定をする

Cisco ACI で外部認証を利用する方法、及び関連サーバの構築方法に関して以下のエントリーを記載しました。

現在は 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 によるログイン画面

AdminAAAAuthenticationAAAPolicyLogin Domains はデフォルトだと fallback という設定がひとつだけ、存在します。 この fallback という設定は削除出来ません。

f:id:sig9:20201101173659p:plain

ACI での RADIUS 設定に関する用語

ACI での RADIUS 設定時に登場する用語について整理しておきます。

  1. Radius Provider
  2. Login Domain
    • 認証に利用出来るドメインのこと。 デフォルト状態では fallback という LOCAL ドメインだけ存在している為、LOCAL 認証が行われる。 RADIUS などの外部認証を行う場合は Login Domain を追加する
  3. Default Authentication
    • ログイン画面で Domain を指定しない場合に用いられる認証ドメインのこと

Cisco ACI に RADIUS 認証の設定を行う

ここからは ACI に RADIUS 認証の設定を行っていきます。

Step.1

AdminAAAAuthenticationAAAPolicy の設定画面は初期状態でこのようになっていました。

f:id:sig9:20201101164644p:plain

Step.2

AdminAuthenticationRADIUSCreate RADIUS Provider をクリックします。

f:id:sig9:20201101164650p:plain

Step.3

RADIUS サーバの定義を行います。

f:id:sig9:20201101164653p:plain

RADIUS サーバが定義されました。

f:id:sig9:20201101164657p:plain

Step.5

AdminAAAAuthenticationAAAPolicyLogin Domains にある + マークをクリックします。

f:id:sig9:20201101164701p:plain

Step.6

RADIUS 用の Login Domain を追加します。 RealmRADIUS を選択します。 Provider から + をクリックして次へ進みます。

f:id:sig9:20201101164704p:plain

Step.7

先の手順で定義した RADIUS サーバを追加します。 追加が完了したら Submit をクリックします。

f:id:sig9:20201101164708p:plain

Step.8

AdminAAAAuthenticationAAAPolicy から Default AuthenticationRADIUS に変更し、先程設定した RADIUS 用の Login Domain を設定します。

f:id:sig9:20201101202148p:plain

これで RADIUS 認証の設定は完了です。

Fallback 動作について

「レガシー機器と同じ動作をするはず」と思い込んでいると「実は ACI だと異なる動作をする」という場合があります。 そのひとつに「外部認証利用時の Fallback 動作」が挙げられます。 具体的には「外部認証サーバがダウンしている場合の動作」がレガシー機器と ACI では異なります。

対象 外部認証サーバがダウン時の動作
レガシー機器 次の認証方式へ 移行する
ACI 次の認証方式へ 移行しない

Fallback 時の動作は AdminAAAAuthenticationAAAPolicyFallback Domain Availability から設定可能です。 ACI バージョン 4 と異なり、バージョン 5 からは下記のように Always Available または Available only in no providers are reachable via ICMP を選択出来ます。

f:id:sig9:20201101211640p:plain

これらは以下のように動作します。

設定項目 外部サーバアップ時の動作 外部サーバダウン時の動作
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 のように指定します。

f:id:sig9:20201101213335p:plain

( 実際にこういったケースが発生するのか?は分かりませんが…) 例えば Login Domain として「fallback」と「RADIUS」のふたつだけが設定されているとします。 Fallback Domain AvailabilityAvailable only in no providers are reachable via ICMP だとすると RADIUS ユーザのパスワードが不明な場合、fallback 認証を利用出来なくなってしまう為、ログイン出来ません。 こういったケースに対応するには下記いずれかを設定しておけば回避可能と思われます。

  1. Always Available を設定しておく (この設定であれば外部サーバの死活に関わらず、apic:fallback\\admin でログイン可能)
  2. Login Domains に LOCAL 認証を追加しておく