SSHの不正アクセス対策としてfail2banを入れています。とはいえ、これがマシンリソースを喰うので根本的な設定を行いました。
環境
- Ubuntu 24.04
作業の前に
SSHを前提としているサーバの場合は
- 直接コンソールで切り戻しができるようにしておく
- VPS等はスナップショットでリカバリができるようにする
ことが大前提です。
また、鍵交換での手順です。パスワード認証でこの設定を行うと接続ができなくなります。
さっくりとした手順
- SSHの設定ファイルのバックアップを取ります。
- 設定を変更します。
- 設定を反映し、確認を行います。
設定ファイルのバックアップ
sudo cp -pi /etc/ssh/sshd_config /path/to/backup/directory/sshd_config.$(date +%Y%m%d)
任意のバックアップディレクトリを指定します。
ファイルのバックアップ確認
diff -u /path/to/backup/directory/sshd_config.$(date +%Y%m%d) /etc/ssh/sshd_config
エラーがなければ(差分がなければ)バックアップできています。
sedによるファイル書き換え
echo -e "\nPermitRootLogin no\nPasswordAuthentication no\nAllowUsers user1" | sudo tee -a /etc/ssh/sshd_config
user1の部分は「実際にSSH接続を行うアカウント」を指定します。
user1 user2
のように、スペースで区切って複数のアカウントを指定することが可能です。
ファイル書き換え確認
diff -u /path/to/backup/directory/sshd_config.$(date +%Y%m%d) /etc/ssh/sshd_config
以下のような差分を確認します。
+PermitRootLogin no
+PasswordAuthentication no
+AllowUsers user1
- rootのログインを禁止する
- パスワード認証を禁止して鍵交換方式のミニする
- user1のみアクセス可能にする
設定反映
SSH接続で修正をしている場合、別にターミナルクライアントを立ち上げておきます。
sudo systemctl restart ssh.service
設定反映確認
- 新たにターミナルクライアントを立ち上げて、指定したユーザーでログインできること
- 指定していないユーザーではログインできない
- rootでのログインはできない
- パスワード認証ができない
ことを確認します。また、
sudo reboot
を行い、サーバ再起動でも同じ挙動を確認します。
接続できない場合の切り戻し
スナップショットからイメージを復元します。
または、直接コンソールを開き、
sudo cp -pi /path/to/backup/directory/sshd_config.$(date +%Y%m%d) /etc/ssh/sshd_config
として設定を切り戻し、
sudo systemctl restart ssh.service
を実施します。