Найти в Дзене

«Защита сервера от DDoS: простые методы для небольших проектов».

Оглавление

Разберём действенные и несложные в реализации способы защиты сервера от DDoS‑атак — без дорогих решений и сложной настройки.

Шаг 1. Мониторинг и раннее обнаружение

Что отслеживать:

  • загрузку CPU/RAM (резкий рост);
  • сетевой трафик (внезапное увеличение);
  • количество одновременных подключений;
  • ошибки 5xx в логах веб‑сервера.

Инструменты:

  • htop — нагрузка системы;
  • iftop или nload — сетевой трафик в реальном времени;
  • netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr — подсчёт подключений по IP;
  • логи веб‑сервера (tail -f /var/log/nginx/access.log).

Шаг 2. Настройка брандмауэра (iptables)

Базовые правила для Linux:

  1. Ограничение SYN‑запросов (защита от SYN‑флуда):

bash

iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

  1. Ограничение подключений с одного IP:

bash

iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j REJECT

  1. Блокировка подозрительных IP (временная мера):

bash

iptables -A INPUT -s 192.168.1.100 -j DROP

  1. Ограничение ICMP‑запросов (защита от ping‑флуда):

bash

iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

Сохранение правил:

bash

iptables-save > /etc/iptables/rules.v4

Шаг 3. Настройка веб‑сервера (Nginx)

Добавьте в конфигурацию Nginx (/etc/nginx/nginx.conf) блоки защиты:

nginx

http {
# Ограничение запросов: 10 запросов в секунду с IP
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

# Ограничение соединений: максимум 5 соединений с IP
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
location / {
limit_req zone=one burst=20; # всплески до 20 запросов
limit_conn addr 5; # максимум 5 соединений
}
}
}

Перезапуск Nginx:

bash

systemctl reload nginx

Шаг 4. Использование Fail2Ban

Установка:

bash

apt install fail2ban

Настройка:

  1. Создайте конфиг: cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local.
  2. Отредактируйте jail.local:

ini

[nginx-limit-req]
enabled = true
filter = nginx-limit-req
action = iptables-multiport[name=NoLimitReq, port="http,https", protocol=tcp]
logpath = /var/log/nginx/error.log
findtime = 600
bantime = 3600
maxretry = 10

  1. Перезапуск: systemctl restart fail2ban.

Как работает: Fail2Ban анализирует логи и автоматически блокирует IP с подозрительной активностью (много ошибок 429, 5xx).

Шаг 5. Оптимизация сервера

Для веб‑серверов:

  • включите кэширование (Nginx, Varnish);
  • используйте Gzip‑сжатие;
  • настройте HTTP/2 или HTTP/3 (QUIC).

Общие рекомендации:

  • отключите неиспользуемые службы (FTP, Telnet);
  • смените стандартные порты (например, SSH с 22 на 2222);
  • ограничьте доступ к админ‑панелям по IP.

Шаг 6. Облачные сервисы защиты (бюджетные варианты)

Для небольших проектов подойдут бесплатные тарифы:

  • Cloudflare — защита от HTTP‑флуда, DNS‑атак;
  • Google Cloud Armor — фильтрация трафика для Google Cloud;
  • AWS Shield (Standard) — базовая защита для AWS.

Плюсы: не требуют сложной настройки, фильтруют трафик до вашего сервера.

Шаг 7. Резервное копирование и план реагирования

Действия при атаке:

  1. Зафиксируйте время начала и тип трафика (логи, iftop).
  2. Временно ограничьте доступ по IP (белый список для админов).
  3. Усильте лимиты в Nginx/Fail2Ban.
  4. Сообщите хостеру — у многих есть встроенная защита.
  5. После атаки проанализируйте логи для улучшения правил.

Резервное копирование:

  • настройте автоматическое копирование данных (cron + rsync);
  • храните бэкапы на отдельном сервере или в облаке.

Чек‑лист быстрой защиты

  1. Установите и настройте fail2ban.
  2. Добавьте лимиты в Nginx (limit_req, limit_conn).
  3. Настройте iptables для ограничения SYN/ICMP.
  4. Подключите Cloudflare (бесплатный тариф).
  5. Настройте мониторинг трафика (iftop, nload).
  6. Проверьте логи на подозрительную активность.
  7. Протестируйте восстановление из бэкапа.

Устранение распространённых проблем

  • «Сервер всё равно падает под нагрузкой»:
    увеличьте лимиты в Nginx постепенно;
    проверьте, не использует ли ботнет легитимные IP (Googlebot и т. д.).
  • «Блокируются легитимные пользователи»:
    добавьте их IP в белый список в fail2ban;
    настройте burst в Nginx для всплесков трафика.
  • «Не хватает ресурсов для обработки правил»:
    используйте облачные сервисы (Cloudflare) вместо локальных фильтров;
    оптимизируйте iptables (удалите неиспользуемые правила).
  • «Атака идёт через UDP»:
    закройте неиспользуемые UDP‑порты в iptables:bashiptables -A INPUT -p udp --dport 53 -j DROP # если не используете DNS

Рекомендации по профилактике

  • Регулярно обновляйте ПО (Nginx, ОС, приложения).
  • Ограничьте доступ к админ‑панелям (по IP или через VPN).
  • Используйте HTTPS — шифрование усложняет спуфинг.
  • Анализируйте логи еженедельно (ищите аномалии).
  • Тестируйте защиту — имитируйте нагрузку через ab или siege:

bash

ab -n 1000 -c 10 http://ваш-сайт.ru/

  • Информируйте пользователей — создайте страницу «Технический перерыв» на случай атаки.

Важные нюансы

  • Не блокируйте IP без анализа — могут пострадать легитимные клиенты.
  • Начинайте с мягких лимитов (например, 10 запросов/сек вместо 1).
  • Комбинируйте методы — Fail2Ban + Nginx + Cloudflare надёжнее одного решения.
  • Автоматизируйте мониторинг — настройте оповещения в Telegram/email при превышении нагрузки.

Эти методы помогут отразить большинство атак уровня L3/L4 (SYN‑флуд, UDP‑флуд) и L7 (HTTP‑флуд). Для масштабных атак (10+ Гбит/с) потребуется профессиональная защита, но для небольших проектов этого достаточно.

Если хотите, могу подробнее разобрать какой‑то из шагов или помочь адаптировать настройки под ваш сервер!