argos-edge: el edge gateway que me he montado para el homelab

Llevaba tiempo dándole vueltas. Tengo el homelab detrás de Zoraxy desde hace meses y funciona bien para lo que es, pero echaba en falta un WAF de verdad y reglas tipo target group para repartir tráfico entre varios upstreams con health checks decentes. Probé alternativas:

  • Nginx Proxy Manager: demasiado básico. Bien para empezar, se queda corto rápido.
  • Zoraxy: lo que uso ahora. Buen reverse proxy pero sin WAF.
  • BunkerWeb: muy potente pero la curva de configuración no me convencía.
  • SafeLine: WAF muy bueno pero quería el proxy y la seguridad en el mismo panel, no dos productos separados.

Al final me he puesto a montarme el mío. Se llama argos-edge y lleva ya varios meses estable en producción en mi propia infra antes de publicarlo.

Qué es

Un edge gateway self-hosted en un solo panel: reverse proxy + WAF + load balancing + Lets Encrypt + SSO. Tres contenedores, una bridge de Docker, un volumen persistente por servicio. El panel es un binario Go con la SPA de React embebida y SQLite como único datastore. Sin Redis, sin Postgres, sin nada externo.

argos-edge dashboard

Lo que hace

  • Reverse proxy sobre Caddy 2 con Lets Encrypt automático y HTTP/3. Añades un host desde el panel y el certificado se provisiona en la siguiente petición. DNS-01 con varios proveedores y credenciales cifradas.
  • Target groups estilo AWS ALB: un host público puede balancear entre varios upstreams con health checks activos y pasivos.
  • WAF inline con Coraza + OWASP CRS vía el componente AppSec de CrowdSec. Switchable entre detect / block / disabled por host en runtime, sin reiniciar nada. Exclusiones de reglas CRS y SecRule custom por host.
  • Threat intel comunitaria de CrowdSec con bans por país (expandidos en el panel a decisiones de tipo Range porque el bouncer no se come Country directamente; submit async + poll para expansiones grandes como BR con ~5000 rangos).
  • Drift detection: el panel comprueba que el estado real de CrowdSec coincide con lo que el panel cree que está configurado. Si no, banner en el dashboard.
  • SSO por host: OIDC (Authentik, Authelia, Keycloak, Google, Okta) más ForwardAuth para meter cualquier HTTP service detrás del mismo cookie de sesión.
  • 2FA local con TOTP RFC 6238 y códigos de recuperación. Subcomandos CLI break-glass por si pierdes teléfono y códigos a la vez.
  • Notificaciones: Slack, email/SMTP, Telegram, webhook genérico, Web Push del navegador. Reglas por evento, rate limiting e historial de entrega.
  • Cert uploads manuales para hosts en redes cerradas donde ACME no llega.
  • Backup y restore vía snapshots VACUUM INTO. Programado, manual y restore desde upload.
  • Logs browser sobre Caddy access + WAF audit + panel audit, con retención.

Stack

  • Caddy 2 para el proxy (TLS, Lets Encrypt, HTTP/3).
  • Coraza + OWASP CRS para el WAF.
  • CrowdSec para threat intel y el componente AppSec inline.
  • Backend Go en un único binario con la SPA de React embebida. SQLite como storage. Background goroutines para reconciler, drift detector, job runner, worker de notificaciones, ingestor de logs y scheduler de backups.

Probarlo

git clone https://github.com/cmos486/argos-edge.git
cd argos-edge
cp .env.example .env
# editar .env: ARGOS_SESSION_SECRET, ARGOS_MASTER_KEY,
#              ARGOS_INITIAL_ADMIN_PASSWORD
docker compose up -d

Abre http://<ip-del-host>:8080 y entra con las credenciales que pusiste en el .env.

Hay dos modos de operación que se eligen con ARGOS_PANEL_MODE:

lan (default) behind_caddy
Cómo accedes al panel http://<ip-lan>:8080 https://$ARGOS_PANEL_DOMAIN/
:8080 publicado en host no (solo interno)
Cookie Secure off on
HSTS / CSP estricto off on
Browser Push bloqueado (sin HTTPS) funciona

Cambiar de uno a otro es un cambio en .env y un restart.

Estado y licencia

Estable y en desarrollo activo. Es solo-maintained y de grado homelab. Hace lo que hace bien pero no pretende ser un load balancer hyperscaler ni un ingress de Kubernetes.

Licencia Business Source License 1.1:

  • Libre para: uso personal, no comercial, uso interno empresarial, contribuciones community, deployments self-hosted.
  • No permitido: ofrecer argos-edge como servicio comercial de reverse proxy / WAF / application gateway a terceros.
  • Pasa a Apache 2.0 el 2030-04-20.

Enlaces

Si lo pruebas y le encuentras algo raro, abre un issue. Y si te gusta, una estrella en el repo siempre se agradece.