OpenSSH サーバーを保護して強化する方法
サーバー、ルーター、スイッチなどのリモート デバイスにアクセスする場合は、トラフィックを暗号化し、接続を盗聴しようとする人物を防御できる機能を備えた SSH プロトコルを強くお勧めします。
いずれにせよ、SSH のデフォルト設定は確実ではなく、プロトコルの安全性を高めるには追加の調整が必要です。このガイドでは、サーバー上の OpenSSH インストールをセキュリティで保護し、強化するために使用できるさまざまな方法を検討します。
1. SSHパスワードレス認証の設定
デフォルトでは、SSH はユーザーがログイン時にパスワードを入力することを要求します。しかし問題は、ハッカーがパスワードを推測したり、特別なハッキング ツールを使用してブルート フォース攻撃を実行したりして、システムにアクセスできることです。安全を期すために、SSH パスワードなし認証の使用を強くお勧めします。
最初のステップは、公開キーと秘密キーで構成される SSH キーのペアを生成することです。 秘密キーはホスト システムに存在し、公開キーはリモート サーバーにコピーされます。
公開キーが正常にコピーされると、パスワードを入力せずにリモート サーバーにシームレスに SSH 接続できるようになります。
次のステップは、パスワード認証を無効にすることです。これを実現するには、SSH 構成ファイルを変更する必要があります。
sudo vim /etc/ssh/sshd_config
構成ファイル内でスクロールして、次のディレクティブを見つけます。コメントを解除し、オプション 'yes'
を 'no'
に変更します。
PasswordAuthentication no
次に、SSH デーモンを再起動します。
sudo systemctl restart sshd
この時点では、SSH キー認証を使用してのみリモート サーバーにアクセスできるようになります。
2. ユーザーの SSH パスワードなし接続リクエストを無効にする
サーバーのセキュリティを強化するもう 1 つの推奨方法は、パスワードのないユーザーからの SSH ログインを無効にすることです。これは少し奇妙に聞こえますが、システム管理者がユーザー アカウントを作成し、パスワードの割り当てを忘れることがあります。これは非常に悪い考えです。
パスワードのないユーザーからのリクエストを拒否するには、再度、/etc/ssh/sshd_config
にある設定ファイルに移動し、以下のディレクティブがあることを確認します。
PermitEmptyPasswords no
次に、変更を有効にするために SSH サービスを再起動します。
sudo systemctl restart sshd
3. SSH ルート ログインを無効にする
ハッカーがあなたの root パスワードをブルートフォース攻撃した場合、何が起こるかは明白です。リモート root ログインを許可するのは常に悪い考えであり、システムのセキュリティを危険にさらす可能性があります。
このため、SSH リモート root ログインを無効にし、代わりに通常の非 root ユーザーを使用することを常にお勧めします。もう一度、構成ファイルに移動し、この行を次のように変更します。
PermitRootLogin no
完了したら、SSH サービスを再起動して変更を有効にします。
sudo systemctl restart sshd
今後、リモート root ログインは無効になります。
4. SSH プロトコル 2 を使用する
SSH には、SSHプロトコル 1 とプロトコル 2 の 2 つのバージョンがあります。 SSH のプロトコル 2 は 2006 年に導入され、強力な暗号化チェック、一括暗号化、堅牢なアルゴリズムのおかげでプロトコル 1 よりも安全です。
デフォルトでは、SSH はプロトコル 1 を使用します。これをより安全なプロトコル 2に変更するには、構成ファイルに以下の行を追加します。
Protocol 2
いつものように、変更を有効にするには SSH を再起動します。
sudo systemctl restart sshd
今後、SSH はデフォルトでプロトコル 2 を使用します。
SSH プロトコル 1 がサポートされているかどうかをテストするには、次のコマンドを実行します。
ssh -1 user@remote-IP
「SSH プロトコル v.1 はサポートされなくなりました」というエラーが表示されます。
この場合、コマンドは次のとおりでした。
ssh -1 [email
さらに、-2
タグを指定するだけで、プロトコル 2 が使用中のデフォルト プロトコルであることを確認できます。
ssh -2 [email
5. SSH接続タイムアウトアイドル値の設定
SSH 接続がアイドル状態の状態で PC を長時間放置すると、セキュリティ リスクが生じる可能性があります。誰かが通りかかってあなたの SSH セッションを乗っ取り、好きなことを何でもできる可能性があります。この問題に対処するには、アイドル タイムアウト制限を設定し、それを超えると SSH セッションが閉じられるようにすることが賢明です。
もう一度、SSH 設定ファイルを開き、「ClientAliveInterval」 ディレクティブを見つけます。適切な値を割り当てます。たとえば、制限を 180 秒に設定しました。
ClientAliveInterval 180
これは、180 秒に相当する 3 分経過してもアクティビティが登録されない場合、SSH セッションがドロップされることを意味します。
次に、SSH デーモンを再起動して、加えた変更を有効にします。
sudo systemctl restart sshd
6. SSH アクセスを特定のユーザーに制限する
追加のセキュリティ層として、システムにログインしてリモート タスクを実行するために SSH プロトコルを必要とするユーザーを定義できます。これにより、あなたの承認なしにあなたのシステムに侵入しようとする他のユーザーを阻止します。
いつものように、設定ファイルを開き、ディレクティブ「AllowUsers」の後に許可するユーザーの名前を追加します。以下の例では、ユーザー「tecmint」と「james」に SSH 経由でシステムへのリモート アクセスを許可しました。リモート アクセスを取得しようとする他のユーザーはブロックされます。
AllowUsers tecmint james
その後、変更を保持するために SSH を再起動します。
sudo systemctl restart sshd
7. パスワード試行の制限を構成する
セキュリティ層を追加するもう 1 つの方法は、SSH ログインの試行回数を制限し、何度も試行が失敗すると接続が切断されるようにすることです。そこで、もう一度設定ファイルに移動し、「MaxAuthTries 」ディレクティブを見つけて、最大試行回数の値を定義します。
この例では、示されているように制限が 3 回の試行に設定されています。
MaxAuthTries 3
最後に、前のシナリオと同様に SSH サービスを再起動します。
次の SSH 関連記事も役立つかもしれません。
- Linux でソースから OpenSSH 8.0 サーバーをインストールする方法
- CentOS/RHEL 8 で SSH を保護するために Fail2Ban をインストールする方法
- Linux で SSH ポートを変更する方法
- Linux で SSH トンネリングまたはポート転送を作成する方法
- Linux で SSH 接続を高速化する 4 つの方法
- Linux で失敗したすべての SSH ログイン試行を検索する方法
- Linux で非アクティブまたはアイドル状態の SSH 接続を切断する方法
結論
以上が、SSH リモート接続を保護するために実行できるいくつかの対策のまとめでした。ブルートフォース攻撃を阻止するために、リモート アクセスを持つユーザーには常に強力なパスワードを割り当てる必要があることを付け加えておくことが重要です。このガイドが有益であると感じていただければ幸いです。フィードバックは大歓迎です。