今夜の一言
なんか夜に元気とやる気が出てくるこのバイオリズム抜け出したいわぁ
ざっくりいうと
■Windows NPSサーバ
・Radiusクライアントの登録 → クライアントのIPアドレスを定義名を指定して登録
・接続要求ポリシー → Radiusクライアントから受け取る認証処理をどのRadiusサーバで対応するかを定義する設定(一部をローカルのNPSサーバ、他の一部を別のRadiusサーバに転送など行える)
・ネットワークポリシー → Radiusクライアントからの認証処理をどのように処理するかを定義する設定
■Linux
・Radius専用のpamモジュール使用するとNPSサーバと連携したAD認証を行える
・SSH(sshd)にもRadius認証処理を行えるようにカスタマイズする必要がある
目的
お客さんからの要望でO365の認証をRadius経由でやりたいという要望を受けた。
さらに条件としてベンダーのリモートVPNアクセスサービスを利用するっていうのが加わっている。
とりあえず、NPSサーバ機能を以下の観点も踏まえて追加できるかどうかを確認しようとっていうのが今回の主旨なわけ。
①オンプレADサーバ上のアカウントパスワードで認証処理できんの?
②おいおい、まさかサーバの再起動とか必要ないよね?
ってなわけで今回は単なるCentOSのサーバをRadiusクライアントと見たてて、
そこからNPS経由でLinuxサーバのSSHログイン処理ができるのかを確認した時のメモを記載するよ~
前提事項
(1)NPSサーバ機能は事前に追加済みであること
(2)NPSサーバ機能追加後にサーバを再起動していないこと
(3)この記事には値を何もカスタマイズしない手順を記載する
(4)AD上にRadius認証用のユーザーおよびグループが登録されていること
(5)Linuxサーバ上にADサーバに登録してあるRadius認証用ユーザー名と同じユーザー名のユーザーが登録されていること
(6)この記事は以下の環境で実施する際の手順を記載する
※ざっくりとね。疲れてるんで。あと3歳若返りたいわぁ
◆Radiusサーバ構成
OS: WindowsServer2012 R2 x64
◆Radiusクライアント構成
OS: CentOS 7.4 x64
§1 Radiusサーバの設定(NPSの設定)
§1-1 Radiusクライアントの登録
(1)ネットワークポリシーサーバー管理ツールを起動
(2)[NPS(ローカル)]-[RADIUSクライアントとサーバー]-[RADIUSクライアント]を選択した状態で右クリックメニューから[新規]を選択
(3)[フレンドり名]に任意の名称を入力
(4)[アドレス]にRadiusクライアントのIPアドレスまたはホスト名を入力
(5)[共有シークレット]に任意の値を入力
※Radius認証に必要となるパスキーを入力(自動で値を生成することもできるが後述するLinuxでの認証確認の際にキーの値が長すぎることでエラーとなるため手動生成を選択)
(6)[OK]をクリック
登録が終わるとこんな感じで表示されます。
§1-2 接続要求ポリシーの作成
(1)[NPS(ローカル)]-[ポリシー]-[接続要求ポリシー]を選択した状態で右クリックメニューから[新規]を選択
(2)[ポリシー名]に任意の名称を入力
(3)[次へ]をクリックする
(4)[追加]をクリックする
(5)[ユーザー名]を選択し[追加]をクリックする
(6)[ユーザー名]にRadius認証で使用するユーザーの名前を入力し[OK]をクリックする
(7)[次へ]をクリックする
(8)[次へ]をクリックする
※認証情報をさらに別のRadiusサーバに転送することができる
(9)[次へ]をクリックする
※後述するネットワークポリシーの設定よりもこちらで定義した認証よりも優先させたい場合に[ネットワークポリシーの認証設定よりも優先する]にチェックを入れて設定を行う
(10)[領域名の指定]の設定項目[属性]においてプルダウンメニューから[ユーザー名]を選択し、[次へ]をクリックする
(11)完成しました画面が表示されるので[完了]をクリックする
§1-3 ネットワークポリシーの作成
(1)[NPS(ローカル)]-[ポリシー]-[ネットワークポリシー]を選択した状態で右クリックメニューから[新規]を選択
(2)[ポリシー名]に任意のポリシー名を入力し[次へ]をクリック
(3)[追加]をクリックする
(4)[ユーザーグループ]を選択し[追加]をクリックする
(5)[グループの追加]をクリックする
(6)Radius認証で使用するユーザーが所属しているグループを選択する
(7)[OK]をクリックする
(8)[次へ]をクリックする
(9)[アクセスを許可する]にチェックが入っていることを確認し[次へ]をクリックする
(10)今回は通信の暗号化を行わないため、[暗号化されていない認証]にチェックを入れ、[次へ]をクリックする
※「安全でない認証方法がいくつか選択されました。」と表示されたら[いいえ]をクリックする
(11)[次へ]をクリックする
(12)[次へ]をクリックする
(13)完成しました画面が表示されるので[完了]をクリックする
§2 Radiusクライアントの設定(Linuxサーバの設定)
§2-1 pam Radius認証用モジュールの追加
(1)以下のコマンドを実行してモジュールを追加する
yum -y install epel-release
yum -y install pam_radius
§2-2 pam Radius認証用モジュールの設定変更
(1)pam_radiusモジュール設定を変更する
下記の内容を/etc/pam_radius.confに追加する
■書式
【NPSサーバのIPアドレス】 【NPSサーバで指定した共有シークレットの値】【タイムアウト値】
■例
192.168.2.10 12345(共有シークレットの値) 3(タイムアウト値)
(2)pam_ssh認証モジュールの設定を変更する
以下のコマンドを実行し設定ファイルの内容を変更する
vi /etc/pam.d/sshd
#%PAM-1.0
auth sufficient /usr/lib64/security/pam_radius_auth.so
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
account required pam_nologin.so
account include password-auth
password include password-auth
上記の1行目「auth sufficient /usr/lib64/security/pam_radius_auth.so」を追加しています。
§2-3 Radius認証テスト
本当は2-2と2-3の手順が逆な気がするなぁ…
(1)freeradius-utilsのインストール
yum install freeradius-utils
(2)パッケージインストール後に下記のコマンドを実行してRadius認証の処理結果がOKとなることを確認する
radtest -x -4 【Radius認証用ユーザー名】【ユーザーのパスワード】【NPSサーバのIPアドレス】 0 【NPSサーバで設定した共有シークレットの値】
※上記コマンドのオプション意味
-x = デバッグモードで起動(エラーとかが詳しく出力される)
-4 = ipv4で接続施行(-6の場合はipv6)
0 = NASポートの値(NPSで指定していない場合は既定値で0)
実行した結果、下記の「Access-Accept」が表示されれば認証テストに成功している。
Received Access-Accept Id 0 from x.x.x.x:1812 to 0.0.0.0:0 length 102
Framed-Protocol = PPP
Service-Type = Framed-User
Class = 0x7b9a066d0000013700010200ac10016e00000000492d940e142a525f01d3549c3f585b3d000000000000000c
MS-Link-Utilization-Threshold = 50
MS-Link-Drop-Time-Limit = 120
ここまででRadius認証が行えていることを確認できるため、
あとはRadius認証用のユーザーでSSH接続確認を行って認証が通ればOK。