Fail2Ban


| Следующая

Fail2Ban - это тузовина, написана на Python, которая предназначена для предотвращения атак на сервер. Она читает лог файлы ssh,ftp, apache и, в зависимости от настроек, блокирует ip адреса путем добавления DROP правил в iptables.

Бывает очень полезно блокировать к чертовой бабушке ip адреса потенциальных ботов, брутфорсеров и прочих негодяев, которые пытаются незаконно, вопреки Вашему желанию, заполучить контроль над Вашим детищем.

Итак, все дальнейшие шаги проделывались на Linux CentOS v.5.8.
Устанавливаем:

yum install fail2ban

Все файлы конфигурации находятся в папке /etc/fail2ban. Файл, который будем ковырять - /etc/fail2ban/jail.conf.
Исключения:

ignoreip = 127.0.0.1 10.0.0.0/8 %ваш_ip_адрес%

Время бана (1 час)

bantime = 3600

По умолчанию сразу после установки включена работа с ssh демоном. Секция выглядит вот так:

[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com, sendername="Fail2Ban"]
logpath = /var/log/secure
maxretry = 5

enabled - принимает true или false. Соответственно включена "тюрьма" (не нравится мне перевод) или нет.
filter - фильтр, применяемый для лог файла. Фильтры находятся в папке /etc/fail2ban/filter.d
action - что делать в с нарушителем покоя системы. Все действия находятся в папке /etc/fail2ban/action.d.
Конкретно в этом случае включено два действия:

Рекомендую sendmail-whois поменять на sendmail.

logpath - лог файл, с которым нужно работать. В зависимости от конфигурации системы может отличаться. Впишите сюда путь к файлу, в который ssh записывает неудачные логины. Это может быть:

maxretry - количество неудачных попыток авторизации. Рекомендую поставить на 3.

Так же есть заготовки-описания для vsftpd, pro-ftpd. По сути отличаются они только значением filter. Можно посмотреть для примера любой и на основе его создать свой фильтр для кастомного приложения.

Лично мне не нравится получать уведомления при перезапуске fail2ban. Для того что бы их отключить - закомментируйте все, что связано с actionstart и actionstop в файле /etc/fail2ban/action.d/sendmail-whois.conf, или /etc/fail2ban/action.d/sendmail.conf, если Вы сменили значение action на sendmail. По вкусу можно подкорректировать уведомление.

Хочу немного остановиться на фильтрах. Как я уже говорил, находятся они в папке /etc/fail2ban/filter.d. Основное в них - значение failregex. Это описание маски неудавшегося логина в систему. При чем описано их несколько, что бы уж наверняка. Пример для SSH:

^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from ( via \S+)?\s*$
^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from \s*$
^%(__prefix_line)sFailed \S+ for .*? from (?: port \d*)?(?: ssh\d*)?(: (ruser .*|(\S+ ID \S+ \(serial \d+\) CA )?\S+ %(__md5hex)s(, client user ".*", client host ".*")?))?\s*$
^%(__prefix_line)sROOT LOGIN REFUSED.* FROM \s*$
^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from \s*$
^%(__prefix_line)sUser .+ from not allowed because not listed in AllowUsers\s*$
^%(__prefix_line)sUser .+ from not allowed because listed in DenyUsers\s*$
^%(__prefix_line)sUser .+ from not allowed because not in any group\s*$
^%(__prefix_line)srefused connect from \S+ \(\)\s*$
^%(__prefix_line)sUser .+ from not allowed because a group is listed in DenyGroups\s*$
^%(__prefix_line)sUser .+ from not allowed because none of user's groups are listed in AllowGroups\s*$

Кто хоть раз читал логи, тот сразу увидит как можно их кастомизировать и создавать свои.

 

Если для ssh заменили порт, то его надо прописать в файле jail.local или jail.d/* секция sshd, параметр port.