Как установить и настроить Fail2Ban для защиты от брутфорс-атак SSH на VPS?

В статье разберём:

  • как установить Fail2Ban и проверить его работу;
  • как включить базовую защиту SSH;
  • как менять параметры блокировки (количество попыток, время бана);
  • как смотреть список заблокированных IP;
  • какие ошибки встречаются при настройке и как их решать.

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

  • Ubuntu/Debian VPS (для CentOS/RHEL установка немного отличается, но принцип тот же).

  • Доступ по SSH с root или sudo.

  • Уже установленный и работающий SSH (на стандартном или изменённом порту).

Подключение к VPS по SSH

Устанавливаем Fail2Ban и запускаем сервис

Fail2Ban есть в стандартных репозиториях Ubuntu/Debian, поэтому ставится буквально в пару команд.

Установка

sudo apt update
sudo apt install -y fail2ban

Проверяем статус сервиса

sudo systemctl status fail2ban

Если всё прошло успешно, сервис будет запущен и включён в автозагрузку.

Проверка статуса Fail2Ban в Ubuntu

Основные команды управления

# Проверить, работает ли Fail2Ban
sudo systemctl is-active fail2ban

# Перезапустить сервис после изменений
sudo systemctl restart fail2ban

# Смотреть логи работы
sudo journalctl -u fail2ban -e

Если сервис не запускается — возможно, в конфигурации ошибка. Проверяйте через:

sudo fail2ban-client -d

Базовая настройка защиты SSH

По умолчанию Fail2Ban не блокирует ничего — нужно включить «jail» для SSH. Все изменения лучше делать в файле /etc/fail2ban/jail.local, чтобы обновления не перезаписали конфигурацию.

Создаём локальный конфиг

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

Раздел [sshd]

Найдите и настройте блок:

[sshd]
enabled   = true
port      = ssh
filter    = sshd
logpath   = /var/log/auth.log
maxretry  = 5
findtime  = 600
bantime   = 3600
  • enabled — включаем правило для SSH.

  • port — порт SSH (если меняли, укажите свой, например 22222).

  • maxretry — сколько ошибок входа допустимо (здесь 5).

  • findtime — за какой период времени (600 секунд = 10 минут).

  • bantime — время блокировки IP (3600 секунд = 1 час).

Применяем изменения

sudo systemctl restart fail2ban
Настройка защиты SSH в jail.local

Важно: если SSH работает на нестандартном порту, замените port = ssh на конкретный номер порта (например, port = 22222).

Проверяем работу Fail2Ban и список заблокированных IP

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

Проверка активных jail

sudo fail2ban-client status

Вывод покажет список включённых правил, например:

Status
|- Number of jail:      1
`- Jail list:   sshd

Проверка конкретного jail

sudo fail2ban-client status sshd

Здесь видно:

  • Количество попыток входа.

  • Список заблокированных IP.

Разбанить IP вручную

sudo fail2ban-client set sshd unbanip 192.168.1.100
Проверка статуса Fail2Ban и активных jail

Совет: если вы тестируете работу Fail2Ban, попробуйте несколько раз подряд ввести неверный пароль при подключении по SSH с другого устройства — после 5 попыток IP будет заблокирован.

Типичные ошибки и их решения

  • Fail2Ban не блокирует IP — проверьте, что jail включён:

    sudo fail2ban-client status sshd

    Если список пустой, убедитесь, что параметр enabled = true прописан в /etc/fail2ban/jail.local.

  • Не срабатывает на нестандартном порту — измените строку port = ssh на ваш порт, например:

    port = 22222
  • Ошибка в логах вида Unable to read the filter — значит, неправильно указан фильтр или лог. Для SSH должно быть:

    filter = sshd
    logpath = /var/log/auth.log
  • После изменений Fail2Ban не запускается — проверяйте синтаксис:

    sudo fail2ban-client -d

    или смотрите логи:

    sudo journalctl -u fail2ban -e
  • Забанили сами себя — если потеряли доступ по SSH, восстановить его можно через консоль VNC/панель хостинга и выполнить:

    sudo fail2ban-client set sshd unbanip ВАШ_IP
Ошибки при работе Fail2Ban и их устранение

Итоги

  • Установили Fail2Ban и запустили сервис.

  • Включили базовую защиту SSH через jail.local.

  • Разобрались с настройками maxretry, findtime, bantime.

  • Научились проверять список активных jail и заблокированных IP.

  • Разобрали распространённые ошибки и способы их устранения.

Fail2Ban — это простой, но эффективный инструмент, который значительно снижает риск успешного подбора пароля к вашему серверу. Для ещё большей защиты можно дополнить его сменой стандартного SSH-порта и использованием ключей вместо паролей.