Быстрый старт Security Обновлено 6 VPS, Linux

Fail2ban на VPS: защита от брутфорса SSH

Пошаговое руководство по установке и настройке fail2ban на VPS для защиты от подбора паролей SSH. Разбор конфигурации, сравнение с альтернативами и диагностика.

fail2banSSHbruteforcesecurityVPSнастройка
Содержание
КороткоFail2ban — бесплатный инструмент для блокировки IP-адресов после нескольких неудачных попыток входа. Установите его через пакетный менеджер, настройте jail.local для SSH, перезапустите службу и проверьте логи. Это эффективная защита от автоматических брутфорс-атак.

Брутфорс SSH — одна из самых распространённых атак на VPS. Злоумышленники перебирают пары логин/пароль, используя автоматизированные скрипты. Даже сложный пароль не всегда спасает, если атака идёт с тысячи IP-адресов. Fail2ban — простое и эффективное решение: оно анализирует логи, обнаруживает повторяющиеся неудачные попытки и временно блокирует источник по firewall.

Что такое fail2ban и как он работает

Fail2ban — это демон, который следит за лог-файлами (например, /var/log/auth.log) и выполняет действия при совпадении с правилами. Для SSH он реагирует на сообщения об ошибках аутентификации. После определённого числа неудач (maxretry) за заданный период (findtime) IP-адрес блокируется на время (bantime) через iptables, nftables или firewalld.

Программа написана на Python и легко настраивается через конфигурационные файлы. Она поддерживает фильтры для многих служб, но применительно к VPS чаще всего используется для SSH.

Установка fail2ban на VPS

Установка выполняется из официального репозитория вашего дистрибутива. Перед установкой рекомендуется обновить списки пакетов.

# Debian/Ubuntu
sudo apt update
sudo apt install fail2ban -y

# CentOS/RHEL
sudo dnf install epel-release -y
sudo dnf install fail2ban -y

После установки служба запустится автоматически. Проверьте статус:

sudo systemctl status fail2ban

Если он активен, переходите к настройке. Актуальные версии и особенности установки лучше проверять на официальном сайте fail2ban (см. источники).

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

Основной конфигурационный файл — /etc/fail2ban/jail.conf. Его не рекомендуется редактировать напрямую, так как при обновлении он будет перезаписан. Вместо этого создайте файл jail.local и укажите параметры в нём.

sudo nano /etc/fail2ban/jail.local

Вот минимальная конфигурация для защиты SSH:

[DEFAULT]
# Время блокировки в секундах (например, 1 час = 3600)
bantime = 3600

# Период, за который учитываются попытки
findtime = 600

# Максимальное число попыток за findtime
maxretry = 5

# Игнорировать локальные адреса и свой VPS
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

[sshd]
enabled = true

В секции [sshd] можно переопределить параметры для конкретного сервиса. Например, увеличить bantime для SSH:

[sshd]
enabled = true
bantime = 7200
maxretry = 3

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

sudo systemctl restart fail2ban

Убедитесь, что jail активен:

sudo fail2ban-client status sshd

Сравнение fail2ban с альтернативами

Fail2ban не единственный инструмент для защиты SSH. Рассмотрим основные варианты.

  • Fail2ban — гибкий, поддерживает множество сервисов, но требует настройки и слежения за логами.
  • DenyHosts — специализируется только на SSH, проще в настройке, но менее гибок.
  • SSHGuard — работает быстрее, анализирует логи в реальном времени, но имеет меньше возможностей для расширений.
  • Облачные решения (например, firewall от провайдера) — не требуют установки ПО, но зависят от внешнего сервиса и могут быть платными.

Для большинства VPS fail2ban — оптимальный баланс гибкости и простоты. Выбирайте по сценарию: если нужно защитить только SSH и не хочется возиться с настройкой — DenyHosts. Если необходимо отслеживать несколько служб — fail2ban. Если атаки идут распределённо — стоит комбинировать с облачным фильтром.

Проверка работы и диагностика

После запуска важно убедиться, что fail2ban действительно блокирует. Для этого можно искусственно вызвать неудачные попытки входа.

Сначала проверьте список заблокированных IP:

sudo fail2ban-client status sshd

Вы увидите информацию о jail: количество запрещённых IP, фильтры, действия. Чтобы проверить, срабатывает ли фильтр, имитируйте атаку (не с своего рабочего IP, если он не в исключениях):

ssh invalid@your_server_ip

Повторите несколько раз (больше maxretry). Затем снова выполните status — IP должен появиться в списке.

Логи можно посмотреть в файле:

sudo tail -f /var/log/fail2ban.log

Если блокировки не происходит, проверьте:

  • Указан ли правильный лог-файл в jail.local (например, для Debian — /var/log/auth.log).
  • Не перекрывает ли конфигурация в [DEFAULT] параметры секции.
  • Активен ли jail (enabled = true).
  • Правильно ли работает chain в iptables (может потребоваться установка iptables-persistent).

Частые ошибки и советы

  • Не перезапустили fail2ban после изменения конфигурации. Всегда выполняйте restart или reload.
  • Игнорирование собственного IP. Обязательно добавьте свой IP и локальные подсети в ignoreip, чтобы не заблокировать самих себя.
  • Слишком большой bantime. Для разовой атаки это ок, но для легитимных пользователей, которые забыли пароль, это проблема. Начните с 15-30 минут.
  • Не настроили уведомления. Fail2ban может отправлять письма, но по умолчанию вы не узнаете о блокировках. Настройте действие action = %(action_mwl)s в jail.local.
  • Не обновляете базы фильтров. При установке из репозитория фильтры могут устаревать. Проверяйте обновления fail2ban.

Также не забудьте отключить вход по паролю, если используете SSH-ключи. Это снизит риск даже при отсутствии fail2ban.

Мини-чеклист

  • Обновить пакетный менеджер и установить fail2ban
  • Создать /etc/fail2ban/jail.local с параметрами для SSH
  • Проверить корректность пути к лог-файлу в конфигурации
  • Добавить свой IP в ignoreip
  • Перезапустить службу fail2ban
  • Проверить статус jail через fail2ban-client
  • Имитировать неудачные входы и убедиться в блокировке
  • Просмотреть логи /var/log/fail2ban.log на предмет ошибок

Частые ошибки

  • Редактирование jail.conf вместо jail.local
  • Забыли перезапустить fail2ban после изменения конфига
  • Не настроили ignoreip и заблокировали сами себя
  • Указали неверный лог-файл для вашего дистрибутива
  • Излишне длинный bantime мешает легитимным пользователям
  • Не проверили работу после настройки

Источники и документация

FAQ

Какие параметры fail2ban самые важные для SSH?

Основные — maxretry (сколько неудачных попыток), findtime (за какой период), bantime (на сколько блокировать). Рекомендуемые значения: maxretry=5, findtime=600, bantime=3600.

Можно ли настроить fail2ban на вечные баны?

Да, для этого в bantime укажите большое значение (например, -1 означает вечный бан). Но это может быть неудобно, так как придётся вручную снимать блокировку.

Как разблокировать IP вручную?

Используйте команду: sudo fail2ban-client set sshd unbanip IP_АДРЕС. Замените sshd на имя вашего jail.

Будет ли fail2ban работать с firewalld?

Да, fail2ban поддерживает firewalld и iptables. В конфигурации можно выбрать действие через banaction, например, banaction = firewalld-ipset.

Хотите перейти сразу к рабочему доступу?

Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.

Получить доступ

Дальше по теме

Связанные статьи