セキュアなSSHによるログイン方法の検討 [ソフトウェア研究室]

 こんにちは!
 ナビゲータのEVEです。

 本日から、3日間に渡って、セキュアなSSHによるログイン方法について解説をします。
 今後の作業の参考としてください。
 なお、このサイトで書かれている内容は、ChatGPTとの対話を通して、現在考えられる最高のセキュリティだと当ブログ管理者が考え、自サイトに設定した記録をまとめたものです。
 本日は、設定内容だけを記述します。そして、明日以降、どの辺が苦労する点なのか、気を付ける点はどこなのかを解説する予定です。

 では、早速、解説をしていきましょう!

[概要]

 今回は、外部からSSHで作業する場合、高いセキュリティレベルで作業ができるように考え以下の設定を施しています。設定内容としては、以下の通りとし、続けてその設定の目的について記述しています。

1)秘密鍵を自宅で作成
 → 秘密鍵の漏洩を防ぐ
2)ログインユーザーを限定する
 → 情報漏洩のリスクを限定する
3)ログイン方法を公開鍵認証方式に限定する
 → ハッキングしにくいログイン方法に限定する
4)秘密鍵にパスフレーズを設定する
 → 秘密鍵が漏洩した場合に備え、秘密鍵にパスフレーズを設定する。
5)ポート番号を22番から別の番号に変更する → 定期的に変更する
 → 攻撃対象のポート番号を隠蔽する
6)詳細なログを取得
 → 秘密鍵が漏洩した、攻撃が成功したなどの状況をログから把握する。

以上の内容を以下の手順により実現しています。

[クライアント]
 まず、クライアントの仮想環境で、❶~❹までの作業を実施します。本作業は、sshで公開鍵認証方式を導入するために、公開鍵秘密鍵認証用公開鍵を作成し、秘密鍵を社内または自宅から秘密鍵を出さないための作業となります。もし、対象サーバーが社内または自宅にある場合は、以下の作業をローカル接続したコンソールから実施しても問題ありません。
❶一般ユーザーの作成
■実行権限:管理者
 まず、root ユーザーで直接ログインできないようにする前に、一般ユーザーを作成しておきます。
#adduser userID
#cat /etc/passwd | grep userID←新規ユーザーが追加されたことを確認します。


❷一般ユーザーへ権限の付与
■実行権限:管理者
 一般ユーザーにApacheの権限を付与します。
#usermod -a -G www-data userID
#groups userID←変更が成功したことを確認します。


❸管理者を持ったユーザーから作成した一般ユーザーへ変更する
■実行権限:一般ユーザー(公開鍵でログイン可能なユーザー)
#su userID


❹公開鍵を作成し、作成したユーザーでログイン可能な状態にする。
■実行権限:一般ユーザー(公開鍵でログイン可能なユーザー)
 ユーザーを管理者からuserIDに変更し実施する。
01)Ubuntuへログイン後以下のコマンドを実行する
# ssh-keygen -t rsa -b 4096 -C "userID@pro2grammer.com"
Generating public/private rsa key pair.
鍵長は当該機関から推奨されている長さのものを使用してください。

02)登録するディレクトリを確認し問題なければ<Enter>を押下
# Enter file in which to save the key (/home/eve/.ssh/id_rsa):⏎
03)パスフレーズを入力する
Enter passphrase (empty for no passphrase):PassPhrase
*パスフレーズを入力しなくても問題ありません。
04)上記で入力したパスフレーズと同じものを再入力する
Enter same passphrase again:PassPhrase
Your identification has been saved in /home/eve/.ssh/id_rsa
Your public key has been saved in /home/eve/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:4PTg8F35gvNWrXSwD15v0pcEu9hfZL31vrhKqBHuEMw userID@pro2grammer.com
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|           .     |
|    . +   o ..   |
|    o* = o . +o .|
|     E+.S . *.+.=|
|      o .o.=o*o==|
|     . o .ooooooB|
|      o o..   o+o|
|       o   ..o.oo|
+----[SHA256]-----+

05)root権限へ変更する
# su root
06)公開鍵の内容を確認
# cat /home/userID/.ssh/id_rsa.pub
07)公開鍵を認証ファイルに追加
# cat /home/userID/.ssh/id_rsa.pub >> /home/userID/.ssh/authorized_keys

[サーバー]
 以降の作業は、クライアント側で作成した、公開鍵、認証用公開鍵をログインユーザーと紐づける作業となります。OSのインストールから始めていますが、ご自分の環境に合わせて開始してください。
❺Ubuntuをインストールする
■実行権限:管理者
 環境に合わせて実施してください。
❻管理者のパスワードを変更する。XServerのシステムパスワードとUbuntuのrootパスワードが一緒のため、セキュリティを考え、変更しています。
■実行権限:管理者
passwd root
new UNIX password:→新たにパスワードを設定します。
Retype new UNIX password:→パスワードを再入力する
passwd: password updated successfully←変更が成功したことを確認します。

❼debパッケージの依存関係を解決します。
■実行権限:管理者
・パッケージのリポジトリからインストール可能なパッケージの一覧を更新します
#apt update
・apt-add-repositoryコマンドを提供するために、software-properties-commonパッケージをインストールします。
#apt install software-properties-common
・universeを有効にする
#apt-add-repository universe
・restrictedを有効にする
#apt-add-repository restricted
・multiverseを有効にする
#apt-add-repository multiverse
・パッケージのリポジトリからインストール可能なパッケージの一覧を更新します
#apt update
・gdebiパッケージをインストールする
#apt -y install gdebi
※インストールの途中で、選択を求められますが、デフォルトのまま[了解]を押下しました。
・Ubuntuをアップグレードする
#apt -u upgrade
・サーバーを再起動する
#reboot
❽一般ユーザ(公開鍵でログイン可能なユーザ)を作成し権限を付与する。
■実行権限:管理者
 ❶❷の作業をXserverでも実施する。

❾クライアントで作成した、公開鍵、公開鍵認証ファイルを一般ユーザー(公開鍵でログイン可能なユーザー)の以下のディレクトリに配置する。
■実行権限:一般ユーザー(公開鍵でログイン可能なユーザー)
/home/userID/.ssh/

.sshというディレクトリは多分存在しません。その場合は、userIDの権限で作成してください。

❿作成した公開鍵をサーバーへ設定する
■実行権限:管理者
 ❹の作業の続きを対象サーバーで実施する。
08)chmod 600 /home/userID/.ssh/authorized_keys
# chmod 600 /home/userID/.ssh/authorized_keys
09)authorized_keysの所有者をrootから当該所有者へ変更する
# chown userID:userID /home/userID/.ssh/authorized_keys
10)sshのサービスを再起動する
# systemctl restart ssh
⓫新規に作成した一般ユーザーで、SSH公開鍵暗号方式でログインができるかどうか確認する。

⓬SSH設定を変更
■実行権限:管理者
 次に、SSHの設定ファイルを編集し、必要な変更を加えます。
 sshd_config の編集 /etc/ssh/sshd_config ファイルを開きます。
#vi /etc/ssh/sshd_config

設定内容 以下の設定を順番に行います

1)公開鍵認証を有効にする
PubkeyAuthentication yes

2)パスワード認証を無効にする
PasswordAuthentication no


3)チャレンジレスポンス認証を無効にする
ChallengeResponseAuthentication no


4)PAMを有効にする:
UsePAM yes


5)ルートログインを無効にする
PermitRootLogin no


6)特定ユーザーのログインを許可(必要に応じて)
AllowUsers userID


7)最大認証試行回数を制限:
MaxAuthTries 1


8)詳細なログを有効化
LogLevel VERBOSE


9)X11フォワーディングを無効化
X11Forwarding no


10)SSHのポート番号を変更
Port xxxxxx
# 任意のポート番号
*デフォルトの22を避ける

編集したファイルを保存する。

⓮SSHサービスの再起動
■実行権限:管理者
 設定変更を反映させるため、SSHサービスを再起動します。
①構文のチェック
sshd -t

②sshサービスの再起動
systemctl restart ssh

③ステータスの確認
systemctl status ssh

⓯SSHのデフォルトポート22を閉じ、sshd_configに設定したSSHのポート番号をファイヤーウォールに設定する。
 Ubuntuでは、UFW、iptables、nftables、firewalld、CSF (ConfigServer Security & Firewall)、Shorewall (Shoreline Firewall)、GUFW (Graphical UFW)、OpenSnitch、IPFire、pfSense (Virtualization)などのツールが利用可能です。自身の環境を調べ、最適なツールに設定してください。

[あとがき]
 手順書を作るなどの作業を含めると、約3日間掛かりました。不手際ではないのですが、多々苦労した点がありました。その点につきましては、明日お話しさせてください。

 では、また!

コメント