| HOMELAB Infrastructure auto-hébergée |
PROCÉDURE TECHNIQUE
Publication de Proxmox Backup Server via Nginx Proxy Manager
Exposition sécurisée par reverse proxy, résolution DNS Technitium et ouverture de flux Juniper SRX300.
| Référence HL-PRC-015 | Version 0.1 | Date d’édition 25/10/2026 |
| Auteur Administrateur système et réseaux | Classification Interne | Statut Brouillon |
Sommaire
Publication de Proxmox Backup Server via Nginx Proxy Manager — HL-PRC-015
1 Objet
Cette procédure formalise la publication sécurisée de l’interface d’administration et de l’API de Proxmox Backup Server (PBS) installé en bare-metal sur l’hôte physique pve3, à travers le reverse proxy Nginx Proxy Manager (NPM), avec résolution DNS interne sous Technitium DNS et certificat TLS dédié. À l’issue de la procédure, l’accès s’effectue de manière chiffrée, authentifiée et sans alerte de sécurité sur le FQDN https://pbs.adm.dozylab.lan, sans exposition directe du port d’écoute interne 8007 sur le sous-réseau des utilisateurs.
La difficulté principale traitée est le franchissement inter-zones du pare-feu d’infrastructure Juniper SRX300 : l’instance Nginx Proxy Manager résidant dans la zone srv (VLAN 20) tandis que le serveur PBS est raccordé dans la zone d’administration adm (VLAN 10), l’absence d’ouverture explicite du port TCP 8007 engendre un blocage silencieux (code HTTP 504 Gateway Time-out) alors même que l’accès à Proxmox VE (port 8006) sur le même hôte est pleinement opérationnel. La procédure détaille la distinction obligatoire entre l’enregistrement A (pointant vers le proxy) et le PTR inverse, ainsi que le jeu de directives Nginx requis pour maintenir les WebSockets et fiabiliser les flux.
2 Périmètre et prérequis
Périmètre
Couvert : création de l’enregistrement de type A pour le FQDN dans la zone dozylab.lan et du pointeur inverse PTR dans 10.10.10.in-addr.arpa sous Technitium DNS ; déclaration du Proxy Host dans Nginx Proxy Manager avec association du certificat personnalisé pbs ; paramétrage des en-têtes proxy, support WebSockets et contournement de la vérification du certificat auto-signé local de PBS ; création de l’application Junos PBS-8007 et adaptation de la politique de sécurité inter-zones srv vers adm sur le pare-feu Juniper SRX300 ; recette et tests de connectivité de bout en bout.
Hors périmètre : installation initiale du paquet proxmox-backup-server et initialisation du datastore (couvertes par HL-PRC-009) ; génération et signature de la bi-clé TLS par l’autorité de certification du lab ; configuration des clients de sauvegarde vzdump sur les nœuds PVE.
Prérequis
• Hôte bare-metal PBS opérationnel : serveur pve3 joignable à l’adresse statique 10.10.10.12, service proxmox-backup-proxy actif et en écoute sur le port TCP 8007 en HTTPS.
• Reverse Proxy Nginx Proxy Manager fonctionnel : instance déployée sur 10.10.20.12 (VLAN 20 SRV), ports 80 et 443 joignables depuis les postes clients.
• Serveur Technitium DNS actif : serveur DNS faisant autorité sur la zone dozylab.lan et sur la zone de résolution inverse 10.10.10.in-addr.arpa.
• Pare-feu Juniper SRX300 accessible : accès opérationnel en CLI Junos (console série ou SSH d’administration), routage inter-VLAN actif entre les zones adm et srv.
• Certificat TLS disponible : certificat customisé au nom de pbs couvrant le domaine pbs.adm.dozylab.lan préalablement téléversé dans NPM.
Note Versions de référence relevées le 25/10/2026 pour l’infrastructure DozyLab avec Proxmox Backup Server 4.2.8-1, Junos OS 15.1X49-D60.7 sur Juniper SRX300, Technitium DNS Server v13 et Nginx Proxy Manager v2.11.
3 Rôles et responsabilités
| Rôle | Responsabilité |
| Administrateur système et réseaux | Configure les zones Technitium DNS, déclare le Proxy Host dans NPM et applique la politique Junos sur le SRX300. |
| Détenteur des secrets | Garde la clé privée du certificat TLS pbs et détient les accès d’administration root et console du lab. |
| Exploitant | Contrôle la validité des accès web, surveille l’absence d’erreur 502/504 et maintient le journal des flux. |
Note Homelab individuel. Les trois rôles sont tenus par une seule et même personne. La distinction est formalisée pour garantir la traçabilité des interventions et le principe de moindre privilège.
4 Procédure de publication et d’interconnexion
Paramètres de la procédure
Les valeurs ci-dessous correspondent à l’implémentation réelle sur l’infrastructure DozyLab. Elles sont reprises telles quelles dans les actions et blocs de configuration suivants.
| Paramètre | Description | Valeur de référence | Contrainte |
| FQDN_SERVICE | Nom de domaine complet du service PBS | pbs.adm.dozylab.lan | Enregistrement DNS A |
| ZONE_DNS | Zone DNS directe d’autorité | dozylab.lan | Zone Technitium |
| ZONE_PTR | Zone DNS inverse du sous-réseau | 10.10.10.in-addr.arpa | VLAN 10 ADM |
| IP_NGINX | Adresse IP de Nginx Proxy Manager | 10.10.20.12 | VLAN 20 (zone srv) |
| IP_PBS_PVE3 | Adresse IP de l’hôte bare-metal (PVE3/PBS) | 10.10.10.12 | VLAN 10 (zone adm) |
| PORT_PBS | Port d’écoute interne du démon PBS | 8007 | HTTPS natif PBS |
| PORT_PVE | Port d’écoute hyperviseur PVE3 | 8006 | Référence fonctionnelle |
| NOM_CERT_NPM | Nom du certificat custom dans NPM | pbs | Certificat valide |
| SRX_ZONE_SRC | Zone de sécurité pare-feu source | srv | Zone hébergeant NPM |
| SRX_ZONE_DST | Zone de sécurité pare-feu cible | adm | Zone hébergeant PBS |
| SRX_APP_NAME | Nom de l’application Junos | PBS-8007 | TCP port 8007 |
Attention Substitution des paramètres. Les adresses IP et politiques déclarées doivent être adaptées avant toute application sur un autre environnement sous peine de rupture de flux ou d’accès non autorisé.
Étapes de réalisation
1. Configuration des enregistrements dans Technitium DNS
Principe de résolution : Le navigateur du client interroge le résolveur pour atteindre pbs.adm.dozylab.lan. Pour que la connexion passe par le reverse proxy et bénéficie de son certificat TLS frontal, l’enregistrement A doit obligatoirement pointer sur l’IP de NGINX (10.10.20.12), et en aucun cas sur l’adresse IP directe de PBS. L’enregistrement inverse PTR associe l’IP physique à l’identité de l’hôte.
1. Se connecter à l’interface d’administration de Technitium DNS.
2. Dans l’onglet Zones, ouvrir la zone directe dozylab.lan et créer l’enregistrement de type A :
| Nom | Type | Valeur (IPv4) | TTL |
| pbs.adm | A | 10.10.20.12 | 3600 s (1 heure) |
3. Dans l’onglet Zones, ouvrir la zone inverse 10.10.10.in-addr.arpa et renseigner le pointeur PTR :
| Nom (IP hôte) | Type | Nom de domaine cible | TTL |
| 12 | PTR | pbs.adm.dozylab.lan | 3600 s (1 heure) |
Vérification de la résolution : Depuis un terminal d’administration, valider que la résolution directe retourne l’IP de Nginx :
Interrogation du serveur DNS Technitium local
Resolve-DnsName -Name pbs.adm.dozylab.lan -Server 10.10.10.254
Sortie attendue : section Answer avec IP4Address = 10.10.20.12.
2. Déclaration et configuration du Proxy Host dans Nginx Proxy Manager
Relais vers le backend HTTPS : Proxmox Backup Server exige impérativement une communication chiffrée sur son port natif 8007. Le Proxy Host doit donc utiliser le protocole https en destination vers 10.10.10.12:8007, avec prise en charge des WebSockets et désactivation des règles heuristiques bloquantes.
1. Dans Nginx Proxy Manager, aller dans Hosts > Proxy Hosts > Add Proxy Host (ou Edit Proxy Host).
2. Dans l’onglet Details, renseigner les paramètres d’acheminement :
| Option (Onglet Details) | Valeur configurée |
| Domain Names | pbs.adm.dozylab.lan |
| Scheme | https |
| Forward Hostname / IP | 10.10.10.12 |
| Forward Port | 8007 |
| Cache Assets | Désactivé (Off) |
| Block Common Exploits | Désactivé (Off — prévient le filtrage intempestif des requêtes API/JSON) |
| Websockets Support | Activé (On — requis pour les journaux en direct et shells de tâches) |
| Access List | Publicly Accessible |
3. Dans l’onglet SSL, sélectionner le certificat personnalisé et activer l’obligation du chiffrement :
| Option (Onglet SSL) | Valeur configurée |
| SSL Certificate | pbs (Custom Certificate pbs.adm.dozylab.lan) |
| Force SSL | Activé (On) |
| HTTP/2 Support | Désactivé (Off — PBS gérant le H2 backend, évite les conflits d’ALPN) |
| HSTS Enabled | Désactivé (Off) |
| HSTS Sub-domains | Désactivé (Off) |
4. Dans l’onglet Advanced, ajouter les directives Nginx pour ignorer le certificat auto-signé de PBS et autoriser les flux de sauvegarde continus :
Configuration avancée pour Proxmox Backup Server dans NPM
proxy_ssl_verify off;
proxy_ssl_session_reuse on;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
client_max_body_size 0;
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
5. Cliquer sur Save pour appliquer la configuration.
3. Ouverture du flux TCP 8007 sur le pare-feu Juniper SRX300
Résolution du 504 Gateway Time-out : NGINX (zone srv) ne parvenait pas à établir la session TCP vers PBS (zone adm). Le port 8006 (PVE3) étant autorisé mais le port 8007 étant rejeté par défaut, il est indispensable de déclarer l’application Junos et de l’associer à la politique de sécurité inter-zones.
1. Se connecter en CLI sur le Juniper SRX300 et basculer en mode configuration :
ssh admin@10.10.10.254
configure
2. Déclarer la définition applicative pour le port TCP 8007 de PBS :
set applications application PBS-8007 protocol tcp destination-port 8007
3. Ajouter l’application à la politique de sécurité autorisant les flux depuis la zone srv vers la zone adm :
Option A : ajout à la politique inter-zones existante srv vers adm
set security policies from-zone srv to-zone adm policy p-srv-to-adm match application PBS-8007
Option B : création d’une politique dédiée stricte par service
set security policies from-zone srv to-zone adm policy p-srv-to-adm-pbs match source-address net-srv
set security policies from-zone srv to-zone adm policy p-srv-to-adm-pbs match destination-address net-adm
set security policies from-zone srv to-zone adm policy p-srv-to-adm-pbs match application PBS-8007
set security policies from-zone srv to-zone adm policy p-srv-to-adm-pbs then permit
4. Vérifier les différences par rapport à la configuration active puis appliquer :
show | compare
commit check
commit
Contrôle de connectivité inter-VLAN : Depuis la console de la machine NGINX (10.10.20.12), vérifier que le port répond désormais instantanément :
curl -k -I https://10.10.10.12:8007
Sortie attendue : réponse HTTP/2 200 ou HTTP/1.1 200 OK avec serveur proxmox-backup-proxy.
Retour arrière
| Situation | Action de retour arrière |
| Résolution DNS erronée ou inaccessible | Supprimer l’enregistrement A pbs.adm dans la zone dozylab.lan sous Technitium DNS et purger le cache DNS local (ipconfig /flushdns). |
| Dysfonctionnement ou blocage NPM | Désactiver le Proxy Host pbs.adm.dozylab.lan dans l’interface NPM. L’accès direct d’administration https://10.10.10.12:8007 demeure fonctionnel. |
| Erreur de syntaxe ou régression SRX300 | En mode configure sur le SRX, exécuter rollback 1 puis commit pour restaurer la version immédiatement antérieure de la configuration. Attention : rollback 1 restaure l’intégralité de la configuration au commit précédent, pas seulement la table de règles ; vérifier show | compare et l’absence de modifications concurrentes avant de confirmer. |
Pièges connus
| Symptôme | Cause identifiée | Résolution appliquée |
| 504 Gateway Time-out dans le navigateur | Le pare-feu Juniper SRX300 filtre le port 8007 entre la zone srv et la zone adm. | Créer l’application Junos PBS-8007 et l’autoriser dans la policy inter-zones du SRX. |
| ERR_CONNECTION_REFUSED sur le FQDN | L’enregistrement DNS A a été configuré avec l’IP de PBS (10.10.10.12) au lieu de l’IP de NGINX (10.10.20.12). | Modifier l’enregistrement A pbs.adm pour pointer vers 10.10.20.12 (le reverse proxy). |
| 502 Bad Gateway au chargement de page | Le proxy tente de joindre le backend en HTTP simple ou échoue à valider le certificat auto-signé. | Définir le Scheme sur https, port 8007, et insérer proxy_ssl_verify off; dans l’onglet Advanced. |
| Déconnexion des flux temps réel / logs | Les en-têtes Upgrade pour WebSockets sont absents ou Nginx applique un buffering agressif. | Activer Websockets Support et ajouter proxy_buffering off; et Connection "upgrade";. |
5 Intégration réseau
Identité des instances
| Composant | Rôle fonctionnel | Adresse IP / FQDN | Zone pare-feu SRX |
| pve3 (Hôte bare-metal) | Serveur PBS et nœud PVE | 10.10.10.12 / pbs.adm.dozylab.lan | adm (VLAN 10) |
| Nginx Proxy Manager | Reverse Proxy frontal TLS | 10.10.20.12 / srv01.adm.dozylab.lan | srv (VLAN 20) |
| Technitium DNS | Serveur DNS autoritaire | 10.10.10.254 / ns01.adm.dozylab.lan | adm (VLAN 10) |
| Juniper SRX300 | Routeur et passerelle inter-VLAN | 10.10.10.254 – 10.10.20.254 | Inter-zones (adm / srv) |
Plan d’adressage et interfaces
| VLAN | Nom de zone | Sous-réseau | Passerelle SRX300 |
| VLAN 10 | adm (Administration) | 10.10.10.0/24 | 10.10.10.254 (ge-0/0/1.10) |
| VLAN 20 | srv (Serveurs) | 10.10.20.0/24 | 10.10.20.254 (ge-0/0/1.20) |
Matrice des flux inter-zones
| Source | Destination | Port | Protocole | Application Junos | Statut |
| Postes clients | NPM (10.10.20.12) | 443 | TCP | junos-https | Autorisé |
| NPM (10.10.20.12) | PVE3 (10.10.10.12) | 8006 | TCP | PVE-8006 | Autorisé |
| NPM (10.10.20.12) | PBS (10.10.10.12) | 8007 | TCP | PBS-8007 | Autorisé |
| Tous postes | Technitium (10.10.10.254) | 53 | UDP/TCP | junos-dns | Autorisé |
Dépendances et points de défaillance
| Élément | Impact en cas de défaillance |
| Conteneur / VM Nginx Proxy Manager | Perte totale de la publication par FQDN. L’accès direct https://10.10.10.12:8007 en local reste opérationnel. |
| Serveur Technitium DNS | Échec de résolution de pbs.adm.dozylab.lan. Nécessite une entrée /etc/hosts temporaire en cas de panne. |
| Pare-feu Juniper SRX300 | Interruption du routage inter-VLAN entre la zone srv et la zone adm. NGINX ne peut plus joindre le port 8007. |
6 Durcissement et sécurité
• Cloisonnement strict des flux d’administration : L’ouverture sur le pare-feu SRX300 est restreinte au seul port TCP 8007 et cantonnée à l’adresse IP source unique de NPM vers la destination de l’hôte bare-metal PBS.
• Chiffrement systématique en transit : Le frontal Nginx impose la redirection HTTPS (Force SSL) avec certificat d’entreprise, éliminant toute circulation de jetons en clair.
• Protection du backend Proxmox : L’accès au port natif 8007 de PBS n’est pas exposé publiquement ; il est uniquement sollicité par le proxy inverse en segment interne.
• Filtrage applicatif adapté : La directive Block Common Exploits est désactivée afin d’éviter l’altération des charges utiles spécifiques de l’API PBS tout en maintenant une limitation stricte des méthodes autorisées.
Dettes techniques
| Point technique | Impact potentiel | État / Arbitrage |
| Désactivation du contrôle SSL backend (proxy_ssl_verify off) | Non-vérification du certificat auto-signé émis localement par PBS. | Accepté : backend interne de confiance sur lien physique maîtrisé. |
| Certificat TLS personnalisé géré manuellement | Risque d’interruption de service à l’expiration du certificat custom pbs. | À planifier : automatisation par protocole ACME interne. |
| Port 8007 accessible en direct depuis le VLAN 10 | Possibilité de contourner le reverse proxy depuis les équipements du VLAN adm. | Toléré : le VLAN 10 est restreint aux seuls hyperviseurs et passerelle. |
7 Vérifications finales
Les contrôles ci-dessous doivent être validés séquentiellement pour attester du succès de la mise en service.
| Contrôle | Critère d’acceptation mesurable | Statut |
| Résolution DNS A du FQDN | Resolve-DnsName pbs.adm.dozylab.lan retourne l’IP de NGINX 10.10.20.12 | ☐ |
| Résolution inverse PTR | Resolve-DnsName 10.10.10.12 retourne le FQDN pbs.adm.dozylab.lan | ☐ |
| Flux TCP NGINX vers PBS 8007 | curl -k -I https://10.10.10.12:8007 répond HTTP 200 depuis le proxy | ☐ |
| Accès HTTPS frontal | Connexion navigateur sur https://pbs.adm.dozylab.lan avec un certificat valide | |
| Authentification et console | Connexion réussie sur l’interface web de PBS avec compte d’administration | ☐ |
| WebSockets et streaming de logs | Consultation des tâches et journaux PBS en direct sans coupure de session | ☐ |
8 Références et historique des révisions
Documentation éditeur
• Proxmox Server Solutions : Proxmox Backup Server Documentation — Configuration du reverse proxy Nginx et en-têtes recommandés (2026).
• Juniper Networks : Junos OS Security Configuration Guide — Security Policies, Application Sets and Zones on SRX Series (2026).
• Technitium : Technitium DNS Server Documentation — Managing Forward and Reverse Authoritative Zones (2026).
• Nginx Proxy Manager : Official Documentation — Advanced Custom Nginx Directives and SSL Proxy Configuration (2026).
Documents associés
• HL-PRC-001 : Mise en service d’un pare-feu Juniper SRX300.
• HL-PRC-003 : Mise en service de la grappe Proxmox à trois nœuds.
• HL-PRC-004 : Technitium DNS.
• HL-PRC-009 : Proxmox Backup Server sur hôte Proxmox VE (Installation et mise en service).
Historique des révisions
| Version | Date | Auteur | Modifications |
| 0.1 | 25/10/2026 | Administrateur système et réseaux | Création du document à partir de l’intervention réelle (résolution timeout 504 et publication NPM). |