CentOS 7でFail2Banを使用してSSHを保護する方法

前書き

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

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

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

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

CentOS 7にFail2banをインストールします

Fail2banは公式のCentOSパッケージリポジトリでは利用できませんが、https://fedoraproject.org/wiki/EPEL [EPELプロジェクト]用にパッケージ化されています。 EPELは、Enterprise Linuxのエクストラパッケージの略で、CentOSから入手可能なリリースパッケージでインストールできます。

sudo yum install epel-release
  • y を押し続け、 Enter *を押すように求められます。

yum promptTransaction Summary
============================================================================
Install  1 Package

Total download size: 14 k
Installed size: 24 k
Is this ok [y/d/N]:

これで、 `+ fail2ban +`パッケージをインストールできるはずです。

sudo yum install fail2ban

繰り返しますが、続行を求められたら* y Enter *を押します。

インストールが完了したら、 `+ systemctl `を使用して ` fail2ban +`サービスを有効にします。

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] +`セクションが含まれる場合があり、個々のjailのセクションも含まれる場合があります。 特定のパラメーターに設定された最後のvavalueが優先されます。

まず、 + jail.local`の非常にシンプルなバージョンを書くことから始めましょう。 `+ nano +(または選択したエディター)を使用して新しいファイルを開きます。

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 +」jailを有効にします。

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

sudo systemctl restart fail2ban

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

sudo fail2ban-client status
OutputStatus
|- Number of jail:      1
`- Jail list:   sshd

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

sudo fail2ban-client status sshd

利用可能な設定を調べる

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

sudo nano /etc/fail2ban/jail.conf

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

最初に、 `+ [DEFAULT] +`セクションをスクロールします。

ignoreip = 127.0.0.1/8

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

bantime = 600

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

findtime = 600
maxretry = 3

注目したい次の2つのパラメーターは、「+ findtime 」と「 maxretry +」です。 これらは連携して、クライアントを禁止する条件を確立します。

`+ maxretry `変数は、禁止される前に、クライアントが ` findtime +`で定義された時間枠内で認証しなければならない試行回数を設定します。 デフォルト設定では、Fail2banは、10分間に3回ログインに失敗したクライアントを禁止します。

destemail = [email protected]
sendername = Fail2Ban
mta = sendmail

メールアラートを設定したい場合は、 + destemail ++ sendername +、および `+ mta `設定をオーバーライドする必要があります。 ` destemail `パラメータは、禁止メッセージを受信するメールアドレスを設定します。 ` sendername `は、電子メールの[差出人]フィールドの値を設定します。 ` mta +`パラメータは、メールの送信に使用されるメールサービスを設定します。

action = $(action_)s

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

電子メールアラートを設定したい場合、この値を `+ action_ `から ` action_mw `に上書きできます。 電子メールに関連するログ行を含める場合は、 ` action_mwl +`に変更できます。 メールアラートを使用する場合は、適切なメール設定が構成されていることを確認する必要があります。

個々の刑務所の設定

`+ [DEFAULT] `の後に、さまざまなサービスの個別のjailを設定するセクションがあります。 これらには通常、禁止される「 port 」と悪意のあるアクセス試行を監視する「 logpath 」が含まれます。 たとえば、 ` jail.local +`で既に有効にしているSSHジェイルには次の設定があります:

/etc/fail2ban/jail.local

[sshd]

port    = ssh
logpath = %(sshd_log)s

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

遭遇する可能性のある別の設定は、ログの行が認証の失敗を示すかどうかを決定するために使用される「+ filter +」です。

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

ただし、そのディレクトリを調べることで、どのようなフィルターが利用できるかを確認できます。

ls /etc/fail2ban/filter.d

使用しているサービスに関連していると思われるファイルが表示された場合は、テキストエディターで開く必要があります。 ほとんどのファイルにはかなりのコメントが付けられており、スクリプトが保護するために設計された条件のタイプを伝えることができるはずです。 これらのフィルターの大部分には、必要に応じて `+ jail.local `で有効化できる ` jail.conf +`に適切な(無効化された)セクションがあります。

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

これは実際には、 + / etc / fail2ban / jail.conf +`ファイルの `+ [nginx-http-auth] +`というセクションで既に設定されています。 `+ nginx-http-auth + jailの `+ enabled `パラメータを ` 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

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

sudo systemctl restart fail2ban

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

Fail2banなどのサービスが意図したとおりに機能していることを知っておくことが重要です。 `+ systemctl +`を使用してサービスのステータスを確認することから始めます。

sudo systemctl status fail2ban

ここで何かがおかしいと思われる場合は、最後のブート以降の `+ fail2ban +`ユニットのログを確認することでトラブルシューティングできます。

sudo journalctl -b -u fail2ban

次に、 `+ fail2ban-client `を使用して、 ` fail2ban-server +`の全体的なステータス、または個々のjailを照会します。

sudo fail2ban-client status
sudo fail2ban-client status

Fail2banのログに従って最近のアクションの記録を確認します(終了するには* Ctrl-C *を押します)。

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

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

sudo iptables -L

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

sudo iptables -S

結論

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

Fail2banの仕組みの詳細については、https://www.digitalocean.com/community/articles/how-fail2ban-works-to-protect-services-on-a-linux-のチュートリアルをご覧ください。サーバー[fail2banルールとファイルの仕組み]。

前の投稿:Debian 9にRedisをインストールして保護する方法
次の投稿:Debian 8用のApacheでSSL証明書を作成する方法