Fail2ban 拡張がハングします

Created:

2016-11-16 13:22:44 UTC

Modified:

2017-08-16 17:26:02 UTC

5

Was this article helpful?


Have more questions?

リクエストを送信

Fail2ban 拡張がハングします

Applicable to:

  • Plesk for Linux

症状

jail を有効化した後で、Fail2ban サービスを再起動または停止できません。

サービスステータスが正しく表示されず、jail リストがありません。

# service fail2ban status
fail2ban-server (pid 3291) is running

/var/log/fail2ban.log によると、監視プールにログファイルを追加したときにサービスが停止しています。

2014-07-27 21:09:25,487 fail2ban.filter [25047]: INFO    Added logfile = /var/www/vhosts/system/dom1.com/logs/proxy_access_log
2014-07-27 21:09:25,985 fail2ban.filter [25047]: INFO Added logfile = /var/www/vhosts/system/domain.com/logs/proxy_access_ssl_log

原因

Fail2ban で、 plesk-apache-badbot plesk-apache (またはその他の 大きい )jail が有効になっています。この jail が Fail2ban に対し、各仮想ホストおよび Apache のアクセスログについて、すべてのアクセスおよびエラーログの解析を強制します。

仮想ホストアクセスログが大量にある場合、これらの解析を試みるとリソースが過剰に消費され、その結果サービスがハングします。

注: Plesk でこの jail を有効化すると、以下の警告が表示される場合があります。

Warning: Fail2Ban might not work well if there are many domains and Fail2Ban has to monitor too many log files.

解決策

以下の手順は、ドメイン数が 300 件未満である場合に使用してください。また、jail 内のログファイル数を減らす必要があります。

  1. スタックしたプロセスを PID で強制終了します( 実行時の注意 :最初に、 | の後のコマンド末尾部分を省略して、強制終了される PID をチェックすることをお勧めします。

    # ps aux | grep fail2ban|awk '{print $2}'|xargs kill -9
  2. .pid ファイルを削除します。

    # rm -f /var/run/fail2ban/fail2ban.pid
  3. jail plesk-apache-badbot に関して解析するログの数を減らします(または、jail を完全に無効化します)。ファイル /etc/fail2ban/jail.d/plesk.conf を開き、ログのパスでマスク部分を '*access*log' から '*access_log' に変更します。

    [plesk-apache-badbot]

    enabled = true
    filter = apache-badbots
    action = iptables-multiport[name=BadBots, port="http,https,7080,7081"]
    logpath = /var/www/vhosts/system/*/logs/*access_log
    /var/log/httpd/*access_log
  4. Fail2ban サービスが実行中の場合、 fail2ban-client reload を実行します。あるいは、サービスを起動します。

以下の手順は、ドメイン数が大量にある場合(300 件以上)に使用してください。

Fail2ban は、大量のログファイルを持つ多数の jail を監視する場合、サーバの RAM を大量に消費します。こちらの解決策を適用する前に、サーバがメモリ不足状態に陥らないようにしてください。メモリ不足になる場合、一部の jail を無効化してください。

Plesk サーバに非常に大量のドメインがあり、上記の回避策で問題が解決しなかった場合、ログを jail ごとに分けて、1 つずつロードされるようにします。これにより、1 つの jail 内のログの数を最小限にします。

この問題は、1 つの大きな jail が大量のログを持つことに起因するため、少量のログを持つ jail を多数作成するのが有効であると考えられます。

以下のコマンドを使用して、ドメイン名の先頭の英数字ごとに個別の jail を作成します。

  1. 管理者のメールアドレスを取得します。

    admin_email=`mysql -Ns -uadmin -p\\`cat /etc/psa/.psa.shadow\\` psa -Ne"select email from clients where login='admin'"`
  2. plesk-apache jail を設定します。

     for i in a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 0;do find /var/www/vhosts/system/$i*/logs/error_log 2>/dev/null 1>/dev/null; found=`echo $?`;if [ $found == "0" ];then echo "[[\\"usedns\\",\\"no\\"],[\\"logpath\\",\\"\\\\/var\\\\/www\\\\/vhosts\\\\/system\\\\/$i*\\\\/logs\\\\/error_log\\"],[\\"enabled\\",\\"true\\"],[\\"filter\\",\\"apache-auth\\"],[\\"maxretry\\",\\"6\\"],[\\"__source__\\",\\"jail.d\\\\/plesk.conf\\"],[\\"action\\",\\"iptables-multiport[name=apache, port=\\\\\\"http,https,7080,7081\\\\\\"]\\"],[\\"ignoreip\\",\\"127.0.0.1\\/8\\"],[\\"bantime\\",\\"600\\"],[\\"destemail\\",\\"$admin_email\\"],[\\"findtime\\",\\"600\\"],[\\"backend\\",\\"auto\\"]]"|/usr/local/psa/admin/bin/f2bmng --set-jail plesk-apache-$i ;fi;done
  3. plesk-apache-badbot jail を設定します。

     for i in a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 0;do find /var/www/vhosts/system/$i*/logs/error_log 2>/dev/null 1>/dev/null; found=`echo $?`;if [ $found == "0" ];then echo "[[\\"usedns\\",\\"no\\"],[\\"logpath\\",\\"\\\\/var\\\\/www\\\\/vhosts\\\\/system\\\\/$i*\\\\/logs\\\\/*access_log\\"],[\\"enabled\\",\\"true\\"],[\\"filter\\",\\"apache-badbots\\"],[\\"maxretry\\",\\"100\\"],[\\"__source__\\",\\"jail.d\\\\/plesk.conf\\"],[\\"action\\",\\"iptables-multiport[name=BadBots, port=\\\\\\"http,https,7080,7081\\\\\\"]\\"],[\\"ignoreip\\",\\"127.0.0.1\\/8\\"],[\\"bantime\\",\\"172800\\"],[\\"destemail\\",\\"$admin_email\\"],[\\"findtime\\",\\"600\\"],[\\"backend\\",\\"auto\\"]]" |/usr/local/psa/admin/bin/f2bmng --set-jail plesk-apache-badbot-$i;fi;done
  4. 通常の plesk-apache-badbot および plesk-apache jail に、一般的なエラー/アクセスログのファイルパスのみを残します。

    plesk-apache-badbot :

    /var/log/httpd/*error_log

    plesk-apache :

    /var/log/httpd/*access_log
  5. 手順 2 と 3 では、ドメイン名の先頭の英数字に一致するドメインがあった場合にのみ jail を作成しました。こうしなければ、Fail2ban が構成エラーによって起動しなくなります。ここで、新規ドメインが作成されたときに jail を追加するスクリプトをセットアップする必要があります。

    • 添付スクリプト をダウンロードしてサーバに置き、実行パーミッションを付与します。

      wget https://support.plesk.com/hc/article_attachments/115004544269/add_jails.sh

      chmod +x add_jails.sh
    • Plesk イベントマネージャ に、以下のパラメータでタスクを作成します。

      Domain created lowest (0) root /root/add_jails.sh <new_domain_name>

      Default domain (the first domain added to a subscription or webspace) created lowest (0) root /root/add_jails.sh <new_domain_name>

  6. 上記の手順に従って、必要に応じて Fail2ban を再起動します。

他にご質問がございましたら、リクエストを送信してください
ログインしてコメントを残してください。