Le forward de port dynamique avec SSH/SOCKS
Derrière ce nom barbare se cache une fonctionnalité très utile de SSH, que nous allons aborder à l’aide de l’exemple suivant :
Comment accéder aux services d’un réseau privé (mail, annuaire, etc.) depuis une connexion Internet classique ?
Le tout sans accès VPN, sinon la question ne se pose pas :)
Le protocole SOCKS
SOCKS est un protocole réseau permettant de router des connexions (TCP ou UDP) initiées par des applications clientes, via un serveur proxy. On peut faire l’analogie avec un proxy HTTP, sauf qu’au lieu d’analyser les en-têtes des requêtes HTTP, un proxy SOCKS agit au niveau de la couche session (5) du modèle OSI, ce qui le rend utilisable par une multitude de protocoles.
Mise en place d’un proxy SOCKS via tunnel SSH
Il existe de nombreuses applications permettant de mettre en place un proxy SOCKS, comme l’indique la page Wikipedia dédiée au protocole. Selon les implémentations, il est possible de mettre en place des scénarios complexes d’authentification et de routage, mais dans notre cas nous allons utiliser SSH, le but étant simplement de réaliser un routage de port dynamique. Pour mieux comprendre les commandes qui vont suivre, jetons un oeil au schéma suivant :
Depuis un poste client, nous voulons accéder de façon transparente aux services du réseau private.tld et nous disposons pour cela d’un accès au bastion gate.public.tld, sur lequel se trouve un serveur SSH en écoute sur le port 9999. Le but de la manipulation consiste à établir un tunnel entre le poste client et le bastion, de façon à ce qu’il transmette toutes les requêtes à destination du réseau protégé. Comme il n’y a pas de miracles, il faut bien sûr que les accès du bastion vers le réseau interne soient autorisés. Dans ce scénario, le serveur SSH du bastion va faire office de proxy SOCKS. Cette utilisation un peu particulière nécessite de mettre en place au préalable un tunnel SSH entre le client et le proxy, via la commande :
$ ssh -NvD 1080 user@gate.public.tld -p 9999
Ainsi, toutes les requêtes reçues sur le port 1080 de la machine cliente seront transmises au bastion via le tunnel, puis redirigées vers les services du réseau interne.
NB : L’option -v n’est pas indispensable, mais il est préférable de l’activer dans un premier temps pour visualiser le traffic passant dans le tunnel.
Ça y est, tout est en place ! Il suffit maintenant de configurer les applications clientes pour utiliser le proxy SOCKS. De nombreuses applications proposent en standard une configuration SOCKS, mais si ce n’est pas le cas il est possible de passer par les outils socat ou tsocks. Pour l’exemple, nous allons paramétrer Firefox.
Configuration de Firefox
Configuration standard
Depuis la panneau de paramétrage réseau, il faut configurer un proxy avec les paramètres suivants :
- Cocher la case Configuration manuelle du proxy
- Hôte SOCKS : localhost
- Port : 1080
- Cocher la case SOCKS v5
Mais si l’on essaie ensuite de se connecter à l’adresse http://mail.private.tld, la connexion échoue. En effet, les requêtes DNS ne passent pas par le proxy, et ne sont donc pas résolues par le serveur DNS du réseau interne. Pour y remédier, il faut afficher la fenêtre de paramétrage avancé de Firefox en tapant about:configdans la barre de navigation, et placer l’option network.proxy.socks_remote_dns sur true.
Module FoxyProxy
FoxyProxy est un module Firefox très utile permettant de gérer différentes configurations proxy. Après l’avoir installé, on peut saisir une configuration similaire à celle décrite précédemment. L’intérêt de ce module réside surtout dans le fait qu’il est possible d’affecter un proxy particulier en fonction de l’url cible. Dans notre cas, nous voulons restreindre l’utilisation du proxy SOCKS aux URLs du domaine private.tld. Après avoir sélectionné le mode Utiliser les proxies basés sur leurs motifs et propriétés prédéfinis, on ajoute le motif suivant à l’instance correspondant au proxy SOCKS :
- Motif d’URL : .*://.*\.private\.tld(:[0-9]*)?/.*
- Format du motif : Expression régulière
Pour résoudre le problème de résolution DNS, il faut cocher la case Utiliser un proxy SOCKS pour les résolutions DNS de l’onglet Paramètres généraux.
C’est terminé, vous avez maintenant accès aux services du réseau interne !

Commentaires récents