前書き

Webサーバーを運用する場合、サイトとユーザーを保護するためのセキュリティ対策を実装することが重要です。 ファイアウォールポリシーを使用してWebサイトとアプリケーションを保護し、パスワード認証を使用して特定の領域へのアクセスを制限することは、システムを保護するための優れた出発点です。 ただし、一般にアクセス可能なパスワードプロンプトは、悪意のあるユーザーやボットからのブルートフォース攻撃を招く可能性があります。

+ fail2ban +`を設定すると、この問題を緩和するのに役立ちます。 ユーザーが繰り返しサービスの認証に失敗する(または他の不審なアクティビティに従事する)場合、「+ fail2ban +」は実行中のファイアウォールポリシーを動的に変更することにより、問題のIPアドレスの一時的な禁止を発行できます。 各 `+ fail2ban +“ jail”は、失敗した試行を示すパターンについてサービスによって書き込まれたログをチェックすることにより動作します。 Apacheログを監視するための `+ fail2ban +`の設定は、付属の設定フィルターを使用して簡単に行えます。

このガイドでは、 `+ fail2ban +`をインストールし、Apacheログを監視して侵入の試みを監視する方法を示します。 Ubuntu 14.04サーバーを使用します。

前提条件

始める前に、Ubuntu 14.04サーバーを非ルートアカウントでセットアップする必要があります。 管理アカウントを発行するには、このアカウントに「+ sudo 」権限を設定する必要があります。 「 sudo +」権限を持つユーザーを設定する方法については、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04 [次のサーバーの初期設定ガイド]をご覧ください。 Ubuntu 14.04]。

Apacheのインストールとパスワード認証の構成

`+ fail2ban `でApacheサーバーを保護することに興味がある場合は、サーバーが既にセットアップされて実行されている可能性があります。 そうでない場合は、 ` apt`を使用してUbuntuのデフォルトリポジトリからApacheをインストールできます。

次を入力して、ローカルパッケージインデックスを更新し、インストールします。

sudo apt-get update
sudo apt-get install apache2

`+ fail2ban +`サービスは、ログインエントリポイントを保護するのに役立ちます。 これがApacheインストールに役立つためには、サーバー上のコンテンツの少なくともサブセットに対してパスワード認証を実装する必要があります。 https://www.digitalocean.com/community/tutorials/how-to-set-up-password-authentication-with-apache-on-ubuntu-14-04 [このガイド]に従って、パスワード保護を設定できますApacheサーバー。

Fail2Banをインストールする

Apacheサーバーが実行され、パスワード認証が有効になったら、先に進んで `+ fail2ban +`をインストールできます(前の手順で既にApacheが設定されている場合に備えて、ここに別のリポジトリの再取得を含めます)。

sudo apt-get update
sudo apt-get install fail2ban

これにより、ソフトウェアがインストールされます。 デフォルトでは、 `+ fail2ban +`は失敗したSSHログイン試行のみを禁止するように設定されています。 悪意のあるアクティビティを示すパターンについてApacheログをチェックするように構成するいくつかのルールを有効にする必要があります。

Fail2Ban内の一般設定の調整

開始するには、監視するアプリケーションログと問題のあるエントリが見つかったときに実行するアクションを決定するために `+ fail2ban `が使用する設定ファイルを調整する必要があります。 提供される ` / etc / fail2ban / jail.conf +`ファイルは、このために提供される主要なリソースです。

変更するには、このファイルを `+ / etc / fail2ban / jail.local`にコピーする必要があります。 これにより、パッケージの更新で新しいデフォルトファイルが提供された場合、変更が上書きされなくなります。

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

Apacheログ監視を設定できるように、新しくコピーしたファイルを開きます。

sudo nano /etc/fail2ban/jail.local

デフォルトの変更

まず、ファイル内に設定されているデフォルトを評価して、ニーズに合っているかどうかを確認する必要があります。 これらはファイル内の `+ [DEFAULT] +`セクションの下にあります。 これらの項目は一般的なポリシーを設定し、それぞれ特定の刑務所でオーバーライドできます。

最初に確認する項目の1つは、「+ fail2ban 」ポリシーの対象ではないクライアントのリストです。 これは ` ignoreip +`ディレクティブによって設定されます。 自分をロックアウトしないように、例外のリストに独自のIPアドレスまたはネットワークを追加することをお勧めします。 ただし、シェルアクセスを維持できる場合は、Webサーバーログインの場合は問題が少なくなります。これは、禁止をいつでも手動で元に戻すことができるためです。 既存のリストに、スペースで区切られた追加のIPアドレスまたはネットワークを追加できます。

/etc/fail2ban/jail.local

[DEFAULT]

. . .
ignoreip = 127.0.0.1/8

調整が必要なもう1つの項目は、「+ bantime +」です。これは、違反しているメンバーが禁止される秒数を制御します。 これを、悪意のあるアクターの努力を妨害するのに十分な時間に設定し、正当なユーザーが間違いを修正できるように十分に短い時間に設定することが理想的です。 デフォルトでは、これは600秒(10分)に設定されています。 適切と思われるこの値を増減します。

/etc/fail2ban/jail.local

[DEFAULT]

. . .
bantime =

次の2つの項目は、問題のあるクライアントを決定するために使用されるログ行の範囲を決定します。 `+ findtime `は秒単位で時間を指定し、 ` maxretry `ディレクティブはその時間内に許容される試行回数を示します。 クライアントが ` findtime `で設定された時間内に ` maxretry +`を超える試行を行った場合、それらは禁止されます:

/etc/fail2ban/jail.local

[DEFAULT]

. . .
findtime =    # These lines combine to ban clients that fail
maxretry =       # to authenticate 6 times within a half hour.

メール通知の設定(オプション)

禁止が行われるたびにメールを受信する場合は、メール通知を有効にすることができます。 そのためには、最初にサーバーにMTAをセットアップして、メールを送信できるようにする必要があります。 このタスクでPostfixを使用する方法については、https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-postfix-as-a-send-only-smtp-server-onをご覧ください-ubuntu-14-04 [このガイド]。

MTAを設定したら、 `+ / etc / fail2ban / jail.local `ファイルの ` [DEFAULT] `セクション内でいくつかの追加設定を調整する必要があります。 ` mta +`ディレクティブを設定することから始めます。 上記のチュートリアルが示すように、Postfixをセットアップする場合、この値を「mail」に変更します。

/etc/fail2ban/jail.local

[DEFAULT]

. . .
mta =

通知を送信するメールアドレスを選択する必要があります。 この値で `+ destemail `ディレクティブを変更します。 ` sendername +`ディレクティブを使用して、通知メールの「送信者」フィールドを変更できます。

/etc/fail2ban/jail.local

[DEFAULT]

. . .
destemail =
sendername =

`+ fail2ban `の用語では、「アクション」とは、クライアントが何度も認証に失敗した場合に従う手順です。 デフォルトのアクション( ` action_ +`と呼ばれる)は、問題のポートからIPアドレスを単に禁止することです。 ただし、メールが設定されている場合に使用できる他の2つの事前作成アクションがあります。

`+ action_mw `アクションを使用して、クライアントを禁止し、設定したアカウントに電子メール通知を送信して、問題のアドレスに関する「whois」レポートを送信できます。 また、 ` action_mwl +`アクションを使用することもできます。これは同じことを行いますが、禁止をトリガーした問題のあるログ行も含まれます。

/etc/fail2ban/jail.local

[DEFAULT]

. . .
action = %()s

Apacheログを監視するためのFail2Banの構成

一般的な `+ fail2ban +`設定が用意できたので、特定の動作パターンについてWebサーバーログを監視するApache固有のjailを有効にすることに集中できます。

設定ファイル内の各jailは、角括弧で囲まれたjail名を含むヘッダーでマークされます(すべてのセクションを除き、「+ [DEFAULT] 」セクションは特定のjailの設定を示します)。 デフォルトでは、 ` [ssh] +` jailのみが有効になっています。

Apacheログイン試行のログ監視を有効にするには、 + [apache] + jailを有効にします。 このセクション内の `+ enabled +`ディレクティブを編集して、「true」と読み上げます。

/etc/fail2ban/jail.local

[apache]

enabled  =
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache*/*error.log
maxretry = 6
. . .

Apacheサーバーがデフォルトのログの場所( + / var / log / apache / error.log +)に書き込んでいる場合、jailはすでに正しい場所を探すように設定されています。 別の場所にログインしている場合は、必要に応じて「+ logpath 」を変更します。 また、この特定の刑務所に異なる制限を設定する場合は、この刑務所に ` maxretry `ディレクティブを調整するか、 ` findtime +`値を追加してください。

/etc/fail2ban/jail.local

[apache]

enabled  = true
port     = http,https
filter   = apache-auth
logpath  =
maxretry =
findtime =
. . .

上記の刑務所は、基本認証の失敗を禁止します。 有効にする価値のある他の事前設定されたジェイルもあります( `+ [apache-multiport] +`ジェイルは、不要なレガシージェイルです)。

`+ [apache-noscript] +`刑務所は、Webサイト上で実行および悪用するスクリプトを検索しているクライアントを禁止するために使用されます。 Webサーバーと組み合わせてPHPまたは他の言語を使用しない場合は、この刑務所を有効にして、これらのタイプのリソースを要求する人を禁止できます。

/etc/fail2ban/jail.local

[apache-noscript]

enabled  =
. . .

`+ [apache-overflows] +`刑務所は、異常に長く疑わしいURLを要求しようとしているクライアントをブロックするために使用されます。 これらは多くの場合、バッファオーバーフローを引き起こそうとすることによってApacheを悪用しようとする兆候です。 これらのタイプの攻撃を防ぎたい場合は、この刑務所を有効にすることができます。

/etc/fail2ban/jail.local

[apache-overflows]

enabled  =
. . .

`+ [apache-overflows] `エントリをコピーして貼り付け、少し変更することで、いくつかの追加チェックを行うことができます。 たとえば、そのセクションをコピーして貼り付け、jail名とフィルターを「 apache-badbots +」に変更して、既知の悪意のあるボット要求パターンを停止できます。

/etc/fail2ban/jail.local

[apache-overflows]

enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache*/*error.log
maxretry = 2

[]

enabled  = true
port     = http,https
filter   =
logpath  = /var/log/apache*/*error.log
maxretry = 2

Apacheを使用してユーザーのホームディレクトリ内のWebコンテンツへのアクセスを提供しない場合は、再度コピーして貼り付け、jailとフィルター名を「+ apache-nohome +」に変更できます。

/etc/fail2ban/jail.local

[apache-overflows]

enabled  = true
port     = http,https
filter   = apache-overflows
logpath  = /var/log/apache*/*error.log
maxretry = 2

[apache-badbots]

enabled  = true
port     = http,https
filter   = apache-badbots
logpath  = /var/log/apache*/*error.log
maxretry = 2

[]

enabled  = true
port     = http,https
filter   =
logpath  = /var/log/apache*/*error.log
maxretry = 2

最後に、PHPでApacheを使用している場合、 + [php-url-fopen] + jailを有効にすると、悪意のある目的で特定のPHP動作を使用する試みをブロックできます。 おそらく、正しいアクセスログの場所を指すように `+ logpath `ディレクティブを変更する必要があります(Ubuntuでは、デフォルトの場所は ` / var / log / apache2 / access.log +`です)。 他の刑務所のエラーログと一致するパターンに似たパターンを使用できます。

/etc/fail2ban/jail.local

[php-url-fopen]

enabled =
port    = http,https
filter  = php-url-fopen
logpath =

必要な変更が完了したら、ファイルを保存して閉じます。

Apache Jailsの実装

設定の変更を実装するには、 `+ fail2ban +`サービスを再起動する必要があります。 次のように入力して、それを行うことができます。

sudo service fail2ban restart

サービスを再起動して、設定したさまざまな禁止ポリシーを実装する必要があります。

有効なジェイルに関する情報の取得

`+ fail2ban-client +`コマンドを使用して、有効なすべてのjailを表示できます。

sudo fail2ban-client status

有効にしたすべての刑務所のリストが表示されます。

OutputStatus
|- Number of jail:      7
`- Jail list:           php-url-fopen, apache-overflows, apache-noscript, ssh, apache-badbots, apache-nohome, apache

`+ fail2ban `がファイアウォールルールを変更して、クライアントを禁止するためのフレームワークを作成していることがわかります。 以前のファイアウォールルールがなくても、 ` fail2ban +`が専用のチェーンにクライアントを追加することでクライアントを選択的に禁止できるようにするフレームワークが有効になりました。

sudo iptables -S
Output-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-apache
-N fail2ban-apache-badbots
-N fail2ban-apache-nohome
-N fail2ban-apache-noscript
-N fail2ban-apache-overflows
-N fail2ban-php-url-fopen
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-nohome
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-badbots
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-php-url-fopen
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-overflows
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-noscript
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A fail2ban-apache -j RETURN
-A fail2ban-apache-badbots -j RETURN
-A fail2ban-apache-nohome -j RETURN
-A fail2ban-apache-noscript -j RETURN
-A fail2ban-apache-overflows -j RETURN
-A fail2ban-php-url-fopen -j RETURN
-A fail2ban-ssh -j RETURN

いずれかの刑務所によって執行されている禁止の詳細を確認したい場合は、おそらく `+ fail2ban-client +`を再度使用する方が簡単です。

sudo fail2ban-client status
OutputStatus for the jail: apache
|- filter
|  |- File list:        /var/log/apache2/error.log
|  |- Currently failed: 0
|  `- Total failed:     0
`- action
  |- Currently banned: 0
  |  `- IP list:
  `- Total banned:     0

Fail2Banポリシーのテスト

`+ fail2ban +`ポリシーをテストして、トラフィックが期待どおりにブロックされることを確認することが重要です。 たとえば、Apache認証プロンプトでは、間違った資格情報を何度も指定できます。 制限を超えると、禁止され、サイトにアクセスできなくなります。 メール通知を設定すると、指定したメールアカウントに禁止に関するメッセージが表示されます。

`+ fail2ban-client +`コマンドでステータスを見ると、あなたのIPアドレスがサイトから禁止されていることがわかります:

sudo fail2ban-client status apache
OutputStatus for the jail: apache
|- filter
|  |- File list:        /var/log/apache2/error.log
|  |- Currently failed: 0
|  `- Total failed:     12
`- action
  |- Currently banned: 1
  |  `- IP list:
  `- Total banned:     1

ルールが機能していることに満足したら、次のように入力して、 `+ fail2ban-client +`でIPアドレスを手動で禁止解除できます。

sudo fail2ban-client set apache unbanip

これで、認証を再試行できるようになります。

結論

Apacheサーバーを保護するために `+ fail2ban `を設定することは、最も単純なケースではかなり簡単です。 ただし、「 fail2ban 」は、特定のセキュリティニーズに合ったポリシーを構築するための柔軟性を提供します。 ` / etc / fail2ban / jail.local `ファイル内の変数とパターン、およびそれが依存するファイルを ` / etc / fail2ban / filter.d `および ` / etc / fail2ban内で見ることにより/ action.d + `ディレクトリには、ニーズの変化に応じて微調整したり変更したりできる多くの部分があります。 `+ fail2ban +`でサーバーを保護する方法の基本を学ぶと、最小限の労力で多くのセキュリティを提供できます。

`+ fail2ban +`の詳細については、次のリンクをご覧ください。