Goooy Beheerdersgids
Alles wat een beheerder nodig heeft om Goooy te draaien, te beveiligen en te beheren: uw self-hosted alternatief voor Microsoft Exchange / Office 365.
Goooy is een complete groupware-suite die u zelf host: e-mail, agenda, contacten, taken, notities, chat, bestanden, videovergaderingen, gezamenlijke office en een adminconsole, allemaal vanuit één applicatie, één datamodel en één Helm-chart. U bent eigenaar van de servers, de data en de sleutels.
Deze gids is voor de mensen die Goooy draaien. Voor de technische fundamenten van
het platform (de architectuur, uitrollen met Helm of Docker Compose en de
essentiële configuratie), zie de Ontwikkelaarsgids.
Voor het gebruikersperspectief op de apps, zie de
Gebruikersgids. Voor diepgaande technische details heeft de
map docs/ aparte referenties (architectuur, beveiliging, mailserver, tenancy,
deployment, migratie en de native-clientprotocollen).
Inhoud
- De adminconsole
- Organisaties, domeinen & gebruikers
- Authenticatie & toegangsbeleid
- De mailserver
- Native clients & apparaatbeheer
- Migreren vanaf een ander systeem
- Multi-tenancy & isolatie
- Beveiliging & compliance
- Back-ups & beheer
- Self-service-aanmelding & uw marketingfront
De adminconsole
Meld u aan als beheerder en u krijgt een via RBAC afgeschermd Admin-gebied (de
REST-interface is /api/v1/admin, beperkt tot SYSADMIN / ORGADMIN en gescopet
per organisatie). Van daaruit kunt u:
- Organisaties, domeinen, gebruikers en groepen beheren (aanmaken, bewerken, verwijderen).
- Een statistiekendashboard van platform-/organisatiegebruik bekijken.
- Mobile Device Management uitvoeren: ingeschreven apparaten opsommen en remote wipes aanvragen.
- Een directory integreren: gebruikers bulk-importeren en synchroniseren vanuit LDAP.
- SSO per organisatie en beveiligingsbeleid configureren (2FA-verplichting, SSO-afdwinging).
- Domeineigendom verifiëren via DNS TXT-records.
- Migraties vanuit andere mailsystemen uitvoeren (Admin ▸ Migraties).
Organisaties, domeinen & gebruikers
De tenancy-ruggengraat van Goooy is Organization → Domain → User. Elke gebruiker bezit één mailbox met een getypeerde mappenboom (e-mail, agenda, contacten, taken, notities, bestanden), zodat één opslag-en-rechtenmodel elke app ondersteunt. Het verwijderen van een organisatie, gebruiker of mailbox cascadeert netjes naar alles eronder.
Rollen (RBAC)
| Rol | Bereik |
|---|---|
SYSADMIN | Het hele platform: alle organisaties |
ORGADMIN | Alleen hun eigen organisatie |
USER | Een gewone eindgebruiker |
ORGADMIN-acties worden automatisch gescopet op hun orgId; een ORGADMIN kan geen
organisaties aanmaken of SYSADMIN toekennen. Elke multi-tenant query filtert op de
organisatie van de aanroeper, zodat tenants nooit elkaars data zien.
Gebruikers toevoegen
Maak gebruikers afzonderlijk aan in de console, bulk-importeer ze, of
synchroniseer vanuit LDAP met ldapts. Elke nieuwe gebruiker wordt automatisch
voorzien van een mailbox en de standaardmappenboom. Wachtwoorden volgen uw beleid
(zie hieronder).
Verificatie van domeineigendom
Voordat een domein echte mail verwerkt, kan een beheerder aantonen dat hij het beheert, op dezelfde manier als Google Workspace en Microsoft 365 dat doen:
- De console toont een TXT-record om te publiceren (
_goooy-verify.<domain>met een stabiele tokenwaarde). - Publiceer het in uw DNS.
- Klik op Nu verifiëren. Goooy doet een live DNS-lookup en markeert het domein als geverifieerd.
Dit is org-gescopet en geaudit; een ORGADMIN kan alleen de domeinen van de eigen organisatie verifiëren.
Authenticatie & toegangsbeleid
Goooy ondersteunt het volledige spectrum aan moderne toegangscontroles. De standaardwaarden zijn veilig; scherp ze per organisatie aan waar nodig.
Wachtwoorden
- Gehasht met bcrypt (cost 12), dezelfde hashes die Dovecot verifieert, zodat er één credentialstore is voor webmail en native IMAP/POP3.
- Bij elke set/wijziging/reset/aanmelding wordt een wachtwoordbeleid afgedwongen:
een minimale lengte (
PASSWORD_MIN_LENGTH, standaard 10) en een optionele Have I Been Pwned-lekcontrole (k-anonimiteit: er verlaat nooit meer dan een SHA-1-prefix de server, en het faalt open zodat een HIBP-storing nooit een wachtwoordwijziging blokkeert). - Self-service wachtwoordherstel is enumeratieveilig en trekt bij gebruik alle andere sessies in.
Multifactorauthenticatie
- TOTP-authenticatorcodes met eenmalige herstelcodes, plus FIDO2/WebAuthn-passkeys (met clone-detectie).
- Stel
Organization.requireMfain om 2FA voor een organisatie te verplichten. Gebruikers worden door de inschrijving geleid en geblokkeerd uit de app totdat ze klaar zijn.
Verdediging tegen brute-force & account-overname
- Twee lagen throttling: een rate limit per IP op login-/MFA-endpoints, én een vergrendeling per account (na een drempel aan mislukte pogingen vergrendelt het account voor een exponentieel groeiend venster) die gedistribueerde credential-stuffing verslaat.
- Login-audit: elke poging wordt vastgelegd (IP, user-agent, resultaat) en gebruikers kunnen hun recente aanmeldingen zien in Instellingen → Beveiliging.
- Meldingen voor nieuwe apparaten: de eerste keer dat een apparaat zich
aanmeldt, krijgt het account een “nieuwe aanmelding”-e-mail; wijzigingen van
wachtwoord en MFA stellen de gebruiker eveneens op de hoogte (afhankelijk van
SECURITY_EMAILS_ENABLED).
Single sign-on (OIDC per organisatie)
Configureer een generieke OIDC-verbinding per organisatie (Authorization Code-flow). De organisatie wordt afgeleid uit het e-maildomein van de gebruiker (home-realm discovery), gebruikers worden just-in-time voorzien als hun domein wordt gehost, en het clientsecret is write-only (in rust verzegeld, nooit teruggegeven).
U kunt SSO afdwingen voor een organisatie (ssoEnforced) om wachtwoordlogin
volledig uit te schakelen, met twee vangrails zodat u zichzelf niet buitensluit: het
treedt alleen in werking zolang er een bruikbare SSO-verbinding bestaat, en
SYSADMIN-accounts behouden altijd wachtwoordlogin als break-glass.
Zie Self-service onboarding & externe authenticatie voor de volledige auth-API, en Beveiliging voor de diepgaande referentie.
De mailserver
Standaard is Goooy self-contained: het accepteert inkomende mail op zijn eigen
SMTP- (2525) en LMTP-luisteraars (2526), relayt uitgaande mail via nodemailer,
geeft spam een score met een ingebouwde regelgebaseerde heuristiek, en bezorgt
lokaal tussen gehoste gebruikers, zodat interne mail werkt met nul externe
infrastructuur.
Voor echte internetmail schakelt u de Postfix + Dovecot + Rspamd-stack in en wordt de API de delivery hub van een volwaardige mailserver:
helm upgrade goooy ./deploy/helm/goooy --set mail.enabled=true
Internet ─SMTP:25─▶ Postfix ──milter──▶ Rspamd ──LMTP──▶ api ─┬─▶ Postgres (web UI; spam→Junk)
clients ─587/465─▶ (MTA, SASL) (scan+DKIM) └─▶ Dovecot ─▶ Maildir (IMAP/POP3)
- Postfix accepteert mail voor uw gehoste domeinen (live opgezocht in Postgres), scant via de Rspamd-milter (SPF/DKIM/DMARC + spamscoring), en bezorgt aan de API via LMTP.
- De API schrijft het bericht naar Postgres (de webmailstore, waarbij door Rspamd gemarkeerde spam in Ongewenst wordt geplaatst) en spiegelt het naar Dovecot zodat native IMAP/POP3-clients het zien.
- Uitgaande mail wordt teruggerelayd via Postfix, DKIM-ondertekend door Rspamd.
Anti-phishing is ingebouwd: resultaten van afzenderauthenticatie voor inkomende mail worden per bericht opgeslagen; een banner voor externe afzenders markeert mail van buiten uw domeinen; spoofs van uw eigen domein die niet zijn geauthenticeerd, worden met een krachtige waarschuwing in Ongewenst geplaatst; de acties “Rapporteren” / “Geen spam” van gebruikers trainen het Bayes-filter van Rspamd; en de lezer waarschuwt voor misleidende links, homograaf-/punycode-hosts en imitatie van weergavenamen, waarbij externe inhoud standaard geblokkeerd en geproxyd is.
Veilige links & bijlage-sandboxing. Twee extra verdedigingen voor inkomende mail kunnen per organisatie worden ingeschakeld onder Admin ▸ Mailbeveiliging (beide standaard uit):
- Veilige links herschrijft elke link in inkomende externe mail en controleert de bestemming opnieuw op het moment van klikken: URL’s op de blokkeerlijst krijgen een blokkeerpagina, verdachte (IP-adressen als host, ingebedde inloggegevens, punycode-lookalikes) een waarschuwingspagina, en schone worden direct doorgestuurd: elke klik wordt geauditeerd. Verzonden kopieën, interne mail en ondertekende of versleutelde berichten blijven onaangeroerd.
- Bijlage-sandboxing detoneert inkomende bijlagen statisch, bovenop de altijd actieve virusscan: uitvoerbare bestanden herkend aan de inhoud, Office-macroprojecten, met wachtwoord beveiligde en geneste archieven, en HTML/SVG met scripts. Kwaadaardige mail wordt in Ongewenst geplaatst en elke gemarkeerde bijlage gaat in quarantaine (download geblokkeerd) totdat een organisatiebeheerder deze vrijgeeft.
Operationele waarschuwing: zet nooit
permit_mynetworksop een naar internet blootgestelde SMTP-luisteraar. Dat creëert een open relay. De meegeleverde configuraties scheiden de publieke :25-poort van een uitsluitend interne submission-poort, precies om deze reden. Volledige details en limieten staan in Mailserver endeploy/mail/README.md.
Native clients & apparaatbeheer
Goooy spreekt de standaardprotocollen, zodat uw gebruikers de apps behouden die ze al hebben. Alle zijn gemount op hun bekende roots en gebruiken HTTP Basic (e-mail + wachtwoord) waar het protocol dat verwacht:
| Protocol | Pad | Clients |
|---|---|---|
| Autodiscover / autoconfig | /autodiscover/*, /.well-known/autoconfig | Outlook, Thunderbird, mobiele mail (zelfconfiguratie met e-mail + wachtwoord) |
| CalDAV | /dav/cal | Apple Calendar, Thunderbird, telefoons |
| CardDAV | /dav/card | Apple Contacts, Thunderbird, telefoons |
| Exchange ActiveSync (EAS) | /Microsoft-Server-ActiveSync | iOS Mail/Calendar/Contacts (een functionele subset) |
| MAPI/HTTP | /mapi/emsmdb, /mapi/nspi | native Outlook voor Windows |
| IMAP / POP3 / SMTP | (mailstack) | elke mailapp, wanneer de mailserver is ingeschakeld |
| MS-FSSHTTP / WebDAV (Office) | /_vti_bin/cellstorage.svc, /dav/office/<id> | desktop-Word / -Excel die Office-documenten openen |
Mobiele Outlook-app: de iOS/Android-Outlook-app heeft EAS in OAuth-stijl nodig die Goooy niet aanbiedt; adviseer iPhone/iPad-gebruikers om in plaats daarvan de ingebouwde Apple Mail-app te gebruiken.
Mobile Device Management. Apparaten die zich via ActiveSync inschrijven, worden bijgehouden. Vanuit de MDM-console kunt u ingeschreven apparaten opsommen en een remote wipe aanvragen. Het apparaat wordt gemarkeerd en gewist bij zijn volgende synchronisatie.
De helpdesk
Een helpdesk is een werkstroomlaag over een gedeelde mailbox, geen apart systeem. Maak eerst de gedeelde mailbox, deel die met de medewerkers en zet er daarna de helpdesk op aan via Beheer ▸ Helpdesk.
- Medewerkers zijn precies de mensen met wie de mailbox is gedeeld. Wie alleen leesrechten heeft kan tickets openen, maar niet toewijzen, antwoorden of de status wijzigen.
- Wachtrij-instellingen bevatten het prefix van de ticketsleutel (
TCK), de kantooruren, de reactie- en oplosnormen in kantoorminuten, de automatische-sluitperiode en de ontvangstbevestiging aan een nieuwe afzender. - Standaardantwoorden gelden voor één wachtrij of voor de hele organisatie.
- AI-triage is per wachtrij optioneel. Het stelt een prioriteit en labels voor en verstuurt nooit zelf iets.
De mailaflevering blijft ongemoeid: elk bericht landt gewoon in het Postvak IN van de mailbox en blijft zichtbaar via IMAP, ActiveSync, MAPI en JMAP. Zet je de helpdesk uit, dan blijven de mailbox en alle mail precies zoals ze waren.
Mailauthenticatie & rapportage
SPF, DKIM en DMARC publiceren is stap één; weten of ze ook echt werken is stap
twee. Laat het rua=-adres in je DMARC-record naar een mailbox op het domein
wijzen, dan ontleedt Goooy elk aggregaatrapport bij aflevering.
Beheer ▸ Mailauthenticatie toont vervolgens per domein: het slagingspercentage, de SPF- en DKIM-uitlijning en de verzendbronnen die falen. Zo onderscheid je een vergeten legitieme verzender van iemand die je nabootst. SMTP TLS-rapporten (TLS-RPT) komen langs dezelfde weg binnen en laten mislukte of afgezwakte verbindingen zien.
Goooy kan ook per domein een MTA-STS-beleid hosten op
/.well-known/mta-sts.txt, zodat andere providers weigeren je mail over een
onversleutelde verbinding af te leveren.
Provisioning met SCIM en LDAP
Drie manieren om accounts gelijk te houden met je directory:
- SCIM 2.0 op
/scim/v2, geauthenticeerd met een bearer-token per organisatie. Je identityprovider maakt, wijzigt en deactiveert gebruikers en groepen wanneer mensen komen, wisselen en vertrekken. - LDAP-/Active Directory-synchronisatie haalt gebruikers en groepen periodiek op.
- Bulkimport via CSV voor een eenmalige lading.
Combineer ze met SSO per organisatie, zodat iemand centraal blokkeren overal de toegang wegneemt, ook in native clients.
Migreren vanaf een ander systeem
De Goooy Mover verplaatst de gegevens van een bestaand bedrijf naar Goooy vanaf een live IMAP-server of vanuit geüploade exportbestanden: een beheerder koppelt elke bronmailbox aan een Goooy-gebruiker (ontbrekende gebruikers worden automatisch aangemaakt), klikt op start, en het wordt op de achtergrond overgezet met een live statustracker per gebruiker. De admin-UI is Admin ▸ Migraties.
Wat het behoudt en garandeert:
- Mappenhiërarchie: bekende mappen (Postvak IN, Verzonden, Prullenbak, Ongewenst, Archief) worden aan hun Goooy-rollen gekoppeld; diepere mappen worden opnieuw aangemaakt als onderliggende mappen.
- Datums en status: oorspronkelijke ontvangstdatums en lees-/vlagstatus, zodat een gemigreerde mailbox eruitziet als het origineel.
- Hervatbaar & idempotent: het legt de voortgang vast in checkpoints, zodat het
stoppen van de API midden in een batch verdergaat waar het gebleven was, en
opnieuw uitvoeren nooit duplicaten aanmaakt (ontdubbeld op
Message-ID, of een UID voor agenda/contacten).
Het live-serverpad werkt met Gmail, Microsoft 365, Dovecot, Zimbra en de meeste IMAP-servers (gebruik een app-wachtwoord waar de provider er een vereist, de wizard heeft kant-en-klare verbindingsprofielen voor de bekende providers). Het uploadpad accepteert Outlook .pst (mail + agenda + contacten), .mbox (mail, inclusief een Google Takeout-export, de eenvoudigste manier om van een persoonlijk Gmail-account af te komen), .ics (agenda) en .vcf (contacten), waarbij het formaat automatisch wordt herkend aan de inhoud van het bestand. De flow is Bron → Accounts → gebruikers (met een credential-test per regel, of een upload per bestand) → Uitvoeren → live Dashboard met opnieuw proberen per regel en batch pauzeren/annuleren. Alle mutaties worden geaudit. Volledige details en de roadmap (CalDAV/CardDAV, Microsoft 365 Graph, Gmail API, tenant-naar-tenant) staan in Migratie.
Multi-tenancy & isolatie
Standaard is Goooy logisch multi-tenant: elke query is gescopet op orgId en
beschermd door RBAC, waarbij alle tenants één database delen. Voor striktere eisen
geeft een opt-in hard-isolatiemodus elke tenant zijn eigen PostgreSQL-schema
of zijn eigen database:
TENANT_ISOLATION = shared (default) | schema | database
Een control-plane-catalogus lost de juiste verbinding per verzoek op (req.db),
zodat de standaard met gedeelde database volledig ongewijzigd blijft wanneer u er
niet voor kiest. Zo kunt u dataresidentie per tenant of contractuele isolatie bieden
zonder aparte deployments te draaien. Zie Tenancy.
Beveiliging & compliance
Een beknopte checklist. De gezaghebbende referentie is Beveiliging.
-
Transport. TLS termineert bij de Ingress (optioneel geautomatiseerd met cert-manager). TLS naar de ondersteunende stores is URL-gestuurd en vereist geen codewijziging:
?sslmode=requireopDATABASE_URL,rediss://voor Redis,https://S3-endpoint. -
Headers. Helmet op de API; nginx stelt een strikte CSP in,
X-Frame-Options: SAMEORIGIN,Referrer-Policyen eenPermissions-Policydie camera/microfoon/display-capture tot self beperkt. CORS is gescopet opPUBLIC_WEB_URL(native protocolpaden zijn opzettelijk uitgezonderd, “repareer” dat niet). -
End-to-end mailbeveiliging (S/MIME). Elke gebruiker kan een zelfondertekende X.509-identiteit hebben om te ondertekenen/verifiëren (RSA-SHA256) en te versleutelen/ontsleutelen (hybride RSA-OAEP + AES-256-GCM, meerdere ontvangers); de privésleutel is in rust verzegeld en wordt nooit in leesbare vorm teruggegeven.
-
E-mailweergave. HTML-mail wordt door DOMPurify opgeschoond én beperkt door de nginx-CSP. Behoud beide.
-
Secrets in rust. S/MIME-sleutels, SSO-clientsecrets en migratiecredentials worden met AES-256-GCM verzegeld met
JWT_SECRET. Lever uw eigen Secret aan; roteerJWT_SECRETweloverwogen (het maakt verzegelde waarden ongeldig). -
Containers draaien als non-root onder een restrictieve security context.
-
Datasoevereiniteit. Goooy is end-to-end self-hosted. U kiest de regio en de provider voor elke store. Zie Datasoevereiniteit.
-
Bewaartermijnen. Beleid per organisatie laat mail, bestanden en berichten verlopen volgens een schema dat jij bepaalt. De opruiming draait op de achtergrond en wordt gelogd.
-
Legal hold. Een hold op een custodian bewaart diens gegevens, overrulet de bewaartermijn tot hij wordt opgeheven, en exporteert alles als JSON voor onderzoek.
-
Data-loss prevention. Scanning voor de hele organisatie over mail, chat en bestanden op de patronen die je instelt.
Licentie: AGPL-3.0-or-later.
Back-ups & beheer
- Wat te back-uppen: PostgreSQL (de bron van waarheid) en uw S3-bucket (bestands-
en bijlage-blobs). Redis is vluchtig en heeft geen back-up nodig. De chart kan een
nachtelijke
pg_dump-CronJob draaien (backup.enabled=true). - Health-probes: de API stelt
/healthz(liveness) en/readyz(DB-ondersteunde readiness) beschikbaar voor Kubernetes. - Schalen: de API is stateless (JWT-auth) en verspreidt realtime via Redis
pub/sub, dus schaalt horizontaal. Schakel de HPA in (
autoscaling.enabled=true, vereist metrics-server) en een PodDisruptionBudget voor veilige rollouts. - Observability: gestructureerde JSON-logs (pino).
- Schemawijzigingen: de API-container draait
prisma migrate deploybij het opstarten, zodat gecommitte migraties automatisch worden toegepast bij een rollout. - Kill de ingestpoorten niet (2525/2526) om ze in een draaiende omgeving “vrij te maken”. Zo komt inkomende mail binnen.
Self-service-aanmelding & uw marketingfront
Goooy kan een openbare self-service-aanmeldflow draaien zodat klanten hun eigen
organisatie aanmaken. Deze staat standaard uit. Zet SELF_SIGNUP_ENABLED=true
om het aan te zetten. Het endpoint maakt atomair een Organization, zijn eerste Domain
en een ORGADMIN-gebruiker aan (nooit SYSADMIN), en geeft een live sessie terug.
Het is per IP rate-limited als misbruikbarrière.
De meegeleverde webapp bevat al een openbare /signup-pagina die deze flow
same-origin aanstuurt, zodat u die niet hoeft te bouwen. En een statische
Astro-marketingsite (apps/marketing) is inbegrepen voor de publieke voordeur.
Schakel die in op een eigen host:
helm upgrade goooy ./deploy/helm/goooy \
--set marketing.enabled=true \
--set marketing.host=www.example.com
De “Get started”-CTA linkt naar de /signup-pagina van de app. De volledige
externe-authenticatie-API (login, MFA, SSO, sessies, domeinverificatie), alles wat u
nodig hebt om in plaats daarvan uw eigen aanmeldfront te bouwen, is gedocumenteerd
in Self-service onboarding & externe authenticatie.
Aan de slag
- Nieuw hier? Lees de Gebruikersgids voor het gebruikersperspectief op elke app.
- Rolt u het platform uit of integreert u het? De Ontwikkelaarsgids behandelt de architectuur, uitrollen met Helm/Docker Compose en de configuratie.
- Blader door de pagina’s functieoverzicht, beveiliging & compliance en self-hosting.
- De volledige technische referentie (architectuur, datamodel, mailserver, tenancy, deployment, migratie en de native-clientprotocollen) wordt geleverd met de productbroncode.