LoginSignup
4
2

More than 3 years have passed since last update.

sshのポートを変更してみる

Posted at

勉強前イメージ

sshの設定とか変更するだけで行けそう感

調査

概要

今回使用するのはほぼまっさらなCentOS7です。
そちらのサーバのsshのポートを22番ポートから22222番ポートに変更していきたいと思います。

進め方は以下になります。

  1. 現在のsshの確認
  2. SELinuxの設定の変更
  3. firewallの設定の変更
  4. sshdの設定の変更
  5. 22222ポートでsshログインできることを確認
  6. 22番ポートの無効の設定
  7. 22番ポートでのログイン不可の確認

1. 現在のsshの確認

今回のsshのポートを変更する先、 192.168.119.10 のサーバに明示的に22番ポートを使用してsshしてみました。
特に問題なくログイン出来ました。
どっちもホスト名がlocalホストになっててわかりずらくてすみません...

[root@localhost ~]# ssh -p 22 root@192.168.119.10
root@192.168.119.10's password: 
Last login: Wed Dec  9 21:31:12 2020 from 192.168.119.244
[root@localhost ~]# 

2. SELinuxの設定の変更

まずSELinuxについてなに?って方は こちら をご覧ください

  • SELinuxが有効になっていることを確認

getenforce コマンドを使用します。

getenforce

出力される内容は以下になります。
enforcing ... SElinux有効且つ、ルール以外の動作があれば止める
permissive ... SElinux有効且つ、ルール以外の動作があっても、止めずにログに記録のみ行う
disabled ... SElinux無効

今回出力されたのは Enforcing なので、ルール外の動作があれば止められるようになっています。

[root@localhost ~]# getenforce 
Enforcing
  • SELinuxのルールでsshのポート設定を確認する

SELinuxのルールを変更するには semanage コマンドを使用します。
入っていない方は以下からインストールしてください
yum install policycoreutils-python

また、 semanage port -l コマンドで全ポート設定が見れるので、sshでgrepかけて確認を行います

[root@localhost ~]# semanage port -l | grep ssh
ssh_port_t                     tcp      22

確認するとsshは22番ポートで受ける設定にっているようです。

  • SELinuxのルールでsshのポート設定を22番ポートから22222番ポートに変更する

今はSELinuxの設定上、誰も使用していません。

[root@localhost ~]# semanage port -l | grep 22222
[root@localhost ~]# 

ssh_port_t の設定のポートに22222番ポートを追加しました

semanage port -a -t ssh_port_t -p tcp 22222

以下のように、ssh_port_tに22222番ポートの設定が追加されました。

[root@localhost ~]# semanage port -l | grep ssh
ssh_port_t                     tcp      22222, 22

3. firewallの設定の変更

  • firewallの起動を確認

以下のようにfirewallも有効化されています。

[root@localhost ~]# systemctl is-active firewalld
active
  • firewallの設定を確認

firewall-cmd --list-all でfirewallの設定を確認することが出来ます。
services: dhcpv6-client ssh と記載があり、TCP 22番ポートが開いてることがわかります。
ここに22222番ポートを追加します。

[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  • firewallの22222番ポートを開ける
[root@localhost ~]# firewall-cmd --add-port=22222/tcp  --permanent --zone=public
success
  • firewallの設定をreloadします
[root@localhost ~]# firewall-cmd --reload
success
  • 設定後のfirewallの設定を確認

再度 firewall-cmd --list-all コマンドで設定を確認します。
ports: 22222/tcp と記載されており、ポートが開いたことが確認できました。

[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources: 
  services: dhcpv6-client ssh
  ports: 22222/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

4. sshdの設定の変更

  • 現在のsshdのポートの設定の確認

sshdの設定は /etc/ssh/sshd_confi に記載されています。
Portの欄を見ると、コメントアウトされているのでデフォルトの22番ポートで通信がされています。

[root@localhost ~]# cat /etc/ssh/sshd_config | grep "Port "
#Port 22
  • sshdのポートの設定を変更

Portの設定に明示的に22番と22222ポートを追加して記載しました。

vi /etc/ssh/sshd_config
==========
Port 22
Port 22222
==========
  • sshdの再起動
systemctl restart sshd

5. 22222ポートでsshログインできることを確認

今回は、192.168.119.10 のサーバでは上記で行ったように22番ポートと22222番ポートでsshログイン出来る設定にしたので、
どちらもログインできることを確認します。

[root@localhost ~]# ssh -p 22 root@192.168.119.10
root@192.168.119.10's password: 
Last login: Wed Dec  9 21:48:18 2020 from 192.168.119.244
[root@localhost ~]# 
[root@localhost ~]# ssh -p 22222 root@192.168.119.10
root@192.168.119.10's password: 
Last login: Wed Dec  9 22:08:08 2020 from 192.168.119.244
[root@localhost ~]# 

22番ポートでも22222番ポートでも問題なくログインすることが出来ました。

6. 22番ポートの無効の設定

22222番ポートでsshログインできるようになったので、22番ポートが不要になりました。
ですので、firewall,sshdの設定から22番ポートの設定を削除します。

※SELinuxから削除しない理由としましては、定義されているため消すことが出来ないのです。

[root@localhost ~]# semanage port --delete --type ssh_port_t --proto tcp 22
ValueError: ポート tcp/22 はポリシーに定義されているため、削除できません

firewallの設定から削除

  • 削除前の確認

firewall-cmd --list-all コマンドで確認します。
services: dhcpv6-client ssh とあり、sshがtcp/22番ポートが許可されていることがわかります。

[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources: 
  services: dhcpv6-client ssh
  ports: 22222/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  • 削除
firewall-cmd --permanent --remove-service=ssh

上記のコマンドで以下のように削除が成功しました

[root@localhost ~]# firewall-cmd --permanent --remove-service=ssh
success
  • firewallの設定をreloadします
[root@localhost ~]# firewall-cmd --reload
success
  • 削除後の確認

同じように、 firewall-cmd --list-all コマンドで確認します。
先程まで services にsshの記載がありましたが、設定を削除したことにより記載が削除されました。

[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3 enp0s8
  sources: 
  services: dhcpv6-client
  ports: 22222/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

sshdの設定から削除

  • 現在のsshdのポートの設定の確認

sshdの設定は /etc/ssh/sshd_confi に記載されています。
Portの欄を見ると、明示的に22番ポートが記載されているので22番ポートのみ設定を削除します

[root@localhost ~]# cat /etc/ssh/sshd_config | grep "^Port "
Port 22
Port 22222 
  • sshdのポートの設定を変更

Portの設定に明示的に22番と22222ポートを追加して記載しました。

vi /etc/ssh/sshd_config
==========
削除
Port 22
==========
  • 削除後の設定の確認

22番ポートの記載を削除したので22222番ポートのみになりました。

[root@localhost ~]# cat /etc/ssh/sshd_config | grep "^Port "
Port 22222 
  • sshdの再起動
systemctl restart sshd

7. 22番ポートでのログイン不可の確認

以下のように22番ポートでは拒否されました。

[root@localhost ~]# ssh -p 22 root@192.168.119.10
ssh: connect to host 192.168.119.10 port 22: No route to host

引き続き設定がされている22222番ポートではログインすることが出来ました。

[root@localhost ~]# ssh -p 22222 root@192.168.119.10
root@192.168.119.10's password: 
Last login: Wed Dec  9 22:26:31 2020 from 192.168.119.244
[root@localhost ~]# 

勉強後イメージ

SELinuxの設定変更実ははじめて....
sshの設定自体は楽なんだけど、firewallとSELinuxがめんどうだなーって感じ。
SELinuxの22番ポートの設定消せないのはじめて知った

参考

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2