2 要素認証を使用するように SSH を設定する方法
2 要素認証 (2FA) を使用してプロのように SSH アクセスを保護し、リモート接続をさらに効果的に保護します。
Secure Shell (SSH) は、あるコンピュータから別のコンピュータへの安全なリモート ログインに広く使用されているプロトコルで、強力な暗号化を提供して不正アクセスから保護します。
しかし、サイバー脅威がますます巧妙化しているため、従来のパスワードベースの認証のみに依存すると、システムがブルートフォース攻撃やパスワード盗難に対して脆弱になる可能性があります。ここで 2 要素認証 (2FA) が登場します。
パスワード (あなたが知っているもの) だけでなく、通常はあなたが持っているもの (モバイル デバイスなど) やあなた自身に関するもの (指紋など) である 2 番目の要素も要求することで、セキュリティ層がさらに追加されます。
2FA と SSH を統合すると、パスワードが侵害された場合でも、システムへの不正アクセスのリスクが大幅に軽減されます。それでは、その方法を説明しましょう。
ステップ 1: 2FA 認証アプリを携帯電話にインストールする
まず、モバイル デバイスに 2FA 認証アプリをインストールして、SSH で 2 要素認証を使用する必要があります。このアプリは、認証プロセスの 2 番目の要素として機能する、時間制限のある 1 回限りの使用コードを生成します。
このようなアプリの一般的な選択肢には、Google Authenticator や Microsoft Authenticator があります。これらは Android および iOS デバイスで利用でき、それぞれのアプリ ストアからダウンロードできます。
- Android 用 Google 認証システム
- iOS 用 Google 認証システム
- Android 用 Microsoft Authenticator
- iOS 用 Microsoft Authenticator
このガイドでは、Google Authenticator アプリを使用します。モバイル デバイスにプリインストールしておくことが重要です。ステップ 3 の少し下で、SSH サーバーとの 2FA の初期セットアップ中にこれを使用します。
ステップ 2: Google の PAM 認証モジュールをインストールする
Google Authenticator は、ソフトウェア アプリケーションのユーザーを認証するために、時間ベースのワンタイム パスワード (TOTP) アルゴリズムと HMAC ベースのワンタイム パスワード (HOTP) アルゴリズムを使用して 2 要素認証 (2FA) サービスを実装するソフトウェア ベースの認証ツールです。 。
Linux システムをこれに対応できるようにするには、ディストリビューションに応じて、「libpam-google-authenticator 」または「google-authenticator」と呼ばれる必要なパッケージをインストールする必要があります。しかし、このパッケージはどのような機能を果たしているのでしょうか?
つまり、Google Authenticator を Pluggable Authentication Module (PAM) システムに統合する Linux 用のソフトウェア モジュールを提供します。 PAM は、複数の下位認証スキームを高レベル API に統合するためのフレームワークであり、ユーザー検証を必要とするプログラムにさまざまな認証方法を実装できるようになります。
Ubuntu/Debian
Ubuntu、Debian、およびそれらをベースにした他のディストリビューション(Linux Mint や Pop!_OS など)では、以下の apt コマンドを使用して Google 認証システムをインストールできます。
sudo apt install libpam-google-authenticator
Rocky Linux/AlmaLinux
Rocky や Alma などのエンタープライズ Linux ディストリビューションの場合、Google Authenticator は EPEL リポジトリを通じて利用できます。したがって、まずそれをシステムに追加し(まだ追加していない場合)、次に Google Authenticator 自体をインストールする必要があります。
sudo dnf install epel-release
sudo dnf install google-authenticator
フェドーラ
Fedora ユーザーは、公式配布リポジトリ内で Google Authenticator を見つけることができます。インストールするには、次のコマンドを実行します。
sudo dnf install google-authenticator
Arch Linux
Google Authenticator は、Arch および Arch ベースの派生製品のディストリビューションのリポジトリで入手できます。インストールするには、次を実行します。
sudo pacman -S libpam-google-authenticator
ステップ 3: Google 認証システムを構成する
Google Authenticator が正常にインストールされたので、設定する準備が整いました。これを行うには、ターミナルを開き、以下に示すコマンドを実行します。
google-authenticator
ここからは、いくつかの質問に答える必要があります。最初の質問は「認証トークンを時間ベースにしますか?」で、「はい」と答えます。時間ベースのワンタイム パスワード (TOTP) を有効にします。
端末画面にQRコードが表示されます。ここで、モバイルデバイスの Google Authenticator アプリが活躍します。それを開いて、右下隅にある「+」アイコンをクリックします。
「QR コードをスキャン」と「セットアップ キーを入力」という 2 つのオプションが表示されます。端末に表示される QR コードが大きすぎて、デバイスから直接スキャンするのが難しい場合が多いため、「セットアップ キーを入力する」オプションを選択します。先に進んでクリックしてください。
「アカウント」フィールドに、「my2fa」などの任意の名前を入力します。次に、モバイル デバイスの Google 認証システム アプリの [キー] フィールドに、端末からの [新しい秘密キーは] 行にあるコードを入力します。最後に、[追加] ボタンをクリックします。
これに応じて、アプリは 6 桁のコードを生成します。
ターミナルにこのコードを入力し、「Enter」を押します。
「コードが確認されました」というメッセージが表示されます。さらに、5 つの緊急コードが表示されますので、書き留めて安全な場所に保管することをお勧めします。
これらのコードは 1 回限りで、コード生成のためにモバイル デバイスが手元にない場合などに SSH アクセスを許可します。 「.google_authenticator」ファイルを更新するように求められたら、「y」と応答します。
次の質問では、セキュリティを強化するために、再び「y」と答えて、同じコードの複数回の使用を無効にすることを確認します。
Google Authenticator の次の設定オプションは、30 秒の時間枠 (生成の瞬間からの各トークンの有効性) に収まらなかった場合に、以前に生成されたコードを使用する可能性に関するものです。
ただし、このオプションではセキュリティが低下するため、「n」と返信することを強くお勧めします。
最後に、「y」と答えるとレート制限が有効になり、30 秒以内に最大 3 回のログイン試行が許可され、SSH サーバーに対するブルート フォース攻撃が成功する可能性が最小限に抑えられます。
Google Authenticator のセットアップが完了したので、次は 2 要素認証を許可するように SSH サーバー自体の構成に進みます。
ステップ 4: 2 要素認証を使用するように SSH を構成する
SSH サーバー構成ファイルを開いて、お好みの端末のテキスト エディターで編集します。
sudo vim /etc/ssh/sshd_config
ここで行うことは、次の 2 つの構成値を追加または変更することです。
KbdInteractiveAuthentication yes
ChallengeResponseAuthentication yes
ファイル内に 2 つの設定のいずれかが見つかった場合は、その値を「はい」に変更します。そこにない場合は、以下の例のようにファイルの末尾に追加し、ファイルを保存して終了します。
ここで、これら 2 つのオプションの意味を詳しく見てみましょう。
- KbdInteractiveAuthentication – SSH で有効にすると、サーバーが 2FA 対話型プロセスに参加できるようになります。たとえば、パスワード (最初の要素) を入力した後、サーバーは 2FA アプリからのコード (2 番目の要素) を要求する場合があります。
- ChallengeResponseAuthentication – 有効にすると、SSH サーバーは認証にチャレンジ/レスポンス方式を使用できます。これには、ユーザーがチャレンジに応じて情報を入力するように求められる、キーボード対話型認証などの方法が含まれます。つまり、この場合、SSH サーバーはユーザーに 2FA アプリによって生成されたコードの入力を求めることができます。
最後に、SSH サーバーを再起動すると、SSH サーバーの 2 要素認証を設定する最後のステップに進むことができます。
sudo systemctl restart ssh
ステップ 5: SSH の 2 要素認証用に PAM をセットアップする
PAM (Pluggable Authentication Modules) は、SSH の認証プロセスで重要な役割を果たし、認証のための柔軟なモジュール式フレームワークを提供します。これは、SSH がハードコーディングされた認証方法を持つ代わりに、PAM を使用して、必要に応じてさまざまな認証メカニズムをプラグインすることを意味します。
したがって、最後のステップは、SSH 2FA を許可するように設定することです。このために、その構成ファイルを開きます。
sudo vim /etc/pam.d/sshd
次に、先頭に次の行を追加する必要があります。
auth required pam_google_authenticator.so
ファイルを保存して終了し、最後の最もエキサイティングな部分に進みます。
ステップ 6: SSH 2FA のテスト
それでは、すべてが正しく動作しているかどうかを確認してみましょう。リモート マシンからこれを行うには、2 要素認証を使用するように構成されたサーバーへの SSH 接続を確立してみてください。
確認コードの入力を求められます。モバイルデバイスで Google Authenticator アプリを開き、表示されている 6 桁のコードを端末に入力します。入力しても画面に表示されません。
次に、ユーザーのパスワードを入力する必要があります。正しいものを入力すると、サーバーへの SSH アクセスが可能になります。
systemd ログで内部で何が起こっているかを見ると、ログイン プロセスが正常に動作していることがわかります。 Google Authenticator からの 2 要素認証コードとユーザーのパスワードが正常に受け入れられました。
ただし、正しいパスワードを入力しても間違ったコードを使用した場合でも、systemd ログに示されているように、サーバーへの SSH 接続は許可されません。
素晴らしい仕事です! 2 要素 SSH 認証が正常に設定され、サーバーがより安全になり、不正アクセスから十分に保護されました。
オプション: SSH 2FA でのキーベースの認証の関与
さて、私たちはかなりの進歩を遂げてきましたが、状況をさらに改善することはできます。 2 要素認証プロセスに SSH キーを追加しましょう。これにより、セキュリティ層が追加され、同時にユーザーのパスワードに依存するという安全性の低いアプローチが回避されます。
これを実現するには、生成された秘密鍵と公開鍵のペアがすでに存在し、サーバーへのパスワードなしの SSH 認証がセットアップおよび実行されていることが前提となります。ただし、まだお持ちでない場合は、すばやく簡単に作成できるようにガイドを用意しました。さて、本題に戻ります。
まず、「/etc/ssh/sshd_config」ファイルを開き、「PasswordAuthentication」オプションを「no」に設定します。下の画像。
これにより、SSH サーバーに対してパスワード認証を無効にするよう指示され、ユーザーは通常のユーザー名とパスワードを使用してログインできなくなります。代わりに、SSH キーベースの認証などの代替認証方法を使用する必要があります。
次に、以下に示すオプションを「sshd_config」ファイルに追加します。
AuthenticationMethods publickey,keyboard-interactive
- AuthenticationMethods: ユーザーにアクセスを許可するために正常に完了する必要がある認証方法を指定します。
- 公開キー: これは、最初の認証方法が公開キー認証に基づいていることを示します。
- キーボードインタラクティブ: これは、「公開キー」メソッドが正常に完了した後に必要な 2 番目の認証方法です。通常、ユーザーはプロンプトに応じて情報を入力します。私たちの場合、これには、Google Authenticator アプリによって生成された 2FA コードの導入が含まれます。
ファイルを保存して閉じ、SSH サービスを再起動します。
sudo systemctl restart ssh
次に、「/etc/pam.d/sshd」ファイルを開き、「@include common-auth」という行を見つけて、その前にコメント マーク (#) を入力します。それ。これにより、PAM がユーザーのアカウントのパスワードを使用してログインできなくなります。
次に、SSH 経由で再度ログインしてみてください。すると魔法が起こります。ユーザーパスワードの入力を求めるプロンプトは表示されなくなりました。
モバイル デバイスの Google Authenticator アプリから生成された 6 桁のコードを入力するだけでログインできます。SSH キーはバックグラウンドでサーバーに自動的に送信されます。
ただし、この方法を実装する前に、SSH サーバーへのパスワードなしの認証を設定する必要があることをもう一度明確にします。
結論
SSH アクセス用の 2 要素認証 (2FA) の設定は、リモート接続のセキュリティを強化するために不可欠です。この記事では、Google Authenticator の構成、SSH サーバー設定の変更、SSH の 2FA 用の PAM のセットアップの手順について詳しく説明しました。
その結果、SSH サーバーはブルート フォース攻撃や不正アクセスの試みに対して十分に保護されるようになります。さらに、キーベースの認証を SSH 2FA プロセスに組み込むことで、パスワードのみへの依存を超えてセキュリティ層が追加されます。
お時間をいただきありがとうございました!いつものように、フィードバックやコメントを大歓迎です。