00b2c5db85
Config ciblée sur le backend n8n existant — juste le delta à appliquer. Token requis uniquement hors LAN/IP fixe, LAN reste en accès direct. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.6 KiB
2.6 KiB
Configuration HAProxy pour n8n Pilot
Contexte
n8n est déjà exposé via HAProxy à https://n8n.gyozamancave.fr.
Il suffit d'ajouter la validation du X-App-Token dans le backend existant sans toucher au frontend.
Modification à apporter — backend n8n uniquement
Remplacer le backend n8n-backend actuel par :
backend n8n-backend
mode http
balance source
# IPs qui ne nécessitent pas le X-App-Token (LAN + IP fixe perso)
acl is_local src 192.168.1.0/24 192.168.2.0/24 82.67.3.126/32
# Validation du token pour les accès extérieurs (mobile app)
acl valid_app_token req.hdr(X-App-Token) -m str "VOTRE_TOKEN_ICI"
http-request deny deny_status 403 if !is_local !valid_app_token
# Supprimer le token avant de forwarder à n8n (n8n ne doit pas le voir)
http-request del-header X-App-Token
http-request set-header X-Forwarded-Proto https if { ssl_fc }
http-request set-header X-Real-IP %[src]
http-request set-header X-Forwarded-For %[src]
http-request set-header Host %[req.hdr(host)]
option forwardfor
server n8n 192.168.1.56:5678
Logique :
- Depuis le LAN (
192.168.1/2.x) ou ton IP fixe → accès direct, pas de token requis (navigation normale dans n8n) - Depuis l'extérieur (mobile app 4G/5G) →
X-App-Tokenobligatoire, sinon 403
Appliquer la modification
# Valider la syntaxe avant rechargement
haproxy -f /etc/haproxy/haproxy.cfg -c
# Rechargement gracieux (sans coupure)
systemctl reload haproxy
Générer un token solide
openssl rand -hex 32
Copier la valeur générée dans :
- La config HAProxy (
VOTRE_TOKEN_ICIci-dessus) - L'app Android : Paramètres > Token HAProxy > Sauvegarder
Rotation du token
- Générer un nouveau token (
openssl rand -hex 32) - Ajouter temporairement les deux ACLs dans HAProxy pour éviter les coupures :
acl valid_app_token req.hdr(X-App-Token) -m str "ANCIEN_TOKEN"
acl valid_app_token_new req.hdr(X-App-Token) -m str "NOUVEAU_TOKEN"
http-request deny deny_status 403 if !is_local !valid_app_token !valid_app_token_new
- Mettre à jour le token dans l'app (Paramètres > Token HAProxy)
- Retirer l'ancien token de la config HAProxy
systemctl reload haproxy
Troubleshooting
403 depuis l'app → token absent ou incorrect. Tester :
curl -v -H "X-App-Token: VOTRE_TOKEN" https://n8n.gyozamancave.fr/api/v1/workflows
403 depuis le navigateur → vérifier que l'IP source est bien dans is_local. Depuis un VPN ou tethering, l'IP peut ne pas matcher.
Logs HAProxy en direct :
journalctl -u haproxy -f