【CentOS8】ActiveDirectory+GoogleAuthenticatorなRADIUSサーバを立てる
Windows Server でもRADIUSサーバは作れるようなんですが、Google Authenticator は Windows Server に対応していないみたいですよね(´・ω・`)
NPS を RADIUS サーバーとして計画する | Microsoft Docs
そのためGoogle Authenticator を利用するRADIUSサーバをLinuxで組んでみます。
前回の記事で扱ったActiveDirectoryのユーザ情報を利用する方法も組み合わせてみます。
構成&前提
- OS: CentOS8(1911)
- ドメインコントローラ: Windows Server 2019(評価版)
- ドメイン名: test.com
- 動作確認用として適当なユーザ(user1)を作っておきましょう
手順
インストール
$ sudo yum install -y freeradius freeradius-utils $ radiusd -v radiusd: FreeRADIUS Version 3.0.17, for host x86_64-redhat-linux-gnu FreeRADIUS Version 3.0.17 Copyright (C) 1999-2017 The FreeRADIUS server project and contributors There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE You may redistribute copies of FreeRADIUS under the terms of the GNU General Public License For more information about these matters, see the file named COPYRIGHT
設定変更
radiusd
には各ユーザのホームディレクトリにあるファイルを参照・変更してもらう必要があるので、実行ユーザをrootに変更します。
また認証ログを出力するようにします。
# 以下の通り変更します $ sudo vi /etc/raddb/radiusd.conf 304c304 < auth = no --- > auth = yes 312,313c312,313 < auth_badpass = no < auth_goodpass = no --- > auth_badpass = yes > auth_goodpass = yes 400,401c400,401 < user = radiusd < group = radiusd --- > user = root > group = root
PAMモジュールを有効化します。
# 設定ファイルの確認 $ sudo ls -l /etc/raddb/sites-enabled/ 合計 0 lrwxrwxrwx. 1 root radiusd 26 11月 14 06:51 default -> ../sites-available/default lrwxrwxrwx. 1 root radiusd 31 11月 14 06:51 inner-tunnel -> ../sites-available/inner-tunnel # 実体は/etc/raddb/sites-available/default # 以下の通り変更します $ sudo vi /etc/raddb/sites-available/default 513c513 < # pam --- > pam # 使用可能なモジュールにPAMを追加 $ sudo ln -s /etc/raddb/mods-available/pam /etc/raddb/mods-enabled/pam # 所有権を既存のSymlinkに合わせる $ sudo chown -h root:radiusd /etc/raddb/mods-enabled/pam
認証方式を設定します。
# 以下を追記します $ sudo vi /etc/raddb/users DEFAULT Auth-Type := PAM
RADIUSを利用するクライアントを定義します。
# 以下を追記します $ sudo vi /etc/raddb/clients.conf client my_devices { ipaddr = 192.168.0.0/16 secret = hogehogehoge require_message_authenticator = no nas_type = other }
RADIUSの認証には Google Authenticator のみ使用するように変更します。
# ファイルの内容を以下の通りに変更します $ sudo vi /etc/pam.d/radiusd #%PAM-1.0 auth requisite pam_google_authenticator.so account required pam_permit.so session required pam_permit.so
$ sudo firewall-cmd --permanent --zone=public --add-service=radius $ sudo firewall-cmd --reload
サービスを開始します。
$ sudo systemctl start radiusd $ sudo systemctl enable radiusd
動作確認
事前にドメインユーザ(user1@test.com)としてRADIUSサーバにログインし、google-authnticator
コマンドを実行しておきます。
# ローカルで認証させてみる $ radtest user1@test.com <6桁のコード> localhost 0 testing123 Sent Access-Request Id 1 from 0.0.0.0:33629 to 127.0.0.1:1812 length 84 User-Name = "user1@test.com" User-Password = "856363" NAS-IP-Address = <radius's_address> NAS-Port = 0 Message-Authenticator = 0x00 Cleartext-Password = "856363" Received Access-Accept Id 1 from 127.0.0.1:1812 to 127.0.0.1:33629 length 20 # 外部のクライアントとして認証させる $ radtest user1@test.com <6桁のコード> <radius's_address> 0 hogehogehoge Sent Access-Request Id 171 from 0.0.0.0:35101 to <radius's_address>:1812 length 84 User-Name = "user1@test.com" User-Password = "741359" NAS-IP-Address = <radius's_address> NAS-Port = 0 Message-Authenticator = 0x00 Cleartext-Password = "741359" Received Access-Accept Id 171 from 192.168.0.240:1812 to 192.168.0.240:35101 length 20
‘Received Access-Accept‘が返ってきているので、認証に成功していますね!
SELinuxのポリシー修正
radiusdの動きに変更を加えたので、SELinuxのポリシーを修正します。
# SELinuxの出力確認 $ sudo audit2allow -a #============= radiusd_t ============== allow radiusd_t auth_home_t:file { getattr open read unlink }; allow radiusd_t user_home_dir_t:dir { add_name remove_name write }; allow radiusd_t user_home_dir_t:file { create open read rename setattr write }; # ポリシーの作成 $ sudo audit2allow -a -M radiusd_ga ******************** 重要 *********************** このポリシーパッケージを有効にするには、以下を実行して下さい: semodule -i radiusd_ga.pp # 作成したポリシーのインポート $ sudo semodule -i radiusd_ga.pp
とりあえず動くところまで確認できたので、あとは公式のドキュメントを見ながらチューニングしましょう。