Save products you love by clicking the heart icon.
Download the free DevOps Certification Study Plan PDF - 12-week study calendar for LPI DevOps Tools Engineer, CKAD, CKA, and Terraform Associate.
How three independent bugs — a missing LDAP EQUALITY rule, an invisible disabled filter, and a misconfigured OIDC role driver — stacked to block every OpenCloud login, and what it took to find them.
Zusammenfassung: SOGo 6 ist ein kompletter Neubau der klassischen SOGo-Groupware-Suite und ersetzt den GNUstep/Objective-C-Stack durch eine moderne Next.js 16 + Flask/Python 3.14-Architektur. Dieser Fork package die Suite mit Stalwart Mailserver und OpenLDAP, implementiert sämtliche Roadmap-Features und erweitert sie um SSO, MFA, App-Passwörter, Kalender-/Kontakt-Sharing und eine CardDAV-Sync-Engine — untermauert von >1.800 bestandenen Tests.
SOGo war über Jahre ein fester Bestandteil der Self-Hosted-Groupware-Landschaft, doch das GNUstep/Objective-C-Fundament von SOGo 5 erschwerte Erweiterungen, Containerisierung und Wartung. SOGo 6 ist ein grundlegender Neubau, der diese Probleme direkt adressiert:
Das Ergebnis ist ein moderner, sauber containerisierbarer Stack, der sich unkompliziert erweitern lässt.
Der Stack besteht aus sieben Docker-Services, orchestriert via Docker Compose:
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ SOGo6 UI │────▶│SOGo6 Server │────▶│ PostgreSQL │
│ Next.js 16 │ │ Flask/Python │ │ │
│ :3000 │ │ :5000 │ │ │
├─────────────┤ ├──────────────┤ ├─────────────┤
│ NGINX │ │ │ │ Redis │
│ :443 │ │ │ │ │
├─────────────┤ ├──────────────┤ ├─────────────┤
│ Stalwart │◀────│ │ │ OpenLDAP │
│ IMAP/SMTP │ │ │ │ │
└─────────────┘ └──────────────┘ └─────────────┘
| Service | Rolle |
|---|---|
| SOGo6 UI | Next.js 16 Frontend |
| SOGo6 Server | Flask/Python 3.14 REST-API |
| PostgreSQL | Primäre Datenbank |
| Redis | Session-Cache, Rate Limiting, Sync-Locks |
| OpenLDAP | Benutzerverzeichnis mit Seed-Daten |
| Stalwart | IMAP/SMTP/Sieve-Mailserver |
| NGINX | Reverse Proxy mit TLS-Terminierung |
Alle originalen SOGo-6-Roadmap-Features sind vollständig implementiert:
Über die ursprüngliche Roadmap hinaus wurden folgende Enterprise-Features hinzugefügt:
SSO (OIDC + SAML2) — Vollständige OpenID-Connect-Relying-Party- und SAML2-Service-Provider-Implementierung. OIDC unterstützt Discovery, Token-Austausch, RS256/384/512- und ES256/384/512-Signaturvalidierung sowie RP-initiiertes Logout. SAML2 unterstützt AuthnRequest-XML-Generierung, HTTP-Redirect- und HTTP-POST-Bindings, SP-Metadaten und Auto-Provisioning beim ersten Login.
MFA/TOTP — Zeitbasierte Einmalpasswörter generiert via pyotp, mit QR-Code-Provisioning-URIs, direkt in den Login-Fluss integriert. Die Code-Prüfung erfolgt im bestehenden POST /login-Endpoint ohne separaten Challenge-Flow.
App-Passwörter — sogo-ap-<64-hex>-Tokens mit bcrypt-Hashing, vollständige CRUD- und Verify-API. Konzipiert für Thunderbird, Outlook und andere Clients, die kein interaktives MFA unterstützen.
Passwort-Wiederherstellung — Vollständiger Lifecycle mit SHA-256-gehashten Tokens, ratenbegrenzten Endpoints und SMTP-Relay via Stalwart. Dreistufiger Ablauf: Prüfen → Neuauthentifizieren → LDAP-Update.
Auth-Härtung — Redis-basierter Brute-Force-Schutz (pro Benutzerkonto), IP-basiertes Rate Limiting (20 Anfragen/Minute), Security Headers (CSP, HSTS, X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policy) und CORS-Härtung.
Kalender-Sharing — Datenbankgestützte Share-Tabellen mit ACL-Engine (VIEW, MODIFY, DELETE). Ein Frontend-Share-Dialog erlaubt die Zugriffsverwaltung ohne Admin-Eingriff.
Kontakt-Sharing — Ähnliche datenbankgestützte Shares mit VIEW- und MODIFY-ACLs. Die Berechtigungen werden auf API- und UI-Ebene durchgesetzt.
CardDAV-Sync-Engine — Ein SSRF-geschützter HTTPS-Fetcher, der Verbindungen zu externen CardDAV-Servern herstellt, vCard-Diffs-per-UID durchführt und Insert/Update/Delete-Pipelines ausführt. Redis-Locking verhindert Sync-Konflikte.
Theme-Einstellungen — HSL-Farbschema, Logo-URL und benutzerdefiniertes CSS werden in PostgreSQL gespeichert und über einen live aktualisierten CSS-Endpoint ausgeliefert. Kein Redeployment für visuelle Änderungen nötig.
Rules CRUD — Sieve-Mailfilter-Regeln werden in PostgreSQL mit einer vollständigen Admin-CRUD-API gespeichert.
Observability — Prometheus /metrics-Endpoint (Request-Zahlen, -Dauer, -Fehler), strukturiertes JSON-Logging und ein erweiterter Health-Endpoint, der PostgreSQL, LDAP, Redis und Stalwart prüft.
CI/CD — GitHub-Actions-Pipeline mit Build, Backend-Testsuite, Playwright-E2E-Tests (23 Szenarien), k6-Lasttests (3 Suiten) und CardDAV-Sync-Benchmark.
| Suite | Anzahl | Details |
|---|---|---|
| Backend Python | 1.723 | Module, Interface, API, E2E, SMTP-Protokoll |
| Frontend Jest | 69 | Admin-Seiten, Benutzereinstellungen, a11y |
| Admin API (bash) | 29 | Alle Admin-CRUD-Endpoints |
| Playwright E2E | 23 | Auth-Flows, Admin, Navigation, Einstellungen |
| k6-Lasttests | 100% | 3 Suiten, 0% Fehler, ~25ms p95 |
| Shell-Tests | 129+ | SMTP/IMAP, LDAP, Postgres, Redis, Nginx, Security |
| Gesamt | >1.800 |
Der Stack ist vollständig Docker-Compose-basiert. Ein einzelner Setup-Befehl genügt:
git clone https://github.com/tobias-weiss-ai-xr/sogo6-stalwart-openldap-dockerized
cd sogo6-stalwart-openldap-dockerized
bash sogo6/scripts/setup.sh
docker compose up -d
bash sogo6/scripts/init-sogo6.sh
Zwei Umgebungen werden unterstützt:
docker compose up -d) — Multi-Stage-Builds, gehärtete Container, TLS-Terminierungdocker compose -f docker-compose.dev.yaml up -d) — Hot Reloading, MailHog für E-Mail-Tests, pgAdmin, Redis Insight, Prometheus/GrafanaDas Repository ist verfügbar unter github.com/tobias-weiss-ai-xr/sogo6-stalwart-openldap-dockerized. Die SOGo-Mailingliste (users@sogo.nu) ist der beste Ort für Community-Diskussionen.
Bereiche, in denen Feedback besonders wertvoll wäre:
Diese Evaluierung und der begleitende Fork wurden mit Unterstützung von Mistral AI (Modell Mistral Medium 3.5 128B, bereitgestellt über hessian.ai und gehostet an der TU Darmstadt) für Code-Generierung, Debugging und Architekturberatung entwickelt. Vielen Dank an Mistral AI und hessian.ai für ihre hervorragenden Werkzeuge.