← Alle documentatie

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

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).
Alle accounts in de organisatie, met hun rol en hun type postbus.
Alle accounts in de organisatie, met hun rol en hun type postbus.

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)

RolBereik
SYSADMINHet hele platform: alle organisaties
ORGADMINAlleen hun eigen organisatie
USEREen 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:

  1. De console toont een TXT-record om te publiceren (_goooy-verify.<domain> met een stabiele tokenwaarde).
  2. Publiceer het in uw DNS.
  3. 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.requireMfa in 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_mynetworks op 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 en deploy/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:

ProtocolPadClients
Autodiscover / autoconfig/autodiscover/*, /.well-known/autoconfigOutlook, Thunderbird, mobiele mail (zelfconfiguratie met e-mail + wachtwoord)
CalDAV/dav/calApple Calendar, Thunderbird, telefoons
CardDAV/dav/cardApple Contacts, Thunderbird, telefoons
Exchange ActiveSync (EAS)/Microsoft-Server-ActiveSynciOS Mail/Calendar/Contacts (een functionele subset)
MAPI/HTTP/mapi/emsmdb, /mapi/nspinative 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.

Elk apparaat dat via Exchange ActiveSync is aangemeld, plus de regels over welke soorten mogen aanmelden.
Elk apparaat dat via Exchange ActiveSync is aangemeld, plus de regels over welke soorten mogen aanmelden.

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.

Wat ontvangers terugrapporteren over e-mail die van jouw domeinen zegt te komen.
Wat ontvangers terugrapporteren over e-mail die van jouw domeinen zegt te komen.

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=require op DATABASE_URL, rediss:// voor Redis, https:// S3-endpoint.

  • Headers. Helmet op de API; nginx stelt een strikte CSP in, X-Frame-Options: SAMEORIGIN, Referrer-Policy en een Permissions-Policy die camera/microfoon/display-capture tot self beperkt. CORS is gescopet op PUBLIC_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; roteer JWT_SECRET weloverwogen (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.

Bewaartermijnen, juridische bewaarplicht en preventie van datalekken op één pagina.
Bewaartermijnen, juridische bewaarplicht en preventie van datalekken op één pagina.

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 deploy bij 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.