Началось всё как обычно — с подозрений. Уж больно много людей приходит на мои сайты, которые скачивают дистрибутивы приложений по прямым ссылкам без рефереров. Как-то странно это, правда? Не могут же быть так популярны блокировщики ссылок. Я замечал некоторые адреса и пользователи обычно приходили опять скачивать без ссылки. Часто другую программу — никак не относящуюся к первой. Дальше пошли в ход проверки, что да как в логах. Оказалось, что абсолютное большинство таких заходов — странные пользователи, которые имеют пустые 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 отчёт с подсетями отсортированными по количеству хитов и объёму скачанного. По клику на адресе в отчёте открывается сторонний сервис, показывающий владельца подсети. Там собственно вся информация и черпается. По решётке открывается уже список конкретных адресов из подсети (и тоже отсортированные).
Репорт выглядит примерно так:
Если у вас много посетителей, ставьте сразу большие лимиты на включение в отчёт. Там есть минимальное количество хитов из подсети и минималый объём по трафику.
ps. Если нет желания собирать самому — вот собранный под Windows.
Комментарии (6)
nikitasius
02.03.2017 21:58Отключенный javascript и пустой агент — не значит бот.
Вообще хорошую статистику собирает awstats. Если нет смысла хранить логи — 4 Гб лог сжимается в 18 метров статистики (файл).
Envek
03.03.2017 10:03На самом деле с «облачных» подсетей вполне могут придти живые люди — многие держат на своих личных виртуалках VPN-сервера для походов на рутрекер и прочие полезные, но заблокированные ресурсы. У Digital Ocean есть даже пошаговый мануал по настройке VPN (на русском!): https://www.digitalocean.com/community/tutorials/openvpn-ubuntu-16-04-ru
ybalt
03.03.2017 16:40Ставите докер, ELK стек в контейнерах, конфигурируете Logstash для парсинга логов апача\nginx\мой-собственный-http-сервер и получаете мощнейший инструмент для анализа логов, умеющий в том числе группировку по подсетям.
Но велосипед, конечно, интереснее, не спорю.
Contriver
03.03.2017 16:40Ну вот пример: в соседней от меня компании 1200 человек с одного ip ....
одна подсеть
… у провайдера специально для для интернета юриков.У большинства рядовых пользователей ....Отключенный javascript и пустой агент
… -групповыми политиками установлен, так скорость загрузки страниц быстрее и безопаснее. Для отдельных пользователей прямого интернета разрешены сайты со скриптами используется одельный VPN сервер с прокси.Сайты с загрузкой более 2 сек скидывает по таймауту, так ка в большинстве всегда есть альтернативные адекватные сайтвы без тормозной статистики, отслеживания и кривых фреймворков.
Делайте выводы сайтостроители, прежде чем использовать данное решение, если не хотите потерять посещяемость!
VDG
04.03.2017 02:07Если боты постоянно что-то тяжёлое качают, и вы хотите это прекратить, то собирайте статистику поведения и отдавайте дистрибутивы на скачивание только людям. У меня тоже боты портили статистику Метрики/GA, пока не стал её подключать только после активности на странице — клик/тап/скролл.
eugenebb
Для роботов можно сделать сервис типа DNS blacklist для спама ( https://en.wikipedia.org/wiki/DNSBL )
Чтобы самому не вести базу и в TXT поле возвращать метаданные с дополнительной информацией, чтобы можно было принять решение блокировке в зависимости от типа робота