Featured image of post Security Headers pour Nginx Proxy Manager

Security Headers pour Nginx Proxy Manager

Sécurisation des en-têtes HTTP de Nginx Proxy Manager

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”.

Score Security Headers

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/ :

Score Security Headers

Vous obtenez maintenant la note maximale “A+”.

Remarque : Pour chaque hôte proxy il faut décocher puis recocher l’option HSTS :

Options SSL

Généré avec Hugo
Thème Stack conçu par Jimmy