【Linux】SSH接続のポート番号をデフォルトから変更する

LinuxサーバーへSSH接続する際に使用するポート番号を変更する方法をメモします。

環境 : CentOS7

一般的にSSH通信・接続の際、サーバーが待ち受けるポート番号はデフォルトで22番ということは広く知られており、(ウェルノウンポートという)
デフォルトから変更しておくことで不正ログインの防止など、セキュリティの面でより安全となります。

SSH接続のポート番号を変更する

/etc/ssh/sshd_configを編集する

サーバーへログインし、
設定ファイル /etc/ssh/sshd_config を管理者権限で編集します。

$ sudo vi /etc/ssh/sshd_config

(vi インサートモードで編集)
Port の項目を探す

(変更前) #Port 22
(※変更後) Port 10022

※今回は例としてデフォルトの22から10022に変更しています。
変更する数字は1024以降でかつ他のポートと被らないものが使用可能です。

変更を行ったら、下記のコマンドでsshdサービスを再起動することでSSHポートの変更が反映されます。
$ sudo systemctl restart sshd.service

(注意)
※ファイヤーウォール(firewall)機能をサーバー上で有効にしている場合は、
この時点では接続を切らず次項の設定を行います。

ファイヤーウォールを有効にしている場合の許可設定

セキュリティ機能のファイヤーウォール(firewall)を有効にしている場合は、

・SSHサービスの設定を変更
・変更後のポート番号のアクセス許可

のどちらか(もしくは両方)の設定を行います。

ファイヤーウォールの状態確認

$ sudo firewall-cmd --state

(runningで起動中)

ファイヤーウォールの起動(停止)

$ sudo systemctl start(stop) firewalld

SSHサービスの設定ファイルを変更する

元々存在するテンプレート /usr/lib/firewalld/services/ssh.xml のコピーを作成
$ sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/

設定ファイルのコピーが完了したら設定の変更を行う
$ sudo vi /etc/firewalld/services/ssh.xml

(vi インサートモードで編集)

$ sudo vi /etc/firewalld/services/ssh.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22"/>
</service>

上記の設定から port=”22″ となっている箇所を探して
port=”10022″
と新しいポート番号へ変更しファイルを保存する。

(保存が完了したら)

1.SSHサービスのアクセス許可を確認する

$ sudo firewall-cmd --list-services --zone=public --permanent

(※上記でもしSSHが無ければアクセス許可に加える)

$ sudo firewall-cmd --add-service=ssh --zone=public --permanent

2.ファイヤーウォールを再読み込みし、設定を反映する

$ sudo firewall-cmd --reload

サーバーへの接続を切り、新しく設定したポート番号(10022)でSSH接続を行う。
(-pオプションでポート番号を指定する)
$ ssh -p 10022 ホスト名(IPアドレス)

接続が行えれば設定完了

下記のようにデフォルト(22番ポート)で接続出来なくなっていればより確実です。

$ ssh XXX.XXX.XXX.XX
ssh: connect to host XXX.XXX.XXX.XX port 22: Connection refused

ポート (ports)のアクセス許可を行う場合

1.変更したポート番号(10022)をアクセス許可ポートに追加

$ sudo firewall-cmd --add-port=10022/tcp --zone=public --permanent

2.ポートの追加を確認

$ sudo firewall-cmd --list-ports --zone=public --permanent

(10022/tcp とあれば追加OK)

3.ファイヤーウォールを再読み込みし、設定を反映する

$ sudo firewall-cmd --reload

サービス(services)へのアクセス許可と同様、
接続を一度切り新しく設定したポート番号で接続確認を行います。

$ ssh -p 10022 ホスト名(IPアドレス)

(注意)
もしポート番号を変更後、上記のファイヤーウォールの設定を行わないことが原因で、
再度クライアントからリモート接続出来なくなってしまった場合は
サーバーのコントロールパネルから直接ログインして
firewallを無効にする、もしくはそのままアクセス許可設定を行い直します。

参考
http://asuki-yt.hatenablog.jp/entry/ce7_firewalld
https://qiita.com/kenjjiijjii/items/1057af2dddc34022b09e

Follow me!