web-dev-qa-db-fra.com

Comment détecter une connexion VPN ou proxy?

Je souhaite bloquer toutes les connexions à mon serveur utilisant un VPN ou un proxy. Est-il possible de détecter qu'une connexion VPN ou proxy est utilisée? Sinon, y a-t-il un moyen de vérifier si un VPN ou un proxy est utilisé? Enfin, y a-t-il quelque chose que je puisse interroger ou demander à l'utilisateur de vérifier s'il utilise un VPN ou un proxy afin que, si quelqu'un y parvient, je puisse essayer d'effectuer une vérification supplémentaire? Je n'ai besoin d'aucune information de la part de l'utilisateur, telle que son emplacement, son adresse IP réelle ou quelque chose du genre. Je veux juste interdire complètement les connexions des VPN ou des Proxies.

Edit: Je pensais que je pourrais potentiellement faire un test pour voir s’il existe des différences cohérentes entre le ping sur l’IP VPN et la latence détectable du client, mais cela semble assez peu fiable.

Edit2: Un serveur proxy ou VPN aurait probablement beaucoup plus de ports ouverts qu'une connexion domestique standard. Je pourrais donc utiliser le nombre de ports ouverts pour évaluer la probabilité d'une connexion provenant d'un VPN en exécutant un scan de port de la personne qui se connecte.

14
Zach Sugano

Malheureusement, il n’existe aucun moyen technique d’obtenir les informations souhaitées. Vous pouvez inventer des tests mais ceux-ci auront une très faible corrélation avec la réalité. Donc, soit vous ne capturez pas ceux que vous voulez, soit vous aurez un plus grand nombre de faux positifs. Ni peut être considéré comme logique.

Générer tout type de trafic en retour à partir d'un serveur Internet en réponse à un client entrant (une analyse de port, ou même un simple ping) est généralement mal vu. Ou bien, dans le cas d’une analyse de port, cela peut être encore pire pour vous, par exemple lorsque le client vit derrière un pare-feu central, le pire étant lorsque le client vient de derrière le pool de pare-feu de réseau du gouvernement central ...

Franchement, les interdictions basées sur IP (ou en fait, toute sorte de limitation visant les personnes qui ne possèdent pas exclusivement leur adresse IP publique: serveurs proxy, VPN, NAT appareils, etc.) sont irréalistes depuis longtemps, et alors que les pools IPv4 s'épuisent dans de nombreuses régions du monde, les fournisseurs de services Internet placent de plus en plus de clients derrière les pools NAT (le journal le plus important de cette semaine dans mon pays indique que le plus grand fournisseur de services Internet, une commencé à distribuer à ses clients des adresses IPv4 privées comme mode d’activité standard, et les utilisateurs doivent demander explicitement au fournisseur d’obtenir une adresse IP publique); il est donc de moins en moins utile de le faire. Si vous souhaitez interdire des clients, vous devez les interdire en fonction de votre identité (compte) et non en fonction de votre adresse IP.

15
Laszlo Valko

Pour ce faire, le moyen le plus simple consiste à utiliser un service externe, tel qu'une API, pour bloquer les utilisateurs VPN ou proxy. 

MaxMind et GetIPIntel les deux offres via l'API, vous pouvez essayer. GetIPIntel fournit un service d'API gratuit, je vous suggère donc de l'essayer en premier.

Pour OpenVPN, quelqu'un a utilisé des valeurs MSS uniques pour identifier les connexions VPN mais la configuration est compliquée et il est possible qu'elle soit maintenant "corrigée".

Les stratégies que vous avez mentionnées dans vos modifications ne semblent pas être une très bonne idée car vous rencontrerez de nombreux faux positifs. L'envoi des analyses de ports à chaque fois qu'elles se connectent à votre service demandera beaucoup de temps et de ressources avant que vous obteniez les résultats.

3
S W

Vous pouvez utiliser des API Web qui gardent une trace des adresses IP, telles que: http://xioax.com/Host-blocker/

Il existe même une bibliothèque Java: https://github.com/HiddenMotives/Java-VPNDetection

2
AbsoleVentil

Vous pouvez télécharger une liste d'adresses IP proxy connues et effectuer une recherche locale pour voir s'il s'agit d'un VPN, d'un proxy ouvert, etc.

Il existe plusieurs produits commerciaux sur le marché. IP2Proxy LITE est un logiciel gratuit que vous pouvez essayer immédiatement.

0
Michael C.

Oui, vous pouvez détecter si une adresse IP appartient à un VPN/proxy en utilisant Shodan . Le code Python suivant montre comment procéder:

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))

Vous pouvez également consulter la liste des ports pour déterminer la probabilité que le visiteur se connecte à partir d'un proxy HTTP:

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

Tu peux voir ça :

Détection de connexion VPN

Mais la réponse courte est non, vous ne pouvez pas.

0
Raphaël Vigée

La liste des noeuds de sortie de Tor est accessible au public . Vous voulez seulement des "noeuds de sortie" et il est disponible au format CSV. Cela devrait être complet et précis car il est généré directement à partir du répertoire Tor.

Une liste gratuite de procurations ouvertes est disponible sur iblocklist.com . Une liste libre qui inclut les proxies ouverts, les nœuds Tor et les points de terminaison VPN de ip2location.com .

Les deux derniers ont très probablement une couverture et une précision limitées, notamment en ce qui concerne les nœuds de sortie VPN - ils sont tout simplement trop nombreux. Certains fournisseurs adoptent une autre approche et considèrent tous les "sous-réseaux hébergés" (les sous-réseaux à partir desquels les FAI attribuent les adresses IP des clients aux serveurs hébergés) comme une sorte de VPN ou de proxy, les utilisateurs finaux devant se connecter à partir de sous-réseaux "consommateurs".

0
kravietz