v2.3.7 · Veröffentlicht April 2026
Größeres Release mit Records-Sync über mehrere Server, Login-Rate-Limit, SSRF-Schutz für Webhooks und vollständiger i18n in allen 6 Sprachen.
Records & Multi-Server-Sync
- Fan-out beim Schreiben:
POST/PUT/DELETEund Bulk-Updates auf Records werden jetzt automatisch auf alle Server angewendet, dieSpeichern: Ja(allow_writes=true) haben und die Zone führen. Read-only Server werden hart abgelehnt (HTTP 403). Per-Server-Status (ok / skipped / error) liegt im Response-Body unterdetails. - Frontend kennt schreibbare Server:
/api/v1/serversliefert pro Serverallow_writesmit. Klick auf eine Zone navigiert automatisch zu einem schreibbaren Server. - Synchronisierte Anzeige: Zonenliste, Suche und Dashboard fassen identische Zonen/Records über mehrere Server zu jeweils einer Zeile zusammen. Server, auf denen die Zone existiert, werden als Badges angezeigt.
- Zonen-Detail-Banner: Aktueller Server schreibgeschützt → rote Warnung + Wechsel-Button. Zusätzliche schreibbare Peers vorhanden → Info-Banner, dass jede Änderung auf allen entsprechenden Servern landet.
Zonenrechte (Lesen / Voll)
- In Benutzer → Zonen zuweisen pro Zone wählbar. „Nur lesen" blockiert API-seitig alle schreibenden Aktionen (Records, DNSSEC ein/aus, NOTIFY).
Sicherheit
- Login-Rate-Limit: IP-basierte Sperre nach mehreren fehlgeschlagenen Logins (HTTP 429, gleitendes Fenster).
- Webhook SSRF-Schutz: Webhook-URLs werden vor dem Speichern und vor jedem Versand geprüft. Localhost / private / link-local / multicast-Ziele sind standardmäßig blockiert. Wer das in einem internen Netz braucht, setzt
WEBHOOK_ALLOW_PRIVATE_URLS=truein der.env. - PowerDNS-Fehler: 5xx-Antworten landen mit vollständigem Detail im Backend-Log; nach außen geht eine kundenfreundliche Meldung ohne Stacktrace-Leck.
i18n
- Alle 6 Sprachen (en / de / sr / hr / bs / hu) sind jetzt vollständig synchronisiert auf identische Key-Liste (770 Keys). Vorher fehlten in bs/hr/hu/sr ca. 60 Keys.
- Pflege weiter via
node scripts/sync-locales.mjs.
Tests
- Pytest-Suite mit echten Modultests: DNSSEC-Parse, ACME-Helfer, Zonen-ACL, Login-Rate-Limit, Webhook-URL-Validierung, Health.
backend/pytest.inifür konsistente Test-Pfade.
Audit
- Admin kann das Log als CSV exportieren (
GET /api/v1/audit-log/export).
Health-Check
GET /healthprüft die Datenbank mitSELECT 1. Wenn die DB weg ist: HTTP 503 +status: unhealthy.compose.yamlhängt einen Healthcheck am Backend-Service –depends_on: condition: service_healthyzieht dadurch sauber.
UX & Stabilität
AppErrorBoundary: Statt weißer Seite bei einem Frontend-Runtime-Fehler ein verständlicher Hinweis mit „Neu laden"-Button.- Leere Record-Listen zeigen Hinweis + Add-Button statt einer leeren Tabelle.
- Settings → API & Sicherheit kapselt Tokens / TOTP / Webhooks in einem Panel; QR-Code für TOTP läuft über das
qrcode-Paket.
Build / Deployment
backend/Dockerfileprüft nach dem Frontend-Copy explizit, dassindex.html,assets/und mindestens ein gebautes JS-Bundle vorhanden sind.compose.yaml: Backend-Healthcheck via/health, neuer Env-EintragWEBHOOK_ALLOW_PRIVATE_URLS.
Docs
docs/PANEL-API.mdausgebaut: Authentifizierungswege, Endpoint-Beispiele für Zonen / Records / DNSSEC, Webhook-Signaturprüfung mit Code-Snippet.