Как защитить SSH с помощью Fail2Ban: пошаговая инструкция
Полное руководство по настройке Fail2Ban для защиты SSH-сервера от подбора паролей
Введение
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.
Читайте также
Комментарии
Комментарии доступны только зарегистрированным пользователям. Войти
- Пока нет комментариев. Будьте первым.



