Сканирующие роботы
Crawler (краулер), scraper (скрапер), бот, веб-паук – это названия похожих программ, созданных для сканирования сайтов. Полученную с сайта информацию используют по-разному:
- Поисковые системы формируют поисковой индекс
- SEO-сервисы создают аналитические отчёты
- Агрегаторы копируют информацию для собственных целей
Чаще всего такие программы действуют автономно и с определенной периодичностью. Поэтому, обобщая, их называют роботы.
Некоторым роботам можно посылать команды с помощью специального файла robots.txt, мета-тегов или заголовков. Например, поисковые роботы Google и Яндекс понимают команды: сканировать/не сканировать страницу, индексировать/не индексировать страницу. С помощью специальных инструментов можно ограничивать скорость сканирования сайта.
Публикуя сайт в интернете, вы должны быть готовы к сканирующим роботам. Это часть интернета. Но нужно разделять вежливых роботов и агрессивных роботов.
Вежливый робот – сканирующий робот, содержащий ссылку на описание программы и правила управления поведением робота.
Агрессивный робот – сканирующий робот, который не имеет описания, не реагирует на команды.
Некоторые агрессивные роботы становятся настоящим кошмаром для владельцев сайтов.
Агрессивное сканирование
В лучшем случае вы можете столкнуться с кидди скриптом (Script kiddie). Как правило, это недолгая нагрузка на сайт, вызванная неумелым использованием готовых сканеров сайтов. Недолгая - так как сканирование сайта требует компьютерных мощностей, что может себе позволить далеко не каждый начинающий.
Агрессивное сканирование сулит проблемы, если ваш сайт сканирует мощная система. Последствия в таком случае можно сравнить с DOS атакой на сайт.
Классический сценарий:
Ваш сайт – это региональный ресурс. Например, вы оказываете услуги в Москве. Вы ожидаете получать посетителей сайта из Москвы, может быть, из области. Иногда на ваш сайт могут заходить посетители из других регионов.
Однажды, вы в статистике сайта видите, что сегодня на сайте много посетителей из Китая. На следующий день их больше. Через неделю ваш сайт едва загружается. Ещё через неделю хостинг-провадйер пишет вам, что превышены лимиты вашего тарифа и требуется повысить тариф.
Что произошло? С высокой вероятностью ваш сайт агрессивно сканирует китайский робот.
Анализ агрессивных роботов
Для предупреждения проблем от агрессивного сканирования нужно проводить периодический анализ. Как правило, это включает ряд работ:
- Анализ логов сайта (успешные соединения - success.log, ошибки - error.log):
- Проверка User-Agent
- Проверка ip
- Проверка количества обращений с одного ip
- Проверка истории обращений с одного ip
- Проверка времени между запросами с одного ip
- Аналогичная проверка для подсетей
- Анализ статистики сайта
- Поиск известных агрессивных роботов
Защита от агрессивного сканирования
Когда агрессивный робот обнаружен, следует выявить его признаки. По таким признакам можно ограничить или заблокировать обращение к сайту. Будьте очень аккуратны при настройке ограничений или при блокировке, чтобы случайно не пострадали другие пользователи вашего сайта.
Признаки для ограничения или блокировки:
- ip адрес – блокировка ip адреса
- User-Agent – блокировка User-Agent
- Время между запросами – снижение скорости для частых запросов
В качестве автоматической защиты можно использовать специальные программы. Например, программа Fail2ban (https://www.fail2ban.org/wiki/index.php/Main_Page) позволяет создать набор правил для блокировки нежелательных роботов.
Для проверки подозрительных ip адресов используйте сайт AbuseIpDB (https://www.abuseipdb.com/ ). Это обновляемая база данных ip-адресов, уличённых в неправомерных действиях.
Бонус - AspiegelBot
Один из недавних (время активности первая половина 2020 года) агрессивных роботов – это AspiegelBot. На слабых (с небольшим количеством ресурсов) хостингах сайты становятся неработоспособными. Этот робот не следует никаким правилам и инструкциям. На некоторых сайтах скорость сканирования достигала нескольких тысяч запросов в минуту. По всем признакам видим агрессивное сканирование.
В данном случае рекомендуем блокировать по User-Agent с помощью правил вашего сервера. Блокировка по ip адресу может себя не оправдать, так как используется широкий диапазон ip адресов.
# сервер nginx if ( $http_user_agent ~* (AspiegelBot) ) { return 403; } # сервер apache <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^(AspiegelBot) [NC] RewriteRule .* - [F,L] </IfModule>