Настройка Fail2ban для защиты SSH в Ubuntu
Пошаговая настройка Fail2ban для защиты SSH: установка, jail sshd, параметры блокировки, проверка работы и ручное управление банами.
Fail2ban анализирует системные журналы и временно или бессрочно блокирует IP-адреса, с которых выполняется слишком много неудачных попыток входа. В этой инструкции настраивается защита только для SSH.
Проверено на: Ubuntu Server 24.04 LTS
Уровень сложности: начальный
Время выполнения: около 10 минут
Требуемый доступ: пользователь с правамиsudo
Что будет настроено
В результате:
- Fail2ban будет установлен и запущен;
- jail
sshdбудет включён; - блокировка будет срабатывать после заданного числа неудачных попыток;
- можно будет просматривать, добавлять и снимать баны вручную.
Установка Fail2ban
Обновите индекс пакетов:
sudo apt update
Установите Fail2ban:
sudo apt install -y fail2ban
Проверьте версию:
fail2ban-client --version
Создание конфигурации для SSH
Создайте отдельный локальный конфигурационный файл:
sudo tee /etc/fail2ban/jail.d/sshd.local >/dev/null <<'EOF'
[sshd]
enabled = true
port = ssh
backend = systemd
maxretry = 3
findtime = 10m
bantime = 1h
ignoreip = 127.0.0.1/8 ::1
EOF
Используемые параметры:
enabled = true— включает jail;port = ssh— защищает SSH-сервис;backend = systemd— читает события из journald;maxretry = 3— блокирует после трёх неудачных попыток;findtime = 10m— учитывает попытки за последние десять минут;bantime = 1h— блокирует IP-адрес на один час;ignoreip— исключает локальные адреса.
Выбор времени блокировки
Для временной блокировки:
bantime = 1h
Для блокировки на сутки:
bantime = 1d
Для бессрочной блокировки:
bantime = -1
Важно: бессрочная блокировка удобна против автоматических подборов, но требует ручной разблокировки при ошибочном бане.
Проверка конфигурации
Проверьте синтаксис:
sudo fail2ban-client -t
Ожидаемый результат:
OK: configuration test is successful
Запуск Fail2ban
Включите автозапуск и запустите сервис:
sudo systemctl enable --now fail2ban
Перезапустите сервис после изменения конфигурации:
sudo systemctl restart fail2ban
Проверьте состояние:
sudo systemctl status fail2ban --no-pager
Проверка jail sshd
Посмотрите список активных jail:
sudo fail2ban-client status
Проверьте SSH-jail:
sudo fail2ban-client status sshd
Ожидаемый вывод содержит:
Status for the jail: sshd
Currently failed:
Total failed:
Currently banned:
Total banned:
Banned IP list:
Проверьте фактические значения параметров:
sudo fail2ban-client get sshd maxretry
sudo fail2ban-client get sshd findtime
sudo fail2ban-client get sshd bantime
Для приведённой конфигурации ожидаются значения:
3
600
3600
Просмотр журналов
Последние сообщения Fail2ban:
sudo journalctl -u fail2ban -n 100 --no-pager
Наблюдение за событиями в реальном времени:
sudo journalctl -u fail2ban -f
Проверка событий SSH:
sudo journalctl -u ssh --since "10 minutes ago" --no-pager
Ручная блокировка IP-адреса
Заблокировать адрес вручную:
sudo fail2ban-client set sshd banip 192.0.2.10
Проверить список:
sudo fail2ban-client status sshd
Ручная разблокировка IP-адреса
Снять блокировку:
sudo fail2ban-client set sshd unbanip 192.0.2.10
Проверить результат:
sudo fail2ban-client status sshd
Добавление доверенного IP-адреса
Если есть постоянный административный IP, его можно добавить в ignoreip.
Пример:
ignoreip = 127.0.0.1/8 ::1 198.51.100.25
После изменения перезапустите сервис:
sudo systemctl restart fail2ban
Проверьте список исключений:
sudo fail2ban-client get sshd ignoreip
Предупреждение: не добавляйте в
ignoreipслишком широкие подсети без необходимости.
Проверка фильтра SSH
Посмотрите, какие журналы использует jail:
sudo fail2ban-client get sshd journalmatch
Проверьте последние события SSH:
sudo journalctl -u ssh -n 100 --no-pager
Если неудачные попытки входа отображаются в журнале, Fail2ban сможет их обработать.
Проверка работы без риска потерять доступ
Не рекомендуется специально вводить неправильный пароль со своего единственного административного IP.
Безопасный порядок проверки:
- Не закрывайте текущую SSH-сессию.
- Откройте второе подключение.
- Убедитесь, что знаете способ ручной разблокировки.
- Проверяйте бан с другого IP-адреса или тестового узла.
- После проверки убедитесь, что основной доступ сохранился.
Изменение параметров блокировки
Пример более мягкой настройки:
maxretry = 5
findtime = 15m
bantime = 30m
Пример строгой настройки:
maxretry = 3
findtime = 10m
bantime = -1
После изменений:
sudo fail2ban-client -t
sudo systemctl restart fail2ban
Типичные проблемы
Jail sshd не отображается
Проверьте конфигурацию:
sudo fail2ban-client -t
Проверьте имя файла:
/etc/fail2ban/jail.d/sshd.local
Перезапустите сервис:
sudo systemctl restart fail2ban
Fail2ban не видит попытки входа
Проверьте SSH-журнал:
sudo journalctl -u ssh --since "30 minutes ago" --no-pager
Проверьте backend:
backend = systemd
Собственный IP оказался заблокирован
Используйте консоль провайдера или другое подключение и выполните:
sudo fail2ban-client set sshd unbanip YOUR_IP
После этого добавьте доверенный адрес в ignoreip, если он постоянный.
Итог
После выполнения инструкции Fail2ban:
- отслеживает неудачные попытки входа по SSH;
- блокирует подозрительные IP-адреса;
- запускается автоматически;
- позволяет управлять банами вручную;
- использует отдельную локальную конфигурацию, не изменяя системный
jail.conf.
Настройку SSH-ключей, отключение парольной авторизации и запрет входа root следует выполнять отдельно.