fail2banでLinuxサーバーを保護する方法

公開: 2022-01-29
UbuntuスタイルのLinuxラップトップで実行される定型化されたターミナルウィンドウ。
Fatmawati Achmad Zaenuri / Shutterstock

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

セキュリティセキュリティセキュリティ

ウィンザー公爵夫人、ウォリスシンプソンはかつて、「金持ちになりすぎたり、薄すぎたりすることは決してない」と有名に言っていました。 現代の相互接続された世界のためにこれを更新しました。注意しすぎたり、安全すぎたりすることは決してありません。

コンピューターがSecureShell(SSH)接続などの着信接続要求を受け入れる場合、またはWebサーバーや電子メールサーバーとして機能する場合は、ブルートフォース攻撃やパスワード推測からコンピューターを保護する必要があります。

そのためには、アカウントにアクセスできない接続要求を監視する必要があります。 短期間に繰り返し認証に失敗した場合は、それ以上の試行を禁止する必要があります。

これを実際に達成できる唯一の方法は、プロセス全体を自動化することです。 少し簡単な設定で、 fail2banは監視、禁止、および禁止解除を管理します。

広告

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

もちろん、セキュリティが心配な場合は、十分な数のルールセットでファイアウォールが構成されている可能性があります。 fail2banは、独自のルールを追加および削除するだけです。通常のファイアウォール機能は変更されません。

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

 sudo iptables -L 

関連: iptablesのビギナーズガイド、Linuxファイアウォール

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つのセクションを探します。 ただし、実際のセクションを見つけるように注意してください。 それらのラベルは、それらを説明するセクションの上部近くにも表示されますが、それは私たちが望んでいることではありません。

/etc/fail2ban/jail.localがgeditウィンドウで開きました。

[DEFAULT]セクションは40行目あたりにあります。これは長いセクションで、コメントや説明がたくさんあります。

/etc/fail2ban/jail.localがgeditウィンドウで開き、89行目までスクロールしました。

行90あたりまで下にスクロールすると、知っておく必要のある次の4つの設定が見つかります。

  • ignoreip:禁止されることのないIPアドレスのホワイトリスト。 彼らは永久に脱獄の無料カードを持っています。 ローカルホストのIPアドレス( 127.0.0.1 )は、IPv6に相当するもの( ::1 )とともに、デフォルトでリストに含まれています。 禁止されるべきではないことがわかっている他のIPアドレスがある場合は、それらをこのリストに追加し、それぞれの間にスペースを残します。
  • bantime: IPアドレスが禁止されている期間(「m」は分を表します)。 「m」または「h」(時間の場合)なしで値を入力すると、秒として扱われます。 -1の値は、IPアドレスを永久に禁止します。 永久に自分を締め出さないように十分注意してください。
  • findtime:接続の試行に失敗する回数が多すぎると、IPアドレスが禁止されるまでの時間。
  • maxretry: 「失敗した試行が多すぎる」の値。

同じIPアドレスからの接続により、 findtime期間内にmaxretryが接続試行に失敗した場合、禁止時間の間、それらは禁止されbantime 。 唯一の例外は、 ignoreipリストのIPアドレスです。

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

[DEFAULT]セクション名から推測したかもしれませんが、ここで確認した設定はデフォルトです。 それでは、SSHジェイルの設定を見てみましょう。

関連: geditを使用してLinuxでテキストファイルをグラフィカルに編集する方法

刑務所の設定

Jailsを使用すると、接続タイプをfail2ban's監視の内外に移動できます。 デフォルト設定がjailに適用したい設定と一致しない場合は、 bantimefindtime 、およびmaxretryに特定の値を設定できます。

広告

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

/etc/fail2ban/jail.localがgeditウィンドウで開き、280行目までスクロールしました。

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

 有効= true

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

 maxretry = 3

デフォルト設定は5でしたが、SSH接続にはもっと注意が必要です。 3つにドロップしてから、ファイルを保存して閉じました。

このjailをfail2ban's監視に追加し、デフォルト設定の1つを上書きしました。 jailは、デフォルト設定とjail固有の設定を組み合わせて使用​​できます。

fail2banを有効にする

これまでに、 fail2banをインストールして構成しました。 次に、自動開始サービスとして実行できるようにする必要があります。 次に、それをテストして、期待どおりに機能することを確認する必要があります。

広告

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

 sudo systemctl enable fail2ban

また、サービスを開始するためにも使用します。

 sudo systemctl start fail2ban 

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

 sudo systemctl status fail2ban.service 

すべてが良さそうです。緑色のライトが付いているので、すべてが順調です。

fail2banが同意するかどうかを見てみましょう:

 sudofail2ban-クライアントステータス

これは、私たちが設定したものを反映しています。 [sshd]という名前の単一の刑務所を有効にしました。 前のコマンドに刑務所の名前を含めると、それをより深く見ることができます。

 sudofail2ban-クライアントステータスsshd 

これは、失敗の数と禁止されたIPアドレスをリストします。 もちろん、現時点ではすべての統計はゼロです。

私たちの刑務所をテストする

別のコンピューターで、テストマシンにSSH接続要求を行い、意図的にパスワードを誤って入力します。 接続を試みるたびに、パスワードを正しく取得するための3回の試行が行われます。

広告

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

次に、別の接続を試み、パスワードをさらに3回間違って入力します。 3番目の接続要求の最初の誤ったパスワードの試行はfail2ban.

3番目の接続要求で最初の誤ったパスワードを使用した後、リモートマシンからの応答がありません。 説明はありません。 肩が冷たくなるだけです。

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

 ssh [email protected] 

以前は、エラーメッセージは「許可が拒否されました」でした。 今回は、接続が完全に拒否されました。 私たちはペルソナノングラタです。 私たちは禁止されました。

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

 sudofail2ban-クライアントステータス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はトリッキーな問題に対する洗練されたソリューションです。 構成はほとんど必要なく、操作上のオーバーヘッドはほとんどありません。

関連:開発者と愛好家のための最高のLinuxラップトップ