LinuxサーバーにおけるSSHセキュリティを強化するためのベストプラクティス

これらの不可欠なSSH強化技術を習得して、Linuxサーバーを直ちに保護しましょう。この専門家によるガイドでは、`sshd_config`の構成変更に焦点を当てた、実行可能な手順を提供します。リスクの高いrootログインを無効化する方法、推測されやすいパスワードを排除するための必須のキーベース認証の実装、デフォルトポートの変更、およびブルートフォース攻撃に対する効果的なレート制限のためのFail2Banのインストールについて学びます。SSHを堅牢で安全なチャネルに変革し、システムを保護しましょう。

LinuxサーバーのSSHセキュリティ強化のベストプラクティス

SSHは通常、Linuxサーバーで最初に開くドアです。そのため、ホストをインターネットに公開する前にSSHセキュリティを強化する必要があります。ボットは常に、ポート22で弱いパスワード、使い回された認証情報、デフォルトアカウントを試行しています。

目標はシンプルです:リモートアクセスを自分にとって使いやすく、攻撃者にとっては困難にすることです。2つ目のターミナルセッションから開始し、現在のSSHセッションを開いたままにして、デーモンを再起動する前にすべての変更をテストしてください。

最初に設定をバックアップしてテストする

/etc/ssh/sshd_configを編集する前に、バックアップを作成してください。タイプミスがあると、サーバーからロックアウトされる可能性があります。

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_$(date +%F)

編集後、構文を確認します:

sudo sshd -t

テストに合格したら、SSHをリロードまたは再起動します。サービス名は、RHEL系システムでは一般的にsshd、Debian/Ubuntuではsshです:

sudo systemctl restart sshd
# または
sudo systemctl restart ssh

1. rootログインを無効化する

直接のrootログインは、攻撃者に最初から最も価値のあるユーザー名を提供します。通常のユーザーアカウントを使用し、管理アクセスが必要な場合はsudoで権限昇格してください。

設定手順

/etc/ssh/sshd_configを開き、PermitRootLoginディレクティブを見つけます。その値をnoに変更します。

# 変更前:
# PermitRootLogin yes

# 変更後(ベストプラクティス):
PermitRootLogin no

SSHを再起動する前に、sudo権限を持つ標準ユーザーとしてログインできることを確認してください。

2. 鍵ベース認証を必須にする

パスワード認証は大規模に攻撃されやすいです。SSH鍵は推測が難しく、ローテーションが容易で、秘密鍵をパスフレーズで保護すれば日常的な管理においてより安全です。

鍵の生成とインストール

  1. ローカルマシンで鍵ペアを生成します:
    ssh-keygen -t ed25519 -C "[email protected]"
    
  2. 公開鍵をサーバーにコピーします:
    ssh-copy-id -i ~/.ssh/id_ed25519 user@your_server_ip
    

パスワード認証を無効化する

SSH鍵を使用して正常にログインできることを確認したら、パスワード認証を完全に無効化します。

# パスワードを無効化
PasswordAuthentication no

# 鍵が有効であることを確認
PubkeyAuthentication yes

Ed25519は新しい鍵の良いデフォルトです。古いシステムとの互換性のためにRSAが必要な場合は、4096ビットなどの大きな鍵を使用してください。

3. デフォルトのSSHポートを変更することを検討する

SSHをTCPポート22から非標準ポートに変更すると、ノイズの多い自動スキャンを減らすことができます。これは、鍵、アクセス制御、またはレート制限の代わりにはなりません。なぜなら、誰でもスキャンで開いているポートを発見できるからです。

設定手順

/etc/ssh/sshd_configで、Portディレクティブを変更します:

# 変更前:
# Port 22

# 変更後(非標準ポートの例):
Port 22222

SSHを再起動する前に、ファイアウォールとクラウドセキュリティグループを更新してください。そうしないと、新しいSSHデーモンが到達できないポートで待機している可能性があります。

firewalldを使用した例(CentOS/RHEL):

sudo firewall-cmd --permanent --add-port=22222/tcp
sudo firewall-cmd --reload

4. 特定のユーザーとグループへのアクセスを制限する

SSHを使用すべき人が少数しかいない場合は、sshd_configでそれを指定します。これにより、忘れられたローカルアカウントがリモートエントリポイントになるのを防ぎます。

設定ディレクティブ

sshd_configで以下のディレクティブの一方または両方を使用します:

  1. 特定のユーザーを許可:
    AllowUsers alice bob
    
  2. 特定のグループを許可:
    AllowGroups sshaccess admins
    

これらのディレクティブが存在する場合、明示的にリストされていないユーザーまたはグループはアクセスを拒否されます。

5. 最新のSSHデフォルトを維持し、レガシー方式を無効化する

現在のOpenSSHリリースはすでにSSHプロトコル2を使用しています。古いプロトコル1のサポートは最新のOpenSSHから削除されています。サポートされていないProtocolディレクティブや古い暗号リストを含む古い強化スニペットをコピーしないでください。これらはアップグレード後にSSHを壊す可能性があります。

必要な場合を除き、レガシーな信頼メカニズムを無効化することに焦点を当てます:

HostbasedAuthentication no
IgnoreRhosts yes
PermitEmptyPasswords no

組織がカスタム暗号、MAC、または鍵交換ポリシーを必要とする場合は、変更する前にインストールされているサーバーがサポートしているものを確認してください:

sshd -T | grep -E '^(ciphers|macs|kexalgorithms) '

次に、クライアントベースに一致するテスト済みのポリシーのみを適用します。厳しすぎるリストは、古い自動化ホストをロックアウトする可能性があります。

6. Fail2Banでレート制限を追加する

鍵ベース認証を使用していても、繰り返されるプローブはリソースを浪費し、ログを散らかします。Fail2Banは認証ログを監視し、繰り返しの失敗後に一時的なファイアウォール禁止を追加します。

  1. Fail2Banをインストールします:

    # Debian/Ubuntu
    sudo apt update && sudo apt install fail2ban
    
    # RHEL/CentOS/Fedora
    sudo dnf install fail2ban
    
  2. sshdジェイルを有効にします。多くのシステムにはデフォルト設定が付属していますが、ローカルのオーバーライドは/etc/fail2ban/jail.localまたは/etc/fail2ban/jail.d/の下のファイルに配置する必要があります。

    [sshd]
    enabled = true
    port = 22222
    maxretry = 5
    bantime = 1h
    
  3. サービスを開始します:

    sudo systemctl enable --now fail2ban
    

SSHポートを変更した場合は、Fail2Banのジェイルを新しいポートに一致させてください。

7. セッションと認証設定を調整する

これらの設定は、アイドルセッションを閉じ、弱い認証経路を排除するのに役立ちます:

ディレクティブ 推奨値 目的
ClientAliveInterval 300 300秒ごとにサーバー側のキープアライブチェックを送信します。
ClientAliveCountMax 3 3回の未応答チェック後に切断します。
UsePAM yes 追加のローカルシステムセキュリティポリシーに対してPluggable Authentication Modules(PAM)を有効にします。
PermitEmptyPasswords no 空のパスワードを持つアカウントのログインをブロックします。
MaxAuthTries 3 接続ごとの認証試行回数を制限します。
X11Forwarding no 実際に使用しない限り、X11転送を無効にします。

強化チェックリスト

このチェックリストを使用して、サーバーが基本的なSSH強化基準を満たしていることを確認してください:

  1. 変更を加える前にsshd_configをバックアップする。
  2. PermitRootLogin no を設定する。
  3. PasswordAuthentication no を設定する(鍵設定後)。
  4. Port を非標準の値に変更する。
  5. 新しいポートを許可するようにファイアウォールを更新する。
  6. AllowUsers または AllowGroups を使用してアクセスを制限する。
  7. HostbasedAuthenticationなどのレガシーな信頼方式を無効化する。
  8. Fail2Ban をインストールして設定する。
  9. 再起動前に sshd -t で設定を確認する。

SSHセキュリティの強化は、多層防御として最も効果的です。鍵はパスワード推測を防ぎ、ユーザー制限は接続できる人を減らし、ファイアウォールルールは接続元を制限し、Fail2Banは繰り返されるプローブを遅くします。テスト中は1つの動作中のセッションを開いたままにし、サーバーを操作するすべての人のために新しいポートとログイン方法を文書化してください。