Home » Защита SSH с помощью Fail2Ban на Ubuntu 24.04
Защита SSH с помощью Fail2Ban на Ubuntu 24.04

Защита SSH с помощью Fail2Ban на Ubuntu 24.04

В этой статье разберёмся, как защитить SSH на свежей Ubuntu 24.04 с помощью Fail2Ban — инструмента, который автоматически блокирует подозрительные попытки входа. Если ты когда-нибудь смотрел логи своего сервера и видел там десятки (или сотни) попыток подобрать пароль к SSH, то ты знаешь, насколько это раздражает и опасно. Fail2Ban — это не серебряная пуля, но это must-have для любого, кто хочет спать спокойно, не переживая за безопасность своего хоста. Здесь будет всё: как работает Fail2Ban, как его быстро и правильно настроить, реальные примеры, грабли и лайфхаки, а также сравнение с альтернативами. В конце — рекомендации, как это использовать в автоматизации и скриптах. Поехали!

Как работает Fail2Ban: простыми словами, но по делу

Fail2Ban — это такой сторожевой пес для твоего сервера. Он следит за логами (например, /var/log/auth.log), и если кто-то слишком часто ошибается при попытке войти по SSH (или другим сервисам), он автоматически добавляет IP-адрес нарушителя в бан-лист (обычно через iptables или nftables). Через заданное время бан снимается, но если атака продолжается — IP снова улетает в бан.

Вся магия — в фильтрах (регулярки для логов) и действиях (что делать с нарушителем). Fail2Ban гибко настраивается: можно банить на часы, дни, или навсегда, можно отправлять уведомления, запускать свои скрипты, и даже интегрировать с внешними системами.

  • Плюсы: автоматизация, гибкость, простота интеграции, поддержка множества сервисов.
  • Минусы: не защищает от 0-day уязвимостей, не спасает от атак с ботнетов с тысячами IP.

Быстрая и правильная установка Fail2Ban на Ubuntu 24.04

Ubuntu 24.04 уже поставляется с актуальными пакетами Fail2Ban, так что всё делается буквально за пару минут. Вот пошаговый гайд:


sudo apt update
sudo apt install fail2ban

После установки сервис уже работает, но по умолчанию он не блокирует SSH — нужно чуть-чуть настроить.

Базовая настройка для SSH

Создаём локальный конфиг, чтобы не трогать оригинальные файлы (это важно — при обновлениях твои настройки не слетят):


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

Открываем /etc/fail2ban/jail.local в любимом редакторе (например, nano или vim), ищем секцию [sshd] и приводим её к такому виду:


[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 5
bantime = 1h
findtime = 10m

  • maxretry — сколько раз можно ошибиться перед баном (по умолчанию 5).
  • bantime — на сколько банить IP (например, 1 час).
  • findtime — за какой период считать ошибки (например, 10 минут).

Сохраняем, перезапускаем сервис:


sudo systemctl restart fail2ban

Проверяем статус:


sudo fail2ban-client status sshd

Если всё ок, увидишь список забаненных IP (пока, скорее всего, пусто).

Практические советы, схемы и кейсы

Положительные кейсы

Сценарий Результат Рекомендации
Обычный VPS с публичным SSH Fail2Ban блокирует десятки попыток подбора пароля в сутки, нагрузка на sshd падает Используй нестандартный порт SSH + Fail2Ban для максимального эффекта
Сервер с несколькими пользователями Fail2Ban предотвращает перебор паролей, не мешая легитимным пользователям Настрой whitelist для своих IP, чтобы не забанить себя случайно

Отрицательные кейсы

Сценарий Проблема Решение
Много пользователей с одного IP (например, NAT, офис) Один ошибся — забанили всех Увеличить maxretry, добавить IP в ignoreip
Атака с ботнета (тысячи IP) Fail2Ban не справляется, нагрузка на iptables Использовать fail2ban совместно с Cloudflare, GeoIP, или внешними firewall

Схема работы Fail2Ban

  • Fail2Ban следит за логами (например, /var/log/auth.log).
  • Находит подозрительные записи (неудачные попытки входа).
  • Если превышен лимит — добавляет IP в бан через iptables или nftables.
  • Через заданное время бан снимается автоматически.

Полезные команды для работы с Fail2Ban


# Проверить статус всех jail
sudo fail2ban-client status

# Проверить статус конкретного jail (например, sshd)
sudo fail2ban-client status sshd

# Разбанить IP
sudo fail2ban-client set sshd unbanip 1.2.3.4

# Забанить IP вручную
sudo fail2ban-client set sshd banip 1.2.3.4

# Перезапустить fail2ban
sudo systemctl restart fail2ban

# Посмотреть логи fail2ban
sudo journalctl -u fail2ban

Альтернативы и похожие решения

  • DenysHosts — старый, но до сих пор рабочий инструмент, блокирует IP на основе логов, но менее гибкий и не так активно развивается. GitHub
  • SSHGuard — лёгкий и быстрый, написан на C, но менее гибкий, чем Fail2Ban. Официальный сайт
  • CrowdSec — современный, с поддержкой коллективной защиты (sharing ban-листов между пользователями). Официальный сайт
  • UFW (Uncomplicated Firewall) — не альтернатива, а дополнение: можно использовать вместе с Fail2Ban для более жёсткой фильтрации.

Сравнение Fail2Ban с альтернативами

Инструмент Гибкость Лёгкость настройки Поддержка сервисов Совместимость
Fail2Ban Высокая Средняя Много (SSH, Apache, Nginx, Postfix и др.) Linux, Unix
DenysHosts Низкая Высокая Только SSH Linux, Unix
SSHGuard Средняя Высокая SSH, Exim, Sendmail и др. Linux, BSD
CrowdSec Очень высокая Средняя Много + коллективная защита Linux, Windows

Интересные факты и нестандартные сценарии использования

  • Fail2Ban можно использовать не только для SSH, но и для защиты веб-приложений (WordPress, phpMyAdmin, Nextcloud) — достаточно написать свой фильтр.
  • Можно интегрировать Fail2Ban с Telegram-ботом или Slack — получать уведомления о банах в реальном времени.
  • Fail2Ban поддерживает кастомные действия: можно не только банить IP, но и отправлять abuse-репорты, запускать свои скрипты (например, автоматически добавлять IP в Cloudflare Access Rules).
  • Можно использовать Fail2Ban для защиты от DoS-атак на веб-серверы (например, по количеству 404-ошибок или попыток авторизации).
  • В связке с Fail2Ban Community можно обмениваться фильтрами и best practices.

Статистика и эффективность Fail2Ban

  • На среднестатистическом VPS Fail2Ban блокирует от 10 до 100+ IP в сутки (зависит от популярности IP и страны).
  • Снижает нагрузку на sshd и лог-файлы, предотвращает перебор паролей и brute-force атаки.
  • В 90% случаев достаточно для защиты от массовых сканеров и скрипт-кидди.
  • В связке с двухфакторной аутентификацией и ключами — практически непробиваемое решение для SSH.

Автоматизация и скрипты: новые возможности

  • Fail2Ban легко интегрируется с Ansible, SaltStack, Puppet — можно автоматизировать установку и настройку на десятках серверов.
  • Можно писать свои actions: например, при бане IP отправлять его в централизованный blacklist, или автоматически обновлять правила на внешнем firewall.
  • Fail2Ban поддерживает REST API (через fail2rest) — можно строить свои панели мониторинга и управления банами.
  • В связке с cron можно делать регулярные отчёты по банам, статистику атак, и даже строить графики.

Выводы и рекомендации

Fail2Ban — это простой, но мощный инструмент для защиты SSH (и не только) на Ubuntu 24.04. Его легко установить, быстро настроить, и он реально работает — блокирует большинство массовых атак и сканеров. Для максимальной безопасности используй Fail2Ban вместе с ключами SSH, нестандартным портом, и whitelist для своих IP. Если у тебя большой проект — посмотри в сторону CrowdSec или интеграции с внешними firewall. Для автоматизации — используй Ansible или свои скрипты, Fail2Ban отлично вписывается в CI/CD и DevOps-процессы.

Если ты только начинаешь — ставь Fail2Ban на каждый сервер, где есть SSH. Это must-have, как sudo или ufw. Если нужен VPS для тестов или продакшена — заказать VPS. Для серьёзных задач — выделенный сервер. Не забывай: безопасность — это не опция, а необходимость.

Официальная документация Fail2Ban: https://www.fail2ban.org/wiki/index.php/Main_Page


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked