Le contexte

Je voulais réserver l’interface Proxmox et un terminal web à mon réseau local. Dans Nginx Proxy Manager, rien de plus simple : une Access List qui autorise le LAN, et un deny all ajouté automatiquement.

L’interface affichait bien « LAN Only » sur les hôtes… et pourtant, depuis la 4G, la page de connexion Proxmox s’affichait toujours.

Le diagnostic

Les logs d’accès montraient des requêtes venant d’une IP publique avec un code 200 :

tail -f /data/logs/proxy-host-*_access.log

Et la configuration générée ne contenait aucune directive allow ou deny :

grep -n "allow\|deny" /data/nginx/proxy_host/*.conf

La cause

Pour que la console noVNC de Proxmox fonctionne, j’avais mis un bloc location / { … } complet dans l’onglet Advanced de l’hôte.

NPM écrit normalement les règles de l’Access List dans son propre location /. Quand on en définit un soi-même, NPM ne génère plus le sien… et les règles disparaissent avec, sans le moindre avertissement.

La correction

Ajouter les règles directement dans le bloc personnalisé :

location / {
    allow 192.168.0.0/24;   # votre LAN
    deny all;

    proxy_pass https://IP_DU_PROXMOX:8006;
    # … reste de la configuration
}

Le piège suivant : se bloquer soi-même

Depuis le LAN, le nom de domaine résout vers l’IP publique. La requête fait un aller-retour par la box, qui remplace l’IP source par la sienne : NPM refuse donc l’accès.

Solution : un enregistrement DNS local (Pi-hole) qui fait pointer ces noms directement vers l’IP de NPM.

À retenir

  • Un location / dans Advanced = l’Access List de NPM ne s’applique plus.
  • Toujours tester depuis l’extérieur (4G) après avoir restreint un accès.
  • Un service « LAN only » a besoin d’un DNS local, sinon on s’enferme dehors.