RADIUS (Remote Authentication Dial-In User Service; リモート認証ダイヤルインユーザサービス) プロトコルは、ネットワークへの接続を管理するための標準的なサービスです。認証/認可/アカウンティングの各機能 (AAA と略します) を、インターネットサービスプロバイダや携帯電話網のキャリアのような大規模ビジネスから、小規模なネットワークに至るまで、様々な環境に向けて提供しています。このプロトコルはユーザやデバイスを認証し、特定のネットワークサービスに対する認可を与え、課金や監査のための使用状況の監視を行います。もちろん AAA 全ての機能を使用する必要はなく、必要な機能だけを選ぶことができます。たとえばクライアントの認証機能だけを使用して使用状況の監視は行わないような場合にも対応できますし、逆に使用状況の監視だけを使用しておいて、認可機能は別のサービスを使用するようなこともできます。
このプロトコルは効率的に動作しますので、最近のハードウエアであれば数千ものリクエストを処理できます。もちろんネットワークプロトコルの種類にも依存しませんので、ダイヤルアップ以外の環境でもそのまま使用することができます。
RADIUS は分散型のアーキテクチャで動作していて、ネットワークに接続するためのアクセスサーバ (NAS) とは別に用意するのが一般的です。ユーザのアクセスデータは中央の RADIUS サーバ内に保管され、多数の NAS に対して提供されます。逆に NAS は、イーサネットスイッチや無線 LAN のアクセスポイントなど、ネットワークへの物理的なアクセス機能を提供します。
FreeRADIUS はオープンソースで開発されている RADIUS 実装で、最も広く使用されている RADIUS サーバでもあります。本章では FreeRADIUS サーバのインストールとテストの方法について説明しています。なお、 RADIUS はさまざまな用途に対応できることから、初期設定を行ったあとは公式のドキュメンテーション (詳しくは https://freeradius.org/documentation/) をお読みになって、残りの必要な設定を行ってください。
下記の手順では単純なテスト用のシステムを構築します。サーバが正しく動作していることを確認したら、必要な残りの設定を行って本番環境を構築してください。なお、用途によっては手順を巻き戻す必要があるかもしれません。
まずは freeradius-server
と freeradius-server-utils
のパッケージをインストールします。インストールが終わったら、 /etc/raddb/certs
ディレクトリ内に移動して bootstrap
を実行し、テスト用の証明書を作成してください:
#
zypper in freeradius-server freeradius-server-utils
#
cd /etc/raddb/certs
#
./bootstrap
certs
ディレクトリ内にある README ファイルには、たくさんの有益な情報が書かれています。 bootstrap
スクリプトの実行が完了したら、あとはデバッグモードでサーバを起動します:
#
radiusd -X
[...] Listening on auth address * port 1812 bound to server default Listening on acct address * port 1813 bound to server default Listening on auth address :: port 1812 bound to server default Listening on acct address :: port 1813 bound to server default Listening on auth address 127.0.0.1 port 18120 bound to server inner-tunnel Listening on proxy address * port 54435 Listening on proxy address :: port 58415 Ready to process requests
Listening
と Ready to process requests
と書かれた行が表示されたら、サーバが問題なく起動したことになります。これらが表示されない場合は、出力された内容をよくお読みのうえ、何が問題なのかを調べてください。なお、出力された内容を調べる場合は、 tee
コマンドでテキストファイルに出力しておくと便利です:
>
radiusd -X | tee radiusd.text
次にテスト用のクライアントとユーザを用意して、認証のテストを行います。クライアントは通常、無線 LAN のアクセスポイントやスイッチなど、 RADIUS サーバのクライアントとして動作するものを使用します。サーバ側では、クライアントは /etc/raddb/client.conf
ファイルに、ユーザは /etc/raddb/mods-config/files/authorize
にそれぞれ設定します。
/etc/raddb/mods-config/files/authorize
ファイルを開いて、下記のような行を入力します:
bob Cleartext-Password := "hello" Reply-Message := "Hello, %{User-Name}"
テスト用のクライアントである /etc/raddb/client.conf
は /etc/raddb/client.conf
内に既に設定されていて、 testing123
というシークレット値が設定されています。これを利用して認証のテストを行います。一般ユーザで端末をもう 1 つ開いてから radtest
コマンドを実行して、 bob でのログインを試してみます:
>
radtest bob hello 127.0.0.1 0 testing123
Sent Access-Request Id 241 from 0.0.0.0:35234 to 127.0.0.1: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 241 from 127.0.0.1:1812 to 0.0.0.0:0 length 20
radius -X
を実行しているほうの端末には、ログインの成功を表す下記のような出力が現れているはずです:
(3) pap: Login attempt with password (3) pap: Comparing with "known good" Cleartext-Password (3) pap: User authenticated successfully (3) [pap] = ok [...] (3) Sent Access-Accept Id 241 from 127.0.0.1:1812 to 127.0.0.1:35234 length 0 (3) Finished request Waking up in 4.9 seconds. (3) Cleaning up request packet ID 241 with timestamp +889
次にネットワーク内にある異なるコンピュータからログインテストを行います。サーバ側の clients.conf
は下記のようなクライアント設定が含まれていますので、こちらのコメント文字 (#) を外して IP アドレスなどの必要な修正を行います:
client private-network-1 } ipaddr = 192.0.2.0/24 secret = testing123-1 {
クライアント側では、さまざまなテストコマンドを提供している freeradius-server-utils
パッケージをインストールしておいてください。インストールが終わったら radtest
コマンドを利用し、 bob
としてログインを試してみます。なお、ホスト名でなく IP アドレスで指定しておいたほうが高速に処理されます:
>
radtest bob hello 192.168.2.100 0 testing123-1
ログインが失敗するような場合は、まず全ての出力をよく読んで原因を調査してください。設定ファイルにはいくつかのテスト用のユーザやクライアントが書かれていますので、こちらを試してみてもかまいません。また、設定ファイル内にはコメントでさまざまな情報が書かれています (ただし英語です) ので、ここからさまざまなことを学べます。テストに問題がなく、本番で使用するための設定を始めたい場合は、まず /etc/raddb/certs
ディレクトリ内にあるテスト用の証明書を全て削除して、実際に使用するものに置き換えてください。また、テスト用のユーザやクライアントの設定もコメントアウト (#) してください。なお、テスト用に動作させた radiusd
を停止するには、 Ctrl–C を押してください。本番環境では systemctl
の radiusd.service
で管理を行います。
お使いのネットワーク内で FreeRADIUS を適用するための方法について、詳しくは https://freeradius.org/documentation/ や https://networkradius.com/freeradius-documentation/ (いずれも英語) をお読みください。こちらにはさまざまな情報や手順などが示されています。