FoxyProxy : accès facile aux ressources privées

Jérémy Lecour

05 février 2026

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.

05 février 2026 à 23:00

DebConf 2025

Jérémy Lecour

25 octobre 2025

Ces 2 dernières semaines (c’était du 7 au 19 juillet), la communauté Debian avait posé ses valises (et toute sa geekerie) à Brest pour le DebCamp et la DebConf 2025. Et grâce à un déplacement organisé par Evolix (mon employeur) j’ai pu y participer pleinement.

Une DebConf est une conférence dédiée à la distribution Debian, organisée par la communauté. Elle a lieu tous les ans dans une ville différente du monde. C’est l’occasion pour quelques centaines de personnes de se rencontrer physiquement pour des discussions, travaux, présentations, et moments sociaux. Elle est reconnue comme étant un élément clé dans la cohésion de cette communauté globale. Généralement la DebConf se déroule du lundi au samedi avec un planning dense de présentations et quelques moments plus détendus pour favoriser la socialisation. Elle est souvent précédée par une semaine de DebCamp, beaucoup plus informel qui permet à des équipes spécialisées de se retrouver pour des sessions de travail en face-à-face, organisées ou impromptues

Ma première participation à une DebConf était en 2017 à Montréal. Depuis j’ai participé à l’organisation de plusieurs Mini DebConf (Toulouse 2017, Marseille 2019, Toulouse 2024). Ce sont des versions plus modestes et plus courtes, mais l’esprit reste identique.

Sans grande poésie je vais passer en revue les différents aspects qui m’ont marqué pendant ces 12 jours.

Travaux internes

Les quelques personnes d’Evolix qui étaient là ont pu se réserver quelques heures de travail, plus ou moins focalisées sur Debian et des projets internes en cours. On n’a rien révolutionné, mais on a pu faire avancer les choses sur plusieurs points. C’était cool d’avoir une occasion supplémentaire de le faire car dans le feu du quotidien, ça n’arrive pas si souvent que ça. Personnellement j’ai très peu gardé le contact avec le reste de l’activité de la boîte. J’avoue avoir beaucoup de mal à être dans deux dynamiques à la fois.

Video-team

J’avais très envie de mettre un peu les pieds dans l’équipe vidéo de Debian. C’est un pilier des événements car c’est ça qui fait que les présentations sont filmées pour être diffusées en direct puis disponibles au visionnage. Ils ont mis sur pieds il y a bien longtemps et raffinent année après année un dispositif professionnel de captation, de mixage, de diffusion… Ça résonne particulièrement avec mes hobbies donc je voulais m’impliquer plus. J’ai suivi leur formation pour la manipulation en direct : technicien son, opérateur caméra et réalisateur. J’ai pu assurer un de ces rôles pendant une quinzaine de sessions. Au delà de l’utilité pour la conférence, j’ai appris plein de choses en posant mille questions aux vétérans. La prochaine étape pourrait être de rentrer plus dans les coulisses. Ça sera peut-être pour une prochaine fois.

Contenu

Les contenus et les sujets présentés pendant une DebConf sont très variés mais tournent exclusivement autour de la distribution. Certaines pésentations sont très techniques et pointues, d’autres sont orientées sur la communication, la gouvernance, la diversité, la communication… Il y a en pour tous les goûts. Il arrive que je sois dans une salle et qu’une présentation me parle plus que la moyenne, mais généralement je me sens moyennement connecté car je n’ai pas un rôle central dans cette communauté. Je ne suis pas mainteneur de paquets, ni aucune autre équipe. Voici quelques présentations qui m’ont intéressé ou marqué :

DayTrip

Généralement en milieu de conférence, une journée spéciale — le Day Trip — permet à tout le monde de s’écarter des salles de travail et de présentation, pour aller passer une journée plus touristique. Il y a souvent plusieurs choix possibles. J’ai choisi l’option de la journée de balade à vélo sur l’Île d’Ouessant. Après 1h30 d’une traversée en bateau qui a tracassé l’estomac de quelques personnes, on a été accueilli par un grand soleil et des vélos rouges. Une belle crêperie a pris soin de nos papilles et nous a donné des forces pour arpenter l’île. On y a rencontré quelques chèvres, moutons et vaches, une végétation visiblement influencée par un climat marin rigoureux et plusieurs phares ou vigies. Les coups de soleil ont surpris les maladroits qui n’avaient pas anticipé.

Soirée « Cheese & Wine »

Autre tradition depuis 2004, une soirée est dédiée au partage de denrées alimentaires variées, par toutes les personnes intéressées. Ça va bien-sûr au-delà du vin et du fromage, même s’ils restent les composants phares de la soirée. Au total ce sont des dizaines de kilos de fromages et de litres de vin (ou autres alcools plus ou moins forts) qui ont été engloutis en 3 heures, après un après-midi entier nécessaire à la découpe, étiquetage, présentation… Anecdote marseillaise ; à Montréal nous avions apporté du pastis et des non connaisseurs s’étaient lancés dans une dégustation sans eau ajoutée. Ça nous avait fait bien rire à l’époque (plus qu’eux), donc cette année j’avais mis une étiquette explicite sur la bouteille : « add water : 5×1 ». Il faut croire que les gens ne lisent pas, car très peu d’eau a été ajoutée au super « Pastis de la Plaine » apporté par Grégory. Pour ma part, j’ai abusé d’un Parmesan de 150 mois, de la caïpirinha préparée par les brésiliens, de Gins de Martinique et de Suisse (et oui !). Je suis rentré repu et saoul, mais dignement !

Les langues

Il y avait des personnes de plus de 50 pays différents. Évidemment l’anglais est la langue de référence dans ces cas-là, mais occasionnellement des groupes se replient temporairement sur leur langue commune. On a beaucoup entendu d’allemand, de français, de portuguais/brésilien… On peut noter l’effort important que cela demande aux personnes dont l’anglais n’est pas la langue maternelle ou une langue massivement enseignée.

Notre présentation

Grégory et moi travaillons depuis plusieurs mois à une présentation de la manière dont nous maintenons à jour nos serveurs sous Debian. Après plusieurs itérations, nous avons préparé une version en anglais qui couvrait en 40 minutes les mises à jour mineures (de sécurité) et les majeures (changement de version). Un mauvais virus a malheureusement empêché Grégory de faire la présentation avec moi. J’ai l’impression que ça s’est bien déroulé. Il y a eu plusieurs questions pertinentes sur place et plus tard. La captation vidéo est de mauvaise qualité. Les diapos ont été coupées et le cadrage n’est pas super. Et comme pour quelques autres présentations, le son a été dégradé par l’enregistrement. Nous présenterons d’ailleurs (en français) ce même sujet au Capitole du Libre à Toulouse le samedi 14 novembre 2015.

Rencontres

La DebConf est surtout un événement social. C’est l’occasion de rencontrer ou retrouver des gens qui sont directement responsables de parties de la distribution ou de la communauté. Nous avons notamment pu discuter avec Lee Garrett qui maintient Ansible dans Debian. Nous avons mis en évidence que la version de Debian 13 est incompatible avec des serveurs en Debian 10 ou inférieur. Ça permis de discuter de solutions ou contournements possibles. J’ai aussi longuement discuté avec des personnes qui font un métier d’hébergeur/infogérant comme Evolix. Nous avons partagé des approches, techniques, difficultés… En dehors des paquets et du code on retrouve la très grande diversité de Debian au travers des humains qui la font vivre ; religions, langues, cultures, identités de genre… Dans un monde polarisé, chargé d’antagonismes, ça fait du bien de trouver de l’ouverture (d’esprit, de bras, de code).

25 octobre 2025 à 23:00

« Restriction » entre VirtualHosts Apache

Blog Evolix

29 août 2025

L’utilisation de VirtualHosts séparés en fonction des noms de domaine est très répandue sur les serveurs Apache multi-sites. Il est intéressant de se pencher sur les mécanismes de restriction entre VirtualHosts, notamment dans le cas d’une connexion HTTPS où il y a eu récemment un renforcement de ce mécanisme (à partir de la version 2.4.64 sortie en juillet 2025) qui peut causer des changements de comportement.

Cas d’une connexion HTTP non chiffrée

Même si ce cas est de moins en moins courant, il est intéressant de rappeler le mécanisme de base pour une connexion HTTP non chiffrée : le seul moyen pour Apache de sélectionner le bon VirtualHost lors d’une requête client est de se baser sur l’entête HTTP Host (obligatoire à partir de HTTP/1.1). Voici un exemple avec netcat :

$ echo -e "GET / HTTP/1.1\r\nHost: www.debian.org\r\n\r\n" | nc www.debian.org 80
HTTP/1.1 302 Found
…

En conséquence, dans le cas d’une connexion HTTP, on peut accéder à n’importe quel VirtualHost si l’on connaît les options ServerName et ServerAlias, il n’y a pas spécialement de « restriction ». Évidemment on peut préciser des options dans le VirtualHost comme Require all denied mais c’est un autre sujet.

Rappel du fonctionnement de SNI

Avec HTTPS, il existe l’extension SNI qui consiste à ce qu’une requête client indique un nom de domaine AVANT la partie chiffrement. Cela permet notamment à Apache de sélectionner le bon certificat SSL avant de passer à la phase de chiffrement.

Pour faire une requête avec SNI, on peut utiliser l’option -servername de la commande openssl s_client :

$ openssl s_client -connect 130.89.148.77:443 -servername www.debian.org

Ainsi si l’on fait un tcpdump, on verra passer en clair « www.debian.org » au début de l’échange :

# tcpdump -s0 -XX -ni any port 443
…
    0x00c0:  002f 00ff 0100 00b0 0000 0013 0011 0000  ./..............
    0x00d0:  0e77 7777 2e64 6562 6961 6e2e 6f72 6700  .www.debian.org.
    0x00e0:  0b00 0403 0001 0200 0a00 1600 1400 1d00  ................
…

Évidemment les navigateurs web modernes utilisent SNI depuis des années, sinon une bonne partie des sites Internet souvent hébergés derrière une même adresse IP ne fonctionnerait pas.

Cas d’une connexion HTTPS

Apache a un mécanisme de restriction pour empêcher d’accéder à un VirtuaHost qui ne correspond pas au SNI présenté. Cela va renvoyer une erreur 421 Misdirected Request :

$ echo -e "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n" | openssl s_client -connect 130.89.148.77:443 -quiet -servername www.debian.org

HTTP/1.1 421 Misdirected Request
<title>421 Misdirected Request</title>
<h1>Misdirected Request</h1>
<p>The client needs a new connection for this
request as the requested host name does not match
the Server Name Indication (SNI) in use for this
connection.</p>

Pour être précis, cela n’impose pas forcément une correspondance avec le certificat SSL, mais si l’on envoie un entête HTTP Host correspondant à un autre VirtualHost, on sera bloqué.

On peut donc distinguer deux mécanismes distincts :

  1. Apache va sélectionner le « meilleur » VirtualHost qui correspond au SNI présenté (et lui envoyer le certificat SSL correspondant à l’option SSLCertificateKeyFile du VirtualHost)
  2. Une fois qu’Apache a sélectionné le VirtualHost, il n’autorise d’utiliser l’entête HTTP Host que pour un nom de domaine valide pour ce VirtualHost (donc dans ServerName ou ServerAlias)

Une particularité c’est le « VirtualHost par défaut » : si l’on indique un SNI qui ne correspond à rien, on va être renvoyé vers le VirtualHost par défaut, que l’on pourra solliciter avec n’importe quel nom de domaine… sauf ceux présents dans les autres VirtualHosts !

Restriction renforcée à partir d’Apache 2.4.64

Si l’on n’utilise pas SNI, jusqu’ici Apache ne faisait pas de restriction particulière : on est renvoyé vers le « VirtualHost par défaut », et l’on peut solliciter n’importe quel nom de domaine et accéder à n’importe quel VirtualHost.

$ echo -e "GET / HTTP/1.1\r\nHost: www.debian.org.fr\r\n\r\n" | openssl s_client -connect 130.89.148.77:443 -quiet
HTTP/1.1 200 OK

Mais dans le cadre de la correction de la faille CVE-2025-23048, Apache 2.4.64 a patché (ahah) son code pour étendre la restriction exposée un peu plus haut, voici le patch : https://github.com/apache/httpd/commit/c4cfa50c9068e8b8134c530ab21674e77d1278a2

Le patch est assez simple : le code qui renvoie le 421 Misdirected Request a simplement été déplacé pour s’appliquer aussi au cas sans SNI.

Ainsi, à partir d’Apache 2.4.64, la requête précédente devrait donner :

$ echo -e "GET / HTTP/1.1\r\nHost: www.debian.org.fr\r\n\r\n" | openssl s_client -connect 130.89.148.77:443 -quiet
HTTP/1.1 421 Misdirected Request

Cela n’est pas encore le cas car a priori le serveur hébergeant « www.debian.org » tourne sous Debian 12 (bookworm) avec Apache 2.4.62.

Apache 2.4.65 est la version actuellement présente en Debian 13 (trixie) et dans Debian 11 (bullseye) depuis mi-août (via une mise à jour de sécurité LTS). Apache 2.4.65 devrait arriver dans Debian 12 (bookworm) le 6 septembre 2025 (sortie de Debian 12.12). On peut voir cela sur https://packages.debian.org/apache2

En pratique, chez nous ce changement a nécessité quelques adaptations de configuration :

par admin le 29 août 2025 à 12:17