Saltar a contenido

O9.4 - Service Access Publication

Fecha de ejecucion: 2026-06-01

Objetivo

Validar los DNS ya creados, inventariar la exposicion real de servicios y publicar solo los frontends aprobados por NPM con HTTPS, manteniendo los servicios tecnicos sensibles fuera de exposicion publica directa.

Safe point inicial

  • git status -sb -> ## main...origin/main
  • git rev-parse HEAD -> 8106783dab59875b8b8548d83bb87b3de7deb528

Alcance validado

  • VPS auditado por ssh openclaw-vps
  • DNS validados desde esta workstation y desde el VPS
  • NPM validado por base SQLite, proxy_host/*.conf efectivos y pruebas HTTP
  • servicios revisados:
  • Grafana
  • Prometheus
  • Alertmanager
  • Thanos Query
  • Portainer
  • OpenClaw
  • Knowledge Portal

Resultado ejecutivo

  • OpenClaw, Knowledge Portal, Grafana y Portainer quedaron accesibles por HTTPS a traves de NPM
  • Portainer dejo de publicar 8000/9443 en el host; ahora solo escucha en proxy-network
  • Grafana fue unido a proxy-network y publicado con Let's Encrypt
  • Prometheus, Alertmanager y Thanos Query no se publicaron; siguen internos en obs-observability-internal
  • los DNS sensibles siguen resolviendo al VPS, pero sin backend tecnico publicado por NPM

Tabla de acceso y riesgo

Servicio DNS Estado DNS Estado NPM URL final Autenticacion Recomendacion Riesgo
Knowledge Portal doc.alpuntodeventa.com.ar resuelve 46.202.151.32, HTTP 301, HTTPS 200 activo, 4.conf, upstream knowledge-portal:8085 https://doc.alpuntodeventa.com.ar/ sin auth PUBLICAR bajo
OpenClaw openclaw.alpuntodeventa.com.ar resuelve 46.202.151.32, HTTP 301, HTTPS 200 activo, 3.conf, upstream openclaw-gateway:18789 https://openclaw.alpuntodeventa.com.ar/ login/token propio de OpenClaw PUBLICAR medio
Grafana grafana.alpuntodeventa.com.ar resuelve 46.202.151.32, HTTP 301, HTTPS 302 /login activo, 5.conf, upstream grafana:3000 https://grafana.alpuntodeventa.com.ar/login credencial admin via secreto local PUBLICAR medio
Portainer portainer.alpuntodeventa.com.ar resuelve 46.202.151.32, HTTP 301, HTTPS 200 activo, 2.conf, upstream https://portainer:9443 https://portainer.alpuntodeventa.com.ar/ login existente de Portainer PUBLICAR medio
Prometheus prometheus.alpuntodeventa.com.ar resuelve 46.202.151.32, HTTP 200 fallback, HTTPS sin host activo no publicado no aplica sin auth publica observada NO PUBLICAR salvo capa extra medio
Alertmanager alerts.alpuntodeventa.com.ar resuelve 46.202.151.32, HTTP 200 fallback, HTTPS sin host activo no publicado no aplica sin auth publica observada NO PUBLICAR salvo capa extra medio
Thanos Query thanos.alpuntodeventa.com.ar resuelve 46.202.151.32, HTTP 200 fallback, HTTPS sin host activo no publicado no aplica sin auth publica observada NO PUBLICAR salvo capa extra alto

Inventario por servicio

Servicio Contenedor real Puerto interno Red Docker proxy-network Proxy host real Credenciales conocidas Riesgo de exposicion
Knowledge Portal knowledge-portal 8085/tcp knowledge-portal_default, proxy-network si si no requiere bajo
OpenClaw openclaw-openclaw-gateway-1 18789/tcp openclaw_openclaw_internal, proxy-network si si auth propia persistida en config/ del stack, no en Git medio
Grafana obs-grafana 3000/tcp obs-observability-internal, proxy-network si si secreto grafana_admin_password fuera de Git medio
Portainer portainer 9443/tcp interno proxy-network si si login existente, password no documentada medio
Prometheus obs-prometheus 9090/tcp obs-observability-internal no no sin auth propia observada medio
Alertmanager obs-alertmanager 9093/tcp obs-observability-internal no no solo secreto SMTP de salida medio
Thanos Query obs-thanos-query 10902/tcp obs-observability-internal no no sin auth propia observada alto

Implementacion aplicada

Cambios efectivos

  • Grafana:
  • agregado a proxy-network
  • GF_SERVER_DOMAIN y GF_SERVER_ROOT_URL ajustados al FQDN publico
  • certificado Let's Encrypt emitido como npm-5
  • HTTPS validado con redireccion a /login
  • Portainer:
  • proxy publico corregido a portainer.alpuntodeventa.com.ar
  • certificado Let's Encrypt renovado sobre npm-2
  • redireccion legacy a www.portainer... retirada
  • contenedor recreado sin puertos publicados al host
  • OpenClaw:
  • validado sin cambios
  • Knowledge Portal:
  • validado sin cambios

Decision sobre servicios sensibles

  • Prometheus: no publicado
  • Alertmanager: no publicado
  • Thanos Query: no publicado

Si en el futuro se publican, la capa minima exigida es una de estas:

  • Basic Auth en NPM
  • Access List
  • allowlist por IP
  • o mantenerlos sin exposicion publica directa

Hallazgos relevantes

  • mkdocs.yml todavia apuntaba a https://knowledge.alpuntodeventa.com.ar/, pero la publicacion real observada es https://doc.alpuntodeventa.com.ar/
  • NPM no regenero automaticamente los proxy_host/*.conf al actualizar la base; hubo que dejar la configuracion efectiva consistente y recargar nginx
  • los DNS tecnicos no publicados responden hoy al fallback HTTP de NPM; no exponen backend tecnico, pero tampoco entregan una denegacion explicita

Validaciones realizadas

  • curl -I https://doc.alpuntodeventa.com.ar/ -> 200
  • curl -I https://openclaw.alpuntodeventa.com.ar/ -> 200
  • curl -I https://grafana.alpuntodeventa.com.ar/login -> 200
  • curl -I https://portainer.alpuntodeventa.com.ar/ -> 200
  • docker exec nginx-proxy-manager curl -I http://grafana:3000/login -> 200
  • ss -tulpn en el VPS ya no muestra :8000 ni :9443 publicados por portainer

Checklist de cierre tecnico

  • SAFE POINT inicial: OK
  • DNS validados: OK
  • servicios inventariados: OK
  • publicacion segura validada: OK
  • servicios sensibles protegidos o no publicados: OK
  • secretos expuestos en docs o repo: NO