VPSを借りたら、最初にやるべきは SSH のセキュリティ強化だ。パスワード認証を無効にし、鍵認証を強制し、ファイアウォールでアクセスを制限する——この3ステップで攻撃の大半を防げる。
デフォルト設定のままSSHをインターネットに公開していると、ポート22に対するブルートフォース攻撃が 数分以内に 始まる。これは大げさではなく、VPSを立てて1時間後に /var/log/auth.log を見てみればわかる。数百回のログイン試行が記録されているはずだ。すべて自動ボットによる root への辞書攻撃だ。
この記事では、SSHのセキュリティを段階的に強化する方法を解説する。基本設定から、最終的にSSHポートをインターネットから完全に隠す方法まで。
SSHのリスクを理解する
SSHは強力なツールだが、インターネットに公開されている以上、常に攻撃対象だ。
| 攻撃手法 | 概要 |
|---|---|
| ブルートフォース | ユーザー名・パスワードの総当たり。自動化ボットが24時間スキャン |
| クレデンシャルスタッフィング | 他サービスから漏洩したパスワードでログイン試行 |
| ポートスキャン | 開放ポートを探索。22番が開いていれば即座にターゲット |
| 鍵の漏洩 | パスフレーズなしの秘密鍵が流出すると無認証でアクセス可能 |
Sucuriの調査によると、SSHを公開したサーバーは 1日あたり7万〜10万回 のログイン試行を受ける。適切な対策を施せば、これをほぼゼロにできる。
レベル1: 基本設定(必須)
最低限やるべき設定だ。これだけでブルートフォース攻撃の大半を防げる。
一般ユーザーを作成してrootログインを禁止する
adduser deploy
usermod -aG sudo deploy
/etc/ssh/sshd_config を編集する。
PermitRootLogin no
AllowUsers deploy
rootアカウントは最も狙われる。一般ユーザー経由でsudoを使う方が安全だ。
鍵認証に切り替えてパスワード認証を無効化する
ローカルマシンで鍵を生成する。Ed25519がおすすめだ。NISTがFIPS 186-5で標準署名アルゴリズムとして承認している。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を導入する
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。これだけでブルートフォースの効率が劇的に落ちる。より新しい選択肢として CrowdSec がある。全ユーザー間で匿名化された攻撃シグネチャを共有し、他のサーバーでブロックされた悪意あるIPを自動的に遮断できる。
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する習慣をつけるだけで、セキュリティは大幅に向上する。VPNの選び方やSSHとの組み合わせ方は「開発者のVPN活用ガイド」で詳しく解説している。
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管理のセキュリティを根本から変える。
SSHに限らず、開発者が意図せず個人情報を公開してしまう経路と対策は「開発者の個人情報が漏れる5つの経路と対策」でまとめている。LinuxサーバーでVPNを設定する具体的な手順は「NordVPN Linuxセットアップガイド」を参照してほしい。
鍵管理のベストプラクティスについては、NIST SP 800-57が暗号鍵のライフサイクル・ローテーション・保管に関する包括的なガイダンスを提供している。
FAQ
SSHポートを22番から変更する意味はある?
自動スキャンによるノイズは減るが、本質的なセキュリティ対策ではない。ポートスキャンを実行すれば変更先のポートは数秒で見つかる。スパム削減と考えるべきで、防御策ではない。鍵認証とfail2banとの併用が前提だ。
RSAとEd25519、どちらを使うべき?
Ed25519だ。高速で鍵が短く、NISTが FIPS 186-5 で標準として承認している。RSA-4096も安全だが、新しい鍵をわざわざRSAで作る理由はない。既存のRSA鍵はそのまま使って問題ない。
SSH鍵を紛失したらどうなる?
パスワード認証を無効にした状態で唯一の認証鍵を失うと、サーバーに入れなくなる。ほとんどのVPSプロバイダーはWebコンソールやリカバリーモードを提供しているので、そこから復旧できる。秘密鍵のバックアップを安全な場所に保管し、フォールバック用にセカンドキーを登録しておくのがベストだ。
鍵認証とパスワード認証は併用できる?
できる。OpenSSHは両方を同時にサポートしている。ただし、鍵認証の目的はパスワードベースの攻撃を排除することだ。パスワード認証を残すとセキュリティ上のメリットが大幅に薄れる。鍵認証の動作を確認したら、パスワード認証は無効にしよう。
fail2banとCrowdSecの違いは?
fail2banはローカルログを監視し、認証失敗が一定回数に達したIPをBANする。リアクティブで自己完結型だ。CrowdSecはコミュニティ層を追加する。全ユーザー間で匿名化された攻撃シグネチャを共有するため、既知の悪意あるIPを攻撃される前にブロックできる。複数サーバーを運用しているならCrowdSecのほうが現代的な選択だ。
Tailscale SSHは無料で使える?
使える。Tailscaleの個人プランは3ユーザー・100デバイスまで無料で、個人のVPS管理には十分だ。自動鍵管理やセッション記録を含むSSH機能も無料で利用できる。
VPNはSSH接続のたびに必要?
自宅やオフィスの信頼できるネットワークなら、SSH自体の暗号化で十分だ。ただし、カフェ・空港・コワーキングスペースなどの公共WiFiでは、VPNがネットワークレベルの攻撃から守る重要な暗号化レイヤーになる。信頼できないネットワークからリモート管理するときは、VPN接続してからSSHする習慣をつけよう。
まとめ
| レベル | 対策 | 効果 |
|---|---|---|
| 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(広告・マルウェアブロック)
関連記事: