Harness MaxxingDoku
📚 Alle Seiten

📚 Referenz · 9 Min. Lesezeit

🔒Sicherheit

Harness Maxxing gibt einem Browser (und einem Telegram-Chat) die Kontrolle über Claude Code auf deinem Server. Lies diese Seite einmal durch.

Claude läuft mit vollen Rechten (Bypass-Modus)

Sitzungen, Claude-Jobs und Shell-Jobs laufen als root, mit vollen Rechten auf dem Server. Standardmäßig läuft claude mit --dangerously-skip-permissions: Claude kann jede Datei lesen und ändern (deine Geheimnisse, SSH-Schlüssel, die Daten anderer Websites), Software installieren, die Firewall ändern, Dienste starten oder stoppen und beliebige Befehle ausführen, ohne zu fragen. Genau das macht unbeaufsichtigtes Arbeiten, Crons, Serveradministration und Unterhaltungen vom Handy aus möglich – und deshalb empfehlen wir einen Server, der nur für Harness Maxxing da ist, ohne andere kritische Dienste oder Daten.

Die Risiken: Eine bösartige Anweisung, die in Inhalten versteckt ist, die Claude liest (eine Webseite, eine E-Mail, ein Dokument, eine weitergeleitete Nachricht, ein Webhook), kann dazu führen, dass Claude auf dem ganzen Server handelt; ein Fehler kann das ebenfalls. Wer in die Oberfläche oder in deinen Telegram-Chat gelangt, bekommt dieselbe Macht. Nichts auf dem Server (Deny-Regeln, „Geheimnisse schützen") hält Code auf, der absichtlich als root läuft.

Was es begrenzt: - Berechtigungsmodi, pro Thema und pro Job (die eigentliche Grenze): bypass (Standard, keine Rückfragen), acceptEdits (bearbeitet Dateien, fragt vor Befehlen), default (fragt vor Änderungen und Befehlen), plan (liest nur, schlägt einen Plan vor). Du stellst sie für den ganzen Server ein (Einstellungen -> Claude), für ein Thema (Themenmenü -> Berechtigungen) oder für einen geplanten Job. Setze jedes Thema und jeden Job, die nicht vertrauenswürdige Inhalte lesen, auf einen strengeren Modus. - Jede Sitzung und jeder Job läuft in einer eigenen systemd-Unit mit Speicherlimit und einigen Schutzmaßnahmen, die der Administration des Servers nie im Weg stehen: Sie kann die Systemuhr nicht stellen, die Prozess-Personality nicht ändern und kein Echtzeit-Scheduling nutzen (Konfiguration unit_hardening, aktiv bei Installationen ab 2.0.0-alpha.70, aus bei älteren). Sie machen root nicht weniger zu root.

Ein strengerer Modus führt in Web-Sitzungen zu abgelehnten Aktionen. Siehe Einstellungen und Schlüssel.

Behandle alles, was du in eine Sitzung einfügst (Dokumente, Webseiten, E-Mails), als Anweisungen, denen Claude folgen kann: Füttere ihn bei aktivem Bypass-Modus nicht mit nicht vertrauenswürdigen Inhalten. Themen und Jobs, die das Web, E-Mails oder weitergeleitete Nachrichten lesen, solltest du in einen strengeren Modus setzen.

Geheimnisse schützen (Einstellungen -> Claude, standardmäßig an) sorgt dafür, dass Claudes Werkzeuge in jedem Modus das Lesen oder Bearbeiten von secrets.json und ~/.ssh verweigern. Das ist eine Bremsschwelle, keine Mauer: Ein Skript, das absichtlich geschrieben wurde, um die Datei zu öffnen, kann es trotzdem.

Wer die Oberfläche erreichen kann

  • Der Server lauscht nur auf 127.0.0.1 (hinter Caddy) oder auf der Tailscale-IP – niemals auf 0.0.0.0 oder einer öffentlichen Adresse. maxxing doctor schlägt fehl, wenn doch.
  • Domain-Modus: nur HTTPS (Caddy, Let's Encrypt), mit HSTS, X-Frame-Options: SAMEORIGIN, nosniff und einer strengen Referrer-Policy (der Server sendet dieselben Header auch selbst, unabhängig vom Modus).
  • Tailscale-Modus: Nur Geräte deines Tailnets können sich verbinden.
  • Lokaler Modus: nur über einen SSH-Tunnel.

Der Server selbst

Der Installer härtet den Server (Schritt „Serversicherheit"; bash /opt/claude-maxxing/install.sh --secure wendet das auf einem bestehenden Server erneut an):

  • Firewall (ufw): Alles Eingehende wird abgelehnt, außer SSH (die Ports, auf denen sshd wirklich lauscht, werden zuerst erkannt, damit du dich nie aussperrst), 80/443 im Domain-Modus und die tailscale0- Schnittstelle im Tailscale-Modus. Das ist hier wichtig: Wenn Claude einen Entwicklungsserver oder einen schnellen Dateiserver auf 0.0.0.0 startet, bleibt er privat. Um bewusst etwas zu veröffentlichen: ufw allow 3000/tcp. Die Firewall überspringst du mit FIREWALL=0 (z. B. wenn die Firewall deines Anbieters die Aufgabe schon erledigt). Auf einem bereits genutzten Server ist der Standard (FIREWALL=auto) vorsichtig: Die Firewall wird nicht eingeschaltet, wenn andere Dienste von außen erreichbar sind oder Docker läuft, und eine aktive ufw behält ihre Regeln (nur die nötigen Ports werden hinzugefügt). FIREWALL=1 erzwingt die strenge Einrichtung.
  • SSH nur per Schlüssel: Passwort-Logins (und keyboard-interactive) werden mit /etc/ssh/sshd_config.d/01-harness-maxxing.conf abgeschaltet; PermitRootLogin yes wird zu prohibit-password (ein strengerer Wert bleibt erhalten). So gebaut, dass du dich nicht aussperren kannst: Standardmäßig geschieht es nur, wenn anhand des SSH-Logs belegt ist, dass die Sitzung, in der der Installer läuft, ein Schlüssel-Login ist (eine interaktive Installation fragt vorher nach); die neue Konfiguration wird mit sshd -t geprüft und entfernt, wenn sie nicht validiert oder nicht wirksam wird; offene Sitzungen bleiben verbunden. Andernfalls bleiben Passwort-Logins an und der Installer sagt, warum (SSH_HARDEN=1 bash /opt/claude-maxxing/install.sh --secure, sobald du dich mit einem Schlüssel anmeldest; SSH_HARDEN=0 fasst SSH nie an). Zum Rückgängigmachen: rm /etc/ssh/sshd_config.d/01-harness-maxxing.conf && systemctl reload ssh.
  • fail2ban: Eine IP wird für 1 Stunde gesperrt, nach 5 fehlgeschlagenen SSH-Logins innerhalb von 10 Minuten (fail2ban-client status sshd; Einstellungen in /etc/fail2ban/jail.d/harness-maxxing.local).
  • Automatische Sicherheitsupdates (unattended-upgrades, täglich).
  • Downloads: Nichts, was von Dritten geladen wird, läuft, bevor es geprüft ist, und kein Skript aus dem Internet wird in eine Shell gepiped. Jede externe Komponente (uv, Python, Node.js, Claude Code, Scrapling und jedes Python-Paket, das es braucht, Chromium, Remotion, die Sprachmodelle, Garage) hat eine festgelegte Version und eine sha256 in server/maxxing/deps.toml, die mit jedem signierten Release ausgeliefert wird; der Repository-Schlüssel von Caddy muss den erwarteten Fingerprint haben und seine apt-Quelle wird vom Installer geschrieben. Ein Download, der nicht übereinstimmt, installiert nichts. maxxing deps verify prüft die installierten Binärdateien erneut und dass keine ihrer Dateien von einem anderen Benutzer ersetzt werden kann (der Doctor macht das auch); maxxing deps check schlägt die Versionen in der Schwachstellendatenbank osv.dev nach, und ein wöchentlicher Job benachrichtigt dich, wenn eine betroffen ist. Temporäre Dateien landen nie im gemeinsamen /tmp.
  • Speicher: Der Webdienst hat sein eigenes Speicherlimit (60 % des RAM), Sitzungen und geplante Jobs laufen in ihren eigenen Units mit Limit, und zu große Anfragen werden abgelehnt, bevor sie gelesen werden.

  • Dienst-Sandbox: Der Dienst claude-maxxing läuft mit systemd-Schutzmaßnahmen, die dem Produkt nicht im Weg stehen können (keine neuen Privilegien, schreibgeschützte Kernel-Einstellungen, keine Kernelmodule oder kein Kernel- Log, schreibgeschützte cgroups, keine set-uid-Dateien, ein Limit für Prozesse). Sie liegen in /etc/systemd/system/claude-maxxing.service.d/10-hardening.conf. Installationen vor 2.0.0a32 bekommen sie mit maxxing harden (startet den Dienst neu; wenn er nicht zurückkommt, wird die Änderung rückgängig gemacht); maxxing harden --undo entfernt sie. Der Dienst läuft weiterhin als root: Claude-Sitzungen laufen in ihren eigenen Units und werden dadurch nicht begrenzt (sie bekommen die leichteren Schutzmaßnahmen, die oben auf dieser Seite beschrieben sind).

Zusätzlich empfohlen: SSH-Schlüssel statt Passwörter (PasswordAuthentication no, sobald dein Schlüssel funktioniert). maxxing doctor warnt, wenn eines der drei fehlt.

Anmeldung

  • Einrichtungs-Token: Der erste Besuch erfordert den einmaligen Link, den der Installer ausgibt (maxxing setup-link), damit niemand, der die URL zuerst findet, deine Instanz in Besitz nehmen kann. Er wird gelöscht, sobald das Passwort gesetzt ist.
  • Passwort: mindestens 12 Zeichen für ein neues Passwort (ein älteres, kürzeres funktioniert weiterhin), gespeichert als scrypt-Hash. Ändere es unter Einstellungen -> Sicherheit oder mit maxxing password auf dem Server; eine Änderung meldet jeden Browser ab. Falsche aktuelle Passwörter in diesem Formular werden wie Anmeldungen gedrosselt.
  • Sitzungs-Cookie: signiert, HttpOnly, SameSite=Strict, Secure über HTTPS, 30 Tage gültig. Abmelden widerruft das Cookie dieses Browsers auch auf dem Server (ein kopiertes Cookie funktioniert nicht mehr); deine anderen Browser bleiben angemeldet. Live-Ansichten, die in einem abgemeldeten Browser schon offen sind (Unterhaltungen, die Updates des Dashboards), hören innerhalb von 15 Sekunden auf. Um jeden Browser abzumelden, ändere das Passwort (Einstellungen oder maxxing password).
  • CSRF: Jede ändernde Anfrage muss den Header X-Maxxing: 1 tragen, den eine andere Website nicht senden kann.
  • Anfragegröße: Eine Anfrage von einem Browser, der nicht angemeldet ist, wird abgelehnt, bevor der Server sie liest (das Anmeldeformular selbst nimmt höchstens 64 kB), und auch angemeldete Anfragen sind begrenzt (1 MB, mehr für den Datei- Editor, Nachrichten an Claude und Uploads), damit niemand den Speicher des Servers mit einer riesigen Anfrage füllen kann. Live- Ansichten (offene Unterhaltungen, Dashboard-Updates) sind ebenfalls begrenzt: 24 pro Browser, 96 insgesamt; darüber hinaus versucht eine Ansicht es einige Sekunden später erneut.
  • Drosselung: Nach einem falschen Passwort werden die nächsten Versuche verzögert (1, 2, 4, 8 s); nach 8 falschen Passwörtern wird diese Adresse für 15 Minuten gesperrt – bis dahin wird sogar das richtige Passwort abgelehnt. Wenn viele Adressen gleichzeitig scheitern (mehr als 30 falsche Passwörter in 15 Minuten), prüft der Server für alle höchstens ein Passwort alle 5 Sekunden: Versuche es nach einigen Sekunden erneut.
  • Alarme: Wenn Telegram verknüpft ist, werden jede Anmeldung und wiederholte falsche Passwörter im Alarme-Thread gemeldet.

Telegram

Das Gateway antwortet nur dem Chat, der mit dem einmaligen Code verknüpft wurde, und nur dem Telegram-Konto, das den Link geöffnet hat. Ein Chat, der ohne seinen Besitzer verknüpft wurde (von Hand oder durch eine sehr alte Version), antwortet niemandem – maxxing doctor warnt, verknüpfe ihn erneut unter Einstellungen -> Telegram. Jeder mit Zugriff auf dieses Telegram-Konto kann Claude steuern: Schütze es (Bestätigung in zwei Schritten).

Was wo gespeichert wird

Pfad Inhalt Schutz
/var/lib/claude-maxxing/config.json Einstellungen (keine Geheimnisse) Verzeichnis im Modus 700
/var/lib/claude-maxxing/secrets.json Passwort-Hash, Cookie-Schlüssel, Claude-Token/API-Schlüssel, Telegram-Token, GitHub-Tokens, deine Schlüssel Modus 600; wird von der API nie zurückgegeben, außer bei ausdrücklichem Anzeigen
/var/lib/claude-maxxing/sessions/ Sitzungs-Metadaten und Logs Verzeichnis im Modus 700
/root/maxxing/ dein Workspace (Memory, Projekte, Aufgaben, Erweiterungen) gesichert (Whitelist)
~/.claude/ Claude-Code-Einstellungen, CLI-Zugangsdaten, Transkripte eigene Dateien von Claude Code
/opt/claude-maxxing/ der Code (Git-Klon) und seine Python-Umgebung wird durch Updates ersetzt

Geheimnisse landen nie im Backup: Das Backup kopiert eine Whitelist, lehnt Dateien wie .env oder Schlüssel ab, durchsucht nach Geheimnis-Formaten und weigert sich, in ein öffentliches Repository zu pushen.

Dateien

Die Seite Dateien und die API erreichen nur das Dateien-Stammverzeichnis (Einstellungen -> Allgemein). Gelöschte Dateien kommen in den Papierkorb.

  • Im Browser geöffnete Dateien können nie Skripte mit deiner Sitzung ausführen: Alles außer Bildern, Audio, Video und PDF wird in einer Sandbox angezeigt.
  • Ein Link zur HTML-Seitenvorschau (2 Stunden gültig, beendet durch Abmelden – dieses Browsers oder aller) erreicht den Ordner der Seite – nur Seiten und ihre statischen Assets (Stile, Skripte, Bilder, Schriften, Audio, Video), niemals Notizen, Daten oder Dokumente (.md, .json, .txt, .csv, .pdf...), Code oder Einstellungen (.py, .env, .yaml...), versteckte Dateien oder Ordner (.ssh, .claude...); aus dem attachments/ eines Themas nur Bilder und Videos. Eine Seite, die direkt im Dateien-Stammverzeichnis, im Home-Ordner, im Workspace-Stamm, in projects/, einem Projekt oder dessen topics/-Ordner (oder in einem versteckten Ordner) gespeichert ist, wird allein angezeigt: Ihre Bilder und Stile daneben werden nicht geladen – verschiebe sie in einen eigenen Ordner.
  • Harness fragen bei einer Benachrichtigung öffnet eine Sitzung im Plan-Modus: Claude liest und erklärt, ändert aber nichts, bis du einen Plan freigibst – der Text eines Webhooks kann ihn nicht zum Handeln bringen.
  • Webhooks lehnen unbekannte Links ab, bevor irgendetwas gelesen wird, ebenso jede Anfrage über 1 MB.
  • Import bringt nie Claude-Code-Einstellungen oder Hooks (.claude/settings.json, .mcp.json) aus dem Archiv mit; Skills und Notizen werden importiert.

Anthropic-Konto

Harness Maxxing führt die offizielle Claude-Code-CLI mit deinem Konto oder API-Schlüssel auf deinem Server aus; es teilt oder leitet Zugangsdaten nie weiter. Stelle sicher, dass deine Nutzung den Bedingungen von Anthropic für deinen Tarif entspricht.

Checkliste

  • [ ] Eigener Server; SSH nur per Schlüssel, Firewall, fail2ban und automatische Sicherheitsupdates an (vom Installer eingerichtet).
  • [ ] Zugriff über Domain (HTTPS) oder Tailscale; nichts aus dem Internet erreichbar außer SSH, 80 und 443.
  • [ ] SSH mit einem Schlüssel (Passwort-Login deaktiviert).
  • [ ] Starkes Passwort für die Oberfläche; Telegram-Konto geschützt.
  • [ ] Memory-Backup in ein privates Repository.
  • [ ] maxxing doctor komplett grün.
💡 Nicht weiter? Öffne eine Session im Topic system › help und frag in deinen eigenen Worten: Claude liest diese Doku auf deinem Server und antwortet.✏️ Diese Seite verbessern