Как вы обнаруживаете 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
вы можете загрузить список известных 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))