Fail2Ban: как защитить сервер от перебора паролей

Автоматическая защита от нежелательных подключений

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

Что делает

Fail2Ban — это демон, который анализирует лог-файлы и на время блокирует IP-адреса, откуда приходит слишком много неудачных попыток входа. Блокировка выполняется через правила файрвола, например iptables, nftables и другие механизмы. Когда срок бана заканчивается, IP автоматически снимается с блокировки.

По умолчанию поддерживаются логи SSH, Apache, Nginx, Postfix и множества других сервисов. При необходимости можно подключить любой лог-файл с собственным форматом.

Установка

В большинстве дистрибутивов нужный пакет уже доступен в репозиториях:

# Debian/Ubuntu
sudo apt install fail2ban

# RHEL/CentOS
sudo dnf install fail2ban

После установки стоит убедиться, что сервис работает:

fail2ban-client -h
fail2ban-client version

Как это настраивается

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

Пример минимальной настройки для защиты SSH:

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

maxretry — это число неудачных попыток, допустимых за интервал findtime в секундах. Если лимит превышен, IP попадает в бан на bantime секунд.

В этом примере пять ошибок за 10 минут приведут к блокировке на один час.

Управление банами

Проверить активные джейлы и заблокированные IP:

sudo fail2ban-client status
sudo fail2ban-client status sshd

Снять блокировку с IP вручную:

sudo fail2ban-client set sshd unbanip 1.2.3.4

Fail2Ban уменьшает нагрузку от перебора паролей, но не заменяет полноценную аутентификацию.

Если сервис всё ещё использует пароли, лучше перейти на ключи или включить двухфакторную аутентификацию. В таком случае Fail2Ban остаётся полезным дополнительным уровнем защиты.

GitHub