Sicherheitskonfiguration
Die Absicherung von duplistatus in der Produktionsumgebung erfolgt in mehreren Ebenen, wobei jede Ebene optional ist. Jede hier beschriebene Funktion ist standardmäßig deaktiviert, sodass eine Neuinstallation weiterhin funktioniert, bis Sie sie aktivieren. Es gibt drei unabhängige Ebenen:
- API-Schlüssel — Bereichsbezogene Geheimnisse für die externen Upload- und Lese-APIs; normalerweise der einfachste erste Schritt in einem Heimlabor
- IP-Zulassungslisten — CIDR-Einschränkungen auf das Administrationsinterface, die externen APIs oder beides
- HTTPS-Reverse-Proxy — verschlüsselter Datenverkehr, wobei Port
9666vom öffentlichen Internet ferngehalten wird
Empfohlene Reihenfolge
- Halten Sie Port
9666vom öffentlichen Internet fern: Binden Sie die Anwendung an localhost oder an ein privates Netzwerk. - Erstellen Sie API-Schlüssel und aktivieren Sie API-Schlüssel für externe APIs erfordern. Dies funktioniert ohne Reverse Proxy und ist der einfachste erste Schritt.
- Stellen Sie duplistatus über einen Reverse Proxy mit HTTPS bereit.
- Fügen Sie die Verbindungsadresse des Proxies zu Vertrauenswürdige Proxies (oder
IP_TRUSTED_PROXIES) hinzu, wenn Sie Allowlists verwenden möchten. - Aktivieren Sie optional die Admin- und externen IP-Allowlists und verwenden Sie dabei Erkannte IP und die Vorschläge für kürzlich genutzte IPs, um zu vermeiden, dass Sie Ihren eigenen Zugriff blockieren.
Zugriff mit API-Schlüsseln und IP-Zulassungslisten beschränken
Diese beiden Einstellungsfeatures begrenzen, wer auf das Dashboard und die externen Daten-APIs zugreifen kann. Sie sind unabhängig voneinander: Wenn beide aktiviert sind, muss eine Anfrage beide Prüfungen bestehen.
API-Schlüssel
API-Schlüssel sind der einfachste Schutz, den man hinzufügen kann, besonders in einem Heimlabor. Erstellen Sie bereichsbezogene Geheimnisse für Duplicati-Uploads und Homepage-Widgets und fordern Sie diese dann an — kein Reverse-Proxy oder CIDR-Planung erforderlich.
| Bereich | Endpunkte |
|---|---|
| Upload | POST /api/upload |
| Lesen | GET /api/summary, GET /api/lastbackup/:id, GET /api/lastbackups/:id |
Erstellen Sie mindestens einen Upload-Schlüssel und einen Lese-Schlüssel bevor Sie API-Schlüssel für externe APIs erfordern aktivieren. Andernfalls funktionieren Duplicati-Uploads und Homepage-Widgets nicht mehr, sobald der Schalter aktiviert ist.
Duplicati kann keine benutzerdefinierten Header in seine Anfragen einfügen, daher müssen Sie den API-Schlüssel für Duplicati bereitstellen, indem Sie ?api_key=… zur Berichts-URL hinzufügen. Beachten Sie, dass die Verwendung der Abfragezeichenkette den API-Schlüssel in den Zugriffsprotokollen des Reverse-Proxys sichtbar macht. Für andere Clients, die benutzerdefinierte Header unterstützen, wird empfohlen, stattdessen den X-Api-Key-Header oder den Authorization: Bearer-Header zu verwenden, um zusätzliche Sicherheit zu gewährleisten.
Das Upload-Größenlimit und die pro-IP-Ratenlimits auf derselben Einstellungsseite gelten auch, während Schlüssel optional sind. API-Schlüssel schützen nur die externen Daten-APIs; sie beschränken nicht das Administrationsinterface, das durch Anmeldung und optional durch die Admin-IP-Zulassungsliste geschützt ist.
IP-Zulassungsliste
IP-Zulassungsliste bietet zwei separate CIDR-Listen, beide standardmäßig ausgeschaltet:
- Administrationsinterface — Seiten, Anmeldung, CSRF- und Sitzungs-APIs
- Externe APIs —
/api/upload,/api/summaryund/api/lastbackup* - Status und Ping —
/api/healthund/api/pingbleiben öffentlich, solange beide Listen ausgeschaltet sind. Wenn eine Liste eingeschaltet ist, akzeptieren sie Loopback plus CIDRs aus der Admin-oder externen Liste, und Nicht-Loopback-Clients werden ratenbegrenzt. Anwendungsebene Limits stoppen keinen massiven Verbindungsüberlauf; fügen Sielimit_req/ Caddyrate_limitauf dem Reverse-Proxy hinzu, wenn die Instanz dem Internet gegenüber steht.
Bevor Sie eine der Listen aktivieren, prüfen Sie Erkannte IP unter Einstellungen → IP-Zulassungsliste und vergleichen Sie die Peer-IP mit der IP zur Whitelist hinzufügen. Verwenden Sie Aktuelle IP hinzufügen oder die Vorschläge für kürzlich verwendete IPs, damit Sie sich nicht selbst aussperren. Wiederherstellungsschritte finden Sie unter Von IP-Zulassungsliste ausgesperrt.
Wenn duplistatus hinter einem Reverse-Proxy steht, konfigurieren Sie zuerst Vertrauenswürdige Proxies (siehe unten Vertrauenswürdige Proxies für IP-Zulassungslisten). Ohne dies werden Zulassungsentscheidungen gegen die Adresse des Proxys statt der Client-Adresse getroffen.
HTTPS mit einem Reverse-Proxy
Verwenden Sie für Produktionsbereitstellungen duplistatus über HTTPS hinter einem Reverse-Proxy. Die folgenden Beispiele behandeln zwei beliebte Optionen.
Option 1: Nginx mit Certbot (Let's Encrypt)
Nginx ist ein weit verbreiteter Webserver, der als Reverse-Proxy fungieren kann, und Certbot stellt kostenlose TLS-Zertifikate von Let's Encrypt aus.
Voraussetzungen:
- Ein Domainname, dessen DNS-A- (oder AAAA-) Eintrag auf Ihren Server zeigt
- Auf Ihrem System installiertes Nginx
- Für Ihr Betriebssystem installiertes Certbot
Schritt 1: Installieren Sie Nginx und Certbot
Unter Ubuntu/Debian:
sudo apt update
sudo apt install nginx certbot python3-certbot-nginx
Schritt 2: Erstellen Sie die Nginx-Konfiguration
Erstellen Sie /etc/nginx/sites-available/duplistatus:
server {
listen 80;
server_name your-domain.com;
# Nginx defaults to 1 MB. Keep this at or above database restore (200 MB)
# and the upload limit on Settings → API Keys (5 MB by default).
client_max_body_size 256m;
location / {
proxy_pass http://localhost:9666;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Dieses Beispiel überschreibt X-Forwarded-For und X-Real-IP mit $remote_addr. Verwenden Sie nicht $proxy_add_x_forwarded_for stattdessen: Es hängt an, was der Client gesendet hat, wodurch clientseitig kontrollierte Werte in einem Header verbleiben, auf den sich Allowlisten verlassen.
Schritt 3: Aktivieren Sie die Website und erhalten Sie das Zertifikat
# Enable the site
sudo ln -s /etc/nginx/sites-available/duplistatus /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# Obtain the TLS certificate
sudo certbot --nginx -d your-domain.com
Certbot fügt Ihrer Nginx-Konfiguration die TLS-Einstellungen hinzu und leitet HTTP auf HTTPS um. Außerdem installiert es einen Erneuerungstimer, den Sie wie folgt überprüfen können:
sudo certbot renew --dry-run
Dokumentation:
Option 2: Caddy
Caddy ist ein moderner Webserver, der automatisch TLS-Zertifikate bezieht und erneuert, wodurch der größte Teil der Zertifikatsverwaltung entfällt.
Voraussetzungen:
- Ein Domainname, dessen DNS-A- (oder AAAA-) Eintrag auf Ihren Server zeigt
- Auf Ihrem System installiertes Caddy
Schritt 1: Installieren Sie Caddy
Folgen Sie dem offiziellen Installationshandbuch für Ihr Betriebssystem.
Schritt 2: Erstellen der Caddyfile
Paketinstallationen lesen /etc/caddy/Caddyfile. Legen Sie deren Inhalt wie folgt fest:
your-domain.com {
reverse_proxy localhost:9666
}
Die reverse_proxy-Direktive von Caddy setzt die Client-IP-Header für Sie. Sie müssen die Verbindungsadresse des Proxies dennoch unter Vertrauenswürdige Proxies auflisten, wenn Sie IP-Allowlists verwenden (siehe unten).
Schritt 3: Caddy starten oder neu laden
Wenn Sie Caddy aus einem Paket installiert haben, wenden Sie die Konfiguration über den verwalteten Dienst an:
sudo systemctl reload caddy
Um Caddy stattdessen manuell auszuführen – beispielsweise aus einer Caddyfile im aktuellen Verzeichnis – stoppen Sie zuerst den verwalteten Dienst, um die Ports 80 und 443 freizugeben, und führen Sie dann Folgendes aus:
sudo caddy run --config Caddyfile
Caddy bezieht das Zertifikat beim ersten Mal, wenn es die Website bereitstellt, und erneuert es vor Ablauf.
Dokumentation:
Vertrauenswürdige Proxies für IP-Zulassungslisten
Binden Sie duplistatus an localhost oder an ein privates Netzwerk, sodass der Reverse-Proxy der einzige öffentliche Listener ist. Der Port 9666 sollte niemals aus dem Internet heraus erreichbar sein.
Wenn IP-Allowlists aktiviert sind, listen Sie den Proxy unter Vertrauenswürdige Proxies auf (oder setzen Sie IP_TRUSTED_PROXIES). Die Anwendung berücksichtigt X-Forwarded-For und X-Real-IP nur, wenn die Verbindungsadresse ein vertrauenswürdiger Proxy ist; andernfalls werden sie ignoriert.
- Konfigurieren Sie den Proxy so, dass diese Header mit der Adresse des verbindenden Clients überschrieben werden, wie im obigen Nginx-Beispiel gezeigt. Fügen Sie nicht an.
- Wenn der Proxy auf dem Host läuft und duplistatus in einem Container ausgeführt wird, ist die Peer-IP normalerweise das Docker-Bridge-Gateway (z. B.
172.17.0.1). Fügen Sie diese Adresse oder CIDR zu Vertrauenswürdige Proxies hinzu und die echten Client-CIDRs in die Admin- oder externe Zulassungsliste. - Bevor Sie eine Zulassungsliste aktivieren, öffnen Sie Einstellungen → IP-Zulassungsliste und prüfen Sie Erkannte IP: Die Peer-IP sollte der Proxy (oder das Bridge-Gateway) sein und die IP zur Whitelist hinzufügen sollte der Client sein. Wenn die IP zur Whitelist immer noch den Proxy anzeigt, ist die Konfiguration des vertrauenswürdigen Proxys noch nicht korrekt.
Nach Aktivierung von HTTPS
--send-http-json-urls=https://your-domain.com/api/upload
Aktualisieren Sie Ihre Duplicati-Serverkonfiguration, um die HTTPS-URL zu verwenden:
Hängen Sie ?api_key=YOUR_UPLOAD_KEY an, falls API-Schlüssel erforderlich sind. Bei Duplicati älter als 2.0.9.106 verwenden Sie --send-http-url=https://your-domain.com/api/upload zusammen mit --send-http-result-output-format=Json. Siehe Duplicati-Serverkonfiguration.
- Ersetzen Sie
your-domain.comin allen Beispielen durch Ihre eigene Domain. - Stellen Sie sicher, dass der DNS-A- (oder AAAA-) Eintrag Ihrer Domain auf Ihren Server verweist, bevor Sie ein Zertifikat anfordern.
- Beide Optionen erneuern Zertifikate automatisch: Certbot über seinen systemd-Timer, Caddy über seinen integrierten Zertifikatsmanager.
- Beschränken Sie die Host-Firewall auf Port 443 und lassen Sie
80und9666nach außen geschlossen.