Установка и настройка Fail2ban - инструкции

Fail2ban - популярный сервис защиты серверов от атак на уязвимые сетевые сервисы. Позволяет анализировать логи и блокировать подозрительные IP-адреса. В статье мы подробно разберем установку и настройки Fail2ban с использованием практических примеров. Рассмотрим особенности основных правил и реальные кейсы защиты SSH, Apache, Nginx, почтовых сервисов.

Основные понятия и принципы работы Fail2ban

Fail2ban работает путем анализа лог-файлов различных сервисов и приложений, таких как SSH, Apache, Postfix и других. Он ищет в логах определенные шаблоны, соответствующие потенциальным атакам или подозрительной активности. Например, множественные неудачные попытки входа по SSH могут указывать на атаку перебором паролей.

Когда Fail2ban обнаруживает подозрительную активность от какого-то IP-адреса, он может выполнить различные действия, такие как блокировка этого IP-адреса с помощью iptables или firewalld на определенное время.

Как Fail2ban анализирует логи

Анализ логов происходит с помощью набора регулярных выражений и фильтров. Каждый фильтр настроен на поиск шаблонов для конкретного сервиса или приложения в соответствующих лог-файлах.

Например, фильтр sshd ищет строки вида:

Jun 6 11:07:53 myserver sshd[1231]: Failed password for root from 192.168.0.14 port 55916 ssh2

Такая строка указывает на неудачную попытку входа по SSH с указанного IP-адреса. Если таких попыток будет больше определенного порога за установленный промежуток времени, то сработает соответствующее правило Fail2ban и заблокирует этот IP.

Пример блокировки подозрительного IP

Допустим, мы настроили Fail2ban так, что он будет блокировать IP-адреса, с которых было более 5 неудавшихся попыток входа по SSH за последние 10 минут.

Тогда процесс блокировки может выглядеть так:

  1. Злоумышленник с IP-адреса 85.195.111.26 делает 3 неудачные попытки входа по SSH за 2 минуты
  2. Через 5 минут следуют еще 2 попытки
  3. Fail2ban регистрирует более 5 неудавшихся попыток входа по SSH с одного IP за последние 10 минут
  4. Включается правило для блокировки IP 85.195.111.26 через iptables
  5. Доступ к серверу по SSH с IP 85.195.111.26 блокируется на указанное время, например, на 30 минут

Действия при блокировке IP в Fail2ban

Когда Fail2ban блокирует IP-адрес, он по умолчанию выполняет следующие действия:

  • Добавляет новое правило в iptables (например, iptables -I f2b-ssh 2 -s 85.195.111.26 -j DROP), которое отбрасывает (блокирует) весь трафик с этого адреса
  • Записывает информацию о заблокированном IP в отдельный файл
  • По истечении установленного времени блокировки (bantime) автоматически удаляет добавленное правило из iptables и информацию из файла блокировок

Таким образом "подозреваемый" IP-адрес разблокируется автоматически.

Установка Fail2ban в Linux (CentOS 7)

Для работы Fail2ban требуются утилиты iptables и некоторые другие компоненты, которые устанавливаются из репозитория EPEL. Поэтому первым делом подключим этот репозиторий:

sudo yum install epel-release

После этого устанавливаем пакет Fail2ban:

sudo yum install fail2ban

Чтобы Fail2ban запускался автоматически при загрузке системы, добавим его в автозагрузку:

sudo systemctl enable fail2ban

После установки можно проверить статус службы командой:

sudo systemctl status fail2ban

По умолчанию Fail2ban уже имеет базовую настройку для защиты SSH от брутфорса. Чтобы посмотреть список защищаемых сервисов, используем:

sudo fail2ban-client status

Файлы и директории Fail2ban

Основные конфигурационные файлы Fail2ban располагаются в директории /etc/fail2ban/. Рассмотрим структуру основных директорий:

  • /etc/fail2ban/ - корневая директория с конфигурационными файлами
  • /etc/fail2ban/jail.d/ - здесь хранятся отдельные конфиги для каждого защищаемого сервиса
  • /etc/fail2ban/filter.d - набор фильтров для различных сервисов и приложений
  • /etc/fail2ban/action.d - файлы с описанием действий при блокировке

jail.conf - базовая конфигурация

Основной конфигурационный файл Fail2ban - /etc/fail2ban/jail.conf. В нем описываются параметры для всех защищаемых сервисов. Файл разделен на секции:

[DEFAULT] - параметры по умолчанию [ssh] - настройки для защиты SSH [ssh-ddos] и т.д. - секции для других сервисов 

jail.local - пользовательские правила

Для изменения параметров по умолчанию используется конфиг /etc/fail2ban/jail.local. Этот файл подключается автоматически и имеет более высокий приоритет.

Порядок обработки конфигурации

Файлы обрабатываются в следующем порядке:

  1. Сначала /etc/fail2ban/jail.conf - базовая конфигурация
  2. Затем /etc/fail2ban/jail.d/*.conf - расширенные правила для отдельных сервисов
  3. И в конце /etc/fail2ban/jail.local - пользовательские определения

Таким образом, jail.local имеет самый высокий приоритет и может переопределять любые параметры.

Назначение основных параметров

Рассмотрим назначение наиболее важных опций конфигурации:

ignoreip Список IP-адресов, которые никогда не блокируются
bantime Время блокировки IP-адреса в секундах
maxretry Максимальное число ошибок или нарушений до блокировки IP

Более подробно значения других опций описаны в официальной документации Fail2ban.

После установки Fail2ban готов к использованию и уже имеет ряд правил для различных сервисов. Однако лучше изменить некоторые опции.

Установка ignoreip

Список исключений из блокировок задается параметром ignoreip. Рекомендуется указать здесь IP-адреса администраторов, чтобы не заблокировать случайно себя.

Для этого создаем конфиг /etc/fail2ban/jail.local и прописываем там:

ignoreip = 127.0.0.1/8 192.168.0.*

Изменение времени блокировки

По умолчанию Fail2ban разблокирует IP через 600 секунд или 10 минут (параметр bantime равен 600). Увеличим это время:

bantime = 86400

Теперь блокировка будет действовать 24 часа (86400 секунд).

Для повышения эффективности можно задать дополнительные опции:

findtime = 600 backend = systemd

Параметр findtime определяет интервал для подсчета количества ошибок. А backend указывает использовать systemd для анализа журналов вместо файлов.

Применение изменений и перезапуск

После внесения правок перезапускаем службу для их применения:

sudo systemctl restart fail2ban

Защита SSH с помощью Fail2ban

Одна из основных задач Fail2ban - защита SSH сервера от атак типа "bruteforce", то есть от множественных попыток подбора паролей. Рассмотрим более детально настройки для SSH.

Анализ секции [ssh] в конфигурации

В файле jail.conf имеется секция [ssh], в которой заданы параметры для защиты SSH от брутфорса:

[ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6

Здесь видно, что проверяется лог /var/log/auth.log с помощью фильтра sshd. IP будет заблокирован после 6 неудачных попыток входа.

Изменение параметров для SSH jail

По умолчанию настройки довольно мягкие. Ужесточим их, создав отдельный конфиг /etc/fail2ban/jail.d/ssh.local:

[ssh] enabled = true bantime = 86400 findtime = 300 maxretry = 3

Теперь блокировка будет на 1 день после 3 неудачных попыток за 5 минут.

Пример блокировки brute-force атаки на SSH

Предположим, злоумышленник пытается подобрать пароль к пользователю admin на нашем сервере. В логе /var/log/auth.log будут появляться строки типа:

Jun 7 13:21:54 myserver sshd[29189]: Failed password for admin from 192.168.0.55 port 42156 ssh2 Jun 7 13:22:01 myserver sshd[29205]: Failed password for admin from 192.168.0.55 port 42240 ssh2 Jun 7 13:22:08 myserver sshd[29216]: Failed password for admin from 192.168.0.55 port 42369 ssh2

Как видно, было 3 неудачные попытки входа за 5 минут с IP 192.168.0.55. Сработает наше правило SSH из Fail2ban и заблокирует этот адрес на сутки.

Настройка защиты веб-серверов

Помимо SSH, Fail2ban может защитить также веб-серверы и сайты от различных атак, сканирования уязвимостей, подбора паролей в панели администратора и других несанкционированных действий.

Пример для Apache httpd

Чтобы включить фильтрацию подозрительных запросов к Apache, добавляем в jail.local:

[apache-auth] enabled = true 

Это активирует готовый шаблон для HTTP Basic authentication. IP будут блокироваться при неудачном вводе логина/пароля на защищенные страницы.

Fail2ban для nginx

Для nginx тоже есть несколько готовых правил, например, для защиты phpMyAdmin:

[nginx-http-auth] enabled = true

Это заблокирует IP после 5 неудачных попыток авторизации подряд. Время блокировки по умолчанию - 10 минут.

Включение защиты по умолчанию

Другие готовые правила для веб-сервисов:

[apache-overflows] [nginx-botsearch] [nginx-nohome]

Детальное описание действия каждого правила есть в конфиге jail.conf

Рассмотрим использование Fail2ban для защиты некоторых других распространенных сервисов.

Защита MySQL от перебора паролей

Создадим правило для блокировки брутфорса пароля пользователя MySQL root:

[mysqld-auth] enabled = true port = 3306 filter = mysqld-auth logpath = /var/log/mysql/error.log maxretry = 5 

После 5 неверных попыток входа за любой промежуток времени IP будет заблокирован на 24 часа.

Настройка правил для Exim

Добавим защиту почтового сервера Exim от перебора паролей:

[exim] enabled = true port = smtp,465,submission filter = exim action = iptables-allports[name=exim-spam]

Здесь при обнаружении атаки будут блокироваться все порты, не только 25, 465 и 587.

Для управления и мониторинга Fail2ban предназначена утилита fail2ban-client. Рассмотрим наиболее полезные команды.

Получить список всех правил

fail2ban-client status

Это выведет статус каждого jail - включен он или нет.

Посмотреть заблокированные IP

sudo fail2ban-client status sshd

Здесь sshd - имя тюрьмы. Можно указать другие, например, nginx-http-auth.

Разблокировка IP вручную

fail2ban-client set sshd unbanip 192.168.0.123

Удаляет IP 192.168.0.123 из списка заблокированных правилом sshd в Fail2ban.

Комментарии