Четверг, 31.07.2025, 02:00
Приветствую Вас Гость | RSS
UBUNTOLOG
Главная | Каталог статей | Регистрация | Вход
Форма входа

Меню сайта
Категории раздела
Server [44]
WEB [14]
Все что связанно с web технологиями
Desktop [11]
Все что связанно с рабочей станцией
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » Статьи » Server

    Настройка и использование Fail2ban на Linux

    Установка и запуск

    Для систем на базе пакетов Debian или Red Hat команды будут немного отличаться.

    CentOS 7 / Red Hat:

    yum install fail2ban

    Ubuntu / Debian:

    apt install fail2ban

    CentOS 6:

    Добавляем репозиторий:

    rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

    Устанавливаем пакет:

    yum install fail2ban

    Для запуска службы вводим следующие команды:

    systemctl enable fail2ban

    systemctl start fail2ban

    * Для старых систем без systemd это будут команды chkconfig fail2ban on / update-rc.d fail2ban defaults и service fail2ban start.

    Базовая настройка

    Процесс настройки fail2ban не зависит от дистрибутива Linux. Основной конфигурационный файл находится по пути /etc/fail2ban/jail.conf. Однако, его не рекомендуется менять и для настройки используют подключаемые файлы из каталога /etc/fail2ban/jail.d.

    Для начала создаем первый файл, в котором будут храниться настройки по умолчанию:

    vi /etc/fail2ban/jail.d/default.conf

    Приведем его к виду:

    [DEFAULT]
    maxretry = 4
    findtime = 480
    bantime = 720
    action = firewallcmd-ipset
    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/jail.d, например:

    vi /etc/fail2ban/jail.d/service.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 — расположение лог-файла, в котором фильтр будет искать подозрительную активность на основе описанных критериев.

    * обратите внимание, что мы переопределили параметры по умолчанию maxretryfindtime и action.

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

    systemctl restart fail2ban

    * в старых версиях service fail2ban restart.

    Действия и фильтры

    Действия

    Файлы с настройкой действий находятся в каталоге /etc/fail2ban/action.d. Чтобы блокировать адрес, Fail2ban создает правило в брандмауэре netfilter. Для этого, чаще всего, используются утилиты iptables или firewall-cmd. Последняя применяется в последних версиях CentOS / Red Hat / Fedora. iptables более универсальная и может использоваться, почти, во всех системах Linux.

    Остановимся на описании самых используемых действий:

    • iptables — создание простого правила в netfilter с помощью одноименной утилиты;
    • iptables-multiport — использование модуля multiports, позволяющий добавлять диапазоны портов для блокировки;
    • iptables-ipset — использование ipset для придания более лаконичного вида правилам;
    • iptables-allports — блокирует для адреса все порты;
    • firewallcmd-new — создание простого правила в netfilter с помощью firewall-cmd;
    • firewallcmd-ipset — добавляет правила с помощью утилиты firewall-cmd, используя ipset;
    • firewallcmd-rich-rules — создает rich-rules при помощи firewall-cmd.

    Подробнее, как создаются правила в netfilter при помощи iptables и firewalld.

    Фильтры

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

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

    Примеры правил

    В данных примерах блокировка IP-адреса будет происходить на 12 минут после 4-х попыток ввода пароля в течение 8 минут. Эти параметры берутся из настроек [DEFAULT]. Если их нужно переопределить, просто добавляем их при описании правила.

    SSH

    CentOS

    vi /etc/fail2ban/jail.d/ssh.conf

    [ssh]
    enabled = true
    port = ssh
    filter = sshd
    action = firewallcmd-new[name=sshd]
    logpath = /var/log/secure

    Ubuntu

    vi /etc/fail2ban/jail.d/ssh.conf

    [ssh]
    enabled = true
    port = ssh
    filter = sshd
    action = iptables[name=sshd]
    logpath = /var/log/auth.log

    Asterisk

    vi /etc/fail2ban/jail.d/asterisk.conf

    [asterisk]
    enabled = true
    filter = asterisk
    action = iptables-allports[name=asterisk, protocol=all]
    logpath = /var/log/asterisk/messages

    NGINX

    vi /etc/fail2ban/jail.d/nginx.conf

    [nginx]
    enabled = true
    port = http,https
    filter = nginx-http-auth
    action = iptables-multiport[name=nginx, port="http,https", protocol=tcp]
    logpath = /var/log/nginx/error.log

    NGINX DDoS (req limit)

    Данное правило поможет защитить веб-сервер nginx от DDoS-атак. В некоторых сборках, для данного правило может не оказаться готового фильтра, поэтому в данном примере, мы его создадим вручную.

    Создаем фильтр:

    vi /etc/fail2ban/filter.d/nginx-limit-req.conf

    [Definition]

    ngx_limit_req_zones = [^"]+

    failregex = ^\s*\[error\] \d+#\d+: \*\d+ limiting requests, excess: [\d\.]+ by zone "(?:%(ngx_limit_req_zones)s)", client: <HOST>

    ignoreregex =

    Создаем правило в Fail2ban:

    vi /etc/fail2ban/jail.d/nginx-ddos.conf

    [nginx-ddos]
    enabled = true
    port = http,https
    filter = nginx-limit-req
    action = iptables-multiport[name=nginxddos, port="http,https", protocol=tcp]
    logpath = /var/log/nginx/error.log

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

    systemctl restart fail2ban

     

    pure-ftpd

    vim /etc/fail2ban/jail.d/pure-ftpd.conf

    [pure-ftpd]
    
    enabled = true
    port = ftp,ftp-data,ftps,ftps-data
    filter = pure-ftpd
    action = iptables[name=Pure-FTPd, port=ftp, protocol=tcp]
     sendmail-whois[name=Pure-FTPd, dest=root, sender=fail2ban@example.com]
    logpath = /var/log/messages
    maxretry = 3

     

    service fail2ban restart

    Работа со списком заблокированных адресов

    Просмотр

    Получить статистику заблокированных адресов можно следующей командой:

    fail2ban-client status <имя правила>

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

    fail2ban-client status

    При наличие заблокированных IP-адресов мы увидим, примерно, следующее:

    `- action
       |- Currently banned: 2
       |  `- IP list:       31.207.47.55 10.212.245.29

    С помощью iptables:

    iptables -L -n --line

    С помощью firewall-cmd:

    firewall-cmd --direct --get-all-rules

    Удаление

    Средствами fail2ban:

    Для удаление адреса из списка вводим:

    fail2ban-client set <имя правила> unbanip <IP-адрес>

    например:

    fail2ban-client set ssh unbanip 31.207.47.55

    С помощью iptables:

    iptables -D <цепочка правил> -s IP-адрес

    например:

    iptables -D fail2ban-ssh -s 10.212.245.29

    С помощью firewall-cmd:

    firewall-cmd --direct --permanent --remove-rule <правило>

    например:

    firewall-cmd --direct --permanent --remove-rule ipv4 filter f2b-sshd 0 -s 188.134.7.221

    После необходимо перечитать правила:

    firewall-cmd --reload

    Аналоги

    Если быть честным, достойных аналогов нет. Вот что-то похожее:

    1. tallow — сырая и еще не готовая для продуктивного использования. Также мало документации.
    2. RDPDefender — удобный аналог для Windows, но только для защиты RDP.
    3. IPBan — для Windows. Настройка из командной строки.
    4. ts_block — для Windows.


    Источник: https://www.dmosk.ru/instruktions.php?object=fail2ban
    Категория: Server | Добавил: Vyacheslav (29.07.2019)
    Просмотров: 799 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Copyright VR © 2025
    Сделать бесплатный сайт с uCoz