32blogby Studio Mitsu

SSHを安全にする完全ガイド:鍵認証からVPN経由まで

SSH接続のセキュリティを段階的に強化する方法。鍵認証、fail2ban、ファイアウォール設定、VPN経由接続まで、VPS管理者向けに解説する。

by omitsu13 min read

当記事にはアフィリエイト広告が含まれています

目次

VPSを借りたら、最初にやるべきは SSH のセキュリティ強化だ。パスワード認証を無効にし、鍵認証を強制し、ファイアウォールでアクセスを制限する——この3ステップで攻撃の大半を防げる。

デフォルト設定のままSSHをインターネットに公開していると、ポート22に対するブルートフォース攻撃が 数分以内に 始まる。これは大げさではなく、VPSを立てて1時間後に /var/log/auth.log を見てみればわかる。数百回のログイン試行が記録されているはずだ。すべて自動ボットによる root への辞書攻撃だ。

この記事では、SSHのセキュリティを段階的に強化する方法を解説する。基本設定から、最終的にSSHポートをインターネットから完全に隠す方法まで。

デフォルトSSHポート22公開・パスワード認証攻撃を受ける脆弱性ブルートフォース・鍵漏洩対策を適用段階的強化鍵認証・fail2ban・FW堅牢な状態へ安全なサーバーVPN経由のみ許可

SSHのリスクを理解する

SSHは強力なツールだが、インターネットに公開されている以上、常に攻撃対象だ。

攻撃手法概要
ブルートフォースユーザー名・パスワードの総当たり。自動化ボットが24時間スキャン
クレデンシャルスタッフィング他サービスから漏洩したパスワードでログイン試行
ポートスキャン開放ポートを探索。22番が開いていれば即座にターゲット
鍵の漏洩パスフレーズなしの秘密鍵が流出すると無認証でアクセス可能

Sucuriの調査によると、SSHを公開したサーバーは 1日あたり7万〜10万回 のログイン試行を受ける。適切な対策を施せば、これをほぼゼロにできる。

レベル1: 基本設定(必須)

最低限やるべき設定だ。これだけでブルートフォース攻撃の大半を防げる。

一般ユーザーを作成してrootログインを禁止する

bash
adduser deploy
usermod -aG sudo deploy

/etc/ssh/sshd_config を編集する。

text
PermitRootLogin no
AllowUsers deploy

rootアカウントは最も狙われる。一般ユーザー経由でsudoを使う方が安全だ。

鍵認証に切り替えてパスワード認証を無効化する

ローカルマシンで鍵を生成する。Ed25519がおすすめだ。NISTがFIPS 186-5で標準署名アルゴリズムとして承認している。RSAより短い鍵長で同等以上の安全性がある。

bash
ssh-keygen -t ed25519 -C "deploy@myserver"
ssh-copy-id deploy@YOUR_SERVER_IP

接続テスト後、パスワード認証を無効にする。

text
PasswordAuthentication no
PubkeyAuthentication yes

設定を反映する。

bash
sudo systemctl restart sshd

レベル2: 防御を厚くする

基本設定に加えて、攻撃の成功率をさらに下げる。

fail2banを導入する

fail2banは、一定回数の認証失敗でIPを自動BANする。

bash
sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

/etc/fail2ban/jail.local を編集する。

text
[sshd]
enabled = true
port = ssh
maxretry = 3
bantime = 3600
findtime = 600

3回失敗で1時間BAN。これだけでブルートフォースの効率が劇的に落ちる。より新しい選択肢として CrowdSec がある。全ユーザー間で匿名化された攻撃シグネチャを共有し、他のサーバーでブロックされた悪意あるIPを自動的に遮断できる。

bash
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

ファイアウォールを設定する

UFWで必要なポートのみ開放する。

bash
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

SSHポートを変更する(オプション)

デフォルトの22番から別のポートに変更すると、自動スキャンの大半を回避できる。

text
Port 2222

ただし、これは「隠蔽によるセキュリティ」であり、本質的な防御ではない。ポートスキャンで見つかれば同じだ。やらないよりマシだが、過信しないこと。

認証試行回数を制限する

text
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ポートをパブリックインターネットから完全に隠蔽できる。

bash
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --ssh

UFWでパブリック側のSSHを閉じる。

bash
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接続する習慣をつけよう。それだけでセキュリティは確実に上がる。

NordVPN

世界最大級のVPN。高速・安全・使いやすい

  • 6,400+サーバー(111カ国)
  • 独自プロトコルNordLynx(WireGuardベース)
  • Threat Protection Pro(広告・マルウェアブロック)

関連記事: