Harness MaxxingDocumentación
📚 Todas las páginas

📚 Referencia · 10 min de lectura

🔒Seguridad

Harness Maxxing da a un navegador (y a un chat de Telegram) el control de Claude Code en tu servidor. Lee esta página una sola vez.

Claude se ejecuta con todos los permisos (modo bypass)

Las sesiones, los trabajos de Claude y los trabajos de shell se ejecutan como root, con todos los derechos sobre el servidor. Por defecto, claude se ejecuta con --dangerously-skip-permissions: Claude puede leer y modificar cualquier archivo (tus secretos, tus claves SSH, los datos de otros sitios), instalar software, cambiar el firewall, iniciar o detener servicios y ejecutar cualquier comando, sin preguntar. Eso es lo que hace posible el trabajo desatendido, las tareas programadas (crons), la administración del servidor y las conversaciones desde el móvil, y por eso recomendamos un servidor dedicado a Harness Maxxing, sin ningún otro servicio ni dato crítico.

Los riesgos: una instrucción maliciosa escondida en un contenido que Claude lee (una página web, un correo, un documento, un mensaje reenviado, un webhook) puede hacer que actúe sobre todo el servidor; un simple error también. Cualquiera que entre en la interfaz o en tu chat de Telegram obtiene el mismo poder. Nada en el servidor (reglas de denegación, «Proteger los secretos») detiene un código que se ejecuta como root a propósito.

Lo que lo limita: - Modos de permisos, por tema y por trabajo (el límite real): bypass (por defecto, sin preguntas), acceptEdits (edita archivos, pregunta antes de ejecutar comandos), default (pregunta antes de editar y de ejecutar comandos), plan (solo lee, propone un plan). Defínelos para todo el servidor (Ajustes -> Claude), para un tema (menú del tema -> Permisos) o para un trabajo programado. Pon en un modo más estricto todos los temas y trabajos que lean contenido no fiable. - Cada sesión y cada trabajo se ejecuta en su propia unidad systemd, con un límite de memoria y algunas protecciones que nunca estorban a la administración del servidor: no puede cambiar el reloj del sistema, cambiar la personalidad del proceso ni usar planificación en tiempo real (configuración unit_hardening, activada en las instalaciones hechas desde 2.0.0-alpha.70, desactivada en las más antiguas). Esto no hace que root sea menos que root.

Un modo más estricto implica acciones rechazadas en las sesiones web. Consulta Ajustes y claves.

Trata todo lo que pegues en una sesión (documentos, páginas web, correos) como instrucciones que Claude puede seguir: no le des contenido no fiable con el modo bypass activado. Los temas y trabajos que leen la web, correos o mensajes reenviados son los que conviene poner en un modo más estricto.

Proteger los secretos (Ajustes -> Claude, activado por defecto) hace que las herramientas de Claude se nieguen a leer o editar secrets.json y ~/.ssh en cualquier modo. Es un freno, no un muro: un script escrito a propósito para abrir el archivo todavía puede hacerlo.

Quién puede acceder a la interfaz

  • El servidor escucha solo en 127.0.0.1 (detrás de Caddy) o en la IP de Tailscale, nunca en 0.0.0.0 ni en una dirección pública. maxxing doctor falla si lo hace.
  • Modo dominio: solo HTTPS (Caddy, Let's Encrypt), con HSTS, X-Frame-Options: SAMEORIGIN, nosniff y una política de referrer estricta (el propio servidor envía las mismas cabeceras, sea cual sea el modo).
  • Modo Tailscale: solo pueden conectarse los dispositivos de tu tailnet.
  • Modo local: solo a través de un túnel SSH.

El propio servidor

El instalador refuerza la seguridad del servidor (paso «Seguridad del servidor»; bash /opt/claude-maxxing/install.sh --secure la vuelve a aplicar en un servidor existente):

  • Firewall (ufw): se rechaza todo lo entrante excepto SSH (primero se detectan los puertos en los que sshd escucha realmente, así que nunca te quedas fuera), 80/443 en modo dominio y la interfaz tailscale0 en modo Tailscale. Esto importa aquí: si Claude inicia un servidor de desarrollo o un servidor de archivos rápido en 0.0.0.0, sigue siendo privado. Para publicar algo a propósito: ufw allow 3000/tcp. Omite el firewall con FIREWALL=0 (por ejemplo, si el firewall de tu proveedor ya cumple esa función). En un servidor que ya está en uso, el valor por defecto (FIREWALL=auto) es prudente: el firewall no se activa cuando hay otros servicios accesibles desde el exterior o cuando Docker está en marcha, y un ufw activo conserva sus reglas (solo se añaden los puertos necesarios). FIREWALL=1 fuerza la configuración estricta.
  • SSH solo con clave: los inicios de sesión con contraseña (y keyboard-interactive) se desactivan con /etc/ssh/sshd_config.d/01-harness-maxxing.conf; PermitRootLogin yes pasa a prohibit-password (un valor más estricto se mantiene). Está pensado para que no puedas quedarte fuera: por defecto solo se aplica cuando se ha comprobado, a partir del registro de SSH, que la sesión que ejecuta el instalador es un inicio de sesión con clave (una instalación interactiva pregunta antes); la nueva configuración se comprueba con sshd -t y se elimina si no es válida o no surte efecto; las sesiones abiertas siguen conectadas. En caso contrario, los inicios de sesión con contraseña siguen activos y el instalador explica por qué (SSH_HARDEN=1 bash /opt/claude-maxxing/install.sh --secure una vez que inicies sesión con una clave; SSH_HARDEN=0 no toca nunca SSH). Para deshacerlo: rm /etc/ssh/sshd_config.d/01-harness-maxxing.conf && systemctl reload ssh.
  • fail2ban: una IP se bloquea durante 1 hora tras 5 inicios de sesión SSH fallidos en 10 minutos (fail2ban-client status sshd; ajustes en /etc/fail2ban/jail.d/harness-maxxing.local).
  • Actualizaciones de seguridad automáticas (unattended-upgrades, a diario).
  • Descargas: nada obtenido de un tercero se ejecuta antes de ser verificado, y ningún script de internet se pasa directamente a un shell. Cada componente externo (uv, Python, Node.js, Claude Code, Scrapling y cada paquete de Python que necesita, Chromium, Remotion, los modelos de voz, Garage) tiene una versión fijada y un sha256 en server/maxxing/deps.toml, incluido en cada versión firmada; la clave del repositorio de Caddy debe tener la huella esperada y su fuente apt la escribe el instalador. Una descarga que no coincide no instala nada. maxxing deps verify vuelve a comprobar los binarios instalados y que ningún archivo de ellos pueda ser sustituido por otro usuario (el doctor también lo hace); maxxing deps check busca las versiones en la base de datos de vulnerabilidades osv.dev, y una tarea semanal te avisa cuando alguna está afectada. Los archivos temporales nunca van al /tmp compartido.
  • Memoria: el servicio web tiene su propio límite de memoria (el 60 % de la RAM), las sesiones y los trabajos programados se ejecutan en sus propias unidades con límite, y las peticiones demasiado grandes se rechazan antes de leerlas.

  • Sandbox del servicio: el servicio claude-maxxing se ejecuta con protecciones de systemd que no pueden estorbar al producto (sin nuevos privilegios, ajustes del kernel de solo lectura, sin módulos del kernel ni registro del kernel, cgroups de solo lectura, sin archivos set-uid, un límite de procesos). Están en /etc/systemd/system/claude-maxxing.service.d/10-hardening.conf. Las instalaciones anteriores a 2.0.0a32 las obtienen con maxxing harden (reinicia el servicio; si no vuelve a arrancar, el cambio se deshace); maxxing harden --undo lo elimina. El servicio sigue ejecutándose como root: las sesiones de Claude se ejecutan en sus propias unidades y no están limitadas por él (tienen las protecciones más ligeras descritas al principio de esta página).

Recomendado además: claves SSH en lugar de contraseñas (PasswordAuthentication no cuando tu clave funcione). maxxing doctor avisa si falta alguna de las tres.

Inicio de sesión

  • Token de configuración: la primera visita requiere el enlace de un solo uso que muestra el instalador (maxxing setup-link), así que quien encuentre primero la URL no puede apropiarse de tu instancia. Se elimina una vez establecida la contraseña.
  • Contraseña: al menos 12 caracteres para una contraseña nueva (una anterior más corta sigue permitiendo iniciar sesión), almacenada como hash scrypt. Cámbiala en Ajustes -> Seguridad o con maxxing password en el servidor; al cambiarla se cierra la sesión en todos los navegadores. Las contraseñas actuales incorrectas en ese formulario se limitan igual que los inicios de sesión.
  • Cookie de sesión: firmada, HttpOnly, SameSite=Strict, Secure sobre HTTPS, válida durante 30 días. Cerrar sesión revoca también en el servidor la cookie de ese navegador (una cookie copiada deja de funcionar); tus otros navegadores siguen con la sesión iniciada. Las vistas en vivo ya abiertas en un navegador donde se cerró la sesión (conversaciones, actualizaciones del panel) se detienen en menos de 15 segundos. Para cerrar la sesión en todos los navegadores, cambia la contraseña (Ajustes o maxxing password).
  • CSRF: toda petición de cambio debe llevar la cabecera X-Maxxing: 1, que otro sitio web no puede enviar.
  • Tamaño de las peticiones: una petición de un navegador sin sesión iniciada se rechaza antes de que el servidor la lea (el propio formulario de inicio de sesión admite como máximo 64 kB), y las peticiones con sesión iniciada también tienen un límite (1 MB, más para el editor de archivos, los mensajes a Claude y las subidas), de modo que nadie pueda llenar la memoria del servidor con una petición enorme. Las vistas en vivo (conversaciones abiertas, actualizaciones del panel) también tienen límite: 24 por navegador, 96 en total; pasado ese límite, una vista vuelve a intentarlo unos segundos después.
  • Limitación de intentos: tras una contraseña incorrecta, los siguientes intentos se retrasan (1, 2, 4, 8 s); tras 8 contraseñas incorrectas, esa dirección se bloquea durante 15 minutos: hasta entonces se rechaza incluso la contraseña correcta. Si fallan muchas direcciones a la vez (más de 30 contraseñas incorrectas en 15 minutos), el servidor comprueba como mucho una contraseña cada 5 segundos para todo el mundo: vuelve a intentarlo pasados unos segundos.
  • Alertas: con Telegram vinculado, cada inicio de sesión y las contraseñas incorrectas repetidas se notifican en el hilo Alertas.

Telegram

La pasarela responde únicamente al chat vinculado con el código de un solo uso, y solo a la cuenta de Telegram que abrió el enlace. Un chat vinculado sin su propietario (a mano, o por una versión muy antigua) no responde a nadie: maxxing doctor lo avisa; vincúlalo de nuevo desde Ajustes -> Telegram. Cualquiera con acceso a esa cuenta de Telegram puede dirigir a Claude: protégela (verificación en dos pasos).

Qué se guarda y dónde

Ruta Contenido Protección
/var/lib/claude-maxxing/config.json ajustes (sin secretos) directorio con modo 700
/var/lib/claude-maxxing/secrets.json hash de la contraseña, clave de la cookie, token/clave de API de Claude, token de Telegram, tokens de GitHub, tus Claves modo 600; la API nunca lo devuelve salvo con un Mostrar explícito
/var/lib/claude-maxxing/sessions/ metadatos y registros de las sesiones directorio con modo 700
/root/maxxing/ tu espacio de trabajo (memoria, proyectos, tareas, extensiones) con copia de seguridad (lista blanca)
~/.claude/ ajustes de Claude Code, credenciales de la CLI, transcripciones archivos propios de Claude Code
/opt/claude-maxxing/ el código (clon de git) y su entorno de Python se sustituye con las actualizaciones

Los secretos nunca van a la copia de seguridad: la copia usa una lista blanca, rechaza archivos como .env o claves, busca formatos de secretos y se niega a subir a un repositorio público.

Archivos

La página y la API de Archivos solo llegan a la raíz de archivos (Ajustes -> General). Los archivos eliminados van a la papelera.

  • Los archivos abiertos en el navegador nunca pueden ejecutar scripts con tu sesión: todo lo que no sea imágenes, audio, vídeo y PDF se muestra en un sandbox.
  • Un enlace de vista previa de página HTML (válido 2 horas, y se termina al cerrar la sesión, de ese navegador o de todos) llega a la carpeta de la página, y solo a las páginas y sus recursos estáticos (estilos, scripts, imágenes, fuentes, audio, vídeo), nunca a notas, datos o documentos (.md, .json, .txt, .csv, .pdf...), código o ajustes (.py, .env, .yaml...), ni a archivos o carpetas ocultos (.ssh, .claude...); desde la carpeta attachments/ de un tema, solo imágenes y vídeos. Una página guardada directamente en la raíz de archivos, en la carpeta personal, en la raíz del espacio de trabajo, en projects/, en un proyecto o en su carpeta topics/ (o en una carpeta oculta) se muestra sola: las imágenes y los estilos que tenga al lado no se cargan; muévela a su propia carpeta.
  • Preguntar a Harness en una notificación abre una sesión en modo plan: Claude lee y explica, no cambia nada hasta que apruebes un plan; el texto de un webhook no puede hacerle actuar.
  • Los webhooks rechazan los enlaces desconocidos antes de leer nada, y cualquier petición de más de 1 MB.
  • Importar nunca trae ajustes ni hooks de Claude Code (.claude/settings.json, .mcp.json) del archivo; las skills y las notas sí se importan.

Cuenta de Anthropic

Harness Maxxing ejecuta la CLI oficial de Claude Code con tu cuenta o clave de API en tu servidor; nunca comparte ni hace de intermediario con las credenciales. Asegúrate de que tu uso cumple los términos de Anthropic para tu plan.

Lista de comprobación

  • [ ] Servidor dedicado; SSH solo con clave, firewall, fail2ban y actualizaciones de seguridad automáticas activados (los configura el instalador).
  • [ ] Acceso por dominio (HTTPS) o Tailscale; nada accesible desde Internet salvo SSH, 80 y 443.
  • [ ] SSH con clave (inicio de sesión con contraseña desactivado).
  • [ ] Contraseña segura para la interfaz; cuenta de Telegram protegida.
  • [ ] Copia de seguridad de la memoria en un repositorio privado.
  • [ ] maxxing doctor todo en verde.
💡 ¿Atascado? Abre una sesión en el topic system › help y pregunta con tus palabras: Claude lee esta documentación en tu servidor y te responde.✏️ Mejorar esta página