Использование fail2ban в Linux

Fail2ban — это программное обеспечение, которое защищает сервер Linux от атак

    fail2ban

    /etc/fail2ban/fail2ban.conf - основной конфигурационный файл
    Изменять его не рекомендуется. Для переопределения существующих правил и параметров лучше создать файл в каталоге /etc/fail2ban/jail.d
    Фильтры должны храниться в каталоге /etc/fail2ban/filter.d/
    По умолчанию в каталоге /etc/fail2ban/filter.d/ уже существуют фильтры, которые можно редактировать и использовать в своих целях

    #Установка apk add fail2ban #Автозапуск rc-update add fail2ban #Запуск /etc/init.d/fail2ban start #После изменений правил в конфигурации /etc/init.d/fail2ban restart
    Пример 1

    Параметры правил определяются из настроек по умолчанию. Если их нужно переопределить, просто добавляем их при создании правила, например создадим правило /etc/fail2ban/jail.d/example.conf

    [DEFAULT] maxretry = 4 findtime = 480 bantime = 720 action = iptables ignoreip = 127.0.0.1/8

    maxretry — количество действий, которые разрешено совершить до бана
    findtime — время в секундах, в течение которого учитывается maxretry
    bantime — время, на которое будет блокироваться IP-адрес
    action — действия, которое будет выполняться, если Fail2ban обнаружит активность, соответствующую критериям поиска
    ignoreip — игнорировать защиту, если запросы приходят с перечисленных адресов
    В данном примере, если в течение 8 минут (480) будет найдено 5 строк (maxretry = 4), содержащих критерий фильтра, Fail2ban заблокирует IP-адрес, с которого идет подключение на 12 минут (720);
    В секции [DEFAULT] файла /etc/fail2ban/fail2ban.conf хранятся общие настройки для всех правил. Каждую из настроек можно переопределить при создании своего правила

    Пример 2

    Создадим правило, например /etc/fail2ban/jail.d/service-ssh.conf

    [ssh] enabled = true port = ssh filter = sshd action = iptables[name=sshd, port=ssh, protocol=tcp] logpath = /var/log/auth.log maxretry = 10 findtime = 600

    ssh — название для правила;
    enabled позволяет быстро включать (true) или отключать (false) правило;
    port — порт целевого сервиса. Принимается буквенное или цифирное обозначение;
    filter — фильтр (критерий поиска), который будет использоваться для поиска подозрительных действий. По сути, это имя файла из каталога /etc/fail2ban/filter.d без .conf на конце;
    action — действие, совершаемое в случае срабатывания правила. В квадратных скобках указаны название для правила, сетевой порт и протокол для блокирования;
    logpath — расположение лог-файла, в котором фильтр будет искать подозрительную активность на основе описанных критериев.
    В данной конфигурации переопределили параметры по умолчанию maxretry, findtime и action

    Исключения

    Для гарантии, что fail2ban не заблокирут компьютер администратора или другой важный узел, предусмотрена настройка исключений с помощью опции ignoreip. Опция может быть применена как на глобальном уровне (default), так и для конкретного правила
    Для того, чтобы задать общую настроку, откроем /etc/fail2ban/jail.conf и добавим строку для конкретной секции:

    [ssh] #Добавим ip администратора в исключение ignoreip = 127.0.0.1/8 192.168.0.0/24 95.95.95.95
    Действия

    Файлы с настройкой действий находятся в каталоге /etc/fail2ban/action.d. Чтобы блокировать адрес, Fail2ban создает правило в брандмауэре netfilter. Для этого, чаще всего, используются утилиты iptables или firewall-cmd
    iptables — создание простого правила в netfilter с помощью одноименной утилиты;
    iptables-multiport — использование модуля multiports, позволяющий добавлять диапазоны портов для блокировки;
    iptables-ipset — использование ipset для придания более лаконичного вида правилам;
    iptables-allports — блокирует для адреса все порты;


    Фильтры

    Фильтры, в основном, представляют набор регулярных выражений для поиска ключевых слов в log-файлах. Они находятся в каталоге /etc/fail2ban/filter.d.
    Для создания и настройки своих фильтров, можно использовать имеющиеся файлы в качестве шпаргалки.
    Например отредактируем существующий фильтр /etc/fail2ban/filter.d/alpine-sshd.conf, здесь только расширим набор регулярных выражений в директиве failregex, по которым будет осуществляться поиск событий в указанном логе

    failregex = Failed [-/\w]+ for .* from port \d* ssh2 sshd\[.*\]: Invalid user .* from port \d* sshd\[.*\]: banner exchange: Connection from port \d* sshd\[.*\]: ssh_dispatch_run_fatal: Connection from port \d* sshd\[.*\]: Failed password for invalid user .* port \d* sshd\[.*\]: Connection closed by port \d* sshd\[.*\]: Connection reset by port \d* sshd\[.*\]: Received disconnect from port \d*:[0-9]+: \[preauth\] sshd\[.*\]: Disconnected from invalid user .* port \d* \[preauth\]

    По умолчанию для данного фильтра уже создано правило /etc/fail2ban/jail.d/alpine-ssh.conf
    В настройках правила sshd, в директиве filter указывается название фильтра, поиск которого будет осуществляться в директории /etc/fail2ban/filter.d/*
    В данном правиле добавлю только ip-адреса, которые не должны попадать в черный список:

    /etc/fail2ban/jail.d/alpine-ssh.conf [sshd] enabled = true filter = alpine-sshd port = ssh logpath = /var/log/messages maxretry = 5 bantime = 1w findtime = 1w ignoreip = 127.0.0.1/8 192.168.0.0/16
    Полезные команды

    Для примера использупется правило sshd и случайный ip-адрес 223.178.96.155

    #Получить список правил sudo fail2ban-client status #Заблокировать ip вручную fail2ban-client set sshd banip 223.178.96.155 #Статистика заблокированных адресов для конкретного правила fail2ban-client status sshd #Чтобы получить весь список заблокированных адресов fail2ban-client banned #Список заблокированных адресов через iptables iptables -L -n --line #Удаление адреса из списка fail2ban-client set sshd unbanip 223.178.96.155 #Удаление адреса из списка через iptables iptables -D <цепочка правил> -s IP-адрес
    Использование fail2ban c другими утилитами linux

    В следующем примере в сочетании с другими утилитами linux, используется утилита fail2ban-client, которая добавляет найденные ip-адреса в логе /var/log/php-access.log в черный список

    for a in `seq 1000`;do sleep 10; for i in `tail -n 1000 /var/log/php-access.log | grep POST | grep " 401 1133 "| awk '{print $1}' |sort -n|uniq `; do fail2ban-client set recidive banip ${i};

    Посмотреть или удалить заблокированный ip-адрес, можно будет используя название правила recidive

    #Удаление адреса из списка fail2ban-client set recidive unbanip 223.178.96.155
    Создание своего правила и фильтра

    Создадим простой фильтр в файле /etc/fail2ban/filter.d/alpine-syn-recv.conf
    Добавим в него содержимое:

    [Definition] failregex = SYN_RECV$ ignoreregex =

    Далее создадим файл /etc/fail2ban/jail.d/alpine-syn-recv.conf
    Добавим в него содержимое:

    [syn_recv] enabled = true filter = alpine-syn-recv logpath = /tmp/syn-recv.log maxretry = 3 ignoreip = 127.0.0.1/8 185.217.198.212 195.91.200.167 80.87.198.154 128.0.137.65

    В этом правиле, в качестве логов для поиска событий, будет использоваться файл /tmp/syn-recv.log
    В качестве фильтра будет использоваться фильтр: alpine-syn-recv
    В данный лог Я буду вручную добавлять строку: 192.168.2.8 SYN_RECV более 3-х раз (maxretry = 3), чтобы наглядно убедиться, что данный ip-будет заблокирован

    #Без лога для поиска событий fail2ban не запустится touch /tmp/syn-recv.log #Перезапуск конфигурации /etc/init.d/fail2ban restart #Убедимся, что ip 192.168.2.8 еще не заблокирован # fail2ban-client status syn_recv Status for the jail: syn_recv |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- File list: /tmp/syn-recv.log `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list: #Имитируем создание логов некоторым сервисом, который проверят состояние соединений echo "192.168.2.8 SYN_RECV" >> /tmp/syn-recv.log echo "192.168.2.8 SYN_RECV" >> /tmp/syn-recv.log echo "192.168.2.8 SYN_RECV" >> /tmp/syn-recv.log echo "192.168.2.8 SYN_RECV" >> /tmp/syn-recv.log #Проверим еще раз список заблокированных ip для правила syn_recv fail2ban-client status syn_recv Status for the jail: syn_recv |- Filter | |- Currently failed: 0 | |- Total failed: 3 | `- File list: /tmp/syn-recv.log `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 192.168.2.8
    Возможные ошибки
    ERROR Failed during configuration: Have not found any log file for recidive jail

    В данном случае необходимо вручную создать файл для логов

    touch /var/log/fail2ban.log
    Источники
    Последнее изменение: 31.01.2025 13:17


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ