LinuxサーバでWindows NPSサーバ経由でRadiusクライアント認証を有効化する

# 今夜の一言
なんか夜に元気とやる気が出てくるこのバイオリズム抜け出したいわぁ
ざっくりいうと
　■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クライアント]を選択した状態で右クリックメニューから[新規]を選択
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/fe9ba50e-d246-2d46-f56c-b297e99964dc.png">
(3)[フレンドり名]に任意の名称を入力
(4)[アドレス]にRadiusクライアントのIPアドレスまたはホスト名を入力
(5)[共有シークレット]に任意の値を入力
※Radius認証に必要となるパスキーを入力（自動で値を生成することもできるが後述するLinuxでの認証確認の際にキーの値が長すぎることでエラーとなるため手動生成を選択）
(6)[OK]をクリック
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/30e18580-9bae-462d-c618-9d0f82223905.png">
登録が終わるとこんな感じで表示されます。
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/39f84453-0173-0d98-fa1b-558f1082e6d9.png">
### §1-2 接続要求ポリシーの作成
(1)[NPS(ローカル)]-[ポリシー]-[接続要求ポリシー]を選択した状態で右クリックメニューから[新規]を選択
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/4fbe3663-04b1-9b03-f4cf-dc34a677d1b5.png">
(2)[ポリシー名]に任意の名称を入力
(3)[次へ]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/09ac6f9f-b5ef-3105-b501-ff2387520086.png">
(4)[追加]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/3d072ae2-d5f9-9579-17dd-286b1efc3366.png">
(5)[ユーザー名]を選択し[追加]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/86bd3e61-dcc1-e692-fe02-5bfae6fb0113.png">
(6)[ユーザー名]にRadius認証で使用するユーザーの名前を入力し[OK]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/1e2c83ed-c27d-52c0-791c-f42bb506be85.png">
(7)[次へ]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/e00e37e2-6295-11e0-b9ab-ef446dfa21fb.png">
(8)[次へ]をクリックする
※認証情報をさらに別のRadiusサーバに転送することができる
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/e4878d1f-b428-f58d-ad8e-7a32cc02616e.png">
(9)[次へ]をクリックする
※後述するネットワークポリシーの設定よりもこちらで定義した認証よりも優先させたい場合に[ネットワークポリシーの認証設定よりも優先する]にチェックを入れて設定を行う
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/b613e275-98ea-b2e6-67c9-45941ba8edee.png">
(10)[領域名の指定]の設定項目[属性]においてプルダウンメニューから[ユーザー名]を選択し、[次へ]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/07bb514f-47f9-0516-638a-59957c40a460.png">
(11)完成しました画面が表示されるので[完了]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/8a04efb7-c66f-dc48-cbef-719f84a29d1b.png">
### §1-3 ネットワークポリシーの作成
(1)[NPS(ローカル)]-[ポリシー]-[ネットワークポリシー]を選択した状態で右クリックメニューから[新規]を選択
(2)[ポリシー名]に任意のポリシー名を入力し[次へ]をクリック
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/878a27d5-5101-1e77-779c-35717d3ecaca.png">
(3)[追加]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/9e5ff1cc-2426-7451-e149-77903bbf8e50.png">
(4)[ユーザーグループ]を選択し[追加]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/0eccd379-f281-c85f-d261-4f84797c4cb8.png">
(5)[グループの追加]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/e9f5add4-6a86-1467-da2c-62204320039b.png">
(6)Radius認証で使用するユーザーが所属しているグループを選択する
(7)[OK]をクリックする
(8)[次へ]をクリックする
(9)[アクセスを許可する]にチェックが入っていることを確認し[次へ]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/2b138d7c-f076-7a63-a8f8-0a6eb0536435.png">
(10)今回は通信の暗号化を行わないため、[暗号化されていない認証]にチェックを入れ、[次へ]をクリックする
__※「安全でない認証方法がいくつか選択されました。」と表示されたら[いいえ]をクリックする__
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/1ff1897f-25b3-538b-5e56-2c8c73c69c45.png">
(11)[次へ]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/94513885-15c7-58a1-a55b-a450f7c5f264.png">
(12)[次へ]をクリックする
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/63d96bad-b6b3-3307-697a-15532aaecbe6.png">
(13)完成しました画面が表示されるので[完了]をクリックする

登録が終わるとこんな感じで表示されます。
<img width="576" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/138274/8ec5cb4d-18d5-9aeb-5af0-2150b3726cf6.png">

## §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となることを確認する

```:Radius認証テストコマンド
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。