SSHキー作成で始める!安全なサーバー管理入門

はい、承知いたしました。SSHキーペアの作成から、それを用いた安全なサーバー管理までを網羅した記事を作成します。


SSHキー作成で始める!安全なサーバー管理入門

インターネットを通じてサーバーを管理する上で、セキュリティは最重要課題です。従来のパスワード認証は、ブルートフォースアタックや辞書攻撃に対して脆弱であり、サーバーへの不正アクセスを招くリスクがあります。そこで、より安全な認証方式としてSSHキーペア認証が広く採用されています。

この記事では、SSHキーペア認証の基本的な概念から、具体的な作成方法、サーバーへの設定、そして安全な運用方法までを網羅的に解説します。初心者の方でも安心して始められるように、図解を交えながら丁寧に説明します。

1. SSHキーペア認証とは?

SSH(Secure Shell)は、ネットワーク経由で安全にサーバーにアクセスするためのプロトコルです。従来のパスワード認証では、ユーザー名とパスワードを入力して認証を行いますが、SSHキーペア認証では、公開鍵秘密鍵という一対の鍵を使用します。

1.1. 公開鍵と秘密鍵の仕組み

  • 公開鍵: サーバーに登録する鍵で、誰でも入手できます。公開鍵で暗号化したデータは、対応する秘密鍵でのみ復号できます。
  • 秘密鍵: ユーザー自身が厳重に保管する鍵で、絶対に他人に知られてはいけません。秘密鍵は、公開鍵で暗号化されたデータの復号や、サーバーへの認証に使用されます。

SSHキーペア認証のプロセスは以下のようになります。

  1. クライアント(あなたのPCなど)でSSHキーペア(公開鍵と秘密鍵)を作成します。
  2. 作成した公開鍵をサーバーに登録します。
  3. クライアントからサーバーへSSH接続を試みます。
  4. サーバーは、クライアントの公開鍵に対応する秘密鍵を持っているかどうかを確認します。
  5. クライアントは、秘密鍵を使ってサーバーからのチャレンジに応答します。
  6. 認証に成功すると、サーバーへのアクセスが許可されます。

1.2. パスワード認証との違い

特徴 パスワード認証 SSHキーペア認証
認証方式 ユーザー名とパスワード 公開鍵と秘密鍵
安全性 ブルートフォースアタックに弱い ブルートフォースアタックに強い
利便性 容易に設定できる 初期設定に手間がかかるが、自動化しやすい
管理の複雑さ パスワードポリシーの管理が必要 秘密鍵の管理が重要
多要素認証との連携 容易に連携可能(パスワード+認証アプリなど) 秘密鍵にパスフレーズを設定することで、多要素認証に近い効果が得られる

1.3. SSHキーペア認証のメリット

  • 高い安全性: ブルートフォースアタックや辞書攻撃に対して非常に強い耐性があります。秘密鍵が漏洩しない限り、不正アクセスはほぼ不可能となります。
  • 利便性の向上: パスフレーズを設定することで、毎回パスワードを入力する手間が省けます。また、スクリプトや自動化ツールと連携しやすくなります。
  • 複数ユーザーでの利用: 各ユーザーが独自のSSHキーペアを持つことができるため、ユーザーごとのアクセス権限を細かく制御できます。

2. SSHキーペアの作成

SSHキーペアは、クライアント側(あなたのPCなど)で作成します。ここでは、Linux、macOS、Windowsの各環境での作成方法を解説します。

2.1. Linux/macOSの場合

LinuxおよびmacOSでは、ターミナルを使用してSSHキーペアを作成します。

  1. ターミナルを開く: ターミナルアプリケーションを起動します。
  2. ssh-keygenコマンドを実行: 以下のコマンドを入力して実行します。

    bash
    ssh-keygen -t rsa -b 4096 -C "[email protected]"

    • -t rsa: RSAアルゴリズムを使用することを指定します。RSAは、一般的で安全な暗号化アルゴリズムです。
    • -b 4096: 鍵のビット数を指定します。4096ビットは、現代のセキュリティ基準を満たす推奨されるサイズです。
    • -C "[email protected]": コメントを追加します。通常は、自分のメールアドレスを入力します。これは、鍵の識別に使用されます。
  3. 保存場所とファイル名を指定: プロンプトが表示されたら、鍵を保存する場所とファイル名を指定します。デフォルトの場所(~/.ssh/id_rsa)のままEnterキーを押すと、id_rsa(秘密鍵)とid_rsa.pub(公開鍵)というファイル名で保存されます。別の場所やファイル名を指定することもできます。

    Generating public/private rsa key pair.
    Enter file in which to save the key (/Users/your_username/.ssh/id_rsa):

  4. パスフレーズを設定: パスフレーズを設定するかどうかを尋ねられます。パスフレーズを設定すると、秘密鍵を使用する際に毎回パスフレーズの入力が必要になりますが、セキュリティが向上します。パスフレーズを設定する場合は入力し、設定しない場合はEnterキーを2回押します。

    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:

  5. キーペアの作成完了: ターミナルに鍵のフィンガープリントが表示され、キーペアの作成が完了します。

    Your identification has been saved in /Users/your_username/.ssh/id_rsa
    Your public key has been saved in /Users/your_username/.ssh/id_rsa.pub
    The key fingerprint is:
    SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx [email protected]
    The key's randomart image is:
    +---[RSA 4096]----+
    | |
    | |
    | |
    | . |
    | o S . |
    | . o = o . |
    | o + B + E |
    |o = * =.o |
    |+oO+=+. |
    +----[SHA256]-----+

2.2. Windowsの場合

Windowsでは、PuTTYgenなどのSSHクライアントを使用してSSHキーペアを作成します。

  1. PuTTYgenをダウンロードしてインストール: PuTTYgenは、PuTTY(SSHクライアント)に付属している鍵生成ツールです。PuTTYの公式サイト(https://www.putty.org/)からダウンロードしてインストールします。
  2. PuTTYgenを起動: PuTTYgenアプリケーションを起動します。
  3. 鍵の種類を選択: “Type of key to generate”で、”RSA”を選択します。
  4. 鍵のビット数を指定: “Number of bits in a generated key”で、”4096″と入力します。
  5. Generateボタンをクリック: “Generate”ボタンをクリックし、指示に従ってマウスをランダムに動かします。これにより、ランダムな鍵が生成されます。
  6. パスフレーズを設定: “Key passphrase”と”Confirm passphrase”にパスフレーズを入力します。パスフレーズは、秘密鍵を使用する際に必要になります。
  7. 秘密鍵を保存: “Save private key”ボタンをクリックし、秘密鍵を保存します。拡張子は”.ppk”となります。
  8. 公開鍵を保存: 上部のテキストボックスに表示されている公開鍵をコピーし、テキストファイルに保存します。拡張子は”.pub”とします。

2.3. 秘密鍵の安全な保管

秘密鍵は、あなたのサーバーへのアクセスを許可する非常に重要なファイルです。以下の点に注意して、安全に保管してください。

  • 適切な場所に保管: 秘密鍵は、アクセス権限が制限された安全な場所に保管してください。例えば、Linux/macOSでは、~/.sshディレクトリに保管し、アクセス権限を700(所有者のみ読み書き実行可能)に設定します。
  • バックアップ: 秘密鍵を紛失した場合に備えて、バックアップを作成してください。ただし、バックアップも安全な場所に保管する必要があります。
  • パスフレーズの設定: 秘密鍵にパスフレーズを設定することで、万が一秘密鍵が漏洩した場合でも、パスフレーズを知らない限り悪用されるのを防ぐことができます。
  • クラウドストレージの利用: クラウドストレージに秘密鍵を保管する場合は、暗号化などのセキュリティ対策を必ず行ってください。

3. 公開鍵のサーバーへの登録

作成した公開鍵をサーバーに登録することで、SSHキーペア認証が有効になります。ここでは、一般的なLinuxサーバーへの登録方法を解説します。

3.1. authorized_keysファイルへの登録

公開鍵は、サーバー上の特定のファイルに登録する必要があります。このファイルは、通常~/.ssh/authorized_keysという名前で、ユーザーのホームディレクトリ内の.sshディレクトリに存在します。

  1. サーバーにSSHでログイン: パスワード認証でサーバーにSSHログインします。
  2. .sshディレクトリの作成: まだ.sshディレクトリが存在しない場合は、作成します。

    bash
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh

  3. authorized_keysファイルの作成または編集: authorized_keysファイルが存在しない場合は作成し、存在する場合は編集します。

    bash
    touch ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys

  4. 公開鍵の登録: クライアントで作成した公開鍵の内容をコピーし、authorized_keysファイルに追記します。公開鍵は、id_rsa.pubなどの拡張子を持つファイルに保存されています。

    bash
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    または、テキストエディタでauthorized_keysファイルを開き、公開鍵の内容をペーストすることもできます。

    注意: 公開鍵の内容をコピーする際は、改行が入らないように注意してください。

3.2. 公開鍵のコピー方法

公開鍵をサーバーにコピーする方法はいくつかあります。

  • 手動でコピー&ペースト: クライアントで公開鍵ファイルを開き、内容をコピーして、サーバー上のauthorized_keysファイルにペーストします。
  • scpコマンドを使用: scpコマンドを使用すると、クライアントからサーバーへファイルを安全にコピーできます。

    bash
    scp ~/.ssh/id_rsa.pub user@server_ip:~/.ssh/id_rsa.pub.temp
    ssh user@server_ip "cat ~/.ssh/id_rsa.pub.temp >> ~/.ssh/authorized_keys && rm ~/.ssh/id_rsa.pub.temp"

  • ssh-copy-idコマンドを使用: ssh-copy-idコマンドを使用すると、公開鍵を簡単にサーバーにコピーできます。

    bash
    ssh-copy-id user@server_ip

    ssh-copy-idコマンドは、多くのLinuxディストリビューションに標準でインストールされています。

3.3. 複数ユーザーでの利用

複数のユーザーが同じサーバーにアクセスする場合、各ユーザーが独自のSSHキーペアを作成し、それぞれの公開鍵をサーバーのauthorized_keysファイルに登録する必要があります。

ユーザーごとに個別の.sshディレクトリとauthorized_keysファイルを作成し、適切なアクセス権限を設定することで、ユーザーごとのアクセス制御が可能になります。

4. SSHキーペア認証の設定

公開鍵をサーバーに登録したら、SSHサーバーの設定を変更して、SSHキーペア認証を有効にします。

4.1. SSHサーバー設定ファイルの編集

SSHサーバーの設定ファイルは、通常/etc/ssh/sshd_configにあります。このファイルを編集するには、root権限が必要です。

bash
sudo nano /etc/ssh/sshd_config

4.2. 設定項目の変更

以下の設定項目を変更します。

  • PasswordAuthentication: パスワード認証を無効にするために、PasswordAuthentication noに変更します。
  • PubkeyAuthentication: 公開鍵認証を有効にするために、PubkeyAuthentication yesになっていることを確認します。
  • ChallengeResponseAuthentication: 対話型認証を無効にするために、ChallengeResponseAuthentication noに変更します。(必要に応じて)

PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no

4.3. SSHサーバーの再起動

設定ファイルを変更したら、SSHサーバーを再起動して、変更を適用します。

bash
sudo systemctl restart sshd

4.4. 接続確認

SSHキーペア認証でサーバーに接続できることを確認します。

bash
ssh user@server_ip

パスフレーズを設定している場合は、パスフレーズの入力が求められます。パスフレーズを入力すると、サーバーにログインできます。

5. SSHキーペア認証の運用

SSHキーペア認証を安全に運用するためには、以下の点に注意する必要があります。

5.1. 秘密鍵の保護

秘密鍵は、あなたのサーバーへのアクセスを許可する非常に重要なファイルです。以下の点に注意して、厳重に保護してください。

  • 安全な場所に保管: 秘密鍵は、アクセス権限が制限された安全な場所に保管してください。
  • パスフレーズの設定: 秘密鍵にパスフレーズを設定することで、万が一秘密鍵が漏洩した場合でも、悪用されるのを防ぐことができます。
  • 定期的なバックアップ: 秘密鍵を紛失した場合に備えて、定期的にバックアップを作成してください。ただし、バックアップも安全な場所に保管する必要があります。
  • 秘密鍵の共有禁止: 秘密鍵は、絶対に他人に共有しないでください。
  • 不要な秘密鍵の削除: 使用しなくなった秘密鍵は、速やかに削除してください。

5.2. 公開鍵の管理

公開鍵は、サーバーに登録する鍵ですが、管理を怠るとセキュリティリスクにつながる可能性があります。

  • 不要な公開鍵の削除: 退職したユーザーや、不要になった公開鍵は、速やかにサーバーから削除してください。
  • 公開鍵のリスト管理: サーバーに登録されている公開鍵のリストを定期的に確認し、不審な公開鍵がないか確認してください。
  • コメントの活用: 公開鍵にコメントを追加することで、誰の鍵であるかを識別しやすくすることができます。

5.3. アクセス制御

SSHキーペア認証を使用することで、ユーザーごとのアクセス権限を細かく制御できます。

  • sudo権限の制限: 不必要なユーザーにsudo権限を与えないようにしてください。
  • ポートフォワーディングの制限: SSHポートフォワーディングを使用すると、サーバー経由で別のサーバーにアクセスできます。不要なポートフォワーディングは、セキュリティリスクにつながる可能性があります。
  • TCP Forwardingの制限: /etc/ssh/sshd_config ファイルで AllowTcpForwarding noを設定することでポートフォワーディングを完全に無効化できます。

5.4. ログ監視

SSHサーバーのログを定期的に監視することで、不正アクセスや異常なアクティビティを早期に発見できます。

  • ログイン試行の監視: 不正なログイン試行がないか監視してください。
  • 異常なアクティビティの監視: 異常なファイルの変更や、不審なプロセスの起動などがないか監視してください。
  • 自動化ツール: ログ監視を自動化するツールを使用すると、効率的にログを監視できます。

5.5. 定期的なセキュリティアップデート

SSHサーバーを含む、サーバー全体のセキュリティアップデートを定期的に行ってください。

セキュリティアップデートには、脆弱性の修正やセキュリティ機能の改善が含まれています。

5.6. ファイアウォールの設定

ファイアウォールを設定して、SSHポートへのアクセスを制限することで、不正アクセスを防ぐことができます。

  • 許可されたIPアドレスからのアクセスのみ許可: 特定のIPアドレスからのアクセスのみを許可するように設定します。
  • ポートの変更: デフォルトのSSHポート(22番)を別のポートに変更することで、ブルートフォースアタックのリスクを軽減できます。

5.7. 多要素認証の導入

秘密鍵にパスフレーズを設定することで、多要素認証に近い効果が得られます。さらに、Google Authenticatorなどの認証アプリと連携することで、より強固な多要素認証を導入することも可能です。

6. まとめ

SSHキーペア認証は、サーバーのセキュリティを大幅に向上させるための非常に有効な手段です。この記事では、SSHキーペア認証の基本的な概念から、具体的な作成方法、サーバーへの設定、そして安全な運用方法までを網羅的に解説しました。

SSHキーペア認証を導入することで、パスワード認証の脆弱性を克服し、ブルートフォースアタックや辞書攻撃からサーバーを保護することができます。

安全なサーバー管理は、継続的な努力が必要です。定期的なセキュリティアップデートやログ監視、そして適切なアクセス制御を行うことで、サーバーを安全に運用し、ビジネスの継続性を確保することができます。

この記事が、あなたのサーバー管理のセキュリティ向上に役立つことを願っています。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール