LoginSignup
0
1

More than 1 year has passed since last update.

Google Authenticator 連携した多要素認証のRADIUSサーバ(EC2)構築ハンズオン

Posted at

はじめに

要件としてEC2をRADIUSサーバとして利用すること、そして多要素認証を取り入れなければいけないという事なので、まずはともあれ検証していきたいと思います

ざっくりRADIUSサーバとは

RADIUS(Remote Authentication Dial In User Service)という認証プロトコルを利用して「このユーザは通ってOKだね」「このユーザは知らないのでNGだね」のように、認証作業を行うコンピュータのこと

参考URL:IT用語辞典 e-Words
参考URL:「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

ハンズオン

1.EC2作成

設定項目 内容
OS Amazon Linux 2
インスタンスタイプ t2.micro
セキュリティグループ SSH接続(Port22)のみ可能

インストールされているパッケージのバージョンを最新にしておく

$ sudo yum -y update

※インスタンスタイプは検証環境のためt2.microを選定

※AD Connector運用の際は、AD Connectorの所属するサブネットから、 UDP 1812からのインバウンドルールを追加しなければ接続できない(今回は赤枠のスコープのため設定はしていない)


2.EC2をRADIUSサーバとしてインストールする必須パッケージ

パッケージ名 内容
google-authenticator 二段階認証設定パッケージ
freeradius RADIUSを実現させるオープンソースソフトウェアパッケージ
freeradius-utils radtest(ローカルで動作テストをする)が入っているパッケージ

2.1.google-authenticator インストールの準備

google-authenticatorはyumでインストール出来ないため、サーバにSSH接続後、rootユーザへ切り替えて(sudo su -)から下記コマンドを入力する

$ amazon-linux-extras install -y epel

2.2.必須のパッケージ3つをインストールする

$ yum -y install freeradius freeradius-utils google-authenticator

3.RADIUSサーバ(EC2)で利用する事前設定

設定するもの 内容
グループ作成 RADIUS経由の認証を許可するためのグループ作成
ホスト名設定 google-authenticator で登録する際に利用のため作成

※グループに所属するユーザは後述「5.RADIUSサーバで認証するユーザの設定」で登録をしていきます

3.1.RADIUS経由の認証を許可するグループの作成

$ groupadd radius-enabled

下記コマンドでグループが作成されているかを確認できる

$ cat /etc/group | grep radius-enabled

3.2.ホスト名設定

$ hostnamectl set-hostname radius.(ドメイン名)
  ↓
(例)
$ hostnamectl set-hostname radius.mfa.example

下記コマンドでホスト名を確認できる

$ hostnamectl

3.3.hostsファイルに記載

$ vi /etc/hosts

vi の インサートモードで自身のプライベートIPアドレス、3.2.ホスト名設定で入力したドメイン名を最終行に追加する

自身のプライベートIPアドレス radius.(ドメイン名)
 ↓
(例)
192.168.10.83 radius.mfa.example

4.FreeRADIUSの設定

ファイルパス 設定内容
/etc/raddb/radiusd.conf Free-RADIUSの基本設定
/etc/raddb/clients.conf 認証するネットワーク
/etc/raddb/users RADIUS認証ユーザ
/etc/raddb/sites-available/default PAM有効化
/etc/pam.d/radiusd GoogleAuthenticator利用設定

4.1.radiusd.confの編集

rootユーザで動作させるため設定を下記のように変更します

$ vi /etc/raddb/radiusd.conf

変更前

        user = radiusd
        group = radiusd

変更後

        user = root
        group = root

4.2.clients.confの編集

RADIUSサーバがプロトコルを受け付けるRADIUSクライアント(「ざっくりRADIUSとは」の図におけるAD Connecter部分)の設定をします

$ vi /etc/raddb/clients.conf 

末尾にRADIUSクライアントのIPアドレスレンジ、secret(今回はスコープ外になるDirectoryServiceとの連携に必要となるシークレットコード)をに入力する

client new {
  ipaddr = 0.0.0.0/0
  secret = XXXXX(※任意の値を入力)
}

※IPアドレスレンジは上記のような 0.0.0.0/0にすることで何処からでも受付をすることが可能(検証環境及びスコープ外のため、上記 0.0.0.0/0 の値としています)

4.3.users の編集

radius-enabledのグループに所属しているユーザーがradius認証されるように設定

$ vi /etc/raddb/users

末尾に追加する内容

DEFAULT    Group != "radius-enabled", Auth-Type := Reject
       Reply-Message = "Your account has been disabled."
DEFAULT        Auth-Type := PAM

radius-enabled所属していない場合は、"Your account has been disabled(アカウントは無効です)."が表示される

radius-enabled所属している場合は、PAM(pluggable authentication module)を利用する

4.4.PAM(pluggable authentication module)を有効化

ざっくりPAM(pluggable authentication module)とは?

Linuxのアプリケーションが共通して利用(認証方式を統一化)できる認証のシステムのこと
参考URL:LinuC Linux豆知識087

PAMを利用するため/etc/raddb/sites-available/defaultファイルの変更

$ vi /etc/raddb/sites-available/default

変更前

        #  Pluggable Authentication Modules.
#        pam

変更後

        #  Pluggable Authentication Modules.
        pam

4.5.GoogleAuthenticator利用設定

RADIUS認証の際に、GoogoleAuthenticatorが使われるよう設定を変更及び追記

$ vi /etc/pam.d/radiusd

変更後 
・既存で記述されている部分をコメントアウトに変更する(2-6行目)
・認証の際に、GoogoleAuthenticator利用の旨を追記する(7-9行目)

#%PAM-1.0
#auth       include     password-auth
#account    required    pam_nologin.so
#account    include     password-auth
#password   include     password-auth
#session    include     password-auth
auth requisite pam_google_authenticator.so
account required pam_permit.so
session required pam_permit.so

4.6.GoogleAuthenticator利用設定を有効化するためシンボリックリンク追加

4.5.での設定(PAMモジュール)を有効化するため、シンボリックリンクを追加する

$ ln -s /etc/raddb/mods-available/pam /etc/raddb/mods-enabled/pam

4.7 RADIUSサーバを起動

# サービスの自動起動を設定
$ systemctl enable radiusd

# サービスの起動
$ systemctl start radiusd

# サービスの状態確認
$ systemctl status radiusd

サービスが正常に起動している際のプロンプト画面


5.RADIUSサーバで認証するユーザの設定

5.1 RADIUSサーバで認証するユーザを登録

$ useradd -g radius-enabled (ユーザー名)

追加したユーザ権限で、google-authenticatorを起動する

$ sudo -u (ユーザー名) /usr/bin/google-authenticator

認証トークンをタイムベースにするかを質問されるので、yを押下

Do you want authentication tokens to be time-based (y/n) y

上記 押下後、画面上にQRコードを表示するURL及び、QRコードが表示される

Warning: pasting the following URL into your browser exposes the OTP secret to Google:
  https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/user01@radius.mfa.example%3Fsecret%XXXXXXXXXX%26issuer%3Dradius.mfa.example

その後に続く質問に対して、yを押下する

5.2 QRコードからワンタイムパスワードを発行する

表示されたURLをブラウザに入力し、QRコード画面を表示させる

各手持ちのデバイスで上記QRコードを読み取り、ワンタイムパスワードを発行する


6.接続テスト

radtestコマンドで下記ユーザの認証が可能か確認する

$ radtest user01 【ワンタイムパスの数字】 localhost 1812 testing123

※自身から自身へのテストのため、localhostと設定する。もしクライアントからの確認の場合は、RADIUSサーバのIPを入力する

localhostのパスワードtesting123/etc/raddb/clients.conf (4.2で編集したファイル)に記載されているデフォルトの設定値を利用しています

(例)ワンタイムパス 有効時間内に押下した場合の画面:成功

[root@radius ~]# radtest user01 826611 localhost 1812 testing123
Sent Access-Request Id 94 from 0.0.0.0:40033 to 127.0.0.1:1812 length 76
	User-Name = "user01"
	User-Password = "826611"
	NAS-IP-Address = 192.168.10.83
	NAS-Port = 1812
	Message-Authenticator = 0x00
	Cleartext-Password = "826611"
Received Access-Accept Id 94 from 127.0.0.1:1812 to 0.0.0.0:0 length 20

(例)ワンタイムパス 有効時間外に押下した場合の画面:失敗
返ってくるメッセージの文末2行部分に、認証が弾かれた旨が記載されている

[root@radius ~]# radtest user01 826611 localhost 1812 testing123
Sent Access-Request Id 61 from 0.0.0.0:39468 to 127.0.0.1:1812 length 76
	User-Name = "user01"
	User-Password = "826611"
	NAS-IP-Address = 192.168.10.83
	NAS-Port = 1812
	Message-Authenticator = 0x00
	Cleartext-Password = "826611"
Received Access-Reject Id 61 from 127.0.0.1:1812 to 0.0.0.0:0 length 20
(0) -: Expected Access-Accept got Access-Reject

おわりに

ここからAD Connecterと紐付けしていく後半戦がありますが、一度ここまでで区切ります。熱が冷める前に、さっさとAD Connecterと紐付けして挙動の検証を進めていきたいと思います。

参考URL

URL:BlackBelt 多要素認証による Amazon WorkSpaces の利用
URL:【APN Ambassadors ブログシリーズ第三弾】Amazon WorkSpaces で多要素認証(MFA)を利用する場合でもユーザは AD だけで管理したい
URL:Serverworks RADIUSサーバーを構築して、WorkSpacesを多要素認証で運用する

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1