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/homedevuelve 200 anónimo desde LAN, sin formulario de login observado. Bind solo.208, no IPv6. Monta/mnt/nfs_mediacompleto 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/applicationdevuelve 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/streamanónimo local devuelve 401. Sablier healthy. El primer intento a/api/containersdio 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.