VPSを借りたあとにやっておきたい最初の作業のひとつが、SSH のセキュリティ強化です。Ubuntu のデフォルト設定では、パスワード認証が有効のまま Port 22 が開いており、インターネットに公開すると数分でブルートフォース攻撃を受け始めます。
本記事では、ubuntu:24.04 の Docker コンテナで実際にコマンドを動かして取得した設定値をもとに、SSH セキュリティを強化する設定を10項目まとめました。作業前に「どこが危ないか」を理解してから進めると、設定の意味がぐっとつかみやすくなります。
注意
本記事の設定は Ubuntu 24.04 LTS(Noble Numbat)で検証しています。作業中に SSH 接続が切れると締め出しになります。必ずコンソール(VPS のウェブコンソール等)を別タブで開いた状態で作業してください。
この記事のポイント
- Ubuntu 24.04 のデフォルト sshd_config は
PasswordAuthenticationが未設定(= 有効)。そのまま放置は危険 - SSH 鍵認証に切り替える前に鍵ペアを作り、接続できることを確認してからパスワード認証を無効化する
- Port 変更 + fail2ban + UFW を組み合わせることで攻撃ログのノイズが劇的に減る
- Ubuntu 24.04 の OpenSSH は 9.6p1。Ed25519 鍵が標準対応で最も推奨される鍵形式
/etc/ssh/sshd_config.d/に追加ファイルを置く方式で管理するとメインファイルを汚さない
目次
- 前提環境と確認コマンド
- デフォルト設定の確認(ここが危ない)
- 設定①:ポートを変更する
- 設定②:rootログインを禁止する
- 設定③④:SSH鍵を作成して鍵認証に切り替える
- 設定⑤:パスワード認証を無効化する
- 設定⑥:認証試行回数を制限する
- 設定⑦:タイムアウトを設定する
- 設定⑧:X11フォワーディングを無効化する
- 設定⑨:fail2ban でブルートフォース対策
- 設定⑩:UFW でポートを絞る
- 設定後の動作確認
- よくあるトラブルと解決策
- まとめ
前提環境と確認コマンド
本記事の検証環境は次の通りです。実際にコンテナで OpenSSH をインストールして動かした結果をそのまま載せています。
| 項目 | 値 |
|---|---|
| OS | Ubuntu 24.04.4 LTS (Noble Numbat) |
| OpenSSH バージョン | OpenSSH_9.6p1 Ubuntu-3ubuntu13.16 |
| OpenSSL バージョン | OpenSSL 3.0.13 30 Jan 2024 |
| apt パッケージ | openssh-server 1:9.6p1-3ubuntu13.16 |
| 検証環境 | docker run –rm ubuntu:24.04 | 2026-06-14 |
まず自分のサーバーの SSH バージョンを確認しましょう。
Distributor ID: Ubuntu
Description: Ubuntu 24.04.4 LTS
Release: 24.04
$ ssh -V
OpenSSH_9.6p1 Ubuntu-3ubuntu13.16, OpenSSL 3.0.13 30 Jan 2024
$ dpkg -l openssh-server | grep ‘^ii’
ii openssh-server 1:9.6p1-3ubuntu13.16 amd64 secure shell (SSH) server

Ubuntu 22.04 と 24.04 では OpenSSH のバージョンが大きく異なります。24.04 には 9.6p1 が搭載されており、セキュリティ面での改善が多数入っています。

デフォルト設定の確認(ここが危ない)
まずデフォルトの sshd_config を確認します。Ubuntu 24.04 では、コメント行を除くとわずか 7 行しか設定がありません。
Include /etc/ssh/sshd_config.d/*.conf
KbdInteractiveAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
ここで気づくポイントが 2 つあります。
PasswordAuthenticationが書かれていない → デフォルトはyes(パスワード認証が有効)X11Forwarding yesが有効になっている → GUI 転送が必要なければ無効化すべき
設定①:ポートを変更する
SSH のデフォルトポートは 22 です。インターネット上の自動スキャンボットの大半は Port 22 のみを対象にしているため、ポートを変えるだけで攻撃ログのノイズが劇的に減ります。ただし根本的なセキュリティ強化ではなく、あくまでも「目立たなくする」効果です。
# 以下を追記(ファイルがなければ新規作成)
Port 2222
# Ctrl+X → Y → Enter で保存
$ sudo sshd -t
(エラーが出なければ設定構文 OK)
$ sudo systemctl restart ssh
注意:ポート変更後は UFW も更新する
ポートを変更したら、必ず新しいポートを UFW で開放し、古い Port 22 を閉じてから systemctl restart ssh してください。詳しくは設定⑩で解説します。
/etc/ssh/sshd_config.d/ 配下に別ファイルを置く方式は Ubuntu 24.04 で標準的なやり方です。メインの sshd_config を直接書き換えないため、OS アップデート時に上書きされるリスクがありません。
設定②:rootログインを禁止する
PermitRootLogin は Ubuntu 24.04 のデフォルトで prohibit-password(鍵認証での root ログインは許可)になっています。これを no に変更し、root への直接 SSH を完全に禁止します。
PermitRootLogin no
代わりに、一般ユーザーでログインして sudo su - または sudo コマンドで root 権限を取る運用にします。
設定③④:SSH鍵を作成して鍵認証に切り替える
パスワード認証を無効化する前に、必ず SSH 鍵ペアを作成してサーバーに登録しておきます。この順番を間違えると締め出しになります。
③ 鍵ペアを作成する(ローカル PC 側)
鍵の種類は Ed25519 が最も推奨されます。Ubuntu 24.04 の OpenSSH 9.6p1 でも Ed25519 が標準対応しており、RSA より鍵サイズが小さく、現代的な楕円曲線暗号で安全性が高いです。
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519): [Enter]
Enter passphrase (empty for no passphrase): [パスフレーズを入力]
Enter same passphrase again: [再入力]
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
SHA256:zp4LdQMFbwbGRCGRMgoHEugRH0wXoraeQ78xELbAbcE your_email@example.com
$ ls -la ~/.ssh/id_ed25519*
-rw——- 1 user user 411 id_ed25519 ← 秘密鍵(絶対に他人に見せない)
-rw-r–r– 1 user user 98 id_ed25519.pub ← 公開鍵(サーバーに登録する)

実測では、ed25519 の公開鍵は 98 バイト、RSA 4096 は 742 バイトでした。ed25519 は鍵が小さいにもかかわらず強度は十分です。
④ 公開鍵をサーバーに登録する
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “~/.ssh/id_ed25519.pub”
Number of key(s) added: 1
Now try logging into the machine, with: “ssh ‘user@your-server-ip'”
# ssh-copy-id が使えない場合の手動登録
$ cat ~/.ssh/id_ed25519.pub | ssh user@your-server-ip “mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys”
drwx—— 2 ubuntu ubuntu 4096 Jun 14 03:00 .
-rw——- 1 ubuntu ubuntu 98 Jun 14 03:00 authorized_keys
# パーミッションが 700(.ssh)/ 600(authorized_keys)であることを確認
鍵でログインできることを確認したら、次のステップに進みます。
設定⑤:パスワード認証を無効化する
鍵認証でログインできることを確認してから行います。これを先にやると締め出されます。
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
$ sudo sshd -t && sudo systemctl restart ssh
(エラーなし → 再起動完了)
重要:別のターミナルで接続テストをしてから現在のセッションを閉じる
設定変更後は今のセッションを開いたまま、別ターミナルから ssh -i ~/.ssh/id_ed25519 user@server で鍵認証ログインできることを確認してください。確認できてから現在のセッションを閉じます。
設定⑥:認証試行回数を制限する
デフォルトの MaxAuthTries は 6 です。これを 3 に減らすことで、1 接続あたりの認証試行回数を制限します。
MaxAuthTries 3
MaxSessions 5
設定⑦:タイムアウトを設定する
長時間放置したセッションが残り続けるのを防ぎます。5 分間(300 秒)操作がなければキープアライブを送り、2 回応答がなければ切断します。
ClientAliveInterval 300
ClientAliveCountMax 2
# 300秒 × 2回 = 600秒(10分)無応答で切断
設定⑧:X11フォワーディングを無効化する
デフォルトで X11Forwarding yes になっています。X11 フォワーディングは Linux の GUI アプリをリモートで表示する機能ですが、サーバー用途ではほぼ不要です。攻撃面を減らすために no にします。
X11Forwarding no
AllowTcpForwarding no
# ポートフォワーディングを使う場合は AllowTcpForwarding yes に戻す
設定⑨:fail2ban でブルートフォース対策
fail2ban は指定回数以上ログイン失敗した IP を自動的に iptables でブロックするツールです。Ubuntu 24.04 では 1.0.2 が apt で取得できます(docker run –rm ubuntu:24.04 で実測)。
(インストール中…)
Setting up fail2ban (1.0.2-3ubuntu0.1) …
$ fail2ban-client –version
Fail2Ban v1.0.2
# jail.local でカスタム設定(jail.conf は上書きしない)
$ sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600 # 1時間 ban
findtime = 600 # 10分以内に
maxretry = 3 # 3回失敗したら ban
[sshd]
enabled = true
port = 2222 # Port 変更した場合はここも合わせる
$ sudo systemctl enable fail2ban –now
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| \- Total failed: 0
\- Actions
|- Currently banned: 0
fail2ban の設定ファイルは jail.conf が本体ですが、OS アップデートで上書きされる場合があります。カスタマイズは必ず jail.local または jail.d/ 配下に書きます。
設定⑩:UFW でポートを絞る
UFW(Uncomplicated Firewall)は Ubuntu に標準搭載のファイアウォール管理ツールです。SSH のポートを変更した場合、新しいポートを開放してから古いポートを閉じます。
Status: inactive
# まず新しい SSH ポートを開放してから UFW を有効化する(順序が大事)
$ sudo ufw allow 2222/tcp # 新しい SSH ポート
$ sudo ufw allow 80/tcp # HTTP(必要なら)
$ sudo ufw allow 443/tcp # HTTPS(必要なら)
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
$ sudo ufw status verbose
Status: active
To Action From
— —— —-
2222/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
UFW を有効にする前に必ず SSH ポートを開放すること
ufw enable の前に ufw allow 2222/tcp をやらないと、UFW 有効化と同時に締め出されます。この順番は間違えないでください。
設定後の動作確認
ここまでの設定をまとめた /etc/ssh/sshd_config.d/hardening.conf と、設定適用後の確認コマンドです。
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
MaxAuthTries 3
MaxSessions 5
X11Forwarding no
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
$ sudo sshd -t
(エラーなし)
# SSH サービス再起動
$ sudo systemctl restart ssh
$ sudo systemctl status ssh
● ssh.service – OpenBSD Secure Shell server
Active: active (running)
# 鍵認証での接続テスト(別ターミナルから)
$ ssh -i ~/.ssh/id_ed25519 -p 2222 ubuntu@your-server-ip
Welcome to Ubuntu 24.04.4 LTS


よくあるトラブルと解決策
①「Connection refused」が出る
ポート変更後に接続できない場合、UFW や VPS 側のセキュリティグループが新しいポートをブロックしている可能性があります。
2222/tcp ALLOW Anywhere ← ポートが開いているか確認
$ sudo ss -tlnp | grep sshd
LISTEN 0 128 0.0.0.0:2222 0.0.0.0:* users:((“sshd”,pid=xxx))
# sshd が 2222 番で LISTEN しているか確認
②「Permission denied (publickey)」が出る
鍵認証が失敗する場合、authorized_keys のパーミッションが誤っているか、鍵の形式が合っていない可能性があります。
drwx—— 2 ubuntu ubuntu 4096 . ← 700 であること
-rw——- 1 ubuntu ubuntu 98 authorized_keys ← 600 であること
# パーミッションを修正する場合
$ chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
③ fail2ban で自分の IP が ban された
\- Banned IP list: 203.0.113.10 ← 自分の IP
# ban 解除
$ sudo fail2ban-client set sshd unbanip 203.0.113.10
1
# 自分の IP を ignoreip に追加して再発防止
$ sudo nano /etc/fail2ban/jail.local
ignoreip = 127.0.0.1/8 203.0.113.10 # 自分のIPを追加
まとめ
Ubuntu 24.04 の SSH セキュリティ強化について、実際に検証した設定をまとめました。
- デフォルトの Ubuntu 24.04 は
PasswordAuthenticationが未設定(= 有効)。真っ先に無効化する - SSH 鍵は Ed25519 形式が推奨。Ubuntu 24.04 の OpenSSH 9.6p1 で完全対応
- 設定は
/etc/ssh/sshd_config.d/hardening.confに書くと OS アップデートで消えない - 設定変更の順序:鍵作成 → 鍵ログイン確認 → パスワード認証無効化
- fail2ban(v1.0.2)と UFW を組み合わせると自動ブロックができて運用が楽になる
本格的にサーバーを運用するなら、セキュリティ設定のベースになる VPS 選びも大切です。
VPS の選び方・比較はをご覧ください。


コメント