さくらのVPSでCentOS8 (6) SSHのポートを変更

前回はrootでのSSH接続ができないように対策を行った。

さて、今回はSSHの接続ポートを変更する。

が、ちょっと面倒くさい。失敗するとSSH接続できなくなるので、VNCコンソールからログインしてやるほうが良いかも。

まず、前回と同じSSHサーバーの設定ファイルを編集する。

ちなみに、”su -“でrootになって作業すると、制限がほとんどなく、取り返しのつかない失敗をする可能性があるので、”sudo”コマンドを使って実行する。のが良いと思う。

コマンド入力時、
前に”$”が表示されている時は一般ユーザ、
前に”#”が表示されている時はユーザrootでログインしている状態。

$ sudo vi /etc/ssh/sshd_config

次のようなPort設定行があるが、デフォルトのままなので、コメントアウト状態になっている。

#Port 22

まずは、ポート番号を標準の22から好きな値に変更する。

Port 1022

[:][w][q]キーで保存終了。

SSHサーバーを再起動。

$ sudo systemctl restart sshd.service
Job for sshd.service failed because the control process exited with error code.
See "systemctl status sshd.service" and "journalctl -xe" for details.

あれ?エラー。

まずは原因を調べるために、エラーメッセージ中の”journalctl -xe”を実行してみる。

6月 07 20:30:44 hostmei.vs.sakura.ne.jp systemd[1]: Starting OpenSSH server daemon...
-- Subject: Unit sshd.service has begun start-up
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- Unit sshd.service has begun starting up.
6月 07 20:30:44 hostmei.vs.sakura.ne.jp sshd[4607]: error: Bind to port 1022 on 0.0.0.0 failed: Permission denied.
6月 07 20:30:44 hostmei.vs.sakura.ne.jp sshd[4607]: error: Bind to port 1022 on :: failed: Permission denied.
6月 07 20:30:44 hostmei.vs.sakura.ne.jp sshd[4607]: fatal: Cannot bind any address.
6月 07 20:30:44 hostmei.vs.sakura.ne.jp systemd[1]: sshd.service: Main process exited, code=exited, status=255/n/a
6月 07 20:30:44 hostmei.vs.sakura.ne.jp systemd[1]: sshd.service: Failed with result 'exit-code'.
6月 07 20:30:44 hostmei.vs.sakura.ne.jp systemd[1]: Failed to start OpenSSH server daemon.
-- Subject: Unit sshd.service has failed
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
--
-- Unit sshd.service has failed.
--
-- The result is RESULT.

“Permission Denied”って〜ことは、許可されていないってこと。

ポート1022使うことが許可されていない。

何故か?SELINUXが有効になっているから?

$ getenforce
Enforcing

“Enforcing”ってことは有効になっている。
“Disabled”だと無効になっている。

では、一時的に無効にしよう。

$ sudo setenforce 0
$ getenforce
Permissive

“Permissive”ってことは一時的に無効になっている。

さて、もう一度SSHサーバーの再起動を行ってみる。

$ sudo systemctl restart sshd.service

エラーはないので、再起動できたと思うが、一応確認しておく。

$ sudo systemctl status sshd.service
sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-06-07 20:45:25 JST; 6s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 4944 (sshd)
Tasks: 1 (limit: 2832)
Memory: 1.1M
CGroup: /system.slice/sshd.service
└─4944 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc -oM>
6月 07 20:45:25 hostmei.vs.sakura.ne.jp systemd[1]: Stopped OpenSSH server daemon.
6月 07 20:45:25 hostmei.vs.sakura.ne.jp systemd[1]: Starting OpenSSH server daemon…
6月 07 20:45:25 hostmei.vs.sakura.ne.jp sshd[4944]: Server listening on 0.0.0.0 port 10022.
6月 07 20:45:25 hostmei.vs.sakura.ne.jp sshd[4944]: Server listening on :: port 10022.
6月 07 20:45:25 hostmei.vs.sakura.ne.jp systemd[1]: Started OpenSSH server daemon.

起動できているので、設定したポートで接続できるかを確認しよう。
だが、今接続している状態は保持して、新規で接続する。

% ssh nori@hostmei.vs.sakura.ne.jp -p 10022
ssh: connect to host hostmei.vs.sakura.ne.jp port 10022: Connection refused

無理。
元ポートのまま?

% ssh nori@hostmei.vs.sakura.ne.jp
ssh: connect to host hostmei.vs.sakura.ne.jp port 22: Connection refuse

む〜り〜

何故か?

ファイヤーウォールが働いているから。

では、接続状態のSSHを使って、ファイヤウォールの設定を変更する。

$ sudo vi /usr/lib/firewalld/services/ssh.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="10022"/>
</service>

そして、設定を反映させるために、設定の再読み込みを行う。

$ sudo firewall-cmd --reload
success

再度接続できるか、新規に接続してテストしてみる。

% ssh nori@hostmei.vs.sakura.ne.jp -p 10022
nori@hostmei.vs.sakura.ne.jp's password:
Last login: Sun Jun 7 20:07:05 2020 from 123.123.123.123
[nori@hostmei ~]$ 

接続できました。

だが、忘れていませんよね?

SELINUXを一時無効にしていたことを。

で、その設定に”semanage”ってコマンドを使いたいのだが、ミニマルなOSインストールでは、次のようにコマンドが見つからないと言われる。

$ sudo semanage port -l | grep ssh
sudo: semanage: コマンドが見つかりません

じゃあ、何をインストールすれば使えるのか?

$ dnf whatprovides semanage
CentOS-8 - AppStream 2.4 MB/s | 5.8 MB 00:02
CentOS-8 - Base 2.4 MB/s | 2.2 MB 00:00
CentOS-8 - Extras 9.3 kB/s | 6.7 kB 00:00
policycoreutils-python-utils-2.9-3.el8_1.1.noarch : SELinux policy core python utilities
Repo : @System
一致:
ファイル名 : /usr/sbin/semanage
policycoreutils-python-utils-2.9-9.el8.noarch : SELinux policy core python utilities
Repo : BaseOS
一致:
ファイル名 : /usr/sbin/semanage

へ〜、こんなコマンドで調べるんだね。

って、dnfって何?

DNFまたはDandified Yum (ダンディファイド ヤム)は、RPMベースのパッケージ管理システムを採用しているLinuxディストリビューション用のパッケージマネージャであるYum 3.4のフォークであり、Yumの事実上の後継バージョン[1][2][3]

フリー百科事典『ウィキペディア(Wikipedia)』

後継か。
でも、yumもまだ使えてしまうので、yumでインストールしてしまった。

$ sudo yum install policycoreutils-python-utils
CentOS-8 - AppStream 2.2 kB/s | 4.3 kB 00:01
CentOS-8 - Base 5.6 kB/s | 3.9 kB 00:00
CentOS-8 - Extras 2.4 kB/s | 1.5 kB 00:00
依存関係が解決しました。
パッケージ アーキテクチャー バージョン リポジトリー サイズ
インストール:
policycoreutils-python-utils noarch 2.9-3.el8_1.1 BaseOS 250 k
依存関係のインストール:
checkpolicy x86_64 2.9-1.el8 BaseOS 348 k
python3-audit x86_64 3.0-0.13.20190507gitf58ec40.el8 BaseOS 85 k
python3-libsemanage x86_64 2.9-1.el8 BaseOS 127 k
python3-policycoreutils noarch 2.9-3.el8_1.1 BaseOS 2.2 M
python3-setools x86_64 4.2.2-1.el8 BaseOS 600 k
トランザクションの概要
インストール 6 パッケージ
ダウンロードサイズの合計: 3.6 M
インストール済みのサイズ: 11 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/6): python3-audit-3.0-0.13.20190507gitf58ec40.el8.x86_64.rpm 547 kB/s | 85 kB 00:00
(2/6): policycoreutils-python-utils-2.9-3.el8_1.1.noarch.rpm 1.2 MB/s | 250 kB 00:00
(3/6): checkpolicy-2.9-1.el8.x86_64.rpm 1.4 MB/s | 348 kB 00:00
(4/6): python3-libsemanage-2.9-1.el8.x86_64.rpm 872 kB/s | 127 kB 00:00
(5/6): python3-setools-4.2.2-1.el8.x86_64.rpm 972 kB/s | 600 kB 00:00
(6/6): python3-policycoreutils-2.9-3.el8_1.1.noarch.rpm 1.7 MB/s | 2.2 MB 00:01
合計 1.7 MB/s | 3.6 MB 00:02
警告: /var/cache/dnf/BaseOS-929b586ef1f72f69/packages/checkpolicy-2.9-1.el8.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID 8483c65d: NOKEY
CentOS-8 - Base 1.6 MB/s | 1.6 kB 00:00
GPG 鍵 0x8483C65D をインポート中:
Userid : "CentOS (CentOS Official Signing Key) security@centos.org"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
これでよろしいですか? [y/N]: y
鍵のインポートに成功しました
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
インストール中 : python3-setools-4.2.2-1.el8.x86_64 1/6
インストール中 : python3-libsemanage-2.9-1.el8.x86_64 2/6
インストール中 : python3-audit-3.0-0.13.20190507gitf58ec40.el8.x86_64 3/6
インストール中 : checkpolicy-2.9-1.el8.x86_64 4/6
インストール中 : python3-policycoreutils-2.9-3.el8_1.1.noarch 5/6
インストール中 : policycoreutils-python-utils-2.9-3.el8_1.1.noarch 6/6
scriptletの実行中: policycoreutils-python-utils-2.9-3.el8_1.1.noarch 6/6
検証 : checkpolicy-2.9-1.el8.x86_64 1/6
検証 : policycoreutils-python-utils-2.9-3.el8_1.1.noarch 2/6
検証 : python3-audit-3.0-0.13.20190507gitf58ec40.el8.x86_64 3/6
検証 : python3-libsemanage-2.9-1.el8.x86_64 4/6
検証 : python3-policycoreutils-2.9-3.el8_1.1.noarch 5/6
検証 : python3-setools-4.2.2-1.el8.x86_64 6/6
インストール済み:
policycoreutils-python-utils-2.9-3.el8_1.1.noarch checkpolicy-2.9-1.el8.x86_64 python3-audit-3.0-0.13.20190507gitf58ec40.el8.x86_64
python3-libsemanage-2.9-1.el8.x86_64 python3-policycoreutils-2.9-3.el8_1.1.noarch python3-setools-4.2.2-1.el8.x86_64
完了しました!

インストール完了。

途中[y]キーで確認作業を行った。

コマンド実行時”-y”オプションを付けると確認はいらないけど、失敗しないために確認を行う方が好き。

さて、現在SELINUXでSSHとして認識しているポートを確認します。

$ sudo semanage port -l | grep ssh
ssh_port_t tcp 22

はい。22番ポートですね。
新しいポート番号を追加しましょう。

$ sudo semanage port -a -t ssh_port_t -p tcp 1022
$ sudo semanage port -l | grep ssh
ssh_port_t tcp 1022, 22

はい。追加されましたね。

じゃあ、SELINUXを有効にして、SSHサーバーを再起動してみましょう。

$ sudo setenforce 1
$ getenforce
Enforcing
$ sudo systemctl restart sshd.service
$ sudo systemctl status sshd.service
 sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-06-07 23:16:47 JST; 8s ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 22130 (sshd)
Tasks: 1 (limit: 2832)
Memory: 1.2M
CGroup: /system.slice/sshd.service
└─22130 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc -o>
6月 07 23:16:47 hostmei.vs.sakura.ne.jp systemd[1]: Starting OpenSSH server daemon…
6月 07 23:16:47 hostmei.vs.sakura.ne.jp sshd[22130]: Server listening on 0.0.0.0 port 1022.
6月 07 23:16:47 hostmei.vs.sakura.ne.jp sshd[22130]: Server listening on :: port 1022.
6月 07 23:16:47 hostmei.vs.sakura.ne.jp systemd[1]: Started OpenSSH server daemon.

念の為に、OSの再起動を行って、それでも接続できるかを確認しておきましょう。

$ sudo reboot now

一つ気になることがありますね?
そうです。ポート22が空いたままです。
なので、閉じましょう。

$ sudo semanage port -d -t ssh_port_t -p tcp 22
ValueError: ポート tcp/22 はポリシー内で定義されているため削除できません

と、エラーになります。英語だと、

ValueError: Port tcp/22 is defined in policy, cannot be deleted

消せないのかよ!

さて、次回はメール送信機能を追加します。

さくらインターネットのVPS

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です