Amazon LinuxでAzure Active DirecoryのMFAを使った多要素認証を実装

参考にしたサイト

ご参考までに

下記サイトのようにお手軽にMFA認証を実装する方法もありますが、接続元ユーザを細かく指定できなかったりしますし、AzureADのログインページの認証方法が変わったときに対応できるのか不安なところがあります。

前提

基本的には前回の記事の応用です。

おおまかな構成

登場人物は3つ。

1)Linuxインスタンス(RADIUSクライアント)
2)NPSサーバ(RADIUSサーバ)
3)Active Directoryサーバ

  • LinuxインスタンスがNPSにRADIUS認証をしにいく。
  • NPSの許可ポリシーに合致したID/PASS(AD認証)の場合は、AzureADに認証要求を投げる。
  • 認証要求を受け取ったAzureADは事前に登録されたMFA設定にもとづき、モバイルデバイスなどにMFA認証要求を投げる。
  • 全ての認証が通れば、SSHログイン可。

おおまかな流れ

  1. NPSサーバの設定。(RADIUSサーバとして構築)
  2. LinuxインスタンスRADIUSクライアントとして動作するように設定。
  3. AzureADのMFA導入前に、認証ができるかテスト。
  4. NPSサーバにAzureADのMFA導入するためにNPS拡張エクステンションをインストール
  5. MFAが動作することをテスト

手順

今回の構成でMFAを構成した事例が他になさそうなので詳細に記載します。

NPSの設定

  1. RADIUSクライアントの設定
    f:id:atsuokun:20170222171138p:plain
    f:id:atsuokun:20170222172733p:plain
  2. RADIUSサーバーの設定(負荷分散タブはデフォルトのままなので割愛)
    f:id:atsuokun:20170222172248p:plain
    f:id:atsuokun:20170222172501p:plain
    f:id:atsuokun:20170222172906p:plain
    f:id:atsuokun:20170222173016p:plain
  3. 接続要求ポリシーの設定
    f:id:atsuokun:20170222174715p:plain
    f:id:atsuokun:20170222173418p:plain
    f:id:atsuokun:20170222173511p:plain
    f:id:atsuokun:20170222173620p:plain
    f:id:atsuokun:20170222173727p:plain
    f:id:atsuokun:20170222173815p:plain
    f:id:atsuokun:20170222173933p:plain
    f:id:atsuokun:20170222174015p:plain
    f:id:atsuokun:20170222174135p:plain
    f:id:atsuokun:20170222174224p:plain
  4. 下記状態になっていればOK。処理順序は1番目にする(認証を無視する/OKは表示されていてもされていなくてもOK)
    f:id:atsuokun:20170222174436p:plain
  5. もう一つ接続要求ポリシーを設定
    f:id:atsuokun:20170222174715p:plain
    f:id:atsuokun:20170222174900p:plain
    f:id:atsuokun:20170222174940p:plain
    f:id:atsuokun:20170222175024p:plain
    f:id:atsuokun:20170222175103p:plain
    f:id:atsuokun:20170222175130p:plain
    f:id:atsuokun:20170222175232p:plain
  6. 下記状態になっていればOK。処理順序は2番目にする。
    f:id:atsuokun:20170222175315p:plain
  7. ネットワークポリシーの設定
    f:id:atsuokun:20170222175418p:plain
    f:id:atsuokun:20170222175520p:plain
    f:id:atsuokun:20170222184526p:plain
    f:id:atsuokun:20170222175739p:plain
    f:id:atsuokun:20170222175850p:plain
    f:id:atsuokun:20170222175937p:plain
    f:id:atsuokun:20170222180041p:plain
    f:id:atsuokun:20170222180139p:plain
  8. 下記のような状態になっていればOK。処理順序は1番目にする。
    f:id:atsuokun:20170222180346p:plain

Linuxインスタンスの設定。

  1. 下記パッケージをダウンロード。 yum -y install gcc freeradius pam pam-devel make
  2. pam_radius_authモジュール(RADIUSクライアント化するためのモジュール)をwget
    wget ftp://ftp.freeradius.org/pub/freeradius/old/pam_radius-1.3.17.tar.gz
  3. ダウンロードしたモジュールを展開して、make。
    tar xvzf pam_radius-1.3.17.tar.gz
    cd pam_radius-1.3.17
    make
  4. makeが完了するとカレントディレクトリに「pam_radius_auth.so」が出来上がっているので、「 /lib64/security」配下にコピー。
    cp -p ./pam_radius_auth.so /lib64/security/
  5. /etc/pam.d/sshdを開き、authで始まるところをすべてコメントアウトする。
  6. 2行目(#%PAM-1.0と書いてあるところの次の行)に「auth sufficient pam_radius_auth.so」と追記する。
  7. /etc/raddb/serverというテキストファイルを作成し、下記内容を記載する。
    <NPSサーバのIPアドレス> <NPSサーバで設定した共有シークレット> 60
    例:192.168.150.150 sharedkey 60
  8. sshdの再起動
    /etc/init.d/sshd restart

接続テスト

ターミナルをもう一つ立ち上げて、Linuxインスタンスに接続し、下記内容を確認。

  • NPSサーバで許可されたユーザだけがログインできている。
  • NPSサーバのイベントログ(セキュリティ)に認証拒否のログが出ていないこと。

NPS拡張モジュールのインストール

前回の記事の「NPS拡張モジュールのインストール」と同じなので割愛。

接続テスト

Linuxインスタンスに接続し、MFA認証が走ればOK!

最後に

意外なことに、LinuxRADIUSクライアントとして登録する手順があまり無いためそこに手間取りました。 今回はLinuxでしたがRADIUSが喋れる機器なら全てAzureのMFA認証が上記手順で実装できるかと思われます。