VPSを借りたら、最初にやるべきはSSHのセキュリティ強化だ。デフォルト設定のままSSHをインターネットに公開していると、ポート22に対するブルートフォース攻撃が 数分以内に 始まる。これは大げさではなく、VPSを立てたことがある人なら /var/log/auth.log で確認できる現実だ。
この記事では、SSHのセキュリティを段階的に強化する方法を解説する。基本設定から、最終的にSSHポートをインターネットから完全に隠す方法まで。
SSHのリスクを理解する
SSHは強力なツールだが、インターネットに公開されている以上、常に攻撃対象だ。
| 攻撃手法 | 概要 |
|---|---|
| ブルートフォース | ユーザー名・パスワードの総当たり。自動化ボットが24時間スキャン |
| クレデンシャルスタッフィング | 他サービスから漏洩したパスワードでログイン試行 |
| ポートスキャン | 開放ポートを探索。22番が開いていれば即座にターゲット |
| 鍵の漏洩 | パスフレーズなしの秘密鍵が流出すると無認証でアクセス可能 |
レベル1: 基本設定(必須)
最低限やるべき設定だ。これだけでブルートフォース攻撃の大半を防げる。
一般ユーザーを作成してrootログインを禁止する
adduser deploy
usermod -aG sudo deploy
/etc/ssh/sshd_config を編集する。
PermitRootLogin no
AllowUsers deploy
rootアカウントは最も狙われる。一般ユーザー経由でsudoを使う方が安全だ。
鍵認証に切り替えてパスワード認証を無効化する
ローカルマシンで鍵を生成する。Ed25519がおすすめだ。RSAより短い鍵長で同等以上の安全性がある。
ssh-keygen -t ed25519 -C "deploy@myserver"
ssh-copy-id deploy@YOUR_SERVER_IP
接続テスト後、パスワード認証を無効にする。
PasswordAuthentication no
PubkeyAuthentication yes
設定を反映する。
sudo systemctl restart sshd
レベル2: 防御を厚くする
基本設定に加えて、攻撃の成功率をさらに下げる。
fail2banを導入する
一定回数の認証失敗でIPを自動BANする。
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
/etc/fail2ban/jail.local を編集する。
[sshd]
enabled = true
port = ssh
maxretry = 3
bantime = 3600
findtime = 600
3回失敗で1時間BAN。これだけでブルートフォースの効率が劇的に落ちる。
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
ファイアウォールを設定する
UFWで必要なポートのみ開放する。
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
SSHポートを変更する(オプション)
デフォルトの22番から別のポートに変更すると、自動スキャンの大半を回避できる。
Port 2222
ただし、これは「隠蔽によるセキュリティ」であり、本質的な防御ではない。ポートスキャンで見つかれば同じだ。やらないよりマシだが、過信しないこと。
認証試行回数を制限する
MaxAuthTries 3
LoginGraceTime 30
レベル3: SSHポートを完全に隠す
ここまでの設定でSSHは十分に安全だが、SSHポートをインターネットに公開しないのが最強の防御 だ。存在しないポートには攻撃できない。
VPN経由でのみSSH接続を許可する
VPNトンネル内でのみSSH接続を許可し、パブリック側のSSHポートを閉じる。
NordVPN のようなVPNを使えば、VPS管理時の通信が暗号化される。カフェや出先からVPS管理をする場合、VPNなしでSSH接続するのはリスクが高い。VPN接続してからSSHする習慣をつけるだけで、セキュリティは大幅に向上する。
Tailscaleで完全にポートを閉じる
より本格的な対策として Tailscale がある。WireGuard上に構築されたメッシュVPNで、SSHポートをパブリックインターネットから完全に隠蔽できる。
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --ssh
UFWでパブリック側のSSHを閉じる。
sudo ufw delete allow ssh
これでTailscaleネットワーク内からのみSSH接続が可能になる。パブリックインターネットからはSSHポートが存在しないのと同じ状態だ。
Tailscaleは個人利用なら無料(3ユーザー、100デバイスまで)。鍵管理の自動化やセッション記録機能もあり、VPS管理のセキュリティを根本から変える。
まとめ
| レベル | 対策 | 効果 |
|---|---|---|
| 1(必須) | 鍵認証 + パスワード無効化 + root禁止 | ブルートフォースの大半を排除 |
| 2(推奨) | fail2ban + ファイアウォール + ポート変更 | 残りの攻撃を大幅に削減 |
| 3(最強) | VPN経由 / Tailscaleでポートを閉じる | 攻撃不可能 |
レベル1は 全VPS管理者が必ずやるべき 設定だ。5分で終わる。レベル2まで実施すれば、一般的な攻撃はほぼ防げる。レベル3まで行けば、SSHポートはインターネットから見えなくなり、攻撃そのものが成立しない。
カフェや出先からVPSを管理するなら、NordVPNで通信を暗号化してからSSH接続する習慣をつけよう。それだけでセキュリティは確実に上がる。
世界最大級のVPN。高速・安全・使いやすい
- 6,400+サーバー(111カ国)
- 独自プロトコルNordLynx(WireGuardベース)
- Threat Protection Pro(広告・マルウェアブロック)