SSH で利用するポートを変更する (CentOS 8)
SSH で利用されるデフォルトのポート番号は TCP の 22 番ですが、デフォルトのポートをそのまま利用していると攻撃の的になりかねません。ここでは、SSH で利用するポートをリモートから変更します。
環境
サーバが 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 権限必須)
@@ -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 にも設定を適用する必要があります。
# semanage port -a -t ssh_port_t -p tcp 234 # (root 権限必須)
また、同様に firewalld の設定も変更し、ポートを解放する必要があります。
# firewall-cmd --permanent --add-port=234/tcp # (root 権限必須)
success
# firewall-cmd --reload # (root 権限必須)
success
sshd の再起動
sshd を再起動して設定を適用します。
# systemctl restart sshd # (root 権限必須)
新しいポートで接続を確認する
ローカルで別の端末を起動し、新しいポートで SSH 接続できることを確認します。接続できない場合は、先程まで利用していた端末から設定を確認してください。
local$ ssh -p234 user@server.example.com
古いポートを閉鎖する
新しいポートで接続できることを確認できたら古いポートに用はありません。firewalld の設定を変更して 22 番ポートを閉鎖します。
# firewall-cmd --remove-service=ssh # (root 権限必須)
success
# firewall-cmd --reload # (root 権限必須)
success
おわりに
おわりです。
利用するポート番号を変更しても、攻撃されるときは攻撃されます。公開鍵認証を利用するようにしてパスワードによるログインを無効化しておくと良いでしょう。
参考
- @hana_shin, sshのポート番号変更方法, 2020-02-15 更新, 2021-08-25 閲覧.
Discussion