fail2ban: защита SSH от подбора паролей

Ставим fail2ban, настраиваем jail для SSH с чтением systemd-журнала, смотрим забаненных и разбаниваем себя.

5 ноября 2026 г.·2 мин чтения·fail2ban, ssh

fail2ban следит за журналом входов и, если с одного IP идут частые неудачные попытки, временно блокирует этот адрес в брандмауэре. Если вы уже входите по ключу, перебор вам не страшен, но fail2ban всё равно полезен: журналы становятся читаемыми, а боты перестают долбить сервер тысячами попыток в час.

1. Установка

Ubuntu и Debian:

sudo apt update
sudo apt install -y fail2ban python3-systemd

python3-systemd нужен, чтобы fail2ban читал журнал systemd — на Debian 12 и Ubuntu 24.04 файла /var/log/auth.log по умолчанию нет.

AlmaLinux, Rocky, CentOS:

sudo dnf install -y epel-release
sudo dnf install -y fail2ban

2. Настройка

Основной конфиг jail.conf перезаписывается при обновлениях, поэтому свои настройки кладут в jail.local:

sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1

[sshd]
enabled = true
port    = ssh
backend = systemd

Читается так: пять неудачных попыток за десять минут — бан на час. Если у вас постоянный IP, добавьте его в ignoreip через пробел, чтобы никогда не заблокировать себя. Если меняли порт SSH, вместо ssh укажите номер: port = 2222.

На Ubuntu 24.04 пакет уже включает jail для sshd через /etc/fail2ban/jail.d/defaults-debian.conf; ваш jail.local его дополняет, конфликта нет.

3. Запуск

sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

fail2ban-client status sshd на свежем сервере

В выводе: Total failed — сколько неудачных попыток fail2ban увидел, Banned IP list — кто заблокирован сейчас. На свежем сервере с открытым портом 22 список начнёт заполняться через несколько минут.

Полезные команды

sudo fail2ban-client status                   # список jail
sudo fail2ban-client status sshd              # статистика по SSH
sudo fail2ban-client set sshd unbanip 203.0.113.10   # разбанить адрес
sudo fail2ban-client set sshd banip 203.0.113.10     # забанить вручную
sudo journalctl -u fail2ban -n 50             # журнал самого fail2ban

Если заблокировали себя

Три варианта: подождать час, зайти с другого адреса (мобильный интернет) и разбанить, или открыть консоль в кабинете tanaka.host и выполнить unbanip оттуда. После этого добавьте свой IP в ignoreip.

Другие сервисы

fail2ban умеет защищать не только SSH. В /etc/fail2ban/filter.d/ лежат готовые фильтры для nginx (nginx-http-auth, nginx-botsearch), postfix, dovecot и десятков других программ. Включаются так же: секция с именем фильтра и enabled = true в jail.local. У некоторых панелей (например, 3X-UI) есть собственная встроенная версия fail2ban — не включайте две сразу на один и тот же журнал.