SSHのセキュリティを強化する設定方法:鍵認証・ポート変更・Fail2Ban
SSHのセキュリティを高めるための具体的な設定方法を解説。鍵認証の導入、ポート番号の変更、Fail2Banの設定など、実践的な対策を紹介。
はじめに
SSH(Secure Shell)は、リモートサーバーを安全に管理するためのプロトコルです。しかし、デフォルト設定のまま使用すると、ブルートフォース攻撃や不正アクセスのリスクがあります。本記事では、SSHのセキュリティを強化するための具体的な設定方法を紹介します。鍵認証の導入、ポート番号の変更、Fail2Banの設定など、実践的な対策を順を追って解説します。
SSHの基本とリスク
SSHはデフォルトでポート22を使用し、パスワード認証が有効になっています。この状態では、攻撃者が総当たり攻撃(ブルートフォース)でパスワードを推測する可能性があります。また、パスワードが弱い場合、簡単に突破される危険性があります。そのため、以下の対策を実施することが推奨されます。
1. 鍵認証の設定
鍵認証は、公開鍵と秘密鍵のペアを使用して認証を行う方式です。パスワードよりも安全性が高く、自動化にも適しています。
1.1 鍵ペアの生成
クライアント側(自分のPC)で以下のコマンドを実行し、鍵ペアを生成します。
ssh-keygen -t ed25519 -C "your_email@example.com"
-t ed25519 はEd25519アルゴリズムを指定します。RSAよりも高速で安全とされています。鍵の保存場所はデフォルトの ~/.ssh/id_ed25519 で構いません。パスフレーズを設定することで、秘密鍵が漏洩した場合のリスクを軽減できます。
1.2 公開鍵のサーバーへの転送
生成された公開鍵(id_ed25519.pub)をサーバーに転送します。ssh-copy-id コマンドが便利です。
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
転送後、サーバー側の ~/.ssh/authorized_keys に公開鍵が追加されます。
1.3 SSH設定ファイルの編集
サーバーの /etc/ssh/sshd_config を編集し、鍵認証のみを許可します。
sudo nano /etc/ssh/sshd_config
以下の設定を変更または追加します。
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
PasswordAuthentication no:パスワード認証を無効化PubkeyAuthentication yes:公開鍵認証を有効化ChallengeResponseAuthentication no:チャレンジレスポンス認証を無効化(パスワード認証に関連)1.4 設定の反映
編集後、SSHサービスを再起動します。
sudo systemctl restart sshd
別のターミナルで新しいセッションを開き、鍵認証でログインできることを確認してください。もしログインできない場合、設定を元に戻して原因を調査します。
2. ポート番号の変更
ポート番号をデフォルトの22から別の番号に変更することで、自動化されたスキャンツールからの攻撃を回避しやすくなります。
2.1 設定ファイルの編集
/etc/ssh/sshd_config を開き、以下の行を探します。
#Port 22
コメントを解除し、任意のポート番号(例:2222)に変更します。
Port 2222
1024未満のポートを使用する場合はroot権限が必要ですが、1024以上であれば一般ユーザーでも問題ありません。ただし、他のサービスと競合しない番号を選びます。
2.2 ファイアウォールの設定
新しいポートを許可するようファイアウォールを設定します。
UFWの場合
sudo ufw allow 2222/tcp
sudo ufw deny 22/tcp
sudo ufw reload
firewalldの場合
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload
2.3 設定の反映
SSHサービスを再起動します。
sudo systemctl restart sshd
新しいポートで接続する際は、-p オプションを指定します。
ssh -p 2222 user@server_ip
3. Fail2Banの設定
Fail2Banは、ログファイルを監視し、不正アクセスを試みるIPアドレスを自動的にブロックするツールです。
3.1 Fail2Banのインストール
Debian/Ubuntu
sudo apt update
sudo apt install fail2ban -y
CentOS/RHEL
sudo yum install epel-release -y
sudo yum install fail2ban -y
3.2 SSH用の設定
/etc/fail2ban/jail.local を作成し、SSHの設定を記述します。
sudo nano /etc/fail2ban/jail.local
以下の内容を追加します。
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime:ブロック時間(秒)。ここでは1時間。findtime:監視時間枠(秒)。ここでは10分。maxretry:最大試行回数。ここでは5回。ポート番号を変更した場合、port の値を実際のポート番号に変更します。
[sshd]
enabled = true
port = 2222
logpath = %(sshd_log)s
backend = %(sshd_backend)s
3.3 Fail2Banの起動と自動起動設定
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
3.4 動作確認
ブロック状況を確認するには以下のコマンドを実行します。
sudo fail2ban-client status sshd
4. rootログインの禁止
rootユーザーでの直接ログインを禁止し、一般ユーザーでログイン後、sudo で特権昇格する運用が推奨されます。
/etc/ssh/sshd_config で以下の設定を確認します。
PermitRootLogin no
これにより、rootでのSSHログインが拒否されます。
まとめ
本記事では、SSHのセキュリティを強化するための3つの主要な設定を紹介しました。
これらの設定を実施することで、SSHサーバーの安全性を大幅に高めることができます。ただし、設定変更後は必ず別のセッションで接続確認を行い、ロックアウトされないように注意してください。
また、定期的なログ監視やソフトウェアのアップデートも忘れずに行いましょう。
*この記事はArch Linux/btrfs/LUKs環境で実際に検証した内容を基にしています。セキュリティ設定は環境によって異なるため、本番環境への適用前に必ずテスト環境で検証してください。*