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

Как защитить SSH с помощью Fail2ban: пошаговое руководство

Настройка Fail2ban для блокировки подозрительных IP-адресов и защиты SSH

09 745 просмотров5 мин
0
Поделиться:TelegramVK

Введение

SSH — основной способ удалённого управления сервером. Однако открытый порт 22 постоянно сканируется ботами, которые пытаются подобрать пароль методом перебора. Даже сложный пароль не гарантирует полной безопасности, а большое количество неудачных попыток входа забивает логи и создаёт нагрузку. Решение — использовать Fail2ban: он анализирует логи, находит повторяющиеся неудачные попытки входа и временно блокирует IP-адреса через правила файрвола.

В этом руководстве мы рассмотрим установку и настройку Fail2ban для защиты SSH на сервере с Linux (на примере Ubuntu/Debian, но принципы применимы и к другим дистрибутивам).

Требования

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

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

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

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

  • Желательно, чтобы на сервере уже был настроен файрвол (iptables, nftables, firewalld или ufw). Fail2ban умеет с ними работать.

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

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

Для Debian/Ubuntu:

sudo apt update
sudo apt install fail2ban

Для CentOS/RHEL/AlmaLinux/Rocky:

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.local — файл для пользовательских настроек. Именно здесь мы будем вносить изменения.

Если файла jail.local нет, создайте его копированием из jail.conf:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Также в директории /etc/fail2ban/jail.d/ можно размещать отдельные файлы для включения или переопределения настроек. Это удобно для управления конфигурацией.

Шаг 3: Базовая настройка jail.local

Откройте файл jail.local в текстовом редакторе (например, nano):

sudo nano /etc/fail2ban/jail.local

В секции [DEFAULT] можно задать глобальные параметры, которые будут применяться ко всем «тюрьмам» (jail), если не переопределены. Обратите внимание на следующие параметры:

  • ignoreip — список IP-адресов или подсетей, которые никогда не блокируются. Обязательно добавьте сюда свой IP, чтобы случайно не заблокировать себя. Пример:

  ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.5
  • bantime — время блокировки в секундах (или с суффиксами m, h, d). По умолчанию 10 минут. Рекомендуется увеличить до 1 часа или более: bantime = 1h.

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

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

  • banaction — действие для блокировки. Обычно iptables-multiport или nftables-multiport. Если используете firewalld, укажите firewallcmd-ipset.

  • backend — способ чтения логов. auto обычно работает корректно, но можно указать systemd, если логи ведутся через journald.

Пример секции [DEFAULT]:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.5
bantime = 1h
findtime = 10m
maxretry = 5
banaction = iptables-multiport
backend = auto

Шаг 4: Настройка защиты SSH

В том же файле jail.local найдите секцию [sshd] (или создайте её). Убедитесь, что она включена (enabled = true). Пример:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 2h

Для систем на базе RHEL/CentOS путь к логу может быть /var/log/secure. Если используется systemd-journald, можно не указывать logpath, а задать backend = systemd.

Параметр port можно указать явно (например, port = 22), если SSH работает на нестандартном порту, укажите его.

Шаг 5: Проверка конфигурации и перезапуск

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

sudo fail2ban-client -t

Если ошибок нет, перезапустите службу:

sudo systemctl restart fail2ban

Убедитесь, что тюрьма sshd активна:

sudo fail2ban-client status sshd

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

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

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

sudo fail2ban-client status sshd

Если вы случайно заблокировали себя, можно разблокировать IP:

sudo fail2ban-client set sshd unbanip <IP-адрес>

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

Fail2ban может отправлять уведомления о блокировках на email. Для этого в jail.local в секции [DEFAULT] укажите:

destemail = your@email.com
sender = fail2ban@your-server.com
mta = sendmail

Убедитесь, что на сервере настроен MTA (sendmail, postfix и т.п.).

Также можно использовать действие action_ для выполнения скриптов при бане. Например, для отправки в Telegram или Slack.

Шаг 8: Работа с несколькими тюрьмами

Fail2ban позволяет защищать не только SSH, но и другие сервисы: веб-серверы (Apache, Nginx), почтовые серверы, FTP и т.д. Для каждого сервиса создаётся отдельная секция в jail.local. Например, для защиты Nginx от брутфорса на странице входа WordPress можно использовать фильтр nginx-http-auth или wordpress. Включайте только те тюрьмы, которые вам нужны, чтобы не создавать лишнюю нагрузку.

Шаг 9: Обновление и обслуживание

Регулярно обновляйте Fail2ban вместе с системой, чтобы получать исправления безопасности и новые фильтры. Следите за логами Fail2ban (/var/log/fail2ban.log), чтобы вовремя замечать проблемы. Периодически проверяйте список заблокированных IP и при необходимости корректируйте правила.

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

1. Редактирование jail.conf вместо jail.local — при обновлении пакета ваши настройки будут потеряны. Всегда используйте jail.local или файлы в jail.d. 2. Забыли добавить свой IP в ignoreip — можно случайно заблокировать себя и потерять доступ к серверу. 3. Неверный путь к логам — если указать неправильный logpath, Fail2ban не сможет анализировать события. Проверьте, куда пишутся логи SSH в вашей системе. 4. Конфликт с другим файрволом — если у вас уже настроен ufw или firewalld, убедитесь, что Fail2ban использует совместимый banaction. 5. Слишком мягкие или слишком строгие правила — maxretry=1 может привести к блокировке при случайной опечатке, а maxretry=10 делает защиту менее эффективной. Оптимально 3-5. 6. Отсутствие тестирования — после настройки обязательно проверьте, что блокировка работает, и что вы не заблокированы.

FAQ

Вопрос: Можно ли использовать Fail2ban без файрвола? Ответ: Fail2ban требует наличия файрвола (iptables, nftables, firewalld) для применения блокировок. Если файрвол не установлен, Fail2ban не сможет блокировать IP.

Вопрос: Заблокирует ли Fail2ban навсегда? Ответ: По умолчанию блокировка временная (bantime). Можно увеличить время или настроить постоянную блокировку (bantime = -1), но это может быть опасно, если IP динамический.

Вопрос: Что делать, если я заблокировал себя? Ответ: Если у вас есть доступ к серверу через другой IP или консоль, выполните fail2ban-client set sshd unbanip <ваш IP>. Либо перезагрузите сервер — блокировки сбрасываются.

Вопрос: Работает ли Fail2ban с нестандартным портом SSH? Ответ: Да, укажите этот порт в параметре port в секции [sshd].

Вопрос: Как посмотреть, какие IP заблокированы? Ответ: Команда sudo fail2ban-client status sshd покажет список заблокированных IP.

Вопрос: Нужно ли настраивать ротацию логов для Fail2ban? Ответ: Обычно logrotate уже настроен для системных логов. Для логов Fail2ban также можно настроить ротацию, но по умолчанию он пишет в /var/log/fail2ban.log, который ротируется стандартными средствами.

Итог

Fail2ban — мощный и гибкий инструмент для защиты SSH и других сервисов от брутфорс-атак. Правильная настройка позволяет автоматически блокировать злоумышленников, снижая риск взлома и разгружая логи. Не забывайте добавлять свой IP в ignoreip, тестировать конфигурацию и регулярно обновлять систему. В сочетании с другими мерами (отключение входа по паролю, использование ключей SSH, смена порта) Fail2ban значительно повышает безопасность сервера.

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

Комментарии

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

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