Ubuntu14.04でFail2Banを使用してApacheサーバーを保護する方法
序章
Webサーバーを運用する場合は、サイトとユーザーを保護するためのセキュリティ対策を講じることが重要です。 ファイアウォールポリシーを使用してWebサイトとアプリケーションを保護し、パスワード認証を使用して特定の領域へのアクセスを制限することは、システムを保護するための優れた出発点です。 ただし、公的にアクセス可能なパスワードプロンプトは、悪意のあるユーザーやボットからのブルートフォースの試みを引き付ける可能性があります。
セットアップ fail2ban
この問題を軽減するのに役立ちます。 ユーザーがサービスへの認証に繰り返し失敗した場合(または他の疑わしいアクティビティに従事した場合)、 fail2ban
実行中のファイアウォールポリシーを動的に変更することにより、問題のあるIPアドレスを一時的に禁止することができます。 各 fail2ban
「jail」は、失敗した試行を示すパターンについてサービスによって書き込まれたログをチェックすることによって動作します。 セットアップ fail2ban
付属の構成フィルターを使用すると、Apacheログを簡単に監視できます。
このガイドでは、インストール方法を示します fail2ban
侵入の試みについてApacheログを監視するように設定します。 Ubuntu14.04サーバーを使用します。
前提条件
始める前に、root以外のアカウントでUbuntu14.04サーバーをセットアップする必要があります。 このアカウントは次のように構成する必要があります sudo
管理コマンドを発行するための特権。 でユーザーを設定する方法を学ぶには sudo
特権については、Ubuntu14.04の初期サーバーセットアップガイドに従ってください。
Apacheのインストールとパスワード認証の設定
Apacheサーバーを保護することに興味がある場合 fail2ban
、すでにサーバーをセットアップして実行している可能性があります。 そうでない場合は、UbuntuのデフォルトリポジトリからApacheをインストールできます。 apt
.
ローカルパッケージインデックスを更新し、次のように入力してインストールします。
- sudo apt-get update
- sudo apt-get install apache2
The fail2ban
サービスは、ログインエントリポイントを保護するのに役立ちます。 これがApacheのインストールで役立つようにするには、サーバー上のコンテンツの少なくともサブセットに対してパスワード認証を実装する必要があります。 このガイドに従って、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アドレスまたはネットワークを追加できます。
[DEFAULT]
. . .
ignoreip = 127.0.0.1/8 your_home_IP
あなたが調整したいと思うかもしれないもう一つの項目は bantime
、違反しているメンバーが禁止される秒数を制御します。 これを、悪意のあるアクターの努力を妨害するのに十分な長さに設定し、正当なユーザーが間違いを修正できるように十分に短く設定するのが理想的です。 デフォルトでは、これは600秒(10分)に設定されています。 適切と思われる場合は、この値を増減します。
[DEFAULT]
. . .
bantime = 3600
次の2つの項目は、問題のあるクライアントを特定するために使用されるログ行の範囲を決定します。 The findtime
時間を秒単位で指定し、 maxretry
ディレクティブは、その時間内に許容される試行回数を示します。 クライアントが以上を作る場合 maxretry
によって設定された時間内の試行 findtime
、それらは禁止されます:
[DEFAULT]
. . .
findtime = 3600 # These lines combine to ban clients that fail
maxretry = 6 # to authenticate 6 times within a half hour.
メール通知の設定(オプション)
禁止が行われるたびにメールを受信したい場合は、電子メール通知を有効にすることができます。 そのためには、まずサーバーにMTAを設定して、メールを送信できるようにする必要があります。 このタスクにPostfixを使用する方法については、このガイドに従ってください。
MTAを設定したら、内でいくつかの追加設定を調整する必要があります。 [DEFAULT]
のセクション /etc/fail2ban/jail.local
ファイル。 設定することから始めます mta
指令。 上記のチュートリアルが示すようにPostfixを設定する場合は、この値を「mail」に変更します。
[DEFAULT]
. . .
mta = mail
通知を送信するメールアドレスを選択する必要があります。 を変更します destemail
この値のディレクティブ。 The sendername
ディレクティブを使用して、通知メールの「送信者」フィールドを変更できます。
[DEFAULT]
. . .
destemail = [email protected]
sendername = Fail2BanAlerts
の fail2ban
用語では、「アクション」とは、クライアントが認証に何度も失敗した場合に従う手順です。 デフォルトのアクション( action_
)は、問題のポートからのIPアドレスを単に禁止することです。 ただし、メールを設定している場合に使用できる、他に2つの事前に作成されたアクションがあります。
あなたは使用することができます action_mw
クライアントを禁止し、構成されたアカウントに、問題のあるアドレスに関する「whois」レポートを含む電子メール通知を送信するアクション。 また、を使用することができます action_mwl
アクション。これは同じことを行いますが、禁止をトリガーした問題のあるログ行も含まれます。
[DEFAULT]
. . .
action = %(action_mwl)s
Apacheログを監視するためのFail2Banの設定
今、あなたは一般的なもののいくつかを持っています fail2ban
設定が整っていると、特定の動作パターンについてWebサーバーログを監視するApache固有のjailを有効にすることに集中できます。
構成ファイル内の各jailは、角かっこで囲まれたjail名を含むヘッダーでマークされます(ただし、 [DEFAULT]
セクションは特定の刑務所の構成を示します)。 デフォルトでは、 [ssh]
刑務所が有効になっています。
Apacheログイン試行のログ監視を有効にするには、 [apache]
刑務所。 編集します enabled
このセクション内のディレクティブで、「true」と表示されます。
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6
. . .
Apacheサーバーがデフォルトのログの場所に書き込んでいる場合(/var/log/apache/error.log
)刑務所はすでに正しい場所を見るように構成されています。 別の場所にログインしている場合は、 logpath
必要に応じて。 また、お気軽に調整してください maxretry
ディレクティブまたは追加 findtime
この特定の刑務所に異なる制限を設定したい場合は、この刑務所の値:
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache/custom_log_location.log
maxretry = 3
findtime = 600
. . .
上記の刑務所は、基本認証の失敗を禁止するための処理を行います。 有効にする価値のある他のいくつかの事前設定された刑務所もあります( [apache-multiport]
刑務所は必要のないレガシー刑務所です)。
The [apache-noscript]
jailは、実行および悪用するためにWebサイトでスクリプトを検索しているクライアントを禁止するために使用されます。 PHPまたはその他の言語をWebサーバーと組み合わせて使用しない場合は、この刑務所を有効にして、これらのタイプのリソースを要求するユーザーを禁止できます。
[apache-noscript]
enabled = true
. . .
The [apache-overflows]
jailは、異常に長く疑わしいURLを要求しようとしているクライアントをブロックするために使用されます。 これらは多くの場合、バッファオーバーフローをトリガーしようとしてApacheを悪用しようとする試みの兆候です。 これらのタイプの攻撃を防ぎたい場合は、この刑務所を有効にすることができます。
[apache-overflows]
enabled = true
. . .
いくつかの追加のチェックは、コピーして貼り付けることによって行うことができます [apache-overflows]
エントリとそれをわずかに変更します。 たとえば、そのセクションをコピーして貼り付け、刑務所の名前とフィルターを次のように変更できます。 apache-badbots
既知の悪意のあるボットリクエストパターンを停止するには:
[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
Apacheを使用してユーザーのホームディレクトリ内のWebコンテンツへのアクセスを提供しない場合は、もう一度コピーして貼り付け、jailとfilterの名前を次のように変更できます。 apache-nohome
:
[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
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/apache*/*error.log
maxretry = 2
最後に、PHPでApacheを使用している場合は、 [php-url-fopen]
jailは、悪意のある目的で特定のPHPの動作を使用する試みをブロックします。 おそらく変更する必要があります logpath
正しいアクセスログの場所を指すディレクティブ(Ubuntuでは、デフォルトの場所は /var/log/apache2/access.log
). 他の刑務所のエラーログと一致するパターンと同様のパターンを使用できます。
[php-url-fopen]
enabled = true
port = http,https
filter = php-url-fopen
logpath = /var/log/apache*/*access.log
必要な変更が完了したら、ファイルを保存して閉じます。
ApacheJailsの実装
構成の変更を実装するには、再起動する必要があります fail2ban
サービス。 次のように入力すると、次のように入力できます。
- sudo service fail2ban restart
サービスが再起動し、構成したさまざまな禁止ポリシーが実装されます。
有効な刑務所に関する情報の取得
を使用すると、有効になっているすべての刑務所を確認できます。 fail2ban-client
指図:
- 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 apache
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: 111.111.111.111
`- Total banned: 1
ルールが機能していることを確認したら、手動でIPアドレスの禁止を解除できます。 fail2ban-client
次のように入力します。
- sudo fail2ban-client set apache unbanip 111.111.111.111
これで、認証を再試行できるようになります。
結論
セットアップ fail2ban
最も単純なケースでは、Apacheサーバーを保護するのはかなり簡単です。 でも、 fail2ban
特定のセキュリティニーズに適合するポリシーを構築するための大きな柔軟性を提供します。 内の変数とパターンを見てみると /etc/fail2ban/jail.local
ファイル、およびそれが依存するファイル /etc/fail2ban/filter.d
と /etc/fail2ban/action.d
ディレクトリでは、ニーズの変化に応じて微調整および変更するための多くの部分を見つけることができます。 サーバーを保護する方法の基本を学ぶ fail2ban
最小限の労力で大量のセキュリティを提供できます。
詳細については fail2ban
、これらのリンクのいくつかを見てください: