FoxyProxy : accès facile aux ressources privées

Première publication : 2026-02-06

Lorsqu’on souhaite utiliser des interfaces web qui ne sont accessibles que depuis un certain réseau (et qu’on ne peut pas être directement dans ce réseau, physiquement ou via un VPN) il y a plusieurs moyens.

Proxy HTTP

Dans certains cas on peut mettre un proxy HTTP en bordure du réseau (par exemple HAProxy), accessible depuis l’extérieur. Celui-ci va exposer le service interne à l’extérieur, tout en appliquant des logiques de filtrage. Mais souvent, on ne souhaite pas du tout exposer de tels services, même avec un filtrage par IP ou authentification.

Redirection de port par SSH

Si on dispose d’un bastion ou d’un serveur de rebond (à la fois dans le réseau publique et dans le réseau interne), on peut aussi utiliser le principe du tunnel SSH. On démarre une connexion SSH vers le serveur intermédiaire. Cette connexion SSH ouvre un port local pour lequel il va transmettre le trafic avec un certain port distant :

$ ssh -L <LOCAL_PORT>:<REMOTE_HOST>:<REMOTE_PORT> <FORWARD_HOST>`

Par exemple, ssh -L 8443:192.168.2.1:443 203.0.113.1 permettra se se connecter sur https://127.0.0.1:8443 pour en réalité contacter https://192.168.2.1:443 en passant par 203.0.113.1.

C’est bien mais limité ; on n’a qu’un seul port (à moins de faire plusieurs -L XXX), l’hôte de connexion est 127.0.0.1 au lieu de l’hôte réel et ça peut causer des soucis de certificats…

Redirection dynamique par SSH

Il est aussi possible d’utiliser le « dynamic forwarding » de SSH. On ouvre aussi une connexion vers son hôte intermédiaire, mais cette connexion servira de proxy SOCKS5.

En configurant son navigateur pour utiliser ce proxy, on y fera passer tout le trafic voulu comme pour une connexion directe. : ssh -D LOCAL_PORT FORWARD_HOST.

C’est très bien mais fastidieux car les navigateurs courants présentent des interfaces très limitées pour la configuration. Et si on ne veut pas que tout le trafic du navigateur passe par ce proxy on se retrouve à activer/désactiver ça en permanence.

Heureusement, il existe l’extension FoxyProxy qui permet de le faire de manière conditionnelle et plus ergonomique (Merci à Laurent Guerby de m’avoir fait découvrir ça pendant le FOSDEM 2026).

Il y a plusieurs mode pour l’utilisation de FoxyProxy : global, par onglet ou par motif d’URL. Si les interfaces utilisées sont sur des domaines ou IP fixes et peu nombreuses, le mieux est d’utiliser des motifs d’URL.

Une fois FoxyProxy installé dans votre navigateur, il est conseillé de l’épingler dans la barre d’outils du navigateur. On accède alors facilement à ses fonctionnalités et sa configuration.

La configuration est accessible par l’icone de l’extension, puis le bouton « Options ». On crée alors un ou plusieurs proxys. Voici un exemple de configuration :

  • Nom : localhost:9090
  • Type : SOCKS5
  • Hostname : 127.0.0.1

Dans la section « Proxy by Patterns » on ajoute autant de lignes que souhaité, par exemple :

  • Proxy By Patterns : Include / RegExp
  • Nom : 10.42.*.*
  • Modèles : ^(http|ws)s?://10\.42(\.\d+)(\.\d+)/

On active ensuite le mode Proxy by Patterns dans le menu déroulant de l’extension.

Si vous activez la fonctionnalité Proxy DNS vous utiliserez alors la résolution DNS du serveur de rebond (y compris les entrées de /etc/hosts).

Mise en pratique

Pour l’ouverture de la connexion SSH, vous pouvez le faire avec la ligne de commande complète : ssh -D 9090 203.0.113.1. On peut aussi ajouter une entrée dans la config SSH locale (à laquelle vous pouvez évidemment ajouter toutes les options utiles ; User, Port, clés SSH…) :

# vim ~/.ssh/config
[…]
Host bastion-forward
    Hostname 203.0.113.1
    DynamicForward 9090
[…]

On peut alors simplifier la connexion :

$ ssh bastion-forward

En se rendant sur une URL qui correspond aux motifs configurés, ou si vous êtes sur un onglet concerné, ou si vous avez activé le mode global, votre trafic sera dirigé sur le proxy SOCKS5 local et passera par votre connexion SSH.