Cómo aumentar la seguridad de tu sitio Web con NPM añadiendo todos los Security Headers

Blinda tu web añadiendo todas las cabeceras de seguridad en Nginx Proxy Manager. También con la protección de Cloudflare.

Cómo aumentar la seguridad de tu sitio Web con NPM añadiendo todos los Security Headers
Regístrate en HDS+
Es gratuito. Ten acceso a todo el contenido.
🔓
Dificultad del tutorial: Fácil

Partiendo de la base de que la seguridad absoluta no existe, lo que si podemos hacer es intentar blindar nuestro sitio web para evitar que sufra un ataque o sea vulnerable a un fallo de seguridad existente.

Cuando accedemos a cualquier sitio web, no solamente se proporciona el contenido visible del mismo, sino que también se transmiten una serie de cabeceras que son interpretadas por el Navegador de Internet. Estas cabeceras son utilizadas por el servidor y por el navegador para el envío de información.

Por defecto, muchas de estas cabeceras de seguridad no son enviadas, lo que se traduce en un posible agujero por el cual algunos avispados pueden aprovechar para atacar dicho sitio web. Con el tutorial sencillo de hoy, vamos a ver como incrementar la seguridad en estas cabeceras al máximo posible.

Para ello, existe una Web con el nombre de Security Headers la cual ingresando nuestro sitio web, nos devuelve una puntuación que va desde el A+ (lo más alto), hasta la F (la más baja). Siguiendo el tutorial de hoy, obtendréis la mayor seguridad posible y por lo tanto la mejor puntuación.

Al final del artículo os explicaré como obtener la clasificación A+ si tienes tu web mediante la protección de Cloudflare.


Añadiendo los Security Headers a NPM

En el ejemplo de hoy, voy a utilizar NPM (Nginx Proxy Manager), que es el gestor de Proxy Inverso más utilizado por la mayoría de nosotros.

Lo primero que tendremos que hacer es crear un nuevo archivo con el nombre de _hsts.conf y en el cual copiaremos las siguientes lineas:

{% 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';
{% endif %}
{% endif %}
{% endif %}

Una vez guardado, lo subimos a la carpeta raíz de nuestra instalación de NPM y añadiremos la siguiente variable al Docker.

  • Imagen de jc21/nginx-proxy-manager:
volumes:
    -  /PROXY-PATH/_hsts.conf:/app/templates/_hsts.conf:ro
  • Imagen de jlesage/nginx-proxy-manager:
volumes:
    -  /PROXY-PATH/_hsts.conf:/opt/nginx-proxy-manager/templates/_hsts.conf:ro
👉🏼
Se tiene que sustituir PROXY-PATH por la ruta completa a la cual hemos subido el archivo.

En el caso de unRAID, tendremos que añadir una nueva variable del tipo "ruta" a la plantilla del contenedor con permisos de sólo lectura tal y como muestro en la imagen inferior.

En el campo "Ruta del contenedor / Path Container" deberemos de especificar la ruta correcta depende si usamos el contenedor de Jc21 o el de Jlesage.
Esta es la nueva variable del tipo Ruta / Path que deberemos de añadir en la plantilla de unRAID

Comprobar que se inyectan correctamente

Una vez arrancado nuevamente el contenedor de NPM, si comprobamos nuestros dominios, ya deberíamos de obtener el grado A+ de seguridad, pero si todavía no nos lo muestra, tendremos que editar todos los dominios y hacer clic en la pestaña de SSL volviendo a marcar las cuatro opciones como muestro en la imagen inferior.

Una vez seguidos estos sencillos pasos, podemos volver a consultar nuestro sitio web en SecurityHeaders y veremos como nuestra seguridad se ve incrementada al máximo y con ello, conseguir la máxima categoría: A+.


Conseguir el grado A+ con Cloudflare

Una vez seguido los pasos descritos anteriormente con NPM, si tienes tu sitio web bajo la protección de Cloudflare (Proxied), no obtendrás la clasificación A+ salvo que hagas unas modificaciones rápidas que detallo a continuación:

  1. Nos vamos a SSL/TLS y activamos el protocolo Full (Strict).
  2. Nos vamos a SSL/TLS Edge Certificates y activamos las opciones Always use HTTPS y Automatic HTTPS Rewrites.
  3. Dentro de este apartado habilitamos también HTTP Strict Transport Security (HSTS) activando todos los checks, además de especificar en Max Age Header (max-age) el valor de 6 meses.
Invítame a un café



Más artículos

Cómo instalar AdGuard Home en Synology

Cómo instalar AdGuard Home en Synology

Guía detallada para instalar AdGuard Home en un NAS Synology. Además, añade un plus de privacidad y déjalo configurado con todos tus dispositivos con un router Asus.

lock-1 Por Joan Romero
Cómo integrar Transmissionic y Flood con Transmission

Cómo integrar Transmissionic y Flood con Transmission

Guía para NAS y unRAID. Dos opciones para disfrutar Transmission con una interfaz más limpia, moderna y compatible al 100% con dispositivos móviles.

lock-1 Por Joan Romero