Proxy SOCKS via SSH
Posté le 16. Juin 2022 • 5 minutes • 871 mots • Autres langues: English
Dans cet article, je vais vous présenter le concept de proxy et ses usages. Puis je vous montrerai une méthode simple pour mettre en place un Proxy SOCKS au travers d’un tunnel SSH. Cet article n’a pas vocation à anonymiser une connexion internet. L’objectif ici est d’accéder à un autre réseau pour contourner les limites d’un pare-feu ou bien accéder à des services, interfaces web… disponibles sur cet autre réseau.
Qu’est-ce qu’un proxy ?
Proxy signifie en français mandataire, donc c’est un serveur (autrement dit une autre machine) auquel vous allez envoyer des données et auquel vous donnez “mandat” pour acheminer ces données.
Ce qui signifie que vous devez avoir une confiance absolue dans le serveur proxy que vous utilisez.
Dans le cadre d’un proxy filtrant d’entreprise ou d’école par exemple, toutes vos données de navigation peuvent être lues, sachez-le. Si vous souhaitez vous servir d’un proxy “anonymisant” public/ouvert (ne le faites jamais…) c’est la même chose.
L’utilité d’un proxy
Il y a beaucoup d’usages à un proxy mais je vais m’arrêter à 4 usages que j’estime être les principaux :
- Le proxy filtrant : présent majoritairement dans les entreprises et écoles, il permet d’appliquer des règles de filtrages limitant l’accès à certaines URL par exemple.
- Le proxy de “contournement” dont l’objectif est le contraire du précédent. On utilise le proxy comme un intermédiaire, il est situé sur un autre réseau (un autre pays, chez vous, dans un DC…) et permettra de ne plus être affecté par les règles de filtrage en place sur le réseau où vous êtes physiquement présent.
- Le proxy “anonymisant”. Je n’aime pas trop ce terme car en réalité un simple proxy peut être facilement “remonté”. Pour cet usage spécifique d’un proxy, on utilisera de préférence une chaîne de plusieurs proxy (un peu comme TOR ) et on couplera cette méthode à du VPN par exemple. Mais ce n’est pas le sujet de mon article.
- Le reverse proxy qui est une application bien particulière. Généralement placé devant un serveur web, il permet à des utilisateurs d’accéder à des serveurs d’un réseau interne et privé en toute transparence (d’où la notion de proxy inverse). Les serveurs reverse proxy HTTP (NGINX, APACHE…) sont un maillon crucial pour le load-balancing (HAProxy) ou encore pour les architectures microservices à base de conteneurs (Docker…).
Proxy SOCKS via un serveur SSH
Ceci étant dit, rentrons un peu dans la technique et revenons sur ce qui nous intéresse aujourd’hui : la mise en œuvre d’un proxy SOCKS au travers d’un tunnel SSH !
À l’instar de la création d’un tunnel SSH qui se fait avec la simple option -L
de SSH, le démarrage d’un proxy SOCKS SSH nécessite juste d’utiliser l’option -D
. Cette dernière active la fonctionnalité de “transfert dynamique” de SSH qui supporte les protocoles SOCKS4 et SOCKS5.
Avec cette option -D
et un paramétrage de votre navigateur (voir ci-dessous), votre connexion SSH sera alors un vrai proxy SOCKS ! Il permettra à votre navigateur Internet de dialoguer au travers d’un tunnel SSH chiffré avec la carte réseau du serveur SSH distant comme si c’était la sienne.
Cela signifie que l’intégralité des ressources WEB accessibles au serveur distant le seront désormais pour votre navigateur. Comme si vous êtiez présent sur le réseau. Et votre identité pour les sites visités sera celle du serveur distant également (faites le test en visitant monip.io après configuration !).
Allez, vous ne tenez plus et le CTRL+C
vous démange alors voici un exemple simple de commande à lancer :
ssh user@REMOTE_HOST -D 8080
- Le port (ici 8080) est libre
- Utilisez l’option
-f
de SSH si vous souhaitez mettre la commande en background
Ensuite, dans votre navigateur, rendez-vous dans les paramètres réseau afin d’activer le serveur SOCKS en renseignant le port sélectionné. Exemple ici pour Mozilla Firefox :
Le tour est joué ! Accédez désormais à n’importe quelle interface WEB présente sur le LAN du serveur distant via votre navigateur.
Bonus
Vous vous souvenez tous·tes de ce bon vieux modèle OSI, pas vrai ? Pour rappel, le voici :
Un proxy est applicatif, il agit donc au niveau de la couche 7 applicative. Les protocoles VPN par exemple agissent généralement beaucoup plus bas, sur la couche 3 Réseau (voire 2).
Inutile donc de chercher la trace d’un proxy par des commandes réseau telles que traceroute
, vous ne le verrez pas.
Du coup pour configurer un proxy ou vérifier qu’il y en a un en place sur la machine que vous utilisez, cela se fait :
- au niveau de votre OS
- au niveau de votre navigateur web
- au niveau d’un client SSH
- … Bref, ça se fait au niveau applicatif. Souvenez-vous en 👍
Aller plus loin …
Je vous recommande vivement de compléter cette lecture par le visionnage de la vidéo de l’excellent Yves Rougy et que j’ai découverte en réalisant mon article. Vous la trouverez ici !
Il vous montre également comment mettre en œuvre un proxy SOCKS mais il aborde surtout le sujet du tunnel SSH si ça vous intéresse et il explique même parfaitement l’option -R
, pas simple à comprendre. Bref, foncez !