Chez DYB, nous auditons rĂŠgulièrement des environnements de nos clients et il nâest pas rare de tomber sur la mĂŞme erreur : un service exposĂŠ directement sur Internet via Docker, sans aucune restriction, simplement parce que le dĂŠveloppeur a laissĂŠ un ports: "3000:3000" dans son docker-compose.yml.
Une mauvaise habitude, mais qui peut coĂťter cher.
â ď¸ Le problème : ports: "3000:3000"
Dans un fichier docker-compose.yml, on trouve souvent des lignes comme :
services:
app:
image: monapp
ports:
- "3000:3000"
Cela signifie : ÂŤ ouvre le port 3000 du conteneur et rends-le accessible sur toutes les interfaces rĂŠseau du serveur (0.0.0.0). Âť
đ RĂŠsultat : si le serveur est un VPS avec une IP publique, le service est accessible Ă nâimporte qui sur Internet en tapant http://ip_du_serveur:3000.
đ Pourquoi câest dangereux ?
- Bypass du firewall hôte : Docker ajoute automatiquement des règles
iptablespour publier les ports. MĂŞme si vous pensiez avoir un pare-feu restrictif (ufw,firewalld), Docker peut lâoutrepasser. - Exposition directe : votre API, base de donnĂŠes ou back-office peut se retrouver accessible sans authentification.
- Attaques automatisÊes : les scanners comme Shodan ou Censys trouvent très vite ces services, qui deviennent des cibles idÊales pour des attaques par force brute, des injections ou des ransomwares.
- Erreur courante en prod : beaucoup de dÊveloppeurs lancent leurs conteneurs sur un VPS de test⌠qui finit par hÊberger la prod, sans durcissement de la configuration.
â Les bonnes pratiques
1. Lier à localhost si accès local uniquement
ports:
- "127.0.0.1:3000:3000"
đ Le service nâest accessible que depuis la machine elle-mĂŞme. Parfait si vous comptez y accĂŠder via un reverse proxy (Nginx, Traefik, Caddy).
2. Ne pas publier de port du tout
Au lieu dâexposer le service, mettez-le sur un rĂŠseau Docker interne :
services:
app:
networks:
- internal
db:
networks:
- internal
networks:
internal:
driver: bridge
đ Seul un reverse proxy exposĂŠ vers Internet doit avoir des ports publiĂŠs.
3. Utiliser un reverse proxy unique
Un seul point dâentrĂŠe (Traefik, Nginx, Caddy) â tous vos services passent par lui, avec HTTPS et filtrage.
đ Ăa simplifie la sĂŠcuritĂŠ et centralise les règles dâaccès.
4. VĂŠrifier vos services
- Commande rapide :
ss -ltnppour voir quels services ĂŠcoutent et sur quelles interfaces. - Ne jamais supposer que ÂŤ Docker respecte mon firewall Âť â il ĂŠcrit ses propres règles.
đ Conclusion
Lâerreur ports: "3000:3000" paraĂŽt anodine⌠mais câest lâune des principales causes dâexposition accidentelle de services en production.
Sur un VPS, cela peut transformer un simple test en porte dâentrĂŠe ouverte sur Internet.
Chez DYB, nous recommandons systĂŠmatiquement :
- dâisoler vos services dans des rĂŠseaux internes,
- de limiter les bind Ă
127.0.0.1si nĂŠcessaire, - et dâexposer uniquement un reverse proxy sĂŠcurisĂŠ.
Câest un petit effort de configuration qui peut ĂŠviter une grosse faille de sĂŠcuritĂŠ.





0 commentaire