Для ЛЛ: мой опыт борьбы с ботами на сайте. Старался кратко, но тема большая. Поэтому только основное и то много получилось.
Хотелось бы затронуть тему паразитного трафика на сайтах. Те, кто работают с вебом, периодически бывают по обе стороны «добра» и «зла»: то защищаемся от разного рода трафика, то наоборот его создаем (например, парсим данные). Последние месяцы мне приходится как раз бороться с теми, кто не является людьми, но постоянно создают пустую нагрузку на проектах.
Сразу скажу, что имею дело с разными серверами: массхостинг, vps и собственные. Инфраструктуры разные, подходы у админов тоже. Поэтому рассказываю про самый обычный способ: как найти ботов и заблокировать их на уровне веб-сервера. Под ботами имеются в виду любые автоматические системы, а не только те, которые открыто говорят про себя, что они роботы. Вряд ли открою какие-то тайны, просто расскажу свой подход. Опишу только основные моменты. Я уже и так понял, что кратко писать не умею, а тема очень объемная.
И сразу про защиту через CloudFlare. Её не рассматриваю по своим причинам, это не тема для данного поста. Но да, кто хочет, тот использует этот сервис.
Один из частых советов, которые дают при вопросе о защите от ботов - это создания списка этих самых ботов. Поэтому на поисковиках ищут ссылки на гитхаб репозитории со списком «плохих ботов». Примеров много (вот раз, вот два). Можно ли использовать эти списки? И да, и нет. Не все роботы из них перейдут на ваш сайт, а те, кто действительно создает трафик, могут и не быть в этом списке. Поэтому, если хочется, то копируем данные по ботам и добавляем в свой конфиг (или .htaccess, если у вас Apache). Но не останавливаемся на этом.
Далее нам нужны логи нашего веб сервера. Лучше всего, если у нас их много – данные от двух недель и более. Если меньше или их вообще нет, то идем в настройки веб-сервера и указываем ему, что логи надо хранить. Для посещаемых проектов лучше сразу еще настроить logrotate, чтобы ежедневно ваши лог-файлы сжимались в свой архив. Так удобнее будет их скачивать и хранить.
Допустим, логи у нас есть. Работать мы будем с access.log (далее – лог-файл), а error.log, если он не пустой, просматриваем на наличие ошибок, которые могли допустить в своих скриптах. Больше он нам не понадобиться.
Если у вас в счетчике посещаемости (пусть это будет Яндекс.Метрика) ноль посещений, то это не значит, что на сайт никто не ходит. Открываете лог-файл и видите, что сайт постоянно отдает данные всяким автоматическим системам. Плохие мы уже могли забанить (см. выше) и им на их запросы отдается 403 ошибка. С этим разобрались. Остались те, которые вроде бы пользователи, но в Метрике их нет или они помечены как роботы, а может быть и приняты за реальных людей. Часто это накрутчики поведенческих факторов. Ваш сайт может и не быть их целью, но на нем они учатся, а также прокачивают себя. Многие из них довольно примитивны. Их мы отфильтруем.
Для этого воспользуемся анализатором логов. Их много, можете взять любой. Мне, как разработчику, зашел GoAccess, т.к. я могу запустить его через Docker и мне не нужно ставить никаких дополнительные программы.
Пишем в консоле команду (взял из мануала, для базовых данных годится):
cat access.log | docker run --rm -i -e LANG=$LANG allinurl/goaccess -a -o html --log-format COMBINED - > report.html
На выходе у нас html файл с полным отчетом. Ради интереса вы можете подробно изучить статистику и сравнить ее с той же Я.Метрикой. Но для практической части нам сейчас нужен блок «Visitor hostnames and IPs». Сортировку в таблице делаем по убыванию в поле Visitors и ищем те адреса, у которых много hits и много visitors (можно и по Visitors отсортировать, если вам так удобнее).
Например, первая строка не удовлетворяет этим условиям, но мы ее все равно смотрим и видим, что это любопытный crawler, который нам не нужен и он точно будет забанен. На четвертой строке как раз нужный пациент. С одного IP много разных «браузеров». Такое бывает. Поэтому берем IP и смотрим, что это вообще такое.
Получаем, что это прокси из Люксембурга. Банить ли такой адрес? Решать вам. Как показала моя практика и анализ нескольких десяткой сайтов, за такими проксями реальных людей очень мало. Через Метрику можете найти визитеров с этого прокси и увидеть, что на сайте они почти ничего не делали, или же их действия носили исключительно автоматизированный характер.
Прокси точно стоит забанить, если его клиенты одни мобильные устройства. Вот тут с 99% работа ботов.
Советую также обратить внимание на то, сколько трафика эти клиенты забрали с сайта. Если мало, то это вряд ли были люди.
С большой вероятность стоит банить IP разных хостинг провайдеров: Amazon, iHor, VPSville, Cloud Networks, WestHost и прочих игроков рынка, которые пачками продают IPv6 адреса. Если ваш сайт поддерживает IPv6, то в логах вы увидите уникальную картину, когда от таких провайдеров массово ломятся всякие мобильные устройства на ваш сайт. Блокировать этих провайдеров надо не по одному IP, а блокировать все их сетки с указанием CIDR в том же .htaccess (например, deny from 2a05:fb41::/32)
Замечу, что блокировать все подряд без анализа не стоит! Во-первых, ряд прокси относится к серьезным компаниям, которыми пользуются обычные пользователи. Во-вторых, имеет место быть тенденция поднятия своего прокси/vpn на хостинге. Так что IP будет от хостинга. И если клиентов с такого IP несколько устройств, то вряд ли стоит блокировать такой адрес. Другое дело, если через него ломится целый зоопарк устройств от старых iPod и Windows 7 машин до чего-то совсем экзотического типа Wii.
Также с помощью анализа логов находим crawler, которые в начале статьи искали на гитхабе. Здесь вы можете скорректировать свой список, что-то добавить. Все же есть местечковые боты, которые тоже не несут никакого смысла.
Вопрос: почему это дерьмо вообще появляется на вашем сайте? Как я уже сказал ранее, не всем нужен конкретно ваш сайт. Да, конечно, может кто-то из конкурентов пытается за счет ПФ завалить ваш сайт в поисковой выдаче. Но вроде как эта тему уже не так актуальна и для Яндекса, и для Гугла. Но вот тема с прокачкой ботов, получения ими хорошего «fingerprint» для них важна. Да и смежная тема скликивание рекламы актуальна, где боты должны доказывать проверяющим системам, что они типа люди. Так что если у вас есть сайт, то боты к вам придут. Особенно, если сайт попал в базу тех, кто отдает этим ботам адреса. Например, есть один такой сайт в России, у которого есть свое API, за счет которого он живет, и отдает ботам домены для посещения. Сайты каталогизированы по тематикам, так что бота можно натравливать и прокачивать прямо по тематическим ресурсам. Конечно, у себя вы тоже можете забанить по referrer таких «посетителей» (в логах увидите адрес api.pf….). Но только совсем тупые боты отдают ссылку на этот сервис.
Что происходит после блокировок.
Для сайта с нормальным органическим трафиком происходит увеличение количества просмотров и визитов. Так же растет метрика «время на сайте». Все остальное почти не меняется. Да, значение посещаемости тоже просядет, но очень несильно.
Как пример, четыре дня назад обновил фильтры у одного сайта. Виден только рост метрик, проседания посещаемости почти нет.
Замечу, что «Доля визитов роботами» почти не снизится (в среднем станет меньше примерно на 5%), не ждите здесь прорыва. На это есть несколько причин. Одна из них в том, что боты все равно вернутся с других адресов. Вы просто сейчас отфильтровали один пул, но скоро появится другой. Так что это постоянная работа. Еще одна причина – вы блокировали только самых простых. Самый жир не палится так просто. У них или хорошие прокси (например, от Мегафона), где нельзя заблокировать всего провайдера, т.к. точно под замес попадут реальные пользователи, или уже хороший уровень прокачки, при котором имеем сложные движения мыши, свои локальные прокси на не стандартных портах и прочее, прочее. И есть разумные сомнения: «А бот ли это?»
Для сайтов, у которых трафик только из «людей», придется увидеть реальную картину:
Ночью обновил на одном из проектов .htaccess со своим списком фильтров. Видно, что идет просадка по посещаемости.
Это может быть грустно. Особенно, если вы запустили проект не так давно и уже думали, что ваш проект набирает обороты. Но нет, не все так хорошо, как могло показаться.
Работать с логами лучше не менее раз в неделю-две. Актуализируйте IP адреса, список ботов и сайт будет бороться с разного рода паразитным трафиком.