freeradiusを用いてradius認証サーバを構築する手順を紹介します。FreeRADIUSは、オープンソースのRADIUSサーバーとして広く利用されています。しかし、その多機能さと設定の複雑さから、初心者にはハードルが高く感じられることもあります。この記事では、FreeRADIUSの基本設定から動作確認まで、ステップバイステップで丁寧に解説します。ネットワーク認証の基礎をしっかりと押さえ、効率的で安全な環境を構築するための知識を身につけましょう。
freeradiusのインストール
freeradiusをインストールします。パッケージをダウンロードしてきて展開する手順が良く紹介されていますが、ここではdnfによるインストールを実施します。確認用のツール等も必要になりますので、freeradius-utilsも併せてインストールしておきます。
# dnf install freeradius freeradius-utils
証明書関連の設定
freeradiusには証明書作成のためのファイルが用意されています。
まずroot証明書を作成します。
# vi /etc/raddb/cert/ca.cnf
変更する部分は、有効期限の部分で、途中で切れて動かなくなるのも面倒ですので、サーバのOSサポート期間分ぐらいの長い有効期限を設定します。ここでは、3650(365日×10年)を設定します。
[ CA_default ]
default_days = 3650
次のコマンド(make)を実行して、root証明書を作成します。
# make ca.pem
次にサーバ証明書を作成します。
# vi server.cnf
こちらも同様に、有効期限だけを変更しておきます。
[ CA_default ]
default_days = 3650
次のコマンドを実行して、サーバ証明書を作成します。
# make server.pem
証明書回りの作成はここでいったん終了です。ディレクトリに ca.key、ca.pem、server.key、server.pemができていることを確認します。もしクライアント証明書を作成したい場合は、client.cnfファイルを編集して、make client.pemとすれば作成可能です。
/etc/raddb/mods-available/eap ファイル
次に、eapに関する設定を行います。eap ディレクティブの default_eap_type パラメーターを ttls に変更します。
eap {
...
default_eap_type = ttls
...
}
また、安全でない EAP-MD5 と EAP-leap認証方式を無効にします。ttlsでデフォルトで指定されているmd5もmschapv2に変更しておきます。
eap {
...
# md5 {
# }
...
#leap {
#}
...
}
...
ttls {
...
default_eap_type = mschapv2
...
}
/etc/raddb/radiusd.conf ファイル
認証ログを出力するために、authのパラメータをyesにします。
auth = yes
/etc/raddb/clients.conf ファイル
RADIUS クライアントが FreeRADIUS サービスにアクセスできる必要がある場合は、それらに対応するクライアントディレクティブを追加します。ここでは変更しませんが、セキュリティ対策の為、localhostのデフォルトのパスワードも変更しておくと良いでしょう。
client client.hogehoge.com {
ipaddr = 192.168.0.100/32
secret = クライアントパスワード
}
/etc/raddb/users ファイル
デフォルトでいろいろ記載がありますが、全部削除しておきます。
#vi /etc/raddb/users
そのうえで、EAP-TTLS または EAP-PEAP を使用する場合は、ユーザーをこのファイルに追加します。
test-user001 Cleartext-Password := "P@ssword123"
もしユーザーを追加する必要がなければ、このファイルはNULLでOKです。また証明書ベースの認証 (EAP-TLS) を使用する必要があるユーザーの場合、ここでユーザを追加する必要はありません。
その他設定
Diffie-Hellman (DH) パラメーターを持つ /etc/raddb/certs/dh が存在しない場合は、作成します。
たとえば、2048 ビットの素数を持つ DH ファイルを作成するには、次のように入力します。(セキュリティー上の理由から、素数が 2048 ビット未満の DH ファイルは使用しない方が良いです)
# openssl dhparam -out /etc/raddb/certs/dh 2048
次に、TLS 秘密鍵、サーバー証明書、CA 証明書、および DH パラメーターを使用したファイルに適切な権限を設定します。
# chmod 640 /etc/raddb/certs/server.key /etc/raddb/certs/server.pem /etc/raddb/certs/ca.pem /etc/raddb/certs/dh
# chown root:radiusd /etc/raddb/certs/server.key /etc/raddb/certs/server.pem /etc/raddb/certs/ca.pem /etc/raddb/certs/dh
Radius認証の動作確認
まず設定ファイルに問題がないか確認します。
# radiusd -XC
こちらで問題が無ければ、まずはローカルからの動作確認を実施します。次のコマンドを実行して、デバッグモードでサービスを開始します。
# radiusd -X
以下のコマンドを実行して、動作を確認します。コマンドの構文は、
radtest [-t pap/chap/mschap] <ユーザー名> <パスワード> <radiusサーバ><ポート><共有鍵>
になります。
# radtest -t pap test-user001 P@ssword123 localhost 0 testing123
“Received Access-Accept” と表示されていれば接続テストは成功です。
-tオプションを変更することでpap/chap/mschapそれぞれ試験することができます。
次に、リモートからの動作確認を実施します。ここでは、リモート=radiusクライアントもlinuxサーバで、clinet.confに記載されているものとします。radiusクライアント側から以下のコマンドを実行します。
# radtest -t pap test-user001 P@ssword123 192.168.0.2 0 クライアントパスワード
最後に、peap-mschapの動作確認を行います。
まず、peap-mschapv2-test.conf として以下の内容のファイルを作成します。ファイル名は任意です。
network={
key_mgmt=WPA-EAP
eap=PEAP
identity="test-user001"
password="password123"
phase2="autheap=MSCHAPV2"
ca_cert="ca.pem"
}
このファイルを指定した次のコマンドを実行します。大量にログが出力されますが、最後にSUCCESSと表示されれば認証成功です。
# eapol_test -a 192.168.0.2 -c peap-mschapv2-test.conf -s クライアントパスワード
動作確認して問題がなければ、サービスの自動起動の設定を忘れずに実施しておきます。
# systemctl enable radiusd
# systemctl start radiusd
参考
参考までに、radiusサーバのfirewalldは以下の通り開けておきます。firewalldの詳細の設定については、こちらを参照してください。
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" port protocol="udp" port="1812" accept"
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" port protocol="udp" port="1813" accept"
# firewall-cmd --reload
また、本サイトの内容は、以下のredhatのサイトを参考にさせて頂いております。
今回はここまでです。最後までお読みいただきありがとうございました。