Гид по технологиям

Установка и настройка Fail2ban на Ubuntu 22.04

• 7 min read • Безопасность • Обновлено 28 Nov 2025
Fail2ban на Ubuntu 22.04: установка и настройка
Fail2ban на Ubuntu 22.04: установка и настройка

Введение

Fail2ban — это бесплатное и открытое ПО предотвращения вторжений (IPS), которое помогает защитить Linux‑серверы от попыток подбора паролей и других злонамеренных входов. Программа написана на Python и поставляется с фильтрами для популярных сервисов: SSH, Apache2, FTP и т. п. Принцип работы прост: Fail2ban сканирует логи сервисов и временно блокирует IP‑адреса, которые демонстрируют подозрительную активность.

Определение в одну строку: Fail2ban — инструмент, который читает логи и добавляет правила в брандмауэр, чтобы временно блокировать атакующие IP.

Важно: Fail2ban не заменяет полноценную политику безопасности (strong passwords, обновления, двухфакторная аутентификация), но эффективно снижает шум автоматизированных атак.

Основные сценарии использования

  • Ограничение brute‑force атак на SSH и веб‑формы.
  • Автоматическое уведомление администраторов при блокировке IP.
  • Интеграция с различными бэкэндами брандмауэра (iptables, ufw, firewalld).

Что потребуется

  • Сервер с Ubuntu 22.04.
  • Непользователь root с правами sudo.
  • Доступ к сети и правам на изменение брандмауэра.

Подготовка UFW (Uncomplicated Firewall)

Перед установкой Fail2ban рекомендуется настроить брандмауэр. Ubuntu по умолчанию предлагает UFW — удобный интерфейс для iptables.

Проверьте статус UFW:

sudo ufw status

Если вывод содержит “Status: inactive”, UFW не запущен. Если система отвечает “Command ‘ufw’ not found”, пакет нужно установить.

Установка UFW:

sudo apt install ufw -y

Разрешите SSH перед включением брандмауэра, чтобы не потерять доступ:

sudo ufw allow ssh

Включите UFW и подтвердите:

sudo ufw enable

Проверьте статус снова:

sudo ufw status

Скриншот состояния UFW с правилом для SSH

Примечание: если SSH работает на нестандартном порту, замените правило ssh на конкретный порт, например sudo ufw allow 2222/tcp.

Установка Fail2ban

Обновите индексы пакетов и установите Fail2ban:

sudo apt update
sudo apt install fail2ban -y

После установки включите и запустите сервис:

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Проверьте статус:

sudo systemctl status fail2ban

Скриншот службы Fail2ban в активном состоянии

Структура конфигурации Fail2ban

Файлы конфигурации расположены в каталоге /etc/fail2ban.

Ключевые элементы:

  • fail2ban.conf — основная конфигурация сервиса.
  • jail.conf — пример конфигурации jail (не изменяйте прямо его).
  • action.d/ — набор действий (настройки уведомлений, команды брандмауэра и т. п.).
  • jail.d/ — дополнительная конфигурация jails в виде отдельных файлов.

Лучший подход — не редактировать jail.conf напрямую; вместо этого создайте локальный файл jail.local и вносите в него ваши изменения.

Скопируйте пример в локальный файл:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Откройте для редактирования:

sudo nano /etc/fail2ban/jail.local

Базовые параметры конфигурации

В jail.local обратите внимание на следующие опции:

  • ignoreip — список IP/сети, которые не будут блокироваться. Удобно добавить сюда IP админов и внутренние подсети.
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 192.168.10.20
  • bantime, findtime, maxretry — глобальные настройки времени бана, окна поиска и количества попыток.
bantime  = 1d
findtime = 10m
maxretry = 5

Пояснения:

  • bantime — продолжительность бана (пример 1d = 1 день, 1w = 1 неделя, либо секунды).

  • findtime — окно времени, в течение которого считаются неудачные попытки (например, 10m = 10 минут).

  • maxretry — число неудачных попыток, после которых сработает бан.

  • Email‑уведомления (опционально) — укажите адреса отправителя и получателя:

action = %(action_mw)s
destemail = [email protected]
sender = [email protected]
  • Интеграция с UFW — установите banaction в ufw:
banaction = ufw

Пример настройки джейла для SSH

Ниже пример секции для sshd, где мы переопределяем глобальные параметры только для этого jail:

[sshd]
enabled   = true
maxretry  = 3
findtime  = 10m
bantime   = 1w

port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Сохраните изменения и перезапустите сервис, чтобы применить их:

sudo systemctl restart fail2ban

Скриншот конфигурации sshd в Fail2ban

Работа с fail2ban-client

Для управления Fail2ban используется командная утилита fail2ban-client.

Проверка доступности сервера Fail2ban:

sudo fail2ban-client ping

Ожидаемый ответ: Server replied: pong — означает, что демон работает.

Статус конкретного jail, например sshd:

sudo fail2ban-client status sshd

Команды для получения отдельных параметров:

sudo fail2ban-client get sshd bantime
sudo fail2ban-client get sshd maxretry
sudo fail2ban-client get sshd actions
sudo fail2ban-client get sshd findtime
sudo fail2ban-client get sshd ignoreip

Скриншот детальной информации по sshd

Ручной бан и разбан IP

Заблокировать IP вручную в jail sshd:

sudo fail2ban-client set sshd banip IP-ADDRESS

Снять блокировку:

sudo fail2ban-client set sshd unbanip IP-ADDRESS

После изменения статуса проверьте:

sudo fail2ban-client status sshd

Убедитесь, что IP появился в списке заблокированных после banip и исчез после unbanip.

Отладка и типичные ошибки

  1. Логи не анализируются — проверьте путь logpath в jail и права доступа к логам.
  2. Фильтр не срабатывает — возможно, регулярное выражение в фильтре не соответствует текущему формату логов.
  3. Ban не применяется — убедитесь, что banaction соответствует установленному брандмауэру (ufw/iptables/firewalld).
  4. Блокировки мешают работе сервисов — всегда добавляйте доверенные IP в ignoreip.

Важное: если вы используете облачные балансировщики или прокси (например, AWS ELB, Cloudflare), исходные IP в логах могут быть IP прокси. В таком случае Fail2ban будет блокировать прокси, а не реальных клиентов — настройте запись реального IP в логах или используйте другие подходы.

Дополнительные подходы и альтернативы

  • Дополнение Fail2ban локальным rate‑limiting в SSH (sshd_config: MaxAuthTries, LoginGraceTime).
  • Firewall rules с использованием nftables напрямую для более тонкой политики.
  • CrowdSec — современная система, использующая коллективный интеллект для обнаружения атак (альтернатива/дополнение).
  • Внедрение 2FA для SSH (например, через Google Authenticator или внешние PAM‑модули).

Методология настройки (шаг за шагом)

  1. Резервная копия: скопируйте /etc/fail2ban/jail.conf в /etc/fail2ban/jail.local.
  2. Настройка UFW: разрешите SSH, включите UFW.
  3. Установка Fail2ban и старт сервиса.
  4. Скорректируйте ignoreip и глобальные параметры bantime, findtime, maxretry.
  5. Включите sshd jail, протестируйте локально с тестовой машины.
  6. Включите email‑оповещения при желании.
  7. Настройте мониторинг (логи, уведомления) и документируйте изменения.

Быстрая шпаргалка команд

  • Проверка статуса Fail2ban:
    sudo systemctl status fail2ban
  • Перезапуск после правок:
    sudo systemctl restart fail2ban
  • Пинг демона:
    sudo fail2ban-client ping
  • Список всех джейлов:
    sudo fail2ban-client status
  • Детали конкретного джейла:
    sudo fail2ban-client status sshd
  • Забанить / разбанить IP:
    sudo fail2ban-client set sshd banip 1.2.3.4
    sudo fail2ban-client set sshd unbanip 1.2.3.4
  • Получить отдельную переменную:
    sudo fail2ban-client get sshd bantime

Плейбук оперативных действий для администратора

  1. При жалобе пользователя на невозможность зайти по SSH — проверьте sudo fail2ban-client status sshd.
  2. Найдите IP в списке заблокированных — при необходимости снимите блок unbanip.
  3. Если блоки массовые — проверьте логи на попытки перебора и увеличьте findtime/уменьшите maxretry по ситуации.
  4. Если обнаружен ложный срабатывание, добавьте доверенный IP в ignoreip.
  5. После изменений — sudo systemctl restart fail2ban и проверка через fail2ban-client status.

Decision flow для выбора времени бана

flowchart TD
  A[Начало: замечены неудачные попытки входа] --> B{Атака одиночная или массовая?}
  B --> |Одиночная| C[Короткий бан: 1h–1d]
  B --> |Массовая| D{Атакующий из одной сети или множества IP?}
  D --> |Одна сеть| E[Сеть и IP: более долгий бан 1d–1w]
  D --> |Множественные IP| F[Рассмотреть блокировку сети или WAF]
  C --> G[Мониторинг и уведомление]
  E --> G
  F --> G

Используйте этот поток как подсказку: для бот‑атак часто достаточно краткого бана и мониторинга; для целенаправленных атак — более долгие блокировки и дополнительный анализ.

Роли и чек‑листы

Администратор сервера:

  • Убедиться, что UFW/Security Group позволяют доступ после правил.
  • Добавить свою рабочую подсеть в ignoreip.
  • Настроить и протестировать sshd jail.

Оперативная команда (on‑call):

  • Проверять уведомления об блокировках.
  • Быстро разбанивать легитимные IP по запросу.
  • Отслеживать повторяющиеся источники атак и эскалировать.

Команда безопасности:

  • Анализировать паттерны атак в логах.
  • Решать, нужна ли долгосрочная блокировка или блокировка сети/провайдера.
  • Координировать с провайдером/ISP при необходимости.

Когда Fail2ban может не помочь

  • Распределённые атаки (botnet) с тысячами разных IP — Fail2ban затруднённо блокирует каждую точку. Здесь нужны WAF или провайдерские фильтры.
  • Логи не содержат реального IP (проксирование) — требуются корректные заголовки X‑Forwarded‑For и поддержка их в логах.
  • Атаки на уровне приложений (SQLi, XSS) — нужны веб‑фильтры и корректная защита приложений.

Защита приватности и GDPR

Fail2ban сохраняет IP‑адреса в логах и конфигурациях. При применении в юрисдикциях с актами о защите данных:

  • Убедитесь, что у вас есть законное основание для обработки IP (безопасность сети).
  • Храните логи минимально необходимое время и применяйте ротацию логов.
  • При запросах субъектов данных обеспечьте процессы удаления/маскировки, если это требуется.

Факты и полезные пути

  • Путь конфигурации: /etc/fail2ban/
  • Основной локальный конфиг: /etc/fail2ban/jail.local
  • Логи сервиса: системный журнал journalctl -u fail2ban и логи сервисов (например, /var/log/auth.log)
  • Часто используемые бэкэнды: ufw, iptables, firewalld

Критерии приёмки

  • Fail2ban установлен и сервис активен (systemctl status fail2ban).
  • Правильный sshd jail включён и отражает ваши bantime, findtime, maxretry.
  • Тестовая симуляция нескольких неудачных входов приводит к ожидаемому бану.
  • Доверенные IP из ignoreip не блокируются.
  • Оповещения (если включены) доставляются на указанный email.

Итог

Вы установили и настроили Fail2ban для базовой защиты Ubuntu 22.04. Инструмент помогает значительно уменьшить шум автоматизированных атак, но должен использоваться как часть многослойной стратегии безопасности: актуальные обновления, сильные пароли, двухфакторная аутентификация и мониторинг.

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

Краткое резюме:

  • Установите UFW и откройте доступ к SSH до включения брандмауэра.
  • Установите Fail2ban, скопируйте jail.conf в jail.local и настройте параметры.
  • Интегрируйте с ufw через banaction = ufw и протестируйте через fail2ban-client.

Примечание: для продвинутых сценариев рассмотрите сочетание Fail2ban с WAF, rate‑limiting и 2FA.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро