Все системы в норме · Средняя загрузка нод: 23% · Потери пакетов: 0,41 мс Статус сети →
Сеть · 10 минут · обновлено 27.02.2026

Что делать, когда идёт атака

Базовая очистка L3/L4 работает всегда и включается автоматически при 3 Гбит/с или 400 000 пакетов в секунду на адрес — большую часть объёмных атак вы просто не заметите. Проблемы начинаются, когда атака идёт на уровне приложения: трафика мало, а сервер лежит.

1. Сначала убедитесь, что это атака

Половина обращений «нас ддосят» заканчивается находкой в собственном коде: неудачная миграция, забытый цикл, поисковый робот на тяжёлой странице без кеша, собственный крон, запущенный в двадцать потоков.

uptime                                    # средняя нагрузка
ss -s                                     # сводка по соединениям
ss -tn state established | wc -l          # сколько установленных
ss -tn state syn-recv | wc -l             # полуоткрытые — признак SYN-флуда
vnstat -tr 10                             # реальная скорость на интерфейсе

Много syn-recv при небольшом числе established — похоже на SYN-флуд. Много established с одного диапазона адресов — прикладная атака. Нагрузка высокая, а соединений мало — ищите проблему у себя.

2. Посмотрите, кто именно приходит

# топ адресов по числу соединений
ss -tn state established | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20

# топ адресов в логе nginx за последние 10 000 запросов
tail -10000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20

# какие страницы запрашивают
tail -10000 /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20

Если 90 % запросов идёт на одну и ту же страницу поиска или на /wp-login.php — картина ясна.

3. Быстрые меры на своей стороне

Ограничение частоты в nginx

limit_req_zone $binary_remote_addr zone=perip:16m rate=8r/s;
limit_conn_zone $binary_remote_addr zone=conn:16m;

server {
  limit_req  zone=perip burst=24 nodelay;
  limit_conn conn 24;
  ...
}

Восемь запросов в секунду с адреса достаточно для живого человека и мало для скрипта. burst сглаживает всплески при загрузке страницы со множеством файлов.

Отсечение по признакам

if ($http_user_agent ~* "(curl|python-requests|scrapy)") { return 444; }

444 — закрыть соединение без ответа. Не тратим ресурсы на генерацию страницы ошибки.

Блокировка подсети в nftables

nft add rule inet filter input ip saddr 203.0.113.0/24 drop

Кеш перед приложением

Самая эффективная мера при прикладной атаке. Если страница отдаётся из кеша, ей всё равно, сколько запросов пришло:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=st:64m inactive=10m max_size=2g;
proxy_cache st;
proxy_cache_valid 200 60s;
proxy_cache_use_stale error timeout updating;

4. Что делаем мы

При превышении порогов трафик на ваш адрес автоматически уводится через скрубберы. Вы этого не увидите: задержка растёт на доли миллисекунды, легитимные соединения не рвутся. Ёмкость очистки — 1,5 Тбит/с.

Отражённые атаки видны в панели в разделе метрик: количество событий за 30 дней, пиковая полоса, тип. Если атака идёт волнами и профиль по умолчанию срабатывает поздно — напишите, мы понизим порог именно для вашего адреса.

5. Когда включать L7-фильтр

Опция за 612 ₽ в месяц имеет смысл, если:

  • трафика немного (сотни мегабит), но сервер задыхается — значит, атака прикладная, и L3/L4 тут бессилен;
  • запросы выглядят как обычные HTTP-запросы браузера и приходят с тысяч разных адресов;
  • ограничения в nginx уже настроены, но отсекают и живых пользователей.

Фильтр включается на уровне сети: проверка JavaScript-челленджем, разбор поведения, WAF-правила. Включение занимает 10–15 минут после обращения в тикет, отключение — мгновенно.

6. Что писать в тикет

Чем конкретнее обращение, тем быстрее разбор. Приложите:

  • IP-адрес сервера и точное время начала проблемы с часовым поясом;
  • вывод ss -s и uptime;
  • двадцать строк топа адресов из раздела 2;
  • что уже сделали сами;
  • приоритет: если сервер недоступен — «Критический», медиана ответа по нему шесть минут.

7. Чего делать не стоит

  • Перезагружать сервер по кругу. Атака не прекратится, а вы потеряете возможность посмотреть, что происходит.
  • Блокировать целые страны наугад. Отсечёте живых пользователей, а ботнет распределён и по вашей стране тоже.
  • Отключать ICMP полностью. Сломаете определение MTU и получите вторую проблему поверх первой.
  • Менять IP при первых признаках. Смена адреса помогает только при точечной атаке на конкретный IP; при атаке на домен новый адрес найдут через минуту.

Профилактика

  • Кеширование перед приложением — включите заранее, а не в момент атаки.
  • Ограничения частоты в nginx настроены до того, как понадобились.
  • Тяжёлые эндпоинты (поиск, экспорт, генерация PDF) закрыты авторизацией или ограничены отдельно.
  • Реальный IP сервера не светится в DNS-истории домена, если перед ним стоит прокси.
  • Мониторинг с оповещением: вы должны узнавать о проблеме от системы, а не от пользователей.
Подробности о том, что и как фильтруется — на странице о сети. Гарантии доступности и компенсации — в SLA.