Настройка Fail2ban для защиты SSH в Ubuntu

Пошаговая настройка Fail2ban для защиты SSH: установка, jail sshd, параметры блокировки, проверка работы и ручное управление банами.

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

Проверено на: Ubuntu Server 24.04 LTS
Уровень сложности: начальный
Время выполнения: около 10 минут
Требуемый доступ: пользователь с правами sudo

Что будет настроено

В результате:

  • Fail2ban будет установлен и запущен;
  • jail sshd будет включён;
  • блокировка будет срабатывать после заданного числа неудачных попыток;
  • можно будет просматривать, добавлять и снимать баны вручную.

Установка Fail2ban

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

sudo apt update

Установите Fail2ban:

sudo apt install -y fail2ban

Проверьте версию:

fail2ban-client --version

Создание конфигурации для SSH

Создайте отдельный локальный конфигурационный файл:

sudo tee /etc/fail2ban/jail.d/sshd.local >/dev/null <<'EOF'
[sshd]
enabled = true
port = ssh
backend = systemd

maxretry = 3
findtime = 10m
bantime = 1h

ignoreip = 127.0.0.1/8 ::1
EOF

Используемые параметры:

  • enabled = true — включает jail;
  • port = ssh — защищает SSH-сервис;
  • backend = systemd — читает события из journald;
  • maxretry = 3 — блокирует после трёх неудачных попыток;
  • findtime = 10m — учитывает попытки за последние десять минут;
  • bantime = 1h — блокирует IP-адрес на один час;
  • ignoreip — исключает локальные адреса.

Выбор времени блокировки

Для временной блокировки:

bantime = 1h

Для блокировки на сутки:

bantime = 1d

Для бессрочной блокировки:

bantime = -1

Важно: бессрочная блокировка удобна против автоматических подборов, но требует ручной разблокировки при ошибочном бане.

Проверка конфигурации

Проверьте синтаксис:

sudo fail2ban-client -t

Ожидаемый результат:

OK: configuration test is successful

Запуск Fail2ban

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

sudo systemctl enable --now fail2ban

Перезапустите сервис после изменения конфигурации:

sudo systemctl restart fail2ban

Проверьте состояние:

sudo systemctl status fail2ban --no-pager

Проверка jail sshd

Посмотрите список активных jail:

sudo fail2ban-client status

Проверьте SSH-jail:

sudo fail2ban-client status sshd

Ожидаемый вывод содержит:

Status for the jail: sshd
Currently failed:
Total failed:
Currently banned:
Total banned:
Banned IP list:

Проверьте фактические значения параметров:

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

Для приведённой конфигурации ожидаются значения:

3
600
3600

Просмотр журналов

Последние сообщения Fail2ban:

sudo journalctl -u fail2ban -n 100 --no-pager

Наблюдение за событиями в реальном времени:

sudo journalctl -u fail2ban -f

Проверка событий SSH:

sudo journalctl -u ssh --since "10 minutes ago" --no-pager

Ручная блокировка IP-адреса

Заблокировать адрес вручную:

sudo fail2ban-client set sshd banip 192.0.2.10

Проверить список:

sudo fail2ban-client status sshd

Ручная разблокировка IP-адреса

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

sudo fail2ban-client set sshd unbanip 192.0.2.10

Проверить результат:

sudo fail2ban-client status sshd

Добавление доверенного IP-адреса

Если есть постоянный административный IP, его можно добавить в ignoreip.

Пример:

ignoreip = 127.0.0.1/8 ::1 198.51.100.25

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

sudo systemctl restart fail2ban

Проверьте список исключений:

sudo fail2ban-client get sshd ignoreip

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

Проверка фильтра SSH

Посмотрите, какие журналы использует jail:

sudo fail2ban-client get sshd journalmatch

Проверьте последние события SSH:

sudo journalctl -u ssh -n 100 --no-pager

Если неудачные попытки входа отображаются в журнале, Fail2ban сможет их обработать.

Проверка работы без риска потерять доступ

Не рекомендуется специально вводить неправильный пароль со своего единственного административного IP.

Безопасный порядок проверки:

  1. Не закрывайте текущую SSH-сессию.
  2. Откройте второе подключение.
  3. Убедитесь, что знаете способ ручной разблокировки.
  4. Проверяйте бан с другого IP-адреса или тестового узла.
  5. После проверки убедитесь, что основной доступ сохранился.

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

Пример более мягкой настройки:

maxretry = 5
findtime = 15m
bantime = 30m

Пример строгой настройки:

maxretry = 3
findtime = 10m
bantime = -1

После изменений:

sudo fail2ban-client -t
sudo systemctl restart fail2ban

Типичные проблемы

Jail sshd не отображается

Проверьте конфигурацию:

sudo fail2ban-client -t

Проверьте имя файла:

/etc/fail2ban/jail.d/sshd.local

Перезапустите сервис:

sudo systemctl restart fail2ban

Fail2ban не видит попытки входа

Проверьте SSH-журнал:

sudo journalctl -u ssh --since "30 minutes ago" --no-pager

Проверьте backend:

backend = systemd

Собственный IP оказался заблокирован

Используйте консоль провайдера или другое подключение и выполните:

sudo fail2ban-client set sshd unbanip YOUR_IP

После этого добавьте доверенный адрес в ignoreip, если он постоянный.

Итог

После выполнения инструкции Fail2ban:

  • отслеживает неудачные попытки входа по SSH;
  • блокирует подозрительные IP-адреса;
  • запускается автоматически;
  • позволяет управлять банами вручную;
  • использует отдельную локальную конфигурацию, не изменяя системный jail.conf.

Настройку SSH-ключей, отключение парольной авторизации и запрет входа root следует выполнять отдельно.

← Предыдущая статья Настройка SSH-ключей в Ubuntu Следующая статья → Настройка swap в Ubuntu