Как вы обнаруживаете VPN или прокси-соединение?

Я хотел бы заблокировать все соединения с моим сервером, которые используют VPN или прокси. Есть ли в любом случае, чтобы обнаружить, что используется VPN или прокси-соединение? Если нет, есть ли в любом случае, что я могу проверить вероятность того, что используется VPN или прокси-сервер? Наконец, есть ли что-нибудь, что я могу запросить или предложить пользователю проверить, используют ли они VPN или прокси-сервер, чтобы, если кто-то пройдет, я мог бы попытаться выполнить дополнительную проверку? Мне не нужна никакая информация от пользователя, такие как местоположение, истинный IP-адрес или что-то в этом роде. Я просто хочу полностью запретить подключения от VPN или прокси.

Edit: я думал, что я мог бы потенциально запустить тест, чтобы увидеть, есть ли последовательные расхождения между ping для VPN IP и обнаруживаемой задержкой клиента, но это звучит довольно ненадежно.

Edit2: прокси-сервер или VPN-сервер, скорее всего, будет иметь гораздо больше портов, чем стандартное домашнее соединение, поэтому я мог бы использовать количество открытых портов, чтобы помочь измерьте вероятность соединения, поступающего из VPN, запустив сканирование порта подключающегося лица.

7 ответов


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

генерация любого вида трафика назад с интернет-сервера в ответ на входящий клиент (сканирование порта или даже простой пинг), как правило, неодобрительно. Или, в случае сканирования портов, это может быть еще хуже для вас, например, когда клиент живет за центральным корпоративным брандмауэром, худшим из которых является то, когда клиент приходит из-за пула сетевых брандмауэров центрального правительства...

откровенно говоря, запреты на основе IP (или на самом деле, любое ограничение сосредоточения внимания на людях, которые не обладают исключительно своим публичным IP-адресом: прокси-серверы, VPN, устройства NAT и т. д.) были нереалистичными в течение длительного времени, и поскольку пулы IPv4 истощенные во многих частях мира, интернет-провайдеры ставят все больше и больше клиентов за большие пулы NAT (это новости на этой неделе в моей стране, что крупнейший интернет-провайдер, дочерняя компания Deutsche Telekom, начал раздавать частные IPv4-адреса в качестве стандартного способа ведения бизнеса своим клиентам, и люди должны попросить провайдера явно получить публичный IP-адрес), поэтому все меньше и меньше смысла в этом. Если вы хотите запретить клиентов, вы должны запретить их на основе личности (учетной записи), а не на основе IP-адреса.


самый простой способ сделать это-использовать внешнюю службу, такую как API, для блокировки пользователей VPN или прокси.

MaxMind и GetIPIntel оба предлагают его через API, вы можете попробовать. GetIPIntel предоставляет бесплатный сервис API, поэтому я предлагаю вам попробовать сначала.

Для OpenVPN, кто-то использовал уникальные значения MSS для идентификации VPN-соединений но настройка сложна, и теперь она может быть" исправлена".

в стратегии, которые вы упомянули в своих редакциях, не кажутся очень хорошей идеей, потому что вы столкнетесь со многими ложными срабатываниями. Отправка сканирования портов при подключении к службе займет много времени и ресурсов, прежде чем вы получите результаты.


вы можете использовать веб-API, которые отслеживают IP-адреса для вас, такие как:http://xioax.com/host-blocker/

есть даже библиотека Java:https://github.com/HiddenMotives/Java-VPNDetection


вы можете увидеть, что :

обнаружение VPN-соединения

но короткий ответ-Нет, нельзя.


вы можете загрузить список известных IP-адресов прокси и поиск локально, чтобы увидеть, если это VPN, откройте прокси etcs.

есть несколько коммерческих продуктов на рынке. IP2Proxy LITE является бесплатным, вы можете попробовать сразу.


  • получить (как-то) список IP прокси-серверов.
  • измерьте время пинга туда и обратно для пользователя. Помогает в онлайн-играх websocket. Игры воспроизводятся с ping под 50ms, поэтому вы можете отключить пользователей с ping около 100ms и выше с сообщением "извините, слишком большой пинг".

Да, вы можете определить, принадлежит ли IP VPN / proxy с помощью Шодан. Следующий код Python показывает, как это сделать:

import shodan

# Setup the API wrapper
api = shodan.Shodan('YOUR API KEY') # Free API key from https://account.shodan.io

# Lookup the list of services an IP runs
ipinfo = api.host(VISITOR_IP)

# Check whether the IP runs a VPN service by looking for the "vpn" tag
if 'tags' in ipinfo and 'vpn' in ipinfo['tags']:
    print('{} is connecting from a VPN'.format(VISITOR_IP))

вы также можете посмотреть список портов, чтобы определить вероятность того, что посетитель подключается от HTTP-прокси:

if 8080 in ipinfo['ports']:
    print('{} is running a web server on a common proxy port'.format(VISITOR_IP))