序章

SSHを介したサーバーへの接続は非常に安全ですが、SSHデーモン自体は、正しく機能するためにインターネットに公開する必要があるサービスです。 これには固有のリスクが伴い、加害者になる可能性のある人に攻撃のベクトルを提供します。

ネットワークに公開されているサービスはすべて、このように潜在的なターゲットになります。 これらのサービスのアプリケーションログに注意を払うと、ユーザーとボットによるブルートフォース攻撃を表す、体系的なログイン試行が繰り返されることがよくあります。

Fail2ban と呼ばれるサービスは、事前定義された失敗したログイン試行回数に基づいてiptablesファイアウォール構成を自動的に変更するルールを作成することにより、この問題を軽減できます。 これにより、サーバーはユーザーの介入なしに不正なアクセスの試みに応答できるようになります。

このガイドでは、CentOS7サーバーにFail2banをインストールして使用する方法について説明します。

CentOS7にFail2banをインストールする

Fail2banは公式のCentOSパッケージリポジトリでは利用できませんが、EPELプロジェクト用にパッケージ化されています。 エンタープライズLinux用のExtraPackagesの略であるEPELは、CentOSから入手可能なリリースパッケージとともにインストールできます。

  1. sudo yum install epel-release

続行するように求められます。yを押してから、Enterを押します。

yum prompt
Transaction Summary ============================================================================ Install 1 Package Total download size: 14 k Installed size: 24 k Is this ok [y/d/N]: y

これで、をインストールできるようになります。 fail2ban パッケージ:

  1. sudo yum install fail2ban

再度、続行するように求められたら、yおよびEnterを押します。

インストールが完了したら、 systemctl を有効にするには fail2ban サービス:

  1. sudo systemctl enable fail2ban

ローカル設定を構成する

Fail2banサービスは、構成ファイルを /etc/fail2ban ディレクトリ。 そこで、デフォルト値が呼ばれるファイルを見つけることができます jail.conf. このファイルはパッケージのアップグレードによって上書きされる可能性があるため、その場で編集しないでください。 代わりに、という新しいファイルを作成します jail.local. で定義された値 jail.local それらをオーバーライドします jail.conf.

jail.conf が含まれています [DEFAULT] セクション、続いて個々のサービスのセクション。 jail.local これらの値のいずれかをオーバーライドできます。 さらに、 /etc/fail2ban/jail.d/ これらのファイルの両方の設定を上書きするために使用できます。 ファイルは次の順序で適用されます。

  1. /etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf、アルファベット順
  3. /etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local、アルファベット順

どのファイルにも [DEFAULT] セクション。最初に実行され、個々の刑務所のセクションが含まれる場合もあります。 特定のパラメーターに設定された最後のvavalueが優先されます。

の非常に単純なバージョンを書くことから始めましょう jail.local. を使用して新しいファイルを開く nano (または選択したエディター):

  1. sudo nano /etc/fail2ban/jail.local

以下を貼り付けます。

/etc/fail2ban/jail.local
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

[sshd]
enabled = true

これは3つの設定を上書きします:新しいデフォルトを設定します bantime すべてのサービスで、使用していることを確認してください iptables ファイアウォール構成の場合、 sshd 刑務所。

終了して新しいファイルを保存します( nano Ctrl-X を押して終了し、 y を押して保存し、 Enter を押してファイル名を確認します)。 これで再起動できます fail2ban を使用したサービス systemctl:

  1. sudo systemctl restart fail2ban

The systemctl コマンドは出力なしで終了するはずです。 サービスが実行されていることを確認するために、 fail2ban-client:

  1. sudo fail2ban-client status
Output
Status |- Number of jail: 1 `- Jail list: sshd

特定の刑務所に関するより詳細な情報を入手することもできます。

  1. sudo fail2ban-client status sshd

利用可能な設定を調べる

のバージョン jail.local 上で定義したのは良いスタートですが、他の多くの設定を調整することもできます。 開ける jail.conf、およびデフォルトのいくつかを調べます。 これらの値のいずれかを変更する場合は、の適切なセクションにコピーする必要があることに注意してください。 jail.local インプレースで変更するのではなく、そこで調整します。

  1. sudo nano /etc/fail2ban/jail.conf

すべての刑務所のデフォルト設定

まず、スクロールします [DEFAULT] セクション。

ignoreip = 127.0.0.1/8

Fail2banが無視する送信元アドレスを調整するには、に値を追加します。 ignoreip パラメータ。 現在、ローカルマシンからのトラフィックを禁止しないように構成されています。 パラメータの最後にスペースで区切って追加することにより、無視する追加のアドレスを含めることができます。

bantime = 600

The bantime パラメータは、クライアントが正しく認証に失敗したときにクライアントが禁止される時間の長さを設定します。 これは秒単位で測定されます。 デフォルトでは、これは600秒または10分に設定されています。

findtime = 600
maxretry = 3

注意したい次の2つのパラメータは findtimemaxretry. これらは連携して、クライアントが禁止されるべき条件を確立します。

The maxretry 変数は、クライアントが次のように定義された時間枠内に認証する必要がある試行回数を設定します。 findtime、禁止される前に。 デフォルト設定では、Fail2banは、10分以内に3回ログインに失敗したクライアントを禁止します。

destemail = root@localhost
sendername = Fail2Ban
mta = sendmail

電子メールアラートを構成する場合は、 destemail, sendername、 と mta 設定。 The destemail パラメータは、禁止メッセージを受信する必要がある電子メールアドレスを設定します。 The sendername 電子メールの「From」フィールドの値を設定します。 The mta パラメータは、メールの送信に使用されるメールサービスを設定します。

action = $(action_)s

このパラメーターは、Fail2banが禁止を開始するときに実行するアクションを構成します。 値 action_ このパラメータの直前のファイルで定義されています。 デフォルトのアクションは、禁止時間が経過するまで、問題のあるホストからのトラフィックを拒否するようにファイアウォールを構成することです。

電子メールアラートを構成する場合は、この値を action_action_mw. 電子メールに関連するログ行を含める場合は、次のように変更できます。 action_mwl. メールアラートを使用する場合は、適切なメール設定が構成されていることを確認する必要があります。

個々の刑務所の設定

[DEFAULT]、さまざまなサービスの個々の刑務所を構成するセクションに遭遇します。 これらには通常、 port 禁止され、 logpath 悪意のあるアクセスの試みを監視します。 たとえば、すでに有効にしたSSH刑務所 jail.local 次の設定があります。

/etc/fail2ban/jail.local
[sshd]

port    = ssh
logpath = %(sshd_log)s

この場合、 ssh は標準SSHポートの事前定義変数であり、 %(sshd_log)s Fail2banの標準構成の他の場所で定義された値を使用します(これにより、 jail.conf 異なるオペレーティングシステム間でポータブル)。

あなたが遭遇するかもしれないもう一つの設定は filter これは、ログの行が認証の失敗を示しているかどうかを判断するために使用されます。

The filter 値は実際にはにあるファイルへの参照です /etc/fail2ban/filter.d ディレクトリ、その .conf 拡張機能が削除されました。 このファイルには、ログの行が不良であるかどうかを判別する正規表現が含まれています。 このファイルはかなり複雑で、事前定義された設定が適切な行とよく一致しているため、このガイドではこのファイルについて詳しく説明しません。

ただし、そのディレクトリを調べると、使用可能なフィルタの種類を確認できます。

  1. ls /etc/fail2ban/filter.d

使用しているサービスに関連していると思われるファイルが表示された場合は、テキストエディタで開く必要があります。 ほとんどのファイルはかなりよくコメントされており、スクリプトがどのタイプの状態を防ぐように設計されているかを知ることができるはずです。 これらのフィルターのほとんどには、適切な(無効にされた)セクションがあります。 jail.conf で有効にできること jail.local 必要に応じて。

たとえば、Nginxを使用してWebサイトにサービスを提供していると偽って、パスワードで保護されたサイトの一部がログイン試行で非難されていることに気づきます。 Fail2banに使用するように指示できます nginx-http-auth.conf 内でこの状態をチェックするファイル /var/log/nginx/error.log ファイル。

これは実際にはすでにと呼ばれるセクションで設定されています [nginx-http-auth] 私たちの中で /etc/fail2ban/jail.conf ファイル。 追加する必要があります enabled のパラメータ nginx-http-auth 刑務所に jail.local:

/etc/fail2ban/jail.local
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

[sshd]
enabled = true

[nginx-http-auth]
enabled = true

そして、再起動します fail2ban サービス:

  1. sudo systemctl restart fail2ban

Fail2banログとファイアウォール構成を監視する

Fail2banのようなサービスが意図したとおりに機能していることを知っておくことが重要です。 を使用して開始します systemctl サービスのステータスを確認するには:

  1. sudo systemctl status fail2ban

ここで何かがおかしいと思われる場合は、ログをチェックしてトラブルシューティングを行うことができます。 fail2ban 前回の起動以降のユニット:

  1. sudo journalctl -b -u fail2ban

次に、 fail2ban-client の全体的なステータスを照会するには fail2ban-server、または個々の刑務所:

  1. sudo fail2ban-client status
  2. sudo fail2ban-client status jail_name

最近のアクションの記録については、Fail2banのログをたどってください( Ctrl-C を押して終了します)。

  1. sudo tail -F /var/log/fail2ban.log

iptablesに設定されている現在のルールを一覧表示します。

  1. sudo iptables -L

各ルールを有効にするために必要なコマンドを反映した形式でiptablesルールを表示します。

  1. sudo iptables -S

結論

これで、サービスの基本的な禁止ポリシーを構成できるようになります。 Fail2banはセットアップが非常に簡単で、認証を使用するあらゆる種類のサービスを保護するための優れた方法です。

Fail2banの仕組みについて詳しく知りたい場合は、fail2banのルールとファイルの仕組みに関するチュートリアルを確認してください。