Fail2ban следит за попытками входа и, если с какого-то IP-адреса слишком много неудачных попыток, на время блокирует его в файрволе. Против ботов, которые подбирают пароли, он очень эффективен и почти не потребляет ресурсов.
Установка
# Ubuntu / Debian
apt install -y fail2ban python3-systemd
# Rocky Linux
dnf install -y epel-release && dnf install -y fail2ban
Настройка
Создайте файл /etc/fail2ban/jail.local (не редактируйте jail.conf: он перезаписывается при обновлении):
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
# Укажите здесь свой домашний IP, чтобы случайно не заблокировать самого себя
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
backend = systemd
С такими настройками IP-адрес, с которого 5 раз за 10 минут ввели неверный пароль, блокируется на час. Строка backend = systemd нужна, чтобы всё работало и в Debian 12, где классического файла auth.log больше нет.
systemctl enable --now fail2ban
systemctl restart fail2ban
Что сейчас делает Fail2ban
fail2ban-client status sshd
Команда покажет, сколько попыток он зафиксировал и какие IP-адреса заблокированы прямо сейчас.
Если вы заблокировали самого себя
Подождите, пока истечёт время блокировки, или войдите через консоль VNC и снимите блокировку:
fail2ban-client set sshd unbanip 198.51.100.7
Fail2ban — хороший дополнительный уровень защиты, но настоящая защита — это когда паролей для подбора просто нет: входите по SSH-ключу и отключите пароли.