Gateway
Autenticación mediante proxy de confianza
Cuándo usarlo
- OpenClaw se ejecuta detrás de un proxy con reconocimiento de identidad (Pomerium, Caddy + OAuth, nginx + oauth2-proxy, Traefik + autenticación reenviada).
- El proxy gestiona toda la autenticación y transmite la identidad del usuario mediante encabezados.
- Se utiliza un entorno de Kubernetes o contenedores en el que el proxy es la única ruta al Gateway.
- Se producen errores de WebSocket
1008 unauthorizedporque los navegadores no pueden transmitir tokens en las cargas útiles de WS.
Cuándo NO usarlo
- El proxy no autentica a los usuarios (solo es un terminador TLS o un balanceador de carga).
- Existe alguna ruta al Gateway que evita el proxy (aperturas en el cortafuegos, acceso desde la red interna).
- No se sabe con certeza si el proxy elimina o sobrescribe correctamente los encabezados reenviados.
- Solo se necesita acceso personal para un único usuario (considere en su lugar Tailscale Serve + bucle invertido).
Cómo funciona
El proxy autentica al usuario
El proxy inverso autentica a los usuarios (OAuth, OIDC, SAML, etc.).
El proxy añade un encabezado de identidad
El proxy añade un encabezado con la identidad del usuario autenticado (p. ej., x-forwarded-user: nick@example.com).
El Gateway verifica el origen de confianza
OpenClaw comprueba que la solicitud proceda de una IP de proxy de confianza (gateway.trustedProxies) y que no sea la dirección de bucle invertido ni una dirección de interfaz local del propio Gateway.
El Gateway extrae la identidad
OpenClaw lee los encabezados obligatorios y, a continuación, la identidad del usuario del encabezado configurado.
Autorizar
Si todas las comprobaciones son correctas y el usuario supera allowUsers (cuando se ha configurado), se autoriza la solicitud.
Configuración
{ gateway: { // De forma predeterminada, la autenticación mediante proxy de confianza espera que la IP de origen del proxy no sea de bucle invertido bind: "lan", // CRÍTICO: Añada aquí únicamente las IP del proxy trustedProxies: ["10.0.0.1", "172.17.0.1"], auth: { mode: "trusted-proxy", trustedProxy: { // Encabezado que contiene la identidad del usuario autenticado (obligatorio) userHeader: "x-forwarded-user", // Opcional: encabezados que DEBEN estar presentes (verificación del proxy) requiredHeaders: ["x-forwarded-proto", "x-forwarded-host"], // Opcional: restringir a usuarios específicos (vacío = permitir a todos) allowUsers: ["nick@example.com", "admin@company.org"], // Opcional: permitir un proxy de bucle invertido en el mismo host tras habilitarlo explícitamente allowLoopback: false, // Opcional: permitir que los usuarios autenticados por el proxy registren nuevos dispositivos de navegador deviceAutoApprove: { enabled: false, scopes: ["operator.read", "operator.write", "operator.approvals"], }, }, }, },}Referencia de configuración
gateway.trustedProxiesstring[]requiredMatriz de direcciones IP de proxy (o CIDR) en las que se confía. Se rechazan las solicitudes procedentes de otras IP.
gateway.auth.modestringrequiredDebe ser "trusted-proxy".
gateway.auth.trustedProxy.userHeaderstringrequiredNombre del encabezado que contiene la identidad del usuario autenticado.
gateway.auth.trustedProxy.requiredHeadersstring[]Encabezados adicionales que deben estar presentes para que la solicitud se considere de confianza.
gateway.auth.trustedProxy.allowUsersstring[]Lista de usuarios permitidos por identidad. Si está vacía, se permiten todos los usuarios autenticados.
gateway.auth.trustedProxy.allowLoopbackbooleandefault: falseCompatibilidad opcional con proxies inversos de bucle invertido en el mismo host.
gateway.auth.trustedProxy.deviceAutoApprove.enabledbooleandefault: falseAprueba automáticamente nuevas identidades de dispositivo de la interfaz de control y WebChat tras la autenticación mediante proxy de confianza.
gateway.auth.trustedProxy.deviceAutoApprove.scopesstring[]default: ["operator.read", "operator.write", "operator.approvals"]Ámbitos máximos concedidos a un dispositivo de navegador aprobado automáticamente. Incluir explícitamente operator.admin permite que cada usuario autenticado por el proxy solicite una concesión automática de dispositivo con privilegios administrativos completos, hace que las solicitudes sin ámbitos reciban automáticamente privilegios administrativos completos y activa el hallazgo de auditoría de seguridad CRÍTICO gateway.trusted_proxy_device_auto_approve_admin, además de una advertencia al iniciar el Gateway.
Aprobación automática de dispositivos
La autenticación mediante proxy de confianza puede utilizar opcionalmente la identidad del proxy como límite de aprobación para nuevos dispositivos de navegador:
{ gateway: { auth: { mode: "trusted-proxy", trustedProxy: { userHeader: "x-forwarded-user", allowUsers: ["operator@example.com"], deviceAutoApprove: { enabled: true, scopes: ["operator.read", "operator.write", "operator.approvals"], }, }, }, },}El valor predeterminado es enabled: false. Cuando se habilita, se aplican todas estas reglas:
- El WebSocket debe haberse autenticado mediante el método
trusted-proxycon una identidad de usuario no vacía que haya superadoallowUserscuando haya una lista de usuarios permitidos configurada. Las conexiones mediante token, contraseña, Tailscale y sin autenticar nunca utilizan esta política. - Solo se puede aprobar automáticamente un nuevo dispositivo de navegador de la interfaz de control o WebChat. Cualquier solicitud para un dispositivo existente, incluida una ampliación de ámbitos, permanece pendiente de aprobación manual mediante
openclaw devices approve <requestId>. - El dispositivo se aprueba con el rol
operator. Si la solicitud de conexión incluye ámbitos, la concesión corresponde a la intersección exacta entre los ámbitos solicitados ydeviceAutoApprove.scopes. Si la solicitud omite los ámbitos, se concede la lista configurada; cuando se omite esa lista, los valores predeterminados sonoperator.read,operator.writeyoperator.approvals. A continuación, la concesión resultante también queda limitada por el encabezado de proxyx-openclaw-scopesde la conexión, si está presente, de modo que un proxy que restrinja los ámbitos de un usuario también limite la concesión persistente del dispositivo, no solo la sesión; un encabezado presente pero vacío no concede ningún ámbito. Este límite se aplica incluso cuando el cliente omite su propia lista de ámbitos. operator.adminsolo se permite si figura explícitamente endeviceAutoApprove.scopes. Cuando se incluye, cada usuario autenticado por el proxy puede solicitar y recibir automáticamente privilegios administrativos completos en un nuevo dispositivo de navegador; las solicitudes sin ámbitos reciben automáticamente privilegios administrativos completos.openclaw security auditinforma del hallazgo CRÍTICOgateway.trusted_proxy_device_auto_approve_admin, y el Gateway registra una advertencia una vez durante el inicio. Es preferible realizar la aprobación administrativa manual medianteopenclaw devices approveoopenclaw devices rotatehasta que estén disponibles los roles por identidad.
Comportamiento del emparejamiento de la interfaz de control
Cuando gateway.auth.mode = "trusted-proxy" está activo y la solicitud supera las comprobaciones del proxy de confianza, las sesiones WebSocket de la interfaz de control pueden conectarse sin identidad de emparejamiento del dispositivo.
Implicaciones para los ámbitos:
- Las sesiones WebSocket de la interfaz de control sin dispositivo se conectan, pero de forma predeterminada no reciben ningún ámbito de operador. OpenClaw vacía la lista de ámbitos solicitados y la convierte en
[]para que una sesión que no esté vinculada a un dispositivo o token emparejado y aprobado no pueda autodeclarar permisos. - Si los métodos fallan con
missing scopedespués de establecer correctamente una conexión WebSocket, utilice HTTPS para que el navegador pueda generar la identidad del dispositivo y completar el emparejamiento. Consulte HTTP no seguro de la interfaz de control. - Las configuraciones antiguas que todavía contienen la clave retirada
gateway.controlUi.dangerouslyDisableDeviceAuth=trueutilizan la migración de actualización de la interfaz de control limitada.
Limitación de ámbitos mediante el proxy inverso: si el proxy envía x-openclaw-scopes en la solicitud de actualización a WebSocket de la interfaz de control, OpenClaw limita los ámbitos de la sesión a la intersección entre los ámbitos solicitados y los declarados. Este encabezado no concede ámbitos; únicamente restringe los que puede tener la sesión. Cuando deviceAutoApprove.enabled es verdadero, el mismo límite también se aplica a la concesión persistente del dispositivo escrita por la aprobación automática de dispositivos, de modo que un dispositivo aprobado automáticamente nunca tenga más ámbitos que los declarados por el proxy.
Implicaciones:
- El emparejamiento deja de ser el control principal para el acceso a la interfaz de control sin dispositivo. Cuando
deviceAutoApprove.enabledes verdadero, la identidad del proxy también se convierte en el control de aprobación para registrar nuevos dispositivos de navegador. - La política de autenticación del proxy inverso y
allowUsersse convierten en el control de acceso efectivo. - Mantenga el acceso de entrada al Gateway restringido únicamente a las IP de proxy de confianza (
gateway.trustedProxies+ cortafuegos).
Los clientes WebSocket personalizados no son sesiones de la interfaz de control. La entrada de actualización retirada de la interfaz de control no concede acceso temporal a clientes arbitrarios
client.mode: "backend" ni con formato de CLI. La automatización personalizada debe utilizar
la identidad y el emparejamiento de dispositivos, la ruta auxiliar reservada del backend local directo client.id: "gateway-client"
o el Plugin RPC HTTP de administración
cuando sea más adecuada una interfaz HTTP de solicitud y respuesta.
Encabezado de ámbitos del operador
La autenticación mediante proxy de confianza es un modo HTTP que contiene identidad, por lo que los clientes pueden declarar opcionalmente ámbitos de operador con x-openclaw-scopes en las solicitudes a la API HTTP.
Nota: los ámbitos de WebSocket se determinan mediante el protocolo de enlace del Gateway y la vinculación de la identidad del dispositivo. En las solicitudes de actualización a WebSocket de la interfaz de control, x-openclaw-scopes solo limita los ámbitos negociados de la sesión, no los concede. Consulte el comportamiento de emparejamiento de la interfaz de control.
Ejemplos:
x-openclaw-scopes: operator.readx-openclaw-scopes: operator.read,operator.writex-openclaw-scopes: operator.admin,operator.write
Comportamiento:
- Cuando el encabezado está presente, OpenClaw respeta el conjunto de ámbitos declarado.
- Cuando el encabezado está presente pero vacío, la solicitud declara que no tiene ningún ámbito de operador.
- Cuando el encabezado está ausente, las API HTTP normales que contienen identidad recurren al conjunto estándar de ámbitos predeterminados del operador (
operator.admin,operator.read,operator.write,operator.approvals,operator.pairing,operator.talk.secrets). - Las rutas HTTP de plugins con autenticación del Gateway son más restrictivas de forma predeterminada: cuando
x-openclaw-scopesestá ausente, su ámbito de ejecución recurre únicamente aoperator.write. - Las solicitudes HTTP con origen en el navegador deben seguir superando
gateway.controlUi.allowedOrigins(o el modo alternativo deliberado mediante el encabezado Host), incluso después de que la autenticación mediante proxy de confianza se complete correctamente.
Regla práctica: envíe x-openclaw-scopes explícitamente cuando quiera que una solicitud mediante proxy de confianza sea más restrictiva que los valores predeterminados o cuando una ruta de plugin con autenticación del Gateway necesite algo más potente que el ámbito de escritura.
Terminación TLS y HSTS
Use un único punto de terminación TLS y aplique HSTS allí.
Terminación TLS en el proxy (recomendada)
Cuando el proxy inverso gestiona HTTPS para https://control.example.com, configure Strict-Transport-Security en el proxy para ese dominio.
- Adecuado para implementaciones expuestas a Internet.
- Mantiene la política de certificados y protección de HTTP en un solo lugar.
- OpenClaw puede permanecer en HTTP de bucle invertido detrás del proxy.
Valor de encabezado de ejemplo:
Strict-Transport-Security: max-age=31536000; includeSubDomainsTerminación TLS en el Gateway
Si OpenClaw sirve HTTPS directamente (sin un proxy que termine TLS), configure:
{ gateway: { tls: { enabled: true }, http: { securityHeaders: { strictTransportSecurity: "max-age=31536000; includeSubDomains", }, }, },}strictTransportSecurity acepta un valor de encabezado de cadena o false para deshabilitarlo explícitamente.
Orientación para el despliegue
- Comience primero con una antigüedad máxima corta (por ejemplo,
max-age=300) mientras valida el tráfico. - Aumente a valores de larga duración (por ejemplo,
max-age=31536000) solo cuando tenga un alto grado de confianza. - Añada
includeSubDomainssolo si todos los subdominios están preparados para HTTPS. - Use la precarga solo si cumple deliberadamente los requisitos de precarga para todo el conjunto de dominios.
- El desarrollo local limitado al bucle invertido no se beneficia de HSTS.
Ejemplos de configuración del proxy
Pomerium
Pomerium transmite la identidad en x-pomerium-claim-email (u otros encabezados de declaraciones) y un JWT en x-pomerium-jwt-assertion.
{ gateway: { bind: "lan", trustedProxies: ["10.0.0.1"], // IP de Pomerium auth: { mode: "trusted-proxy", trustedProxy: { userHeader: "x-pomerium-claim-email", requiredHeaders: ["x-pomerium-jwt-assertion"], }, }, },}Fragmento de configuración de Pomerium:
routes: - from: https://openclaw.example.com to: http://openclaw-gateway:18789 policy: - allow: or: - email: is: nick@example.com pass_identity_headers: trueCaddy con OAuth
Caddy puede autenticar usuarios con el plugin caddy-security y transmitir encabezados de identidad.
{ gateway: { bind: "lan", trustedProxies: ["10.0.0.1"], // IP de Caddy/proxy auxiliar auth: { mode: "trusted-proxy", trustedProxy: { userHeader: "x-forwarded-user", }, }, },}Fragmento de Caddyfile:
openclaw.example.com { authenticate with oauth2_provider authorize with policy1 reverse_proxy openclaw:18789 { header_up X-Forwarded-User {http.auth.user.email} }}nginx + oauth2-proxy
oauth2-proxy autentica a los usuarios y transmite la identidad en x-auth-request-email.
{ gateway: { bind: "lan", trustedProxies: ["10.0.0.1"], // IP de nginx/oauth2-proxy auth: { mode: "trusted-proxy", trustedProxy: { userHeader: "x-auth-request-email", }, }, },}Fragmento de configuración de nginx:
location / { auth_request /oauth2/auth; auth_request_set $user $upstream_http_x_auth_request_email; proxy_pass http://openclaw:18789; proxy_set_header X-Auth-Request-Email $user; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";}Traefik con autenticación reenviada
{ gateway: { bind: "lan", trustedProxies: ["172.17.0.1"], // IP del contenedor de Traefik auth: { mode: "trusted-proxy", trustedProxy: { userHeader: "x-forwarded-user", }, }, },}Configuración mixta de tokens
El inicio del Gateway rechaza la autenticación mediante proxy de confianza si también hay configurado un token compartido (gateway.auth.token o OPENCLAW_GATEWAY_TOKEN). Ambos son mutuamente excluyentes porque un token compartido permitiría a los clientes del mismo host autenticarse mediante una ruta completamente diferente de la identidad verificada por el proxy que este modo está diseñado para exigir.
Si el inicio falla con un error como gateway auth mode is trusted-proxy, but a shared token is also configured:
- Elimine el token compartido cuando use el modo de proxy de confianza, o
- Cambie
gateway.auth.modea"token"si pretende usar autenticación mediante tokens.
Los encabezados de identidad del proxy de confianza en el bucle invertido siguen produciendo un fallo seguro: los clientes del mismo host no se autentican silenciosamente como usuarios del proxy. En su lugar, los clientes internos de OpenClaw que omitan el proxy pueden autenticarse con gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD. El uso alternativo de tokens sigue sin admitirse de forma intencionada en el modo de proxy de confianza.
Lista de comprobación de seguridad
Antes de habilitar la autenticación mediante proxy de confianza, verifique lo siguiente:
- [ ] El proxy es la única ruta: El puerto del Gateway está protegido mediante un cortafuegos frente a todo excepto el proxy.
- [ ] trustedProxies es mínimo: Solo incluye las IP reales de los proxies, no subredes completas.
- [ ] El origen del proxy de bucle invertido es deliberado: La autenticación mediante proxy de confianza produce un fallo seguro para las solicitudes originadas en el bucle invertido, a menos que
gateway.auth.trustedProxy.allowLoopbackse habilite explícitamente para un proxy del mismo host. - [ ] El proxy elimina los encabezados: El proxy sobrescribe (no añade) los encabezados
x-forwarded-*de los clientes. - [ ] Terminación TLS: El proxy gestiona TLS; los usuarios se conectan mediante HTTPS.
- [ ] allowedOrigins es explícito: La interfaz de control fuera del bucle invertido usa
gateway.controlUi.allowedOriginsexplícito. - [ ] allowUsers está configurado (recomendado): Restrinja el acceso a usuarios conocidos en lugar de permitir a cualquiera que esté autenticado.
- [ ] No hay una configuración mixta de tokens: No configure simultáneamente
gateway.auth.tokenygateway.auth.mode: "trusted-proxy". - [ ] El uso alternativo de contraseñas locales es privado: Si configura
gateway.auth.passwordpara clientes internos directos, mantenga el puerto del Gateway protegido mediante un cortafuegos para que los clientes remotos que no usen el proxy no puedan acceder directamente. - [ ] La aprobación automática de dispositivos es deliberada: Si
deviceAutoApprove.enabledes verdadero, trate la seguridad de la cuenta del proxy inverso como el límite de inscripción de dispositivos y mantenga la lista de ámbitos concedidos sin privilegios de administración y al mínimo.
Auditoría de seguridad
openclaw security audit señala la autenticación mediante proxy de confianza con un hallazgo de gravedad crítica. Esto es intencionado; sirve para recordar que se está delegando la seguridad a la configuración del proxy.
La auditoría comprueba:
- Advertencia o recordatorio crítico de
gateway.trusted_proxy_authbásico. - Falta la configuración de
trustedProxies. - Falta la configuración de
userHeader. allowUsersvacío (permite a cualquier usuario autenticado).allowLoopbackhabilitado para los orígenes de proxy del mismo host.- Aprobación automática de dispositivos del navegador habilitada (delega el emparejamiento de nuevos dispositivos a la identidad del proxy).
También se aplican hallazgos independientes y no específicos del proxy de confianza cuando la interfaz de control está expuesta: gateway.controlUi.allowedOrigins con comodín o ausente y uso alternativo del origen mediante el encabezado Host.
Solución de problemas
trusted_proxy_untrusted_source
La solicitud no procedía de una IP incluida en gateway.trustedProxies. Compruebe:
- ¿Es correcta la IP del proxy? (Las IP de los contenedores Docker pueden cambiar).
- ¿Hay un equilibrador de carga delante del proxy?
- Use
docker inspectokubectl get pods -o widepara encontrar las IP reales.
trusted_proxy_loopback_source
OpenClaw rechazó una solicitud de proxy de confianza con origen en el bucle invertido.
Compruebe:
- ¿El proxy se conecta desde
127.0.0.1/::1? - ¿Está intentando usar la autenticación mediante proxy de confianza con un proxy inverso de bucle invertido en el mismo host?
Solución:
- Prefiera la autenticación mediante token o contraseña para los clientes internos del mismo host que no pasen por el proxy, o
- Enrute a través de una dirección de proxy de confianza que no sea de bucle invertido y mantenga esa IP en
gateway.trustedProxies, o - Para un proxy inverso deliberado en el mismo host, configure
gateway.auth.trustedProxy.allowLoopback = true, mantenga la dirección de bucle invertido engateway.trustedProxiesy asegúrese de que el proxy elimine o sobrescriba los encabezados de identidad.
trusted_proxy_local_interface_source / trusted_proxy_local_interface_check_failed
La IP de origen de la solicitud coincidía con una de las direcciones de las interfaces de red propias del host del Gateway que no son de bucle invertido (no con el proxy), como protección contra tráfico suplantado del mismo host en redes Tailscale o redes puente de Docker. ..._check_failed significa que se produjo un error en la propia detección de interfaces, por lo que OpenClaw produce un fallo seguro.
Compruebe:
- ¿Algún proceso del propio host del Gateway envía directamente encabezados de identidad y omite el proxy?
- ¿El proxy se ejecuta en el mismo espacio de nombres de red que el Gateway, con una IP que también aparece como interfaz local?
Solución: enrute el tráfico del proxy mediante una dirección que no esté también vinculada localmente por el host del Gateway o use allowLoopback únicamente para una configuración real de proxy en el mismo host.
trusted_proxy_user_missing
El encabezado del usuario estaba vacío o ausente. Compruebe:
- ¿El proxy está configurado para transmitir encabezados de identidad?
- ¿El nombre del encabezado es correcto? (No distingue entre mayúsculas y minúsculas, pero la ortografía es importante).
- ¿El usuario está realmente autenticado en el proxy?
trusted_proxy_missing_header_*
Un encabezado obligatorio no estaba presente. Compruebe:
- La configuración del proxy para esos encabezados específicos.
- Si los encabezados se están eliminando en algún punto de la cadena.
trusted_proxy_user_not_allowed
El usuario está autenticado, pero no está en allowUsers. Añádalo o elimine la lista de permitidos.
trusted_proxy_no_proxies_configured / trusted_proxy_config_missing
gateway.auth.mode es "trusted-proxy", pero gateway.trustedProxies está vacío, o falta el propio gateway.auth.trustedProxy. Todas las solicitudes se rechazan hasta que ambos estén configurados.
trusted_proxy_origin_not_allowed
La autenticación mediante proxy de confianza se realizó correctamente, pero el encabezado Origin del navegador no superó las comprobaciones de origen de la interfaz de control.
Compruebe lo siguiente:
gateway.controlUi.allowedOriginsincluye el origen exacto del navegador.- No se depende de orígenes comodín, salvo que se desee intencionadamente permitir todos los orígenes.
- Si se utiliza intencionadamente el modo alternativo basado en el encabezado Host,
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueestá configurado deliberadamente.
La conexión se establece, pero los métodos indican que falta un ámbito
El WebSocket se conecta, pero chat.history, sessions.list o
models.list falla con missing scope: operator.read.
Causas habituales:
- Sesión de la interfaz de control sin dispositivo: la autenticación mediante proxy de confianza puede permitir la conexión WebSocket sin identidad de dispositivo, pero OpenClaw elimina los ámbitos de las sesiones sin dispositivo por diseño.
- Cliente de backend personalizado: la entrada retirada de actualización de la interfaz de control nunca concede acceso a clientes WebSocket arbitrarios con formato de backend o CLI.
x-openclaw-scopesdemasiado restrictivo: si el proxy inserta este encabezado en la solicitud de actualización de WebSocket de la interfaz de control, los ámbitos de la sesión quedan limitados a ese conjunto. Un valor de encabezado vacío no concede ningún ámbito.
Solución:
- Para la interfaz de control, utilice HTTPS para que el navegador pueda generar una identidad de dispositivo y completar el emparejamiento.
- Para la automatización personalizada, utilice identidad de dispositivo/emparejamiento, la ruta auxiliar de backend local directo reservada
gateway-cliento RPC HTTP de administración. - No añada la clave retirada
gateway.controlUi.dangerouslyDisableDeviceAutha la configuración actual. Las instalaciones anteriores utilizan automáticamente la migración de autoemparejamiento de una sola vez.
WebSocket sigue fallando
Asegúrese de que el proxy:
- Admite actualizaciones de WebSocket (
Upgrade: websocket,Connection: upgrade). - Transmite los encabezados de identidad en las solicitudes de actualización de WebSocket (no solo en HTTP).
- No tiene una ruta de autenticación independiente para las conexiones WebSocket.
Migración desde la autenticación mediante token
Configurar el proxy
Configure el proxy para autenticar a los usuarios y transmitir encabezados.
Probar el proxy de forma independiente
Pruebe la configuración del proxy de forma independiente (curl con encabezados).
Actualizar la configuración de OpenClaw
Actualice la configuración de OpenClaw con autenticación mediante proxy de confianza.
Reiniciar el Gateway
Reinicie el Gateway.
Probar WebSocket
Pruebe las conexiones WebSocket desde la interfaz de control.
Auditar
Ejecute openclaw security audit y revise los resultados.
Contenido relacionado
- Configuración — referencia de configuración
- Ámbitos del operador — roles, ámbitos y comprobaciones de aprobación
- Acceso remoto — otros patrones de acceso remoto
- Seguridad — guía de seguridad completa
- Tailscale — alternativa más sencilla para el acceso exclusivo desde la tailnet