Home » Как защитить SSH с помощью Fail2ban на Ubuntu 24
Как защитить SSH с помощью Fail2ban на Ubuntu 24

Как защитить SSH с помощью Fail2ban на Ubuntu 24

Если вы управляете серверами, то наверняка знаете: SSH-атаки — это не киберугрозы из фильмов, а повседневная реальность. Каждый день боты и злоумышленники пытаются взломать SSH-подключения методом brute-force, перебирая пароли и пытаясь найти слабые места. Fail2ban — это ваш верный телохранитель, который автоматически блокирует подозрительные IP-адреса и защищает сервер от атак. В этой статье мы разберём, как настроить Fail2ban на Ubuntu 24, чтобы ваш SSH был надёжно защищён от назойливых злоумышленников.

Как работает Fail2ban?

Fail2ban работает как умный фильтр, который анализирует лог-файлы в реальном времени. Принцип простой: программа следит за попытками неудачных подключений и, если их становится слишком много с одного IP, временно блокирует этот адрес через iptables или другие firewall-системы.

Основные компоненты Fail2ban:

  • Filters (фильтры) — регулярные выражения для поиска подозрительных записей в логах
  • Actions (действия) — что делать с нарушителем (обычно блокировка через iptables)
  • Jails (тюрьмы) — конфигурации, объединяющие фильтры и действия для конкретных сервисов

Когда кто-то пытается подключиться к SSH с неверными данными, запись попадает в /var/log/auth.log. Fail2ban читает этот файл, считает неудачные попытки и при превышении лимита добавляет правило в iptables для блокировки IP.

Установка и базовая настройка Fail2ban

Начнём с установки. На Ubuntu 24 это делается стандартно через apt:

sudo apt update
sudo apt install fail2ban

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

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

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

sudo systemctl status fail2ban

Теперь создаём конфигурационный файл. Важно: никогда не редактируйте файл jail.conf напрямую — он перезаписывается при обновлениях. Вместо этого создайте jail.local:

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

Настройка SSH-защиты

В файле jail.local найдите секцию [sshd] и настройте её следующим образом:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

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

  • enabled — включает jail для SSH
  • port — порт SSH (по умолчанию 22, можно указать кастомный)
  • filter — использует фильтр sshd
  • logpath — путь к лог-файлу
  • maxretry — количество неудачных попыток до блокировки
  • bantime — время блокировки в секундах (3600 = 1 час)
  • findtime — период времени для подсчёта попыток (600 = 10 минут)
  • ignoreip — IP-адреса, которые никогда не блокируются

Перезапускаем Fail2ban:

sudo systemctl restart fail2ban

Проверка и мониторинг

Проверяем, что jail активен:

sudo fail2ban-client status
sudo fail2ban-client status sshd

Смотрим текущие заблокированные IP:

sudo fail2ban-client get sshd banned

Для мониторинга логов Fail2ban:

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

Продвинутая настройка и кастомизация

Для серверов с высокой нагрузкой или специфичными требованиями можно настроить более гибкие правила:

[sshd-aggressive]
enabled = true
filter = sshd
logpath = /var/log/auth.log
maxretry = 1
bantime = 86400
findtime = 300
action = iptables-multiport[name=sshd, port="ssh", protocol=tcp]
         sendmail-whois[name=sshd, dest=admin@example.com]

Создание кастомного фильтра для более точного обнаружения атак:

sudo nano /etc/fail2ban/filter.d/sshd-custom.conf
[Definition]
failregex = ^.*sshd.*: Failed password for .* from  port.*$
            ^.*sshd.*: Invalid user .* from .*$
            ^.*sshd.*: User .* from  not allowed because not listed in AllowUsers$
ignoreregex =

Практические примеры и кейсы

Сценарий Настройка Плюсы Минусы
Базовая защита maxretry=5, bantime=3600 Не блокирует случайные ошибки Может пропустить медленные атаки
Агрессивная защита maxretry=1, bantime=86400 Максимальная безопасность Может заблокировать легитимных пользователей
Сбалансированная maxretry=3, bantime=7200 Оптимальный баланс Требует мониторинга

Интеграция с другими инструментами

Fail2ban отлично работает в связке с другими инструментами безопасности:

С UFW (Uncomplicated Firewall):

sudo ufw enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh

С Logwatch для отчётности:

sudo apt install logwatch
sudo nano /etc/logwatch/conf/logwatch.conf

С Telegram для уведомлений:

sudo nano /etc/fail2ban/action.d/telegram.conf
[Definition]
actionstart = 
actionstop = 
actioncheck = 
actionban = curl -s -X POST https://api.telegram.org/bot/sendMessage -d chat_id= -d text="Fail2ban:  has been banned on "
actionunban = 

Альтернативные решения

Хотя Fail2ban — популярный выбор, существуют и другие решения:

  • DenyHosts — специализируется только на SSH, проще в настройке
  • SSHGuard — легковесная альтернатива с поддержкой множества firewall
  • CrowdSec — современное решение с коллективной базой угроз
  • ConfigServer Security & Firewall (CSF) — комплексное решение для cPanel серверов

Автоматизация и скрипты

Для автоматизации управления можно создать простые скрипты:

#!/bin/bash
# check_fail2ban.sh
echo "=== Fail2ban Status ==="
fail2ban-client status

echo "=== SSH Jail Status ==="
fail2ban-client status sshd

echo "=== Recently Banned IPs ==="
fail2ban-client get sshd banned

echo "=== Fail2ban Log (last 10 lines) ==="
tail -10 /var/log/fail2ban.log

Скрипт для массового разблокирования IP:

#!/bin/bash
# unban_all.sh
for ip in $(fail2ban-client get sshd banned); do
    fail2ban-client set sshd unbanip $ip
    echo "Unbanned: $ip"
done

Мониторинг и оптимизация производительности

Для мониторинга эффективности Fail2ban используйте:

sudo fail2ban-client get sshd actions
sudo fail2ban-client get sshd currently-banned
sudo fail2ban-client get sshd total-banned

Интересный факт: Fail2ban может интегрироваться с базами данных для хранения статистики блокировок. Это особенно полезно для серверов с высокой нагрузкой.

Отладка и решение проблем

Если Fail2ban не работает, проверьте:

sudo fail2ban-client -d  # debug mode
sudo journalctl -u fail2ban -f  # systemd logs

Типичные проблемы:

  • Неправильный путь к лог-файлу
  • Отсутствие прав на чтение логов
  • Конфликты с другими firewall-правилами
  • Неправильные регулярные выражения в фильтрах

Заключение и рекомендации

Fail2ban — это must-have инструмент для любого сервера с SSH-доступом. Он эффективно блокирует 99% автоматических атак и значительно повышает безопасность вашего сервера. Рекомендую:

  • Начинать с умеренных настроек (maxretry=3, bantime=3600)
  • Регулярно мониторить логи и статистику
  • Настроить уведомления о блокировках
  • Использовать вместе с другими мерами безопасности (ключи SSH, смена портов)
  • Периодически обновлять фильтры и правила

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

Помните: безопасность — это не одноразовая настройка, а постоянный процесс. Fail2ban — отличный инструмент, но он эффективен только в комплексе с другими мерами защиты.


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

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

Leave a reply

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