開発運用

Linux SSH 設定ガイド

SSH(Secure Shell)は、ネットワーク越しにセキュアにシステムにアクセスするためのプロトコルです。Linuxサーバーにおいて、SSHはリモートでサーバーを管理するための最も一般的な方法であり、セキュリティを高めるために適切に設定することが非常に重要です。この記事では、LinuxサーバーでSSHサービスを設定する方法を詳しく説明します。セキュリティを強化するためのベストプラクティスも含めて、SSHの設定を完全かつ包括的に紹介します。

1. SSHのインストールとサービスの確認

ほとんどのLinuxディストリビューションでは、SSHはデフォルトでインストールされていますが、万が一インストールされていない場合に備えて、以下の手順でインストールできます。

UbuntuやDebianの場合:

bash
sudo apt update sudo apt install openssh-server

CentOSやRedHatの場合:

bash
sudo yum install openssh-server

インストール後、SSHサービスが正常に動作しているかを確認します。以下のコマンドでSSHサービスの状態を確認できます。

bash
sudo systemctl status ssh

サービスが起動していない場合は、以下のコマンドでサービスを開始します。

bash
sudo systemctl start ssh

さらに、SSHサービスがサーバー起動時に自動的に開始されるように設定するには、次のコマンドを実行します。

bash
sudo systemctl enable ssh

2. SSHの設定ファイルの編集

SSHの設定は、/etc/ssh/sshd_configという設定ファイルで行います。このファイルを編集することで、SSHサーバーの挙動を細かく制御できます。設定ファイルを編集するには、nanovimなどのテキストエディタを使用します。

bash
sudo nano /etc/ssh/sshd_config

以下の主要な設定項目を変更することができます:

2.1. ポートの変更

デフォルトでは、SSHはポート22でリッスンしています。セキュリティ向上のために、SSHのポートを変更することが推奨されます。例えば、ポート2222に変更する場合は、以下の設定を変更します。

bash
Port 2222

ポートを変更した後、SSHサービスを再起動する必要があります。

bash
sudo systemctl restart ssh

2.2. ルートユーザーのログイン制限

セキュリティ上、ルートユーザー(root)で直接SSHログインをすることは避けるべきです。PermitRootLoginディレクティブを使用して、ルートユーザーのログインを無効にすることができます。

bash
PermitRootLogin no

これにより、rootユーザーによるログインが禁止され、通常のユーザーアカウントを使用して管理作業を行うことが必要となります。

2.3. パスワード認証の無効化

パスワード認証は攻撃者によるブルートフォース攻撃に対して脆弱です。SSHキーによる認証を使用することを推奨します。パスワード認証を無効にするには、以下の設定を変更します。

bash
PasswordAuthentication no

これにより、SSH接続時にパスワード認証が無効化され、SSHキー認証のみが許可されます。

2.4. 公開鍵認証の有効化

公開鍵認証は、SSHのセキュリティを強化するために非常に有効です。公開鍵と秘密鍵を生成し、サーバーに公開鍵を登録することで、パスワードなしで安全にログインできます。

まず、ローカルマシンでSSHキーを生成します。

bash
ssh-keygen -t rsa -b 4096

次に、生成された公開鍵(~/.ssh/id_rsa.pub)をサーバーの~/.ssh/authorized_keysにコピーします。

bash
ssh-copy-id username@your_server_ip

公開鍵認証を有効にするには、/etc/ssh/sshd_configに次の設定が必要です。

bash
PubkeyAuthentication yes

これにより、パスワード認証なしでSSH接続が可能になります。

3. ファイアウォールの設定

SSHサービスが適切に機能するためには、サーバーのファイアウォールでSSHポート(デフォルトは22番)が開放されている必要があります。ufw(Uncomplicated Firewall)を使用している場合は、以下のコマンドでSSHポートを開放します。

bash
sudo ufw allow 22/tcp

ポートを変更した場合は、そのポート番号に応じて設定を変更してください。

bash
sudo ufw allow 2222/tcp

設定後、ファイアウォールを再起動して変更を適用します。

bash
sudo ufw reload

4. SSHのセキュリティ強化

SSH接続のセキュリティをさらに強化するために、以下のベストプラクティスを採用することが推奨されます。

4.1. Fail2Banの導入

Fail2Banは、ブルートフォース攻撃を防ぐために役立つツールです。一定回数以上の失敗したログイン試行があった場合に、IPアドレスを自動的にブロックします。

Fail2Banをインストールするには、次のコマンドを使用します。

bash
sudo apt install fail2ban

インストール後、fail2banを有効にして、SSHへの攻撃を防ぎます。

4.2. SSH接続の制限

特定のIPアドレスまたはIP範囲からのSSH接続のみを許可することができます。これにより、不正なIPアドレスからのアクセスを制限できます。

設定ファイル(/etc/hosts.allow/etc/hosts.deny)を編集して、特定のIPにアクセスを制限します。

例:

bash
sshd: 192.168.1.100

これにより、192.168.1.100のIPアドレスからのみSSH接続が可能になります。

5. SSHのログの監視

SSHログインの監視は、セキュリティを強化するために非常に重要です。SSHのログは、/var/log/auth.logに記録されます。このログを監視することで、異常なログイン試行を発見することができます。

以下のコマンドを使用して、SSHログインの履歴を確認します。

bash
sudo tail -f /var/log/auth.log

また、journalctlを使用して、SSHのログを表示することもできます。

bash
sudo journalctl -u ssh

6. 設定変更の反映

sshd_configファイルを変更した後は、必ずSSHサービスを再起動して設定を反映させます。

bash
sudo systemctl restart ssh

再起動後、SSH接続を試して、設定が正しく反映されていることを確認します。

結論

SSHの設定は、Linuxサーバーのセキュリティを保護するために非常に重要です。適切な設定とセキュリティ対策を講じることで、リモート接続を安全に管理することができます。ポート変更、パスワード認証の無効化、公開鍵認証の有効化、ファイアウォール設定、そしてFail2Banの導入などの対策を講じることで、SSHのセキュリティを大幅に強化することができます。

Back to top button