Fernzugriff: Anmeldung und IP-Allowlist

In dieser Anleitung erfährst du, wie du Marinara Engine von einem anderen Gerät aus erreichst – vom Handy, vom Laptop oder von einem Docker-Container. Sie behandelt die wichtigste Option, eine Anmeldung. Dazu kommen die IP-Allowlist, Login-Proxys, HTTPS, Admin Access (Administrator-Zugriff) und die Meldung „save blocked“ zum Thema CSRF. Fast alles dazu steht in der .env-Datei des Servers, nicht in der App.

Ein paar Begriffe, die durchgehend vorkommen:

Mit Tailscale von überall aus verbinden

Tailscale ist ein privates Netzwerk für deine eigenen Geräte. Damit öffnest du Marinara auf dem Handy oder Laptop, zu Hause oder unterwegs, ohne Ports in deinem Router zu öffnen oder Marinara ins öffentliche Internet zu stellen. Marinara vertraut Geräten, die sich direkt über Tailscale verbinden, du musst also keine Anmeldung festlegen.

  1. Installiere Tailscale auf dem Computer, auf dem Marinara läuft, und auf deinem anderen Gerät. Du bekommst es unter tailscale.com/download.
  2. Melde dich auf beiden Geräten mit demselben Konto bei Tailscale an.
  3. Starte Marinara mit start.sh, start.bat, start-termux.sh oder dem Windows-Installer. Damit können sich andere Geräte verbinden. Startest du stattdessen mit pnpm start, füge zuerst HOST=0.0.0.0 in deine .env-Datei ein (siehe Wo die .env-Datei liegt).
  4. Ermittle die Tailscale-Adresse des Marinara-Computers. Öffne dort die Tailscale-App oder führe tailscale ip -4 aus. Die Adresse beginnt mit 100., zum Beispiel 100.101.102.103.
  5. Schalte auf deinem anderen Gerät Tailscale ein und öffne http://100.101.102.103:7860 im Browser. Nimm deine eigene Adresse und deinen PORT, falls du ihn geändert hast. Marinara öffnet sich ohne Anmeldeseite.

Lädt die Seite nicht, prüfe, ob Tailscale auf beiden Geräten eingeschaltet ist und ob der Server auf HOST=0.0.0.0 lauscht.

Hinweis: Bei Docker-Installationen funktioniert das nicht. Tailscale-Verkehr erreicht den Container über das Docker-Gateway, deshalb kann Marinara nicht erkennen, dass er über Tailscale kam. Lege zuerst eine Anmeldung fest (Option 1) und veröffentliche den Port erst dann über 127.0.0.1 hinaus.

Backups, Importe, Updates und andere heikle Aktionen brauchen von einem entfernten Gerät aus weiterhin das Admin-Secret. Siehe Admin Access und heikle Aktionen.

Was Marinara standardmäßig blockiert

Zum Schutz der Daten lehnt eine frische Marinara-Installation Verbindungen von anderen Geräten ab, solange keine Zugriffskontrolle eingerichtet ist. Standardmäßig gelten nur drei Arten von Clients als vertrauenswürdig:

  1. Loopback (127.0.0.1 oder ::1), also der Rechner mit dem Server selbst. Besucher, die ein Reverse-Proxy oder Tunnel auf demselben Rechner weiterreicht, zählen nicht dazu; siehe Reverse-Proxys und Tunnel auf demselben Rechner.
  2. Tailscale-Geräte im eigenen Tailnet. Tailscale ist ein Werkzeug für private Netzwerke, seine Adressen liegen im Bereich 100.64.0.0/10.
  3. Docker-Clients auf demselben Host. Marinara erkennt den üblichen Bridge-Bereich 172.16.0.0/12 sowie das exakte Standard-Gateway des Containers – damit sind auch Docker Desktop und eigene Adresspools abgedeckt.

Alles andere, etwa dein Handy im selben WLAN oder ein Client aus dem öffentlichen Internet, ist blockiert, bis du eine Anmeldung einrichtest. Öffnet ein blockiertes Gerät Marinara im Browser, erscheint eine dunkle Einrichtungsseite. Ihr Titel lautet This Marinara Engine install needs a login before remote devices can connect. Die Seite hat ein Formular für den einmaligen Einrichtungscode aus dem Server-Log, sodass du die Anmeldung von diesem Gerät aus einrichten kannst.

Wenn du nichts tust und nie ein Passwort setzt, bleibt Marinara auf diese drei vertrauenswürdigen Quellen beschränkt. Das ist der sichere Standard.

Wo die .env-Datei liegt

Alle Zugriffseinstellungen stehen in der .env-Datei im Projekt-Wurzelordner, direkt neben package.json. Falls noch keine existiert, kopiere die Beispieldatei:

cp .env.example .env

Öffne .env mit einem beliebigen Texteditor. Die meisten Zugriffseinstellungen greifen innerhalb weniger Sekunden ohne Neustart – dazu zählen Basic Auth, die IP-Allowlist, das Admin-Secret und die CSRF-Herkünfte. Ein paar hardwarenahe Einstellungen brauchen weiterhin einen Neustart, darunter PORT, HOST und die Pfade zum HTTPS-Zertifikat.

Manchmal erreichen andere Geräte den Server überhaupt nicht: Statt eines 403 läuft die Verbindung in ein Zeitlimit. Dann lauscht der Server womöglich nur auf dem lokalen Rechner. Lass ihn auf allen Netzwerkschnittstellen lauschen:

HOST=0.0.0.0

Die Shell-Launcher (start.bat, start.sh) setzen HOST=0.0.0.0 für dich. Wenn du pnpm start direkt aufrufst, passiert das nicht.

Standard-Bind-Adresse je nach Startweg:

StartwegHOST-Standard
pnpm start, start-local.bat127.0.0.1
start.sh, start.bat, Windows-Installer, start-termux.sh0.0.0.0
Docker-Image0.0.0.0 im Container
docker-compose.ymlVeröffentlicht den Port nur auf 127.0.0.1

Welche Option passt zu dir

Lies die Liste der Reihe nach und halte beim ersten Punkt an, der auf dich zutrifft.

  1. Du verbindest dich nur direkt über Tailscale oder nur aus Docker-Containern auf demselben Host. Mit pnpm start überspringen direkte Tailscale-Clients die Anmeldung; setze HOST=0.0.0.0, damit sie den Server erreichen. Die Standard-Compose-Datei veröffentlicht nur auf 127.0.0.1. Wenn du den Port über Loopback hinaus veröffentlichst, damit ein Tailscale-Gerät ihn erreicht, lege zuerst eine Anmeldung fest. Docker fragt dann jedes Gerät danach, auch Tailscale-Geräte, weil Docker sie an der Gateway-Adresse sieht. Siehe Ausnahme für Tailscale und Docker.
  2. Du willst Marinara vom Handy, Tablet oder Laptop im heimischen WLAN erreichen. Richte eine Anmeldung ein (Option 1 unten).
  3. Du stellst Marinara ins öffentliche Internet. Richte eine Anmeldung ein und nutze HTTPS.
  4. Ein Login-Proxy in deinem Netzwerk, etwa tinyauth, Authelia oder Authentik, lässt bereits jeden Besucher sich anmelden. Lies Login-Proxys (Forward-Auth).

Eine Anmeldung ist die flexibelste Wahl. Sie funktioniert von jeder IP-Adresse aus, braucht keine Einrichtung pro Gerät, und jeder Browser bleibt angemeldet.

Option 1: Anmeldung (empfohlen)

Eine Anmeldung besteht aus Benutzername und Passwort, die jedes entfernte Gerät braucht. Du kannst sie auf drei Wegen einrichten:

BASIC_AUTH_USER=alice
BASIC_AUTH_PASS=correct-horse-battery-staple

Eine Anmeldung in .env hat Vorrang vor einer in der App eingerichteten, und du änderst sie nur in .env. Speichere .env; die Änderung greift innerhalb weniger Sekunden, ganz ohne Neustart.

Wähle ein starkes, einmaliges Passwort. Die App verlangt mindestens 10 Zeichen. Ein zufälliges lässt sich so erzeugen:

openssl rand -base64 24

Folge dann diesen Schritten vom entfernten Gerät aus.

  1. Öffne Marinara in deinem Browser über die Adresse des Servers, zum Beispiel http://192.168.1.50:7860.
  2. Melde dich auf der Anmeldeseite mit Benutzername und Passwort an.
  3. Die App sollte nun laden. Der Browser bleibt bis zu einem Jahr angemeldet, bis du dich abmeldest. Skripte und API-Clients senden Benutzername und Passwort bei jeder Anfrage mit (Basic Auth).

Um ein weiteres Gerät ohne Passworteingabe anzumelden, nutze einen Kopplungscode. Öffne auf einem angemeldeten Gerät Settings → Advanced → Access und wähle Add a device. Gib den Code dann auf der Anmeldeseite des neuen Geräts ein. Der Code gilt einmal und nur wenige Minuten. Ein abgelaufener Code erhält eine eigene Meldung; erzeuge dann einen neuen. Unter Signed-in devices siehst du jedes Gerät mit seiner Anmeldeart und dem Datum der ersten Anmeldung. Du kannst jedes Gerät abmelden, auch das, an dem du gerade sitzt. Du kannst auch das Passwort ändern oder entfernen. Dafür fragt Marinara nach dem aktuellen Passwort, außer du arbeitest auf dem Computer, auf dem Marinara läuft, oder hast ADMIN_SECRET gesetzt.

Wenn du das Passwort vergisst, führe node scripts/reset-login.mjs im Marinara-Ordner auf dem Computer aus, auf dem Marinara läuft. Unter Docker führst du docker exec <container> node scripts/reset-login.mjs aus. Das entfernt die in der App eingerichtete Anmeldung und meldet jeden Browser ab. Lauscht der Server über Loopback hinaus, gibt er danach einen neuen Einrichtungscode aus. Nur wenn dieser Befehl nicht funktioniert, lösche stattdessen .remote-login.json und .remote-sessions.json aus dem Datenordner. Mit dem Standardordner /app/data führst du docker exec <container> rm -f /app/data/.remote-login.json /app/data/.remote-sessions.json aus; hast du DATA_DIR geändert, nutze diesen Ordner. Eine Anmeldung in .env änderst du in .env.

Headless-Server ohne Browser? Eine native Installation auf einem Headless-Server lauscht nur auf Loopback und gibt keinen Einrichtungscode aus. Führe auf deinem eigenen Computer ssh -L 7860:127.0.0.1:7860 user@server aus. Öffne dann dort http://localhost:7860 und nutze Settings.

Nach 10 verschiedenen falschen Passwörtern oder Codes innerhalb von 15 Minuten lehnt Marinara Anmeldungen von dieser Adresse mit 429 Too Many Requests ab, bis die 15 Minuten vorbei sind. Ein richtiges Passwort vor Ablauf dieser Zeit setzt den Zähler zurück. Besucher, die ein Reverse-Proxy oder Tunnel auf dem Host weiterreicht, teilen sich einen Zähler, und wenn sich einer von ihnen anmeldet, wird er nicht zurückgesetzt. Auch ein Neustart des Servers setzt ihn zurück. Ein Browser, der sich schon einmal angemeldet hat, kommt mit dem richtigen Passwort weiterhin hinein, falsche Passwörter anderer Leute können dich also nicht von einem Gerät aussperren, das du bereits nutzt. Die Anmeldeseite zeigt dir, wie viele Minuten du warten musst. Wenn du das Passwort vergisst, hat die Anmeldeseite einen Hinweis Forgot the password?.

Browser melden sich auf der Seite /login an. BASIC_AUTH_REALM ändert den Realm in der Basic-Auth-Abfrage für Skripte und API-Clients; die Anmeldeseite ändert sich dadurch nicht.

Manche Clients umgehen das Passwort auch bei aktiviertem Basic Auth:

Wichtig: Basic Auth kodiert das Passwort nur, verschlüsselt wird es nicht. Wer eine unverschlüsselte Verbindung mitliest, kann es lesen. Wenn Marinara aus dem öffentlichen Internet erreichbar ist, kombiniere Basic Auth mit HTTPS (siehe unten).

Option 2: IP-Allowlist

Die IP-Allowlist lässt bestimmte Adressen ohne Passwort durch. Das passt gut, wenn deine Geräte stabile IP-Adressen haben. Trage eine kommagetrennte Liste aus Adressen oder Bereichen ein:

IP_ALLOWLIST=192.168.1.0/24,203.0.113.42

Das /24 im Beispiel ist CIDR-Schreibweise. CIDR ist eine Kurzform, um einen ganzen Adressbereich in einem einzigen Eintrag zu notieren. 192.168.1.0/24 umfasst etwa jede Adresse von 192.168.1.0 bis 192.168.1.255. Eine nackte Adresse ohne Schrägstrich wie 203.0.113.42 trifft dagegen nur genau dieses eine Gerät.

Ein breiter öffentlicher Bereich wie 0.0.0.0/0 kann Internet-Clients ohne Anmeldung hereinlassen. Trage nur Adressen ein, denen du vertraust.

So verhält sich die IP-Allowlist:

Ein gemischter Aufbau ist damit nicht möglich, bei dem gelistete Geräte das Passwort überspringen und alle anderen sich anmelden. Sollen sich andere Geräte per Passwort anmelden, lass IP_ALLOWLIST leer und nutze allein Basic Auth.

Du kannst die Prüfung vorübergehend abschalten, ohne die Liste zu löschen. Praktisch, wenn du von einer neuen IP-Adresse aus Fehler suchst. Setze den Schalter auf false:

IP_ALLOWLIST_ENABLED=false

Ausnahme für private Netzwerke (Referenz)

Einige Schalter heben die Sperre für ein vertrauenswürdiges privates Netzwerk auf. Sie sind für Sonderfälle gedacht. Eine Anmeldung ist die bessere Wahl. Die Schalter und ihre Risiken findest du unter Zugriffskontrolle.

Ausnahme für Tailscale und Docker

Standardmäßig vertraut Marinara einem Gerät, das sich direkt über dein Tailscale-Netzwerk verbindet. Es vertraut außerdem dem eigenen Host eines Docker-Containers. Eine Anmeldung, eine IP-Allowlist oder TRUSTED_AUTH_PROXY beendet das automatische Docker-Vertrauen, sodass dann jedes Gerät seine Anmeldung oder seinen Platz auf der Allowlist braucht. Die Schalter, die das ändern, stehen unter Zugriffskontrolle.

Docker Desktop, OrbStack und rootless Docker zeigen jedes Gerät, das einen veröffentlichten Port nutzt, unter der Adresse des Docker-Gateways. Wenn du den Port auf allen Schnittstellen veröffentlichst (-p 7860:7860) und keine Anmeldung setzt, kommt jeder in deinem Netzwerk hinein. Lass den Port auf 127.0.0.1 oder richte zuerst eine Anmeldung ein. Das Serverprotokoll warnt beim Start davor.

Reverse-Proxys und Tunnel auf demselben Rechner

Ein Reverse-Proxy oder Tunnel auf dem Rechner, auf dem Marinara läuft – etwa nginx, Caddy, Traefik, Cloudflare Tunnel, Tailscale Serve oder Funnel oder ngrok –, verbindet sich über Loopback mit Marinara. Marinara erkennt das an den Weiterleitungs-Headern, die der Proxy hinzufügt: Forwarded, X-Forwarded-For, X-Real-IP, X-Forwarded-Host, X-Forwarded-Proto, CF-Connecting-IP, True-Client-IP, die Identitäts-Header von Tailscale oder Via. Marinara erkennt außerdem eine Anfrage, die über HTTP/1.0 eintrifft, weil Browser das nie verwenden, das Standard-proxy_pass von nginx aber schon. Marinara erkennt außerdem eine Anfrage, deren Host einen anderen Rechner angibt, etwa eine Domain oder eine LAN-Adresse, auch wenn der Proxy keine Header hinzufügt. Dann behandelt es jede Anfrage als das, was sie ist: ein entfernter Besucher.

Dein eigener Browser auf diesem Rechner, geöffnet unter http://127.0.0.1:7860 oder http://localhost:7860, bleibt ohne Passwort.

Caddy, Traefik, Cloudflare Tunnel, Tailscale und ngrok fügen Weiterleitungs-Header von sich aus hinzu. Bei nginx empfiehlt sich diese Zeile weiterhin im location-Block:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Werkzeuge, die rohe Verbindungen weiterleiten, etwa socat oder ssh -R, fügen keine Header hinzu, ihr Verkehr sieht also lokal aus. Veröffentliche Marinara nicht damit.

Wenn dein Proxy schon jeden Besucher sich anmelden lässt, bevor er etwas weiterleitet, siehe Login-Proxys (Forward-Auth).

Login-Proxys (Forward-Auth)

Ein Forward-Auth-Proxy, etwa tinyauth, Authelia, Authentik oder oauth2-proxy, lässt jeden Besucher sich anmelden, bevor er die Anfrage weiterleitet. Ist ein solcher Proxy der einzige Weg zu Marinara, kannst du die zweite Marinara-Anmeldung überspringen. Setze das nicht ohne einen solchen Proxy.

Trage die Adresse des Proxys in .env ein:

TRUSTED_AUTH_PROXY=192.168.1.5

Marinara lässt dann jede Anfrage durch, deren Verbindung von dieser Adresse kommt. Marinara fragt dafür nicht nach einer eigenen Anmeldung und gibt keinen Einrichtungscode aus. Marinara prüft die Adresse der Verbindung selbst. Weiterleitungs-Header wie X-Forwarded-For ignoriert es dafür. Anfragen vom Proxy überspringen auch IP_ALLOWLIST, weil der Proxy entscheidet, wer hineinkommt. Sie zählen nicht als lokal, privilegierte Aktionen brauchen also weiterhin das Admin-Secret. Settings → Advanced → Access zeigt Trusted login proxy: Set, solange die Einstellung aktiv ist.

Bevor du sie setzt:

Ist TRUSTED_AUTH_PROXY gesetzt, beendet Marinara auch das automatische Docker-Vertrauen. Direkte Besucher, die nicht der Proxy sind, brauchen die Marinara-Anmeldung oder die IP-Allowlist. Marinara zeigt dann auch kein Banner „no login yet“.

Läuft der Proxy auf demselben Rechner wie Marinara, nutze TRUSTED_AUTH_PROXY=127.0.0.1 und richte den Proxy auf 127.0.0.1:7860, nicht auf localhost:7860. Ein Proxy, der localhost anwählt, kann sich von ::1 aus verbinden, was nicht zu 127.0.0.1 passt. Dann wird jeder andere Proxy oder Tunnel auf diesem Computer ebenfalls vertraut, nutze es also nur, wenn der Login-Proxy der einzige ist. Das gibt weitergeleiteten Besuchern nicht den Zugriff des lokalen Rechners.

Ein Caddy-Beispiel mit Marinara unter 192.168.1.20:7860:

marinara.example.com {
  forward_auth tinyauth:3000 {
    uri /api/auth/caddy
  }
  reverse_proxy 192.168.1.20:7860
}

Für Authelia nutzt du forward_auth authelia:9091 mit uri /api/authz/forward-auth. Authentik liefert außerdem eigene Anmeldeseiten über den Proxy aus. Lege seine Zeilen in einen route-Block, damit Caddy ihre Reihenfolge einhält und der Outpost-Pfad nicht selbst durch Forward-Auth läuft:

marinara.example.com {
  route {
    reverse_proxy /outpost.goauthentik.io/* authentik-server:9000
    forward_auth authentik-server:9000 {
      uri /outpost.goauthentik.io/auth/caddy
    }
    reverse_proxy 192.168.1.20:7860
  }
}

Für Traefik und nginx folge der Forward-Auth-Anleitung deines Proxys. Marinara braucht nicht mehr als die Adresse des Proxys.

Betrieb über HTTPS

HTTPS verschlüsselt die Verbindung mit TLS. TLS ist die Verschlüsselung, die aus einer einfachen http-Adresse eine sichere https-Adresse macht. Nutze HTTPS immer dann, wenn die Installation außerhalb eines vollständig vertrauenswürdigen privaten Netzwerks erreichbar ist – erst recht zusammen mit Basic Auth.

Dafür gibt es zwei Wege.

  1. Eingebautes TLS. Verweise den Server auf eine Zertifikats- und eine Schlüsseldatei:
SSL_CERT=/path/to/cert.pem
SSL_KEY=/path/to/key.pem
  1. Reverse-Proxy. Stelle Marinara hinter nginx, Caddy, Traefik oder einen Cloudflare Tunnel. Der Proxy übernimmt HTTPS und leitet auf demselben Rechner per einfachem HTTP an Marinara weiter. Lies vorher Reverse-Proxys und Tunnel auf demselben Rechner.

Zertifikat und Schlüssel müssen vorliegen, bevor du SSL_CERT und SSL_KEY setzt. Erzeugen lassen sie sich für den lokalen Einsatz etwa mit mkcert, für eine öffentliche Domain mit certbot. Fehlen die Dateien oder sind sie nicht lesbar, bricht der Server beim Start ab und nennt die genauen Pfade, die er versucht hat.

Admin Access und heikle Aktionen

Manche Aktionen sind besonders heikel: Daten löschen, Backups erstellen oder herunterladen, Profile importieren und exportieren, Themes und Agenten installieren und die Local-Model-Laufzeitumgebung installieren. Sie brauchen zusätzlich zur gewählten Zugriffsoption ein eigenes gemeinsames Geheimnis, das Admin-Secret.

Auf dem Loopback-Rechner funktionieren diese Aktionen meist ohne Admin-Secret. Von einem entfernten Gerät aus musst du es einrichten. Du kannst es in der App erstellen oder in der .env setzen.

Installierte Agenten, etwa die auf dem Home-Bildschirm, brauchen das Admin-Secret nicht. Jedes Gerät, das mit der Anmeldung angemeldet ist, kann sie nutzen. Zum Installieren, Aktualisieren und Entfernen eines Agenten brauchst du es weiterhin.

Das Admin-Secret in der App erstellen

  1. Öffne auf dem Computer, auf dem Marinara läuft, Settings (Einstellungen), dann den Tab Advanced (Erweitert) und dort den Abschnitt Admin Access.
  2. Klick auf Make admin secret (Admin-Secret erstellen). Marinara zeigt das neue Geheimnis einmal an und speichert es in diesem Browser.
  3. Öffne auf jedem entfernten Gerät Settings → Advanced → Admin Access, tipp das Geheimnis in das Feld und klick auf Save (Speichern). Großbuchstaben, Leerzeichen und Bindestriche spielen keine Rolle.

Auch ein Gerät, das das Geheimnis schon hat, kann es erstellen. Ein Gerät, das nur mit der Anmeldung angemeldet ist, kann das nicht. So kann niemand mit einer gestohlenen Anmeldung die heiklen Aktionen übernehmen.

Unter Docker erreicht dein Browser Marinara über das Docker-Netzwerk, deshalb behandelt Marinara ihn nicht als denselben Computer. Setz das erste Geheimnis stattdessen in der .env (siehe unten).

Um das Geheimnis zu ändern, klick auf Replace admin secret (Admin-Secret ersetzen). Das alte Geheimnis funktioniert dann auf keinem Gerät mehr. Zum Abschalten klick auf Remove admin secret (Admin-Secret entfernen). Marinara bewahrt nur einen Fingerabdruck des Geheimnisses auf, in .admin-secret.json im Datenordner. Löschst du diese Datei, ist das Geheimnis ebenfalls entfernt.

Das Admin-Secret in der .env setzen

  1. Setze in der .env einen starken Zufallswert und speichere. Er greift innerhalb weniger Sekunden, ohne Neustart.
ADMIN_SECRET=some-long-random-string
  1. Öffne auf dem entfernten Gerät Settings → Advanced → Admin Access.
  2. Füge denselben Wert in das Feld ein (sein Platzhalter lautet ADMIN_SECRET) und klick auf Save.
  3. Es sollte die Meldung Admin secret saved for this browser erscheinen.

ADMIN_SECRET in der .env hat Vorrang vor einem in der App erstellten Geheimnis. Solange es gesetzt ist, weist Admin Access darauf hin, und du änderst das Geheimnis nur in der .env.

Gut zu wissen

Schlägt eine heikle Aktion auf einem entfernten Gerät fehl, zeigt Marinara eine Fehlermeldung mit zwei Lösungswegen. Entweder du öffnest die App über localhost. Oder du richtest das Admin-Secret wie oben beschrieben ein.

Warum wird mein Speichern blockiert (CSRF)

CSRF steht für Cross-Site Request Forgery. Es ist ein Schutz, der verhindert, dass eine andere geöffnete Website unbemerkt Änderungen in Marinara vornimmt. Er läuft automatisch, eine Einstellung zum Einschalten gibt es nicht.

Manchmal blockiert CSRF auch dein eigenes Speichern. Das passiert meist, wenn du Marinara über einen öffentlichen Domainnamen oder einen ungewöhnlichen Port erreichst, dem der Server noch nicht vertraut. Zwei Hinweise machen darauf aufmerksam.

Zur Abhilfe trägst du die eigene Adresse in der .env als vertrauenswürdig ein:

CSRF_TRUSTED_ORIGINS=https://chat.example.com,http://203.0.113.10:7831

Bei einer öffentlichen Domain oder einer Reverse-Proxy-Domain erlaube zusätzlich den Hostnamen:

TRUSTED_HOSTS=chat.example.com

Direkte LAN-, Tailscale-, IPv4- und IPv6-Adressen brauchen kein TRUSTED_HOSTS. Lokale .local-/.home.arpa-Namen und einteilige Rechnernamen werden automatisch akzeptiert. Ein exakter Hostname, der bereits in CSRF_TRUSTED_ORIGINS steht, wird ebenfalls akzeptiert.

Loopback, normale LAN-Adressen, Tailscale (100.64.0.0/10) und die Docker-Bridge (172.16.0.0/12) gelten automatisch als vertrauenswürdige Herkunft. Eintragen musst du nur öffentliche IP-Adressen und Domainnamen. Die Änderung greift innerhalb weniger Sekunden, ein Neustart ist nicht nötig.

Hinweis zu blockierten lokalen Anbietern

Angenommen, du verbindest Marinara mit einem lokalen KI-Anbieter, der etwa auf dem eigenen Rechner läuft. Dann wird die Anfrage womöglich abgelehnt, mit einem Hinweis auf einen „private, loopback, metadata, or reserved IP range“. Dahinter steckt eine andere Sicherheitsprüfung namens SSRF-Schutz. SSRF steht für Server-Side Request Forgery und verhindert, dass der Server private Adressen aufruft, solange du es nicht erlaubst. Die Fehlermeldung nennt die genaue .env-Variable, die du setzen musst, zum Beispiel PROVIDER_LOCAL_URLS_ENABLED. Die vollständige Liste findest du in der Referenz zur Server-Konfiguration.

Zugriff vom Handy oder Tablet

So öffnest du Marinara vom Handy oder Tablet im selben Netzwerk:

  1. Achte darauf, dass der Server mit HOST=0.0.0.0 in der .env auf allen Schnittstellen lauscht.
  2. Richte eine Anmeldung ein (Option 1 oben). Vom Handy aus kannst du das auf der Seite tun, die dich blockiert, mit dem Einrichtungscode aus dem Server-Log.
  3. Ermittle die lokale IP-Adresse des Server-Rechners (zum Beispiel 192.168.1.50).
  4. Öffne auf dem Handy http://192.168.1.50:7860 im Browser. Der Standard-Port ist 7860.
  5. Melde dich mit Benutzername und Passwort an.

Lädt die Seite gar nicht, ist der Server vermutlich nicht erreichbar. Prüfe HOST=0.0.0.0 und den Wert von PORT. Kommt stattdessen ein 403, ist dein Gerät zwar erreichbar, aber noch nicht zugelassen. Sieh die gewählte Option oben noch einmal durch.

Ausgesperrt nach dem Update

Neuere Versionen verlangen eine Anmeldung, wenn ein Besuch über einen Reverse-Proxy, einen Tunnel, Tailscale Serve oder Tailscale Funnel kommt. Ältere Versionen ließen diese Besuche ohne Passwort herein. Siehst du jetzt eine Anmeldeseite, eine Einrichtungsseite oder einen 403, liegt es daran.

Hinweis zum Update: Wenn du Tailscale Serve oder einen anderen Proxy auf demselben Rechner nutzt und nie ein Passwort gesetzt hast, sind deine anderen Geräte nach dem Update ausgesperrt. Ein Proxy auf demselben Rechner spricht meist mit einem Server, der nur auf Loopback lauscht, deshalb gibt der Server keinen Einrichtungscode aus. Richte stattdessen die Anmeldung auf dem Computer ein, auf dem Marinara läuft.

So kommst du wieder hinein:

  1. Öffne Marinara auf dem Computer, auf dem es läuft, unter http://localhost:7860 (oder deinem eigenen PORT). Lokal brauchst du kein Passwort. Auf einem Headless-Server führst du zuerst ssh -L 7860:127.0.0.1:7860 user@server auf deinem eigenen Computer aus und öffnest dort http://localhost:7860. Unter Docker gilt das nur, solange weder eine Anmeldung noch IP_ALLOWLIST gesetzt ist. Sonst gib den Einrichtungscode aus dem Server-Log (docker logs <container> 2>&1 | grep "setup code") auf der Seite ein, die dich blockiert, oder in Settings → Advanced → Access, oder nutze einen Browser, der noch angemeldet ist.
  2. Gehe zu Settings → Advanced → Access und lege unter Remote login Benutzername und Passwort fest. Oder öffne die .env-Datei auf diesem Computer und setze BASIC_AUTH_USER und BASIC_AUTH_PASS. Ist IP_ALLOWLIST gesetzt, trage die Adresse deines anderen Geräts dort ein oder entferne die Einstellung, denn ein Gerät, das nicht auf der Liste steht, bekommt auch mit Anmeldung einen 403.
  3. Melde dich von deinem anderen Gerät aus mit diesem Benutzernamen und Passwort an.

Suchmaschinen

Marinara bittet Suchmaschinen, seine Seiten nicht zu indexieren (X-Robots-Tag: noindex, nofollow). Das schützt deine Installation nicht und entfernt Seiten, die bereits indexiert sind, nicht aus den Suchergebnissen. Nutze die Zugriffskontrollen oben, um deine Installation privat zu halten.

Verwandte Anleitungen