Зависает расширение Fail2ban

Создана:

2016-11-16 13:22:44 UTC

Изменена:

2017-08-16 17:26:02 UTC

5

Помогла ли вам статья?


Есть вопросы?

Отправить запрос

Зависает расширение Fail2ban

Applicable to:

  • Plesk for Linux

Симптомы

После включения джейла становится невозможно перезапустить или остановить службу Fail2ban.

Состояние службы отображается некорректно, без списка джейлов:

# 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 (или другие большие ) джейлы. Такой джейл заставляет Fail2ban обрабатывать все журналы доступа и ошибок для каждого виртуального хоста и журнал доступа к Apache.

Если журналов доступа для виртуальных хостов много, служба зависает при попытке их обработать в результате перерасхода ресурсов.

Примечание. При включении такого джейла в Plesk вы можете увидеть предупреждение:

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

Решение

Если количество доменов менее 300 и необходимо уменьшить количество файлов журнала в джейле, воспользуйтесь следующими инструкциями:

  1. Остановите зависшие процессы по их PID ( соблюдайте осторожность : разумно будет сначала проверить PID процессов, которые будут остановлены, не используя последнюю часть команды после | ):

    # ps aux | grep fail2ban|awk '{print $2}'|xargs kill -9
  2. Удалите файл .pid :

    # rm -f /var/run/fail2ban/fail2ban.pid
  3. Сократите количество журналов для обработки джейлом plesk-apache-badbot (или вовсе отключите джейл). Откройте файл /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 может использовать большой объем оперативной памяти на сервере, если он отслеживает множество джейлов с большим количеством файлов журналов. Убедитесь в том, что на сервере не возникнет ситуация нехватки памяти, прежде чем применять данное решение. Если она возникает, отключите некоторые джейлы.

Если на вашем сервере Plesk очень большое количество доменов и предложенное выше решение не помогает, разделите журналы по разным джейлам, чтобы они загружались по очереди. Это минимизирует количество журналов в одном джейле.

Поскольку проблему вызывает один большой джейл с огромным количеством журналов, создание большего количества джейлов, содержащих меньшие количества журналов, должно помочь.

Используйте следующие команды, чтобы создать отдельные джейлы для доменов в соответствии с первой буквой/цифрой имени:

  1. Получите адрес электронной почты администратора:

    admin_email=`mysql -Ns -uadmin -p\\`cat /etc/psa/.psa.shadow\\` psa -Ne"select email from clients where login='admin'"`
  2. Настройте джейлы plesk-apache :

     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 :

     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 оставьте только общие пути к файлам журналов ошибок/доступа:

    plesk-apache-badbot :

    /var/log/httpd/*error_log

    plesk-apache :

    /var/log/httpd/*access_log
  5. На шагах 2 и 3 мы создали джейлы только для существующих доменов с их первыми буквами/цифрами в имени. В противном случае, Fail2ban не запустится из-за ошибок конфигурации. Теперь нам нужно настроить скрипт, добавляющий джейлы при создании новых доменов:

    • Скачайте прикрепленный скрипт , поместите его к себе на сервер и назначьте права на выполнение:

      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 с помощью приведенных выше инструкций.

Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 5 из 7
Еще есть вопросы? Отправить запрос
Войдите в службу, чтобы оставить комментарий.