FreeRADIUSの構築
概要
世の中にはさまざまな認証方法がありますが、今回はRADIUS (Remote Authentication Dial In User Service)プロトコルを使用するFreeRADIUSについてご紹介したいと思います。
RADIUSは主にネットワークアクセスを制御するための認証プロトコルとして利用されており、主にAuthentication(認証)・Authorization(認可)・Accounting(会計)の3つの機能を提供しており、AAAプロトコルとも呼ばれます。
Authentication(認証)
ユーザが入力した認証情報とサーバに登録されている認証情報を照合し、ユーザを検証すること。
Authorization(認可)
「Authentication(認証)」時に入手したユーザの情報をもとに、そのユーザに対してどのような権限を与えるかを決定すること。
Accounting(会計)
ユーザがネットワークを利用している際の使用されたシステム時間や送信されたデータ量などといった消費したリソースに関する情報を記録すること。
構築
ではそんなRADIUSプロトコルを実装しているFreeRADIUSの構築を行っていきたいと思います。
今回はコミュニティが提供する公式リポジトリからパッケージのインストールを行います。
# rpm --import 'https://packages.inkbridgenetworks.com/pgp/packages.networkradius.com.asc'
# cat <<'EOF' >/etc/yum.repos.d/networkradius.repo
[networkradius]
name=NetworkRADIUS-$releasever
baseurl=http://packages.inkbridgenetworks.com/freeradius-3.2/rocky/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://packages.inkbridgenetworks.com/pgp/packages.networkradius.com.asc
EOF
# ls /etc/yum.repos.d/
almalinux-appstream.repo almalinux-plus.repo
almalinux-baseos.repo almalinux-resilientstorage.repo
almalinux-crb.repo almalinux-rt.repo
almalinux-extras.repo almalinux-sap.repo
almalinux-highavailability.repo almalinux-saphana.repo
almalinux-nfv.repo networkradius.repo
# dnf install freeradius freeradius-utils
# rpm -qa | grep radius
freeradius-config-3.2.7-1.el9.x86_64
freeradius-3.2.7-1.el9.x86_64
FreeRADIUSのインストールが完了したので、デバッグモードで起動してみます。
# 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 51548
Listening on proxy address :: port 58611
Ready to process requests
「Ready to process requests」と出力されたので起動成功です。
次にBasic認証を行ってみます。まずは特に設定をいれないデフォルトでの動作を確認します。
尚、「radtest」コマンドは引数で以下のような情報をRADIUSサーバに送っています。
ユーザ名 | testing |
ユーザのパスワード | password |
接続先RADIUSサーバのIPアドレス | 127.0.0.1 |
NASのポート番号 (TCPやUDPのポート番号ではない) | 0 |
NASのパスワード | testing123 |
NASとはNetwork Access Serverのことであり、RADIUSクライアントを指します。
ユーザがネットワークへのアクセスを試みる際にはこのNASがユーザとRADIUSサーバの間で認証情報のやりとりを仲介する役割を担っており、ネットワークスイッチや無線アクセスポイントなどが該当します。
FreeRADIUSのドキュメントではRADIUSサーバとの混同を防ぐため基本的にNASと表記されています。
# radtest testing password 127.0.0.1 0 testing123
Sent Access-Request Id 84 from 0.0.0.0:35369 to 127.0.0.1:1812 length 77
User-Name = "testing"
User-Password = "password"
NAS-IP-Address = 10.15.1.15
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "password"
Received Access-Reject Id 84 from 127.0.0.1:1812 to 127.0.0.1:35369 length 38
Message-Authenticator = 0x1edfbdbd2a661cd22dee99d2b8d49102
(0) -: Expected Access-Accept got Access-Reject
今回はユーザ情報が登録されていないため「Access-Reject」と出力され、認証されていないことがわかります。
では次に、ユーザ情報の設定ファイルである「/etc/raddb/users」を編集しテスト用のユーザ情報をサーバに追加します。
# ls -l /etc/raddb
合計 160
-rw-r----- 1 root radiusd 20754 1月 31 21:36 README.rst
drwxrwx--- 3 root radiusd 4096 4月 29 19:18 certs
-rw-r----- 1 root radiusd 12167 4月 29 19:32 clients.conf
-rw-r----- 1 root radiusd 12103 1月 31 21:36 clients.conf.org
-rw-r--r-- 1 root radiusd 1420 1月 31 21:36 dictionary
lrwxrwxrwx 1 root radiusd 30 1月 31 21:36 hints -> ./mods-config/preprocess/hints
lrwxrwxrwx 1 root radiusd 35 1月 31 21:36 huntgroups -> ./mods-config/preprocess/huntgroups
drwxr-x--- 2 root radiusd 4096 4月 29 19:16 mods-available
drwxr-x--- 10 root radiusd 140 4月 29 19:16 mods-config
drwxr-x--- 2 root radiusd 4096 4月 29 19:16 mods-enabled
-rw-r----- 1 root radiusd 52 1月 31 21:36 panic.gdb
drwxr-x--- 2 root radiusd 205 4月 29 19:16 policy.d
-rw-r----- 1 root radiusd 30442 1月 31 21:36 proxy.conf
-rw-r----- 1 root radiusd 40953 1月 31 21:36 radiusd.conf
drwxr-x--- 2 root radiusd 4096 4月 29 19:16 sites-available
drwxr-x--- 2 root radiusd 41 4月 29 19:16 sites-enabled
-rw-r----- 1 root radiusd 3470 1月 31 21:36 templates.conf
-rw-r----- 1 root radiusd 8536 1月 31 21:36 trigger.conf
lrwxrwxrwx 1 root radiusd 29 1月 31 21:36 users -> ./mods-config/files/authorize
「/etc/raddb/users」ファイルは「/etc/raddb/mods-config/files/authorize」のシンボリックリンクであるため、バックアップを作成し編集します。
# cp -p /etc/raddb/mods-config/files/authorize /etc/raddb/mods-config/files/authorize.org
# ls -l /etc/raddb/mods-config/files
合計 32
-rw-r----- 1 root radiusd 836 1月 31 21:36 accounting
-rw-r----- 1 root radiusd 6594 1月 31 21:36 authorize
-rw-r----- 1 root radiusd 6594 1月 31 21:36 authorize.org
-rw-r----- 1 root radiusd 5225 1月 31 21:36 dhcp
-rw-r----- 1 root radiusd 1030 1月 31 21:36 pre-proxy
# cd /etc/raddb
# vi users
# diff -u /etc/raddb/mods-config/files/authorize.org /etc/raddb/mods-config/files/authorize
--- /etc/raddb/mods-config/files/authorize.org 2025-01-31 21:36:52.000000000 +0900
+++ /etc/raddb/mods-config/files/authorize 2025-04-29 19:27:22.683663065 +0900
@@ -1,3 +1,5 @@
+testing Cleartext-Password := "password"
+
#
# Configuration file for the rlm_files module.
# Please see rlm_files(5) manpage for more information.
一旦テスト用にユーザ名が「testing」、パスワードが「password」となるように設定しました。
では先ほど起動したradiusdを再起動し、認証を試してみます。
# radtest testing password 127.0.0.1 0 testing123
Sent Access-Request Id 137 from 0.0.0.0:39074 to 127.0.0.1:1812 length 77
User-Name = "testing"
User-Password = "password"
NAS-IP-Address = 10.15.1.15
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "password"
Received Access-Accept Id 137 from 127.0.0.1:1812 to 127.0.0.1:39074 length 38
Message-Authenticator = 0xba025385982ca38a35ca5e414345972f
「Received Access-Accept」と出力され、認証されることを確認できました。
続いてRADIUSクライアントの設定と検証を行っていきます。
それではまずクライアント情報を登録していない状況で認証をしてみます。
※プライベートIPを指定することで、接続元のIPが127.0.0.1ではなくなります。
# radtest testing password 10.15.1.15 0 testing123
Sent Access-Request Id 165 from 0.0.0.0:58490 to 10.15.1.15:1812 length 77
User-Name = "testing"
User-Password = "password"
NAS-IP-Address = 10.15.1.15
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "password"
Sent Access-Request Id 165 from 0.0.0.0:58490 to 10.15.1.15:1812 length 77
User-Name = "testing"
User-Password = "password"
NAS-IP-Address = 10.15.1.15
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "password"
Sent Access-Request Id 165 from 0.0.0.0:58490 to 10.15.1.15:1812 length 77
User-Name = "testing"
User-Password = "password"
NAS-IP-Address = 10.15.1.15
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "password"
(0) No reply from server for ID 165 socket 3
Ignoring request to auth address * port 1812 bound to server default from unknown client 10.15.1.15 port 58490 proto udp
このままでは上記のように認証が通りません。
ではクライアントの設定ファイルである「/etc/raddb/clients.conf」を編集しクライアント情報を追加します。
# cp -p clients.conf clients.conf.org
# ls -l
合計 160
-rw-r----- 1 root radiusd 20754 1月 31 21:36 README.rst
drwxrwx--- 3 root radiusd 4096 4月 29 19:18 certs
-rw-r----- 1 root radiusd 12103 1月 31 21:36 clients.conf
-rw-r----- 1 root radiusd 12103 1月 31 21:36 clients.conf.org
-rw-r--r-- 1 root radiusd 1420 1月 31 21:36 dictionary
lrwxrwxrwx 1 root radiusd 30 1月 31 21:36 hints -> ./mods-config/preprocess/hints
lrwxrwxrwx 1 root radiusd 35 1月 31 21:36 huntgroups -> ./mods-config/preprocess/huntgroups
drwxr-x--- 2 root radiusd 4096 4月 29 19:16 mods-available
drwxr-x--- 10 root radiusd 140 4月 29 19:16 mods-config
drwxr-x--- 2 root radiusd 4096 4月 29 19:16 mods-enabled
-rw-r----- 1 root radiusd 52 1月 31 21:36 panic.gdb
drwxr-x--- 2 root radiusd 205 4月 29 19:16 policy.d
-rw-r----- 1 root radiusd 30442 1月 31 21:36 proxy.conf
-rw-r----- 1 root radiusd 40953 1月 31 21:36 radiusd.conf
drwxr-x--- 2 root radiusd 4096 4月 29 19:16 sites-available
drwxr-x--- 2 root radiusd 41 4月 29 19:16 sites-enabled
-rw-r----- 1 root radiusd 3470 1月 31 21:36 templates.conf
-rw-r----- 1 root radiusd 8536 1月 31 21:36 trigger.conf
lrwxrwxrwx 1 root radiusd 29 1月 31 21:36 users -> ./mods-config/files/authorize
# diff -u clients.conf.org clients.conf
--- clients.conf.org 2025-01-31 21:36:50.000000000 +0900
+++ clients.conf 2025-04-29 19:32:52.939676607 +0900
@@ -383,3 +383,8 @@
# secret = testing123
# }
#}
+
+client new {
+ ipaddr = 10.15.1.15
+ secret = testing123
+}
ではradiusdを再起動し、認証を試してみます。
# radtest testing password 10.15.1.15 0 testing123
Sent Access-Request Id 182 from 0.0.0.0:37616 to 10.15.1.15:1812 length 77
User-Name = "testing"
User-Password = "password"
NAS-IP-Address = 10.15.1.15
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "password"
Received Access-Accept Id 182 from 10.15.1.15:1812 to 10.15.1.15:37616 length 38
Message-Authenticator = 0xe50c22f3b1ffb3cf337bdee0020972a7
「Received Access-Accept」と出力され認証されることを確認できました。
まとめ
ここまでで、FreeRADIUSのみを利用した簡単認証を試してみました。
次回以降はLDAPなどと連携させた場合の動作を確認していきたいと思います。
お問い合わせ
弊社では様々なサービスを取り扱っております。
詳細はサービス一覧からご覧ください。
お気軽にお問い合わせください。応対時間 9:30-17:30 [ 土・日・祝日除く ]
お問い合わせ