Implementar HTTPS y HSTS
Con respecto a la implementación HTTPS y HSTS, ha sido aplicada automáticamente a través del docker-compose que nosotros ejecutamos en unos de los puntos anteriores a este. Concretamente, en el punto 9. Accesibilidad a servicios externos, donde explicamos como obtener todo lo necesario para implementar todos los servicios que nos solicitan.
Comentado esto, explicaremos brevemente la configuración que añade nuestro docker-compose a nuestros diferentes virtualhost para que se logre dicha implementación (HTTPS y HSTS):
HSTS
En primer lugar, para la implementación de la política de seguridad HSTS en nuestro servidor web Nginx, deberemos aplicar las siguientes líneas de configuración que mostramos a continuación en cada uno de nuestros virtualhosts existentes:
- location / ---> Este recurso se utiliza para indicarle al servidor web Nginx a donde tiene que dirigirse las solicitudes que se soliciten. En este caso, le indicamos /, lo que coincidirá con todas las solicitudes demandadas y nos dirigirá a nuestra página web (este recurso se utiliza como última opción). También, podremos poner nuestra URI exacta.
- return 301 https:// ---> Se encarga de redireccionar el tráfico a la versión HTTPS de la página web visitada.
- $host ---> Esta variable es igual a la línea host que se escribe en el encabezado de la solicitud del navegador web o el nombre del servidor que procesa la solicitud si el encabezado host no está disponible.
- $request_uri ---> La variable $request_uri es el URI de solicitud original completo, incluyendo los argumentos. En este caso, /.
- add_header Strict-Transport-Security "max-age=31536000" always; ---> Esta línea de configuración, se encargará de informar a cada unos de los navegadores web que solamente se puede acceder a nuestro sitio web mediante el protocolo HTTPS.
# www.higieneposturalcloudgrupo2.tk
upstream www.higieneposturalcloudgrupo2.tk {
## Can be connected with "web" network
server 172.18.0.5:80;
}
server {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
server_name www.higieneposturalcloudgrupo2.tk;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
# Do not HTTPS redirect Let'sEncrypt ACME challenge
location ^~ /.well-known/acme-challenge/ {
auth_basic off;
auth_request off;
allow all;
root /usr/share/nginx/html;
try_files $uri =404;
break;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
server_name www.higieneposturalcloudgrupo2.tk;
listen 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_certificate /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.crt;
ssl_certificate_key /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.key;
ssl_dhparam /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.dhparam.pem;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.chain.pem;
add_header Strict-Transport-Security "max-age=31536000" always;
include /etc/nginx/vhost.d/default;
location / {
proxy_pass http://www.higieneposturalcloudgrupo2.tk;
}
Como siempre, recordad que por cada cambio se que se realice, deberemos guardarlo con la combinación de teclas Control + O y salir con la combinación de teclas Control + X.
HTTPS
Por último, una vez hayamos visto como se implementa la política de seguridad HSTS en nuestros archivos de configuración virtualhost en el servidor web Nginx, veremos como podemos activar HTTPS en nuestro sitio web para que sea más seguro y la información vaya cifrada. En nuestro caso, ya hemos podido ver un poquito por encima como se activa dicha implementación por lo mostrado en el punto anterior, pero, explicaremos la configuración necesaria para que esto funcione perfectamente. Dicho esto, veamos como se hace:
En primer lugar, deberemos dirigirnos nuevamente a nuestro archivo de configuración virtualhost y añadir las líneas siguientes para que funcione correctamente (las líneas marcadas son las fundamentales para que dicha implementación funcione, las otras no son necesarias):
server {
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
server_name www.higieneposturalcloudgrupo2.tk;
listen 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_certificate /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.crt;
ssl_certificate_key /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.key;
ssl_dhparam /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.dhparam.pem;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/certs/www.higieneposturalcloudgrupo2.tk.chain.pem;
add_header Strict-Transport-Security "max-age=31536000" always;
include /etc/nginx/vhost.d/default;
location / {
proxy_pass http://www.higieneposturalcloudgrupo2.tk;
}
Webgrafía