2026年8月4日
2026年8月4日
SSHのセキュリティ設定完全ガイド
はじめに
SSH(Secure Shell)は、ネットワーク上の接続を暗号化して安全なデータ転送を行うためのプロトコルです。サーバー管理や遠隔操作では欠かせないツールですが、不適切な設定が行われると、セキュリティリスクが高まります。本ガイドでは、SSHのセキュリティ設定方法について完全に解説します。
症状・背景
このテーマが必要になる主な場面:
- サーバーへの接続が頻繁に行われており、セキュリティ上の脅威が懸念される場合
- 新しいサーバーセットアップを行う際、初期設定に不適切なものがある可能性がある場合
- サイバー攻撃の被害を受けた後で、システムの脆弱性を評価し直す必要がある場合
手順・設定方法
ステップ1: SSHアクセスの認証強化
# パスワード認証を無効にする
sudo sed -i 's/^#PasswordAuthentication no/PasswordAuthentication no/' /etc/ssh/sshd_config
# 公開鍵認証のみに変更する
sudo sed -i 's/^#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config
# セッションのタイムアウト時間を設定する
sudo sed -i '/ClientAliveInterval/s/.*/ClientAliveInterval 90/' /etc/ssh/sshd_config
sudo sed -i '/ClientAliveCountMax/s/.*/ClientAliveCountMax 3/' /etc/ssh/sshd_config
ステップ2: SSH接続のセッション強化
# 不要なユーザーグループを排除する
sudo sed -i '/AllowGroups .*/d' /etc/ssh/sshd_config
echo 'AllowGroups ssh-users' | sudo tee -a /etc/ssh/sshd_config > /dev/null
# 連続したログイン失敗を制限する
sudo sed -i '/MaxAuthTries/s/.*/MaxAuthTries 3/' /etc/ssh/sshd_config
echo 'DenyUsers root' | sudo tee -a /etc/ssh/sshd_config > /dev/null
# セッションの強度を増すために、Kerberosを使用する
sudo sed -i '/UsePAM/s/.*/UsePAM yes/' /etc/ssh/sshd_config
ステップ3: SSH接続の監視とログ管理
# ログファイルの場所と形式を確認
grep 'LogLevel' /etc/ssh/sshd_config
# 重要情報を記録するためのログレベルを設定
sudo sed -i '/LogLevel/s/.*/LogLevel INFO/' /etc/ssh/sshd_config
# セッション履歴の監視にsshdのログファイルを使用する
echo 'UseDNS no' | sudo tee -a /etc/ssh/sshd_config > /dev/null
ステップ4: 実践/トラブルシュート/監視
# SSHサービスを再起動して設定を適用する
sudo systemctl restart sshd
# SSH接続の状態とログを確認する
sudo tail -f /var/log/auth.log
注意事項
- セッションタイムアウトは、サーバーへの不正アクセスを防ぐのに有効ですが、頻繁なログインが必要なユーザーグループには影響を与える可能性がある
- 公開鍵認証の設定は、パスワード管理が困難な場合や、多くのユーザーから接続されるサーバーに適している
- ログファイルはセキュリティ監査を行う際の重要な情報源であるため、適切に保管・管理すること
まとめ
1. パスワード認証の無効化: サーバーへの接続を強力な公開鍵認証に移行することで、パスワード攻撃から保護する。
2. セッションの制限: 不正ログイン試行回数や接続の有効期限を設定し、サーバーに対する不正アクセスを防ぐ。
3. Kerberosの使用: 既存の認証体系と統合可能で、セキュリティレベルをさらに高める手段。
4. ログ監視: セッション履歴やログファイルをモニタリングすることで、不正な接続の兆候を見つける。
5. 再起動と確認: 設定を適用し、接続が正常に機能するか確認する。
関連記事: