AlmaLinux セキュリティ対策 SSH接続のポート変更とROOTログイン禁止の設定

AlmaLinux セキュリティ対策 SSH接続のポート変更とROOTログイン禁止の設定

はじめに

SSH接続のための標準ポートは22番ですが、攻撃対象になりやすいので標準ポートの22番は閉鎖し、別ポート番号でSSH接続させる方法、そしてrootユーザーでログイン可能にしていると攻撃対象になりますので、SSH接続専用のユーザーを作成し、そのユーザーでSSHログインした後にrootユーザーにスイッチ(ユーザー切り替え)して操作するというフローに変更したいと思います。

SSH

SSH(Secure Shell、セキュアシェル)は、クライアント(自分のパソコンなど)からシェルコマンドを暗号通信で送って、サーバーの操作を行うための通信プロトコル。

当たり前の様に思われていますが、サーバー側にもSSH接続するためのサービス・パッケージをインストールしサービス起動させておく必要がありますが、大体のLINUX系OSはOSインストール時にSSHもインストールされ自動起動する様になっています。

SSHクライアントソフト

サーバーにSSH接続する側の自分のパソコンにもSSHクライアントソフトが必要です。
有名なソフトだと
・Tera Term
・PuTTY
がありますが、私は「Tera Term」を使っています。
特に理由はありません。最初に使ったのが「Tera Term」だったので、そのままずっと使っています。
「PuTTY」との比較検討もしたことがありません。

Windows10から標準でSSHクライアント「OpenSSH クライアント」が入っていて、コマンドプロンプトでsshコマンドが使えるみたいです!

サーバー環境

インフラ : さくらのクラウド
OS : AlmaLinux release 8.4 (Electric Cheetah)
SSH : openssh 8.0p1 6.el8_4.2
※さくらのクラウドが提供しているAlmaLinux 8.4 64bitのアーカイブからコピー構築したサーバーになりますので、サーバー構築時点である程度、初期設定がされています。

現状SSH設定などを確認

さくらのクラウドが提供しているAlmaLinux 8.4 64bitのアーカイブからコピー構築したサーバーなので現状がどうなっているか確認しておきます。

yum list で確認

yumのインストール済みリストで単語「ssh」でgrepしてみます。

[root@alma01 ~]# yum list installed |grep "ssh"
libssh.x86_64                               0.9.4-2.el8                              @base
libssh-config.noarch                        0.9.4-2.el8                              @base
openssh.x86_64                              8.0p1-6.el8_4.2                          @base
openssh-clients.x86_64                      8.0p1-6.el8_4.2                          @base
openssh-server.x86_64                       8.0p1-6.el8_4.2                          @base

・openssh.x86_64
・openssh-clients.x86_64
・openssh-server.x86_64
の3つがあれば、自分のパソコンからサーバーにSSH接続できるし、このサーバーから別サーバーへもSSH接続できる状態です。
そしてバージョンは「8.0p1-6.el8_4.2」になります。

systemctl で確認

SSHサービス自体が起動しているかも確認しておきましょう。

[root@alma01 ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2021-08-20 11:49:33 JST; 44min ago
     Docs: man:sshd(8)
           man:sshd_config(5)
省略

Active項目がactive (running)となっているのでサービス起動しています。
Loaded項目でもenabledとなっているのでサーバー起動時に自動起動する様になっています。

SSH接続用ポートを変更

標準ポートは22番なので、新しいポート何するかを決めます。
とりあえず8822番がウェルノンポート範囲ですが、Wikiを見ると空いてるみたいなのでこれにします。

sshd_config の変更

AlmaLinux8.4であるこのサーバーでは/etc/ssh/配下にあるsshd_configを開いて「Port」を変更します。

[root@alma01 ~]# vi /etc/ssh/sshd_config
#Port 22  ← コメントアウント
Port 8822  ←  追記
この時点でsshdを再起動しない!
まだfirewallで新ポート8822が許可されていないので!

firewallで8822を許可

このサーバーはサーバー構築時点でfirewallがインストールされおり自動起動される様に初期設定されていました。
新しいSSH接続ポート8822を恒久的にfirewallで許可設定してあげます。

[root@alma01 ~]# firewall-cmd --permanent --zone=public --add-port=8822/tcp
success

変更を反映させるため、firewall自体もリロードします。

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

変更を確認します。

[root@alma01 ~]# firewall-cmd --list-all
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 8822/tcp  ← この部分
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

sshd_configの変更を反映させるためsshdも再起動します。

[root@alma01 ~]# systemctl restart sshd

SSH接続でROOT接続を禁止

rootログインされてしまったら、全権限があるので大変危険というかもう終わりなので、rootログイン自体を禁止にします。
その代わりにrootにスイッチできるSSH接続専用ユーザーを作成します。

SSH接続用ユーザーを新規作成

SSH接続専用ユーザーを「tempadmin」とします。
tempadminユーザーを作成

[root@alma01 ~]# useradd tempadmin

tempadminユーザーのパスワードを設定

[root@alma01 ~]# passwd tempadmin
ユーザー tempadmin のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

作成したユーザーをwheelグループに追加

新規作成したtempadminをwheelグループに追加に追加します。
※wheelグループの意味が難しいので、rootにスイッチで出来るユーザーグループと仮認識しています。

[root@alma01 ~]# usermod -G wheel tempadmin

wheelグループだけがsuコマンドを利用できる様にする。

[root@alma01 ~]# vi /etc/pam.d/su
auth       required     pam_wheel.so use_uid  ←コメントアウントを外す

sshd_config の変更

・直接rootログインを禁止にする
・ハッキングの際によく使われるユーザー名も拒否

[root@alma01 ~]# vi /etc/ssh/sshd_config
PermitRootLogin no  ← 変更
DenyUsers toor administrator administrateur admin adm test guest info mysql user oracle  ← コメントを外す

sshd_configの変更を反映させるためsshdも再起動します。

[root@alma01 ~]# systemctl restart sshd