Проверки посетителей VPN: безопасно оценивать репутацию и задержку
Относитесь к обнаружению VPN как к оценке с баллами. Собирайте защитимые факты запроса, измеряйте путь во времени и действуйте обратимыми ступенчатыми проверками вместо блокировок.
Панель мошенничества помечает посетителя как VPN, аналитик просит блокировку, и запрос доходит до команды платформы только с логическим значением от поставщика. Это значение — оценка, и оно ошибается в другую сторону, чем измерение задержки. Прежде чем действовать, отделите то, что доказывает сам запрос, то, что утверждает служба репутации, и то, на что лишь намекает время. Затем выберите ответ, который можно отменить, когда оценка окажется неверной.
Собирайте факты запроса, которые можно защитить
Единственный адрес, который ваш сервер знает наверняка, — это TCP-партнёр, завершивший соединение. Когда CDN или обратный прокси завершает это соединение, партнёром становится край, а адрес клиента едет в заголовке пересылки, которому можно доверять, только если его добавил ваш собственный край. Читайте запись, которую сделал ваш прокси, никогда не самую левую строку, потому что клиент может отправить туда любое значение. Всё дальше должно сохранять это различие.
Два дешёвых обогащения делают адрес пригодным для проверки: автономная система, которая его объявляет, и запись PTR, указывающая обратно на него. Оба описывают регистрацию, а не поведение, и оба воспроизводимы позже.
IP=203.0.113.10
dig +short -x "$IP"
whois "$IP" | grep -iE "origin|netname" | head -5Хостинговый ASN — сильная подсказка, а не приговор. Корпоративные концентраторы VPN, облачные выходы и некоторые университетские сети тоже находятся в дата-центрах, поэтому тот же сигнал, который ловит коммерческий выход, ловит и законный офис. Храните адрес только столько, сколько нужно проверке, потому что IP — персональные данные в большинстве режимов приватности. Удаляйте его по расписанию, а не держите бессрочно.
Оцените посетителя, прежде чем ограничивать
Запускайте любой новый сигнал сначала в режиме наблюдения. Записывайте входные данные и код причины, пропускайте каждый запрос и сравнивайте распределение баллов с учётными записями, которые вы знаете как законные. Это даёт оценку ложноположительных до того, как кто-то потеряет доступ, и именно это число решает, безопасно ли включать правило.
| Signal | What it supports | How it fails | Typical action |
|---|---|---|---|
| Hosting ASN | Traffic likely originated from infrastructure | Corporate VPN and cloud egress look the same | Add weight, not a block |
| Reputation verdict | A vendor's dated classification | Vendors disagree; self-hosted exits look clean | Step-up challenge |
| RTT versus baseline | The path is longer than usual | Anycast, mobile networks, in-country exits | Weak weight only |
| Forwarded header consistency | Whether the edge saw the claimed client | Misconfigured proxies produce noise | Drop the value, do not score it |
Сопоставьте итог трём действиям, а не двум: разрешить, ступенчатый вызов, ручная проверка. Постоянная блокировка должна требовать подтверждённого человеком повторного злоупотребления, потому что ложноположительный на корпоративном путешественнике стоит тикета поддержки и потерянной сессии, а ложноотрицательный на одном запросе почти ничего не стоит.
Держите запрос репутации на стороне сервера и ограниченным
Вызывайте службу репутации из бэкенда с коротким тайм-аутом, кэшируйте вердикт на фиксированный срок и считайте тайм-аут неизвестным, а не чистым. Никогда не помещайте ключ API в клиентский код и не позволяйте запросу блокировать отрисовку страницы; медленная третья сторона должна ухудшать балл, а не сайт.
Кэшируйте по адресу, а не по диапазону. Классификация всего /24 по одному запросу распространяет неверный вердикт на соседей, которых вы никогда не измеряли. Записывайте поставщика, дату ответа и значение классификации рядом с кодом причины, чтобы более поздняя проверка знала, какое суждение действовало.
Два поставщика могут классифицировать один адрес по-разному в течение дня, поэтому вердикт принадлежит колонке доказательств, а не колонке идентичности. Это также отношение обработки: отправка адреса каждого посетителя третьей стороне требует правового основания, правила хранения и строки в уведомлении о конфиденциальности.
Измеряйте задержку медианой, а не одной выборкой
Время кругового пути описывает путь в момент измерения. Ближний край anycast может обслуживать удалённого пользователя, мобильная сеть добавляет задержку, не связанную с географией, а выход VPN в собственной стране посетителя выглядит локальным. Геолокация на уровне города часто сообщает о дата-центре, а не о человеке.
Сделайте несколько выборок и используйте медиану, чтобы один медленный запрос не сдвинул результат. Цикл ниже печатает медиану из пяти.
for i in 1 2 3 4 5; do
curl -o /dev/null -s -w "%{time_connect} %{time_starttransfer}\n" https://www.example.com/
done | sort -n | sed -n 3pСравнивайте число с распределением заведомо хороших пользователей, а не с абсолютным порогом, и комбинируйте его с ASN. Два слабых сигнала, которые согласуются, сильнее каждого по отдельности, но вывод по-прежнему о пути, а не о намерении, поэтому он относится к баллу, а не к запрету.
Решите, запишите и откатите
Перед включением правила воспроизведите день трафика в режиме наблюдения и посчитайте, что произошло бы. Сохраняйте входные данные балла, код причины и версию правила, но храните сырые адреса только для окна проверки. Если правило срабатывает на законной учётной записи, запись должна объяснить почему без второго расследования.
Дайте каждому правилу собственный переключатель. Когда завершение ступенчатой проверки падает или тикеты поддержки подскакивают, отключите это правило и оставьте остальной конвейер работать; один глобальный аварийный переключатель превращает проблему настройки в сбой. После изменения следите за долей завершённых вызовов и очередью апелляций, а не только за числом блокировок.
Наконец, держите ответ соразмерным ущербу, который вы предотвращаете. В рекламном мошенничестве статус VPN — слабый показатель фальшивого клика, а поведенческие сигналы, такие как модели конверсии и согласованность устройства, адресуют реальный вред. Обратимый вызов защищает и доход, и настоящего пользователя одновременно.