SSHのデフォルトポート22番は攻撃者がまず最初にスキャンするポートです。変更するだけでブルートフォース攻撃の試行回数を大幅に減らせます。
この記事では、sshd_configでSSHポートを変更する手順をステップごとに解説します。firewall-cmdによるポート開放、SELinuxへの対応、接続確認の方法まで実行例付きでまとめます。RHEL 9.4 / Rocky Linux 9で動作確認済みです。
・/etc/ssh/sshd_config でSSHポート番号を変更する手順
・firewall-cmdで新ポートを開放し、旧22番を閉じる方法
・SELinuxが有効な環境での semanage による設定追加
・接続確認の手順とロックアウトを防ぐ安全な切り替え方法
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
SSHポート変更の全体手順を把握する
ポート変更は「設定変更→サービス再起動→ポート開放→接続確認→古いポートを閉じる」の順番で行います。順番を間違えると自分がロックアウトされるため、全体の流れを把握してから作業してください。
| 手順 | 作業内容 |
|---|---|
| 1 | sshd_config で Port を変更する |
| 2 | SELinuxで新ポートを許可する(SELinux有効時のみ) |
| 3 | firewall-cmdで新ポートを開放する |
| 4 | sshdを再起動する |
| 5 | 別ウィンドウから新ポートで接続確認する |
| 6 | firewall-cmdでデフォルト22番ポートを閉じる |
sshd_configでSSHポートを変更する
1. sshd_configを開く
# sshd_configファイルを開きます [root@server1 ~]# vi /etc/ssh/sshd_config
2. Port行を変更する
ファイル内の Port 行を探します(コメントアウトされている場合もあります)。# デフォルトのPort設定(コメントアウトされている場合が多い) #Port 22 # 変更後(コメントを外して新しいポート番号に変更する) Port 2222
一般的によく使われるのは2222、10022、49152~65535の範囲の番号です。
注意:Port行をコメントのままにするとデフォルト22番が使用されます。必ず「Port 2222」のようにコメントを外した行を追加または変更してください。
3. sshd_configの設定確認
設定変更後、構文エラーがないか確認してからサービスを再起動します。# sshd_configの構文チェック [root@server1 ~]# sshd -t # エラーが表示されなければOK # Portが正しく設定されているか確認します [root@server1 ~]# grep "^Port" /etc/ssh/sshd_config Port 2222
SELinuxで新ポートを許可する
1. SELinuxの状態を確認する
RHEL/Rocky Linuxではデフォルトでは SELinux が有効(enforcing)です。SELinuxが有効な場合、sshd_configでポートを変更しただけではsshdが新ポートで起動できません。
# SELinuxの状態を確認します [root@server1 ~]# getenforce Enforcing
2. 新ポートをSSH用途として登録する
# policycoreutils-pythonパッケージをインストール(未導入の場合) [root@server1 ~]# dnf install -y policycoreutils-python-utils # 2222番ポートをSSHとして登録します [root@server1 ~]# semanage port -a -t ssh_port_t -p tcp 2222 # 登録されたか確認します [root@server1 ~]# semanage port -l | grep ssh ssh_port_t tcp 2222, 22
firewall-cmdで新ポートを開放する
1. firewalldの状態を確認する
# firewalldの状態を確認します [root@server1 ~]# systemctl status firewalld * firewalld.service - firewalld - dynamic firewall daemon Active: active (running) since ...
2. 新ポートを開放する
# 新ポート(2222/tcp)を永続的に開放します [root@server1 ~]# firewall-cmd --permanent --add-port=2222/tcp success # 設定を反映します [root@server1 ~]# firewall-cmd --reload success # 開放されたか確認します [root@server1 ~]# firewall-cmd --list-ports 2222/tcp
sshdを再起動して設定を反映する
# sshdを再起動します [root@server1 ~]# systemctl restart sshd # 再起動後のsshdの状態を確認します [root@server1 ~]# systemctl status sshd * sshd.service - OpenSSH server daemon Active: active (running) since Tue 2026-04-07 09:30:15 JST; 5s ago ... Process: ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS) # 新ポートでListenしているか確認します [root@server1 ~]# ss -tlnp | grep sshd LISTEN 0 128 0.0.0.0:2222 0.0.0.0:* users:(("sshd",pid=12345,fd=4)) LISTEN 0 128 [::]:2222 [::]:* users:(("sshd",pid=12345,fd=6))
別ウィンドウから新ポートで接続確認する
1. 別のターミナルから接続テストする
現在のSSHセッションを維持したまま、別のターミナルウィンドウを開いて新ポートで接続します。鉄則:既存のSSHセッションを閉じないまま接続テストを行うこと。接続に失敗した場合でも、既存セッションから設定を修正できます。
# 別のターミナルから新ポート(2222)で接続します $ ssh -p 2222 user@www.example.com # 接続できた場合は成功です The authenticity of host '[www.example.com]:2222' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxx. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
接続に失敗した場合は、SELinux設定・firewall設定・sshd_configのPort番号を見直してください。
デフォルト22番ポートを閉じる
1. firewall-cmdでsshサービスを削除する
新ポートでの接続を確認できたら、22番ポートを閉じます。# sshサービス(22番ポート)を永続的に削除します [root@server1 ~]# firewall-cmd --permanent --remove-service=ssh success # 設定を反映します [root@server1 ~]# firewall-cmd --reload success # 現在の開放状況を確認します(22番が消えていることを確認) [root@server1 ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client ports: 2222/tcp protocols: forward: yes masquerade: no ...
2. ~/.ssh/configで接続設定を更新する
クライアント側の~/.ssh/configに接続設定を書いている場合は、ポート番号を更新してください。# ~/.ssh/config の設定例 Host myserver HostName www.example.com User pakira Port 2222 IdentityFile ~/.ssh/id_rsa
トラブルシュート・よくあるエラー
sshdの再起動に失敗する場合
SELinuxで新ポートが許可されていないと、sshdの再起動時に次のエラーが出ることがあります。# エラーの確認(journalctlで詳細を表示) [root@server1 ~]# journalctl -u sshd -n 20 Apr 07 09:30:15 server1 sshd[12345]: error: Bind to port 2222 on 0.0.0.0 failed: Permission denied. # SELinuxのAVCログを確認します [root@server1 ~]# ausearch -m AVC -ts recent | grep sshd type=AVC msg=audit(...): avc: denied { name_bind } for pid=12345 comm="sshd" src=2222 ...
「Connection refused」になる場合
新ポートで接続しようとして「Connection refused」になる場合の確認手順です。# sshdが正しいポートでListenしているか確認します [root@server1 ~]# ss -tlnp | grep sshd # firewall-cmdで該当ポートが開いているか確認します [root@server1 ~]# firewall-cmd --list-ports # SELinuxでポートが許可されているか確認します [root@server1 ~]# semanage port -l | grep ssh
EC2/クラウド環境の場合はセキュリティグループも変更が必要
AWSのEC2などクラウド環境では、セキュリティグループ(またはネットワークACL)でも22番が許可されている設定になっています。新ポートをセキュリティグループに追加してから、22番のインバウンドルールを削除してください。
クラウドコンソール上での変更はSSHの接続を切断しないため、ロックアウトのリスクなく変更できます。
本記事のまとめ
SSHポート変更は手順通りに行えば難しくありません。「新ポートで繋がることを確認してから22番を閉じる」の原則さえ守れば安全です。| やりたいこと | コマンド |
|---|---|
| sshd_configのPort設定を変更する | vi /etc/ssh/sshd_config(Port 2222と記述) |
| sshd_configの構文チェック | sshd -t |
| SELinuxで新ポートを許可する | semanage port -a -t ssh_port_t -p tcp 2222 |
| firewall-cmdで新ポートを開放する | firewall-cmd --permanent --add-port=2222/tcp |
| sshdを再起動する | systemctl restart sshd |
| 新ポートで接続を確認する | ssh -p 2222 user@hostname |
| 22番ポートを閉じる | firewall-cmd --permanent --remove-service=ssh |
Linuxサーバーのセキュリティ設定を体系的に学びたい方へ
SSHポート変更はサーバーセキュリティ強化の第一歩です。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、「Linuxサーバー構築入門マニュアル(図解60P)」を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:特定の文字列を含むファイルを検索する(特定のディレクトリを対象)|grep -rの使い方と実務Tips
- 前のページへ:Linuxのポート状況を確認する
- この記事の属するカテゴリ:Linuxtips・ディレクトリ・ファイル操作へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます