Sécuriser Mes Workflows n8n : Plongée Profonde dans DNS et TLS
Objectif
Établir un accès fiable et chiffré à n8n (et aux services associés), que ce soit publiquement (défi Let’s Encrypt DNS-01) ou sur le LAN (Split-DNS + certificat local).
Pourquoi Sécuriser n8n ?
n8n est une puissante plateforme d'automatisation qui gère souvent des identifiants sensibles, des clés API et des workflows critiques pour l'entreprise. Sécuriser l'accès avec un DNS et un TLS appropriés assure :
- Protection des Données : Les connexions chiffrées empêchent l'interception des identifiants
- Authentification : Les certificats vérifiés empêchent les attaques de l'homme du milieu
- Conformité : Respecte les meilleures pratiques de sécurité pour l'automatisation des workflows
- Configuration Professionnelle : Démontre la maturité de l'infrastructure
Aperçu de l'Architecture
Clients Internet/LAN
↓
pfSense (DNS + Firewall)
↓
Nginx Proxy Manager (TLS Termination)
↓
n8n Docker Container (5678)
Option A : Domaine Public + Cloudflare + Défi DNS (Let’s Encrypt)
Prérequis
- Domaine public (peut utiliser des services gratuits comme Freenom)
- Compte Cloudflare (le niveau gratuit est suffisant)
- Nginx Proxy Manager déployé
- n8n fonctionnant dans Docker
Étape 1 : Configuration du Domaine avec Cloudflare
Enregistrer un Domaine Gratuit (Facultatif)
# Visit Freenom.com
# Register domain: my-portfolio.tk (or similar)
# Note: Free domains may have limitationsAjouter le Domaine à Cloudflare
- Créez un compte Cloudflare sur cloudflare.com
- Cliquez sur « Add a site » (Ajouter un site)
- Entrez votre nom de domaine
- Choisissez le plan Gratuit
- Copiez les serveurs de noms Cloudflare
Mettre à Jour les Serveurs de Noms chez le Registraire
Connectez-vous à votre registraire de domaine (Freenom, Namecheap, etc.)
Naviguez vers DNS Management (Gestion DNS)
Remplacez les serveurs de noms existants par les serveurs de noms Cloudflare :
ns1.cloudflare.com ns2.cloudflare.comAttendez la propagation (peut prendre jusqu'à 24 heures)
Étape 2 : Générer le Jeton API Cloudflare
- Dans le tableau de bord Cloudflare, cliquez sur l'icône de profil
- Naviguez vers « My Profile » (Mon Profil) → « API Tokens » (Jetons API)
- Cliquez sur « Create Token » (Créer un Jeton)
- Utilisez le modèle : « Edit zone DNS » (Modifier la zone DNS)
- Configurez les permissions :
- **Zone** : DNS Edit (Modification DNS)
- **Inclure** : Zone spécifique (votre domaine)
- Cliquez sur « Continue to summary » (Continuer vers le résumé) → « Create Token » (Créer un Jeton)
- **Sauvegardez ce jeton en toute sécurité** - vous ne le verrez qu'une seule fois !
Étape 3 : Configurer Nginx Proxy Manager
Créer un Enregistrement DNS dans Cloudflare
- Dans Cloudflare, allez à l'onglet **DNS**
- Ajoutez un enregistrement A :
- **Type** : A
- **Nom** :
n8n(ou@pour le domaine racine) - **Adresse IPv4** : Votre IP publique ou utilisez le proxy Cloudflare
- **Statut Proxy** : ✓ Proxied (nuage orange)
Ajouter un Hôte Proxy dans NPM
- Accédez à Nginx Proxy Manager :
http://<npm-ip>:81 - Cliquez sur **“Proxy Hosts”** (Hôtes Proxy) → **“Add Proxy Host”** (Ajouter un Hôte Proxy)
- **Onglet Détails** :
- **Noms de Domaine** :
n8n.my-portfolio.tk - **Schéma** :
http - **Nom d'hôte/IP de Redirection** :
n8n(nom du conteneur Docker) ou IP - **Port de Redirection** :
5678 - **Support Websockets** : ✓ **CRITIQUE pour n8n**
- **Bloquer les Exploits Courants** : ✓
- **Noms de Domaine** :
- **Onglet SSL** :
Sélectionnez **« Request a new SSL Certificate »** (Demander un nouveau certificat SSL)
Basculez **« Use a DNS Challenge »** (Utiliser un Défi DNS)
**Fournisseur DNS** : Sélectionnez **Cloudflare**
**Contenu du Fichier d'Identifiants** :
dns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN**Adresse E-mail** : Votre e-mail pour Let’s Encrypt
Options :
- ✓ Forcer SSL
- ✓ Support HTTP/2
- ✓ HSTS Activé
- Cliquez sur **Enregistrer**
Étape 4 : Vérifier l'Accès
# Test de la résolution DNS
nslookup n8n.my-portfolio.tk
# Test de l'accès HTTPS
curl -I https://n8n.my-portfolio.tk
# Accès dans le navigateur
https://n8n.my-portfolio.tkAvantages et Limitations
✅ Avantages: - Certificat SSL public valide - Renouvellement automatique tous les 90 jours - Pas besoin d'ouvrir les ports 80/443 pour la validation HTTP-01 - Fonctionne de n'importe où avec accès à Internet
⚠️ Limitations: - Nécessite un domaine public et une propagation DNS - Dépend de services externes (Cloudflare, Let’s Encrypt) - Risques potentiels de confidentialité avec l'exposition publique
Option B : DNS Local (pfSense) + Certificat Local
Cas d'Utilisation
Parfait pour : - Accès interne homelab uniquement - Aucun domaine public souhaité - Environnements hors ligne ou isolés - Développement et tests
Étape 1 : Configuration Split-DNS dans pfSense
Configurer les Substitutions d'Hôte du Résolveur DNS
- Connectez-vous à l'interface web pfSense
- Naviguez vers **Services** → **DNS Resolver** (Résolveur DNS)
- Assurez-vous que le DNS Resolver est **activé**
- Faites défiler jusqu'à **Host Overrides** (Substitutions d'Hôte)
- Cliquez sur **« Add »** (Ajouter) :
- **Hôte** :
n8n - **Domaine** :
local.home(ou votre choix) - **Adresse IP** : IP de l'hôte exécutant NPM
- **Description** : Plateforme d'automatisation n8n
- **Hôte** :
- Cliquez sur **Save** (Enregistrer) → **Apply Changes** (Appliquer les changements)
Tester la Résolution DNS
Depuis un client sur votre réseau :
# Devrait se résoudre à l'IP de votre hôte NPM
nslookup n8n.local.home
# Ou en utilisant dig
dig n8n.local.homeÉtape 2 : Générer un Certificat SSL Local
Option A : Certificat Auto-Signé (OpenSSL)
# Generate private key
openssl genrsa -out n8n-local.key 2048
# Generate certificate signing request
openssl req -new -key n8n-local.key -out n8n-local.csr \
-subj "/C=US/ST=State/L=City/O=Homelab/CN=n8n.local.home"
# Generate self-signed certificate
openssl x509 -req -days 365 -in n8n-local.csr \
-signkey n8n-local.key -out n8n-local.crtOption B : mkcert (Recommandé)
Pourquoi mkcert ? Fait automatiquement confiance aux navigateurs après l'installation de l'AC.
# Install mkcert
# On Ubuntu/Debian:
sudo apt install libnss3-tools
wget https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64
sudo mv mkcert-v1.4.4-linux-amd64 /usr/local/bin/mkcert
sudo chmod +x /usr/local/bin/mkcert
# Install local CA
mkcert -install
# Generate certificate for n8n
mkcert n8n.local.home "*.local.home"
# This creates:
# n8n.local.home+1.pem (certificate)
# n8n.local.home+1-key.pem (private key)Étape 3 : Importer le Certificat dans NPM
- Dans Nginx Proxy Manager, allez à **SSL Certificates** (Certificats SSL)
- Cliquez sur **« Add SSL Certificate »** (Ajouter un certificat SSL) → **« Custom »** (Personnalisé)
- Téléchargez les fichiers :
- **Clé de Certificat** :
n8n.local.home+1-key.pem - **Certificat** :
n8n.local.home+1.pem
- **Clé de Certificat** :
- Cliquez sur **Enregistrer**
Étape 4 : Créer l'Hôte Proxy
- Cliquez sur **“Proxy Hosts”** (Hôtes Proxy) → **“Add Proxy Host”** (Ajouter un Hôte Proxy)
- **Onglet Détails** :
- **Noms de Domaine** :
n8n.local.home - **Schéma** :
http - **Nom d'hôte/IP de Redirection** :
n8nou IP du conteneur - **Port de Redirection** :
5678 - **Support Websockets** : ✓
- **Bloquer les Exploits Courants** : ✓
- **Noms de Domaine** :
- **Onglet SSL** :
- **Certificat SSL** : Sélectionnez votre certificat personnalisé
- **Forcer SSL** : ✓
- **Support HTTP/2** : ✓
- Cliquez sur **Enregistrer**
Étape 5 : Installer l'AC sur les Appareils Clients
Pour mkcert :
Linux:
mkcert -installWindows:
# Run mkcert installer
mkcert-v1.4.4-windows-amd64.exe -installmacOS:
mkcert -installAppareils Mobiles: - Exportez le certificat CA depuis
mkcert -CAROOT - Transférez vers l'appareil - Installez
comme certificat de confiance
Avantages et Limitations
✅ Avantages: - Aucune dépendance externe - Fonctionne hors ligne - Contrôle total sur les certificats - Aucune exposition publique
⚠️ Limitations: - Nécessite l'installation de l'AC sur tous les appareils clients - Renouvellement manuel du certificat - Accessible uniquement sur le réseau local
Dépannage des Problèmes Courants
Problème 1 : Erreur de « Cookie Sécurisé » n8n
Problème : n8n nécessite HTTPS pour les cookies sécurisés
Solutions :
# Option 1: Use HTTPS (recommended)
# Suivre les étapes ci-dessus
# Option 2: Disable secure cookie (POUR TEST UNIQUEMENT)
docker run -e N8N_SECURE_COOKIE=false n8nio/n8nProblème 2 : NPM Ne Peut Pas Résoudre le Nom du Conteneur
Problème : Nginx Proxy Manager ne peut pas atteindre le conteneur n8n
Solutions :
# Option 1: Use Docker network
# Assurez-vous que les deux conteneurs sont sur le même réseau Docker
# Option 2: Use host IP instead of container name
# Dans l'hôte proxy NPM, utilisez: 192.168.x.x au lieu de "n8n"
# Option 3: Use Docker bridge IP
docker inspect n8n | grep IPAddress
# Utilisez cette IP dans la configuration NPMProblème 3 : Le DNS Interne Ne Résout Pas
Problème : Les clients ne peuvent pas résoudre
n8n.local.home
Solutions :
Vérifiez que le DNS Resolver pfSense est en cours d'exécution :
- Services → DNS Resolver → État
Vérifiez les paramètres DNS du client :
# Linux/macOS cat /etc/resolv.conf # Devrait afficher l'IP pfSense # Windows ipconfig /all # Vérifiez les Serveurs DNSTestez depuis pfSense lui-même :
# Diagnostics → Command Prompt nslookup n8n.local.home
Problème 4 : Le Défi DNS-01 de Let’s Encrypt Échoue
Problème : La demande de certificat échoue
Solutions :
Vérifiez les Permissions du Jeton API :
- Doit avoir **Zone:DNS:Edit** pour la zone spécifique
- Ne peut pas utiliser la clé API globale
Vérifiez la Propagation de l'Enregistrement TXT :
dig _acme-challenge.n8n.my-portfolio.tk TXTExaminez les Journaux NPM :
docker logs nginx-proxy-manager
Meilleures Pratiques de Sécurité
1. Activer l'Authentification dans n8n
# docker-compose.yml
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=secure_password_here2. Restreindre l'Accès par IP
Dans NPM, ajoutez une Liste d'Accès : - **Autoriser** : Vos IPs de confiance - **Refuser** : Tous les autres
3. Utiliser des Paramètres Cloudflare Robustes
- Activez le **Mode Bot Fight**
- Ajoutez des **Règles de Page** pour la limitation de débit
- Activez **Toujours Utiliser HTTPS**
4. Surveiller les Journaux d'Accès
# Afficher les journaux d'accès NPM
docker exec -it nginx-proxy-manager tail -f /data/logs/proxy-host-*.log5. Surveillance Régulière des Certificats
- Définissez un rappel dans le calendrier pour l'expiration du certificat
- Surveillez les journaux de renouvellement NPM
- Testez l'accès après les renouvellements
Liste de Validation
Pour la Configuration de Domaine Public:
Pour la Configuration Locale:
Conclusion
Sécuriser n8n avec une configuration DNS et TLS appropriée transforme une plateforme d'automatisation vulnérable en un système prêt pour la production. Que vous choisissiez l'approche du domaine public avec Let’s Encrypt ou la méthode du certificat local, les deux offrent un chiffrement solide et une gestion d'accès professionnelle.
La clé est de comprendre vos besoins : - **Accès public nécessaire ?** → Option A (Cloudflare + Let’s Encrypt) - **Uniquement interne ?** → Option B (pfSense + Certificats Locaux)
Les deux approches démontrent une maturité de l'infrastructure et une conscience de la sécurité, des compétences essentielles pour tout administrateur de homelab ou professionnel de la sécurité.
Rappel : La sécurité est une question de couches. DNS et TLS ne sont que le début - ajoutez l'authentification, la surveillance et des audits réguliers pour une protection complète.