Fail2ban — защита от брутфорса ( подбора пароля) в Ubuntu или Debian.

Материал из support.qbpro.ru

ail2ban — это инструмент, который отслеживает в log-файлах попытки обратится к сервисам, таким, как SSH, FTP, SMTP, HTTP и другим, и если находит постоянно повторяющиеся неудачные попытки авторизации с одного и того же IP-адреса или хоста, fail2ban блокирует дальнейшие попытки с этого IP-адреса/хоста, с помощью правила iptables(ipfw) или host.deny.

$ apt-get install fail2ban

По умолчанию мы уже получаем намного более защищенный ssh. После 3х попыток неправильного ввода пароля с одного ip адреса — он отправляется в бан. Тут же есть уже готовые примеры для ssh, exim, postfix, cyrus-imap, apache, lighttpd, named. Рассмотрим более детально некоторые параметры. Основная часть настроек fail2ban хранится в конфигурационном файле

/etc/fail2ban/jail.conf
$ nano /etc/fail2ban/jail.conf


# destemail - email-адрес, на который будут отсылаться уведомления о
блокировании хостов.
destemail = root@localhost
# mta через что отправлять письма о банах, пишем тут тот MTA, который стоит у
вас на сервере Exim/sendmail/etc;
mta = sendmail
# рассмотрим одну секцию
[ssh]
# включаем сервис
enabled = true
port    = ssh
filter  = sshd
# какой лог парсить, на тот случай, если вы изменяли дефолтный путь
logpath  = /var/log/auth.log
# количество попыток, после которых банят.
maxretry = 4

Не забываем перезапускать fail2ban после изменения конфигурации командой:

$ /etc/init.d/fail2ban restart

Если Вы используете правила iptables для fail2ban, в логах будут ошибки:

2011-11-03 15:36:18,402 fail2ban.jail   : INFO   Jail 'ssh-ddos' started
2011-11-03 15:36:18,410 fail2ban.jail   : INFO   Jail 'ssh' started
2011-11-03 15:51:41,522 fail2ban.actions.action: ERROR  iptables -D INPUT -p tcp -m multiport --dports ssh -j fail2ban-ssh-ddos
iptables -F fail2ban-ssh-ddos
iptables -X fail2ban-ssh-ddos returned 100
2011-11-03 15:51:41,523 fail2ban.jail   : INFO   Jail 'ssh-ddos' stopped
2011-11-03 15:51:42,450 fail2ban.actions.action: ERROR  iptables -D INPUT -p tcp -m multiport --dports ssh -j fail2ban-ssh
iptables -F fail2ban-ssh
iptables -X fail2ban-ssh returned 100

Фиксим эти ошибки. Открываем /usr/bin/fail2ban-client. Находим:

beautifier.setInputCmd(c)

и выше добавляем строку:

time.sleep(0.1)

Должно выглядеть примерно так:

def __processCmd(self, cmd, showRet = True):
       beautifier = Beautifier()
       for c in cmd:
           time.sleep(0.1)
           beautifier.setInputCmd(c)

После рестарт fail2ban:

/etc/init.d/fail2ban restart

Смотрим логи теперь, в котором уже есть заблокированные IP :

2011-11-01 03:49:47,223 fail2ban.actions: WARNING [vsftpd] Ban 64.59.72.176
2011-11-01 06:40:54,290 fail2ban.actions: WARNING [ssh] Ban 58.62.173.159
2011-11-02 02:17:28,560 fail2ban.actions: WARNING [ssh] Ban 87.204.34.123
2011-11-02 06:02:45,437 fail2ban.actions: WARNING [ssh] Ban 180.139.138.178
2011-11-02 11:10:45,424 fail2ban.actions: WARNING [ssh] Ban 196.22.160.48
2011-11-02 20:20:45,118 fail2ban.actions: WARNING [ssh] Ban 184.164.158.82
2011-11-03 08:35:48,926 fail2ban.actions: WARNING [ssh] Ban 174.46.89.102

Как удалить из fail2ban заблокированный ip

Вывести список заблокированных ip адресов можно с помощью команды:

# iptables -L -n

Удалить, например, из таблицы fail2ban-roundcube ip можно с помощью команды:

# iptables -D fail2ban-roundcube -s xxx.xxx.xxx.xxx -j DROP

или

# iptables -D fail2ban-ssh -s 91.205.177.62 -j REJECT
  • где xxx.xxx.xxx.xxx - ip адрес который надо разблокировать.

Защита Postfix & SASL AUTH

  • В новой версии не работает фильтр postfix-sasl, необходимо внести правку в /etc/fail2ban/filter.d/postfix-sasl.conf
[INCLUDES]
before = common.conf
[Definition]
_daemon = postfix(-\w+)?/\w+(?:/smtp[ds])?
failregex = (?i): warning: unknown+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: authentication  failure)
ignoreregex =
  • В /etc/fail2ban/jail.conf
...
[postfix-sasl]
enabled	= true
filter	= postfix-sasl
mode = aggressive 
port	= smtp,465,submission,imap,imaps,pop3,pop3s
action	= iptables[name=Postfix-sals, port=smtp, protocol=tcp]
logpath	= /var/log/mail.log
bantime	= 60m
maxretry = 3
findtime = 60m
...

Дополнительно: