踏み台サーバを海外では
Bastion server(ばすちん いや…ばすちぉん)
と呼びます。今回はGoogle Authenticator(2段階認証)とssh鍵認証による踏み台サーバを構築してみました。設定もシンプルなのでいい感じ。
■Google Authenticator
https://github.com/google/google-authenticator
2段階認証はメールアドレスとパスワードに加えて、スマートフォン/Webアプリに送信される認証コードを入力してログインするものです。認証コードは数10秒しか使えないため、パスワードのように推測されることはなく、セキュア!クライアントとしてはデフォルトのGoogle AuthenticatorアプリとAuthyが有名ですな。
■要件
- SSH鍵認証でログイン
- SSH鍵を指定しない場合はログインパスワードとGoogle Authenticatorのパスを求められる(完全2段階認証)
2段階認証で踏み台サーバにログインするのは流石に利便性が悪いので、SSH鍵認証もできるようにしました。これで開発メンバーがログインしやすく、外からSSHアタックされても、二段階認証による完全セキュアを実現したというわけです。
■Install Google Authenticator/Setting sshd
OSはAmazon Linux2を利用しています。
1 |
$ sudo yum install google-authenticator qrencode-libs |
qrencode-libsはQRコードで二要素目の認証をするために必要なのでインストールします。
・/etc/pam.d/google-auth
1 2 3 4 5 |
#%PAM-1.0 auth required pam_env.so auth sufficient pam_google_authenticator.so try_first_pass auth requisite pam_succeed_if.so uid >= 500 quiet auth required pam_deny.so |
・ /etc/pam.d/sshd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#%PAM-1.0 auth required pam_sepermit.so auth substack password-auth auth substack google-auth #追加 auth include postlogin # Used with polkit to reauthorize users in remote sessions -auth optional pam_reauthorize.so prepare account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session required pam_namespace.so session optional pam_keyinit.so force revoke session include password-auth session include postlogin # Used with polkit to reauthorize users in remote sessions -session optional pam_reauthorize.so prepare |
・/etc/ssh/sshd_config
1 2 3 4 |
Port xxxxxx # 変更 UsePAM yes # 変更 PasswordAuthentication yes #変更 ChallengeResponseAuthentication yes #変更 |
・restart sshd
1 |
$ sudo systemctl restart sshd.service |
■setting google-authenticator.sh
・/etc/profile.d/google-authenticator.sh
1 2 3 4 5 6 7 8 9 10 |
#!/bin/sh if [ "$USER" != "root" -a "$USER" != "ec2-user" ]; then if [ ! -f "$HOME/.google_authenticator" ]; then trap 'exit' SIGINT echo "google-authenticatorを設定するのでAuthyで管理してね♡" /usr/bin/google-authenticator -t -d -W -u -f trap -- SIGINT fi fi |
運用上、毎回アプリでQRコードを読ませるのはめんどくさいので、SSHログイン時に個人でQRコードを読み取るように出力させてみました。あとは各ユーザーに公開鍵を指定してログインしてみましょう。間違えて消しちゃった!などは$HOME/.google_authenticatorを消せばOKです。
■SSH login
・use ssh key
1 2 3 4 |
$ ssh bastion-server google-authenticatorを設定するのでAuthyで管理してね♡ Warning: pasting the following URL into your browser exposes the OTP secret to Google: https://www.google.com/chart?chs=200x200&xxxxxxxxxx |
1 2 3 4 5 6 7 8 9 10 |
Your new secret key is: xxxxxxxxxx Your verification code is xxxxxxxx Your emergency scratch codes are: xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx adachin@bastion-server:~$ exit |
1 2 3 4 5 6 |
$ ssh bastion-server Last login: Thu Nov 22 20:27:19 2018 from xxxx No packages needed for security; 2 packages available Run "sudo yum update" to apply all updates. adachin@bastion-server:~$ |
ちゃんとGoogle AuthenticatorのQRコードが出てきて、SSH鍵認証でログインできますな
・not use ssh key
1 2 3 |
$ ssh bastion-server Password: Verification code: |
上記のようにSSH鍵を指定しない場合は、ログインパスワードが通り、Google Authenticatorの二段階認証パスワードが求められます。
■まとめ
導入が簡単!!むしろ入れるべき!
次回はansibleでのユーザー管理方法をブログします。
0件のコメント