Das ist der Teil der Anleitung, der etwas Schlimmes verhindert, deshalb wird er ohne Wenn und Aber gesagt: Die Ollama-API hat kein Passwort, kein Token, kein Benutzermodell und kein Berechtigungssystem. Was auch immer eine TCP-Verbindung zu Port 11434 aufbauen kann, kann Text auf Ihrer CPU generieren, die heruntergeladenen Modelle auflisten, neue herunterladen und die genutzten löschen. Es gibt keine Einstellung, die man aktivieren könnte, weil es keinen Mechanismus gibt, den man aktivieren könnte.
Port 11434 wird ständig gescannt, aus dem naheliegenden Grund: Ein offener Model-Runner ist kostenlose Rechenleistung für jemand anderen. Das Symptom ist kein Alarm. Es ist eine Maschine, die sich zwei Wochen lang langsam anfühlt, und ein Bandbreiten-Graph, der zu nichts passt, was Sie getan haben. Halten Sie den Dienst auf Loopback, und stellen Sie etwas davor, das fragt, wer da anruft.
Wenn nichts außerhalb dieser Maschine das Modell braucht, hören Sie hier auf — Sie sind bereits fertig. Loopback plus Firewall ist eine vollständige Antwort, und ein Agent, ein Automatisierungs-Stack oder eine Webanwendung auf demselben VPS erreicht das Modell über 127.0.0.1, ganz ohne das Folgende. Machen Sie nur weiter, wenn etwas auf einer anderen Maschine es aufrufen muss.
Der Proxy, und das Token. Erzeugen Sie ein langes zufälliges Token, richten Sie einen A-Record auf die Maschine, und lassen Sie Caddy sowohl das Zertifikat als auch die Tür übernehmen:
openssl rand -hex 32 # → the bearer token, store it in a password manager
apt install -y caddy
/etc/caddy/Caddyfile
llm.example.com {
@unauthorised not header Authorization "Bearer PASTE_THE_HEX_TOKEN_HERE"
respond @unauthorised "unauthorised" 401
reverse_proxy 127.0.0.1:11434 {
# Generation is slow by nature — do not let the proxy give up first.
transport http {
read_timeout 10m
}
}
}
systemctl reload caddy
ufw allow 80,443/tcp
ufw status # 11434 must appear nowhere
Es steckt eine kleine Eleganz darin, ein Bearer-Token statt Basic Authentication zu wählen. Ollama bietet eine OpenAI-kompatible API, und jeder OpenAI-Client sendet seinen Schlüssel genau als diesen Header — sodass das Token, das Sie gerade erzeugt haben, zum API-Schlüssel wird, den Ihre Anwendungen bereits mitzuführen wissen. Nichts braucht einen eigenen Header, und der Zugriff lässt sich mit einer Zeile im Caddyfile und einer Umgebungsvariable beim Aufrufer rotieren.
Prüfen Sie es von einer Maschine aus, die nicht der Server ist. Der erste Aufruf sollte abgelehnt werden, der zweite sollte antworten:
curl -s -o /dev/null -w '%{http_code}\n' https://llm.example.com/api/tags
# → 401
curl -s https://llm.example.com/api/tags -H "Authorization: Bearer THE_TOKEN" | jq '.models[].name'
# → the list of models you pulled
Wenn das Modell von Agenten aufgerufen wird statt von Ihnen selbst, verdient die Frage der Exponierung die ausführlichere Behandlung in der Anleitung zum Hosten eines entfernten MCP-Servers — dieselbe Überlegung zu TLS, Tokens und Erreichbarkeit, angewendet auf einen Dienst, der Werkzeuge statt Tokens ausgibt.