настройка Fail2Ban для защиты служб сервера от атак извне

или как сделать логи аккуратными

Замечательный инструмент fail2ban поможет Вам заблокировать назойливых спамеров, хакеров и просто любопытных, кто перебирает Ваш сервер на предмет брутфорса паролей или поиска уязвимостей. От массивной DoS атаки не спасет, но жизнь облегчит, это точно. Самые свежие фильтры можно подсмотреть в аккаунте проекта на GitHUB – https://github.com/fail2ban/.. Пакет уже имеется в репозитории Debian, поэтому установим его "из коробки".

root@mail:/# apt-get install fail2ban

Изначально в файле /etc/fail2ban/jail.conf активно только правило для SSH. Дабы следовать правилу хорошего тона и рекомендациям автора, создадим локальный файл /etc/fail2ban/jail.local, куда и будем помещать наши правила. Дополнительно немножко изменим правила по умолчанию – исключим из доверенных хостов localhost, так как в случае взлома любого локального пользователя, атакующий сможут запустить процедуру перебора паролей "на всю мощь" прямо на сервере, но добавим Ваш личный доверенный статический IP...

root@mail:/# vim /etc/fail2ban/jail.local

[DEFAULT]
ignoreip = 92.93.77.23/32
bantime = 660
masretry = 3

1. Защита SSH

Для тех, кто боится добавить защиту порта SSH через iptables самостоятельно это наилучший способ повысить безопасность своего сервера...

root@mail:/# vim /etc/fail2ban/jail.local

[ssh-iptables]
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=1222, protocol=tcp]
           sendmail-whois[name=SSH, dest=postmaster@example.com, sender=noreply@example.com]
logpath  = /var/log/auth.log
maxretry = 5

где, 1222 - наш нестандартный порт SSH, и настройка нотификации, если кого-то забанили.

root@mail:/# service fail2ban restart

2. Защита Dovecot

Задействуем Fail2Ban для защиты нашего MDA Dovecot. В связи с тем, что мы складываем логи в отдельный файл /var/log/dovecot.info, настройка будет следующей:

root@mail:/# vim /etc/fail2ban/jail.local

[dovecot]
enabled  = true
filter   = dovecot
action   = iptables-multiport[name=Dovecot, port="pop3,pop3s,imap,imaps", protocol=tcp]
           sendmail-whois[name=Dovecot, dest=postmaster@example.com, sender=noreply@example.com]
logpath  = /var/log/dovecot.info
maxretry = 20
findtime = 1200
bantime  = 1200

Соответственно, если фильтр не взлетает, смотрим внимательно на фильтр "dovecot" на предмет соответствия инструкциям производителя, версии 2+ и здравого смыслу. Или тестируем парсинг лога вручную:

root@mail:/# fail2ban-regex /var/log/dovecot.info /etc/fail2ban/filter.d/dovecot.conf

Running tests
=============

Use regex file : /etc/fail2ban/filter.d/dovecot.conf
Use log file   : /var/log/dovecot.info

Results
=======

Failregex
|- Regular expressions:
|  [1] .*(?:pop3-login|imap-login):.*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth fail*rip=(?P<host>\S*),.*
|
`- Number of matches:
   [1] 77 match(es)

Ignoreregex
|- Regular expressions:
|
`- Number of matches:

Summary
=======

Addresses found:
[1]
    218.203.13.192 (Wed May 07 11:19:27 2014)
    ...
    218.203.13.192 (Wed May 07 11:41:04 2014)
    218.203.13.192 (Wed May 07 11:41:22 2014)
    86.57.255.92 (Thu May 15 09:27:55 2014)
    86.57.255.92 (Thu May 15 09:29:42 2014)

Date template hits:
70439 hit(s): MONTH Day Hour:Minute:Second
...

Success, the total number of match is 77

Обязательно настройте ротирование логов, которые обрабатывает fail2ban так как некоторые службы (например Dovecot) не пишут например год в лог-файл и если Ваш лог хранит записи на несколько лет, Вы непременно столкнётесь с ошибками в работе сервиса:

root@mail:/# vim /etc/logrotate.d/dovecot
 
/var/log/dovecot.debug {
        notifempty
        weekly
        missingok
        rotate 4
        compress
        delaycompress
        create 666 dovecot dovecot
        postrotate
           [ -f /var/run/dovecot/master.pid ] && doveadm log reopen
        endscript
}

/var/log/dovecot.info {
        notifempty
        weekly
        missingok
        rotate 4
        compress
        delaycompress
        create 666 dovecot dovecot
        postrotate
           [ -f /var/run/dovecot/master.pid ] && doveadm log reopen
        endscript
}
 
root@mail:/# /etc/init.d/rsyslog restart

3. Защита Postfix

Задействуем Fail2Ban для Postfix. В связи с тем, что мы отключили запись событий Postfix в syslog, настройка будет приблизительно следующей:

root@mail:/# vim /etc/fail2ban/jail.local

[sasl]
enabled  = true
filter   = sasl
backend  = polling
action   = iptables-multiport[name=SASL, port="smtp,smtps", protocol=tcp]
           sendmail-whois[name=SASL, dest=postmaster@example.com, sender=noreply@example.com]
logpath  = /var/log/mail.info
maxretry = 10


[postfix]
enabled  = true
filter   = postfix
action   = iptables-multiport[name=Postfix, port="smtp,smtps", protocol=tcp]
           sendmail-whois[name=Postfix, dest=postmaster@example.com, sender=noreply@example.com]
logpath  = /var/log/mail.info
maxretry = 3
bantime  = 7200

4. Общие рекоммендации

Добавим сервис в автозагрузку:

root@mail:/# chkconfig fail2ban --level=235 on

Также всегда есть что посмотреть в /var/log/fail2ban.log:

root@mail:/# cat /var/log/fail2ban.log | more

или проверить цепочки iptables на предмет неудачников, попавших в бан:

root@mail:/# iptables -L -v | grep fail2ban

Комментарии 1

  1. Valiksan — May 28, 2014 at 06:35 PM

    А как узнать список тех, кто успешно прошел фильтр?

  • 1

Комментарии отключены, сожалеем