SSH ブルート フォース ログイン攻撃を防ぐための 5 つのベスト プラクティス


SSH を実行しているサーバーは、通常、ブルート フォース攻撃のソフト ターゲットです。ハッカーは、侵入のリスクをさらに高める総当たり攻撃を自動化するための革新的なソフトウェア ツールとボットを常に考え出しています。

このガイドでは、SSH サーバーを Debian 派生物に対するブルート フォース攻撃から保護するために実装できるいくつかのヒントについて説明します。

SSH パスワード認証を無効にし、SSH キー認証を有効にする

SSH のデフォルトの認証方法は、ユーザー名/パスワード認証です。しかし、これまで見てきたように、パスワード認証はブルート フォース攻撃を受けやすいものです。安全のために、SSH の公開鍵と秘密鍵のペアによって認証が可能になる鍵ベースの SSH 認証を実装することをお勧めします。公開鍵がサーバーにコピーされる間、秘密鍵はクライアントの PC に残ります。

SSH キー認証中に、サーバーはクライアント PC が秘密キーを所有しているかどうかを確認します。チェックが成功すると、シェル セッションが作成されるか、リモート サーバーに送信されたコマンドが正常に実行されます。 SSH キーベースの認証を構成する方法に関する包括的なガイドがあります。

キーベースの認証を設定した後でも、パスワード認証がまだアクティブであるという単純な理由で、サーバーはブルート フォース攻撃の影響を受けやすくなっています。これは無効にする必要があります。

したがって、デフォルトの SSH 構成ファイルを編集します。

$ sudo vim /etc/ssh/sshd_config

示されているように、PasswordAuthentication パラメーターを no に設定します。

PasswordAuthentication no

次に、ファイルを保存し、SSH をリロードして変更を適用します。

$ sudo systemctl reload ssh

Fail2ban 侵入防止ツールの実装

Python で記述された Fail2ban は、サービスのログ ファイルをスキャンして認証の失敗を検出し、指定された時間、パスワード認証チェックに繰り返し失敗する IP を禁止する、オープンソースの侵入防止フレームワークです。

Fail2ban は、侵入の試みやその他の悪意のある活動についてサーバー ログ ファイルを常に監視します。事前に定義された数の認証失敗の後 (ほとんどの場合、3 回のログイン試行の失敗)、Fail2ban はリモート ホストがサーバーにアクセスするのを自動的にブロックし、ホストは '.一定期間刑務所に入れます。

そうすることで、Fail2ban は誤ったパスワード認証試行の割合を大幅に減らします。 Linux に Fail2ban をインストールして構成し、ブルートフォース攻撃からサーバーを保護する方法については、ガイドをご覧ください。

SSH 認証試行の最大回数を制限する

ブルート フォース攻撃からサーバーを保護するもう 1 つの簡単な方法は、SSH ログインの試行回数を制限することです。デフォルトでは、これは 3 に設定されていますが、万が一これがより高い値に設定されている場合は、最大 3 回の接続試行に設定してください。

たとえば、最大接続試行回数を 3 に設定するには、次のように MaxAuthTries パラメータを 3 に設定します。

MaxAuthTries = 3

もう一度、変更を保存し、SSH サービスをリロードします。

$ sudo systemctl reload ssh

クライアントからの SSH アクセスを制限するための TCP ラッパーの実装

TCP ラッパーは、IP アドレスに基づいてリモート クライアントによる TCP サービスへのアクセスを制限する、ホストベースのアクセス制御リスト (ACL) を提供するライブラリです。

リモート ホストがシステム上のサービスにアクセスできないようにします。 TCP ラッパーは、/etc/hosts.allow および /etc/hosts.deny 構成ファイルを (この順序で) 使用して、リモート クライアントが特定のサービスへのアクセスを許可されているかどうかを判断します。

通常、これらのファイルはコメント アウトされており、すべてのホストが TCP ラッパー レイヤーを通過できます。特定のサービスへのアクセスを許可するルールは、/etc/hosts.allow ファイルに配置され、/etc/hosts.deny ファイルのルールよりも優先されます。

ベスト プラクティスでは、すべての着信接続をブロックすることをお勧めします。したがって、/etc/hosts.deny ファイルを開きます。

$ sudo vim /etc/hosts.deny

次の行を追加します。

ALL: ALL

変更を保存してファイルを終了します。

次に、/etc/hosts.allow ファイルにアクセスします。

$ sudo vim /etc/hosts.allow

示されているように、SSH 経由でサーバーに接続できるホストまたはドメインを構成します。この例では、サーバーへの接続を 2 つのリモート ホスト (173.82.227.89 および 173.82.255.55) のみに許可し、残りを拒否しています。

sshd: 173.82.227.89 173.82.255.55
sshd: ALL: DENY

変更を保存して、構成ファイルを終了します。

テストするには、アクセスを許可したホスト以外のホストからサーバーに接続してみてください。示されているように、許可エラーが表示されるはずです。

$ ssh [email protected]

kex_exchange_identification: read: Connection reset by peer
Connection reset by 173.82.235.7 port 22
lost connection

SSH 2 要素認証を実装する

2 要素認証は、パスワード認証に追加のセキュリティ レイヤーを提供するため、ブルート フォース攻撃からサーバーをより安全に保護できます。広く使用されている 2 要素認証ソリューションは Google Authenticator App であり、2 要素認証の設定方法に関する十分に文書化されたガイドがあります。

これは、SSH ブルート フォース ログイン攻撃を防ぎ、サーバーの安全性を確保するために実装できる 5 つのベスト プラクティスの概要です。また、OpenSSH サーバーを保護および強化する方法を読むこともできます。