FreeBSDに二要素認証(2FA)をセットアップする - Duo Security編では、Duo Securityのアカウントを取得し、保護対象のサーバに設定する情報を確認するところまでを説明しました。本サーバ編では、保護対象のサーバ上で行なう設定について説明します。

引き続き、Configuring two-factor authentication on FreeBSD with Duo Pushを参考に設定を進めていきます。

  1. Duoパッケージのインストールと設定

    まず、duoパッケージをインストールします。

    pkg install duo

    すると、/usr/local/etc以下に、

    • login_duo.conf, login_duo.conf.sample
    • pam_duo.conf, pam_duo.conf.sample

    というファイルが作られます。.confファイルの方に必要な設定を記入します。どちらとも同じ内容になります。

    • login_duo.confおよびpam_duo.conf

      [duo]
      ; Duo integration key
      ikey = <Duo Securityサイトの情報のうち Integration key をコピペ>
      ; Duo secret key
      skey = <Duo Securityサイトの情報のうち Secret key をコピペ>
      ; Duo API host
      host = <Duo Securityサイトの情報のうち API hostname をコピペ>
      ; Send command for Duo Push authentication
      pushinfo = yes

    以上で、Duoパッケージの設定は完了です。

  2. PAM (Pluggable Authentication Module)の設定

    次に、PAMの設定を変更します。/etc/pam.d以下にあるファイルを編集して、以下の内容にします。systemはコンソールログインに2FAを適用するため、sshdはSSHによるリモートログインに2FAを適用するための変更です。

    • /etc/pam/system (authの部分だけ抜き出しています)

      auth            sufficient      pam_opie.so             no_warn no_fake_prompts
      auth            requisite       pam_opieaccess.so       no_warn allow_local
      #auth           sufficient      pam_krb5.so             no_warn try_first_pass
      #auth           sufficient      pam_ssh.so              no_warn try_first_pass
      auth            required        pam_unix.so             no_warn try_first_pass nullok
      auth            required        /usr/local/lib/security/pam_duo.so                      # この行を追加
    • /etc/pam/sshd (authの部分だけ抜き出しています)

      auth            sufficient      pam_opie.so             no_warn no_fake_prompts
      auth            requisite       pam_opieaccess.so       no_warn allow_local
      #auth           sufficient      pam_krb5.so             no_warn try_first_pass
      #auth           sufficient      pam_ssh.so              no_warn try_first_pass
      #auth           required        pam_unix.so             no_warn try_first_pass   # この行をコメントアウト
      auth            required        /usr/local/lib/security/pam_duo.so               # この行を追加

    以上で、PAMの設定変更は完了です。

  3. sshdの設定

    最後に、sshdの設定を変更します。/etc/ssh/sshd_configを編集します。最低限、以下の設定を行なってください。(なお、公開鍵認証によるログインの設定は済んでいることを想定しています。)

    • /etc/ssh/sshd_config

      PAMを使用しますのでUsePAMyesにします。

      また、公開鍵認証に加えてワンタイムパスワードを用いますので、ChallengeResponseAuthenticationyesに設定し、AuthenticationMethodskeyboard-interactiveを加えます。

      PasswordAuthentication no
      ChallengeResponseAuthentication yes
      UsePAM yes
      AuthenticationMethods publickey,keyboard-interactive

    sshdを再起動して、サーバ側での準備は完了です。

    service sshd restart

参考文献

  1. Configuring two-factor authentication on FreeBSD with Duo Push, https://www.teachnix.com/configuring-two-factor-authentication-on-freebsd-with-duo/