Я думаю, что каждый администратор сталкивается с попытками компрометации системы внешними нарушителями. Подбирают пароли на различные сервисы в попытках залогиниться. Даже при наличии нормального пароля все равно это раздражает.
В поисках решения этой проблемы я натолкнулся на весьма неплохой продукт fail2ban, который занимается тем, что просматривает логи в поисках определенных включений, сигнализирующих об ошибках аутентификации, которые появляются, в случае если кто-то неправильно набирает пароль.
Разумеется, можно указать, какие логи и в поисках чего парсить, помимо готовых образцов есть возможность написать свои дополнения для веб-админок и т.д. Главное разобрать как извлечь IP адрес из лога и как занести его в запрещающее правило файрволла.
Кроме того, банить можно на определенное время, что весьма удобно, чтобы не забивать всю таблицу файрволла и не внести в неё все возможные IP адреса
Установка Fail2ban
Установка не отличается особой сложностью, у нас debian, значит будет так:
# apt-get install fail2ban
Вот в принципе и всё! По окончанию установки идём в каталог /etc/fail2ban и рассмотрим его структуру:
Каталоги:
action.d – содержит варианты действий, которые можно легко дополнить своими. Например – добавление IP адреса злоумышленника в запрещающую цепочку файрволла;
filter.d – содержит варианты вхождений записей лог-файлов (сигнатуры), которые ищутся в указываемых логах. Знакомые с регулярными выражениями легко смогут создать свои фильтры.
Файл fail2ban.conf (fail2ban.local) – конфиг сервиса.
Файл jail.conf (jail.local) – конфиг “ловушек”, которые расставляются на злоумышленников.
Стоит отметить, что файлы .local применяются после файлов .conf, что позволяет переопределить некоторые значения. Поэтому все критические изменения лучше делать в .local, оставив конфиги нетронутыми. Но сейчас мы будем ковырять именно .conf, чтобы понять, как там всё устроено. Советую сделать резервную копию старого конфига:
# cp jail.conf jail.conf.old
Итак, рассмотрим файл jail.conf для начала.
В секции [DEFAULT] нас интересуют параметры:
ignoreip = 127.0.0.1 – это IP, с которого атаки не считаются. Т.е. “белый” адрес, позволяющий брутить как угодно )
bantime = 600 – время в секундах, на сколько добавляется правило в файрволл. По дефолту всего 10 минут. Позднее я увеличил это время до 4 часов.
maxretry = 3 – количество попыток. Три неуспешные попытки – вполне достаточно.
В секции ACTIONS параметр banaction = iptables-multiport, задающий действие по умолчанию. В конкретной “тюрьме” можно определить свой banaction, который будет искаться в каталоге action.d. Оставим значение по умолчанию, значит у нас при каждом нарушении будет применять правило, описанное в файле iptables-multiport.conf
Далее идут непосредственно секции “тюрем”.
Например
[ssh]
enabled = true -- тюрьма включена
port = ssh -- стандартный порт ssh
filter = sshd -- фильтр из каталога filter.d (см. ниже)
logpath = /var/log/auth.log -- лог-файл, который парсится
maxretry = 3 -- три попытки и накладывается бан
Итак, поскольку фильтр называется sshd, открываем каталог filter.d и ищем файл sshd.conf
В файле фигурирует варианты регулярных выражений, строки которых могут появляться в логе auth.log. Как только подобная строка появится, вытаскивается поле HOST, содержащее IP-адрес хулигана и отправляет его в banaction с параметрами порта, ip-адреса и т.д.
Попутно пишется лог-файл /var/log/fail2ban.log:
О! С одного и того же адреса. Пожалуй стоит увеличит время бана.
Comments: