antiBot

Блокировка ботов и парсеров по IP и USER AGENT
Версия 2.0.1-beta
Дата выпуска 01.03.2023
Загрузки 397
Просмотры 8 490
Внимание, этот компонент требует версию PHP 5.4 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.
Внимание, этот компонент требует версию MODX не ниже 2.4 !
Компонент записывает все хиты и ведет список пользователей/ботов зашедших на сайте с возможностью блокировки через стоп-листы. Вся статистика хранится в течении 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