sadrix logoSadriX
Минцифры готовит обязательную регистрацию IMEI смартфонов, купленных за границей
Гайды

Как защитить SSH с помощью Fail2Ban: пошаговая инструкция

Полное руководство по настройке Fail2Ban для защиты SSH-сервера от подбора паролей

02 953 просмотров4 мин
0
Поделиться:TelegramVK

Введение

SSH (Secure Shell) — стандартный протокол для удалённого управления Linux-серверами. Однако открытый SSH-порт (по умолчанию 22) постоянно подвергается атакам перебора паролей (brute-force). Злоумышленники используют ботов, которые перебирают логины и пароли, пытаясь получить доступ к серверу. Fail2Ban — это программа, которая анализирует логи и временно блокирует IP-адреса, с которых совершаются множественные неудачные попытки входа. В этом руководстве мы расскажем, как установить и настроить Fail2Ban для защиты SSH на типичном Linux-сервере (на примере Ubuntu/Debian, но принципы применимы и к другим дистрибутивам).

Требования

  • Сервер под управлением Linux (Ubuntu 20.04/22.04/24.04, Debian 11/12, CentOS 7/8, AlmaLinux, Rocky Linux и др.).

  • Доступ к серверу по SSH с правами sudo или root.

  • Базовые навыки работы с командной строкой.

  • Установленный SSH-сервер (обычно openssh-server).

  • Открытый доступ к репозиториям пакетов (для установки fail2ban).

Шаг 1: Установка Fail2Ban

В большинстве дистрибутивов Fail2Ban есть в официальных репозиториях. Установите его командой:

  • Для Ubuntu/Debian:

  sudo apt update
  sudo apt install fail2ban
  • Для CentOS/RHEL/AlmaLinux/Rocky Linux (с подключённым EPEL):

  sudo dnf install epel-release
  sudo dnf install fail2ban
  • Для Fedora:

  sudo dnf install fail2ban

После установки сервис автоматически запустится. Проверьте статус:

sudo systemctl status fail2ban

Шаг 2: Знакомство с конфигурацией Fail2Ban

Основные файлы конфигурации:

  • /etc/fail2ban/jail.conf — главный конфигурационный файл (не рекомендуется редактировать напрямую, так как он может быть перезаписан при обновлении).

  • /etc/fail2ban/jail.d/ — директория для пользовательских настроек (файлы с расширением .conf или .local).

  • /etc/fail2ban/jail.local — файл для локальных переопределений (если его нет, создайте).

Лучшая практика — создавать собственные файлы в /etc/fail2ban/jail.d/ или использовать jail.local. Мы будем использовать jail.local.

Шаг 3: Создание файла jail.local

Создайте файл /etc/fail2ban/jail.local с помощью текстового редактора, например nano:

sudo nano /etc/fail2ban/jail.local

Вставьте базовые настройки:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Разберём параметры:

  • bantime — время блокировки (в секундах или с суффиксами: m — минуты, h — часы, d — дни). 1h = 1 час.

  • findtime — временное окно, в течение которого подсчитываются неудачные попытки (10 минут).

  • maxretry — количество неудачных попыток до блокировки (5).

  • [sshd] — секция для SSH.

  • enabled = true — включает защиту SSH.

  • port = ssh — порт (можно указать номер, если SSH работает не на 22).

  • logpath — путь к логу SSH (подставляется автоматически из переменной %(sshd_log)s).

  • backend — метод чтения лога (автоопределение).

Сохраните файл и выйдите.

Шаг 4: Настройка параметров блокировки

Вы можете изменить поведение Fail2Ban, отредактировав секцию [DEFAULT] в jail.local. Например, чтобы блокировать навсегда (или очень долго), установите bantime = -1 (бессрочно) или bantime = 1d. Также можно указать ignoreip — список IP-адресов, которые никогда не блокируются (например, ваш домашний IP). Пример:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 203.0.113.5
bantime = 1d
findtime = 10m
maxretry = 3

Здесь 203.0.113.5 — пример вашего доверенного IP.

Шаг 5: Перезапуск Fail2Ban и проверка статуса

После изменения конфигурации перезапустите сервис:

sudo systemctl restart fail2ban

Проверьте, что SSH-тюрьма (jail) активна:

sudo fail2ban-client status

Вы должны увидеть список активных тюрем, включая sshd. Чтобы посмотреть подробности по SSH:

sudo fail2ban-client status sshd

В выводе будут показаны текущие заблокированные IP, количество неудачных попыток и т.д.

Шаг 6: Тестирование работы Fail2Ban

Чтобы убедиться, что защита работает, можно с другого компьютера (или с того же, но с другого IP) выполнить несколько неудачных попыток входа по SSH. Например, используйте неверный пароль 5 раз. После этого проверьте статус:

sudo fail2ban-client status sshd

В списке заблокированных должен появиться ваш IP. Если вы тестируете с того же сервера, не забудьте добавить свой IP в ignoreip, иначе можно заблокировать себя.

Также можно посмотреть логи Fail2Ban:

sudo tail -f /var/log/fail2ban.log

Шаг 7: Настройка уведомлений (опционально)

Fail2Ban может отправлять email-уведомления о блокировках. Для этого установите почтовый сервер (например, postfix) и настройте параметры в jail.local:

[DEFAULT]
destemail = your@email.com
sender = fail2ban@example.com
mta = sendmail

Не забудьте перезапустить сервис. Теперь при блокировке вы будете получать письма.

Шаг 8: Добавление других сервисов (по желанию)

Fail2Ban может защищать не только SSH, но и веб-серверы (Apache, Nginx), почтовые сервисы и др. Например, для защиты Nginx от брутфорса паролей можно включить тюрьму nginx-http-auth. Для этого добавьте в jail.local:

[nginx-http-auth]
enabled = true

Но это выходит за рамки данной статьи.

Типичные ошибки

1. Редактирование jail.conf вместо jail.local — при обновлении пакета изменения могут быть потеряны. Всегда используйте jail.local или файлы в jail.d. 2. Забыли перезапустить сервис — после изменения конфигурации необходимо выполнить sudo systemctl restart fail2ban. 3. Неправильный путь к логу SSH — если SSH пишет лог в нестандартное место, укажите правильный logpath в секции [sshd]. 4. Блокировка собственного IP — добавьте свой IP в ignoreip, чтобы не потерять доступ к серверу. 5. Слишком мягкие настройки — стандартные maxretry=5 и bantime=10m могут быть недостаточны; увеличьте время блокировки и уменьшите количество попыток. 6. Отсутствие fail2ban в автозагрузке — проверьте, что сервис включён: sudo systemctl enable fail2ban.

FAQ

Вопрос: Будет ли Fail2Ban работать, если SSH работает на нестандартном порту? Ответ: Да, укажите этот порт в параметре port секции [sshd], например port = 2222.

Вопрос: Как разблокировать IP-адрес вручную? Ответ: Выполните sudo fail2ban-client set sshd unbanip 192.0.2.1, где 192.0.2.1 — заблокированный IP.

Вопрос: Можно ли использовать Fail2Ban с ключами SSH вместо паролей? Ответ: Да, но при использовании ключей атаки перебором паролей менее эффективны. Тем не менее, Fail2Ban полезен для блокировки других подозрительных действий.

Вопрос: Как изменить время блокировки для конкретного сервиса? Ответ: В секции [sshd] можно переопределить bantime, findtime, maxretry, указав их после enabled = true.

Вопрос: Где хранятся баны? Ответ: В файле /var/lib/fail2ban/fail2ban.sqlite3 (база данных SQLite). Не редактируйте его вручную.

Итог

Fail2Ban — простой и эффективный инструмент для защиты SSH от брутфорс-атак. Установка и настройка занимают несколько минут, а результат — снижение нагрузки на сервер и повышение безопасности. Не забывайте регулярно обновлять Fail2Ban и проверять логи. Комбинируйте Fail2Ban с другими мерами безопасности: использование ключей SSH, смена стандартного порта, ограничение доступа по IP с помощью firewall.

Читайте также

Комментарии

Комментарии доступны только зарегистрированным пользователям. Войти

  • Пока нет комментариев. Будьте первым.