勉強前イメージ
sshの設定とか変更するだけで行けそう感
調査
概要
今回使用するのはほぼまっさらなCentOS7です。
そちらのサーバのsshのポートを22番ポートから22222番ポートに変更していきたいと思います。
進め方は以下になります。
- 現在のsshの確認
- SELinuxの設定の変更
- firewallの設定の変更
- sshdの設定の変更
- 22222ポートでsshログインできることを確認
- 22番ポートの無効の設定
- 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番ポートの設定消せないのはじめて知った