antiBot

Блокировка ботов и парсеров по IP и USER AGENT
Версия 2.0.1-beta
Дата выпуска 01.03.2023
Загрузки 537
Просмотры 10 983
Компонент записывает все хиты и ведет список пользователей/ботов зашедших на сайте с возможностью блокировки через стоп-листы. Вся статистика хранится в течении 3-х дней (по умолчанию), после чего автоматически удаляется по наступлении даты во время захода пользователя или бота только 1 раз в сутки.

Какие задачи решает компонент


  1. Правила для получения списка IP адресов за определенный период времени с учетом количества переходов;
  2. Защита MODX REVOLUTION от парсеров и ботов;
  3. Значительное снижение нагрузки на сайт за счет блокировки ненужных ботов на событие OnHandleRequest, то есть до того как сайт начинает грузить контент, то есть ресурс с чанками, сниппетами и шаблонами;
  4. Ведение и просмотр статистики сайта с отображением общего количества хитов у пользователая/бота
  5. Защита от парсеров вашего сайта, как правило парсеры которые нагружают сайт и занимаются воровством используют несколько IP адресов которые возможно заблокировать;
  6. Проверка бота на принадлежность к yandex bot. Так как USER-AGENT можно подделать, добавлена возможность для проверки,
    является ли IP с которого пришел яндекс бот не фэковым;

Возможности


  • Добавлена настройка для отключения отчистки статистики управляемые через antibot_max_day
  • Добавление индексов для поля user agent для быстрого поиска по нему
  • Добавлена возможность блокировки по части IP
  • Возможность проверки фэйковых ботов yandex, google, mail
  • Блокировка пользователей по IP
  • Блокировка пользователей по USER AGENT
  • Включение/отключение — учета переходов авторизированных пользователей
  • Включение/отключение — учета переходов заблокированных пользователей
  • Включение/отключение — учета переходов в контексте mgr
  • Включение/отключение — учета переходов всех пользователей. Можно отключить запись переходов, но созданные стоп листы будут работать
  • Хранение в базе переходов и пользователей определенное количество дней (по умолчанию 3 дня). По наступлению даты, записи автоматически удаляются
  • Указание страницы для редиректа или сообщение которое будет возвращаться заблокированному пользователю
  • Блокировка любых пустых USER AGENT при создании любого стоп-листа
  • Во время блокировки возвращается HTTP/1.1 503 Service Temporarily Unavailable, что предоставляет возможность не вылететь странице из поисковой выдачи в случаях если ошибочно был забанен бот google или yandex

Пример блокировки надоедливых ботов AhrefsBot, MJ12bot, DotBot и SemrushBot


Эти боты могу делать в день по 100, 500, 3000 и больше прямых заходов на страницы сайта.
Тем самым эти бесполезные боты создают такую нагрузку на сервер, которую живые пользователи не всегда смогу создавать.

Проверялся компонент на сайте с большим каталогом в 17000 товаров, на нем посещаемость от 3-10 пользователей в день, зато боты: AhrefsBot, MJ12bot, DotBot дают нагрузку на сайт в среднем около 1000 переходов.

Действия для блокировки
Переходим на вкладку "Стоп-листы" и нажимаем Добавить стоп-лист
// Для AhrefsBot
Контекст: web
USER AGENT: Mozilla/5.0 (compatible; AhrefsBot/6.1; +http://ahrefs.com/robot/)
Возвращаемое сообщение: Доступ запрещен
Комментарий для администратора: блокировка бота AhrefsBot

// Для SemrushBot
Контекст: web
USER AGENT: Mozilla/5.0 (compatible; SemrushBot/3~bl; +http://www.semrush.com/bot.html)
Возвращаемое сообщение: Доступ запрещен
Комментарий для администратора: блокировка бота SemrushBot

// Для MJ12bot
Контекст: web
USER AGENT: Mozilla/5.0 (compatible; MJ12bot/v1.4.8; http://mj12bot.com/)
Возвращаемое сообщение: Доступ запрещен
Комментарий для администратора: блокировка бота MJ12bot

// Для DotBot
Контекст: web
USER AGENT: Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)
Возвращаемое сообщение: Доступ запрещен
Комментарий для администратора: блокировка бота DotBot

Так мы создали 2 стоп-листа для блокировки ботов по user-agent:


Блокировка по IP


Переходим на вкладку "Стоп-листы" и нажимаем Добавить стоп-лист
Контекст: web
USER AGENT: ОСТАВЛЯЕМ ПУСТЫМ
Блокировать IP: 223.12.233.11
Возвращаемое сообщение: Доступ запрещен
Комментарий для администратора: блокировка пользователя

Проверка фэковых ботов


Некоторые боты умеют подделывать USER AGENT и прикидываться например googlebot или другим доброжелательными ботами. На скриншоте ниже как раз мы и найдем такого бота. После нахождения таких ботов, можно смело создавать стоп-лист с указанием USER AGENT + IP найденого бота.

Проверка google бота:


Результат проверки показывает что это поддельный бот. Так же возвращается реальный домен поддельного бота.


Репозиторий правил


В стоп-листы добавлена кнопка для скачивания правил для стоп листов из репозитория. После скачивания создаются стоп-листы с правилами для блокировки ботов.
Репозиторий будет периодически пополняется новыми правилами блокировки.


Настройки

antibot_enable_statistics — Включить статистику
По умолчанию Да. Если хотите отключить ведение статистики и проверку по стоп-листам установить Нет

antibot_keep_block_user — Включить статистику заблокированных
По умолчанию Да. Если не хотите записывать переходы заблокированных по стоп-листу, установите Нет

antibot_max_day — Хранить статистику в днях
Укажите в течении скольки дней хранить статистику

antibot_keep_statistics_authorized_users — Включить учет авторизированных пользователей
По умолчанию Да. Если вы не хотите учитывать авторизированных пользователей в статистике то установите Нет

antibot_last_date_remove — Последняя дата удаления статистики
Дата устанавливается автоматически по наступлению дня для удаления статистики

antibot_keep_statistics — Включить запись переходов
По умолчанию Да. Если установить Нет то статистика по переходам не будет записыватся, но стоп-листы будут работать.

antibot_keep_statistics_context — Вести статистику в контексте mgr
По умолчанию Да. Если установить Нет то переходы в административной части не будут записыватся

Интерфейс


Список посетителей



Список хитов



Стоп-листы



Добавление стоп-листа



Как блокировать ботов через nginx


В случае обнаружения бота вы можете заблокировать его через nginx добавив код ниже, указав сигнатуру бота:

Список популярный ботов
if ($http_user_agent ~ SemrushBot|DotBot|SputnikBot|Crowsnest|PaperLiBot|peerindex|ia_archiver|Slurp|Aport|NING|JS-Kit|rogerbot|BLEXBot|MJ12bot|Twiceler|Baiduspider|Java|CommentReader|Yeti|discobot|BTWebClient|Tagoobot|Ezooms|igdeSpyder|AhrefsBot|Teleport|Offline|DISCo|netvampire|Copier|HTTrack|WebCopier) {
    return 503;
}

Не правильно определяется IP адрес


Разные настройки веб-сервера по разному определяют IP адреса пользователей.
Если у вас в статистике antiBot пустой IP адрес или адрес в виде: 127.0.0.1 то вы можете указать в системных настройках (antibot_ip_definition)переменную с помощью которой ваш сервер определяет IP (по умолчанию установлена REMOTE_ADDR) или опставить его пустым чтобы перебрались адреса автоматически.

1.0.13-beta

  • Переход по ссылке из списка хитов
  • Фиксация кодов 200 и 404 если страница не найдена

1.0.12-beta

  • Блокировка по IP адресу из списка хитов и из списка гостей
  • Блокировка по USER AGENT из списка хитов и из списка гостей

1.0.11-beta

  • Блокировка по IP адресу из списка хитов

1.0.10-beta

  • настройка для выбора определения IP адреса для разных видов серверо
  • Исправлена баг с неправильным определением IP адреса через REMOTE_ADDR

1.0.9-beta

  • Доработка блокировка по части IP
  • Исправленая страница редиректа указанная в настройках по умолчанию

1.0.8-beta

  • Исправлен баг по блокировке IP адреса

1.0.6-pl

  • Добавлена настройка для отключения отчистки статистики управляемые через antibot_max_day
  • Добавление индексов для поля user agent для быстрого поиска по нему
  • Добавлена возвожность блокировки по части IP
  • Добавлена капча google для того чтобы можно было убедиться что ваш посетитель не бот. После прохождения проверки через капчу, пользователь будет отключен из стоп листа

1.0.4-pl

  • Добавлена кнопка в стоп листах для скачивания базы ботов для автоматической блокировки из репозитория

1.0.3-beta

  • Перевод на английский и украинский язык

1.0.2-beta

  • Проверка IP на пренадлежность к Google Bot
  • Проверка IP на пренадлежность к Mail Bot

1.0.1-beta

  • Проверка IP на пренадлежность к Yandex Bot

1.0.0-beta

  • New build script.
  • Блокировка по USER AGENT
  • Блокировка по IP
  • Учет хитов
  • Веденение хитов по пользователями
  • Добавление своих стоп-листов
  • Хранение статистики определенное количество дней после чего удаление её для того чтобы не засорять базу данных
  • Настройки
    • Включить статистику заблокированных
    • Включить запись переходов
    • Влючить учет авторизированных пользователей
    • Вести статистику в контексте MRG
    • Хранить статистику в днях

Последние обсуждения в сообществе MODX.pro