Замечательный инструмент 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
А как узнать список тех, кто успешно прошел фильтр?