Заметки о решаемых задачах АйТишников

Сделал - запиши. Нашёл - сохрани :)

Прошу прощения за рекламу на сайте. Я постарался сделать это максимально ненавязчиво и по минимуму. При чтении заинтересовавших вас статей она не будет вам мешать.
И если есть возможность поставить мой сайт в исключения у блокировщика рекламы, я буду очень признателен вам.

Защита SSH с помощью Fail2ban и systemd journal

Защита SSH с помощью Fail2ban и systemd journal

 

 

 

Введение

SSH — один из самых популярных способов удалённого управления сервером, но часто становится целью брутфорс-атак. Fail2ban — эффективный инструмент для автоматической блокировки IP-адресов после нескольких неудачных попыток входа. В этой статье мы подробно рассмотрим, как настроить Fail2ban для защиты SSH-сервера, который логирует события через systemd journal (например, сервис ssh.service), а не через традиционные файлы логов.


Предпосылки

  • Сервер на Linux с systemd (Ubuntu, Debian, и др.)
  • Установленный и работающий SSH-сервис с именем ssh.service
  • Установленный fail2ban (sudo apt install fail2ban)

Проблема с логами SSH и Fail2ban

Fail2ban по умолчанию ожидает, что логи SSH будут в файлах /var/log/auth.log или /var/log/secure. Однако современные системы часто используют systemd journal для логирования, и файл логов может отсутствовать. В этом случае fail2ban не сможет найти логи и не запустится, выдавая ошибку:

ERROR   Failed during configuration: Have not found any log file for sshd jail

Решение: настройка Fail2ban для чтения из systemd journal

1. Создаём или редактируем файл /etc/fail2ban/jail.local

Этот файл используется для локальных настроек, чтобы не менять оригинальный конфиг /etc/fail2ban/jail.conf.

sudo nano /etc/fail2ban/jail.local

2. Добавляем секцию для SSH с настройками:

[sshd]
enabled = true
port = ssh
filter = sshd
backend = systemd
journalmatch = _SYSTEMD_UNIT=ssh.service
maxretry = 3
# Максимальное количество неудачных попыток входа, после которых IP будет заблокирован
bantime = 3600
# Время блокировки IP в секундах (3600 секунд = 1 час)
findtime = 600
# Временное окно (в секундах), за которое считаются неудачные попытки (600 секунд = 10 минут)
  • backend = systemd — указывает fail2ban читать логи из systemd journal.
  • journalmatch = _SYSTEMD_UNIT=ssh.service — фильтрует логи по конкретному юниту systemd.
  • maxretry, bantime, findtime — параметры блокировки.

3. Перезапускаем fail2ban

sudo systemctl restart fail2ban

4. Проверяем статус fail2ban и jail

Выполните эти команды по порядку:

  • Проверьте статус службы fail2ban:

    sudo systemctl status fail2ban
    

    (Это покажет, запущена ли служба и нет ли ошибок.)

  • Проверьте список активных jails:

    sudo fail2ban-client status
    

    (Это выведет количество и список jails, например, sshd.)

  • Проверьте детали конкретного jail (sshd):

    sudo fail2ban-client status sshd
    

    (Это покажет статистику: неудачные попытки, заблокированные IP и т.д.)

Если всё в порядке, вы увидите, что jail sshd активен и мониторит логи.


Тестирование

  • Попробуйте несколько неудачных входов по SSH с другого IP (3 и более).
  • Проверьте, что IP заблокирован:
sudo fail2ban-client status sshd
  • Для разблокировки IP:
sudo fail2ban-client set sshd unbanip <IP-адрес>

Итоги

  • Fail2ban успешно настроен для работы с systemd journal.
  • Защита SSH работает автоматически, блокируя IP после заданного числа неудачных попыток.
  • Конфигурация гибкая и легко настраивается.

Рекомендации

  • Используйте SSH-ключи вместо паролей.
  • Запретите вход под root (PermitRootLogin no в /etc/ssh/sshd_config).
  • Регулярно проверяйте логи и статус fail2ban.
  • Настройте email-уведомления в fail2ban для оповещений о блокировках.

 

04 сентября 2025, 20:29    Александр Linux 0    0 0

 

 

 

 



Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.