hana_shinのLinux技術ブログ

Linuxの技術情報を掲載しています。特にネットワークをメインに掲載していきます。

sshdのポート番号変更方法



1 はじめに

sshdのポート番号を22番(デフォルト)から22222番に変更してみます。 ここでは、例として22222番ポートを使用してみます。 ポート番号変更は、セキュリティ対策が主な目的です。

2 検証環境

CentOS版数は以下のとおりです。

[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

カーネル版数は以下のとおりです。

[root@server ~]# uname -r
3.10.0-1160.el7.x86_64

SELinuxは、サーバ/クライアントともに有効にしています。

[root@server ~]# getenforce
Enforcing

3 サーバの設定変更

3.1 空きポート番号の確認

lsofコマンドを実行します。22222番ポートが使用されていないことを確認します。 もし他のアプリが22222番ポートを使用していたら、使用していないポート番号をlsofコマンドで探してください。 他のアプリが使用するポート番号と重複しないように注意してください。 なお、lsofコマンドの使い方は、lsofコマンドの使い方 - hana_shinのLinux技術ブログを参照してください。

[root@server ~]# lsof -i:22222
[root@server ~]#

3.2 sshdの設定ファイル変更

sshdの設定ファイル(sshd_config)を以下のように変更します。 ポート番号をデフォルトの22番から22222番に変更します。

[root@server ~]# cat /etc/ssh/sshd_config
#Port 22
Port 22222

設定ファイルの構文チェックをします。

[root@server ~]# sshd -t
[root@server ~]#

3.3 SELinuxの設定変更

設定ファイルに下記説明があります。

[root@server ~]# cat /etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#

上記説明にしたがって、ポート番号を変更したら、semanageコマンドを実行します。

[root@server ~]# semanage port -a -t ssh_port_t -p tcp 22222
[root@server ~]# 

3.4 設定ファイルの再読み込み

設定ファイルを変更したので、設定ファイルを再読み込みします。

[root@server ~]# systemctl reload sshd.service

sshdのポート番号を確認します。 sshdが22222番ポートでListenしていることがわかります。

[root@server ~]# lsof -i4:22222 -a -P
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1084 root    3u  IPv4  46759      0t0  TCP *:22222 (LISTEN)

3.5 ポートの開放

新しく定義した22222番ポートへのアクセスを許可するため、 firewall-cmdコマンドを使って、22222番ポートを開放します。

[root@server ~]# firewall-cmd --permanent --add-port=22222/tcp
success

次に、パーマネントルールをランタイムルールに展開します。

[root@server ~]#  firewall-cmd --reload
success

最後に、ポート番号を確認します。 22222番ポートへのアクセスが許可されていることがわかります。

[root@server ~]# firewall-cmd --list-ports
22222/tcp

3.6 ポートのクローズ

sshdのポート番号を確認します。sshdはデフォルトで22番ポートを使用しています。

[root@server ~]# firewall-cmd --list-services
dhcpv6-client ssh

なお、dhcpv6-clientやsshはサービス名です。 サービス名は/etc/servicesで確認することができます。 たとえば、sshは以下のように定義されています。

[root@server ~]# cat /etc/services 
ssh             22/tcp                          # The Secure Shell (SSH) Protocol

22番ポートは、もう必要ないのでクローズします。

[root@server ~]# firewall-cmd --remove-service=ssh
success

ポート番号を確認します。

[root@server ~]# firewall-cmd --list-services
dhcpv6-client

4 サーバにsshでログイン

4.1 その1(-p ポート番号)

[root@client ~]# ssh -p 22222 root@192.168.2.100
root@192.168.2.100's password:
Last login: Thu Dec 23 18:34:40 2021 from desktop-mb6g4ki
[root@server ~]#

サーバ側でTCPコネクションの状態を確認してみます。 クライントがサーバの22222番ポートでTCPコネクションを確立していることがわかります。

[root@server ~]# lsof -i:22222 -a -nP
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1084 root    3u  IPv4  46759      0t0  TCP *:22222 (LISTEN)
sshd    1084 root    4u  IPv6  46761      0t0  TCP *:22222 (LISTEN)
sshd    3299 root    3u  IPv4  47023      0t0  TCP 192.168.2.100:22222->192.168.2.105:38496 (ESTABLISHED)

4.2 その2(-o Port=ポート番号)

[root@client ~]# ssh -o Port=22222 root@192.168.2.100
root@192.168.2.100's password:
Last login: Thu Dec 23 20:21:45 2021 from 192.168.2.105
[root@server ~]#

Z 参考情報

私が業務や記事執筆で参考にした書籍を以下のページに記載します。 Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ