【FreeRADIUS講座 第3回】脱・テキスト管理!MariaDB(MySQL)連携によるユーザー管理完全ガイド

「100人分のユーザー追加」を、手作業でやりますか?

こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回は、設定ファイル(users)に直接ユーザー情報を書き込んで認証させる方法を学びました。

しかし、社員が10人、20人と増えてくると、テキストファイルでの管理には限界が来ます。
「来月入社する50人分のアカウントを作って!」「退職した〇〇さんと××さんだけ削除して!」
こんな依頼が来るたびに、間違って他の行を消さないよう震えながらファイルを編集するのは、エンジニアの仕事ではありません。

コウ君

先生、まさにそれを心配してました!
テキストファイルだと検索もしづらいし、重複して登録しちゃいそうです。
Webサービスみたいに、データベースでパパっと管理できないんですか?

リナックス先生

もちろんできるわ。
FreeRADIUSは標準で「SQLモジュール」を持っていて、MariaDB(MySQL)やPostgreSQLと連携できるの。
これを使えば、SQLコマンド一発で大量追加も削除も自由自在。
さらに、誰がいつ接続したかという「ログ(アカウンティング情報)」もDBに保存できるから、集計も楽になるわよ!

本記事では、AlmaLinux 9にMariaDBを導入し、FreeRADIUSと連携させる手順を完全解説します。
単に繋ぐだけでなく、認証に使われる「テーブルの構造」まで深く理解して、自在にユーザー管理ができるようになりましょう。

🔐 FreeRADIUS完全攻略講座(バックナンバー)


第1章:MariaDBのインストールと初期設定

まずは、データベースサーバーであるMariaDBをインストールします。
AlmaLinux 9では、MySQLの完全互換であるMariaDBが標準採用されています。

1. インストールと起動

# インストール
sudo dnf install mariadb-server mariadb -y

# 起動と自動起動設定
sudo systemctl start mariadb
sudo systemctl enable mariadb

# ステータス確認
sudo systemctl status mariadb

Active: active (running) と表示されればOKです。

2. セキュリティ初期設定

インストール直後はrootパスワードが設定されておらず危険なので、初期設定ツールを実行します。

sudo mysql_secure_installation

対話形式で質問されます。以下のように回答してください。

  • Enter current password for root (enter for none): [Enter] (初期は空)
  • Switch to unix_socket authentication [Y/n] n
  • Change the root password? [Y/n] Y新しいrootパスワードを設定
  • Remove anonymous users? [Y/n] Y (匿名ユーザー削除)
  • Disallow root login remotely? [Y/n] Y (リモートroot禁止)
  • Remove test database and access to it? [Y/n] Y (テストDB削除)
  • Reload privilege tables now? [Y/n] Y

第2章:RADIUS用データベースの作成

次に、FreeRADIUSが使用する専用のデータベースと、接続用ユーザーを作成します。

1. データベースへの接続

mysql -u root -p
# 先ほど設定したパスワードを入力

2. DBとユーザーの作成

SQLプロンプト(MariaDB [(none)]>)で以下のコマンドを実行します。
ここでは例として以下の設定にします。

  • データベース名: radius
  • ユーザー名: radius
  • パスワード: radpass (※本番では複雑なものにしてください)
-- データベース作成
CREATE DATABASE radius CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- ユーザー作成と権限付与
CREATE USER 'radius'@'localhost' IDENTIFIED BY 'radpass';
GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost';
FLUSH PRIVILEGES;

-- 確認して終了
SHOW DATABASES;
EXIT;

第3章:FreeRADIUSのSQLモジュール導入とスキーマ投入

ここからがFreeRADIUS側の設定です。
デフォルトのインストールでは、SQL連携機能は入っていますが、「MySQL用ドライバ」が入っていない場合があります。

1. 必須パッケージのインストール

freeradius-mysql パッケージを必ずインストールしてください。
これを忘れると、設定しても「driver not found」エラーで起動しません。

sudo dnf install freeradius-mysql -y

2. テーブル定義(Schema)のインポート

FreeRADIUSは、「どんなテーブル構造が必要か」というSQLファイル(スキーマ)をあらかじめ用意してくれています。
これをMariaDBに流し込みます。

AlmaLinux 9 (FreeRADIUS 3.0) の場合、スキーマファイルは以下の場所にあります。

/etc/raddb/mods-config/sql/main/mysql/schema.sql

これをインポートします。

# radiusデータベースにスキーマを流し込む
mysql -u radius -p radius < /etc/raddb/mods-config/sql/main/mysql/schema.sql
# パスワード入力 (radpass)

3. 作成されたテーブルの確認

正しくテーブルが作られたか確認してみましょう。

mysql -u radius -p -e "USE radius; SHOW TABLES;"

以下のようなテーブル一覧が表示されれば成功です。

+------------------+
| Tables_in_radius |
+------------------+
| nas              |
| radacct          |
| radcheck         |
| radgroupcheck    |
| radgroupreply    |
| radpostauth      |
| radreply         |
| radusergroup     |
+------------------+

📖 覚えておくべき3つの主要テーブル
これだけ知っていれば運用できます。

  1. radcheck:ユーザーIDとパスワード(認証情報)を格納するテーブル。
  2. radreply:認証成功時にルーターへ返す属性(VLAN IDなど)を格納するテーブル。
  3. radacct:誰がいつ接続したかの履歴(ログ)が溜まっていくテーブル。

第4章:FreeRADIUSの設定(SQL連携の有効化)

DBの準備は整いました。次はFreeRADIUSに「DBを使ってね」と教えてあげます。
設定は2ステップです。

ステップ1:SQLモジュールの設定

/etc/raddb/mods-available/sql を編集して、DB接続情報を書き込みます。

sudo nano /etc/raddb/mods-available/sql

sql { ... } ブロック内の以下の箇所を探して変更します。

sql {
    # データベースドライバ (mysqlを指定)
    driver = "rlm_sql_mysql"
    
    # 接続設定
    dialect = "mysql"

    # Connection info:
    server = "localhost"
    port = 3306
    login = "radius"      # DBユーザー名
    password = "radpass"  # DBパスワード

    # Database table configuration
    radius_db = "radius"  # データベース名
    
    # ... (中略) ...
    
    # 以下の行のコメントアウト(#)を外す必要がある場合があります(バージョンによる)
    read_clients = yes
    client_table = "nas"
}

※最近のバージョンでは driver = "rlm_sql_mysql" は自動判別されることが多いですが、明示しておくと安心です。

ステップ2:SQLモジュールの有効化(シンボリックリンク)

編集した設定ファイルを有効にするために、mods-enabled ディレクトリにリンクを貼ります。

sudo ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/sql

※すでにリンクがある場合は不要です。ls -l /etc/raddb/mods-enabled/sql で確認してください。

ステップ3:サイト設定(default)の編集

ここが一番の落とし穴です。
モジュールを有効にしただけでは使われません。「認証フローの中でSQLを使ってね」と指示する必要があります。

/etc/raddb/sites-enabled/default を編集します。

sudo nano /etc/raddb/sites-enabled/default

以下のセクションを探し、-sql または sql のコメントアウト(#)を外します。

1. authorize セクション(認証前処理)

authorize {
    ...
    # filter_username
    preprocess
    # chap
    # mschap
    digest
    # suffix
    # eap
    
    # ↓ここのコメントを外す(SQLでユーザー検索するため)
    sql
    ...
}

2. accounting セクション(ログ保存)

accounting {
    ...
    # ↓ここのコメントを外す(SQLにログを保存するため)
    sql
    ...
}

3. session セクション(同時接続数制限など)

session {
    ...
    # ↓ここのコメントを外す
    sql
    ...
}

編集が終わったら、ファイルの所有権を修正しておきます。

sudo chgrp -R radiusd /etc/raddb

第5章:ユーザーの追加と接続テスト

いよいよ、SQLコマンドを使ってユーザーを追加します。
もうテキストファイルをいじる必要はありません!

1. ユーザーの追加(SQL INSERT)

radcheck テーブルにデータを入れます。
ユーザー名: sqluser、パスワード: sqlpass を追加する例です。

mysql -u radius -p radius
INSERT INTO radcheck (username, attribute, op, value) VALUES ('sqluser', 'Cleartext-Password', ':=', 'sqlpass');

-- 確認
SELECT * FROM radcheck;

これで登録完了です。

2. デバッグモードで起動

設定が正しいか、いつものデバッグモードで確認します。

sudo systemctl stop radiusd
sudo radiusd -X

起動ログの中に rlm_sql (sql): Driver rlm_sql_mysqlAttempting to connect to rlm_sql_mysql #0 といった表示があり、エラーなく起動すれば成功です。

3. radtestで接続確認

別ターミナルからテストします。

radtest sqluser sqlpass localhost 1812 testing123

実行結果:

Received Access-Accept ...

成功です!
デバッグ画面を見ると、FreeRADIUSが自動的に SELECT * FROM radcheck WHERE username = 'sqluser' ... というSQLを発行している様子が見えるはずです。


第6章:トラブルシューティング

Q1. "Could not link driver rlm_sql_mysql" エラーが出る

原因: freeradius-mysql パッケージがインストールされていません。
対策: 第3章に戻って dnf install してください。

Q2. "Access-Reject" になる(ユーザーはDBにいるのに)

原因: sites-enabled/defaultauthorize セクションで sql が有効になっていない可能性があります。
または、files モジュール(usersファイル)が先に評価され、そこで拒否されている可能性もあります。
デバッグログ(radiusd -X)を見て、どのモジュールが処理しているか確認してください。

Q3. "Connection refused"(DB接続エラー)

原因: MariaDBが起動していない、またはパスワード間違い。
対策: mods-available/sqlloginpassword が正しいか、MariaDBでそのユーザーが許可されているか確認してください。


まとめ:DB連携で管理効率は100倍になる

お疲れ様でした!
これで、あなたのFreeRADIUSはデータベースと連携し、数千、数万のユーザーでも軽々と捌けるようになりました。

今回の重要ポイント:

  • freeradius-mysql パッケージが必須。
  • テーブルスキーマは schema.sql をインポートするだけ。
  • 認証情報は radcheck テーブルに入れる。
  • sites-enabled/defaultsql を有効にすることを忘れない。

さて、DB連携はできましたが、黒い画面(CUI)でSQLを打ってユーザー管理をするのは、やっぱり少し面倒ですよね?
「もっとスマホ感覚で、Webブラウザからポチポチ管理したい!」と思いませんか?

次回、第4回は「Web GUIで楽々管理!daloRADIUSの導入と設定」です。
今回構築したDB環境の上に、使いやすいWeb管理画面を被せて、誰でも簡単にユーザー追加ができる環境を作ります。
これで運用は劇的に楽になりますよ。お楽しみに!

▼ エンジニアとしてのキャリアを加速させる ▼

DB連携RADIUSを構築
「VPS」で自分専用環境

おすすめVPSを見る

サーバー知識を年収に
「ITエンジニア転職」

転職エージェントを見る

コメント