Configurar Let's Encrypt con HaProxy en RHEL/CentOS/SL 7
Let's ecnypt nos sirve de CA para tener nuestros certificados firmados sin necesadidad de pagar por ello, este es el motivo por el cual se volvio tan famoso los ultimos tiempos, "Seguridad Gratis!"
En este documento demostraremos como configurar let's encrypt con HaProxy para proteger nuestros sitios HTTP
Primero debemos instalar todos los paquetes necesarios
Instalar paquetes necesarios
Descargar letsencrypt
Creacion del certificado
Antes de crear el certificado
Es muy importante que nos aseguremos que exista un registro DNS publico para el nombre de dominio para el cual queremos crear el certificado y que apunte a la IP de nuestro HaProxy, tambien debemos bajar el HaProxy debido a que el plugin standalone
de la herramienta certbot necesita abrir los puertos 80 y 443, debemos de asegurarnos que desde internet se pueda acceder a los puerto 80 y 443 de nuestro servidor.
Ejecutar Let's Encrypt y obtener nuestro certificado
El comando letsencrypt-auto se encarga de instalar y configurar todas las dependencias que necesitamos para crear nuestros certificados.
Las opciones que utilizamos son las siguientes:
-d dominio.com
: Aqui ingresamos el dominio para el cual queremos crear el certificado
-m maildeladministrador@dominio.com
: Aqui ingresamos el correo del administrador, este correo nos podria ayudar en el futuro para recuperar los archivos .key
--agree-tos
: Esta opcion acepta los terminos de servicio de let's encrypt
Esto nos tuvo que crear los siguientes archivos en el directorio /etc/letsencrypt/live/dominio.com/
La descripcion de los diferentes archivos que se encuentran en dicho directorio son las siguientes
Configurar HaProxy para usear certificados
Preparando los ceriticados
Ahora debemos crear el .pem para el haproxy dentro de la carpeta /etc/haproxy/certs
Luego debemos crear el archivo /etc/haproxy/certs/list.txt
que nos permitira tener varios dominios con sus respectivos certificados en el mismo balanceador
El archivo debe tener la siguiente sintaxis
En este caso
Para esto podemos usar el comando echo
Configurando HaProxy
Lo que debemos hacer en nuestro HaProxy es definir la lista de certificados para el frontend
o listen
En este caso configuraremos nuestro frontend el cual tendra un solo backend, recuerden que pueden tener mas backend
utilizando ACLs en el frontend
Configurar el frontend
Creamos el frontend que escuchara en el puerto 443 y publicara nuestro certificado agregando las siguientes lineas al archivo /etc/haproxy/haproxy.cfg
.
En el frontend se crea una ACL llamada letsencrypt-acl
del tipo path_beg
, esta ACL nos servira mas adelante al momento de renovar los certificados
Configurar el backend
Creamos nuestro backend agregando las siguientes lineas al archivo /etc/haproxy/haproxy.cfg
Luego debemos crear un backend que se utiliza para las validaciones de letsencrypt, que nos permite actualizar luego el certificado sin detener el servicio haproxy, este backend es referenciado en el fronted que creamos previamente, para eso agregamos las siguientes lineas al archivo /etc/haproxy/haproxy.cfg
Configurar renovacion automatica
Los certificados de Let's Encrypt tienen una duracion maxima de 90 dias, en este caso configuraremos la auto-renovacion cada 2 meses de forma a que tengamos tiempo para resolver problemas de autualizacion en caso de que se presenten
Para esta tarea crearemos un script que reciba como parametro el nombre del dominio y ejecute todos los comandos necesarios para la renovacion
Y agregamos lo siguiente
Luego asignamos permisos de ejecucion al script
Ahora debemos agregar una tarea cron que ejecute este script cada 2 meses
Y agregamos
Excelente. Muy bien explicado. Gracias por compartir!!!