Introduction
NPM (Nginx Proxy Manager) propose par défaut une configuration minimale des en-têtes HTTP. En faisant un test de vulnérabilité en ligne sur https://securityheaders.com/ ; vos services web sortiront avec un mauvais score “D”.

Nous allons donc utiliser un template global pour NPM afin de sécuriser l’ensemble de vos hôtes proxy.
Ajout d’un template HTST global pour NPM
Modification de votre fichier compose.yaml
Reprenons le fichier compose.yaml initial du précédant article Installation de Nginx Proxy Manager.
Nous allons y ajouter un volume qui contiendra notre fichier de configurqtion _HTST opersonnalisé.
services:
app:
image: 'docker.io/jc21/nginx-proxy-manager:latest'
restart: unless-stopped
container_name: npm
environment:
- TZ=Europe/Paris
ports:
- 80:80
- 81:81
- 443:443
volumes:
- /opt/docker/data/npm:/data
- /opt/docker/data/log:/data/logs
- /opt/docker/data/npm/letsencrypt:/etc/letsencrypt
- /opt/docker/data/npm/templates/_hsts.conf:/app/templates/_hsts.conf:ro # A rajouter
Vous devrez adapter ce fichier à votre environnement de travail Docker. J’utilise le chemin /opt/docker/data/mon_container pour tous mes containers docker.
Le fichier /opt/docker/data/npm/templates/_hsts.conf contient le templates global de modifications des en-têtes HTTP.
Pour l’instant ne redemarrer pas votre container NPM.
Fichier template _htst.conf
Le fichier template à rajouter est le suivant :
{% if certificate and certificate_id > 0 -%}
{% if ssl_forced == 1 or ssl_forced == true %}
{% if hsts_enabled == 1 or hsts_enabled == true %}
# HSTS (ngx_http_headers_module is required) (63072000 seconds = 2 years)
add_header Strict-Transport-Security "max-age=63072000;{% if hsts_subdomains == 1 or hsts_subdomains == true -%} includeSubDomains;{% endif %} preload" always;
add_header Referrer-Policy strict-origin-when-cross-origin;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options SAMEORIGIN;
add_header Content-Security-Policy upgrade-insecure-requests;
add_header Permissions-Policy interest-cohort=();
add_header Expect-CT 'enforce; max-age=604800';
more_set_headers 'Server: Proxy';
more_clear_headers 'X-Powered-By';
proxy_cookie_flags ~ Secure HttpOnly SameSite=Strict;
{% endif %}
{% endif %}
{% endif %}
Vous pouvez personnaliser la réponse du serveur via la ligne “more_set_headers ‘Server: Proxy’;” et remplacer “Proxy” par ce que vous souhaitez. Cette ligne permet de rendre la détection de la technonologie utilisée (NPM) plus difficile.
Une fois ce fichier créé, vous pouvez relancer votre container NPM.
Verification du template
Vous pouvez maintenant refaire un test en ligne sur le site https://securityheaders.com/ :

Vous obtenez maintenant la note maximale “A+”.
Remarque : Pour chaque hôte proxy il faut décocher puis recocher l’option HSTS :
