fail2ban で Linux サーバーのセキュリティを確保する方法

  • fail2ban は、接続の失敗が多すぎる IP アドレスを自動的にブロックする Linux 用の自己調整型セキュリティ ユーティリティです。
  • Linux のファイアウォール (iptables) と統合され、ファイアウォールにルールを追加することで禁止を強制し、通常のファイアウォール機能には影響しません。
  • fail2ban は、デフォルトの構成ファイルを新しいファイル jail.local にコピーすることで構成できます。このファイルでは、アップグレードしても維持されるカスタマイズを行うことができます。

fail2ban を使用すると、Linux コンピュータは接続の失敗が多すぎる IP アドレスを自動的にブロックします。自己調整型セキュリティです。その使用方法をご紹介します。

このサイバーセキュリティ意識向上週間の記事は、Incogni との提携により提供されています。

fail2ban とは何ですか?

Fail2ban は、サーバーへの接続を試行して失敗する回数が多すぎる場合に、IP アドレスを自動的にブロックするユーティリティです。

誰かが SSH サーバー、Web サーバー、メール サーバー、または Minecraft サーバーに接続しようとする場合、通常はアクセスを許可される前にユーザー名とパスワードを入力する必要があります。通常の人間が自分のアカウントの詳細を入力 (または推測) する場合、数秒ごとに 1 回以上物理的に入力することはできません。それよりも速く、より頻繁に資格情報を入力すると、問題があることを示しています。誰かが別のコンピュータでブルートフォース攻撃を実行して侵入しようとしている可能性があります。

ブルートフォース攻撃を検出するには、アカウントにログインできない接続要求を監視する必要があります。攻撃者が特定されたら、それ以上の試行を禁止する必要があります。

これを実際に実現する唯一の方法は、プロセス全体を自動化することです。簡単な構成を行うと、fail2ban が監視、禁止、禁止解除を管理します。

fail2ban は Linux のファイアウォール iptables と統合されています。ファイアウォールにルールを追加することで、疑わしい IP アドレスに対する禁止を強制します。この説明をわかりやすくするために、空のルールセットで iptables を使用しています。

もちろん、セキュリティが気になる場合は、十分なルールセットで構成されたファイアウォールがあるでしょう。fail2ban は独自のルールのみを追加および削除します。通常のファイアウォール機能には影響しません。

次のコマンドを使用して、空のルールセットを確認できます。

sudo iptables -L

fail2ban のインストール

fail2ban のインストールは、この記事のリサーチに使用したすべてのディストリビューションで簡単です。Ubuntu 20.04 の場合、コマンドは次のとおりです。

sudo apt-get install fail2ban

Fedora 32 では、次のように入力します。

sudo dnf install fail2ban

Manjaro 20.0.1 では、pacman を使用しました。

sudo pacman -Sy fail2ban

fail2ban の構成

fail2ban のインストールには、jail.conf という名前のデフォルトの構成ファイルが含まれています。このファイルは fail2ban がアップグレードされると上書きされるため、このファイルに変更を加えると変更が失われます。

代わりに、jail.conf ファイルを jail.local という名前のファイルにコピーします。構成の変更を jail.local に配置すると、アップグレードしても維持されます。両方のファイルは fail2ban によって自動的に読み取られます。

ファイルをコピーする方法は次のとおりです。

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

お気に入りのエディタでファイルを開きます。gedit を使用します。

sudo gedit /etc/fail2ban/jail.local

ファイル内で [DEFAULT] と [sshd] の 2 つのセクションを探します。ただし、実際のセクションを見つけるように注意してください。それらのラベルは、それらを説明するセクションの上部近くにも表示されますが、それは私たちが望むものではありません。

[DEFAULT] セクションは 40 行目付近にあります。これは、多くのコメントと説明を含む長いセクションです。

90 行目付近までスクロールすると、次の 4 つの設定が表示されます。

  • ignoreip:禁止されない IP アドレスのホワイトリスト。これらは永続的な「出獄許可証」を持っています。ローカルホストの IP アドレス (127.0.0.1) は、その IPv6 の同等物 (::1) とともに既定のリストに入っています。禁止されるべきではない他の IP アドレスがある場合は、このリストに追加して、それぞれの間隔を 1 つ空けます。
  • bantime:IP アドレスが禁止される期間 (「m」は分を表します)。「m」または「h」 (時間) を指定せずに値を入力すると、秒として扱われます。-1 の値は IP アドレスを永続的に禁止します。自分自身を永続的に締め出さないように注意してください。
  • findtime:接続試行が失敗しすぎると、IP アドレスが禁止されるまでの時間。
  • maxretry:「失敗した試行が多すぎる」の値。

同じ IP アドレスからの接続が maxretryfindtime 期間内に接続に失敗すると、 bantime の期間禁止されます。唯一の例外は ignoreip リスト内の IP アドレスです。

fail2ban は、一定期間 IP アドレスを刑務所に入れます。fail2ban はさまざまな刑務所をサポートしており、それぞれが単一の接続タイプに適用される設定を保持します。これにより、さまざまな接続タイプに異なる設定を使用できます。または、 fail2ban で選択した接続タイプのセットのみを監視できます。

[DEFAULT] セクション名から推測できたかもしれませんが、確認した設定は既定の設定です。では、SSH 刑務所の設定を見てみましょう。

刑務所の構成

刑務所を使用すると、 fail2ban の監視に接続タイプを追加したり、削除したりできます。既定の設定が刑務所に適用したい設定と一致しない場合は、 bantimefindtime、および maxretry に特定の値を設定できます。

約 280 行までスクロールすると、[sshd] セクションが表示されます。

ここでは、SSH 接続刑務所の値を設定できます。この刑務所を監視と禁止に含めるには、次の行を入力する必要があります。

enabled = true

また、次の行も入力します。

maxretry = 3

既定の設定は 5 でしたが、SSH 接続ではより慎重になる必要があります。3 に下げてから、ファイルを保存して閉じました。

この刑務所を fail2ban の監視に追加し、既定の設定の 1 つを上書きしました。刑務所では、既定の設定と刑務所固有の設定を組み合わせて使用できます。

fail2ban の有効化

これまでのところ、 fail2ban をインストールして構成しました。では、自動起動サービスとして実行できるように有効にする必要があります。次に、期待どおりに動作することを確認するためにテストする必要があります。

fail2ban をサービスとして有効にするには、 systemctl コマンドを使用します。

sudo systemctl enable fail2ban

また、これを使用してサービスを開始します。

sudo systemctl start fail2ban

systemctl を使用して、サービスのステータスも確認できます。

sudo systemctl status fail2ban.service

すべて正常です。緑色のライトが点灯しているので、すべて問題ありません。

fail2ban が同意するかどうか確認してみましょう。

sudo fail2ban-client status

これは、設定した内容を反映しています。[sshd] という名前の 1 つの刑務所を有効にしました。前のコマンドに刑務所の名前を含めると、さらに詳しく調べることができます。

sudo fail2ban-client status sshd

これには、失敗の回数と禁止された IP アドレスが一覧表示されます。もちろん、現時点ではすべての統計情報がゼロです。

刑務所のテスト

別のコンピュータで、テスト マシンへの SSH 接続リクエストを行い、意図的にパスワードを誤入力します。各接続試行では、パスワードを正しく入力する機会が 3 回あります。

maxretry の値は、3 回のパスワードの試行が失敗した後にトリガーされます。3 回の接続試行が失敗したわけではありません。そのため、接続試行 1 回に失敗するには、間違ったパスワードを 3 回入力する必要があります。

その後、別の接続試行を行い、さらに 3 回パスワードを間違えて入力します。3 回目の接続リクエストの最初のパスワードの試行が間違っていると、 fail2ban がトリガーされるはずです。

3 回目の接続リクエストで最初のパスワードが間違っていても、リモート マシンからの応答はありません。説明はありません。冷たくあしらわれるだけです。

コマンド プロンプトに戻るには、Ctrl+C を押す必要があります。もう一度試してみると、別の応答が得られます。

ssh [email protected]

以前のエラー メッセージは「アクセスが拒否されました」でした。今回は、接続が完全に拒否されました。私たちは「好ましからざる人物」です。禁止されました。

[sshd] 刑務所の詳細をもう一度見てみましょう。

sudo fail2ban-client status sshd

3 回の失敗があり、1 つの IP アドレス (192.168.4.25) が禁止されました。

前述したように、 fail2ban はファイアウォールのルールセットにルールを追加することで禁止を強制します。ルールセットをもう一度見てみましょう (以前は空でした)。

sudo iptables -L

INPUT ポリシーにルールが追加され、SSH トラフィックが f2b-sshd チェーンに送信されます。 f2b-sshd チェーンのルールは、192.168.4.25 からの SSH 接続を拒否します。 bantime の既定の設定は変更していないため、10 分後にはその IP アドレスの禁止が解除され、新しい接続リクエストを行うことができます。

禁止期間を長く設定 (数時間など) したが、IP アドレスに別の接続リクエストをより早く許可したい場合は、早期に仮釈放することができます。

これを行うには、次のように入力します。

sudo fail2ban-client set sshd unbanip 192.168.5.25

リモート コンピュータで別の SSH 接続リクエストを行い、正しいパスワードを入力すると、接続が許可されます。

ssh [email protected]

シンプルで効果的

シンプルであることは通常優れており、 fail2ban は厄介な問題に対するエレガントな解決策です。構成はほとんど必要なく、あなたやコンピュータにほとんど運用上のオーバーヘッドはありません。