TPTito Pinardo Gutiérrez
← Volver al rack
English
1U · SSO + 2FACaddy · Authelia · solo LAN y VPN En producción

Posición 3 de 25 en el rack · En producción

Unidad 1U · Acceso a los paneles

Caddy + Authelia · la puerta interna

Doble factor por defecto

Traefik es la puerta a internet; esta es la de dentro. Caddy recibe las peticiones a los paneles del homelab y, antes de dejar pasar ninguna, le pregunta a Authelia si hay una sesión válida con doble factor.

Por qué dos puertas
Lo público y lo de administración no deben compartir entrada. Si alguien encuentra un fallo en la puerta pública, los paneles no están detrás.
Cómo decide
Caddy hace una consulta de autorización a Authelia por cada petición. Authelia decide; el contenido no pasa por ella.
La regla de oro
Un panel protegido no puede ser alcanzable por su puerto directo: si lo es, la protección es decorativa.
  • 2FApolítica por defecto para todo lo protegido
  • 0paneles internos con nombre público
  • 302lo que recibe quien llega sin sesión
  • 5 minde margen para revertir cada cambio de acceso

La puerta interna por dentro

Los paneles internos no se publican: se llega a ellos desde casa o la VPN, y siempre pasando por aquí. Elige un recorrido.

Hermesde visita en la unidad

Pulsa una pieza o elige un recorrido. Si vienes de una habilidad, ya están encendidas las piezas donde la uso.

      Abro un panel por primera vez
      1. Mi portátil, en casa — Desde casa, abro el gestor de contenedores por su nombre interno.
      2. DNS de casa — El DNS de casa resuelve el nombre al proxy interno.
      3. Caddy — Caddy recibe la petición, cifrada con su certificado interno.
      4. Consulta de autorización — Antes de nada, consulta a Authelia si puedo pasar.
      5. Authelia — No hay sesión: Authelia me lleva a su página de inicio.
      6. Primer factor — Primer factor: usuario y contraseña.
      7. Segundo factor — Segundo factor: el código temporal del móvil.
      8. Sesión — Authelia crea la sesión.
      9. Consulta de autorización — Caddy repite la consulta y ahora la respuesta es sí.
      10. Gestor de contenedores — Pasa la petición al panel, que todavía me pide su propio login.
      11. Caddy — La respuesta vuelve por Caddy.
      12. Mi portátil, en casa — Y veo el panel.
      Abro otro panel después
      1. Mi portátil, en casa — Un rato después abro otro panel distinto.
      2. Caddy — Caddy recibe la petición.
      3. Consulta de autorización — Consulta a Authelia.
      4. Sesión — La sesión sigue siendo válida: no hace falta volver a entrar.
      5. Consulta de autorización — Respuesta: sí.
      6. Paneles de la biblioteca — La petición llega al panel de la biblioteca.
      7. Mi portátil, en casa — Lo veo directamente. Un login para todo.
      Lo reviso desde fuera
      1. El móvil, fuera de casa — Estoy fuera de casa y quiero ver la monitorización.
      2. VPN WireGuard — Abro la VPN: el móvil pasa a estar dentro de la red.
      3. DNS de casa — Ahora el nombre interno sí resuelve.
      4. Caddy — Caddy recibe la petición.
      5. Consulta de autorización — Consulta a Authelia.
      6. Authelia — Sesión nueva en este dispositivo: inicio de sesión y código.
      7. Segundo factor — Con el segundo factor, adelante.
      8. Paneles de monitorización — La petición llega al panel.
      9. El móvil, fuera de casa — Lo reviso desde el móvil.
      Alguien intenta saltarse la puerta
      1. Mi portátil, en casa — Un dispositivo de la red intenta ir directo al puerto del gestor de contenedores, sin pasar por Caddy.
      2. Gestor de contenedores — El panel solo escucha dentro de su propio contenedor.
      3. Puertos solo en localhost — La conexión se rechaza: desde la red no hay nada en ese puerto.
      4. Mi portátil, en casa — Lo único que queda es la puerta de verdad.
      5. Caddy — Caddy recibe la petición.
      6. Consulta de autorización — Consulta a Authelia.
      7. Authelia — Y sin sesión con doble factor, no pasa.
      Alguien lo intenta desde internet
      1. Internet — Alguien en internet busca los paneles internos.
      2. Solo red de casa y VPN — Sus nombres no existen fuera de casa y el cortafuegos no deja entrar.
      3. Política de acceso — No hay nada que atacar: la política ni siquiera llega a evaluarse.
      1. Mi portátil, en casa

        Desde la red de casa abro los paneles por su nombre interno.

      2. El móvil, fuera de casa

        Desde fuera solo se llega con la VPN.

      3. VPN WireGuard

        Pone el móvil dentro de la red como si estuviera en casa.

        • WireGuard
      4. DNS de casa

        Los nombres internos solo existen aquí: fuera de casa no resuelven.

        • Technitium DNS
      5. Internet

        Desde donde los paneles internos no se pueden alcanzar.

      6. Caddy

        El proxy interno. Recibe la petición y, antes de tocar el panel, pide permiso a Authelia.

        • Docker
      7. TLS interno

        Caddy firma sus propios certificados para los nombres internos: todo va cifrado también dentro de casa.

        • Docker
      8. Consulta de autorización

        Por cada petición, Caddy pregunta a Authelia «¿esta sesión puede ver esto?». Si no, redirige al inicio de sesión.

        • Docker
        • Linux / SSH hardening
      9. Cabeceras de identidad

        Cuando Authelia dice que sí, Caddy pasa al panel quién es el usuario y a qué grupos pertenece.

        • Docker
      10. Authelia

        El servidor de inicio de sesión único: un login para todos los paneles, con su política de acceso.

        • Linux / SSH hardening
        • Docker
      11. Primer factor

        Usuario y contraseña, con limitación de intentos.

        • Linux / SSH hardening
      12. Segundo factor

        Un código temporal del móvil. La política por defecto lo exige para todo lo protegido.

        • Linux / SSH hardening
      13. Sesión

        Tras entrar, una cookie de sesión vale para todos los paneles durante un tiempo: no hay que repetir el login en cada uno.

        • Linux / SSH hardening
      14. Gestor de contenedores

        El panel con más poder: gestiona los stacks de Docker. Doble factor y, después, su propio login.

        • Docker
      15. Paneles de la biblioteca

        Los servicios que mantienen ordenada la biblioteca multimedia.

        • Docker
      16. Panel del DNS

        La administración del DNS de casa, solo detrás de esta puerta.

        • Technitium DNS
      17. Paneles de monitorización

        Métricas y seguridad, para revisarlas desde cualquier sitio con la VPN.

      18. Puertos solo en localhost

        Los paneles protegidos publican su puerto solo hacia dentro del propio contenedor: el único camino para llegar es Caddy.

        • Docker
        • Linux / SSH hardening
      19. Solo red de casa y VPN

        Los nombres internos no existen en internet y el cortafuegos no deja entrar desde fuera.

        • Linux / SSH hardening
      20. Política de acceso

        Por defecto, doble factor. Las excepciones son explícitas y pocas.

        • Linux / SSH hardening
      21. Recarga sin cortes

        Los cambios de configuración se validan y se recargan sin tirar el proxy.

        • Docker

      Lo que uso de mi árbol

      Pulsa una habilidad: se encienden en el mapa las piezas donde la uso y te cuento para qué.

      Docker
      Caddy, Authelia y los paneles corren como contenedores; los protegidos publican su puerto solo en localhost.
      Linux (Debian, Alpine, Arch)
      Un contenedor Linux con Docker que agrupa el proxy interno y los paneles de la biblioteca.
      WireGuard
      Desde fuera de casa, los paneles solo se alcanzan a través de la VPN.
      Technitium DNS
      Los nombres internos solo resuelven en el DNS de casa, y su panel de administración está detrás de esta puerta.
      Linux / SSH hardening
      Inicio de sesión único con doble factor por defecto, ningún panel con nombre público y ningún atajo por puerto directo.

      Bitácora de incidencias

      Averías reales. Lee el síntoma, elige la causa que creas y mira cómo se arregló.

      1. #1

        Una puerta con doble factor… y otra sin él

        06-09-2026 · auditoría

        El gestor de contenedores ya pedía inicio de sesión y doble factor a través de la puerta interna. En la auditoría, aun así, lo marqué como hallazgo.

        ¿Qué crees que pasaba?

        Ver la solución
        Causa
        El contenedor publicaba su puerto en todas las interfaces. Quien estuviera en la red podía ir directo al puerto y saltarse Caddy y Authelia. Para un panel con acceso a Docker, eso es acceso de administrador.
        Solución
        Publicar el puerto solo en localhost y comprobarlo: sin sesión, la puerta da 302 al login; el puerto directo, rechazado desde el PC. Con reversión automática a los 5 minutos por si me dejaba fuera.
        Lección
        La autenticación delante solo sirve si no hay otro camino. Hay que probar el atajo, no solo la puerta.
      2. #2

        Paneles internos con nombre público

        26-09-2026 · superficie

        Revisando todo lo que se veía desde internet, varios paneles de administración tenían su propio nombre público y su ruta en la puerta de internet.

        ¿Qué crees que pasaba?

        Ver la solución
        Causa
        Cada panel se había publicado en su momento para poder verlo desde fuera. Ninguno era grave por sí solo; juntos eran demasiada superficie.
        Solución
        Retirar de internet sus rutas y sus registros DNS en un mismo día. Siguen en uso, pero detrás de esta puerta: desde casa o la VPN, con doble factor.
        Lección
        La comodidad publica cosas de una en una; la seguridad las revisa todas juntas.

      Cómo se construyó

      1. Verano de 2026

        Caddy para los nombres internos

        • Un proxy interno con certificados propios para los nombres de casa.
        • Authelia delante de los paneles de la biblioteca.
      2. 06-09-2026

        Auditoría de acceso

        • Doble factor como política por defecto.
        • El gestor de contenedores, detrás de la puerta y con su puerto solo en localhost.
        • Cada cambio, con un temporizador de reversión de 5 minutos.
      3. 26-09-2026

        Todo lo interno, por aquí

        • Los paneles que se veían desde internet pasan a esta puerta.
        • El panel del DNS nuevo también, con su backend aceptando solo a Caddy.
      4. 15 al 18-10-2026

        Un solo inicio de sesión

        • El servidor Git, el hipervisor, el servidor de copias y el gestor de secretos entran con Authelia por OIDC, exigiendo el grupo de administradores.
        • Una cuenta, un segundo factor y un sitio donde quitar el acceso.
        • Sus certificados internos, firmados por la autoridad de casa.

      Decisiones (y por qué)

      • Dónde se autentica

        Una vez, en Authelia, para todos los paneles

        Cada panel con su propio login débil es un punto flojo. Con inicio de sesión único, el doble factor protege todo a la vez.

      • Qué pasa con los logins propios

        Se conservan detrás del SSO

        Para el panel más delicado, el doble factor de Authelia no sustituye su login: lo precede. Dos llaves distintas.

      • Cómo se aplica un cambio de acceso

        Con reversión automática

        Un error en la puerta te deja fuera de la puerta. Cada cambio llevaba un temporizador que deshacía todo a los 5 minutos si no lo cancelaba tras probar.

      Lo que aprendí

      • Separar la entrada pública de la de administración.
      • Probar el atajo: una puerta con doble factor no sirve si hay una ventana abierta al lado.
      • Cambios de acceso siempre con un camino de vuelta automático.

      Lo siguiente

      • Integrar más paneles por OIDC para que dejen de necesitar su propia cuenta local.
      • Llevar la configuración de Caddy al repositorio de infraestructura, como las rutas de Traefik.

      ¿Hablamos?

      Puedo contar cualquiera de estas decisiones en detalle en una entrevista.

      Descargar CV Contactar ← Volver al rack

      Reconstrucción a partir de mi documentación: sin nombres internos, direcciones ni usuarios.