IR
irwinrodriguez.dev
Volver a documentación

Guardián

El Guardián deja entrar a tus técnicos en un servidor sin nadie delante. Nadie tiene que arrancar golem serve ni pasar la línea, y nadie tiene que abrir antes una sesión de AnyDesk para eso. Es nuevo en la 1.4 y está incluido en la licencia Golem Empresa, sin cobrar por servidor.

El servidor no guarda ninguna contraseña. Guarda una cerradura que reconoce las credenciales de los técnicos de tu empresa, y un servicio de Windows que no escucha nada hacia fuera mientras nadie llama. Cuando un técnico con una credencial válida llama (el «toque»), el servicio le abre una sesión de Golem normal, con un token nuevo y solo para él, y la cierra cuando deja de usarla.

Donde no se instala, no cambia nada: sin cerradura, golem.exe se comporta como en la 1.3.1. El resto del agente está en el kit del servidor.

Lo que hace falta

  • Una licencia Golem Empresa. Con ella, el administrador de la cuenta da de alta a sus técnicos en Técnicos y el portal emite una credencial para cada uno. Una licencia de técnico o de equipo no tiene credenciales.
  • La credencial de uno de esos técnicos, en un fichero.
  • Una consola elevada (Ejecutar como administrador), porque se instala un servicio.
  • golem.exe en su carpeta definitiva, por ejemplo C:\Golem\: el servicio arranca ese fichero en esa ruta. En modo tunnel, cloudflared.exe al lado, como viene en el kit.

Instalarlo en un servidor

La primera vez se hace desde una sesión atendida, con alguien del cliente delante o por la sesión remota de siempre. Esa instalación es el momento en que el cliente da su permiso. La cerradura queda escrita con la fecha, tu empresa y el técnico que la instaló, y es el registro de ese consentimiento.

Instalar el Guardián, en una consola elevada
golem guardian install --credential C:\Golem\juan.cred

Así queda en modo tunnel, preguntando al portal cada 60 segundos, con todas las tools y 30 minutos de inactividad. Las opciones:

OpciónQué hacePor defecto
--credential <fichero>La credencial de técnico con la que se instala. Obligatoria. De ella salen tu empresa (el ISV) y el nombre de quien instala
--mode tunnel|directtunnel para un servidor detrás de un router; direct para uno con IP alcanzable (un VPS, o por la VPN que ya tienes con el cliente)tunnel
--port <n>En direct, el puerto donde escuchan el toque y la sesión. En tunnel, el puerto local al que llega el túnel8797
--portal <url>A qué portal llama el guardián. Solo cambia si alojas tu propio intermediariohttps://irwinrodriguez.dev/api
--poll-seconds <n>Cada cuántos segundos pregunta al portal si alguien ha llamado. De 10 a 360060
--public-host <nombre o IP>Solo en direct: el nombre o la IP por la que tus técnicos llegan a esta máquina, sin esquema, puerto ni rutael nombre de la máquina
--allow a,bComo en serve: solo las tools que casentodas
--read-onlyComo en serve: solo las tools que miran
--idle-minutes <n>Minutos sin peticiones antes de cerrar la sesión. De 1 a 144030

Cuando acaba, imprime dos datos que tienes que apuntar en el inventario de ese cliente. La ranura son los ocho dígitos que teclea el técnico para entrar, y no cambian mientras el guardián siga instalado. La identidad son 16 caracteres hexadecimales, la huella de la clave del guardián: con ella el técnico comprueba que al otro lado está este servidor y no otro.

Lo que imprime la instalación
Guardian instalado: servicio GolemGuardian, ISV lic_01m2k8..., instalado por Juan Perez, modo tunnel. La cerradura es C:\Golem\golem.guardian.json; para revocarlo todo: golem guardian remove
Identidad del guardian: B46CBC0856E39E3A. Anotala en el inventario: es la que fija el tecnico la primera vez que entra por el portal.
Ranura del portal: 3050 7712. Con esos ocho digitos entra un tecnico de este ISV (portal https://irwinrodriguez.dev/api).

Si el portal no contesta durante la instalación, el guardián se instala igual, sin ranura, y lo dice en rojo. Sin ranura nadie entra por el portal. Se arregla con golem guardian remove e install otra vez cuando el portal responda.

Los dos modos

En tunnel el guardián no escucha nada fuera de la máquina. Abre un túnel rápido de Cloudflare solo cuando llega un toque que ya pasó todas las comprobaciones, y lo cierra con la sesión. Valen los límites del túnel del kit del servidor: ninguna llamada puede pasar de 125 segundos.

En direct escucha en su puerto, con TLS y un certificado propio que se crea una vez. Además de los ocho dígitos, el técnico puede llamar directamente al puerto, sin portal y sin esperar a ningún sondeo, y si el portal se cae ese camino sigue funcionando. En Windows queda la regla de entrada del cortafuegos para su puerto, que el servicio crea al arrancar y quita al pararse.

Lo que queda en la máquina

Junto a golem.exe:

FicheroQué es
golem.guardian.jsonLa cerradura, en JSON legible: tu empresa, quién la instaló y cuándo, modo, portal, ranura, tools e inactividad. El secreto de la ranura va cifrado con DPAPI de la máquina
golem.guardian.cert.jsonEl certificado del guardián, del que sale su identidad. La parte privada va cifrada con DPAPI de LocalSystem. Se crea una vez y dura lo que dure el guardián
golem.guardian.portal.jsonLo que el servicio sabe del portal (si contesta, y desde cuándo no), para que status lo enseñe
golem-audit.logEl log de siempre. Cada toque, aceptado o rechazado, con el nombre del técnico, y cada llamada de la sesión

En Windows quedan el servicio GolemGuardian, que corre como LocalSystem y arranca con la máquina, y el origen GolemGuardian en el registro de eventos Aplicación.

La cerradura no lleva ninguna llave. El secreto de la ranura solo sirve para preguntar al portal si ha llegado algún toque, y con él no se entra en el servidor.

Consultarlo, quitarlo y actualizarlo

golem guardian status no necesita elevación ni credencial: enseña la cerradura, el modo, la ranura, la identidad y el estado del servicio, y avisa en rojo si algo va mal. golem guardian remove, en consola elevada, se lo lleva todo: el servicio, la cerradura, el certificado, el estado del portal y el origen del registro de eventos. Solo se queda golem-audit.log, que es del dueño de la máquina. Si se vuelve a instalar, tendrá una ranura y una identidad nuevas.

Ver cómo está, y quitarlo
golem guardian status
golem guardian remove

Para actualizar golem.exe, para el servicio, copia el nuevo encima y arráncalo otra vez. La ranura y la identidad no cambian.

Actualizar golem.exe con el Guardián instalado
sc stop GolemGuardian
copy /y golem.exe C:\Golem\golem.exe
sc start GolemGuardian

Cómo entra un técnico

Hace falta una clave en su equipo, una credencial que le da su empresa y los ocho dígitos del servidor. Los dos primeros pasos se hacen una vez.

1. La clave

En el equipo del técnico:

Crear la clave del técnico
%LOCALAPPDATA%\Golem\golem-client.exe --guardian-key

Crea una clave en %APPDATA%\Golem\guardian.key, cifrada con DPAPI de su usuario de Windows, e imprime su parte pública y su huella. Solo sirve en ese equipo y con esa cuenta: si cambia de equipo, crea otra y pide una credencial para ella.

2. La credencial

El técnico pasa la clave pública al administrador de la cuenta Golem Empresa, que le da de alta en Técnicos y le manda la credencial que emite el portal. El técnico la guarda con:

Guardar la credencial
%LOCALAPPDATA%\Golem\golem-client.exe --guardian-cred %USERPROFILE%\Downloads\juan.cred

La credencial caduca a los 30 días. Se renueva sola cuando golem_connect entra en un guardián y le quedan menos de 7 días (o caducó hace menos de 7), y a mano con --guardian-renew. Se renueva mientras el técnico siga de alta y la licencia Empresa siga activa; pasados 7 días desde que caducó, el administrador tiene que reemitirla.

Renovar la credencial a mano
%LOCALAPPDATA%\Golem\golem-client.exe --guardian-renew

3. Entrar

En el chat de Claude, los ocho dígitos que tu empresa tiene apuntados para ese servidor:

Entrar por el portal
golem_connect 3050 7712

El cliente deja el toque en el portal y espera la respuesta, que llega en el siguiente sondeo del guardián: un minuto como mucho con lo que trae de fábrica, más unos segundos si abre un túnel. Desde ahí es una sesión de Golem como cualquier otra. En un servidor con IP, en modo direct, se puede llamar al puerto sin pasar por el portal:

Toque directo a un guardián en modo direct
golem_connect guardian:https://srv01.clinica.local:8797

Hay una sesión a la vez: si otro técnico está dentro, el segundo recibe toque_ocupado, sin saber de quién. Como el servicio no tiene escritorio, screenshot y list_monitors no sirven por el Guardián.

La identidad del guardián

La respuesta que llega por el portal va firmada por el guardián, y el cliente del técnico la comprueba como SSH comprueba la clave de un servidor. La primera vez que entra por una ranura, apunta la identidad de ese guardián; las siguientes exige la misma, y si cambia sale guardian_identidad_cambiada y no conecta. Si tu empresa tiene la identidad en su inventario, el técnico puede exigirla desde la primera vez escribiéndola detrás de los ocho dígitos:

Entrar exigiendo la identidad del guardián
golem_connect 3050 7712 B46C-BC08-56E3-9E3A

Esa misma forma sirve para aceptar un cambio legítimo, por ejemplo cuando el guardián tuvo que crear un certificado nuevo. Por el toque directo no hace falta: el certificado TLS se coteja con la huella que viene dentro de la respuesta cifrada.

Lo que ve el cliente

La prueba de lo que se hace se queda en su servidor. golem-audit.log, junto a golem.exe, anota cada toque, aceptado o rechazado, con el nombre del técnico que trae su credencial verificada, y cada llamada de la sesión. Nunca lleva tokens ni credenciales.

Quien administra el servidor lo ve también en el Visor de eventos, en Registros de Windows, Aplicación, con el origen GolemGuardian:

IdCuándoQué lleva
1000Guardián instaladoISV, técnico que lo instaló, modo e identidad
1001Guardián quitado
1100Sesión abiertaTécnico, ISV, por dónde entró (portal o direct) y un id corto de sesión
1101Sesión cerradaEl id de la sesión y el motivo
1200Toque rechazado, como avisoEl código y el técnico, si se pudo leer

Mientras nadie llama, la puerta está cerrada: en modo tunnel el servicio no escucha nada fuera de la máquina. La sesión se cierra sola a los 30 minutos sin peticiones, el túnel se cierra con ella y el token deja de valer. El cliente puede quitar el Guardián en cualquier momento con golem guardian remove, y a partir de ahí no entra nadie más.

Lo que el portal ve y lo que no

El agente de Golem no llama a nadie. El guardián es la única excepción, y está acotada: solo llama el servicio guardián, solo a la URL que dice su cerradura y solo para preguntar por su ranura. Casi siempre la respuesta es vacía.

El portal hace de intermediario sin poder leer lo que pasa por él. Guarda la ranura, el hash de su secreto y, durante unos minutos, toques y respuestas cifrados. No sabe el nombre de la máquina ni su IP, y no ve órdenes, ficheros ni sesiones. De tu empresa conoce lo que ya conocía por la licencia, más la lista de técnicos que das de alta en Técnicos.

Si el portal no contesta, el servicio sigue en marcha y reintenta, cada vez más espaciado. Una ranura que pasa 90 días sin sondeos se recicla, por ejemplo la de un servidor apagado tres meses: status lo dice en rojo, y se arregla con remove e install.

Alojar tu propio intermediario

Si tu empresa prefiere no depender del portal de irwinrodriguez.dev para los toques, puede alojar el suyo. El contrato (cinco rutas y lo que guarda cada una) está en GUARDIAN-RELAY.md, en español y en inglés. En el servidor se indica con --portal al instalar, y en el equipo del técnico con la variable de entorno GOLEM_PORTAL, en el bloque env del .mcp.json.

Las credenciales y su renovación las emite siempre el portal de irwinrodriguez.dev, aunque el toque vaya por tu intermediario, porque son parte de la licencia Empresa.

Si algo no va

Los códigos que más salen, y qué hacer:

CódigoQué hacer
guardian_sin_claveEste equipo no tiene clave, o no se puede leer con esta cuenta de Windows. Créala con --guardian-key
guardian_sin_credencialHay clave pero no credencial. Instálala con --guardian-cred
guardian_credencial_caducada--guardian-renew, o una nueva del administrador si caducó hace más de 7 días
guardian_credencial_de_otra_claveLa credencial es de otra clave. Pide una para la tuya
guardian_ranura_desconocidaEl portal no tiene esa ranura. Revisa los ocho dígitos
guardian_ranura_ocupadaOtro técnico acaba de llamar a ese servidor. Prueba dentro de un minuto
guardian_portal_sin_respuestaEl portal no contesta. Si el servidor está en direct, el toque directo no lo necesita
guardian_sin_respuesta_del_guardianEl guardián no contestó en 120 segundos: el servidor está apagado, o el servicio parado o sin ranura. Alguien allí tiene que mirar golem guardian status
guardian_identidad_cambiadaEl guardián de esa ranura firma con otra identidad. Que alguien compruebe golem guardian status en el servidor; si el cambio es legítimo, entra con la identidad nueva detrás de los ocho dígitos
guardian_cert_no_casaToque directo: el certificado no es el del guardián. Hay algo en medio; no conectes
toque_isv_no_casaEse guardián se instaló con la licencia de otra empresa
toque_fuera_de_plazoEl reloj del técnico y el del servidor se llevan más de dos minutos. Corrige la hora
toque_ocupadoOtro técnico tiene la sesión de ese servidor. Prueba cuando la cierre
guardian_renovar_bajaTu empresa te dio de baja, y la credencial ya no se renueva

Los códigos toque_* llegan dentro de guardian_toque_rechazado: los pone el guardián al rechazar el toque.