Access.log показывает запросы к серверу, включая обращения без JavaScript и без визита в аналитике. Однако частый запрос ещё не доказывает атаку: мониторинг, поисковый обход, интеграции и пользователи общих сетей могут выглядеть похожим образом.
Подготовьте журнал и контекст
Запросите у хостинга журнал за время аномалии и сопоставимый обычный период. Запишите часовой пояс, формат логов и точку сбора: CDN, защитный прокси или исходный сервер. У origin в поле адреса может стоять IP прокси. Восстановление адреса клиента допускайте только из заголовков доверенных прокси; произвольному X-Forwarded-For из интернета доверять нельзя.
Обычный combined-формат содержит адрес, время, строку запроса, статус, объём ответа, Referer и User-Agent. Время обработки запроса часто нужно добавлять отдельно. Не меняйте конфигурацию сервера без проверки синтаксиса и возможности отката.
Учебный пример: что видно в строках
Это синтетический пример с адресом из диапазона для документации, а не журнал клиента и не подтверждённая атака:
192.0.2.10 - - [13/Oct/2026:10:00:00 +0300] "GET /catalog?page=1 HTTP/1.1" 200 2048 "-" "ExampleCrawler/1.0"
192.0.2.10 - - [13/Oct/2026:10:00:01 +0300] "GET /catalog?page=2 HTTP/1.1" 200 2048 "-" "ExampleCrawler/1.0"
192.0.2.10 - - [13/Oct/2026:10:00:02 +0300] "GET /catalog?page=3 HTTP/1.1" 200 2048 "-" "ExampleCrawler/1.0"
Последовательность похожа на обход каталога. Три запроса не показывают ущерб: нужны длительность, интенсивность, стоимость ответа, идентификация клиента и бизнес-контекст. Отсутствие Referer встречается и у обычных посетителей.
Сгруппируйте запросы и сопоставьте нагрузку
- Разбейте поток по минутам и маршрутам. Найдите рост запросов к поиску, фильтрам, формам и другим дорогим обработчикам.
- Сравните распределение IP и User-Agent, долю GET и POST, ответы 4xx и 5xx. Отдельно проверьте повторные попытки после 429.
- Сопоставьте время всплеска с CPU, очередями, базой данных и p95 времени ответа. Количество запросов без стоимости обработки не объясняет перегрузку.
- Проверьте деплой, рекламную кампанию и расписание интеграций. Всплеск 5xx может быть вызван ошибкой приложения, а не ботами.
Для небольшого файла в combined-формате можно получить наиболее частые значения первого поля командой ниже. Она подходит только если первое поле действительно содержит адрес клиента; это счётчик, а не список адресов для блокировки.
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -20
Большие журналы анализируйте средствами хостинга или системы логирования, чтобы не нагружать production-сервер сортировкой. Не загружайте необезличенные файлы во внешние анализаторы.
Проверьте поисковых роботов до блокировки
User-Agent можно подделать. Анализатор User-Agent помогает разобрать строку, но не подтверждает владельца запроса. Для Googlebot сверяйте IP с опубликованными диапазонами либо проверяйте reverse DNS и обратное разрешение имени в исходный адрес; для других поисковых систем используйте их официальную методику.
Начните со справочника Googlebot и справочника YandexBot. Проверка robots.txt оценивает доступность файлов и правила обхода, но не подтверждает подлинность робота и не гарантирует индексацию.
Выберите меру и проверьте последствия
При подтверждённой нагрузке ограничьте конкретный дорогой маршрут, проверьте кеширование публичных ответов и контролируйте очередь origin. Начинайте с наблюдения и небольших изменений. После включения правила сравните доступность, p95, ошибки, реальные обращения и поисковый обход. Для связки с аналитикой и CRM смотрите методику диагностики, для подключения — инструкции платформ.
Источники и ограничения
Формат журналов Nginx, журналы Apache и проверка Googlebot. Если прокси не сохраняет клиентский адрес или часть запросов обслуживается кешем, журнал origin неполон.