Harness MaxxingDocumentação
📚 Todas as páginas

📚 Referência · 10 min de leitura

🔒Segurança

O Harness Maxxing dá a um navegador (e a um chat do Telegram) o controle do Claude Code no seu servidor. Leia esta página uma vez.

O Claude roda com todas as permissões (modo bypass)

Sessões, jobs do Claude e jobs de shell rodam como root, com direitos totais sobre o servidor. Por padrão, o claude roda com --dangerously-skip-permissions: o Claude pode ler e alterar qualquer arquivo (seus segredos, chaves SSH, dados de outros sites), instalar programas, mudar o firewall, iniciar ou parar serviços e executar qualquer comando, sem pedir permissão. É isso que torna possível o trabalho sem supervisão, os crons, a administração do servidor e as conversas pelo celular – e é por isso que recomendamos um servidor dedicado ao Harness Maxxing, sem nenhum outro serviço ou dado crítico nele.

Os riscos: uma instrução maliciosa escondida em um conteúdo que o Claude lê (uma página da web, um e-mail, um documento, uma mensagem encaminhada, um webhook) pode fazê-lo agir sobre o servidor inteiro; um simples erro também pode. Qualquer pessoa que entre na interface ou no seu chat do Telegram ganha o mesmo poder. Nada no servidor (regras de bloqueio, "Proteger os segredos") impede um código que roda como root de propósito.

O que limita isso: - Modos de permissão, por tópico e por job (o limite de verdade): bypass (padrão, sem perguntas), acceptEdits (edita arquivos, pergunta antes de executar comandos), default (pergunta antes de editar e de executar comandos), plan (só lê, propõe um plano). Defina-os para o servidor inteiro (Configurações -> Claude), para um tópico (menu do tópico -> Permissões) ou para um job agendado. Coloque em um modo mais restrito todo tópico e todo job que leia conteúdo não confiável. - Cada sessão e cada job roda em sua própria unidade systemd, com um limite de memória e algumas proteções que nunca atrapalham a administração do servidor: ela não pode alterar o relógio do sistema, mudar a personalidade do processo nem usar escalonamento em tempo real (config unit_hardening, ativada nas instalações feitas a partir da 2.0.0-alpha.70, desativada nas mais antigas). Isso não faz do root menos que root.

Um modo mais restrito significa ações recusadas nas sessões web. Veja Configurações e chaves.

Trate tudo o que você cola em uma sessão (documentos, páginas da web, e-mails) como instruções que o Claude pode seguir: não dê a ele conteúdo não confiável com o modo bypass ativado. Tópicos e jobs que leem a web, e-mails ou mensagens encaminhadas são os que devem ficar em um modo mais restrito.

Proteger os segredos (Configurações -> Claude, ativado por padrão) faz com que as ferramentas do Claude se recusem a ler ou editar secrets.json e ~/.ssh em todos os modos. É um quebra-molas, não um muro: um script escrito de propósito para abrir o arquivo ainda consegue.

Quem pode acessar a interface

  • O servidor escuta apenas em 127.0.0.1 (atrás do Caddy) ou no IP do Tailscale – nunca em 0.0.0.0 nem em um endereço público. O maxxing doctor acusa falha se isso acontecer.
  • Modo domínio: somente HTTPS (Caddy, Let's Encrypt), com HSTS, X-Frame-Options: SAMEORIGIN, nosniff e uma política de referrer estrita (o servidor envia os mesmos cabeçalhos por conta própria, qualquer que seja o modo).
  • Modo Tailscale: somente dispositivos da sua tailnet podem se conectar.
  • Modo local: somente por um túnel SSH.

O servidor em si

O instalador reforça a segurança do servidor (etapa "Segurança do servidor"; bash /opt/claude-maxxing/install.sh --secure reaplica isso em um servidor existente):

  • Firewall (ufw): tudo o que entra é recusado, exceto SSH (as portas em que o sshd realmente escuta são detectadas antes, para que você nunca fique trancado do lado de fora), 80/443 no modo domínio e a interface tailscale0 no modo Tailscale. Isso importa aqui: se o Claude iniciar um servidor de desenvolvimento ou um servidor de arquivos rápido em 0.0.0.0, ele continua privado. Para publicar algo de propósito: ufw allow 3000/tcp. Para pular o firewall, use FIREWALL=0 (por exemplo, se o firewall do seu provedor já faz o trabalho). Em um servidor já em uso, o padrão (FIREWALL=auto) é cuidadoso: o firewall não é ativado quando outros serviços estão acessíveis de fora ou quando o Docker está rodando, e um ufw ativo mantém suas regras (apenas as portas necessárias são adicionadas). FIREWALL=1 força a configuração estrita.
  • SSH somente por chave: os logins por senha (e keyboard-interactive) são desativados com /etc/ssh/sshd_config.d/01-harness-maxxing.conf; PermitRootLogin yes vira prohibit-password (um valor mais estrito é mantido). Feito para que você não fique trancado do lado de fora: por padrão, isso só é feito quando a sessão que executa o instalador comprovadamente, pelo log do SSH, é um login por chave (uma instalação interativa pergunta antes); a nova configuração é verificada com sshd -t e removida se não for válida ou não surtir efeito; as sessões abertas continuam conectadas. Caso contrário, os logins por senha continuam ativos e o instalador explica o motivo (SSH_HARDEN=1 bash /opt/claude-maxxing/install.sh --secure depois que você entrar com uma chave; SSH_HARDEN=0 nunca mexe no SSH). Para desfazer: rm /etc/ssh/sshd_config.d/01-harness-maxxing.conf && systemctl reload ssh.
  • fail2ban: um IP é banido por 1 hora após 5 falhas de login SSH em 10 minutos (fail2ban-client status sshd; configurações em /etc/fail2ban/jail.d/harness-maxxing.local).
  • Atualizações de segurança automáticas (unattended-upgrades, diariamente).
  • Downloads: nada obtido de terceiros é executado antes de ser verificado, e nenhum script da internet é enviado direto para um shell. Cada componente externo (uv, Python, Node.js, Claude Code, Scrapling e cada pacote Python de que ele precisa, Chromium, Remotion, os modelos de fala, Garage) tem versão fixada e sha256 em server/maxxing/deps.toml, distribuído com cada versão assinada; a chave do repositório do Caddy deve ter a impressão digital esperada e sua fonte apt é escrita pelo instalador. Um download que não corresponde não instala nada. maxxing deps verify verifica novamente os binários instalados e se nenhum arquivo deles pode ser substituído por outro usuário (o doctor também faz isso); maxxing deps check consulta as versões no banco de dados de vulnerabilidades osv.dev, e um job semanal avisa você quando alguma é afetada. Os arquivos temporários nunca vão para o /tmp compartilhado.
  • Memória: o serviço web tem seu próprio limite de memória (60 % da RAM), as sessões e os jobs agendados rodam em suas próprias unidades limitadas, e requisições grandes demais são recusadas antes de serem lidas.

  • Sandbox do serviço: o serviço claude-maxxing roda com proteções do systemd que não podem atrapalhar o produto (sem novos privilégios, configurações do kernel somente leitura, sem módulos nem log do kernel, cgroups somente leitura, sem arquivos set-uid, um limite de processos). Elas ficam em /etc/systemd/system/claude-maxxing.service.d/10-hardening.conf. Instalações anteriores à 2.0.0a32 recebem isso com maxxing harden (reinicia o serviço; se ele não voltar, a mudança é desfeita); maxxing harden --undo remove. O serviço continua rodando como root: as sessões do Claude rodam em suas próprias unidades e não são limitadas por ele (elas recebem as proteções mais leves descritas no início desta página).

Recomendado além disso: chaves SSH em vez de senhas (PasswordAuthentication no assim que sua chave funcionar). O maxxing doctor avisa se qualquer uma das três estiver faltando.

Login

  • Token de configuração: a primeira visita exige o link de uso único exibido pelo instalador (maxxing setup-link), para que quem encontrar a URL primeiro não possa tomar posse da sua instância. Ele é apagado assim que a senha é definida.
  • Senha: pelo menos 12 caracteres para uma senha nova (uma mais antiga e mais curta ainda funciona), armazenada como hash scrypt. Altere em Configurações -> Segurança ou com maxxing password no servidor; alterá-la desconecta todos os navegadores. Senhas atuais incorretas nesse formulário são limitadas como nos logins.
  • Cookie de sessão: assinado, HttpOnly, SameSite=Strict, Secure via HTTPS, válido por 30 dias. Sair também revoga no servidor o cookie desse navegador (um cookie copiado deixa de funcionar); seus outros navegadores continuam conectados. As visualizações ao vivo já abertas em um navegador desconectado (conversas, as atualizações do painel) são encerradas em até 15 segundos. Para desconectar todos os navegadores, altere a senha (Configurações, ou maxxing password).
  • CSRF: toda requisição de alteração deve carregar o cabeçalho X-Maxxing: 1, que outro site não pode enviar.
  • Tamanho das requisições: uma requisição de um navegador que não está conectado é recusada antes de o servidor lê-la (o próprio formulário de login aceita no máximo 64 kB), e as requisições de quem está conectado também têm limite (1 MB, mais para o editor de arquivos, as mensagens para o Claude e os uploads), para que ninguém possa encher a memória do servidor com uma requisição enorme. As visualizações ao vivo (conversas abertas, atualizações do painel) também têm limite: 24 por navegador, 96 no total; acima disso, uma visualização tenta de novo alguns segundos depois.
  • Limitação de tentativas: depois de uma senha errada, as tentativas seguintes são atrasadas (1, 2, 4, 8 s); depois de 8 senhas erradas, aquele endereço é bloqueado por 15 minutos - até a senha certa é recusada até lá. Se muitos endereços falharem ao mesmo tempo (mais de 30 senhas erradas em 15 minutos), o servidor verifica no máximo uma senha a cada 5 segundos para todos: tente de novo depois de alguns segundos.
  • Alertas: com o Telegram vinculado, cada login e as senhas erradas repetidas são informados na conversa Alertas.

Telegram

O gateway responde apenas ao chat vinculado com o código de uso único, e somente à conta do Telegram que abriu o link. Um chat vinculado sem o seu dono (à mão, ou por uma versão muito antiga) não responde a ninguém - o maxxing doctor avisa; vincule-o de novo em Configurações -> Telegram. Qualquer pessoa com acesso a essa conta do Telegram pode controlar o Claude: proteja-a (verificação em duas etapas).

O que é guardado onde

Caminho Conteúdo Proteção
/var/lib/claude-maxxing/config.json configurações (sem segredos) diretório com modo 700
/var/lib/claude-maxxing/secrets.json hash da senha, chave do cookie, token/chave de API do Claude, token do Telegram, tokens do GitHub, suas Chaves modo 600; nunca devolvido pela API, exceto ao clicar explicitamente em Revelar
/var/lib/claude-maxxing/sessions/ metadados e logs das sessões diretório com modo 700
/root/maxxing/ seu espaço de trabalho (memória, projetos, tarefas, extensões) com backup (lista de permissões)
~/.claude/ configurações do Claude Code, credenciais da CLI, transcrições arquivos do próprio Claude Code
/opt/claude-maxxing/ o código (clone do git) e seu ambiente Python substituído pelas atualizações

Os segredos nunca vão para o backup: o backup copia uma lista de permissões, recusa arquivos como .env ou chaves, procura formatos de segredos e se recusa a enviar para um repositório público.

Arquivos

A página e a API de Arquivos só alcançam a raiz de arquivos (Configurações -> Geral). Os arquivos apagados vão para a lixeira.

  • Arquivos abertos no navegador nunca podem executar scripts com a sua sessão: tudo o que não for imagem, áudio, vídeo e PDF é exibido em um sandbox.
  • Um link de pré-visualização de página HTML (válido por 2 horas, encerrado ao sair - daquele navegador ou de todos) alcança a pasta da página - somente páginas e seus recursos estáticos (estilos, scripts, imagens, fontes, áudio, vídeo), nunca notas, dados ou documentos (.md, .json, .txt, .csv, .pdf...), código ou configurações (.py, .env, .yaml...), arquivos ou pastas ocultos (.ssh, .claude...); a partir do attachments/ de um tópico, somente imagens e vídeos. Uma página salva diretamente na raiz de arquivos, na pasta pessoal, na raiz do espaço de trabalho, em projects/, em um projeto ou na sua pasta topics/ (ou em uma pasta oculta) é exibida sozinha: as imagens e os estilos ao lado dela não carregam - mova-a para uma pasta própria.
  • Perguntar ao Harness, em uma notificação, abre uma sessão em modo plan: o Claude lê e explica, e não muda nada até você aprovar um plano - o texto de um webhook não pode fazê-lo agir.
  • Os webhooks recusam links desconhecidos antes de ler qualquer coisa, e qualquer requisição acima de 1 MB.
  • A importação nunca traz configurações nem hooks do Claude Code (.claude/settings.json, .mcp.json) do arquivo; skills e notas são importadas.

Conta da Anthropic

O Harness Maxxing executa a CLI oficial do Claude Code com a sua conta ou chave de API no seu servidor; ele nunca compartilha nem faz proxy de credenciais. Verifique se o seu uso está de acordo com os termos da Anthropic para o seu plano.

Checklist

  • [ ] Servidor dedicado; SSH somente por chave, firewall, fail2ban e atualizações de segurança automáticas ativados (configurados pelo instalador).
  • [ ] Acesso por domínio (HTTPS) ou Tailscale; nada acessível pela Internet além de SSH, 80 e 443.
  • [ ] SSH com chave (login por senha desativado).
  • [ ] Senha forte para a interface; conta do Telegram protegida.
  • [ ] Backup da memória em um repositório privado.
  • [ ] maxxing doctor todo verde.
💡 Travou? Abra uma sessão no topic system › help e pergunte com suas palavras: o Claude lê esta documentação no seu servidor e responde.✏️ Melhorar esta página