手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 FreeRADIUS の基本設定 – EAP-TLS と clients.conf を整える

Ubuntu 26.04 サーバー管理ガイドへ戻る

Ubuntu 26.04 で FreeRADIUS を構成する場合、単に freeradius パッケージを入れるだけでは不十分です。RADIUS client、共有シークレット、EAP の方式、TLS 証明書、設定検証、ログ確認までを一つの流れとして見ます。

Ubuntu 26.04 で FreeRADIUS を使い、RADIUS client、共有シークレット、EAP-TLS、証明書、設定検証、サービス確認を整理します。ここでは Ansible で管理している構成を、手動で確認できる単位へ落として説明します。

FreeRADIUS で何を構成するのか

FreeRADIUS は、ネットワーク機器や無線 AP などから認証要求を受け、ユーザーや証明書に基づいて認証結果を返す RADIUS server です。Ubuntu 側では、誰からの要求を受けるのか、どの共有シークレットを使うのか、どの EAP 方式を使うのかを明確にします。

項目見るもの主なファイル
RADIUS clientAP やネットワーク機器の送信元 IP、shortname、NAS type/etc/freeradius/3.0/clients.conf
共有シークレットRADIUS client と server で一致させる secretclients.conf
認証方式EAP-TLS、EAP-TTLS、PEAP などの方式mods-available/eap
TLS 証明書server certificate、private key、CA certificatemods-available/eap
動作確認設定構文、サービス状態、UDP 1812 / 1813、ログfreeradius -XC / systemctl

この記事では、EAP-TLS を前提にします。実際の環境では、RADIUS client 側の設定、証明書配布、端末側の認証設定も必要になります。Ubuntu 側だけで完結する話ではないため、まず server 側の責務を切り分けて確認します。

現在の状態を確認する

最初に、FreeRADIUS が導入済みか、サービスが存在するか、UDP 1812 / 1813 を待ち受けているかを確認します。設定変更前に現在の状態を残しておくと、変更後の差分を見やすくなります。

dpkg -l | grep -E '^ii\s+freeradius'
systemctl status freeradius --no-pager
ss -lunp | grep -E ':1812|:1813' || true

1812/udp は RADIUS authentication、1813/udp は accounting で使われます。authentication だけを使う環境でも、どちらを待ち受けているのかは確認しておくと切り分けがしやすくなります。

パッケージを導入する

FreeRADIUS 本体とテスト用の utility を導入します。すでに構成済みの環境では、いきなり再インストールするのではなく、まずバージョンと現在の設定を確認します。

sudo apt update
sudo apt install freeradius freeradius-utils

パッケージ導入後は、サービスを有効化して起動します。設定ファイルを変更する前に、初期状態で起動できることを確認しておくと、後続の変更による問題を切り分けやすくなります。

sudo systemctl enable --now freeradius
systemctl status freeradius --no-pager

RADIUS client を定義する

RADIUS server は、どの client からの要求を受けるかを clients.conf で定義します。ここでは localhost と、AP 用のネットワークを例にします。共有シークレットは実運用では平文で公開しない値なので、記事では placeholder として示します。

sudo cp -a /etc/freeradius/3.0/clients.conf /etc/freeradius/3.0/clients.conf.bak.$(date +%Y%m%d%H%M%S)
sudo tee /etc/freeradius/3.0/clients.conf >/dev/null <<'EOF'
client localhost {
    ipaddr = 127.0.0.1
    secret = CHANGE_ME_LOCALHOST_SECRET
    shortname = localhost
}
client ap {
    ipaddr = 10.129.255.0/24
    proto = udp
    secret = CHANGE_ME_AP_SECRET
    shortname = ap
    nastype = cisco
    require_message_authenticator = yes
}
EOF
sudo chown freerad:freerad /etc/freeradius/3.0/clients.conf
sudo chmod 0640 /etc/freeradius/3.0/clients.conf

require_message_authenticator = yes は、RADIUS client 側の実装や設定との整合性を見ながら扱います。セキュリティ上は有効にしたい項目ですが、client 側が対応していない場合は認証が成立しません。

EAP-TLS を設定する

EAP-TLS を使う場合、FreeRADIUS は server certificate、private key、CA certificate を参照します。Ubuntu 側では、証明書ファイルの配置と mods-available/eap の設定を揃える必要があります。

sudo cp -a /etc/freeradius/3.0/mods-available/eap /etc/freeradius/3.0/mods-available/eap.bak.$(date +%Y%m%d%H%M%S)
sudo tee /etc/freeradius/3.0/mods-available/eap >/dev/null <<'EOF'
eap {
    default_eap_type = tls
    tls-config tls-common {
        private_key_file = /etc/ssl/private/radius.example.local.key
        certificate_file = /etc/ssl/certs/radius.example.local.crt
        ca_file = /usr/local/share/ca-certificates/internal-ca.crt
        tls_min_version = "1.2"
        tls_max_version = "1.3"
        cipher_list = "HIGH:!aNULL"
        cipher_server_preference = yes
        ecdh_curve = "X25519:P-256:P-384"
    }
    tls {
        tls = tls-common
    }
}
EOF
sudo chown freerad:freerad /etc/freeradius/3.0/mods-available/eap
sudo chmod 0640 /etc/freeradius/3.0/mods-available/eap
sudo ln -sfn ../mods-available/eap /etc/freeradius/3.0/mods-enabled/eap

証明書のパスは環境に合わせて変更します。重要なのは、FreeRADIUS の設定だけでなく、秘密鍵を freerad ユーザーが読めること、CA certificate が client 側と一致していること、server certificate の CN / SAN が設計と合っていることです。

authorize ファイルの扱い

EAP-TLS を中心にする場合でも、mods-config/files/authorize の扱いを確認しておきます。ローカルユーザーや固定ユーザーを使わない構成では、空または最小構成にしておくことがあります。

sudo cp -a /etc/freeradius/3.0/mods-config/files/authorize /etc/freeradius/3.0/mods-config/files/authorize.bak.$(date +%Y%m%d%H%M%S)
sudo tee /etc/freeradius/3.0/mods-config/files/authorize >/dev/null <<'EOF'
EOF
sudo chown freerad:freerad /etc/freeradius/3.0/mods-config/files/authorize
sudo chmod 0640 /etc/freeradius/3.0/mods-config/files/authorize

ユーザー名とパスワードで簡易テストする構成と、証明書認証を前提にする構成では、確認方法が変わります。EAP-TLS を前提にするなら、radtest だけで本番相当の認証確認をしたことにはなりません。

設定を検証してサービスを再起動する

FreeRADIUS は、設定を反映する前に freeradius -XC で構文と読み込み状態を確認できます。ここで失敗する場合は、サービスを再起動する前に設定ファイル、証明書パス、権限を見直します。

sudo freeradius -XC
sudo systemctl restart freeradius
systemctl status freeradius --no-pager
ss -lunp | grep -E ':1812|:1813' || true

freeradius -XC は、設定ファイルに secret や証明書パスが含まれるため、ログや画面共有で不用意に公開しないようにします。実運用では、設定検証の結果を残す場合も秘匿情報の扱いに注意します。

ログで切り分ける

RADIUS 認証が失敗した場合、server 側、client 側、証明書、時刻、ネットワーク到達性のどこで失敗しているかを切り分けます。まず Ubuntu 側では journal と UDP 待受を確認します。

journalctl -u freeradius --since today --no-pager
ss -lunp | grep -E ':1812|:1813' || true
sudo tail -n 100 /var/log/freeradius/radius.log 2>/dev/null || true

EAP-TLS の失敗は、単純なパスワード不一致ではなく、CA certificate、server certificate、client certificate、SAN、時刻ずれ、client 側の trust 設定が関係します。RADIUS server が起動していることと、端末が認証できることは別なので、層を分けて確認します。

再起動後に確認する

FreeRADIUS の設定は、再起動後に同じ状態で戻ることが重要です。手動で一時的に起動できた状態と、systemd によって継続的に起動できる状態を分けて確認します。

sudo reboot
systemctl status freeradius --no-pager
ss -lunp | grep -E ':1812|:1813' || true
sudo freeradius -XC

再起動後に失敗する場合は、証明書ファイルの mount、秘密鍵の権限、systemd 起動時のファイル参照、名前解決、時刻同期を確認します。RADIUS は認証基盤なので、OS 起動直後に依存するものが揃っているかを見ることが重要です。

運用上の注意点

FreeRADIUS の運用では、共有シークレット、証明書、client 定義、ログの扱いを分けて管理します。特に共有シークレットは、設定例として記事に書ける値と、実環境で使う値を混同してはいけません。

観点確認内容
共有シークレットRADIUS client と server で一致しているか。公開リポジトリや記事に実値を出していないか。
EAP-TLSserver certificate、client certificate、CA certificate、時刻同期が揃っているか。
client 定義AP やネットワーク機器の送信元 IP と clients.conf の定義が一致しているか。
通信経路UDP 1812 / 1813 が必要な範囲だけ許可されているか。
ログ認証失敗の理由を追えるが、認証情報を不用意に公開しない運用になっているか。

参考書籍

参考
書籍
参考書籍
認証と認可 Keycloak 入門 第2版

認証、認可、SSO、OAuth、OpenID Connect など、認証基盤の考え方を確認したい場合の参考書籍です。FreeRADIUS のような認証基盤を扱う前提整理にも役立ちます。

Amazon で見る
このリンクは Amazon アソシエイトリンクです。

関連する記事

関連する記事

Ubuntu 26.04 サーバー管理ガイドへ戻る

Ubuntu 26.04 FreeRADIUS の基本設定 – EAP-TLS と clients.conf を整える

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る