この記事は、「VPSのセキュリティを段階的に高めていく」シリーズの続きとなる記事です。
これまでの記事では、SSHの鍵認証化やrootログインの禁止、
そしてfail2banによる不正アクセスの自動遮断など、
22番ポートを前提としたセキュリティ対策を進めてきました。
今回は、さらなるセキュリティ向上のため、
SSHの待受ポートをデフォルトの「22番」から別の番号へ変更する手順を解説します。
単純なポート変更に思えますが、
Ubuntu 24.04特有の仕様や、変更後のfail2banの設定追従など、
運用上つまずきやすい落とし穴がいくつか存在します。
私が実際に作業した際のトラブル(接続タイムアウトや拒否エラー)と、
その解決手順をベースに、安全に設定を変更する方法を整理します。
この記事では、以下の手順を分かりやすく解説します。
- 初心者でも安全な「変更するポート番号」の選び方
- OS(ufw)とVPSインフラの両方で通信を許可する方法
- Ubuntu 24.04特有の罠「ssh.socket」へ設定を反映させる手順
- ロックアウト(締め出し)を防ぐ、安全な旧ポートの閉鎖方法
- fail2banの強力なBANリストを消さずに、新ポートの監視へ移行する方法
SSHポートを変更する前の準備
SSHのポートを変更しても、サーバーまでの通信経路でブロックされてしまっては接続できません。まずは、変更するポート番号を決め、OSとVPSインフラの両方で新しいポートを通す準備をします。
変更するポート番号の決め方
ポート番号は「0番〜65535番」まで存在しますが、どれでも自由に使って良いわけではありません。大きく3つの範囲に分かれています。
- 0〜1023番(ウェルノウンポート) Web(80, 443)やメールなど、システムや主要なサービスで使われる予約済みの番号です。ここは避けてください。
- 1024〜49151番(登録済みポート) 特定のアプリケーションが使用するために登録されている番号です。空いていれば使えますが、将来別のアプリを入れた際に競合するリスクがあります。
- 49152〜65535番(動的・プライベートポート) 自由に利用できるポート範囲です。SSHのカスタムポートとしては、この範囲(49152〜65535)から適当な番号を選ぶのが最もおすすめです。
この記事では、例として変更後の新しいポート番号を「50022番」として解説します。実際に作業される際は、ご自身で決めた任意のポート番号に読み替えて進めてください。
OS側(ufw)で新しいポートを許可する
最初に、Ubuntu OS内部のファイアウォールであるufwで、新しいポートのTCP通信を許可します。
sudo ufw allow 50022/tcp
これでOS側の準備は完了です。しかし、これだけでは外部から接続することはできません。
VPS管理画面でポートを許可する
クラウドやVPS環境では、OSのファイアウォールとは別に、VPS事業者側が用意しているパケットフィルター(インフラレベルのファイアウォール)が存在します。
ご契約されているVPS事業者のコントロールパネル(ウェブ管理画面)にログインし、ネットワークやセキュリティの「接続許可ポート」設定を開き、TCPの新しいポート(例:50022番)を明示的に許可してください。
これを忘れると、ターミナルソフトから接続した際に通信がサーバーに到達する前に破棄され、タイムアウトエラー(WinSock Have Error #10060など)が発生します。
注意 OS(ufw)のポートを開けるだけでなく、必ずVPS側のコントロールパネルでも許可設定を行ってください。
私が利用しているConoHaのVPSのケースを簡単にご説明します。
ConoHaの場合、VPSのコントロールパネルの左側メニューの「セキュリティ」の中にある「セキュリティグループ」で、TCPの新しい番号を許可するセキュリティグループを作成します。

そのあと、VPSのサーバーに作成したセキュリティグループを適用させる流れになります。

SSH設定の変更と反映
通信の通り道ができたら、Ubuntu側のSSHサービスで新しいポートを待ち受けるように設定を変更します。
安全なポート変更設定
設定ミスやファイアウォールの設定漏れがあった場合、現在のSSH接続を切るとサーバーから完全に締め出されてしまう(ロックアウト)危険性があります。
これを防ぐため、一時的に「現在の22番ポート」と「新しいポート」の両方で待ち受ける安全な設定を行います。
SSHの設定ファイルを開きます。
sudo nano /etc/ssh/sshd_config
ファイルの中から Port の項目を探し、以下のように22番と新しいポート番号の両方を記述します。コメントアウト(#)がある場合は外してください。
Port 22
Port 50022
編集が終わったら保存して閉じます。
設定の反映(ssh.socketの罠に注意)
設定を変更した後は、システムに設定を反映させる必要があります。
以前のUbuntuであれば sudo systemctl restart ssh というコマンドで反映できましたが、Ubuntu 24.04ではこのコマンドを実行してもポート変更が反映されません。
これは、「systemd socket activation」という仕組みが採用されており、ポートの待ち受けをSSHサービス本体ではなく ssh.socket という仕組みが専任で行っているためです。反映されないまま接続しようとすると、接続拒否エラー(WinSock Have Error #10061など)になります。
新しい設定を読み込ませるには、以下のコマンドを順番に実行します。まずは、システム全体の設定を再読み込みします。
sudo systemctl daemon-reload
次に、ソケット自体を再起動します。
sudo systemctl restart ssh.socket
反映されたかどうか、以下のコマンドで状態を確認します。
sudo systemctl status ssh.socket
実行すると、以下のような結果が表示されます。情報量が多いですが、重要なのは Active と Listen の項目です。
example_user@example-server:~$ systemctl status ssh.socket
● ssh.socket - OpenBSD Secure Shell server socket
Loaded: loaded (/usr/lib/systemd/system/ssh.socket; enabled; preset: enabled)
(中略)
Active: active (running) since Sun 2026-03-08 07:34:08 JST; 5h 24min ago
Triggers: ● ssh.service
Listen: 0.0.0.0:50022 (Stream)
[::]:50022 (Stream)
0.0.0.0:22 (Stream)
[::]:22 (Stream)
(以下略)
Listen: の項目に、現在の 22 と新しい 50022 の両方が表示され、Active: active (running) となっていれば、両方のポートでの待ち受けは成功しています。
新しいポートでの接続確認
現在のターミナル(SSH接続)は開いたままにしておき、ターミナルソフトの新しいウィンドウ(またはタブ)を立ち上げます。
接続設定のポート番号を「50022」に変更し、無事にログインできることを確認してください。
旧ポート(22番)の閉鎖
新しいポートで確実にログインできることが確認できたら、不要になった22番ポートを閉じます。再度、SSHの設定ファイルを開きます。
sudo nano /etc/ssh/sshd_config
先ほど記述した Port 22 の行を削除するか、先頭に # を付けてコメントアウトし、保存します。
再び設定を反映させます。
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
ここで、22番ポートでの待ち受けが確実に終了しているか、再度ステータスを確認しておきましょう。
sudo systemctl status ssh.socket
実行結果の Listen: の項目に注目してください。以下のように22番の記述が消え、新しいポート(例:50022番)だけになっていれば成功です。
example_user@example-server:~$ systemctl status ssh.socket
(中略)
Listen: 0.0.0.0:50022 (Stream)
[::]:50022 (Stream)
(以下略)
OS側のSSHサービスが22番ポートを完全に閉じたことが確認できたら、次にufwで許可していた22番ポートの設定を削除します。
sudo ufw delete allow OpenSSH
または、ポート番号で指定している場合は以下のように削除します。
sudo ufw delete allow 22/tcp
最後に、VPS事業者のコントロールパネル(管理画面)からも、22番ポートの許可設定を削除します。これでSSHのポート変更作業は完了です。
fail2banの設定追従(必須作業)
SSHのポートを変更した場合、忘れてはならないのがfail2banの設定です。ここを見落とすと、システムが非常に危険な状態になります。
新しいポートの監視設定
fail2banは、特にポートの指定がないとデフォルトで「22番ポートへのアクセスを監視・遮断」するように動きます。
つまり、SSHのポートを変更したのにfail2banの設定を変え忘れると、新しいポートへの攻撃を検知できても、すでに閉鎖した22番ポートばかりを遮断し続けることになります。肝心の新しいポートは攻撃され放題(丸腰)になってしまうため、必ず設定を変更します。
fail2banのカスタマイズ用設定ファイルを開きます。
sudo nano /etc/fail2ban/jail.local
[sshd] のセクションを見つけ、監視するポートを新しいポート番号に変更(または追記)します。
[sshd]
enabled = true
port = 50022
maxretry = 5
findtime = 10m
bantime = 1h
保存してエディタを閉じます。
BANリストを消さずに設定を反映する
fail2banの設定を変更した後、習慣的に sudo systemctl restart fail2ban を実行してしまいがちですが、実運用ではこれはおすすめしません。
サービスを再起動(restart)すると、環境によってはfail2banが現在BANしている悪意あるIPアドレスのリストがすべてリセット(解放)されてしまう可能性があるためです。
稼働中のサービスを止めず、現在の強力なBANリストを維持したまま、変更したポート設定だけを安全に再読み込みさせるには、以下の専用コマンドを使用します。
sudo fail2ban-client reload
再読み込みが完了したら、正常に反映され、BANリストが維持されているかを確認します。
sudo fail2ban-client status sshd
Currently banned: の項目に、設定変更前と同じ数のIPアドレスが表示されていれば、BANリストを維持したまま新しいポートでの監視への移行が成功しています。
まとめ
VPSのSSHポート変更は、設定ファイルの書き換えだけでなく、OSとインフラ側での二重のファイアウォール設定や、Ubuntu 24.04特有の ssh.socket への対応など、つまずきやすいポイントが複数あります。
また、設定を変更して満足するのではなく、fail2banなどのセキュリティツールが新しい環境に追従できているかを確認することが、実運用では最も重要です。
設定変更の際は、現在の接続を維持したままテスト接続を行うなど、締め出しを防ぐ手順を必ず守って進めてみてください。
次回は、Nginx環境におけるさらなる防御策として、隠しファイルへのアクセスブロックやセキュリティヘッダーの追加について解説します。



コメント