Наблюдал сегодня в администраторской панели достаточно интересную картину на странице пользовательской активности: абсолютно все пользователи были из Европейского Союза. Нет, я, конечно, понимаю, евроинтеграция и все такое, но ведь сам по себе код «EU» у IP-адресов конечных пользователей встречается не так уж и часто, тем более не может быть на сайте одновременно около сотни таких редких европейцев.
Оказалось, что все довольно просто. Дело тут вовсе не в событиях на Майдане Независимости, а в скрипте самопекущихся баз GeoIP, который идет в комплекте с корпоративными версиями WebEngine и прочих систем управления сайтом на базе ядра IWE. А суть вопроса довольно проста: когда на сайт заходит человек с IP-адресом, принадлежность которого ни к одному из государств не удается установить при помощи уже существующей базы данных, скрипт в автоматическом режиме (сразу или с отсрочкой ― зависит от загрузки сервера: если он сильно загружен, то создавать дополнительные внешние запросы ядро не станет) направляет запрос на внешний сервер и таким образом пытается определить, к кому данный адрес относится территориально. Внешний сервер безошибочно определяет регистратора и перенаправляет запрос на его Whois. Вот тут и начинается самое интересное. Дело в том, что некоторые диапазоны IP-адресов у RIPE зарегистрированы на Европейский Союз, то есть определить конкретную страну не представляется возможным. Но это еще полбеды. В некоторых выводах Whois также нарушается понятная скрипту структура данных, в результате чего он не распознает начало либо конец диапазона (в особенно извращенном случае ― и то, и другое), что не несет в себе уже ничего хорошего. В результате, полученные данные вносятся в базу данных, а если стартовый адрес ― 0.0.0.0, то к данной записи автоматически будут приравнены все посетители. Когда скрипт разрабатывался изначально, то от был отточен для работы с выводом Whois при условии, что все результаты будут как под копирку, но с разными цифрами. Оказалось, что в редких случаях формат вывода может отличаться, в результате чего происходит сбой работы скрипта, который вслед за собой повреждает и стабильную работу геофильтра.
А теперь инструкция по устранению евроадресов с сайта. Хотя мы уже и установили дополнительную защиту от такой ошибки, все еще могут содержаться ошибки в старых версиях базы данных, а также на сайтах, где ядро еще не было обновлено. Если все посетители вашего сайта приходят с одной страны (вопреки выводу Whois, который можно просмотреть по клику), то вам придется воспользоваться средствами администрирования SQL. В таблице с самопекущейся базой данных GeoIP нужно отыскать записи, где стартовый или завершающий IP-адрес равны нулю. Такие записи следует немедленно удалять, поскольку никакой смысловой нагрузки за собой они не несут. Также обратите внимание на то, что изменения, внесенные вами в базу данных ручным способом, вступят в силу не ранее, чем спустя полчаса. Эта задержка вызывается кэширующим механизмом ядра, который препятствует созданию излишнего количества запросов к базам данных GeoIP.
Если прежде вы с такой проблемой не сталкивались, то можете спокойно забыть содержание данной заметки, поскольку начиная с последнего обновления ошибка, приводящая к внесению в базу данных подобных записей, была устранена.