32blogby StudioMitsu
security7 min read

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

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

SSHVPNVPSsecurity

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

目次

VPSを借りたら、最初にやるべきはSSHのセキュリティ強化だ。デフォルト設定のままSSHをインターネットに公開していると、ポート22に対するブルートフォース攻撃が 数分以内に 始まる。これは大げさではなく、VPSを立てたことがある人なら /var/log/auth.log で確認できる現実だ。

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

SSHのリスクを理解する

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

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

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

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

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

bash
adduser deploy
usermod -aG sudo deploy

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

text
PermitRootLogin no
AllowUsers deploy

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

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

ローカルマシンで鍵を生成する。Ed25519がおすすめだ。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を導入する

一定回数の認証失敗で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。これだけでブルートフォースの効率が劇的に落ちる。

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する習慣をつけるだけで、セキュリティは大幅に向上する。

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管理のセキュリティを根本から変える。

まとめ

レベル対策効果
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(広告・マルウェアブロック)