Interfaz web de Pi-Hole con HTTPS y Traefik

Accede por HTTPS a la interfaz web de Pi-Hole gracias a Traefik

Interfaz web de Pi-Hole con HTTPS y Traefik

Ya os he hablado en otras entradas de Pi-Hole y sus maravillas. Está pensado para que lo despleguemos en nuestra red local, sin acceso directo desde el exterior, y nos ofrece una interfaz web desde la que lo podemos administrar de manera sencilla.

Dicha interfaz está protegida por contraseña, para que sólo nosotros controlemos el estado de nuestra red. Sin embargo, sólo ofrece una interfaz HTTP. De por sí, no debería ser un problema, si sólo podemos acceder a ella desde nuestra LAN y controlamos qué dispositivos están conectados a ella. Pero si eres de los míos y prefieres utilizar sólo accesos HTTPS en los navegadores, y además usar certificados de confianza, tienes varias maneras de configurar tu servidor para acceder por HTTPS directamente.

En esta entrada lo haremos haciendo uso de Traefik, pues es la manera más sencilla y, ya que lo tenemos desplegado para administrar algunos contenedores Docker, aprovecharemos para ver cómo integrarlo con servicios que no se encuentre desplegados en contenedores.

Activar el proveedor mediante configuración

El primer paso lo ejecutaremos en la configuración de nuestro fichero docker-compose.yml de Traefik. Comenzaremos por añadir un nuevo provider que cargará la configuración desde un fichero, de manera dinámica. Para ello, bastará con que añadamos, bajo la orden command, las siguentes líneas:

services:
  traefik:
    command:
      - --providers.file=true
      - --providers.file.directory=/traefik/config
      - --providers.file.watch=true
    volumes:
      - ./config:/traefik/config
Líneas a añadir al fichero docker-compose.yml de Traefik

Como podéis ver, apenas 3 líneas nos van a dar acceso a un nuevo tipo de configuración basado en fichero. La primera será la que lo active, mientras que la segunda indicará en qué directorio se encontrarán dichos ficheros y la tercera activará el modo "vigilancia", de manera que cuando modifiquemos dichos ficheros, Traefik automáticamente recargará su configuración, sin necesidad de reiniciarlo. Por otro lado, necesitaremos montar un directorio local y asociarlo a /traefik/config  para que pueda verlo el contenedor y nosotros podamos editarlo desde nuestro editor favorito directamente.

Crear el fichero de configuración dinámica

Una vez añadidas dichas líneas a nuestro docker-compose.yml, es el turno de crear la configuración necesaria. Para eso, crearemos un fichero YAML en el directorio ./config y lo llamaremos, por ejemplo, dynamicConfig.yml (el nombre del fichero da igual, lo importante es que esté en formato YAML y tenga la extensión .yml o .yaml). Lo abrimos con nuestro editor y lo rellenaremos con la siguiente información:

http:
  routers:
    router-pihole:
      entrypoints:
        - https
      rule:
        - Host(`pihole.example.org`)
      service: service-pihole
      tls:
        certResolver: myresolver
  services:
    service-pihole:
      loadBalancer:
        servers:
          - url: "http://192.168.1.2:8888"
Contenido de la configuración dinámica de Traefik con Pi-Hole

Es bastante sencillo. Primero definimos un nuevo router que hemos llamado router-pihole (le podemos dar el nombre que queramos, el prefijo router se lo he puesto por claridad, pero no es necesario). En dicho enrutamiento especificamos que queremos que Traefik lo asocie al entrypoint de HTTPS y que responda a la URL pihole.example.org, de manera que, cuando accedamos a ella, nos redireccione al servicio y nos aplique Let's Encrypt con el resolvedor de certificados myresolver (que deberemos tener definido y configurado en nuestro docker-compose.yml de Traefik).

En cuanto al servicio service-pihole, le indicaremos que se encuentra en la URL 192.168.1.2 y puerto 8888 (ya que el puerto 80 lo tengo controlado por Traefik también), para que Traefik sepa a dónde debe derivar las peticiones. Si lo tuviéramos en varios sitios (por ejemplo, si tenemos un MinIO en varios servidores), pondríamos la lista ahí y el propio Traefik nos haría de balanceador de carga.

¡Y listo! Con esto, la próxima vez que accedamos a la URL pihole.example.org, estaremos accediendo a la interfaz web de nuestra Pi-Hole mediante HTTPS, con lo cual cuando metamos la contraseña será un poco más seguro. 😊

Ejemplo de cómo se ve la interfaz web de Pi-Hole en el navegador Safari con HTTPS
Ejemplo de cómo se ve la interfaz web de Pi-Hole en el navegador Safari con HTTPS

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:

Donar