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

Как защитить SSH-сервер от брутфорс-атак с помощью Fail2ban.

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

Установка

Ubuntu / Debian:

apt-get install fail2ban

CentOS:

yum install fail2ban

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

У Fail2ban два основных конфигурационных файла:

  • /etc/fail2ban/fail2ban.conf — настройки запуска самого процесса Fail2ban
  • /etc/fail2ban/jail.conf — настройки защиты конкретных сервисов, в том числе SSH

Файл jail.conf разделён на секции — так называемые «изоляторы» (jails). Каждая секция отвечает за определённый сервис и тип атаки:

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 600
maxretry = 3
banaction = iptables-multiport

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

Параметры из секции [DEFAULT] применяются ко всем остальным секциям, если явно не переопределены.

Секция [ssh] отвечает за защиту от повторяющихся неудачных попыток авторизации — то есть от классического брутфорса.

Описание основных параметров

  • ignoreip — IP-адреса, которые никогда не будут заблокированы. Можно указать список адресов через пробел, маску подсети или имя DNS-сервера.
  • bantime — время блокировки в секундах. По истечении этого времени IP-адрес автоматически удаляется из списка заблокированных.
  • maxretry — количество подозрительных совпадений, после которых срабатывает блокировка. Для секции [ssh] — это число неудачных попыток входа.
  • findtime — интервал в секундах, в течение которого должно накопиться maxretry событий для применения санкций. По умолчанию — 600 секунд (10 минут).
  • enabledtrue активирует изолятор, false отключает.
  • port — порт целевого сервиса. Для SSH это 22 или буквенный псевдоним ssh.
  • filter — имя фильтра с регулярными выражениями для поиска подозрительных событий в логах. Фильтру sshd соответствует файл /etc/fail2ban/filter.d/sshd.conf.
  • logpath — путь к лог-файлу, который Fail2ban будет анализировать. История всех входов в систему по умолчанию записывается в /var/log/auth.log.

Рекомендации по настройке

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

Создайте файл jail.local:

nano /etc/fail2ban/jail.local

Пример рекомендуемой конфигурации:

[DEFAULT]
# Укажите ваш постоянный IP-адрес, чтобы случайно не заблокировать себя.
# Если не переопределить ignoreip здесь,
# закомментируйте этот параметр в jail.conf.
ignoreip = 57.66.158.131

[ssh]
# Если в течение 1 часа...
findtime  = 3600
# ...зафиксировано 6 неудачных попыток входа...
maxretry  = 6
# ...блокировать IP на 24 часа.
bantime   = 86400

Почему стоит менять ignoreip: значение по умолчанию 127.0.0.1/8 небезопасно в многопользовательских системах. Если злоумышленник получил доступ к любому shell-аккаунту на сервере, он сможет запустить брутфорс прямо изнутри — и Fail2ban его не заблокирует.

Почему стоит увеличивать findtime: ботнеты, использующие «медленный брутфорс», умеют обходить стандартное значение в 10 минут. При maxretry = 6 атакующий делает 5 попыток, ждёт 10 минут, делает ещё 5 — и так до бесконечности без бана. Увеличение findtime до часа и более значительно усложняет такой сценарий.

Перезапуск Fail2ban

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

service fail2ban restart

Помощь

Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!

Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам