Política de sandbox
El panel Política de sandbox (en el grupo Seguridad, entre Salvaguardas y Cadena de suministro) decide qué puede alcanzar la VM de una máquina y, con el motor OpenShell, qué pueden hacer sus agentes dentro de la VM (una máquina es un espacio de trabajo, en el editor de ajustes). Se llamaba Cortafuegos antes de la 5.4; buscar firewall, openshell, sentry o landlock en los ajustes lo sigue encontrando.
El panel se abre con una sola elección, Sandbox engine (el motor de sandbox):
| Motor | Qué es |
|---|---|
| Bromure Firewall | "Permite o deniega las conexiones de la VM por host, dirección, protocolo y puerto." Una tabla ordenada de reglas de permiso y denegación, aplicada en el Mac. El valor por omisión para una máquina nueva. |
| OpenShell + Sentry | "Una política NVIDIA OpenShell, aplicada en la VM y vigilada por el centinela del kernel." Una política YAML (todo denegado por omisión), más la sandbox del invitado y el centinela del kernel. |
Cómo funcionan los motores, y cómo encajan con el resto de las protecciones de Bromure, se explica en Política de sandbox, sandbox del invitado y centinela del kernel. Esta página es la referencia de los campos.
Pasar a OpenShell + Sentry rellena una política vacía con la política por omisión de tu organización (o la política inicial de Bromure) y activa el centinela del kernel en Best effort. Volver a Bromure Firewall cuando existe una política pide confirmación antes, Switch to the Bromure Firewall?, porque Discard OpenShell policy elimina la política y desactiva el centinela del kernel (salvo que tu organización lo exija). Usa antes Exportar… si quieres conservar la política.
Las protecciones que valen para los dos motores — avisar al agente cuando la política lo bloquea, el vigilante de agentes, las credenciales estrictas, la interceptación transparente y el bypass inseguro — están en Salvaguardas › Protecciones.
Cortafuegos de Bromure
Reglas salientes
"Permite o deniega las conexiones de la VM por host, IP/CIDR, protocolo y puerto — se comparan de arriba abajo, gana la primera coincidencia." Las reglas cubren cualquier protocolo y cualquier destino. Tráfico sin coincidencia fija qué pasa con una conexión que ninguna regla iguala: Permitir (por omisión) o Denegar para un montaje con lista blanca. Añadir regla añade una fila.
| Columna | Valores | Significado |
|---|---|---|
| (casilla) | activada / desactivada | Desmarca una regla para desactivarla sin borrarla. Una regla desactivada se conserva, atenuada, y se ignora hasta que vuelvas a marcarla. |
| Acción | allow / deny | Qué pasa con una coincidencia. |
| Proto | tcp / udp / web / any | web es HTTP(S), el único protocolo cuyas reglas también pueden restringir métodos. |
| Host / CIDR | any, un nombre de host, o un CIDR IPv4 | example.com cubre el dominio y todos los subdominios; *.example.com solo los subdominios. Una IP sola es un /32. |
| Puertos | any, un puerto, un rango (8000-8999) o una lista | Vacío significa cualquiera. |
| Métodos | Verbos HTTP, solo reglas web | Con allow, solo pasan estos verbos (GET,POST); con deny, estos verbos se rechazan (PUT,DELETE). read-only significa GET/HEAD/OPTIONS. |
| Límite de tiempo | menú de reloj | Activa la regla por un tiempo limitado: Activa durante 15 minutos, Activa durante 1 hora o Activa hasta que se detenga el espacio de trabajo; Hacer permanente quita el límite. Una regla temporizada muestra el tiempo que le queda («14m»), una regla hasta la detención muestra «until stop». |
"Las reglas se aplican mientras las editas; Cancelar las devuelve a su estado." No hace falta reiniciar ni Guardar: las conexiones nuevas siguen las reglas nuevas al instante, y las ya abiertas también. Desactivar una regla, quitarla, añadir una regla de denegación, que se agote un límite de tiempo o que termine una regla hasta la detención vuelven a comprobar todas las conexiones abiertas de la máquina, y las que las reglas nuevas deniegan se cortan por ambos lados. Desactivar un permiso temporal termina de verdad el acceso, en vez de dejar que una descarga abierta llegue hasta el final.
- Las conexiones hechas a través de los ajustes de proxy (
HTTPS_PROXY— curl, git, npm y los agentes los usan por omisión) las corta el propio proxy: cierra el lado de la VM y cancela la petición al servidor, WebSockets incluidos. La Cronología de seguridad registra cada una como conexión cerrada — «allow tcp …» ya no la permite. - Las conexiones directas las corta el conmutador virtual en su siguiente paquete: lo descarta y envía a la VM un reset TCP, y para el tráfico HTTP(S) interceptado también se cierra la conexión del proxy con el servidor.
Si las reglas cambian fuera del editor mientras está abierto — una acción de la Cronología de seguridad, o un límite de tiempo que se agota —, el cambio se fusiona con tus ediciones sin guardar. Si habías editado las mismas reglas, el panel pregunta: Recargar o Conservar mis ediciones.
Reglas temporales
Algunas reglas solo hacen falta un momento — llegar a GitHub o al registro de npm el tiempo justo para actualizar dependencias, por ejemplo. En vez de añadir la regla y acordarte de borrarla, fija un límite de tiempo con el menú de reloj de la regla:
- Activa durante 15 minutos / Activa durante 1 hora: la regla deja de coincidir en cuanto se acaba el tiempo, aunque Bromure esté ocupado; poco después se desactiva y se guarda así, de modo que se queda en la lista para la próxima vez.
- Activa hasta que se detenga el espacio de trabajo: la regla se desactiva cuando la máquina se detiene (o se reinicia), y en el siguiente arranque de Bromure si seguía en marcha cuando la app se cerró.
Para volver a usar la regla más tarde, márcala o elige un nuevo límite de tiempo.
La forma más rápida de permitir algo que se acaba de bloquear es el cajón Sandbox en la ventana de la máquina, o Permitir… en la fila bloqueada de la Cronología de seguridad. Ambos ofrecen Siempre, Durante 15 minutos, Durante 1 hora y Hasta que se detenga el espacio de trabajo.
Formato pf
El desplegable formato pf muestra las mismas reglas como texto — una por línea, terminando en default allow o default deny — que es cómo se guardan y lo que usan la CLI y los perfiles gestionados:
allow tcp api.github.com:443
allow web api.example.com GET,POST # solo estos verbos llegan al sitio
deny web api.internal PUT,DELETE # bloquear estos verbos, permitir el resto
deny udp any:53
deny any 10.0.0.0/8
default deny
Las reglas desactivadas y temporales llevan una nota breve en un comentario, para que el texto siga siendo pf simple:
#@off allow tcp registry.npmjs.org:443 # desactivada
allow tcp github.com:443 #@until=1767225600 # activa hasta esta hora (segundos Unix)
allow tcp pypi.org:443 #@until=stop # activa hasta que la máquina se detenga
La aplicación ocurre en el Mac, en dos capas: el conmutador de red virtual comprueba cada conexión por IP de destino y por el nombre de host visto en el DNS (todos los protocolos), y el proxy comprueba otra vez por nombre de servidor TLS y, para las reglas web, por método HTTP. Eso es lo que permite a una máquina leer una API en la que no puede escribir: allow web api.example.com GET,POST le da al agente consultas sin cambios, sea cual sea la herramienta que use.
Cada decisión queda registrada en la Cronología de seguridad, con la regla que la tomó, y en los Mac inscritos se envía a tu organización.
Registrar las conexiones permitidas
Las conexiones bloqueadas se registran siempre. Registrar las conexiones permitidas, bajo la opción Tráfico sin coincidencia, decide si también se registran las conexiones que el cortafuegos deja pasar — es lo que da a sus filas las acciones rápidas Bloquear… y Regla…. Mientras no elijas, está activado cuando la máquina tiene reglas (o deniega el tráfico sin coincidencia) y desactivado en una máquina sin cortafuegos, para que una máquina sin reglas no llene la Cronología de filas «permitido».
Las conexiones permitidas hacen poco ruido en cualquier caso: una fila por destino (host, puerto y protocolo — un host detrás de varias direcciones es una sola fila) como mucho una vez por minuto, y las repeticiones se pliegan en la fila anterior con un contador. El endpoint de los modelos locales en el Mac nunca aparece.
Nota: los modelos locales siempre son alcanzables: una regla de permiso para el punto final de inferencia en el Mac se coloca delante de tus reglas, así que ni un
default denypuede cortar a los agentes de un modelo en el dispositivo.
El centinela del kernel bajo el cortafuegos
El centinela del kernel pertenece al motor OpenShell. Una máquina que todavía lo ejecuta bajo el cortafuegos de Bromure muestra una tarjeta Kernel sentry is still on con Turn off, o — cuando tu organización exige el centinela — "Your organization requires at least …" y ningún control.
OpenShell + Sentry
Los ajustes del motor se reparten en cinco tarjetas.
Política
"Todo está denegado salvo que una regla lo permita. Se aplica en caliente." La tarjeta Policy contiene la política en sí: una política de sandbox de NVIDIA OpenShell, versión de esquema 1, en YAML. Las conexiones solo las permite una regla network_policies; un endpoint con un protocol se inspecciona petición a petición, donde enforce bloquea y audit solo registra. Los cambios se aplican a una máquina en marcha sin reiniciar.
Los botones de la tarjeta:
- Importar… — sustituye la política por un archivo
.yaml/.yml. - Exportar… — la guarda como
<machine>-policy.yaml. - Reset to starter policy — la política inicial permite GitHub (
github.com,api.github.com,**.githubusercontent.comen el 443), npm y PyPI de solo lectura (inspeccionados, enenforce), y los espejos de paquetes de Ubuntu en el 80/443.
Bajo el editor, una línea de comprobación muestra Valid policy · N network rules (en verde) o el error de análisis (en rojo), seguida de las advertencias que haya. Con Enforce binaries activado, las reglas que no enumeran ningún binaries se señalan en naranja: no permiten nada.
Centinela del kernel
"Envía los eventos de seguridad (lanzamientos de procesos, cambios de privilegios, cargas de módulos y de BPF, rechazos de la sandbox) del kernel de la VM a Bromure, fuera del alcance de todo lo que el agente puede detener; una vez arrancado, el kernel se bloquea para que ni siquiera root en la VM pueda cargar código para interferir." Un silencio o un hueco en el flujo cuenta como manipulación para el vigilante de agentes.
| Modo | Comportamiento |
|---|---|
| Best effort | La máquina funciona con el centinela cuando su módulo se carga, y sin él en caso contrario. Se elige al pasar a OpenShell. |
| Required | Nada se ejecuta en la VM hasta que el centinela se ha resuelto: cargado, o tras indicar por qué no puede cargarse. El kernel se bloquea aún más (lo que también descarta herramientas de trazado del kernel como bpftrace y perf), y un centinela que nunca se conecta sin dar razón cuenta como manipulación. |
Mode se aplica en el siguiente arranque de la VM. Cuando tu organización fija un mínimo, se aplica el más estricto de los dos, y Best effort aparece en gris bajo un mínimo Required ("Your organization requires it."). Una máquina configurada antes de que el centinela viniera con el motor muestra Off for this workspace con Turn on.
La línea de estado de la tarjeta dice Connected · kernel versión o Not connected, cuántos eventos se perdieron bajo carga, si los hubo, y Couldn't start: motivo en rojo cuando la VM no pudo cargar el centinela. Consulta el centinela del kernel para ver cómo se entregan sus módulos.
Sandbox
El título de la tarjeta se vuelve naranja, Sandbox ⚠︎, cuando la VM informa de un problema: la sandbox del sistema de archivos o la sandbox estricta no se aplicó, el centinela no está disponible cuando se le espera, o el invitado envió advertencias.
| Ajuste | Por omisión | Qué hace |
|---|---|---|
| Enforce binaries | Desactivado | "Las reglas solo se aplican a los programas que enumeran; el agente pierde sudo y Docker." Un atestador propiedad de root en la VM informa del programa detrás de cada conexión, y los binaries de una regla deben nombrarlo. El hash de cada programa se fija en el primer uso, y un binario modificado se rechaza. Los agentes no tienen ningún camino hacia root: ni sudo, ni Docker, y todo el tráfico pasa por la interceptación transparente. Surte efecto en el siguiente arranque de la VM. Queda bloqueado en activado cuando tu organización o la sección process de la política lo exige. |
| Filesystem & process | Según la política | "El agente solo puede alcanzar las rutas que enumera la política." Se aplica en la VM con Landlock a partir de las secciones filesystem_policy y process de la política; ni siquiera root puede levantarlo. Sin ninguna de esas secciones, la fila dice "Not confined" y ofrece Insert template, que añade un filesystem_policy típico (carpetas del sistema de solo lectura, carpeta personal y /tmp de lectura y escritura). Surte efecto en el siguiente arranque de la VM. |
| Packages in the home folder | Activado | "pip instala en ~/.local; npm ya usa ~/.npm-global." La sandbox no tiene root, así que las instalaciones para todo el sistema no pueden funcionar. Surte efecto en los terminales nuevos. |
| System packages on request | Activado | "apt-get install te pregunta primero; el agente nunca obtiene root." La petición espera en el cajón Sandbox; apruébala y Bromure instala exactamente esos paquetes desde los espejos de Ubuntu. Surte efecto en el siguiente arranque de la VM. |
Las líneas de estado bajo Enforce binaries y Filesystem & process dicen lo que la VM aplicó realmente:
- Attestor connected: binaries are enforced, o Attestor not connected: until it is, only Bromure's own rules apply.
- Filesystem seguido de su estado, del usuario con el que se ejecuta el agente y de la versión de Landlock, o Filesystem not applied yet antes de que la VM informe.
- Las rutas que Bromure añade para su propia fontanería (Added for Bromure: …).
- Cuando el sistema de archivos está confinado pero los binarios no se imponen: "The agent keeps sudo, so it could stop Bromure's processes in the VM. Turn on Enforce binaries to prevent that."
- En rojo, cuando la sandbox estricta no se aplicó: "no session will start and binary rules fail closed. Restarting the VM retries it."
Asesor de políticas
Cuando se bloquea una petición, el agente puede proponer la regla estrecha que necesita en http://policy.local (la API del asesor de OpenShell) y esperar tu decisión. Las conexiones bloqueadas también se redactan aquí como propuestas.
| Agent proposals | Comportamiento |
|---|---|
| Off (por omisión) | El agente no puede proponer reglas. Las conexiones bloqueadas se siguen redactando como propuestas. |
| Ask me | Cada propuesta te espera. |
| Approve if risk-free | Las propuestas sin hallazgo de riesgo se aprueban al instante. Una propuesta que alcanza un host donde la máquina tiene una credencial, añade un método ahí, o usa un comodín, una dirección privada, una base de datos o un puerto alto siempre te espera. |
Cada propuesta pendiente muestra su regla y su destino, si fue drafted from a block (redactada a partir de un bloqueo) o proposed by the agent (propuesta por el agente), la intención declarada del agente, el YAML, y los hallazgos de riesgo que haya en naranja. Escribe una Reason (sent to the agent on reject) si quieres, luego Reject o Approve. Una regla aprobada se añade a la política y se aplica en caliente. Recent decisions enumera las cinco últimas. Las mismas propuestas aparecen en el cajón Sandbox.
Gobernanza
- Organization boundary — lo máximo que puede permitir la política de cualquier máquina. Es Set by your organization (bromure.io), Set on this Mac (con Set from file… y Borrar), o None set. Cada guardado que cambia una política se comprueba contra él, con el
openshell-proverde NVIDIA cuando está instalado y, si no, con la comprobación integrada de Bromure. Una política fuera del límite se rechaza con el resumen del límite, se haya editado donde se haya editado — el panel, el cajón Sandbox, el asesor o la API. - Revision history — cada guardado que cambia la política se conserva como una versión (vN, con su fecha, el origen del cambio y un hash corto). Restaurar carga una versión de vuelta en el editor.
- Rules Bromure adds automatically — como las reglas de proveedor de OpenShell, mantienen alcanzables los agentes de la máquina y cada credencial que configura. No forman parte de la política exportada.
Qué ve el agente cuando se le bloquea
Una conexión que la política rechaza falla al instante, sin socket colgado. Bajo una política de OpenShell, una conexión por el proxy o una petición inspeccionada rechazada recibe un HTTP 403 con el cuerpo policy_denied propio de OpenShell: la capa, el host y el puerto (o el método y la ruta), y la regla o el motivo. Cuando el asesor de políticas está activado, el cuerpo también le dice al agente cómo proponer una regla en http://policy.local. Con Tell the agent when policy blocks it activado (consulta Salvaguardas), el agente también sabe, en su conversación, qué intentó, que la política lo prohíbe, y que debe preguntarte en lugar de buscar un rodeo.
Referencia de ajustes
| Ajuste | Tipo | Por omisión |
|---|---|---|
| Sandbox engine | Bromure Firewall / OpenShell + Sentry | Bromure Firewall |
| Tráfico sin coincidencia (cortafuegos) | Permitir / Denegar | Permitir |
| Registrar las conexiones permitidas (cortafuegos) | Casilla | Activado mientras la máquina tenga reglas |
| Reglas (cortafuegos) | Tabla ordenada (Añadir regla), también mostrada en formato pf | Ninguna |
| Política (OpenShell) | YAML, esquema v1 | El valor por omisión de la organización, o la política inicial |
| Mode del centinela del kernel | Best effort / Required | Best effort bajo OpenShell; desactivado bajo el cortafuegos |
| Enforce binaries | Conmutador | Desactivado |
| Packages in the home folder | Conmutador | Activado |
| System packages on request | Conmutador | Activado |
| Agent proposals | Off / Ask me / Approve if risk-free | Off |
| Organization boundary | Archivo, o fijado por tu organización | Ninguno |
La tabla de reglas y el editor de políticas no se muestran en el cliente de iPhone, iPad o Vision Pro ("Outbound connection rules are edited on the Mac that runs this workspace."); las reglas y políticas puestas en el Mac se siguen aplicando.
Capítulos relacionados
- Política de sandbox, sandbox del invitado y centinela del kernel — cómo funcionan los motores.
- Salvaguardas — las políticas de credenciales y las protecciones comunes a los dos motores.
- Credenciales — los perfiles de proveedor de OpenShell y los marcadores de credenciales.
- Resumen y cronología de seguridad — cada bloqueo y cada permiso, por máquina, y el linaje de red.