🧭 Contexto
El objetivo de este proyecto fue convertir un entorno doméstico en una plataforma productiva de servicios personales y de desarrollo, con un enfoque fuerte en seguridad por diseño, aislamiento y automatización.
Partiendo de un host Debian con recursos limitados, se construyó un homelab hardened capaz de exponer servicios al exterior sin abrir puertos, incorporando principios de Zero Trust, control de identidad y separación clara de responsabilidades entre componentes.
⚙️ Arquitectura y diseño
La infraestructura se apoya en una arquitectura modular, mínima y auditable, organizada por dominios funcionales:
- Docker Compose orquesta stacks independientes (media, automatización, storage, seguridad).
- Redes internas aisladas evitan movimiento lateral entre servicios.
- Caddy actúa como reverse proxy interno y punto único de entrada.
- Cloudflare Tunnel publica servicios sin exposición directa del host.
- Cloudflare Access gobierna el acceso por identidad, sesión y políticas.
Servicios principales:
- n8n como motor de automatización personal.
- PostgreSQL como backend persistente de n8n.
- Redis para colas, estado y cacheo.
- Ollama como motor de inferencia local para flujos asistidos por IA.
- MinIO (S3) para artefactos, backups y datos intermedios.
Arquitectura de alto nivel:
graph TD A[Internet] --> B[Cloudflare Edge] B --> C[Cloudflare Tunnel] C --> D[Caddy Reverse Proxy] D --> E[Jellyfin] D --> F[n8n] F --> G[PostgreSQL] F --> H[Redis] F --> I[MinIO] J[Fail2Ban] --> D K[WireGuard VPN] --> D
🔐 Seguridad, Zero Trust y hardening
-
Cloudflare Tunnel
Eliminación total de port forwarding. El host no expone puertos públicos; todo el tráfico entra desde Cloudflare hacia un túnel autenticado. -
Cloudflare Access (Zero Trust)
Acceso a servicios sensibles mediante identidad, MFA y políticas contextuales. n8n queda completamente fuera del alcance público. -
Caddy reverse proxy
TLS interno, headers de seguridad, rate limiting y control fino de rutas. -
Fail2Ban
Jails personalizadas para SSH y servicios internos. Análisis de logs y endurecimiento del host. -
WireGuard VPN
Canal administrativo privado para tareas de mantenimiento y contingencia, independiente de Cloudflare. -
Supervisión y alertas
Watchdogs con systemd y alertas automáticas ante caídas o reinicios inesperados.
🤖 Stack de automatización (n8n + servicios aledaños)
La automatización se implementó como stack dedicado, tratado como infraestructura crítica:
- n8n: orquestador de flujos internos y experimentales.
- PostgreSQL: persistencia confiable de ejecuciones, credenciales y configuraciones.
- Redis: manejo de estado, colas y desacople de procesos.
- Ollama: inferencia local de modelos LLM para clasificación, redacción y enriquecimiento de datos.
- MinIO (S3): almacenamiento de archivos temporales, resultados y backups.
Todo el stack:
- Corre en red privada.
- No expone puertos al exterior.
- Se accede exclusivamente mediante Cloudflare Access.
Este enfoque permite automatizar flujos con IA sin depender de servicios externos, manteniendo seguridad, control y trazabilidad.
📈 Resultados
| Indicador | Antes | Después |
|---|---|---|
| Exposición de servicios | Puertos abiertos | Zero Trust (Tunnel + Access) |
| Acceso a n8n | Credenciales locales | Identidad + MFA |
| Superficie de ataque | Media | Mínima |
| Automatización | Scripts aislados | Plataforma centralizada |
🧠 Lecciones aprendidas
- Zero Trust no es exclusivo de entornos enterprise: escala perfectamente en homelabs.
- Cloudflare Tunnel reduce riesgo operativo y complejidad.
- Los logs son el mejor IDS: monitorear Fail2Ban y WireGuard da visibilidad inmediata.
- Separar acceso, red y persistencia mejora la seguridad global.
- n8n gana valor cuando se lo trata como plataforma, no como herramienta.
🧠 Rol: Diseño e implementación de infraestructura doméstica Zero Trust
🧩 Duración: Continuo (2024–2025)
⚒️ Stack: Debian, Docker, Caddy, Cloudflare Tunnel, Access, Fail2Ban, WireGuard, n8n, PostgreSQL, Redis, MinIO, Jellyfin