Linux VPSでSSHを保護する方法
公開されているVPSには、稼働を開始してから数分以内に自動化されたログイン試行が届きます。以下の手順で、SSHへの攻撃を大幅に難しくできます。対象はUbuntuとDebianです。サーバーをまだ用意していない場合は、Linux VPSを借りると、クリーンなイメージから始められます。新しい設定を別のウィンドウでテストするまでは、現在のSSHセッションを開いたままにしてください。
1. sudo権限のある通常ユーザーを作成する
adduser deploy
usermod -aG sudo deploy2. パスワードではなくSSH鍵を使う
お使いのコンピューターで次を実行します。
ssh-keygen -t ed25519 -C "you@example.com"
ssh-copy-id deploy@YOUR_SERVER_IP
ssh deploy@YOUR_SERVER_IPパスワード認証を無効にする前に、鍵でログインできることを一度確認してください。
3. パスワードログインとroot口座のログインを無効にする
/etc/ssh/sshd_config.d/99-hardening.conf を作成します。
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
MaxAuthTries 3構文を確認してから、サービスを再読み込みします。サービス名は、UbuntuとDebianでは ssh、RHEL系では sshd です。
sudo sshd -t && sudo systemctl reload ssh2つ目のターミナルを開いて、再度ログインしてください。ログインできることを確認してから、古いセッションを閉じます。
4. ファイアウォールを有効にする
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose必要なポートだけを開けてください。Webサーバーの場合は、80と443が該当します。クラウドのコンソールでファイアウォールルールを設定し、SSHを自分のIPアドレスからの接続に限定することもできます。
5. Fail2banで繰り返しの失敗を遮断する
sudo apt install -y fail2ban/etc/fail2ban/jail.local を作成します。
[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 1hsudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd6. セキュリティ更新を自動で適用する
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades7. その他のオプション
- SSHのポート番号を変更すると、ログのノイズは減ります。ただし、それ自体はセキュリティ対策ではありません。
- 秘密鍵はパスフレーズで保護し、安全な場所にバックアップを保管してください。
lastとsudo journalctl -u ssh --since todayでログインを確認します。- サーバーの設定が完了したらスナップショットを取得しておくと、クリーンな状態に戻せます。
ロックアウトされた場合は、クラウドパネルのブラウザコンソールからログインし、設定を修正してください。次のレイヤーの防御については、DDoS対策ガイドを参照してください。
よくある質問
root口座のログインを無効にしても安全ですか?
はい。ただし、先にsudo用ユーザーを作成し、その鍵が機能することをテストしてください。管理コマンドは引き続き sudo で実行できます。
鍵認証だけを使う場合もFail2banは必要ですか?
必須ではありません。パスワードログインを無効にしていれば、総当たり攻撃は成功しません。ただし、Fail2banを使うと、ログのノイズと負荷を減らせます。
SSH鍵をなくした場合はどうすればよいですか?
クラウドパネルのコンソールからログインし、新しい公開鍵を ~/.ssh/authorized_keys に追加して、古い鍵を削除してください。