Radius とは
Radius とは Remote Authentication Dial In User Service の略で、NW 機器へのリモートアクセスを一元的に管理できるプロトコルです。
管理者が管理コンソール (telnet/ssh) へアクセスするときの認証で使われることもありますし、Web 認証や IEEE802.1x 認証などの一般ユーザが社内ネットワークに接続するための認証で使われることもあります。
一元的に行う管理とは、Authentication (認証)、Authorzation (承認)、Accounting (課金)の 3 つのことで、AAA モデルと呼ばれます。
認証とは、アクセスする人が適した人かどうかをパスワードやクライアント証明書を利用して検証・判断することです。
認可とは、認証されたユーザに応じて、あらかじめ設定された権限を与えることです。NW 機器への telnet/ssh アクセスで利用するのであれば、ユーザ A は show コマンドのみ利用可、ユーザ B はインタフェースの設定まで利用可、ユーザ C は全てのコマンドが利用可、といった具合です。
課金とは、各ユーザのログイン時とログアウト時の時間をログに取ることです。言葉自体は ISDN 時代の「ダイヤルアップ接続」等の 従量課金型サービスを想定したものです。この名称は、その時代、このログから利用時間を確認し、金額を請求していたことの名残です。
Radius のメリット
Radius は、たくさんの NW 機器で、共通の認証認可アカウントを設定する必要がある場合に大きなメリットが生まれます。
例えば 100 台の L2 スイッチに、コンソールログイン用のアカウントを 30 人分作る場合を考えます。
Radius を使わずローカル DB にアカウントを作る場合、それぞれのスイッチにアカウントを作る必要があり、アカウント修正作業も大変です。100 台のスイッチそれぞれに 30 人分のアカウント(のべ 3000 人分)を作成する必要があり、1 名修正するのに 100 台分のスイッチで修正を行う必要があるのです。
ですが Radius を導入すれば、Radius サーバにだけ 30 人分アカウントを作ればよく、さらに今後アカウントを修正する場合も Radius サーバだけを設定変更すればよいのです。
Radius の用語
Radius クライアント・・・NAS (Network Access Server) とも呼ばれます。主に NW 機器や VPN 装置など、認証情報を Radius に問い合わせする機器のことです。
共有キー(Pre-shared Secret)・・・Radius クライアントと Radius サーバで設定する共通のパスワード。このキーは直接通信されることはありません。
Radiusのパケットフォーマット
Radius は UDP 上で動作する想定です。サーバは UDP 1812 番ポートで認証・認可のパケットを待ち受け、UDP 1813 番ポートで課金(ログ)のパケットを待ち受けます。
フォーマットは下記のようになります。
Code
1 Byte。Radius パケットの種類を表します。
1. Access-Request・・・Radius クライアントから Radius サーバへの認証情報を送付します
2. Access-Accept・・・Radius サーバから Radius クライアントへ認可(与えられる権限)情報を送付します
3. Access-Reject・・・Radius サーバから Radius クライアントへ認証失敗を伝えます
4. Accounting-Request・・・Radius クライアントから Radius サーバへ利用開始や利用終了を伝えます
5. Accounting-Response・・・Radius サーバから Radius クライアントへ、利用ログを記録したことを伝えます。
11.Access-Challenge・・・Radius サーバから Radius クライアントへ追加の情報を求めます。これを受信した Radius クライアントは再び Access-Request により、要求された追加情報を送信します。これは IEEE802.1x 認証等で利用されます。
12.Status-Server (experimental)
13.Status-Client (experimental)
255.Reserved
Identifier
1 Byte。どのパケットに対する返信なのかを識別するためのものです。一連の流れでは同じ Identifier を利用します。
Length
2 Byte。[Code から最後の Attribute までのサイズ] = [UDP セグメントのサイズ] を示します。
Authenticator
16 Byte。Radius クライアントから Radius サーバへのパケットにおいては Request Authenticator と呼ばれ、その逆は Response Authenticator と呼ばれます。
Request Authenticator
ランダムな値が使われます。これはユーザのパスワードが平文で流れるのを防ぐ目的でも使われますが、メインは次で説明する Response Authenticator がなりすましなど行われていないかを検証する目的で使われます。
Response Authenticator
受信した Radius パケットに共有キーを付け加えたものを MD5 でハッシュ化したものです。Radius クライアントは共有キーが合致しているかを検証できますので、正しい Radius サーバからの応答か、というのを確認できます。
Attribute
m
この属性は TLV 形式 (Type=1Byte, Length=1Byte, Value=Length で示した Byte) で記載され、1 つの Radius パケットで複数の属性を送付することができます。この属性の種類は挙げればきりがないので、一部だけ紹介します。
1. User-Name・・・認証時のユーザ ID
2. User-Password・・・認証時のユーザパスワード
3. CHAP-Password・・・認証時のユーザパスワードハッシュ
26.Vender Specific・・・Radius クライアントのメーカが独自に定義できる属性値。よく使われる例としては、動的認証 VLAN の実装として、認証されたユーザによって VLAN ID や VLAN name を属性値として Radius クライアントへ返し、Radius クライアント側で認証されたユーザをその VLAN に変更する、といったことができます。
32.NAS Identifier・・・Radius クライアントを識別する属性です。基本的には Radius クライアントの IP アドレスを含めるのが一般的なようですが、機器によっては、ユーザが認証を行った VLAN ID 等に設定変更することができます。この値は、Radius サーバ側での制御に役立ちます。例えば「このスイッチ (Radiusクライアント) は他のスイッチとメーカが異なり、動的 VLAN で利用する属性が違うから、返す属性を変えたい」といった制御も可能です。
81.Tunnel-Private-Group-Id・・・先に紹介した Vender Specific の例と同様、動的認証 VLAN の VLAN ID が属性値として入ります。Vender Specific と異なり、この属性は用途はこれに限定されます。
動的認証 VLAN を行う場合はたいてい 26 か 81 を利用することがほとんどのようです。
パケットキャプチャの例
以下では HPE 5130 スイッチで Web 認証をしたときのパケットキャプチャを示します。
[HPE 5130 から Windows Server (NPS) への認証要求]
t.yamada という ID でパスワードを暗号化して送っています。
[Windows Server (NPS) から HPE 5130 への認証成功]
Code: Access-Accept が返され、認証が成功したと分かります。
[Windows Server (NPS) から HPE 5130 への認証失敗]
Code: Access-Reject が返され、認証に失敗したことが分かります。
コメント