Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Funcionalidad

Esta guía consta de una plantilla para realizar una correcta configuración de las cabeceras de seguridad en los servidores Apache, Tomcat y Nginx. Además de una explicación más concreta de cada cabecera por si fuera necesario personalizar la plantilla de configuración.

Requisitos

Comunicaciones entre cliente-servidor (básico)

Necesario que el producto sea una aplicación aplicación web o API REST

Descripción

Este acelerador tiene como objetivo reducir el tiempo invertido en la configuración  y dotar de una mayor seguridad al servidor. Permitiendo a los desarrolladores un control adicional sobre la configuración de la seguridad en el navegador del cliente, siempre que el producto sea una aplicación web o una API REST.

Beneficios

  • Proteger la información sensible:  evitar que la información viaje en claro (si no esta configurado que se fuerce a HTTPS) y pueda ser interceptada por un atacante, el cual podría visualizar o modificar dicha información, afectando a la confidencialidad, integridad y disponibilidad de los datos.

  • Prevenir y mitigar los ataques más comunes  como inyección de contenido/código, ataques de cross-site scripting (XSS) o cross-site request forgery (CSRF), ataques que requieren incrustar un recurso malicioso (CORS), ataques que involucran el uso malicioso de iframes, cómo ataques de clickjacking.

  • Compatibilidad con la mayoría de navegadores modernos a excepción de Internet Explorer, el cuál utiliza la política de same-origin (mecanismo de seguridad crítico que restringe cómo un documento o script cargado por un "origen" puede interactuar con un recurso de un origen distinto).

Evidencias

Una vez completadas las configuraciones de cabeceras que se exponen más abajo, es importante reiniciar los servidores y comprobar que las cabeceras se han añadido correctamente. En la captura de la izquierda vemos una configuración por defecto y  a la derecha una configuración completa además de ocultar la versión del servidor.

Configuración sin cabeceras de seguridad

Configuración con cabeceras de seguridad

Riesgos de seguridad

Recomendación

A continuación se presenta una serie de plantillas para los distintos servidores. Se recomienda revisar y adaptar algunos valores lo máximo posible a cada producto. En la página asociada a este acelerador se puede encontrar una explicación más detallada de cada cabecera de seguridad.

Plantilla de cabeceras de seguridad en Apache

Para introducir las cabeceras de seguridad en el servidor previamente hay que cargar el módulo correspondiente:

Cargar el módulo

# a2enmod headers

Posteriormente añadir la siguiente configuración al fichero:

/etc/apache2/conf-enabled/security.conf

<IfModule mod_headers.c>
    Header unset X-Powered-By 
    Header always unset X-Powered-By
    Header always append X-Frame-Options: SAMEORIGIN
    Header add Strict-Transport-Security: "max-age=631138519; includeSubDomains; preload"
    Header set X-XSS-Protection: "1; mode=block"
    Header set X-Content-Type-Options: "nosniff"
    Header always set X-Content-Security-Policy "default-src 'self'; img-src 'self$
    Header set Content-Security-Policy "default-src 'self'"
    Header set Referrer-Policy "same-origin"
    Header set Feature-Policy "vibrate 'self' cabeceras2.honeysec.info"
    Header set Content-Security-Policy "upgrade-insecure-requests"
</IfModule>

Para ocultar el nombre y versión del servidor debemos añadir al fichero /etc/apache2/apache2.conf la siguiente configuración:

Ocultar nombre y versión de Apache

ServerSignature Off
ServerTokens Prod

Plantilla de cabeceras de seguridad en TOMCAT

Se debe añadir la siguiente configuración al fichero:

etc/tomcat/conf/web.xml

  <filter>
    <filter-name>httpHeaderSecurity</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
        <param-name>antiClickJackingOption</param-name>
        <param-value>DENY</param-value>
    </init-param>
    <init-param>
        <param-name>hstsEnabled</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>hstsIncludeSubDomains</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>antiClickJackingEnabled</param-name>
        <param-value>true</param-value>
    </init-param>    
    <init-param>
        <param-name>antiClickJackingOption</param-name>
        <param-value>DENY</param-value>
    </init-param> 
    <init-param>
        <param-name>blockContentTypeSniffingEnabled</param-name>
        <param-value>true</param-value>
    </init-param> 
    <init-param>
        <param-name>xssProtectionEnabled</param-name>
        <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
        <filter-name>httpHeaderSecurity</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
    <param-name>cors.allowed.origins</param-name>
<!-- Añadir las fuentes de origenes permitidos -->
    <param-value>https://www.apache.org</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.methods</param-name>
<!-- Solo declarar los métodos utilizados-->
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.headers</param-name>
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
  </init-param>
  <init-param>
    <param-name>cors.exposed.headers</param-name>
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
  </init-param>
  <init-param>
    <param-name>cors.support.credentials</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>cors.preflight.maxage</param-name>
    <param-value>10</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

Para ocultar el nombre y versión del servidor debemos modificar el fichero /etc/tomcat9/server.xml y complementar  la etiqueta existente "connector" de la siguiente manera:

Ocultar nombre y versión de Tomcat

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           server=" "
           redirectPort="8443" />

Plantilla de cabeceras de seguridad en Nginx

Instalar paquete extra de Nginx para que permita la lectura de "more_clear_headers Server;" ,  la cuál añadiremos junto al resto de cabeceras permitiendo ocultar el nombre y versión del servidor :

Paquete de extras Nginx

# sudo apt-get install nginx-extras

Se debe añadir la siguiente configuración al fichero:

/etc/nginx/sites-enabled/default

add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
add_header Content-Security-Policy "default-src 'self';";
add_header X-Frame-Options “DENY”;
add_header X-XSS-Protection "1; mode = block" always;
add_header X-Content-Type-Options nosniff always;
add_header Referrer-Policy same-origin;
add_header Cache-Control "private, no-cache, no-store, max-age=0";
more_clear_headers Server;
  • No labels