Fail2ban: защита от брутфорса
Сервер в интернете атакуют постоянно. Боты сканируют SSH, подбирают пароли к панелям управления, бомбят формы логина. Даже если у вас сложные пароли — количество попыток может перегрузить сервер. Fail2ban решает эту проблему: он анализирует логи и автоматически блокирует IP-адреса, с которых идут атаки.
В этой статье — разбор Fail2ban: как работает, как настроить, какие jail создавать, как создавать свои правила. Практическое руководство для администраторов. Если нужно настроить защиту от брутфорса — поможем.
Что такое Fail2ban
Fail2ban — это утилита, которая анализирует логи и блокирует IP-адреса, с которых идут подозрительные действия. Она работает по принципу «watch and ban»: наблюдать и блокировать.
Как работает
- Читает логи: SSH, Nginx, Apache, Postfix, Dovecot и другие;
- Ищет паттерны: неудачные попытки входа, ошибки авторизации;
- Считает: сколько раз с одного IP была попытка;
- Блокирует: если попыток больше N, IP блокируется через iptables или nftables;
- Разблокирует: через заданное время IP освобождается.
Плюсы
- Автоматизация: не нужно реагировать вручную;
- Гибкость: можно настроить под любые сервисы;
- Бесплатно: open-source, есть в репозиториях;
- Простота: работает «из коробки» после установки;
- Эффективность: блокирует 99% брутфорс-атак.
Минусы
- Реагирует по факту: первая атака уже случается до блокировки;
- Ложные срабатывания: может блокировать нормальных пользователей;
- Требует настройки: базовые правила нужно адаптировать под проект.
💡 Важно
Fail2ban — не замена файрволу. Он дополняет его: файрвол закрывает порты, fail2ban реагирует на активность в разрешённых сервисах.
Установка
Fail2ban устанавливается через штатный пакетный менеджер.
Ubuntu / Debian
apt update— обновить репозитории;apt install fail2ban— установить;systemctl enable fail2ban— включить автозапуск;systemctl start fail2ban— запустить.
CentOS / AlmaLinux / Rocky
dnf install epel-release— подключить EPEL;dnf install fail2ban— установить;systemctl enable fail2ban— включить автозапуск;systemctl start fail2ban— запустить.
Проверка
- Статус:
systemctl status fail2ban; - Версия:
fail2ban-client --version; - Активные jail:
fail2ban-client status.
Конфигурация
Fail2ban имеет две директории с конфигами: базовые и пользовательские. Свои настройки нужно хранить в jail.local, а не редактировать jail.conf.
Файлы конфигурации
- /etc/fail2ban/jail.conf: базовый конфиг — не редактировать;
- /etc/fail2ban/jail.local: ваш конфиг — редактировать здесь;
- /etc/fail2ban/jail.d/: дополнительные файлы;
- /etc/fail2ban/filter.d/: фильтры для распознавания атак;
- /etc/fail2ban/action.d/: действия (блокировка через iptables, nftables).
Создание jail.local
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Основные параметры
| Параметр | Что делает | Рекомендация |
|---|---|---|
| bantime | Время блокировки (секунды) | 3600 (1 час) |
| findtime | Окно, в котором считаются попытки | 600 (10 минут) |
| maxretry | Максимум попыток до блокировки | 3–5 |
| ignoreip | Доверенные IP (не блокировать) | Ваш IP, офис |
| backend | Способ чтения логов | auto или systemd |
| destemail | Email для оповещений | Ваш админский email |
Пример jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
ignoreip = 127.0.0.1/8 192.168.1.0/24 ваш_ip
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
Основные jail
Jail — это правило, которое говорит Fail2ban, за каким сервисом следить и как блокировать. Вот основные jail для типовых серверов.
| Jail | Для чего | Что блокирует |
|---|---|---|
| sshd | SSH | Брутфорс паролей SSH |
| nginx-http-auth | Nginx | Брутфорс Basic Auth |
| nginx-botsearch | Nginx | Сканеры, боты |
| nginx-limit-req | Nginx | Превышение лимитов запросов |
| apache-auth | Apache | Брутфорс Basic Auth |
| postfix | Почта | Спам через SMTP |
| postfix-sasl | Почта | Брутфорс SMTP-аутентификации |
| dovecot | Почта | Брутфорс IMAP/POP3 |
| mysqld-auth | MySQL | Брутфорс MySQL |
| php-url-fopen | PHP | Атаки через fopen URL |
| recidive | Повторные атаки | Долгая блокировка рецидивистов |
Как включить jail
В файле jail.local добавить секцию:
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
[postfix-sasl]
enabled = true
Проверка и перезапуск
fail2ban-client status— показать активные jail;fail2ban-client status sshd— статистика по SSH;systemctl restart fail2ban— применить изменения.
Свои правила
Если ваше приложение пишет логи в своём формате — можно создать собственный фильтр и jail.
1. Создать фильтр
Файл /etc/fail2ban/filter.d/myapp.conf:
[Definition]
failregex = ^.*Authentication failed for user .* from .*$
ignoreregex =
2. Создать jail
В jail.local:
[myapp]
enabled = true
filter = myapp
logpath = /var/log/myapp/auth.log
maxretry = 3
bantime = 3600
3. Проверить фильтр
Команда fail2ban-regex позволяет проверить фильтр на реальных логах:
fail2ban-regex /var/log/myapp/auth.log /etc/fail2ban/filter.d/myapp.conf
Если команда показывает matches — фильтр работает.
💡 Важно
Перед созданием своего фильтра проверьте — возможно, он уже есть в /etc/fail2ban/filter.d/. Для популярных приложений фильтры уже написаны.
Мониторинг
Fail2ban нужно мониторить: смотреть, кого заблокировал, есть ли проблемы, работают ли правила.
Команды
fail2ban-client status— список активных jail;fail2ban-client status sshd— статус SSH-jail;fail2ban-client get sshd banned— список заблокированных IP;fail2ban-client set sshd unbanip 1.2.3.4— разблокировать IP;fail2ban-client set sshd banip 1.2.3.4— заблокировать вручную.
Логи
- /var/log/fail2ban.log: основной лог;
- Проверка:
tail -f /var/log/fail2ban.log.
Оповещения
- Email: в jail.local настройка destemail и action_mw;
- Telegram: через свой action или webhook;
- Slack: через интеграцию;
- Мониторинг: экспорт метрик в Prometheus / Zabbix.
Интеграция с Grafana
Fail2ban экспортирует метрики через fail2ban_exporter. Их можно визуализировать в Grafana и настроить алерты.
Интеграции
Fail2ban отлично работает вместе с другими инструментами безопасности.
- Файрвол: блокировка через iptables или nftables;
- Cloudflare: блокировка на уровне CDN, а не сервера;
- AbuseIPDB: автопроверка IP на репутацию;
- Grafana: визуализация блокировок;
- Telegram: оповещения о блокировках;
- ELK / Graylog: централизованный сбор логов;
- Мониторинг: Zabbix, Prometheus — метрики;
- SIEM: интеграция с системами анализа событий.
Пример: блокировка на уровне Cloudflare
Если сайт работает через Cloudflare, есть смысл блокировать атакующих на уровне CDN, а не сервера. Для этого можно написать action в fail2ban, который вызывает API Cloudflare.
Ошибки
Блокировка себя
Админ ошибся паролем и заблокировал свой IP. Нужен ignoreip с доверенными адресами.
Слишком короткая блокировка
Боты атакуют повторно после разблокировки. Нужен jail recidive с долгой блокировкой.
Не работает с backend
Fail2ban не читает логи из-за неправильного backend. Нужно указать systemd или auto.
Нет jail для приложения
Fail2ban защищает SSH, но не защищает ваше приложение. Нужны свои фильтры.
Не настроен ignoreip
Заблокированы доверенные пользователи, офисные IP. Нужен ignoreip.
Нет мониторинга
Fail2ban работает, но никто не смотрит статистику. Проблемы не видны.
Правила в jail.conf
Редактируют базовый jail.conf. При обновлении всё сбрасывается. Нужен jail.local.
Один jail на всё
Настроен только SSH, но атакуют через Nginx или почту. Нужны отдельные jail.
Наши рекомендации
Что вы получаете, заказывая настройку Fail2ban у нас
- Установку — Fail2ban + iptables / nftables
- Настройку jail — SSH, Nginx, почта, БД
- Свои правила — под ваше приложение
- Ignore IP — доверенные адреса
- Мониторинг — оповещения в Telegram, email
- Интеграцию — с Cloudflare, Grafana
📌 Итоговый вывод
Fail2ban — это обязательный инструмент для любого сервера в интернете.
Что нужно знать:
- Что это — утилита для защиты от брутфорса
- Как работает — читает логи, блокирует IP через файрвол
- Конфигурация — jail.local, а не jail.conf
- Основные jail — sshd, nginx, postfix, dovecot, mysqld
- Свои правила — фильтры для своих приложений
- Мониторинг — fail2ban-client, логи, оповещения
- Интеграции — Cloudflare, Grafana, ELK
- Ошибки — блокировка себя, короткие блокировки, нет ignoreip
Также рекомендуем: 152-ФЗ для серверов, аудит безопасности, файрвол на сервере, SSH-ключи и 2FA, с чего начать защиту, настройка безопасности.