Шаг 1. Отличить атаку от сбоя
| Симптом | Скорее атака | Скорее сбой |
|---|---|---|
| Нагрузка на процессор | Упёрлась в 100% | Обычная или нулевая |
| Число запросов в журнале | Выросло в разы | Обычное или нет вовсе |
| Ошибки | 502/504, таймауты | 500 после обновления, ошибки базы |
| Другие сайты на сервере | Тоже тормозят | Работают |
Шаг 2. Посмотреть журнал веб-сервера
Самые полезные вопросы к журналу: сколько запросов в минуту сейчас и сколько обычно, какие адреса запрашивают чаще всего, с каких IP идёт больше всего запросов и какие у них User-Agent.
# Запросов в минуту за последние минуты
awk '{print $4}' /var/log/nginx/access.log | cut -c2-18 | uniq -c | tail -10
# Самые частые адреса
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
# Самые активные IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20Шаг 3. Отличить атаку от наплыва
Настоящие посетители загружают страницы целиком — со стилями, скриптами и картинками, приходят по ссылкам из рекламы и поиска, двигаются по сайту. Атакующие запросы бьют в одни и те же адреса, часто не загружают статику, имеют одинаковые или пустые User-Agent и идут с сетей хостингов.
Что дальше
Если признаки указывают на атаку, переходите к руководству что делать во время DDoS-атаки. Если на сбой — проверьте последние изменения на сайте и статус хостинга.
Вопросы и ответы
Может ли атака выглядеть как обычная медленная работа сайта?
Да. Медленные атаки и прицельные запросы к поиску не дают резкого всплеска трафика, но держат соединения и нагружают базу. Смотрите не только на число запросов, но и на число открытых соединений и время ответа.
Где смотреть журнал, если сайт на виртуальном хостинге?
Обычно журналы доступа есть в панели управления хостингом. Если их нет, попросите выгрузку у поддержки — она же подскажет, видит ли хостинг атаку на канал.