Proxmox: Interfaz web usando un certificado de Let's Encrypt

Como vimos en el tutorial sobre cómo instalar Proxmox, cuando accedemos a la página web de administración vemos que está servida sobre HTTPS y que nos proporciona un certificado autofirmado. En algunos navegadores o sistemas operativos esto puede ser un problema a la hora de acceder al panel web de Proxmox, ya que si no identifica el certificado puede llegar a marcar la página como insegura e, incluso, bloquearla.

Por ello, investigué cómo integrar un certificado de Let's Encrypt, al igual que hago con todos los servicios web que tengo expuestos en mi nube (incluso aunque no tengan acceso al exterior). Por lo general, casi todos ellos son gestionados por Traefik, ya que son servicios de una misma nube y, de esa forma, concentro todos los servicios bajo un mismo certificado. Sin embargo, no quiero eso para mi servidor, ya que se trata de una entidad que voy a manejar independientemente y que quiero tener, por ahora, aislada.

Pero basta de divagaciones, ¡veamos cómo obtener nuestro propio certificado! Proxmox nos proporciona un montón de servicios para hacerlo, pero en este tutorial veremos cómo hacerlo para DuckDNS, con lo que, si no tenéis cuenta, deberéis primero crearos una.

Creación de la cuenta

Para comenzar, deberemos crearnos una cuenta en Let's Encrypt con el fin de que se nos pueda notificar cuándo va a expirar nuestro certificado y para que dicha entidad tenga un registro de qué usuarios firman qué cosas. Afortunadamente, no requiere de un registro al uso con su contraseña y demás, sino sólo de un correo válido en el que poder recibir los email que nos envíe la entidad.

El primer paso será acceder a nuestra consola de Proxmox y, desde ahí, seleccionar el Datacenter y, en la columna de menú, la opción de ACME.

Menú del datacenter con la opción ACME seleccionada

En la pantalla veremos que en la sección Accounts tenemos la opción de crear una nueva, así pues pulsamos sobre Add e introduciremos los siguientes datos:

  • Account Name: Nombre que queremos darle a la cuenta (por ejemplo, DuckDNS).
  • E-Mail: Correo electrónico de contacto. Ha de ser uno válido.
  • ACME Directory: Aquí seleccionaremos Let's Encrypt V2 si vamos a usar nuestro certificado para producción o Let's Encrypt V2 Staging si lo que queremos es un certificado de pruebas (expiran mucho antes y no son de confianza realmente, pero se nos permite generar muchos más en menos tiempo y vienen bien si sólo queremos probar).

Aceptamos los Términos y condiciones y pulsamos sobre Register.

Ventana de creación de cuenta en Let's Encrypt

Una vez creada la cuenta, en la sección de abajo, llamada Challenge Plugins, deberemos añadir uno nuevo (pulsando sobre el Add de esta sección) e introducir lo siguiente:

  • Plugin ID: Será el nombre con el que identificaremos nuestro plugin, por ejemplo: duckdns.
  • Validation delay: Podemos dejarlo en el valor por defecto (30).
  • DNS API: Puesto que lo estamos haciendo para DuckDNS, seleccionaremos de la lista la opción duckdns.
  • API Data: Aquí pegaremos nuestro token, pero con el siguiente formato: DuckDNS_Token=misupertokendeduckdns.
Ventana de creación de un plugin para DuckDNS

Obtención del certificado

Una vez tenemos la cuenta y el plugin creados, seleccionamos nuestro nodo y escogemos la opción del menú Certificates.

Menú del nodo con la opción Certificates seleccionada

En la pantalla veremos que nos aparece una sección llamada ACME. Pulsaremos sobre el botón de Add y rellenamos con:

  • Challenge Type: Seleccionaremos la opción preferida, HTTPS o DNS. Tened en cuenta que, si seleccionáis la primera, el nodo debe estar accesible a Internet en los puertos 80 y 443. Yo lo tengo accesible sólo desde mi LAN (y os recomiendo lo mismo), por lo que seleccionaremos la opcion DNS.
  • Plugin: Esta opción es exclusiva para el Challenge Type DNS, por lo que sólo se verá si hemos escogido esa opción. En ella, seleccionaremos el plugin creado en el paso anterior, en nuestro caso el llamado duckdns-plugin.
  • Domain: Aquí hemos de poner el dominio completo para el que queremos el certificado. Deberemos incluir también duckdns.org, no sólo nuestro subdominio particular.
Ventana de creación de un certificado DuckDNS

Pulsamos sobre Create y a continuación, a la derecha del botón de Add, vemos que hay una opción llamada Using Account. Deberemos pulsar sobre el desplegable y seleccionar la cuenta que creamos en el primer paso (que llamamos DuckDNS). Le damos a Apply.

Una vez tenemos todo listo y guardado, ya podemos pulsar sobre el botón Order Certificates Now y veremos cómo, tras un par de minutos, tenemos nuestro certificado creado en la lista que está justo encima de la sección ACME de este apartado.

Acceder a Proxmox con el nuevo certificado

El último paso para poder hacer uso del certificado será acceder mediante la dirección web que hemos configurado. Deberemos primero añadir, bien en nuestro fichero /etc/hosts, bien en nuestra lista de DNS Records de Pi-Hole o bien donde tengamos nuestro proveedor de dominios locales, la asociación de la dirección web que hemos registrado con la IP de nuestro servidor Proxmox. En el ejemplo anterior, sería algo como, en el fichero /etc/hosts una nueva línea con lo siguiente:

192.168.1.50   parra-lab.duckdns.org
Entrada de enrutamiento del dominio a la IP del servidor de Proxmox en la LAN

¡Y listo! Ya sólo nos quedará acceder desde nuestro navegador a https://parra-lab.duckdns.org:8006 y veremos cómo el navegador nos reconoce el certificado, de manera que tendremos todas las comunicaciones con nuestro servidor correctamente protegidas y cifradas (aunque no salgamos de nuestra LAN).

Si te ha gustado la entrada, o te ha sido útil y quieres ayudarme a pagar los gastos que conlleva el servidor y mantener así el blog libre completamente de anuncios, puedes hacer una donación en Bitcoin en la siguiente dirección: