Что делает fail2ban
Любой сервер с открытым SSH сканируют боты: они подбирают пароли к root и другим пользователям. Fail2ban следит за журналом входов, считает неудачные попытки и на время блокирует адрес, с которого они идут. Это замедляет перебор и разгружает журнал.
Fail2ban дополняет, но не заменяет вход по ключу. Если вход по паролю отключён, перебор паролей бесполезен. О ключах и первой настройке читайте в статье первая настройка VPS на Ubuntu.
Установка
sudo apt update
sudo apt install fail2ban
sudo systemctl status fail2ban
Первая команда обновляет список пакетов. Вторая ставит fail2ban и запускает службу. Третья показывает, что она работает, нужна строка active (running).
Защита SSH в Ubuntu 24.04 включается сразу после установки. Пакет кладёт файл /etc/fail2ban/jail.d/defaults-debian.conf, а в нём уже включено правило [sshd], журнал читается из systemd (backend = systemd), блокировки ставятся через nftables. Посмотреть файл можно командой cat /etc/fail2ban/jail.d/defaults-debian.conf. Ниже мы задаём свои сроки блокировки и список адресов-исключений.
Не правьте jail.conf
Основной файл настроек /etc/fail2ban/jail.conf при обновлении пакета может быть перезаписан. Документация fail2ban советует свои настройки писать в отдельный файл jail.local или в файлы каталога jail.d/. Значения из jail.local перекрывают значения из jail.conf.
sudo nano /etc/fail2ban/jail.local
Команда открывает новый файл jail.local в редакторе nano. Вставьте:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
backend = systemd
Раздел [DEFAULT] задаёт общие значения. maxretry = 5 значит: пять неудачных попыток за findtime (10 минут) приводят к блокировке на bantime (1 час). ignoreip это список адресов, которые не блокируются никогда. Раздел [sshd] включает защиту SSH.
Откуда fail2ban берёт журнал
Параметр backend говорит fail2ban, где искать записи о входах. Значение systemd означает чтение журнала systemd (journald). Текстовый файл /var/log/auth.log ведёт служба rsyslog, а в некоторых образах Ubuntu 24.04 её нет. С backend = systemd fail2ban от этого файла не зависит. В jail.local мы повторили эту строку, чтобы настройка не пропала, если файл из пакета изменится. Проверить, есть ли файл у вас:
ls -l /var/log/auth.log
sudo journalctl -u ssh --since "1 hour ago" | tail
Первая команда покажет файл или ответ No such file or directory. Вторая выводит записи службы ssh за последний час, tail оставляет последние десять строк. Неудачная попытка входа выглядит так: Failed password for alex from 203.0.113.5. Имя службы в Ubuntu 24.04 ssh, а не sshd.
Примените настройки
sudo systemctl restart fail2ban
sudo fail2ban-client status
restart перечитывает конфиг. fail2ban-client status выводит список работающих «jail», то есть правил наблюдения. В списке должен быть sshd. Ошибки конфигурации смотрите командой sudo journalctl -u fail2ban -n 30: она выводит последние 30 строк журнала службы.
Статус и заблокированные адреса
sudo fail2ban-client status sshd
Команда показывает для sshd число неудачных попыток, число блокировок и список заблокированных адресов (Banned IP list). Заблокированный адрес при попытке подключения получает ответ Connection refused.
Как разблокировать IP
Если заблокировали вас или клиента, например после нескольких опечаток в пароле:
sudo fail2ban-client set sshd unbanip 203.0.113.5
Команда снимает блокировку с адреса 203.0.113.5 в jail sshd. Подставьте нужный адрес. Если вы сами заблокированы и не можете зайти по SSH, зайдите через консоль в панели хостера и выполните эту команду там.
Как не заблокировать себя
Добавьте свой постоянный адрес в ignoreip, через пробел:
ignoreip = 127.0.0.1/8 ::1 203.0.113.5
Правьте строку в jail.local, затем снова sudo systemctl restart fail2ban. Это удобно, если у вас статический адрес. При динамическом адресе запись устареет, а чужой человек получит иммунитет к блокировкам. Тогда лучше оставить ignoreip по умолчанию и входить по ключу: при вводе верного ключа неудачных попыток не будет.
Связь с ufw
Fail2ban и ufw работают независимо. Ufw разрешает или закрывает порты по правилам, которые вы задали. Fail2ban добавляет временные правила блокировки для конкретных адресов через собственное действие (banaction). В Ubuntu 24.04 это nftables: проверить можно командой sudo fail2ban-client get sshd actions, а сами блокировки показывает sudo nft list table inet f2b-table.
Значит, блокировки fail2ban не появятся в выводе ufw status, это нормально. Правила ufw при этом остаются на месте, порты по-прежнему открыты по вашим настройкам. Если вы хотите, чтобы fail2ban блокировал через ufw, в документации fail2ban есть действие ufw, его указывают параметром banaction = ufw в jail.local. Перед этим убедитесь, что ufw уже включён и правило для SSH добавлено. Порядок включения описан в статье настройка файрвола ufw.
Если вы поменяли порт SSH, укажите его в разделе
[sshd]строкойport = 2222(с вашим номером). Иначе fail2ban будет блокировать не тот порт.
Если не работает
- Службы нет в списке: проверьте опечатки в
jail.local, особенно квадратные скобки и знаки=. - Блокировок нет, а попытки идут: проверьте
backendи имя службы командойjournalctl -u ssh. - Нужно увидеть историю блокировок:
sudo grep Ban /var/log/fail2ban.log. Fail2ban пишет свой журнал в этот файл, каждая блокировка и разблокировка там отдельной строкой.
Общий разбор журналов и служб есть в статье журналы и службы systemd.
Что делать дальше
Включите вход по ключам, отключите вход по паролю и оставьте fail2ban как дополнительную защиту. Если сервера ещё нет, сравните тарифы на странице подбора VPS: в базе 269 тарифов у 20 хостеров, цены сверены 18 октября 2026 года.
