Lorsque l’on commence à multiplier les services conteneurisés sur son propre serveur ou VPS, la gestion manuelle des ports et des certificats SSL devient rapidement un cauchemar de maintenance et de sécurité.

Sécuriser Docker avec Reverse Proxy : Portainer, Nginx Proxy Manager et Cloudflare

Publié par Bastien Brousse • Temps de lecture : 6 min

Savoir sécuriser Docker avec reverse proxy est une étape indispensable dès que l’on commence à héberger plusieurs services conteneurisés sur son serveur. Exposer directement des ports comme 8080, 9000 ou 3000 sur le web public sans chiffrement adéquat constitue un risque majeur pour votre infrastructure.

Dans cet article complet, vous allez apprendre à sécuriser vos conteneurs Docker grâce à un reverse proxy performant (Nginx Proxy Manager), couplé à l’orchestrateur Portainer et à la protection DNS de Cloudflare. Pour explorer mes autres travaux en administration système et développement web, n’hésitez pas à consulter mes projets d’infrastructure et de cybersécurité.


1. Architecture globale pour sécuriser vos conteneurs Docker

Au lieu d’exposer chaque application sur un port hôte différent, seul Nginx Proxy Manager écoutera sur les ports 80 et 443. L’intégralité du trafic réseau passera par l’infrastructure de Cloudflare avant d’atteindre votre serveur, garantissant un chiffrement SSL de bout en bout et le masquage de votre adresse IP publique.

Schéma d'architecture pour sécuriser Docker avec reverse proxy Nginx et Cloudflare
Architecture réseau sécurisée avec reverse proxy et proxy Cloudflare.

 

2. Étape 1 : Créer le réseau Docker pour le reverse proxy

Pour permettre à Nginx Proxy Manager de communiquer directement avec vos conteneurs sans exposer leurs ports sur la machine hôte, créons un réseau Bridge externe nommé npm-network :

docker network create npm-network

 

3. Étape 2 : Déploiement de l’interface Portainer

Déployez l’instance Portainer en la rattachant au socket Docker local. Vous pouvez vous référer à la documentation officielle de Portainer pour approfondir la gestion des droits.

docker run -d \
  -p 9443:9443 \
  --name portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:latest

Raccordez ensuite le conteneur portainer au réseau npm-network via la CLI :

docker network connect npm-network portainer

 

4. Étape 3 : Installer Nginx Proxy Manager pour sécuriser Docker

Dans l’interface de Portainer, rendez-vous dans Stacks > Add stack et collez le fichier Compose ci-dessous pour déployer votre reverse proxy Docker :

version: '3.8'

services:
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - npm-network

networks:
  npm-network:
    external: true
Interface Nginx Proxy Manager pour sécuriser Docker avec reverse proxy
Tableau de bord de Nginx Proxy Manager après déploiement.

5. Étape 4 : Validation SSL Cloudflare via DNS Challenge

Afin de sécuriser Docker avec un reverse proxy sans ouvrir le port 80 aux vérifications HTTP Let’s Encrypt, nous utilisons le DNS Challenge de Cloudflare :

  1. Sur votre tableau de bord Cloudflare, créez un enregistrement A pointant * vers votre IP publique.
  2. Dans Mon Profil > Jetons API, créez un jeton avec le modèle Modifier le DNS de la zone.
  3. Copiez la clé API générée.

6. Étape 5 : SSL Wildcard et redirection HTTPS des conteneurs

  1. Dans Nginx Proxy Manager (http://IP-SERVEUR:81), allez dans SSL Certificates > Add SSL Certificate > Let’s Encrypt.
  2. Saisissez votredomaine.pro et *.votredomaine.pro.
  3. Cochez Use a DNS Challenge, sélectionnez Cloudflare et insérez votre jeton API :
    dns_cloudflare_api_token = VOTRE_TOKEN_API_CLOUDFLARE
  4. Créez ensuite un Proxy Host pour exposer Portainer en HTTPS :
    • Domain Name : portainer.votredomaine.pro
    • Scheme / Host / Port : https / portainer / 9443
    • SSL : Attribuez le certificat Wildcard et activez Force SSL & HTTP/2.

🔒 Conseil Cybersécurité :
Dans le panneau Cloudflare, réglez le mode SSL/TLS sur Full (Strict). Cela garantit un chiffrement de bout en bout entre le client, Cloudflare et votre serveur. Si vous souhaitez en savoir plus sur mes méthodes d’audit et de sécurisation système, consultez ma page à propos.

Conclusion : Une méthode éprouvée pour sécuriser Docker avec un Reverse Proxy

Grâce à cette méthode, sécuriser Docker avec un reverse proxy devient un réflexe simple et automatisé pour l’ensemble de vos projets web. Tous vos conteneurs bénéficient ainsi d’un chiffrement SSL robuste, d’un pare-feu applicatif via Cloudflare et d’une gestion centralisée.