サーバーをブルートフォース攻撃から保護することは必須です。問題は、具体的にどのようにするかですか?幸運なことに、Fail2Banはサーバーを保護するためにすぐそこにありますが、Fail2Banのデフォルトの設定は最適なセキュリティのために微調整が必要です。心配しないでください、このチュートリアルでカバーされています。
このチュートリアルでは、Fail2Banを設定し、SSHサーバーを保護することでブルートフォース攻撃から防御する方法を学びます。
準備はいいですか?SSHサーバーのセキュリティを最適化するために読み続けましょう!
前提条件
このチュートリアルは、ステップバイステップの手順で構成されています。一緒に進めるようにするために、以下の準備が整っていることを確認してください。
- UbuntuとDebianのサーバー – このチュートリアルでは、Fail2Banを設定するためにUbuntu 18.04 LTSを実行しているサーバーと、Fail2Banの禁止設定をテストするためのDebian 10のサーバーを使用します。
- ルートアクセスまたはsudo権限を持つサーバーで、スーパーユーザーとしてコマンドを実行するための特権が必要です。
- Fail2BanがUbuntuまたはDebianサーバーにインストールされました。
ベースファイアウォールの設定
Fail2Banはログを監視し、一定の時間枠内にログイン試行が多すぎるIPアドレスをブロックすることで、サーバーを保護します。ただし、まず、悪意のある行為をサーバーでブロックするためのルールを追加できるベースファイアウォールを設定します。
1.まず、構成ファイルを変更するときにFail2Ban (fail2ban stop
)を実行して停止するため、以下のservice
コマンドを実行します。変更をテストして正常に動作することを確認できるように、変更を加えるときにFail2Banを停止します。

2. apt install
コマンドを実行してSendmail
とIPTables-persistent
をインストールします。SendmailはFail2BanがIPアドレスをブロックするときに通知するために使用されるプログラムです。IPTables-persistentは、変更された構成設定を/etc/sysconfig/iptablesファイルに保存するプログラムです。
これらのプログラムをインストールしておくと、停電などの予期しない事態が発生しても、ファイアウォールの設定が保持されます。
以下の各iptables
コマンドを実行して、ファイアウォールを設定します。これらのコマンドは出力は生成しませんが、ファイアウォールに4つのルールが追加されます。これらのルールは、サーバへの接続を許可またはブロックします。

4. 以下のiptables
コマンドを実行して、ファイアウォールに設定を要約した内容を表示します。
以下に、ファイアウォールに追加されたルールがハイライト表示されています。

5. 次に、以下のコマンドを実行して、ルールを/etc/sysconfig/iptables-configファイルに保存し、Fail2Banサービスを開始します。iptables-configファイルにはすべての永続的なファイアウォールルールが格納されています。
Fail2Banは自動的にいくつかのルールをファイアウォールに追加し、サーバーを保護します。
6. 最後に、以下のiptables
コマンドを再実行して、ファイアウォールルールを表示します。
以下に、Fail2Banがファイアウォールに追加した新しいルールが赤でハイライト表示されています。

ローカルのFail2Ban設定の調整
今、基本的なファイアウォールが稼働しているので、サーバーのセキュリティをさらに強化するために、ローカルのFail2Ban設定ファイルを調整する時が来ました。このチュートリアルでは、/etc/fail2ban/jail.conf構成ファイルを使用します。なぜなら、Fail2Banアプリケーションのグローバル設定を構成するために必要なオプションがすべて含まれているからです。
おそらく、SSHサーバーのためにカスタムルールを作成したい場合は、新しいjail.localファイル(jail.confファイルをベースに)を作成し、SSH固有のルールをjail.localファイルに配置します。これにより、サーバーのjail.confファイルで設定を上書きできます。
1. 以下のawk
コマンドを実行して、次の操作を行います:
/etc/fail2ban/jail.conf
ファイルの内容('{ printf "# "; print; }'
)を出力します。- jail.confファイルをベースにしたjail.localという名前のファイルを作成し、jail.confファイルのデフォルト設定を上書きできるようにします。
/etc/fail2ban/jail.conf
ファイルの内容をtee
コマンドにパイプします。これにより、jail.conf
ファイルの内容がローカルファイルシステム(/etc/fail2ban/jail.local
)に書き込まれます。

2. jail.localファイルを作成したら、以下のls
コマンドを実行します。このコマンドは、サーバーのFail2Banディレクトリ(/etc/fail2ban
)の内容をリストアップして、jail.localファイルが正しく生成されたことを確認します。
新しいjail.localファイルが表示されれば、ローカルファイルが正しく生成されています。

3. 好みのテキストエディタで/etc/fail2ban/jail.localファイルを開き、[ssh]セクションに移動します。
オプションの前にある#記号を削除して、[sshd]とenabledオプションのコメントを解除し、SSHを有効にします。
このポイントからチュートリアルの残りの部分まで、セクションまたはオプションの前の#記号を削除して、それらを有効にします。

4. 下にスクロールし、以下に示す[DEFAULT]セクションのコメントを解除します。このセクションは、Fail2Banのデフォルト設定を構成する場所です。このセクションの設定は、Fail2Banが管理するすべてのjailに適用されます。

5. 次に、bantimeセクションにスクロールし、bantimeを60分に設定します。 bantimeオプションは、失敗したログイン試行後にIPアドレスが禁止される時間(分単位)を設定します。
デフォルトのバンタイム設定は600秒(10分)です。この設定を好みに合わせて調整できますが、バンタイム設定が低いほどサーバーの負荷が増加します。

6. findtime と maxretry オプションに移動します。 findtime はそのまま(10m)にして、 maxretry を 3 に減らします。
findtime オプションは、IPアドレスがログインに失敗してバンされるまでの時間(分単位)を設定します。一方、maxretry オプションは、IPアドレスがログインに失敗する回数を設定します。
デフォルトの findtime 設定は10分で、maxretry は5分です。したがって、10分間に5回ログインに失敗したIPアドレスはバンされます。

7. スクロールして、destemail、sender、およびmta オプションのコメントを外し、設定します。
- destemail – Fail2Banが通知を送信する電子メールアドレスを入力します。
- sender – Fail2Banが destemail に送信する電子メールの「From」フィールドを設定します。
- mta – デフォルト値(sendmail)のままにします。 mta オプションは、Fail2Banが通知を送信するために使用する電子メール配信エージェントを設定します。

8. 以下に示すように、アクションオプションに移動し、action_mwlオプションのコメントを外してください。これにより、Fail2Banはログウォッチのメールを送信できます。サーバー上の潜在的なセキュリティの問題を詳細に調査するためにログウォッチのメールを確認できます。
変更内容を保存してテキストエディタから終了してください。

9. 以下のコマンドを実行して、fail2ban
サービスを再起動してください。
10. 最後に、以下のコマンドを実行してfail2ban
サービスのstatus
を確認してください。sudo service fail2ban status
Fail2Banサービスが動作している場合、以下のような出力が表示されます。
Fail2Banサービスが動作している場合、以下のような出力が表示されます。

禁止の設定をテストする
Fail2Banを設定したので、実際に禁止の設定が機能するかテストする時間です。セカンダリサーバーからFail2Banサーバーに対して複数の失敗したSSHログインを試み、そのセカンダリサーバーが禁止されるかどうかを確認してください。
1. セカンダリサーバー(Debian)にログインし、以下のコマンドを実行してFail2BanサーバーにSSHできるか確認してください。
このデモでは、IPが134.122.20.103のDebian 10サーバーを使用して、IPが69.28.83.134のfail2ban
サーバーにssh
するものです。
2. プロンプトが表示されたらランダムなパスワードを入力し、Enterキーを押してください。
最初の試行で、Fail2BanサーバーはSSHログイン試行を停止し、以下のようにPermission deniedメッセージを表示します。2回または3回ほどSSHログインを繰り返すと、Fail2Banサーバーは最終的にSSHログイン試行に応答しなくなります。
この時点ではもうPermission deniedメッセージは表示されず、空白の画面が表示されます。空白の画面が表示されると、2番目のサーバー(Debian)がFail2Banサーバーから禁止されていることを示します。

しかし、おそらくすでにFail2BanサーバーからブロックするIPアドレスのリストを持っているかもしれません。その場合は、jail.localファイルを開き、[DEFAULT]セクションに移動します。ignoreipオプションのコメントを外し、ブロックするIPアドレスを設定します。次に示すように。
アドレスは複数の別々のIPv4またはIPv6エントリ、またはコンマで区切って指定できます。

3. Fail2Banサーバー(Ubuntu)で以下のiptables
コマンドを再実行してファイアウォールのルールを表示します。
以下に注意してください。新しいルールがあることがわかります。このルールは134.122.20.103 IPアドレスからのSSHログイン試行を拒否します。
Fail2Banからもメールが届きます。成功した場合、ブルートフォース攻撃を停止し、サーバーを潜在的な損害から守りました。sendmailがFail2Banサーバーに設定されている場合は、ログファイルが添付されたメール通知が届きます。

結論
このチュートリアルを通じて、UbuntuサーバーでFail2Banを設定する方法を学びました。この時点で、SSHサーバーをブルートフォース攻撃から保護する知識を持っているはずです。
では、なぜこの新しい知識をさらに活用しないのでしょうか?たとえば、dockerホスト上でFail2Banを使用してすべてのポートのIPをブロックすることから始めてみませんか?