Как защитить VPS от злонамеренного сканирования? Полное руководство по установке и настройке Fail2Ban

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

В 2026 году простого изменения порта SSH или установки визуальной панели управления уже недостаточно. Если вы заглянете в /var/log/auth.log, то увидите бесконечные попытки подбора пароля. Даже если вы отключили вход по паролю, эти вредоносные запросы все равно нагружают ваш процессор и забивают сетевые соединения.

Чтобы ваш сервер не превратился в часть ботнета, мы переходим к жестким мерам защиты: детальной установке и настройке Fail2Ban.

Эта стратегия не только блокирует брутфорс SSH, но и глубоко интегрируется с Nginx для защиты от CC-атак и взлома WordPress. Мы разберем конкретные параметры, технические данные и готовые конфигурации, которые помогут вам навсегда забыть о проблеме агрессивного сканирования.

Логика работы Fail2Ban

В открытой сети вредоносное сканирование обычно делится на два типа:

  1. Сканирование портов и брутфорс SSH: Роботы 24/7 перебирают порты (например, 22), используя словари слабых паролей.
  2. Веб-уязвимости и CC-сканирование: Атаки на конкретные CMS (например, WordPress), поиск wp-login.php или создание высокой частоты запросов для истощения базы данных.

Fail2Ban работает элегантно: это система предотвращения вторжений (IPS) на основе логов. Она в реальном времени отслеживает файлы журналов (SSH, Nginx, системные логи). Если какой-либо IP-адрес совершает подозрительные действия более определенного количества раз (maxretry) за заданное время (findtime), Fail2Ban дает команду системному брандмауэру (iptables, ufw или firewalld) заблокировать этот IP на определенный срок (bantime).

🔥 Основные параметры защиты Fail2Ban
Техданные
Параметр Описание Ед. изм. Рекомендуемое значение Эффект
findtime Окно подсчета Мин (m) / Сек (s) 10m Интервал оценки атак
maxretry Лимит ошибок Число 3 – 5 Бан после N попыток
bantime Срок бана Час (h) / День (d) 24h или 48h Время в ‘черном списке’

Быстрая установка и логика конфигурации

Независимо от того, используете ли вы Debian или Ubuntu, процесс установки максимально прост.

1. Установка в одно действие

sudo apt update
sudo apt install fail2ban -y

2. Правило работы с конфигами (не совершайте ошибок)

После установки конфигурация находится в /etc/fail2ban/. Ошибка новичков: никогда не редактируйте напрямую файл jail.conf.

Правильная логика: Система сначала загружает общие настройки из jail.conf, а затем считывает jail.local, который перекрывает параметры. При обновлении софта jail.conf будет перезаписан, а ваш jail.local останется нетронутым.

Шаг первый — создание локальной копии:

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

3. Базовая политика безопасности

Откройте /etc/fail2ban/jail.local и в секции [DEFAULT] задайте базовые правила:

Базовая настройка конфигурации Fail2Ban
  • ignoreip = 127.0.0.1/8 ::1 ВАШ_IP (Белый список, чтобы не забанить самого себя).
  • bantime = 24h (Время наказания).
  • findtime = 10m (Окно анализа).
  • maxretry = 3 (Допустимое число ошибок).

Практика 1: Ультимативная защита SSH

Многие думают: ‘Раз я использую ключи вместо паролей, Fail2Ban мне не нужен’. Это опасное заблуждение. Боты все равно будут долбить ваш сервер TCP-запросами, засоряя логи и нагружая SSH-демон обработкой рукопожатий.

Лучшая связка: Изменение порта SSH + Отключение root-пароля + Авторизация по ключам + Fail2Ban. Это снизит нагрузку на ресурсы сервера до минимума.

В jail.local активируйте модуль [sshd]:

[sshd]
enabled = true
port    = 2222  # Укажите ваш порт, если вы его меняли
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3

Практика 2: Защита WordPress

Для борьбы с брутфорсом wp-login.php современные версии Fail2Ban уже имеют предустановленные фильтры. Вам не нужно писать регулярные выражения с нуля.

Просто добавьте в конец jail.local:

[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 10m
bantime = 24h

Практика 3: Защита Nginx от CC-атак и ботов

CC-атаки имитируют поведение реальных пользователей для перегрузки PHP и базы данных. В связке с модулем Nginx limit_req, Fail2Ban работает идеально.

1. Блокировка частотных запросов

[nginx-limit-req]
enabled = true
port    = http,https
filter  = nginx-limit-req
logpath = /var/log/nginx/error.log
findtime = 1m
maxretry = 10
bantime = 24h

2. Блокировка сканеров уязвимостей (404 ошибки)

Хакеры часто ищут файлы типа .env или backup.zip. Это генерирует 404 ошибки. Включаем защиту:

[nginx-botsearch]
enabled = true
port     = http,https
filter   = nginx-botsearch
logpath  = /var/log/nginx/access.log
maxretry = 3

После настройки выполните sudo systemctl restart fail2ban. Проверить статус защиты можно командой: sudo fail2ban-client status nginx-limit-req.

💡 Советы эксперта по безопасности:

  • Осторожно с вечным баном (bantime = -1): Не стоит устанавливать бесконечную блокировку. Это сильно раздувает цепочки iptables, что может усложнить диагностику. Бана на 24-48 часов вполне достаточно, чтобы боты сочли атаку на ваш IP слишком дорогой и бесполезной.
  • Понимайте уровни защиты: Fail2Ban работает на уровне приложений. Если вы столкнетесь с массивной DDoS-атакой мощностью в сотни Гбит/с, Fail2Ban не спасет — сетевой канал будет просто забит. Для таких случаев выбирайте дата-центры с базовой DDoS-защитой на уровне сети и качественными каналами связи. Fail2Ban же идеально подходит для точечной блокировки прикладных атак.

Друг, внедрив эту систему на свой сервер, ты сделаешь его архитектуру безопасности на порядок выше, чем у большинства ‘голых’ проектов в сети.

Конец статьи
 0
Комментарии(Комментариев нет)