Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Apache - Fail2ban  (Прочитано 3869 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн max1234

  • Автор темы
  • Новичок
  • *
  • Сообщений: 15
    • Просмотр профиля
Apache - Fail2ban
« : 12 Января 2011, 16:58:13 »
Стоит 10.04 server установил апач2 решил добавить мониторинг fail2ban для апача так как появились в логах апача строки

[Wed Jan 12 13:34:25 2011] [error] [client *.*.112.168] File does not exist: /var/www/PHPMYADMIN
[Wed Jan 12 13:34:26 2011] [error] [client *.*.112.168] File does not exist: /var/www/PMA
[Wed Jan 12 13:34:26 2011] [error] [client *.*.112.168] File does not exist: /var/www/admin
[Wed Jan 12 13:34:27 2011] [error] [client *.*.112.168] File does not exist: /var/www/mysql

в jail.conf выставил:
[apache-nohome]

enabled   = true
port<-->  = http,https
filter<>  = apache-nohome
logpath   = /var/log/apache2/error.log
maxretry  = 4

А это apache-nohome.conf
Файл: apache-n~me.conf  Строка 1 Позиция 0 628 байт                                                                                        100%
# Fail2Ban configuration file
#
# Author: Yaroslav O. Halchenko <debian@onerussian.com>
#
# $Revision: 716 $
#

[Definition]

# Option:  failregex
# Notes.:  regex to match failures to find a home directory on a server, which
#          became popular last days. Most often attacker just uses IP instead of
#          domain name -- so expect to see them in generic error.log if you have
#          per-domain log files.
# Values:  TEXT
#
failregex = [[]client <HOST>[]] File does not exist: .*/~.*

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =


При рестарте fail2ban появляються такие ошибки как бороться? Заранее спасибо.

2011-01-12 16:38:48,955 fail2ban.jail   : INFO   Jail 'apache-noscript' started
2011-01-12 16:38:48,959 fail2ban.jail   : INFO   Jail 'vsftpd' started
2011-01-12 16:38:48,965 fail2ban.jail   : INFO   Jail 'apache-nohome' started
2011-01-12 16:38:48,981 fail2ban.jail   : INFO   Jail 'named-refused-udp' started
2011-01-12 16:38:48,999 fail2ban.jail   : INFO   Jail 'ssh-ddos' started
2011-01-12 16:38:49,015 fail2ban.jail   : INFO   Jail 'apache-overflows' started
2011-01-12 16:38:49,030 fail2ban.jail   : INFO   Jail 'ssh' started
2011-01-12 16:38:49,043 fail2ban.actions.action: ERROR  iptables -N fail2ban-apache-nohome
iptables -A fail2ban-apache-nohome -j RETURN
iptables -I INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-nohome returned 200
2011-01-12 16:38:49,059 fail2ban.jail   : INFO   Jail 'apache' started
2011-01-12 16:38:49,085 fail2ban.jail   : INFO   Jail 'named-refused-tcp' started
2011-01-12 16:38:49,105 fail2ban.actions.action: ERROR  iptables -N fail2ban-apache-overflows
iptables -A fail2ban-apache-overflows -j RETURN
iptables -I INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-overflows returned 400
« Последнее редактирование: 12 Января 2011, 17:00:03 от max1234 »

Оффлайн A.T.Tappman

  • Любитель
  • *
  • Сообщений: 50
    • Просмотр профиля
Re: Apache - Fail2ban
« Ответ #1 : 19 Января 2011, 13:59:12 »
После обновления системы вылезла такая же фигня с ssh. Решение вопроса нашлось тут http://www.fail2ban.org/wiki/index.php/Fail2ban_talk:Community_Portal#fail2ban.action.action_ERROR_on_startup.2Frestart
Цитировать
I had multiple fail2ban.action.action ERROR on startup/restart. It seems there was a "race" condition with iptables. I solved the problem completely on my system by editing /usr/bin/fail2ban-client and adding a time.sleep(0.1)
Вобчем, открываем /usr/bin/fail2ban-client и добавляем строку time.sleep(0.1). Вот так:
def __processCmd(self, cmd, showRet = True):
beautifier = Beautifier()
for c in cmd:
time.sleep(0.1)
beautifier.setInputCmd(c)
Опосля этого делаем
sudo service fail2ban restart
и проверяем
tail -f /var/log/fail2ban.log
У меня всё заработало:
2011-01-19 13:45:22,467 fail2ban.filter : INFO   Set findtime = 600
2011-01-19 13:45:22,568 fail2ban.actions: INFO   Set banTime = 28800
2011-01-19 13:45:24,739 fail2ban.jail   : INFO   Creating new jail 'proftpd'
2011-01-19 13:45:24,739 fail2ban.jail   : INFO   Jail 'proftpd' uses poller
2011-01-19 13:45:24,842 fail2ban.filter : INFO   Added logfile = /var/log/auth.log
2011-01-19 13:45:24,944 fail2ban.filter : INFO   Set maxRetry = 2
2011-01-19 13:45:25,148 fail2ban.filter : INFO   Set findtime = 600
2011-01-19 13:45:25,250 fail2ban.actions: INFO   Set banTime = 28800
2011-01-19 13:45:26,797 fail2ban.jail   : INFO   Jail 'ssh' started
2011-01-19 13:45:26,902 fail2ban.jail   : INFO   Jail 'proftpd' started

Оффлайн webcubator

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Apache - Fail2ban
« Ответ #2 : 10 Января 2012, 19:37:45 »
Проблема в том что fail2ban пытается в одно и то же время выполнять несколько действий с iptables, а iptables этого не может.

Добавление паузы "time.sleep(0.1)" не решает проблему, а только уменьшает вероятность её возникновения.

Надо научить fail2ban выполнять действия с iptables по одному в порядке очереди, а не все одновременно.

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

Редактируем вот этот файл
/usr/share/fail2ban/server/action.py

ВАЖНО! Отступы в начале строк важны!


# найти эту строчку в самом верху
import logging, os

# Добавить такую строчку (говорим что хотим воспользоваться модулем fcntl)
import fcntl

...

        # Найти эту строчку
        def executeCmd(realCmd):
                # Добавить эти 4 строчки (запрашиваем блокировку)
                logSys.debug('Acquire lock for %s' % realCmd)
                lockfd = os.open('/var/lock/fail2ban-iptables.lock', os.O_CREAT | os.O_RDONLY)
                fcntl.flock(lockfd, fcntl.LOCK_EX)
                logSys.debug('Acquired lock for %s' % realCmd)

                # Эти строчки там уже есть
                logSys.debug(realCmd)
                try:
                        ...
                except OSError, e:
                        ...
                # Добавить эти 4 строчки (освобождаем блокировку)
                finally:
                        logSys.debug('Release lock for %s' % realCmd)
                        fcntl.flock(lockfd, fcntl.LOCK_UN)
                        os.close(lockfd)
                ...

У меня работает.

Пользователь решил продолжить мысль 10 Января 2012, 19:56:02:
Оказывается уже есть нормальное решение этой проблемы.

http://sourceforge.net/tracker/?func=detail&aid=3413485&group_id=121032&atid=689046

Идея та же но без стрельбы по воробьям из пушки :)
« Последнее редактирование: 10 Января 2012, 19:56:02 от webcubator »

 

Страница сгенерирована за 0.023 секунд. Запросов: 22.