本記事は、
「VPSのセキュリティを段階的に高めていく」シリーズの一部として、
SSHのログイン方式を実際に見直し、セキュリティを高めていく手順をまとめた記事です。
前回のufw編では、VPSに対する通信の入口(ポート)を最小限に整理しました。
今回はその続きとして、
SSHで「誰が」「どのように」ログインできるのかを明確にし、
不正ログインされにくい構成へ変更していきます。
なお、本記事では
設定を誤るとSSH接続できなくなる可能性があります。
作業前に、VPS事業者の管理画面からコンソール接続できることを確認した上で進めてください。
SSH設定を変更する前に確認すること
SSHの設定変更は、一歩間違えるとサーバーに接続できなくなります。
作業前に、以下を必ず確認してください。
- 現在、SSHで正常に接続できている
- 作業中はSSH接続を切らない
- 可能であれば、別タブでSSH接続を1つ残しておく
- VPS事業者の管理画面にログインできる
ここを飛ばさず確認することが、最大の安全対策です。
一般ユーザーを作成し、sudoを使えるようにする
最初に、root以外の一般ユーザーを作成します。
この時点では、まだrootログインは禁止しません。
一般ユーザーの作成
以下は例です。
ユーザー名は環境に合わせて読み替えてください。
sudo adduser exampleuser
パスワードやユーザー情報の入力を求められます。
sudoグループへ追加する
作成したユーザーを、sudoグループに追加します。
sudo usermod -aG sudo exampleuser
sudoが使えるか確認する
一度ログインし直すか、次のコマンドで確認します。
sudo whoami
root と表示されれば、sudoが正しく使えています。
SSHの鍵認証を設定する
次に、SSHの鍵認証を設定します。
この作業が完了し、ログインできることを確認するまで、rootログインやパスワード認証は無効化しません。
鍵認証の全体像
SSHの鍵認証は、
- クライアント側で鍵を作成
- サーバー側に公開鍵を登録
という流れで行います。
使用するSSHクライアント(Windows / macOS / Linux)によって操作画面は異なりますが、考え方は共通です。
公開鍵をサーバーに配置する
作成した公開鍵を、
対象ユーザーの次のファイルに追記します。
~/.ssh/authorized_keys
ディレクトリとファイルの権限は重要です。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
鍵認証でログインできるか確認する
ここで必ず、新しいSSH接続を開き、鍵認証でログインできるか確認します。
- 一般ユーザーでログインできる
- パスワードを聞かれない(または最小限)
この確認が取れるまでは、次の手順に進まないでください。
rootログインを禁止する
鍵認証でのログインが確認できたら、rootログインを禁止します。
設定ファイルを編集する
sudo nano /etc/ssh/sshd_config
次の項目を確認・変更します。
PermitRootLogin no
設定を反映する
sudo systemctl restart ssh
この時点で、新しいrootログインはできなくなります。
パスワードログインを禁止する
最後に、SSHのパスワード認証を無効化します。
この操作は、必ず鍵認証でログインできることを確認した後に行ってください。
パスワード認証の設定を変更する
再度、設定ファイルを編集します。
sudo nano /etc/ssh/sshd_config
次の項目を設定します。
PasswordAuthentication no
SSHを再起動する
sudo systemctl restart ssh
新しいSSH接続を開き、鍵認証でログインできることを最終確認します。
SSHポート変更について
SSHのポート番号を変更することで、不要な不正アクセスを減らせる可能性はあります。
ただし、
- ufwやfail2banとの関係が複雑になる
- 効果を正しく評価するにはログ検証が必要
といった理由から、本記事ではSSHポート変更は扱いません。
将来的に、22番ポートのまま受けている攻撃数と、ポート変更後の違いを比較する検証記事を予定しています。
つながらなくなった場合の確認ポイント
万一、SSHで接続できなくなった場合は、
/etc/ssh/sshd_configの設定内容- ufwの状態
- VPS事業者の管理画面にあるセキュリティ設定
を確認する必要があります。
VPS事業者ごとに仕様が異なるため、本記事では具体的な操作は扱いませんが、サーバー外の設定も影響する可能性があることは覚えておくと安心です。
SSH編のまとめと次回予告
本記事では、
- 一般ユーザーの作成
- sudoによる権限分離
- 鍵認証の設定
- rootログインとパスワードログインの無効化
という、SSHの基本的なセキュリティ対策を一通り実施しました。
これで、SSHという入口はかなり突破されにくくなっています。
次回は、fail2banを使って、不正なログイン試行そのものを遮断する仕組みについて整理していきます。



