Skip to content

Auditoría de servicios y acceso — 19 octubre 2026

Lecturas 23:02–23:05 CEST. Solo lectura de informes, Docker, código desplegado, Prometheus y DNS. Sin despertares Sablier, login personal, operaciones de medios, notificaciones, cambios de configuración ni lectura de config privada de Soularr. Se leyeron homelab-operations, referencia de acceso, AGENTS de homelab-docs, ACCIONES y los últimos review-next/apply-next. La confianza LAN histórica se conserva como contexto; exposición LAN no se presenta como intrusión.

Prioridad 2: proteger el editor de configuración de Soularr

Servicio activo en VM208, sin reinicios/OOM, con puerto 8265 publicado en todas las interfaces IPv4/IPv6. HEAD desde Mac a .208:8265 da 200. HEAD a soularr.monxas.casa forzando la VIP .250, TLS válido y sin proxy de entorno, da 200. Caddy CT271 tiene un reverse_proxy directo a .208:8265, sin auth en ese handle. No tiene middleware Sablier.

El código desplegado /app/webui/webui.py, leído como fuente y analizado con AST, registra GET /api/config que lee el archivo completo y POST en la misma ruta que escribe el contenido recibido. DELETE /api/failed-imports/<album_id> puede ejecutar shutil.rmtree; no hay decoradores de identidad, hook before_request ni import de autenticación en el módulo. La UI/JS estática anónima referencia esas rutas. No se invocaron estas APIs ni se leyeron sus configuraciones, importaciones o logs.

El edge público se comprobó explícitamente con DNS público, --resolve a 104.21.19.80 y --noproxy '*': HEAD devuelve 302 a Cloudflare Access. La respuesta 403 de un primer cliente con entorno de proxy no se cuenta como evidencia del edge. No se afirma exposición WAN anónima.

Mejora concreta: añadir identidad al plano editor, conservando el pipeline Soularr→slskd/Lidarr. Alternativas: autenticación nativa revisada en la UI, o proxy OIDC real delante del editor y restricción del puerto 8265 a Caddy y consumidores inventariados. Restringir solo el puerto deja la ruta LAN de Caddy sin identidad; bind loopback rompería el Caddy remoto. Pocket ID no ofrece /forward-auth: no debe apuntarse Caddy a ese supuesto endpoint. Requiere inventariar consumidores antes de cerrar acceso y validar lectura/escritura con fixture aislada. No se propone parar el ingestor ni cambiar credenciales de Lidarr/slskd.

Cobertura pendiente: los 29 no son 29 averías

Informe registrado: 2026-10-19T20:40:09.254945Z, unos 22 minutos al leerlo; 11 contratos, 0 fallos, 29 sin verificar. Cobertura: productos registrados desde el fleet VM208, incluido delegado ABS CT218; no todo el homelab.

Motivo Número Trabajo real necesario
Evidencia funcional vencida/ausente 11 Revalidar flujo específico cuando sea oportuno; no lanzar descargas/reproducción por el panel
Acceso/login sin acreditar 11 Completar pruebas de identidad nativa/LAN/WAN; algunas requieren login personal
Imagen mutable sin política acreditada 5 ABS, Karakeep, Prowlarr, Radarr y Sonarr: documentar política/pin sin pull/recreate masivo
Recuperación completa 2 Plundrio y plundrio-onepacerr: config, credenciales y descargas aisladas, no solo copiar ficheros

No se amplían caducidades ni se registran recibos nuevos sin prueba. Los colectores/rutas reparados en la tanda anterior no se repiten como incidentes.

Nuevos productos examinados y límites

  • Mylar3: running, 0 reinicios/OOM; .208:8090/home devuelve 200 anónimo desde LAN, sin formulario de login observado. Bind solo .208, no IPv6. Monta /mnt/nfs_media completo RW como /data. Endurecimiento opcional a revisar según uso: identidad de UI y alcance de escritura a su biblioteca. No se probaron APIs, búsquedas, descarga, edición ni recuperación.
  • slskd: running/healthy, 0 reinicios/OOM; shell web anónimo 200 pero /api/v0/application devuelve 401. No se deduce falta de identidad por la página estática. No se leen transferencias ni se dispara descarga.
  • code-server: running, 0 reinicios/OOM; password configurado (solo booleano comprobado), raíz devuelve 302 a login. Monta únicamente su directorio /config, sin socket Docker. Login y recuperación no comprobados.
  • Dozzle/Sablier: ambos activos, sin socket Docker en consumidores; sidecars internos sin puertos publicados. Dozzle /api/events/stream anónimo local devuelve 401. Sablier healthy. El primer intento a /api/containers dio 404 porque no es la ruta de la versión actual; no se interpreta como prueba de autorización. Login passkey sigue pendiente según apply-next-access.

Monitorización y reconciliaciones

Prometheus CT217, muestra 21:03:14Z: 44 targets, todos up. Alertas firing: tres ArrSaludWarning y RemotePulseHostDown; Dependabot está pending. Sin alerta actual de onepacerr. No se deduce salud funcional global de los scrapes. RemotePulse/Carmelo queda fuera del alcance. MySpleen ya estaba documentado; no se repite como hallazgo nuevo ni se fuerza test de indexer.

onepacerr ha cambiado desde review-next: Docker indica running desde 20:18:19Z, 0 reinicios/OOM, restart unless-stopped, sin healthcheck y sin puerto host. Este agente no lo arrancó. La causa/autorización de ese arranque no queda acreditada aquí; el pendiente debe reconciliarse, no seguir describiéndolo como created actual ni atribuirle funcionalidad acreditada por estar running.

TRMNL/Mylar conserva una deriva conocida H7 del ADR-0027: Caddy CT271 todavía envía trmnl.monxas.casa a .208:8090, puerto ahora de Mylar3, tras Sablier para los tres contenedores TRMNL. No se visitó esa URL ni se despertaron TRMNL. Reconciliar dueño y puerto antes de declarar recuperado TRMNL; no se presenta el H7 conocido como hallazgo nuevo.

DNS, segunda tanda acotada

24 consultas A directas a ambos Pi-hole .204 y .23: los 12 nombres coinciden entre resolvers. pmx-50=.50, pmx-51=.51, nas=.20, ha=.171, caddy1=.40, caddy2=.41, jellyfin=.220, n8n=.200, pihole=.204, tv-gw=.210, ha-ml=.201 y soularr.monxas.casa=.250. No se repite el antiguo F04 de discrepancia DNS. Es una muestra de nombres, no una certificación de toda la zona o failover.

No se hicieron cambios de servicio, firewall, DNS, contratos o calendarios.