Bueno, después del post anterior sobre Digital Ocean, y contar algunas bondades de montar un servidor virtual, y la diferencia de coste y prestaciones en comparación a un servidor físico. Hoy voy a explicar un poco el proceso de usar HTTPS, teníendo un “pequeño” servidor cloud montado en Digital Ocean.
Prer-requisitos
- Servidor con alguna distro de linux (Ubuntu o CentOS7). Para probar puedes montar uno en 5 minutos en Digital Ocean, yo para probar montaría el de menor precio (5$/mes).
- por supuesto tener un dominio que vamos a mover de http a https
Qué es cada una de las cosas que forman esta solución
Varnish: es un sistema cache que sirve para acelerar el funcionamiento de aplicaciones web, también conocido como caché de proxy HTTP inversa.
Bueno no voy a mencionar lo que Google “aprecia” que tu web se abra rápido y proporcionar una buena experiencia al usuario ya sea en entorno de escritorio o móvil.
Hitch: es una librería/desarrollo de alto rendimiento de SSL/TLS proxy. En resumidas cuentas, es la pieza que le hace a Varnish dar soporte terminaciones SSL/TLS (manejar peticiones HTTPS)
Lets Encrypt: Es una iniciativa “sin ánimo de lucro” para permitir la obtención de certificados sin coste. Según sus propias palabras son “una nueva autoridad de certificación: es gratuita, automatizada y abierta”
Acemtool: herramienta amigable, para facilitar el proceso de adquisición/renovación de certificados
Manos a la obra
Tabla de contenidos
#1 – Instalar Hitch y Varnish
sudo apt-get update
sudo apt-get install hitch varnish
sudo yum install epel-release
sudo rpm –nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.1.el7.rpm
sudo yum install hitch varnish
#2 – Configurar Varnish
Creamos el ficheroinclude “/etc/varnish/acmetool.vcl”;
En él vamos a meter el siguiente código que luego lo incluiríamos en el VCL principal de Varnish
# Reenviar peticiones a acmetool, que está a la escucha en el puerto 402
# esto sirve para servir las peticiones de lets encrypt
backend acmetool {
.host = “127.0.0.1”;
.port = “402”;
}
sub vcl_recv {
if (req.url ~ “^/.well-known/acme-challenge/”) {
set req.backend_hint = acmetool;
return(pass);
}
}
Tenemos que añadir esto último en nuestro fichero de configuración (VCL) de Varnish /etc/varnish/default.vcl
include “/etc/varnish/acmetool.vcl”;
Usando Ubuntu abrir el fichero /lib/systemd/system/varnish.service y añadir en la línea de ExecStart lo siguiente:
-a ‘[::1]:6086,PROXY’
Ahora nesitamos actualizar el systemd ejecutando
sudo systemctl daemon-reload
#3 – Instalar Acmetool
vamos a ver la forma de instalarlo bajo Ubuntu Xenial y CentOS7
Ubuntu Xenial
Bajo Ubuntu el paquete de Acmetool está publicado en PPA, así que tendremos que añadir ese paquete y luego instalar:
sudo add-apt-repository ppa:hlandau/rhea
sudo apt-get update
sudo apt-get install acmetool
CentOS7 / Red Hat EL7
Primero hay que añadir el repositorio y luego instalar:
sudo wget –quiet -O /etc/yum.repos.d/hlandau-acmetool-epel-7.repo ‘https://copr.fedorainfracloud.org/coprs/hlandau/acmetool/repo/epel-7/hlandau-acmetool-epel-7.repo’
sudo yum install acmetool
#4 – Adquirir/generar el certificado
Usaremos Acmetool Para generar el certificado.
Usaremos el proceso de la configuración “express” o quickstart de Acmetool.
Acmetool detectará automáticamente que estamos usando Hitch, así que arrancará el proceso de generación de certificado en modo compatible con Hitch.
sudo acmetool quickstart
Hay que ir contestando las diferentes preguntas que van apareciendo en el wizard o proceso de certificación. Y el punto importante de meter el email donde te irán llegando las notificaciones por parte de Letsencrypt (por ejemplo si se va a caducar algún certificado).
————————- Select ACME Server ———————–
1) Let’s Encrypt (Live) – I want live certificates
—————– Select Challenge Conveyance Method —————
2) PROXY – I’ll proxy challenge requests to an HTTP server
Review and (hopefully) accept the letsencrypt.org Terms of Service, and enter your email address.
——————– Install HAProxy/Hitch hooks? ——————
Yes) Do you want to install the HAProxy/Hitch notification hook?
——————– Install auto-renewal cronjob? —————–
Yes) Would you like to install a cronjob to renew certificates automatically? This is recommended.
Bueno, aquí hay un punto importante. Antes de continuar, necesitamos generar el fichero de Diffie-Hellman group (aka dhparams). Y recalco, este punto es muy importante, ya que con ello, podemos evitar una de las vulnerabilidades que surgió hace algún tiempo con Openssl.
sudo openssl dhparam -out /var/lib/acme/conf/dhparams 2048
Ahora ya podemos obtener el certificado:
sudo acmetool want nuestra-web.com
#5 – Configurar Hitch
Llegados a este paso, ya deberíamos tener un certificado válido, y ya podemos configurarlo en en Hitch.
Antes habíamos configurado Varnish para escuchar en un puerto adicional (6086), este es el puerto que aceptará las peticiones que le van llegando utilizando el protocolo PROXY.
Vamos a editar el fichero /etc/hitch/hitch.conf y copiar en él el siguiente fragmento:
## Basic hitch config for use with Varnish and Acmetool
# Listening
frontend = “[*]:443”
ciphers = “EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH”
# Send traffic to the Varnish backend using the PROXY protocol
backend = “[::1]:6086”
write-proxy-v2 = on
# If you run Varnish 4.0 use this instead
#backend = “[::1]:6081”
#write-proxy-v2 = off
# List of PEM files, each with key, certificates and dhparams
pem-file = “/var/lib/acme/live/nuestra-web.com/haproxy”
# Set uid/gid after binding a socket
# Descomentar estas 2 líneas si estamos en un CentOS/RHEL
#user = “hitch”
#group = “hitch”
Ahora iniciamos Hitch con la nueva configuración:
sudo service hitch start
Conclusión
Con esto ya tendremos configurado nuestro servidor con la stack TLS, y accesible desde el navegador vía https:// gracias al certificado gratuito obtenido de Let’s Encrypt.
A partir de este momento, ya quedaría afinar la configuración de Varnish, dependiendo de nuestra necesidad.
En la siguiente imagen se puede ver (a grandes rasgos) de forma gráfica cómo sería el funcionamiento de este montaje.
Repito, a grandes rasgos, ya que la configuración de los puertos puede dierir de un montaje a otro y dependiendo del número de doplets que intervienen en el montaje.
Bueno, cualquier duda o aporte estaré encantado de incluirlo.
Este artículo ha sido basado en https://info.varnish-software.com/blog/five-steps-to-secure-varnish-with-hitch-and-lets-encrypt
Deja un comentario