BotBan Защита сайта от ботов
Попробовать
Меню
BotBan Защита сайта от ботов
Тема оформления

Проверка сайта на ботов: бесплатные инструменты и что они на самом деле показывают

Метрика не видит тех, кто не выполняет скрипт, лог не отличает Chrome от программы, назвавшейся Chrome, а проверка адреса ничего не знает о запросе. Разбираем пять бесплатных способов проверить сайт на ботов и слепое пятно каждого.

8 мин чтения

Проверить сайт на ботов можно бесплатно и за один вечер. Подвох в том, что у каждого доступного инструмента своё слепое пятно. Метрика не видит тех, кто не выполняет её скрипт. Лог хостинга видит всех, но не отличает настоящий Chrome от программы, которая так назвалась. Проверка адреса расскажет про сеть, но ничего не знает о том, что этот адрес делал у вас. Если смотреть только одним способом, вывод почти наверняка будет кривым.

Ниже — пять инструментов, которые есть у любого владельца сайта, и что каждый из них показывает на самом деле. По каким признакам вообще отличают программу от человека, разобрано в статье о признаках бота; здесь речь о том, чем смотреть.

Яндекс Метрика: роботы, которые выполнили скрипт

С неё начинают почти все. В стандартных отчётах есть отчёт «Роботы», а в настройках счётчика — фильтрация роботов, которая по умолчанию убирает их из остальных отчётов. Поэтому по общей посещаемости долю ботов не увидеть: смотреть нужно именно этот отчёт.

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

Чего не видно. Всех, кто не загрузил счётчик. Скрипт Метрики работает в браузере, а библиотека вроде python-requests, сканер уязвимостей и большинство парсеров забирают HTML и JavaScript не запускают. В Метрике их нет вовсе, хотя по числу запросов это самая массовая часть автоматики.

Где ошибается. В обе стороны. Бот на настоящем браузере, который двигает курсор и выдерживает паузы, проходит за человека. А сервис мониторинга, открывающий страницу целиком каждые несколько минут, может оказаться в «роботах», хотя вы сами его подключили. Подробнее про этот отчёт и настройки счётчика — в статье «Роботы в Метрике». Коротко: Метрика показывает тех, кто выполнил скрипт и при этом попался.

Яндекс Вебмастер: только про робота Яндекса

Про чужих ботов Вебмастер ничего не скажет, но одну проверку с ним сделать стоит. В статистике обхода видно, сколько страниц робот Яндекса запрашивал за день. Сравните это с логом за те же сутки:

grep 'YandexBot' access.log | wc -l

Совпадения до единицы не ждите: у Яндекса несколько роботов, и не каждый запрос попадает в статистику обхода. Насторожить должна разница в разы. Имя поискового робота в строке User-Agent подделывается одной строкой кода, и парсеры охотно им прикрываются: робота поисковика блокировать боятся, и правильно делают.

Второе, ради чего туда стоит заглядывать, — ошибки обхода. Если после подключения любой защиты робот начал получать отказы, Вебмастер покажет это раньше, чем страницы выпадут из выдачи.

Лог веб-сервера: видит всех, понимает мало

Лог — единственный источник, в который попадает каждый запрос, независимо от скриптов и счётчиков. На своём сервере он обычно лежит в /var/log/nginx/access.log, на виртуальном хостинге — в разделе логов панели управления. Часто хостинг хранит его всего несколько дней, а иногда лог нужно сначала включить. Сделайте это заранее, а не в день, когда сайт ляжет.

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

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20
grep -E '\.env|\.git/|wp-login\.php|phpmyadmin' access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head

Вторая команда почти не ошибается: за запросом к /.env или к wp-login.php на сайте без WordPress живого посетителя не бывает.

С первой сложнее. Лог показывает, кем клиент назвался, а не кто он. Тысяча запросов с одного адреса — это может быть парсер, а может быть офис на сорок человек или мобильный оператор, который выпускает в интернет полрайона через один внешний адрес. Если следующим шагом вы собираетесь этот адрес закрыть, сначала проверьте, чей он.

И ещё одна ловушка: в логе полно своих. Задания cron, обмен с 1С, мониторинг, проверка позиций, уведомления платёжной системы. На одном сайте с 1С-Битриксом обмен с 1С поначалу выглядел как перебор паролей: частые обращения к странице авторизации обмена. На другом скрипт по cron с чужого хостинга, запускавший wget, получал проверку браузера, как любой посетитель без браузера. Прежде чем считать ботов, выпишите адреса собственных служб.

Анализатор лога: то же, но без командной строки

Если доступа по SSH нет, скопируйте из панели хостинга тысячу-другую строк за час пиковой нагрузки и вставьте в анализатор лога. Он понимает формат combined, который стоит по умолчанию в nginx и Apache, и показывает долю явной автоматики, самые активные адреса с числом страниц и статики, запросы к секретам и список заявленных роботов. Лог никуда не сохраняется.

Как читать его цифры. «Явная автоматика» — это запросы, где библиотека прямо записана в User-Agent: python-requests, curl, Go-http-client. Это нижняя граница, всё замаскированное под браузер туда не попадает. Полезнее колонка статики. Браузер, открыв страницу, тут же запрашивает стили, шрифты и картинки. Адрес, который открыл двести страниц и не загрузил ни одного файла оформления, почти наверняка программа, как бы он ни представлялся.

Роботы поисковиков в анализаторе отмечены по заявленному имени. Настоящие они или нет, проверяется следующим инструментом.

Проверка адреса: обратный DNS и тип сети

Подозрительный адрес из лога стоит проверить, прежде чем что-то с ним делать. Проверка IP делает три вещи: подтверждает поисковых роботов обратным DNS, отмечает общие адреса операторов связи и разбирает строку User-Agent на признаки.

Подтверждение робота вручную выглядит так:

host 203.0.113.7
host crawl-203-0-113-7.googlebot.com

Первая команда даёт имя адреса, и оно должно оканчиваться на домен робота: googlebot.com или google.com у Google, yandex.ru, yandex.net или yandex.com у Яндекса. Вторая должна вернуть исходный адрес. Не сошлось хоть одно — это не поисковик.

Где ошибается любая проверка адреса, не только наша: она знает про адрес, но не про запрос. Чистый домашний адрес может оказаться резидентным прокси, через который прямо сейчас идёт парсер. Адрес облака может принадлежать человеку за VPN. Публичные базы жалоб на адреса тоже отстают: в них хорошо видны сканеры, которые месяцами обходят чужие сайты, а прокси меняются быстрее, чем на них успевают пожаловаться.

Неделя наблюдения: когда нужна цифра, а не догадка

Всё перечисленное даёт срез: кусок лога за час, отчёт Метрики, один адрес. Решения по каждому визиту с объяснением ни один из этих инструментов не даёт. Для этого нужен модуль, который смотрит на каждый запрос и при этом никого не останавливает.

Так устроен аудит трафика: модуль или скрипт ставится на сайт и неделю работает в режиме наблюдения. В журнале видно каждый визит, признаки, по которым он показался подозрительным, и что было бы с ним после включения защиты. Как из такой недели получить долю ботов и не обмануться средними цифрами, разобрано в статье о подсчёте доли ботов.

Где ошибается наблюдение. Если сайт подключён только скриптом, например на конструкторе без доступа к серверу, запросов без JavaScript он не увидит — та же граница, что у Метрики. Серверный модуль видит каждый запрос к страницам. И ещё: неделя наблюдения показывает вашу неделю. Атака, которая придёт через месяц, в неё не попадёт.

С чего начать

Порядок, при котором выводы получаются честными:

  1. Выпишите свои служебные адреса: сервер сайта, сервер 1С, мониторинги, CRM, платёжные уведомления. Без этого часть «ботов» окажется вами.
  2. Откройте в Метрике отчёт «Роботы» за месяц и посмотрите, есть ли рост и в каких источниках.
  3. Возьмите лог за час пиковой нагрузки и прогоните через анализатор. Отметьте адреса без статики и всех, кто искал секреты.
  4. Самые активные адреса проверьте по одному. Подтверждённых поисковиков оставьте в покое, общие адреса операторов не трогайте вовсе.
  5. Сравните запросы YandexBot в логе со статистикой обхода в Вебмастере.
  6. Если картина по-прежнему неясна или нужна доля ботов среди рекламных кликов, поставьте неделю наблюдения.

BotBan в режиме наблюдения делает шаги с третьего по пятый на каждом запросе и пишет причину решения в журнал, а блокировку включает сам владелец, когда посмотрит на результат. Бесплатная неделя наблюдения есть у каждого сайта, карта для неё не нужна.

Решение по теме

Термины из статьи

Как это настроить в BotBan

Читайте также