--- title: Docker Socket Proxy created: 2026-06-06 updated: 2026-06-06 type: app tags: [catalogue, reverse-proxy, docker, security, hardening] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://github.com/tecnativa/docker-socket-proxy] --- # 🔌 Docker Socket Proxy > **Proxy HTTP/HTTPS filtrant l'accĂšs Ă  l'API Docker Socket, Ă©crit en Python**. RĂ©putation : composant de sĂ©curitĂ© quasi obligatoire pour toute stack self-hosted qui monte `/var/run/docker.sock` dans des conteneurs tiers. ## 📋 Informations GĂ©nĂ©rales | Champ | Valeur | | :--- | :--- | | **Site web** | [github.com/tecnativa/docker-socket-proxy](https://github.com/tecnativa/docker-socket-proxy) | | **GitHub** | [tecnativa/docker-socket-proxy](https://github.com/tecnativa/docker-socket-proxy) | | **License** | Apache-2.0 | | **Langage** | Python 75.8%, Shell | | **Étoiles GitHub** | 2.5k ⭐ | | **DerniĂšre MAJ** | 2026-04 | | **CatĂ©gorie** | [[cat-reverse-proxy\|SĂ©curitĂ©]], Reverse Proxy, Docker | ## 📝 Description **Docker Socket Proxy** est un **reverse proxy minimaliste** placĂ© en amont du socket Docker Unix. Son rĂŽle : **appliquer une liste blanche d'API endpoints** autorisĂ©s (ex : GET /containers/json) afin qu'un conteneur compromis ne puisse pas escalader ses privilĂšges et prendre le contrĂŽle du daemon Docker. Le problĂšme qu'il rĂ©sout est critique : monter `/var/run/docker.sock` dans un conteneur (ce que font **Watchtower**, **Traefik**, **Portainer**, **Dozzle**, etc.) lui donne par dĂ©faut **un accĂšs root complet Ă  l'hĂŽte**. Un attaquant qui compromet l'un de ces conteneurs peut alors dĂ©marrer de nouveaux conteneurs privilĂ©giĂ©s, lire le filesystem hĂŽte, ou exfiltrer des secrets. Docker Socket Proxy **intercepte les requĂȘtes** et **refuse tout endpoint non explicitement autorisĂ©**. L'outil est extrĂȘmement lĂ©ger (image basĂ©e sur Alpine + script Python de ~300 lignes), **zĂ©ro configuration** par dĂ©faut, et proposĂ© en deux saveurs : l'originale (Tecnativa) et un fork **linuxserver** avec la mĂȘme philosophie. **Public cible** : **tous les utilisateurs self-hosted** qui montent le socket Docker dans des conteneurs. Devrait ĂȘtre systĂ©matique. C'est l'un des **quick wins sĂ©curitĂ©** les plus rentables du domaine. ## 🚀 Installation ### Option 1 : Docker Compose (standard) ```yaml # docker-compose.yml services: docker-socket-proxy: image: tecnativa/docker-socket-proxy container_name: docker-socket-proxy restart: unless-stopped environment: - CONTAINERS=1 # autoriser GET /containers - IMAGES=1 # autoriser les opĂ©rations sur les images - NETWORKS=1 - VOLUMES=1 - POST=0 # bloquer toutes les mĂ©thodes POST (lecture seule) volumes: - /var/run/docker.sock:/var/run/docker.sock:ro networks: - socket-proxy networks: socket-proxy: internal: true ``` > ⚠ **RĂ©seau `internal: true`** crucial : empĂȘche tout conteneur compromis d'exfiltrer via ce proxy. ### Utilisation depuis une app (exemple Traefik) ```yaml services: traefik: image: traefik:v3 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro # ❌ NON # ✅ Remplacer par : # On monte le proxy rĂ©seau au lieu du socket direct networks: - socket-proxy # Portainer, Watchtower, etc. pointent vers http://docker-socket-proxy:2375 ``` > ⚠ **Note** : la plupart des apps qui consomment l'API Docker (Portainer, Traefik) **parlent au socket Unix** — il faut des proxys TCP spĂ©ciques ([tecnativa](https://github.com/tecnativa/docker-socket-proxy) ou [socat](https://linux.die.net/man/1/socat)) ou des forks qui supportent HTTP. ### Option 2 : Variante Traefik Non applicable — ce n'est pas un reverse proxy HTTP public, c'est un **proxy interne** pour l'API Docker. ## ⚙ Configuration Initiale 1. **Choisir les endpoints autorisĂ©s** via variables d'environnement (par convention `=1`) 2. **MĂ©thodes** : `GET`, `POST`, `PUT`, `DELETE`, `HEAD`, `PATCH` (0 = bloquĂ©, 1 = autorisĂ©) 3. **Endpoints courants** : `CONTAINERS`, `IMAGES`, `NETWORKS`, `VOLUMES`, `SERVICES`, `TASKS`, `NODES`, `SECRETS`, `INFO`, `VERSION`, `EVENTS` 4. **Posture stricte recommandĂ©e** : n'autoriser que ce qui est strictement nĂ©cessaire ```bash # Exemple : lecture seule stricte (Watchtower) WATCHTOWER_MONITOR_ONLY=true WATCHTOWER_HTTP_API_METRICS=true ``` ## 🔀 Alternatives ### Open Source - **socat TCP→Unix** (sans filtrage, juste pour exposer en TCP) - **docker-socket-proxy linuxserver** : fork avec la mĂȘme philosophie - **Tailscale + socket exposure** : exposition via rĂ©seau privĂ© uniquement - **Rootless Docker** : solution plus radicale (mais incompatible avec beaucoup d'images) ### Comparaison des approches | Approche | Filtrage | ComplexitĂ© | CompatibilitĂ© | | :--- | :--- | :--- | :--- | | **Docker Socket Proxy** | ✅ GranularitĂ© fine | Faible | ⚠ NĂ©cessite proxy HTTP | | **Socket via rĂ©seau Tailnet** | ❌ Aucun | Moyenne | ✅ Universelle | | **Rootless Docker** | ❌ (mais pas root) | ÉlevĂ©e | ⚠ LimitĂ© | | **Pas de socket montĂ©** | ✅ Par construction | Variable | ❌ Apps qui en ont besoin KO | ### PropriĂ©taires (ce que ça remplace) - **Docker EE / Mirantis** : filtrage commercial - **Sysdig Secure / Falco** : runtime security (complĂ©mentaire, pas remplaçant) ## 🔒 SĂ©curitĂ© - ✅ **Liste blanche** par dĂ©faut : tout est bloquĂ© sauf ce qui est activĂ© - ✅ **MĂ©thodes HTTP** filtrables indĂ©pendamment - ✅ **Image minimaliste** (Alpine + Python) - ✅ **Pas de dĂ©pendances** rĂ©seau-sortant - ✅ **Open source auditable** : ~300 lignes de Python, facile Ă  relire - ⚠ **Ne protĂšge pas contre** : un attaquant qui peut envoyer des requĂȘtes *autorisĂ©es* malicieuses (ex : supprimer un conteneur via DELETE /containers/...) - ⚠ **À combiner avec** : [[app-fail2ban]], [[app-crowdsec]], monitoring d'API ## 📚 Ressources - [README GitHub](https://github.com/tecnativa/docker-socket-proxy) - [Discussion #45 sur la licence](https://github.com/Tecnativa/docker-socket-proxy/discussions/45) - [Guide de hardening Docker](https://docs.docker.com/engine/security/) - [Wiki selfh.st](https://selfh.st/apps/?tag=Reverse+Proxy) ## 🔗 Pages LiĂ©es - [[cat-reverse-proxy]] — CatĂ©gorie Reverse Proxy - [[securisation-home-lab]] — SĂ©curitĂ© - [[docker-compose]] — Orchestration de conteneurs - [[comparatif-reverse-proxy]] — Comparaison dĂ©taillĂ©e - [[app-traefik]] — Consommateur typique de l'API Docker - [[app-portainer]] — Consommateur typique de l'API Docker