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.exeen su carpeta definitiva, por ejemploC:\Golem\: el servicio arranca ese fichero en esa ruta. En modotunnel,cloudflared.exeal 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.
golem guardian install --credential C:\Golem\juan.credAsí queda en modo tunnel, preguntando al portal cada 60 segundos, con todas las tools y 30 minutos de inactividad. Las opciones:
| Opción | Qué hace | Por 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|direct | tunnel 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únel | 8797 |
--portal <url> | A qué portal llama el guardián. Solo cambia si alojas tu propio intermediario | https://irwinrodriguez.dev/api |
--poll-seconds <n> | Cada cuántos segundos pregunta al portal si alguien ha llamado. De 10 a 3600 | 60 |
--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 ruta | el nombre de la máquina |
--allow a,b | Como en serve: solo las tools que casen | todas |
--read-only | Como en serve: solo las tools que miran | |
--idle-minutes <n> | Minutos sin peticiones antes de cerrar la sesión. De 1 a 1440 | 30 |
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.
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:
| Fichero | Qué es |
|---|---|
golem.guardian.json | La 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.json | El 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.json | Lo que el servicio sabe del portal (si contesta, y desde cuándo no), para que status lo enseñe |
golem-audit.log | El 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.
golem guardian status
golem guardian removePara actualizar golem.exe, para el servicio, copia el nuevo encima y arráncalo otra vez. La ranura y la identidad no cambian.
sc stop GolemGuardian
copy /y golem.exe C:\Golem\golem.exe
sc start GolemGuardianCó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:
%LOCALAPPDATA%\Golem\golem-client.exe --guardian-keyCrea 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:
%LOCALAPPDATA%\Golem\golem-client.exe --guardian-cred %USERPROFILE%\Downloads\juan.credLa 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.
%LOCALAPPDATA%\Golem\golem-client.exe --guardian-renew3. Entrar
En el chat de Claude, los ocho dígitos que tu empresa tiene apuntados para ese servidor:
golem_connect 3050 7712El 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:
golem_connect guardian:https://srv01.clinica.local:8797Hay 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:
golem_connect 3050 7712 B46C-BC08-56E3-9E3AEsa 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:
| Id | Cuándo | Qué lleva |
|---|---|---|
| 1000 | Guardián instalado | ISV, técnico que lo instaló, modo e identidad |
| 1001 | Guardián quitado | |
| 1100 | Sesión abierta | Técnico, ISV, por dónde entró (portal o direct) y un id corto de sesión |
| 1101 | Sesión cerrada | El id de la sesión y el motivo |
| 1200 | Toque rechazado, como aviso | El 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ódigo | Qué hacer |
|---|---|
guardian_sin_clave | Este equipo no tiene clave, o no se puede leer con esta cuenta de Windows. Créala con --guardian-key |
guardian_sin_credencial | Hay 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_clave | La credencial es de otra clave. Pide una para la tuya |
guardian_ranura_desconocida | El portal no tiene esa ranura. Revisa los ocho dígitos |
guardian_ranura_ocupada | Otro técnico acaba de llamar a ese servidor. Prueba dentro de un minuto |
guardian_portal_sin_respuesta | El portal no contesta. Si el servidor está en direct, el toque directo no lo necesita |
guardian_sin_respuesta_del_guardian | El 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_cambiada | El 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_casa | Toque directo: el certificado no es el del guardián. Hay algo en medio; no conectes |
toque_isv_no_casa | Ese guardián se instaló con la licencia de otra empresa |
toque_fuera_de_plazo | El reloj del técnico y el del servidor se llevan más de dos minutos. Corrige la hora |
toque_ocupado | Otro técnico tiene la sesión de ese servidor. Prueba cuando la cierre |
guardian_renovar_baja | Tu 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.