Ставим сети — ловим роботов

5629637efcc046d88928a6cd78401e7d.gif

Началось всё как обычно — с подозрений. Уж больно много людей приходит на мои сайты, которые скачивают дистрибутивы приложений по прямым ссылкам без рефереров. Как-то странно это, правда? Не могут же быть так популярны блокировщики ссылок. Я замечал некоторые адреса и пользователи обычно приходили опять скачивать без ссылки. Часто другую программу — никак не относящуюся к первой. Дальше пошли в ход проверки, что да как в логах. Оказалось, что абсолютное большинство таких заходов — странные пользователи, которые имеют пустые HTTP_ACCEPT_ENCODING и HTTP_ACCEPT_LANGUAGE. HTTP_USER_AGENT иногда указывает на Java, JavaScript, Wget, Perl, PHP и так далее, но большинство обычные строки браузеров. Все более-менее приличные поисковики у меня давно учитываются и это, конечно, не они.

Дальше стало ещё интереснее — что же это такое. То есть понятно, что это роботы, но зачем? Зачем приходить раз в день — два — неделю и перекачивать все дистрибутивы совершенно разных направленностей? Даже минимального ответа пока не было. Но после долго просмотра логов стал замечать, что часто бывают почти одинаковые IP — то есть с одной подсети и потому сортировка по количеству хитов с одного IP ничего интересного не показывает кроме клинических случаев. Пришлось искать лог анализатор с возможностью группировки по подсетям. И ничего сходу не найдя я, как обычно, написал свой велосипед.

И что я нашёл интересного? Ну не очень много интересного и к сожалению 90% роботов — никак не идентифицируются. Много ходит всяких секюрити контор, которые проверяют веб страницы (и само собой файлы) на безопасность для своих антивирусных продуктов (касперский, симантек, инфосек, инфоватч, битдефендер…) —, но эти далеко не главные, они заметны лишь периодичностью. Самое большое число роботов в сетях французского облачного провайдера OVH, в азиатских подсетях Amazon, само-собой в HETZNERе, просто где-то в Китае, в облаке Digital ocean и всё больше в Alibaba cloud. Зачем — я так и не понял. Но понятно почему многие в облаках — ведь входящий трафик там бесплатный. А Amazon, например, так и заявляет — приходите к нам и запускайте веб роботов. Так же много искателей дыр в популярных CMS. Запросы к wp-login.php у меня уже за тысячу в день бывают. Запрашивающих его, кстати, можно сразу в роботы записывать.

Возникает вопрос, что с ними делать? Ну можно ничего не делать. Трафик нынче дёшев, сервера тоже. А можно заблокировать прям подсетями — живых посетителей оттуда всё равно увидеть практически нереально. Да и исходящий трафик в облаках платный, хоть и копеечный. И что самое главное для меня — они портят статистику, которую тяжелее анализировать из-за них.

В общем, выкладываю анализатор логов который собирает статистику по подсетям — вдруг у кого-то получится найти что-то более интересное. Я ответов так и не нашёл.

Вот исходники анализатора (С++, STL). Не надо пугаться, что оно под Windows — ядро анализатора отвязано от интерфейса и там даже два типа проекта — консольный вариант и с GUI. Для портирования на другие платформы пока STL из C++ 11 — не хватает, по хорошему нужна filesystems из C++ 17, чтобы уже сделать 100% портабельно. С другой стороны, нужно только одну функцию заменить — траверс директории.

Анализатор понимает файлы с данными подсетей из официальных NIC (Network Information Center) регионов (на гитхабе ссылки есть) или более точные (но кривоватые) db-ip.com (там часто CIDR не парсится нормально). Для работы надо три папки, где лежат логи, где лежат файлы подсетей (чтобы построить базу подсетей) и куда положить скомпилированную базу с подсетями (ну чтобы каждый раз не парсить) и отчёт. Ибо после анализа генерируется html отчёт с подсетями отсортированными по количеству хитов и объёму скачанного. По клику на адресе в отчёте открывается сторонний сервис, показывающий владельца подсети. Там собственно вся информация и черпается. По решётке открывается уже список конкретных адресов из подсети (и тоже отсортированные).

Репорт выглядит примерно так:

fe88947dded14d60a4c6d95ec19162cf.png

Если у вас много посетителей, ставьте сразу большие лимиты на включение в отчёт. Там есть минимальное количество хитов из подсети и минималый объём по трафику.

ps. Если нет желания собирать самому — вот собранный под Windows.

Комментарии (2)

  • 2 марта 2017 в 20:18

    0

    Для роботов можно сделать сервис типа DNS blacklist для спама (https://en.wikipedia.org/wiki/DNSBL)

    Чтобы самому не вести базу и в TXT поле возвращать метаданные с дополнительной информацией, чтобы можно было принять решение блокировке в зависимости от типа робота

  • 2 марта 2017 в 21:58

    0

    Отключенный javascript и пустой агент — не значит бот.
    Вообще хорошую статистику собирает awstats. Если нет смысла хранить логи — 4 Гб лог сжимается в 18 метров статистики (файл).

© Habrahabr.ru