はじめに
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」との比較検討もしたことがありません。
サーバー環境
インフラ : さくらのクラウド
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 ← 追記
まだ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
コメント
[…] 以下のサイトを参考にしました。https://tech.yuzuyu.mobi/archives/157 […]