FreeRADIUSによる認証の一元管理
20箇所のWi-Fiアクセスポイントや3つのVPNゲートウェイで個別にログイン情報を管理するのは、運用上の悪夢です。金曜日に従業員が退職した際、午後の時間を使ってすべてのハードウェアにログインし、認証情報を削除して回るべきではありません。FreeRADIUSはこの問題を解決します。これは、ネットワークハードウェアと、OpenLDAPやActive Directoryなどの中央ユーザーデータベースの間で機能する、高度なトラフィックコントローラーの役割を果たします。
私はこれまで、同時接続ユーザー数が500人を超える環境でこのスタックを導入してきました。これはAAA(認証、承認、アカウンティング)を処理するための最も安定した方法の一つであり続けています。このガイドに従うことで、手動のオーバーヘッドを排除し、境界のセキュリティを強化するRADIUSサーバーを構築できます。
クイックスタート:5分で稼働させる
このセットアップではUbuntu 22.04 LTSを使用しますが、DebianやRHELベースのシステムにも同じ論理が適用されます。まずはコアサーバーと必須のテストスイートのインストールから始めましょう。
sudo apt update
sudo apt install freeradius freeradius-utils -y
FreeRADIUSはインストール後すぐに起動します。エンジンが正常に動作しているか確認するために、radtestを使用します。このユーティリティはログインリクエストをシミュレートするため、変更のたびに物理的なアクセスポイントまで走ってテストする必要がなくなります。デフォルトのインストールには「steve」というテストユーザーが含まれています。
# 構文: radtest [ユーザー名] [パスワード] [radiusサーバー] [nasポート] [共有シークレット]
radtest steve testing localhost 0 testing123
Access-Acceptというレスポンスが返ってくれば、サーバーは正常です。もしAccess-Rejectが表示される場合は、systemctl status freeradiusでサービスが実際に実行されているか再確認してください。
クライアントとローカルユーザーの設定
サービスが稼働したら、ハードウェアを承認する必要があります。RADIUSの世界では、CiscoのWLCやMikrotikのルーターなど、認証リクエストを送信するすべてのデバイスを「クライアント」と呼びます。
1. ネットワークアクセスサーバー(NAS)の定義
/etc/freeradius/3.0/clients.confを開きます。ここでハードウェアのIPをホワイトリストに登録し、共有シークレットを設定します。共有シークレットは、ルーターとサーバー間のパスワードのようなものだと考えてください。
client office_ap {
ipaddr = 192.168.1.50
secret = K7p$92mNx_qL2 # 強力なランダムな文字列を使用してください
shortname = office-wifi
}
secretは、Wi-FiコントローラーのRADIUS設定に入力したものと完全に一致している必要があります。一致しない場合、パケットは黙って破棄されます。
2. ローカルユーザーの管理
LDAPを使用する予定であっても、緊急時用のローカル管理者アカウントを保持しておくのは賢明な策です。これらは/etc/freeradius/3.0/usersで管理されます。ファイルの最上部にエントリを追加します。
"net_admin" Cleartext-Password := "secure_pass_2024"
Reply-Message = "コーポレートコアへの認証に成功しました"
変更を適用するには、必ずサービスを再起動してください:
sudo systemctl restart freeradius
スケールアップ:LDAPとの統合
ここから設定を拡張していきます。テキストファイルを手動で更新する代わりに、FreeRADIUSをディレクトリサービスにリンクさせます。これにより、ユーザーは標準のドメイン認証情報を使用してネットワークにアクセスできるようになります。
ステップ1:LDAPモジュールのインストール
FreeRADIUSはモジュール式です。LDAPサーバーと通信するための特定のライブラリが必要です。
sudo apt install freeradius-ldap -y
ステップ2:LDAPモジュールの設定
/etc/freeradius/3.0/mods-available/ldapを編集します。LDAPのURIを指定し、読み取り権限を持つサービスアカウントを提供する必要があります。
ldap {
server = "ldaps://ldap.example.com"
identity = "cn=radius-svc,dc=example,dc=com"
password = サービスアカウントのパスワード
base_dn = "dc=example,dc=com"
user {
base_dn = "ou=users,dc=example,dc=com"
filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
}
}
ステップ3:有効化とリンク
mods-enabledディレクトリへのシンボリックリンクを作成して、モジュールを有効にします。
sudo ln -s /etc/freeradius/3.0/mods-available/ldap /etc/freeradius/3.0/mods-enabled/
ステップ4:デフォルトサイトのロジックの更新
最後に、ログインフロー中にLDAPデータベースを確認するようFreeRADIUSに指示します。/etc/freeradius/3.0/sites-enabled/defaultを編集し、authorizeとauthenticateの両方のセクションにldapを追加します。
authorize {
# ... 他のモジュール ...
ldap
}
authenticate {
Auth-Type LDAP {
ldap
}
}
本番環境に向けた要塞化
本番環境でRADIUSを運用するには、単に機能する設定以上のものが必要です。最も必要な時に壊れないようにするための方法は以下の通りです。
デバッグモードの威力
標準のログは、複雑なLDAPの問題に対しては曖昧すぎることがよくあります。ユーザーが接続できない場合は、サービスを停止してデバッグモードで手動実行してください。
sudo systemctl stop freeradius
sudo freeradius -X
-Xフラグを使用すると、すべてのパケットをフレームごとに確認できます。LDAPルックアップが失敗した正確な瞬間や、証明書の不一致があるかどうかを確認できます。これは、トラブルシューティングにおいて最も重要なツールです。
セキュリティとレジリエンス
- 共有シークレット: これらはrootパスワードと同様に扱ってください。シークレットが漏洩すると、攻撃者がRADIUSサーバーを偽装できるようになります。少なくとも24文字以上を目指してください。
- ファイアウォール: RADIUSはUDP 1812および1813を使用します。特定のアクセスポイントのIP以外からのこれらのポートへのアクセスをブロックしてください。
- 暗号化:
ldaps://を使用してください。プレーンテキスト(ポート389)でLDAPクエリを送信すると、内部管理VLAN上の誰にでもユーザーパスワードが公開されてしまいます。 - 冗長性: RADIUSが停止すると、Wi-Fiも停止します。常に2つのノードをデプロイしてください。ほとんどのエンタープライズ向けAPでは、即時フェイルオーバーのためにプライマリとセカンダリのRADIUS IPを設定できます。
FreeRADIUSの設定ファイルの多さに、最初は圧倒されるかもしれません。しかし、クライアントからサーバー、そして最終的にデータベースへと至るフローを一度把握すれば、非常に予測可能なシステムになります。これは、現代のオフィスインフラを管理するエンジニアにとって不可欠なスキルです。

