Salut les Patreons ! J'espère que vous êtes en forme !
Je suis en train de vous préparer un truc autour du car hacking mais ça va prendre encore un peu de temps. Alors en attendant, je vous propose aujourd'hui un petit tuto facile et rapide à mettre en oeuvre. Cela devrait bien vous aider pour tous ces moments où vous hésitez à ouvrir un lien parce que ça pue le phishing à plein nez.
Pour cela, j'ai une solution vraiment propre à vous proposer, qui est tout simplement de disposer d'un Firefox dans un conteneur Docker accessible directement depuis votre navigateur principal. Comme ça vous cliquez sur le lien suspect dans cette session jetable, ça s'ouvre dans un Firefox parallèle complètement isolé de votre vraie machine, et si ça vire au cauchemar vous tuez simplement le conteneur. Le reset complet se fait en quelques secondes à peine et vous pouvez repartir de zéro.
L'idée c'est de lancer une commande docker run, puis vous ouvrez https://localhost:3001/ dans votre Firefox normal, et vous tombez sur un autre Firefox qui tourne dans son bocal. Pas de X11 forwarding pourri à configurer ni de VNC client à installer mais juste une bonne vieille page HTTPS qui affiche le navigateur.
L'intérêt principal ici c'est vraiment l'isolation car ce Firefox conteneurisé n'a pas accès à votre répertoire home, ni à vos cookies, et encore moins à votre session Google, ou à vos extensions. Donc si un site vérolé essaye un petit drive-by download ou un exploit 0day sur votre navigateur, le pire qui peut vous arriver c'est qu'il pète le conteneur.
Donc après, vous redémarrez et c'est retour à l'état normal. Faut savoir que les chercheurs en sécurité utilisent déjà ça pour ouvrir des pièces jointes douteuses, que les marketeux s'en servent pour gérer 12 comptes publicitaires sans tracking croisé de cookies, et que les paranos comme vous et moi puissent cliquer sur les liens que des mecs bizarres envoient sur Discord sans flinguer leur session principale.
Après y'a quand même quelques petits inconvénients à connaître avant de se lancer dans l'aventure. Tout d'abord, les perfs graphiques sont dégradées par rapport à un Firefox natif. Ensuite, comme l'audio passe par le pipeline du navigateur, parfois ça crachote un peu sur les vidéos lourdes. Le copier-coller fonctionnera mais demandera quand même un clic sur un bouton dédié dans la barre latérale Selkies (je vous explique après ce que c'est), et la persistance n'est active que si vous mappez correctement le volume /config pour y conserver vos dossier utilisateur FF. Sans ça, vos onglets et bookmarks disparaitront à chaque redémarrage.
Mais passé ces petits détails, pour la vie privée pure c'est clairement un avantage. Après pour un usage quotidien c'est à doser parce que pas toujours pratique.
Installation en une commande
L'image officielle qu'on va utiliser c'est lscr.io/linuxserver/firefox:latest. En effet, depuis juin 2025, elle est basée sur Selkies (c'est un outil pour faire de l'accès bureau à distance en streaming... c'est venu remplacer KasmVNC, dont je reparle plus bas).
Voici la commande minimale pour démarrer :
docker run -d --name=firefox -e PUID=1000 -e PGID=1000 -e TZ=Europe/Paris -e LC_ALL=fr_FR.UTF-8 -p 3001:3001 -v /home/$USER/firefox-config:/config --shm-size=1gb --restart unless-stopped lscr.io/linuxserver/firefox:latest
Le --shm-size=1gb n'est pas optionnel. Si vous l'oubliez, YouTube et la plupart des sites lourds vont faire planter le navigateur. Le port 3001 c'est l'accès HTTPS (avec certificat auto-signé, donc Firefox principal va râler, mais c'est normal).
Le port 3000 existe aussi mais c'est du HTTP en clair, donc c'est à réserver derrière un reverse proxy genre SWAG. Et gaffe à votre dossier firefox-config qu'il faudra penser à créer avant (j'ai mis /home/ mais chez moi, sous macOS c'est /Users/).
Une fois lancé, vous ouvrez https://localhost:3001/ et vous tombez sur Firefox.
La version docker-compose, plus propre
Pour quelque chose de versionnable et reproductible, le docker compose est un peu mieux. Créez un répertoire sur votre disque dur et mettez y ce fichier docker-compose.yml :
services:
firefox:
image: lscr.io/linuxserver/firefox:latest
container_name: firefox
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Paris
- LC_ALL=fr_FR.UTF-8
- CUSTOM_USER=korben
- PASSWORD=changemoi
- HARDEN_DESKTOP=true
- HARDEN_OPENBOX=true
volumes:
- ./firefox-config:/config
ports:
- 3001:3001
shm_size: "1gb"
restart: unless-stopped
Puis docker compose up -d et c'est parti mon kiki. Le volume ./firefox-config garde votre profil Firefox entre les redémarrages, ainsi que vos bookmarks et vos extensions Firefox installées normalement depuis le store Mozilla. Après si vous voulez recommencer à zéro, vous virez simplement le dossier firefox-config et vous relancez, machine virtuelle. Vous pouvez aussi créer plusieurs firefox-config-1, 2, 3...etc et changer le chemin dans le .yml.
Notez également que j'ai mis un user et un mot de passe sur le Firefox, comme ça, seul vous pouvez y accéder. Pensez à le changer quand même.
Après si vous avez besoin d'outils tiers en plus du navigateur (genre filezilla ou un éditeur de code), c'est proot-apps qui les posera dans $HOME, ce qui leur permettra de survivre aux mises à jour de l'image.
Le hardening qu'il faut absolument activer
Y'a un piège sérieux que la doc mentionne vite fait mais qui, je trouve, mérite vraiment d'être souligné. En fait l'interface web embarquée inclut un terminal avec sudo passwordless activé. Donc tout utilisateur qui accède à votre Firefox conteneurisé peut devenir root dans le conteneur en deux clics. Cela veut dire que si vous l'exposez sur votre réseau ou pire sur Internet sans hardening préalable, c'est un boulevard ouvert.
La parade c'est HARDEN_DESKTOP=true qui active tous les principaux verrous d'un coup. Ça désactive sudo, ça vire les terminaux, et surtout ça bloque xdg-open et exo-open qui pourraient lancer des trucs hors conteneur. Et pour aller plus loin, ajoutez HARDEN_OPENBOX=true qui neutralisera les raccourcis clavier dangereux genre Alt+F4, désactivera le clic droit, et masquera le bouton de fermeture. Vous gardez comme ça un Firefox utilisable, mais l'utilisateur ne pourra plus s'évader pour faire mumuse avec le système interne du Docker.
Après si vous êtes des fifous que vous voulez exposer ça sur Internet, oubliez le basic auth CUSTOM_USER/PASSWORD et mettez le plutôt derrière un reverse proxy SWAG avec une vraie auth OAuth2 ou Authelia. Le basic auth, c'est bon pour votre LAN avec des potes de confiance ou la famille, mais pas plus.
SealSkin, le bonus qui change tout
Maintenant je voudrais quand même vous parler de SealSkin. Il s'agit d'une extension navigateur, dispo pour Chrome et Firefox, qui intercepte certaines actions sur votre navigateur principal et les redirige vers le conteneur isolé. Comme ça, vous cliquez sur un lien marqué comme suspect, et l'extension se charge de détourner le clic pour que le lien s'ouvre dans votre Firefox containerisé. Idem pour les téléchargements, qui atterrissent dans le /config du conteneur au lieu de votre Downloads local.
Ça permet de transformer l'isolation dans un conteneur en réflexe permanent plutôt que d'avoir d'un truc que vous activez manuellement quand vous y pensez. Faut juste héberger le serveur SealSkin à côté, et ajouter l'extension à votre vrai Firefox.
Une fois que vous y avez goûté, c'est dur de revenir en arrière, vous verrez.
Le piège iOS et le tag :kasm
Après Selkies (pour le remote desktop) c'est top sur desktop, mais sur iPad ou iPhone, ça galère un peu. Et malheureusement, sous iOS, y'a pas de moyen propre de taper Ctrl+Tab ou Esc parce que le tactile ne gère pas bien ces raccourcis.
Alors si VRAIMENT vous voulez surfer depuis iOS, basculez votre install de Firefox sur le tag kasm qui utilise l'ancien backend KasmVNC, qui est plus lent mais mieux adapté au tactile :
docker pull lscr.io/linuxserver/firefox:kasm
Après tout le reste de la conf marchera pareil. Vous changez juste l'image. C'est pas top d'avoir deux backends pour ça, mais on ne peut pas faire autrement pour le moment.
Voilà, maintenant vous avez un super Firefox jetable qui vit sur son île, bien isolé. Comme ça, vous n'aurez plus de raison d'hésiter avant d'ouvrir un lien douteux.
Amusez-vous bien et encore merci pour le soutien !