Материал просмотрен 2,856 раз(а)

Я думаю, что каждый администратор сталкивается с попытками компрометации системы внешними нарушителями. Подбирают пароли на различные сервисы в попытках залогиниться. Даже при наличии нормального пароля все равно это раздражает.

В поисках решения этой проблемы я натолкнулся на весьма неплохой продукт 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:

Вот зараза

Вот зараза

О! С одного и того же адреса. Пожалуй стоит увеличит время бана. 😉