SSHサーバーの設定詳細 [ソフトウェア研究室]

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

 久しぶりに「ゼロからはじめるシステム開発」を更新します。
 本日は、前回の続きで、セキュアなSSHサーバーの構築に関する解説をします。前回までは、具体的な設定、苦労した点などを話しましたが、本日は、どのような設定をし、なぜそのようにしたのか解説をします。

[設定の目的]

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

[sshd_configへの設定内容]

 以下が、今回、SSHサーバーの/etc/ssh/sshd_configに設定した内容となります。赤書きで、設定内容が有効に働いていることをどう確認したのか記述しています。
#❶公開鍵認証を有効にする → 公開鍵でログインすることにより確認
PubkeyAuthentication yes

#❷パスワード認証を無効にする → パスワードによりログインを試みることにより確認。
PasswordAuthentication no

#❸チャレンジレスポンス認証を無効にする → 未設定のため確認負荷
ChallengeResponseAuthentication no

#❹PAMを有効にする → デフォルトがyesなので、問題ないと想定
UsePAM yes

#❺ルートログインを無効にする → rootでログインできないことを確認
PermitRootLogin no

#❻特定ユーザーのログインを許可(必要に応じて) → ログインできることを確認
AllowUsers userID

#❼最大認証試行回数を制限 → パスワードが利用できないため確認不可
MaxAuthTries 1

#❽詳細なログを有効化 → 多分そうなっていると思う・・・。ログが多くなったような気がする
LogLevel VERBOSE

#❾X11フォワーディングを無効化 → サービスも利用していないので、未確認
X11Forwarding no

#❿SSHのポート番号を変更 → 設定ポートでログインできることを確認。
Port xxxxxx


[設定内容の確認]

 エディタで編集後、入力した以上の構文が正しいかどうか以下のコマンドで確認することが可能です。
# sshd -t

以上のコマンドを実行し、何も表示されなければ、正しく記述できています。
 では、❶から順番に見ていきましょう!
 ❶は、公開鍵でログインをすることにより設定がうまくいったことを確認しています。それ以前に、作業目的1)を実現するために、自分のパソコンに仮想環境を作り、同仮想環境で、秘密鍵公開鍵認証用公開鍵を作成し、目的3)を実現するために、公開鍵、認証用公開鍵をXServerへアップロードし確認しています。
 ❷は、パスワードによるログインを試みることにより確認しています。当然、ログインできません。ここでの設定は、目的3)を実現するため、公開鍵認証方式でのみ有効とし、パスワードログイン方式を無効化しています。
 ❸は、このサーバーでは、パスワード認証方式を無効化しているので、パスワード認証方式を補強する目的で導入するチャレンジレスポンス>認証の実際の確認は省略しています。ここでの設定は、目的3)を実現するために設定しています。
 ❹は、Ubuntuでは、デフォルトで有効となっているため、あえて設定する必要はなく、かつ、確認するまでもないのですが、以下の方法で確認することが可能です。
# grep "^UsePAM" /etc/ssh/sshd_config
UsePAM yes

 ❺は、rootでログインを試みることにより確認しています。インストールファイルなどで作成した環境では、rootでログインできないようになっているのですが、XServerでは、rootでログインし作業できるようになっています。この設定後rootでログインできなければ有効になっていると考えていいと思います。なお、ここでの設定は、全ての作業が可能なrootユーザーを直接利用させないことにより、リスクヘッジしています。加えて、目的の2)の情報漏洩のリスクを限定するために行っています。
 ❻では、特定のユーザーでログインできるかどうか確認します。ただ、パスワードによるログインを不可にしていて、公開鍵認証方式でユーザーを限定しているので、正しく動作するかどうかは現状の設定では確認できません。sshd_configの記述から設定できていると判断しています。また、ここでの設定は、2)のログインユーザー限定し、情報漏洩のリスクを軽減しています。
 ❼も同様です。基本パスワード認証の試行回数なので、記述から有効になっていると考えています。ここでの設定は、ログインしにくくすることにより、目的2)の情報漏洩のリスクを軽減しています。
 ❽は、設定前のログと、設定後のログを比較し確認しています。ここでの設定は、もし仮に、秘密鍵が漏洩し、同秘密鍵に設定したパスフレーズが検索するなどの方法により漏洩した場合、❻のユーザーで管理者が認識していない時間帯等にログインしたことを知るために設定しています。ここから出力されるログは、EVEシステムで定期的に解析する予定です。
 ❾は、サービスを利用していないので、確認を飛ばしています。
 ❿ポート番号の確認は、設定のポート番号でログインすることにより確認しています。なお、ここで使用するポート番号は、ファイヤーウォールで通過するように設定してください。そして、設定確認後、本来のポート番号22を、ファイヤーウォールから削除してください。

[あとがき]

 目的を設定し、その目的に沿って以上の内容をsshd_configに施しました。❸❹❼❾など、冗長的な設定はありますが、何らかの理由により、パスワード認証方式が有効になるなどの、不測の事態を想定して設定しています。以上の設定をすることにより、私以外の人間が、pro2grammer.comサーバーへログインができなくなりました。これ以降は、このサイトで発生するすべてが私が実施した内容となります。心して以降の作業に望みたいと思います。
 なお、本日は、Postfixの設定を施し、明日確認作業を行います。X(旧ツイッター)でもつぶやきましたが、セキュリティを高めようとすると非常にめんどくさいです。そのめんどくさい作業については、後日ご報告します。

 では、また!!!

コメント