HL-PRC-015 — Proxmox Backup Server — publication via reverse proxy NPM

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ôleResponsabilité
Administrateur système et réseauxConfigure les zones Technitium DNS, déclare le Proxy Host dans NPM et applique la politique Junos sur le SRX300.
Détenteur des secretsGarde la clé privée du certificat TLS pbs et détient les accès d’administration root et console du lab.
ExploitantContrô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ètreDescriptionValeur de référenceContrainte
FQDN_SERVICENom de domaine complet du service PBSpbs.adm.dozylab.lanEnregistrement DNS A
ZONE_DNSZone DNS directe d’autoritédozylab.lanZone Technitium
ZONE_PTRZone DNS inverse du sous-réseau10.10.10.in-addr.arpaVLAN 10 ADM
IP_NGINXAdresse IP de Nginx Proxy Manager10.10.20.12VLAN 20 (zone srv)
IP_PBS_PVE3Adresse IP de l’hôte bare-metal (PVE3/PBS)10.10.10.12VLAN 10 (zone adm)
PORT_PBSPort d’écoute interne du démon PBS8007HTTPS natif PBS
PORT_PVEPort d’écoute hyperviseur PVE38006Référence fonctionnelle
NOM_CERT_NPMNom du certificat custom dans NPMpbsCertificat valide
SRX_ZONE_SRCZone de sécurité pare-feu sourcesrvZone hébergeant NPM
SRX_ZONE_DSTZone de sécurité pare-feu cibleadmZone hébergeant PBS
SRX_APP_NAMENom de l’application JunosPBS-8007TCP 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 :

NomTypeValeur (IPv4)TTL
pbs.admA10.10.20.123600 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)TypeNom de domaine cibleTTL
12PTRpbs.adm.dozylab.lan3600 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 Namespbs.adm.dozylab.lan
Schemehttps
Forward Hostname / IP10.10.10.12
Forward Port8007
Cache AssetsDésactivé (Off)
Block Common ExploitsDésactivé (Off — prévient le filtrage intempestif des requêtes API/JSON)
Websockets SupportActivé (On — requis pour les journaux en direct et shells de tâches)
Access ListPublicly Accessible

3. Dans l’onglet SSL, sélectionner le certificat personnalisé et activer l’obligation du chiffrement :

Option (Onglet SSL)Valeur configurée
SSL Certificatepbs (Custom Certificate pbs.adm.dozylab.lan)
Force SSLActivé (On)
HTTP/2 SupportDésactivé (Off — PBS gérant le H2 backend, évite les conflits d’ALPN)
HSTS EnabledDésactivé (Off)
HSTS Sub-domainsDé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

SituationAction de retour arrière
Résolution DNS erronée ou inaccessibleSupprimer l’enregistrement A pbs.adm dans la zone dozylab.lan sous Technitium DNS et purger le cache DNS local (ipconfig /flushdns).
Dysfonctionnement ou blocage NPMDé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 SRX300En 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ômeCause identifiéeRésolution appliquée
504 Gateway Time-out dans le navigateurLe 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 FQDNL’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 pageLe 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 / logsLes 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

ComposantRôle fonctionnelAdresse IP / FQDNZone pare-feu SRX
pve3 (Hôte bare-metal)Serveur PBS et nœud PVE10.10.10.12 / pbs.adm.dozylab.lanadm (VLAN 10)
Nginx Proxy ManagerReverse Proxy frontal TLS10.10.20.12 / srv01.adm.dozylab.lansrv (VLAN 20)
Technitium DNSServeur DNS autoritaire10.10.10.254 / ns01.adm.dozylab.lanadm (VLAN 10)
Juniper SRX300Routeur et passerelle inter-VLAN10.10.10.254 – 10.10.20.254Inter-zones (adm / srv)

Plan d’adressage et interfaces

VLANNom de zoneSous-réseauPasserelle SRX300
VLAN 10adm (Administration)10.10.10.0/2410.10.10.254 (ge-0/0/1.10)
VLAN 20srv (Serveurs)10.10.20.0/2410.10.20.254 (ge-0/0/1.20)

Matrice des flux inter-zones

SourceDestinationPortProtocoleApplication JunosStatut
Postes clientsNPM (10.10.20.12)443TCPjunos-httpsAutorisé
NPM (10.10.20.12)PVE3 (10.10.10.12)8006TCPPVE-8006Autorisé
NPM (10.10.20.12)PBS (10.10.10.12)8007TCPPBS-8007Autorisé
Tous postesTechnitium (10.10.10.254)53UDP/TCPjunos-dnsAutorisé

Dépendances et points de défaillance

ÉlémentImpact en cas de défaillance
Conteneur / VM Nginx Proxy ManagerPerte 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 SRX300Interruption 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 techniqueImpact 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é manuellementRisque d’interruption de service à l’expiration du certificat custom pbs.À planifier : automatisation par protocole ACME interne.
Port 8007 accessible en direct depuis le VLAN 10Possibilité 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ôleCritère d’acceptation mesurableStatut
Résolution DNS A du FQDNResolve-DnsName pbs.adm.dozylab.lan retourne l’IP de NGINX 10.10.20.12☐
Résolution inverse PTRResolve-DnsName 10.10.10.12 retourne le FQDN pbs.adm.dozylab.lan☐
Flux TCP NGINX vers PBS 8007curl -k -I https://10.10.10.12:8007 répond HTTP 200 depuis le proxy☐
Accès HTTPS frontalConnexion navigateur sur https://pbs.adm.dozylab.lan avec un certificat valide
Authentification et consoleConnexion réussie sur l’interface web de PBS avec compte d’administration☐
WebSockets et streaming de logsConsultation 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

VersionDateAuteurModifications
0.125/10/2026Administrateur système et réseauxCréation du document à partir de l’intervention réelle (résolution timeout 504 et publication NPM).
Défiler vers le haut