🛳️

SSH で利用するポートを変更する (CentOS 8)

3 min read

SSH で利用されるデフォルトのポート番号は TCP の 22 番ですが、デフォルトのポートをそのまま利用していると攻撃の的になりかねません。ここでは、SSH で利用するポートをリモートから変更します。

次のように、プロンプトを $ ではなく # で示すコマンドは root 権限が必要です。この場合は、sudo コマンドを利用したり root ユーザでコマンドを実行したりしてください。

$ hogehoge    # (ユーザ権限)
# hogehoge    # (root 権限)

環境

サーバが CentOS 8 です。

サーバ
$ uname -r
4.18.0-305.3.1.el8.x86_64
$ cat /etc/redhat-release 
CentOS Linux release 8.4.2105
$ getenforce   # SELinux は ON
Enforcing

クライアントは何でもいいですが、動作のテストには Ubuntu を利用しました。

クライアント
local$ uname -r
5.11.0-27-generic
local$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
local$ ssh -V
OpenSSH_8.2p1 Ubuntu-4ubuntu0.3, OpenSSL 1.1.1f  31 Mar 2020

空ポートを探す

適当に思い付いたポートが使われていないか lsof コマンドを使って調べます。lsof コマンドに -i:nnn のオプションを渡すと、ポート番号 nnn を利用しているプロセスなどの情報を表示します。つまり、何も表示されなければ (今は) そのポートを誰も使っていないことがわかります。

他のサービスが利用しているポートを利用することはできません。Wikipedia の記事などを参考にして空いていそうなポート番号を探しましょう。

# lsof -i:22  # (既に使われている) 22 番が使われているか調べる (root権限必須)
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     939 root    5u  IPv4  22280      0t0  TCP *:ssh (LISTEN)
sshd     939 root    7u  IPv6  22282      0t0  TCP *:ssh (LISTEN)
sshd    1692 root    5u  IPv4  26377      0t0  TCP localhost.localdomain:ssh->xxx.xxx.xxx.xxx:51164 (ESTABLISHED)
sshd    1696  user   5u  IPv4  26377      0t0  TCP localhost.localdomain:ssh->xxx.xxx.xxx.xxx:51164 (ESTABLISHED)
# lsof -i:234 # (使われていない) 234 番が使われているか調べる (root)
# 

sshd の設定

空ポートを見つけたら設定ファイルにポート番号を指定します。設定ファイルは /etc/ssh/sshd_config です。17 行目辺にポート番号の設定がコメントアウトされています。下に示す #Port 22 の行を Port 234 のように書き換えます。

# vi /etc/ssh/sshd_config     # (root 権限必須)
編集例 (234 番ポートを使用)
@@ -14,7 +14,7 @@
 # SELinux about this change.
 # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
 #
-#Port 22
+Port 234
 #AddressFamily any
 #ListenAddress 0.0.0.0
 #ListenAddress ::

SELinux と firewalld の設定

先程編集した設定ファイルにも記述があったとおり、ポート番号を変更する場合、SELinux にも設定を適用する必要があります。

234 番ポートを使用する場合の例
# semanage port -a -t ssh_port_t -p tcp 234   # (root 権限必須)

また、同様に firewalld の設定も変更し、ポートを解放する必要があります。

234 番ポートを使用する場合の例
# firewall-cmd --permanent --add-port=234/tcp # (root 権限必須)
success
# firewall-cmd --reload       # (root 権限必須)
success

VPS やレンタルサーバによってはパケットフィルタリングなどのサービスを提供していることなあります。このサービスを利用している場合、ここで指定したポートの通信パケットを受信できるように設定してください。

sshd の再起動

sshd を再起動して設定を適用します。

以下のコマンドを実行した場合、新しいポートで接続を確認できるまでは “絶対に” 現在の SSH 接続を切断しないでください! 設定に誤りがあり、新しいポートで SSH 接続ができない場合に一切の操作が不可能になる恐れがあります!

# systemctl restart sshd      # (root 権限必須)

新しいポートで接続を確認する

ローカルで別の端末を起動し、新しいポートで SSH 接続できることを確認します。接続できない場合は、先程まで利用していた端末から設定を確認してください。

234 番ポートを使用する場合の例
local$ ssh -p234 user@server.example.com

古いポートを閉鎖する

新しいポートで接続できることを確認できたら古いポートに用はありません。firewalld の設定を変更して 22 番ポートを閉鎖します。

# firewall-cmd --remove-service=ssh   # (root 権限必須)
success
# firewall-cmd --reload       # (root 権限必須)
success

おわりに

おわりです。

利用するポート番号を変更しても、攻撃されるときは攻撃されます。公開鍵認証を利用するようにしてパスワードによるログインを無効化しておくと良いでしょう。

参考

Discussion

ログインするとコメントできます