🔒Sicurezza
Harness Maxxing dà a un browser (e a una chat Telegram) il controllo di Claude Code sul tuo server. Leggi questa pagina una volta sola.
Claude funziona con tutti i permessi (modalità bypass)
Le sessioni, i job Claude e i job shell vengono eseguiti come root, con pieni diritti sul server. Per impostazione predefinita claude viene avviato
con --dangerously-skip-permissions: Claude può leggere e modificare qualsiasi file (i tuoi segreti, le chiavi SSH, i dati di altri siti),
installare software, cambiare il firewall, avviare o fermare servizi ed eseguire qualsiasi comando, senza chiedere nulla.
È ciò che rende possibili il lavoro non presidiato, i cron, l'amministrazione del server e le conversazioni dal telefono – ed è per questo che
consigliamo un server dedicato a Harness Maxxing, senza altri servizi o dati critici.
I rischi: un'istruzione malevola nascosta in un contenuto che Claude legge (una pagina web, un'e-mail, un documento, un messaggio inoltrato, un webhook) può fargli compiere azioni su tutto il server; lo stesso vale per un errore. Chiunque riesca ad entrare nell'interfaccia o nella tua chat Telegram ottiene lo stesso potere. Niente sul server (regole di divieto, "Proteggi i segreti") ferma un codice che viene eseguito come root di proposito.
Cosa lo limita:
- Modalità di permessi, per argomento e per job (il vero limite): bypass (predefinita, nessuna domanda), acceptEdits
(modifica i file, chiede prima dei comandi), default (chiede prima delle modifiche e dei comandi), plan (solo lettura, propone un
piano). Impostale per tutto il server (Impostazioni -> Claude), per un argomento (menu dell'argomento -> Permessi) o per un job
pianificato. Metti in una modalità più restrittiva ogni argomento e ogni job che legge contenuti non affidabili.
- Ogni sessione e ogni job viene eseguito in una propria unità systemd con un limite di memoria e alcune protezioni che non
intralciano mai l'amministrazione del server: non può impostare l'orologio di sistema, cambiare la personalità del processo né usare
la schedulazione realtime (configurazione unit_hardening, attiva per le installazioni fatte dalla 2.0.0-alpha.70, disattivata sulle più vecchie). Questo non rende root meno di root.
Una modalità più restrittiva comporta azioni rifiutate nelle sessioni web. Vedi Impostazioni e chiavi.
Considera tutto ciò che incolli in una sessione (documenti, pagine web, e-mail) come istruzioni che Claude potrebbe seguire: non dargli contenuti non affidabili con la modalità bypass attiva. Gli argomenti e i job che leggono il web, le e-mail o i messaggi inoltrati sono quelli da mettere in una modalità più restrittiva.
Proteggi i segreti (Impostazioni -> Claude, attivo per impostazione predefinita) fa sì che gli strumenti di Claude rifiutino di leggere o modificare
secrets.json e ~/.ssh in ogni modalità. È un dissuasore, non un muro: uno script scritto apposta per aprire il
file ci riesce comunque.
Chi può raggiungere l'interfaccia
- Il server è in ascolto solo su
127.0.0.1(dietro Caddy) o sull'IP di Tailscale – mai su0.0.0.0né su un indirizzo pubblico.maxxing doctorsegnala un errore se lo è. - Modalità dominio: solo HTTPS (Caddy, Let's Encrypt), con HSTS,
X-Frame-Options: SAMEORIGIN,nosniffe una politica referrer rigorosa (il server invia gli stessi header anche da solo, qualunque sia la modalità). - Modalità Tailscale: possono connettersi solo i dispositivi della tua tailnet.
- Modalità locale: solo tramite un tunnel SSH.
Il server stesso
L'installer rende più sicuro il server (passaggio "Sicurezza del server"; bash /opt/claude-maxxing/install.sh
--secure lo riapplica su un server esistente):
- Firewall (ufw): tutto il traffico in ingresso è rifiutato tranne SSH (le porte su cui sshd è realmente in ascolto
vengono rilevate prima, così non resti mai chiuso fuori), 80/443 in modalità dominio e l'interfaccia
tailscale0in modalità Tailscale. Qui questo è importante: se Claude avvia un server di sviluppo o un rapido file server su0.0.0.0, resta privato. Per pubblicare qualcosa di proposito:ufw allow 3000/tcp. Salta il firewall conFIREWALL=0(ad es. se il firewall del tuo provider fa già il lavoro). Su un server già in uso il comportamento predefinito (FIREWALL=auto) è prudente: il firewall non viene attivato quando altri servizi sono raggiungibili dall'esterno o Docker è in esecuzione, e un ufw già attivo mantiene le sue regole (vengono aggiunte solo le porte necessarie).FIREWALL=1forza la configurazione rigorosa. - SSH solo con chiave: gli accessi con password (e keyboard-interactive) vengono disattivati con
/etc/ssh/sshd_config.d/01-harness-maxxing.conf;PermitRootLogin yesdiventaprohibit-password(un valore più restrittivo viene mantenuto). Progettato in modo che non tu possa restare chiuso fuori: per impostazione predefinita viene fatto solo quando la sessione che esegue l'installer risulta, dal log SSH, un accesso con chiave (un'installazione interattiva chiede prima conferma); la nuova configurazione viene verificata consshd -te rimossa se non è valida o non ha effetto; le sessioni aperte restano connesse. Altrimenti gli accessi con password restano attivi e l'installer ne spiega il motivo (SSH_HARDEN=1 bash /opt/claude-maxxing/install.sh --secureuna volta entrato con una chiave;SSH_HARDEN=0non tocca mai SSH). Per annullare:rm /etc/ssh/sshd_config.d/01-harness-maxxing.conf && systemctl reload ssh. - fail2ban: un IP viene bannato per 1 ora dopo 5 accessi SSH falliti in 10 minuti
(
fail2ban-client status sshd; impostazioni in/etc/fail2ban/jail.d/harness-maxxing.local). - Aggiornamenti di sicurezza automatici (
unattended-upgrades, ogni giorno). - Download: nulla di ciò che viene scaricato da terzi viene eseguito prima di essere verificato, e nessuno script da internet viene
passato direttamente a una shell. Ogni componente esterno (uv, Python, Node.js, Claude Code, Scrapling e ciascun pacchetto Python
di cui ha bisogno, Chromium, Remotion, i modelli vocali, Garage) ha una versione fissata e uno sha256 in
server/maxxing/deps.toml, distribuito con ogni release firmata; la chiave del repository di Caddy deve avere l'impronta attesa e la sua sorgente apt è scritta dall'installer. Un download che non corrisponde non installa nulla.maxxing deps verifyricontrolla i binari installati e che nessuno dei loro file possa essere sostituito da un altro utente (lo fa anche il doctor);maxxing deps checkcerca le versioni nel database di vulnerabilità osv.dev, e un job settimanale ti avvisa quando una è interessata. I file temporanei non finiscono mai nella cartella condivisa/tmp. -
Memoria: il servizio web ha un proprio limite di memoria (60 % della RAM), le sessioni e i job pianificati vengono eseguiti nelle loro unità con limiti, e le richieste troppo grandi vengono rifiutate prima di essere lette.
-
Sandbox del servizio: il servizio
claude-maxxingviene eseguito con protezioni systemd che non possono intralciare il prodotto (nessun nuovo privilegio, impostazioni del kernel in sola lettura, nessun modulo del kernel né log del kernel, cgroup in sola lettura, nessun file set-uid, un limite ai processi). Si trovano in/etc/systemd/system/claude-maxxing.service.d/10-hardening.conf. Le installazioni precedenti alla 2.0.0a32 le ottengono conmaxxing harden(riavvia il servizio; se non riparte, la modifica viene annullata);maxxing harden --undole rimuove. Il servizio resta eseguito come root: le sessioni Claude vengono eseguite nelle proprie unità e non sono limitate da esso (hanno le protezioni più leggere descritte all'inizio di questa pagina).
Consigliato in aggiunta: chiavi SSH al posto delle password (PasswordAuthentication no una volta che la tua chiave funziona).
maxxing doctor ti avvisa se una delle tre cose manca.
Accesso
- Token di configurazione: la prima visita richiede il link monouso stampato dall'installer
(
maxxing setup-link), così chi trova l'URL per primo non può impadronirsi della tua istanza. Viene eliminato una volta impostata la password. - Password: almeno 12 caratteri per una nuova password (una più vecchia e più corta permette ancora l'accesso), conservata come
hash scrypt. Cambiala in Impostazioni -> Sicurezza o con
maxxing passwordsul server; cambiarla disconnette tutti i browser. Le password attuali errate in quel modulo vengono rallentate come gli accessi. - Cookie di sessione: firmato,
HttpOnly,SameSite=Strict,Securesu HTTPS, valido 30 giorni. Esci revoca anche sul server il cookie di quel browser (un cookie copiato smette di funzionare); gli altri browser restano connessi. Le viste live già aperte in un browser disconnesso (conversazioni, aggiornamenti della dashboard) si fermano entro 15 secondi. Per disconnettere tutti i browser, cambia la password (Impostazioni, omaxxing password). - CSRF: ogni richiesta di modifica deve includere l'header
X-Maxxing: 1, che un altro sito web non può inviare. - Dimensione delle richieste: una richiesta da un browser non connesso viene rifiutata prima che il server la legga (il modulo di accesso stesso accetta al massimo 64 kB), e anche le richieste degli utenti connessi hanno un limite (1 MB, di più per l'editor di file, i messaggi a Claude e i caricamenti), così nessuno può riempire la memoria del server con una richiesta enorme. Anche le viste live (conversazioni aperte, aggiornamenti della dashboard) hanno un limite: 24 per browser, 96 in totale; oltre, una vista riprova pochi secondi dopo.
- Rallentamento: dopo una password errata i tentativi successivi vengono ritardati (1, 2, 4, 8 s); dopo 8 password errate quell'indirizzo viene bloccato per 15 minuti – fino ad allora viene rifiutata anche la password giusta. Se molti indirizzi sbagliano contemporaneamente (più di 30 password errate in 15 minuti), il server controlla al massimo una password ogni 5 secondi per tutti: riprova dopo qualche secondo.
- Avvisi: con Telegram collegato, ogni accesso e le password errate ripetute vengono segnalati nel thread Avvisi.
Telegram
Il gateway risponde solo alla chat collegata con il codice monouso, e solo all'account Telegram che ha aperto
il link. Una chat collegata senza il suo proprietario (a mano, o da una versione molto vecchia) non risponde a nessuno - maxxing doctor
ti avvisa, ricollegala da Impostazioni -> Telegram. Chiunque abbia accesso a quell'account Telegram può controllare Claude:
proteggilo (verifica in due passaggi).
Cosa è memorizzato dove
| Percorso | Contenuto | Protezione |
|---|---|---|
/var/lib/claude-maxxing/config.json |
impostazioni (nessun segreto) | cartella in modalità 700 |
/var/lib/claude-maxxing/secrets.json |
hash della password, chiave del cookie, token/chiave API di Claude, token Telegram, token GitHub, le tue Chiavi | modalità 600; mai restituito dall'API se non con un Mostra esplicito |
/var/lib/claude-maxxing/sessions/ |
metadati e log delle sessioni | cartella in modalità 700 |
/root/maxxing/ |
il tuo spazio di lavoro (memoria, progetti, attività, estensioni) | incluso nel backup (whitelist) |
~/.claude/ |
impostazioni di Claude Code, credenziali della CLI, trascrizioni | file propri di Claude Code |
/opt/claude-maxxing/ |
il codice (git clone) e il suo ambiente Python | sostituito dagli aggiornamenti |
I segreti non finiscono mai nel backup: il backup copia una whitelist, rifiuta file come .env o chiavi,
cerca formati di segreti e rifiuta di fare il push su un repository pubblico.
File
La pagina File e l'API raggiungono solo la radice dei file (Impostazioni -> Generale). I file eliminati vanno nel cestino.
- I file aperti nel browser non possono mai eseguire script con la tua sessione: tutto ciò che non è immagine, audio, video e PDF viene mostrato in una sandbox.
- Un link di anteprima di una pagina HTML (valido 2 ore, terminato dall'uscita - di quel browser o di tutti) raggiunge
la cartella della pagina - solo le pagine e le loro risorse statiche (stili, script, immagini, font, audio, video), mai
note, dati o documenti (
.md,.json,.txt,.csv,.pdf...), codice o impostazioni (.py,.env,.yaml...), file o cartelle nascosti (.ssh,.claude...); dalla cartellaattachments/di un argomento, solo immagini e video. Una pagina salvata direttamente nella radice dei file, nella cartella home, nella radice dello spazio di lavoro, inprojects/, in un progetto o nella sua cartellatopics/(o in una cartella nascosta) viene mostrata da sola: le immagini e gli stili accanto ad essa non si caricano - spostala in una cartella tutta sua. - Chiedi a Harness su una notifica apre una sessione in modalità plan: Claude legge e spiega, non cambia nulla finché non approvi un piano - il testo di un webhook non può fargli compiere azioni.
- I webhook rifiutano i link sconosciuti prima di leggere qualsiasi cosa, e qualsiasi richiesta oltre 1 MB.
- L'importazione non porta mai con sé le impostazioni o gli hook di Claude Code (
.claude/settings.json,.mcp.json) dall'archivio; le skill e le note vengono importate.
Account Anthropic
Harness Maxxing esegue la CLI ufficiale di Claude Code con il tuo account o la tua chiave API sul tuo server; non condivide né inoltra mai le credenziali. Assicurati che il tuo utilizzo rispetti i termini di Anthropic per il tuo piano.
Checklist
- [ ] Server dedicato; SSH solo con chiave, firewall, fail2ban e aggiornamenti di sicurezza automatici attivi (impostati dall'installer).
- [ ] Accesso tramite dominio (HTTPS) o Tailscale; nulla raggiungibile da Internet tranne SSH, 80 e 443.
- [ ] SSH con una chiave (accesso con password disattivato).
- [ ] Password dell'interfaccia robusta; account Telegram protetto.
- [ ] Backup della memoria su un repository privato.
- [ ]
maxxing doctortutto verde.