← К вики

Защита от брутфорса с Fail2Ban

Как установить и настроить Fail2Ban для блокировки подбора паролей.

Время: 10 мин · Сложность: ★☆☆☆☆

Подходит: ✓ Ubuntu 22.04 · ✓ Debian 12 · ✓ AlmaLinux 9


Краткое описание

Fail2Ban анализирует системные логи и временно блокирует IP-адреса, которые слишком часто ошибаются при входе. Работает с SSH, Nginx, Postfix и другими службами. После установки защита от перебора включается автоматически — без дополнительной настройки.

Когда пригодится

  • Сразу после запуска нового VPS с открытым SSH
  • Если в /var/log/auth.log видите сотни строк с Failed password
  • Когда хотите защитить не только SSH, но и веб-сервер или почтовый сервер

Что понадобится

  • Root-доступ к серверу
  • Открытый порт SSH (стандартный 22 или нестандартный)

Пошаговая инструкция

1. Установка

На Ubuntu и Debian:

apt install -y fail2ban

На AlmaLinux:

dnf install -y fail2ban

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

systemctl enable --now fail2ban

2. Настройка для SSH

Создайте файл с локальными настройками — он не перезапишется при обновлении пакета:

nano /etc/fail2ban/jail.local

Добавьте следующее содержимое:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

Параметры:

  • maxretry = 5 — после 5 неудачных попыток IP блокируется
  • bantime = 3600 — блокировка на 1 час (в секундах)
  • findtime = 600 — окно наблюдения 10 минут

Если используете нестандартный порт SSH, замените port = ssh на port = 2222 (или ваш порт).

На AlmaLinux путь к логу другой:

logpath = /var/log/secure

3. Применить настройки

systemctl restart fail2ban

4. Проверка статуса

fail2ban-client status sshd

Вывод покажет количество заблокированных IP и текущий список.

5. Разблокировать IP вручную

Если заблокировали себя или нужного пользователя:

fail2ban-client set sshd unbanip 1.2.3.4

Проверка результата

fail2ban-client status sshd

В выводе должно быть:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

Служба работает, если Currently failed и Total banned присутствуют в выводе.

Возможные ошибки

«Failed to start fail2ban» — скорее всего ошибка синтаксиса в jail.local. Проверьте конфигурацию:

fail2ban-client -t

Заблокировали сами себя — откройте VNC-консоль в панели VMmanager и выполните:

fail2ban-client set sshd unbanip ВАШ_IP

Или временно отключите Fail2Ban: systemctl stop fail2ban.

Fail2Ban не реагирует на попытки входа — проверьте, что logpath указывает на существующий файл. На разных дистрибутивах путь к логу может отличаться.

«ERROR No file(s) found for glob» — файл лога не существует или указан неверный путь. Найдите нужный лог: journalctl -u ssh или ls /var/log/auth*.

FAQ

Можно ли защитить Nginx от перебора? Да. Добавьте в jail.local секцию [nginx-http-auth] — фильтр уже встроен в Fail2Ban. Путь к логу: /var/log/nginx/error.log.

Как посмотреть все активные «тюрьмы»?

fail2ban-client status

Как увеличить время блокировки? Измените bantime. Значение -1 блокирует навсегда.

Fail2Ban и UFW — они конфликтуют? Нет. Fail2Ban может управлять правилами UFW. Для этого добавьте в jail.local параметр banaction = ufw.

Полезные ссылки

  • /etc/fail2ban/filter.d/ — встроенные фильтры для разных служб
  • fail2ban-client --help — справка по командам клиента
  • /var/log/fail2ban.log — собственный лог Fail2Ban

Следующие статьи

Сейчас работают только те cookie, без которых сайт не откроется. Разрешите ещё аналитические — будем видеть, где интерфейс мешает, и чинить это.