Давайте будем честными: как только вы покупаете сервер, устанавливаете систему и привязываете домен к публичному IP, ваша машина мгновенно попадает под прицел десятков тысяч автоматизированных скриптов со всего мира.
В 2026 году простого изменения порта SSH или установки визуальной панели управления уже недостаточно. Если вы заглянете в /var/log/auth.log, то увидите бесконечные попытки подбора пароля. Даже если вы отключили вход по паролю, эти вредоносные запросы все равно нагружают ваш процессор и забивают сетевые соединения.
Чтобы ваш сервер не превратился в часть ботнета, мы переходим к жестким мерам защиты: детальной установке и настройке Fail2Ban.
Эта стратегия не только блокирует брутфорс SSH, но и глубоко интегрируется с Nginx для защиты от CC-атак и взлома WordPress. Мы разберем конкретные параметры, технические данные и готовые конфигурации, которые помогут вам навсегда забыть о проблеме агрессивного сканирования.
Логика работы Fail2Ban
В открытой сети вредоносное сканирование обычно делится на два типа:
- Сканирование портов и брутфорс SSH: Роботы 24/7 перебирают порты (например, 22), используя словари слабых паролей.
- Веб-уязвимости и CC-сканирование: Атаки на конкретные CMS (например, WordPress), поиск
wp-login.phpили создание высокой частоты запросов для истощения базы данных.
Fail2Ban работает элегантно: это система предотвращения вторжений (IPS) на основе логов. Она в реальном времени отслеживает файлы журналов (SSH, Nginx, системные логи). Если какой-либо IP-адрес совершает подозрительные действия более определенного количества раз (maxretry) за заданное время (findtime), Fail2Ban дает команду системному брандмауэру (iptables, ufw или firewalld) заблокировать этот IP на определенный срок (bantime).
Быстрая установка и логика конфигурации
Независимо от того, используете ли вы 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] задайте базовые правила:

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 же идеально подходит для точечной блокировки прикладных атак.
Друг, внедрив эту систему на свой сервер, ты сделаешь его архитектуру безопасности на порядок выше, чем у большинства ‘голых’ проектов в сети.