Exponer servicios en la red de casa con HTTPS

Seguramente tengas una Raspberry o un mini-servidor en casa y te hayas animado a montar un par de servicios como Home Assistant o Guacamole (entre otros), que facilitan un poco tu vida diaria. Vamos a ver como acceder a ellos localmente con dominio y SSL ūüôā

Personalmente, hay servicios que no me gusta exponer a internet. Anteriormente accedía a todos mis servicios por IP, pero en cuánto vas acumulando servicios te das cuenta que:

  • No puedes memorizar todos los puertos
  • Es inc√≥modo estar poniendo puertos

La solución temporal

Mi soluci√≥n temporal a esto fue, aprovechando mi DNS local que uso para AD, crear una zona local en mi dominio (local.dominio.tld). Gracias a esto y usando NGINX puedo usar virtualhosting y exponer servicios a mi red local accediendo de manera f√°cil, en vez de 192.168.1.233:8123 para acceder a Home Assistant ahora pongo hass.dominio.tld y me lleva directamente al login, un lujo, ¬Ņeh?

Estuve un tiempo as√≠ y luego pens√©, oye, ¬Ņy si le pongo SSL a esto? Es m√°s seguro y para mi gusto queda mejor acceder por HTTPS. As√≠ que, ¬Ņvamos a montarlo no?

La solución definitiva

¬ŅQu√© necesitamos?

Necesitamos poca cosa:

  • Servicios que exponer (idealmente configurados con virtualhosting como indico arriba).
  • Un servidor web local (en mi caso NGINX, sobre Ubuntu server).
  • Un servidor DNS local (o tendremos que actualizar el archivo hosts de cada m√°quina).
  • Un public routable domain (necesitamos un dominio en posesi√≥n, al que le podamos cambiar los DNS para a√Īadir un registro TXT para la verificaci√≥n del certificado SSL).

Primer paso – Crear los registros DNS en nuestro servidor, apuntarlo al servidor web y crear un virtualhost

Obviando que tenemos ya un servidor DNS montado y nuestra m√°quina lo usa para resolver, hemos de crear un registro A apuntando al servidor web que vayamos a usar, por ejemplo:

NombreTipoValor
zabbixA192.168.1.230

Una vez creado, si accedemos a zabbix.dominio.tld (sustituyendo dominio.tld por nuestro dominio), deberíamos de llegar a nuestro servidor web. Paso completado.

Segundo paso – Obtener certificado SSL

Para obtener el certificado SSL usaremos Let’s Encrypt, una CA gratuita usada por miles de sitios (incluido este) para obtener certificados. En nuestro paso, obtendremos un certificado wildcard. Esto quiere decir que todo lo que englobe *.dominio.tld podr√° usar este certificado.

Ojo! Este certificado no aplica a subdominios (sub.dominio.tld), solo aplica a un nivel.

Para obtener este certificado, hemos de instalar Certbot

 sudo apt install certbot python3-certbot-nginx 

Una vez instalado esto y comprobado que tenemos el virtualhosting configurado correctamente, ejecutamos este comando:

sudo certbot certonly \
--agree-tos \
--email someone@example.com \
--manual \
--preferred-challenges=dns \
-d *.example.com \
--server https://acme-v02.api.letsencrypt.org/directory

Después de ejecutar eso, cambiando el *.example.com por nuestro dominio, nos dará algo así

sudo certbot certonly \
--agree-tos \
--email someone@example.com \
--manual \
--preferred-challenges=dns \
-d *.example.com \
--server https://acme-v02.api.letsencrypt.org/directory

Hemos de a√Īadir un registro TXT con ese valor a nuestro dominio p√ļblico para que obtenga el certificado.

Una vez hecho esto, le damos al Enter y ya debería de generarnos el certificado.

S√≥lo nos queda a√Īadir este certificado a nuestro servidor web, habilitar el puerto 443 y ya lo tenemos todo expuesto.


¬ŅQuieres estar enterado de las √ļltimas novedades de este blog? Visita la p√°gina de Newsletter para m√°s informaci√≥n o suscr√≠bete directamente desde aqu√≠ con el siguiente formulario


Tambi√©n puedes contactarnos desde el formulario de contacto disponible en este blog en el siguiente enlace.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *