Vier moderne mailsystemen voor self-hosting
Beveiligingsstandaarden voor mail universeel ondersteund
Beveiligingsstandaarden voor mail universeel ondersteund
De ondersteuning van de moderne beveiligingsstandaarden is cruciaal voor een goed werkende mailinfrastructuur. Voldoet je mailsysteem niet aan de normen, dan is de kans groot dat je uitgaande berichten door de grote mailproviders als spam worden gemarkeerd of helemaal geweigerd. Tegelijkertijd is de implementatie van deze standaarden op de veelgebruikte mailpakketten Postfix en Exim een flinke klus en vraagt de configuratie ook voldoende kennis van de betreffende standaarden. Omdat dit met name voor hobbyisten en mkb-bedrijven een grote opgave is, brengen zij hun maildomeinen min of meer noodgedwongen onder bij een van de grote (Amerikaanse) mailproviders.
Inmiddels zijn er echter meerdere softwarepakketten beschikbaar die én alle beveiligingsstandaarden out-of-the-box ondersteunen én makkelijk op te zetten zijn. In dit artikel bespreken we 4 moderne open-sourcemailpakketten voor self-hosting: Mox, Chasquid, Stalwart en Maddy. Daarbij gaat het vooral om het gemak van installatie en configuratie, en de ondersteuning van de moderne beveiligingsstandaarden. En we kunnen niet anders zeggen dan dat we blij verrast zijn met onze bevindingen.
De toepassing van moderne beveiligingsstandaarden is cruciaal bij het opzetten van een mailserver. Dat niet alleen omwille van een veilige en afgeschermde berichtenuitwisseling, maar ook om berichten überhaupt nog afgeleverd te krijgen: de zogenaamde deliverability. Is de reputatie van je maildomein niet goed of gebruikt je mailserver niet alle moderne beveiligingsstandaarden, dan is de kans groot dat de grote mailproviders je bericht als spam kwalificeren of helemaal blokkeren. Vanwege de enorme hoeveelheden spam, phishingberichten en andere malware kunnen deze aanbieders ook niet anders dan streng zijn. Niet voor niets zijn bedrijven als Facebook, Google en Microsoft de belangrijkste aanjagers in de ontwikkeling en toepassing van de moderne beveiligingsstandaarden voor mail [DANE, MTA-STS, SPF/DKIM/DMARC].
Belangrijk nadeel van deze ontwikkeling is dat het voor hobbyisten en kleine dienstverleners heel lastig is geworden om een mailsysteem in eigen beheer op te zetten. Ondersteunt deze niet alle beveiligingsstandaarden, dan heb je gegarandeerd problemen met de deliverability van je berichten.
We hebben de configuratie van de moderne mailbeveiligingsstandaarden eerder uitgebreid beschreven voor Postfix [DANE, SPF/DKIM/DMARC] en Exim [DANE, SPF/DKIM/DMARC]. Uit feedback van lezers weten we dat deze hands-on-artikelen vaak als recept worden gebruikt voor de stapsgewijze opbouw van een volwaardig, veilig en schaalbaar mailsysteem. Tegelijkertijd laten deze artikelen duidelijk zien dat het opzetten van alle beveiligingsmechanismen een flinke klus is en ook voldoende kennis van de betreffende standaarden vereist.
Hoewel menigeen kiest voor de makkelijkste weg en zijn mail onderbrengt bij een van de grote (Amerikaanse) aanbieders, botst dat met de beweging naar meer controle over de eigen data en het belang van meer autonomie of soevereiniteit.
In dit artikel bespreken we 4 mailsystemen voor de SOHO/mkb-markt. Daarbij ligt de aandacht specifiek op de (ingebakken) ondersteuning van moderne internetstandaarden. Zonder die standaarden is de kans immers aanzienlijk dat je mailberichten nooit op de plaats van bestemming arriveren. Uitgangspunt is een maildomein ('example.nl') en een Linux-systeem gebaseerd op Ubuntu versie 24.10.
Mox is wat de beveiligingsstandaarden betreft de meest complete mailserver van het viertal dat we in dit artikel bespreken. Bovendien is de software heel makkelijk te installeren en configureren. Heb je een maildomein en een serversysteem voorzien van een validerende DNS-resolver, dan is de eerste setup van een draaiende mailserver binnen een half uurtje gepiept.
De installatie en eerste configuratie van Mox bestaat uit maar 3 stappen. Om te beginnen maken we een nieuwe Unix-gebruiker 'mox' aan:
useradd -m -d /home/mox mox cd /home/mox/
De Mox-software bestaat in zijn gecompileerde vorm uit een enkele all-in-one binary, die na installatie als de centrale ingang via de command line fungeert. We downloaden de kant-en-klare Mox binary van hier en installeren die als executable in de nieuwe home directory '/home/mox/':
cd /home/mox/ chmod 744 mox-v0.0.14-go1.24.2 ln -s mox-v0.0.14-go1.24.2 mox
De symlink maakt dat we deze binary ook onder de naam './mox' kunnen aanroepen en dat latere upgrades van de software makkelijk te doen zijn.
De eerste configuratie maken we aan middels het 'mox quickstart'-commando:
./mox quickstart gebruiker@example.nl
Mox creëert hierbij onder andere de 2 configuratiebestanden './config/mox.conf
' en './config/domains.conf
'. Indien nodig kun je de inhoud daarvan later nog met de hand finetunen. Tegelijkertijd wordt ook het eerste maildomein ('example.nl') en de eerste gebruiker op dat domein ('gebruiker@example.nl') aangemaakt.
Erg handig is de uitgebreide hulp die de quickstart biedt. Heb je nog geen DNSSEC-validerende DNS-resolver geïnstalleerd, dan krijg je uitgebreide aanwijzingen voor de configuratie van Unbound.
DNSSEC-validatie is essentieel voor de veilige werking van alle DNS-gebaseerde beveiligingsprotocollen voor mail: SPF, DKIM, DMARC, DANE, CAA (RFC 8659), MTA-STS en TLSRPT-rapportages. Mox quickstart genereert op basis van het opgegeven maildomein alle DNS-record voor deze standaarden voor je:
; CAA example.nl. CAA 0 issue "letsencrypt.org" ; DANE _25._tcp.server.example.nl. TLSA 3 1 1 b777694f0c80f91435370cc80a1402c4dd80ba669fbc92139f7615d6068c2c76 _25._tcp.server.example.nl. TLSA 3 1 1 9c4ad6560fb5f8a64acc5aa8d22a139f9efce84549ac938de94dc71c05a5332f ; MTA-STS mta-sts.example.nl. CNAME server.example.nl. _mta-sts.example.nl. TXT "v=STSv1; id=20250414T101928" ; TLSRPT reports for MTA-STS & DANE _smtp._tls.server.example.nl. TXT "v=TLSRPTv1; rua=mailto:tls-reports@example.nl" ; was: tls-reports@server.example.nl _smtp._tls.example.nl. TXT "v=TLSRPTv1; rua=mailto:tls-reports@example.nl" ; SPF server.example.nl. TXT "v=spf1 a -all" example.nl. TXT "v=spf1 ip4:192.0.2.109 ip6:2001:db8:1192::/64 mx ~all" ; DKIM 2025a._domainkey.example.nl. TXT "v=DKIM1;h=sha256;k=ed25519;p=9fohEgAGYtFVOlJhrxU5WJmJI4UBQYxf3IfWfFWbTKA=" 2025b._domainkey.example.nl. TXT ( "v=DKIM1;h=sha256;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyuJJw9uT4+ebIqo38b1KEz7ogAPQWCg1VuQx+" "tjlAFE2hDUyVdxmuUO+nK535QYxAKyNSLz5N6CIVjuf7ZHOZBtcfo7eQAC65QZF09UsfIynS1q9gCZsPa1v7vWv/z+ybUH4dZDq8" "hNTs3LAGdv58nCkMGe628b+1Iq0o02P2IGdP8ziu4l8I0bR8McTYmzyNvhBGy5tnoSzenr3ClsKUvU5Uhbg2P9fOIMyhkH++wcLc" "yGWbqfMaPKEae/8H4XhDs4X8s0KB4QrjzDATpoK1rZXAn/Gs/T/I+E8CxDt0wNy8RXoXFxIG18jWjqietnlsiWdLTNuPC7yULeAt" "beE+QIDAQAB" ) 2025c._domainkey.example.nl. TXT "v=DKIM1;h=sha256;k=ed25519;p=TXo4YzsH1pCUe7ZwJ8Q/aZSPrVCzAnE/CA6GaR1HI9A=" 2025d._domainkey.example.nl. TXT ( "v=DKIM1;h=sha256;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1I9ZhaWSzSMQj83kVifH24Ea2QrFFN+h/X692" "KD4kR6i/wV2ZqFI+prVm5RS4QcY6EKvbldQEqCHjj7DOqnV5RnX+P8QLGsGw3H/nIuPhgH2s/czIQ8zf4sthve5+cirIMajkWZ+J" "xKoCkJbvV3s0VVwuzT3ODvzLadJhVTmiWqI/ARfCy4I9mV+zbK+4+QxmzdtB8W+BuuDw346aFXApk5JGimKw10t6sDzZD+rt7vWY" "g/hiNLPkRx4rOyjln0CMA1jFt+SOwIV1Z4uEJSfDW55iErfjiATAjMvBo18lnSi9wDXKqTw3WN2jbB7Xw36lMr2+6DdKCOLYH4g8" "E1hsQIDAQAB" ) ; DMARC _dmarc.example.nl. TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.nl!10m"
De sleutels voor TLS (aangemaakt via Let's Encrypt) vind je in de directory './config/hostkeys/'. Die voor de DKIM-ondertekening in de directory './config/dkim/'.
Naast het MX-record (dat de buitenwereld laat weten waar mailberichten voor het domein 'example.nl' afgeleverd moeten worden) geeft Mox ook alle SRV-records voor de mailserver. Deze records worden gebruikt voor de zogenaamde 'discovery' van internetdiensten. Voor mail zijn ze gedefinieerd in RFC 6186.
example.nl. MX 10 server.example.nl. mail.example.nl. CNAME server.example.nl. _imaps._tcp.example.nl. SRV 0 1 993 server.example.nl. _submissions._tcp.example.nl. SRV 0 1 465 server.example.nl. _imap._tcp.example.nl. SRV 0 0 0 . _submission._tcp.example.nl. SRV 0 0 0 . _pop3._tcp.example.nl. SRV 0 0 0 . _pop3s._tcp.example.nl. SRV 0 0 0 . ; Thunderbird Autoconfiguration autoconfig.example.nl. CNAME server.example.nl. _autodiscover._tcp.example.nl. SRV 0 1 443 server.example.nl.
Het Autoconfiguration/Autodiscovery-protocol is door Mozilla bedacht voor zijn Thunderbird mailclient. Uitgangspunt is dat nieuwe gebruikers alleen hun naam, mailadres en password hoeven in te vullen om hun client te configureren. De technische instellingen voor die specifieke gebruiker worden dan via een DNS-verwijzing van een webserver gehaald in de vorm van een XML-bestand.
Je kunt alle gegenereerde output en hulp nog nalezen in het bestand 'quickstart.log'. Daar vind je ook het password van de eerste gebruiker en dat van het adminaccount terug.
Heb je alle nieuwe DNS-records in je zone geplaatst, dan is het tijd om de Mox-server op te starten (als root):
./mox serve
Maar er is ook een 'mox.service
' file meegeleverd, zodat je de mailserver ook kunt beheren middels Systemd (e.g. het 'systemctl
'-commando).
Na het verstrijken van de TTL voor de propagatie van de nieuwe DNS-records, kunnen gewone gebruikers hun mail benaderen via de webmailinterface ('https://mail.example.nl/webmail') en IMAPS (op poort 993), en mail versturen via Secure Submission (op poort 465). Gaat een gebruiker naar de centrale webpagina ('https://mail.example.nl/'), dan kan hij daar zijn account verder configureren.
De beheerder heeft zijn eigen webingang: https://localhost/admin.
Belangrijkste onderdelen voor hem zijn het beheer van accounts en domeinen, en de logs. Bovendien kan Mox ook binnenkomende DMARC- en TLSRPT-rapportages verwerken. Naast deze webgebaseerde administratieve ingang is een enorme hoeveelheid commando's en opties beschikbaar via de './mox
' executable.
Waar Mox een complete mailoplossing voor de mkb-markt wil zijn, biedt Chasquid alleen een lichtgewicht Message Transfer Agent (MTA) als alternatief voor Postfix en Exim. Chasquid is (net als Mox) geschreven in de programmeertaal Go en wordt verspreid als broncode tarball (chasquid-1.15.1.tar.gz) en Docker image. Maar als je op een Debian of Ubuntu systeem zit, dan is de software ook direct beschikbaar als deb package:
apt install chasquid setfacl -R -m u:chasquid:rX /etc/chasquid/
De configuratiebestanden vind je nu in de directory '/etc/chasquid/
'. Daar beginnen we met de instellingen in de file 'chasquid.conf':
cp chasquid.conf chasquid.conf.org vim chasquid.conf hostname: "server.example.nl" monitoring_address: "127.0.0.1:1099"
Dit configuratiebestand is maar kort, dus daar loop je verder snel doorheen.
Voor het aanmaken van de eerste gebruiker (en het eerste maildomein, indien dit nog niet bestaat) gebruik je het volgende commando (dat vraagt vanzelf om het password voor deze gebruiker):
chasquid-util user-add gebruiker@example.nl
Hiermee wordt een hiërarchie van domeinen en gebruikers opgezet onder de './domains/
' directory.
Maar het is handiger om (daarnaast) mee te liften op het gebruikersbeheer en de authenticatie van Dovecot. Daarvoor gebruik je deze instelling in het '/etc/chasquid/chasquid.conf
' configuratiebestand:
dovecot_auth: true
Chasquid is gemaakt om makkelijk te integreren met afzonderlijk beheerde installaties van Let's Encrypt (voor de TLS-certificaten) en Dovecot (een veelgebruikte IMAP/POP-server gericht op veiligheid). Voor die integratie is echter wel een klein beetje handwerk nodig.
We beginnen met Let's Encrypt en volgen daarvoor de handleiding van Chasquid:
apt install certbot acl certbot certonly --standalone -d mail.example.nl
Is dit certificaat eenmaal binnen (geïnstalleerd in de '/etc/letsencrypt/
' directory), dan moeten we dat beschikbaar maken voor Chasquid:
setfacl -R -m u:chasquid:rX /etc/letsencrypt/{live,archive} mv /etc/chasquid/certs/ /etc/chasquid/certs-orig ln -s /etc/letsencrypt/live/ /etc/chasquid/certs
De certificaten van Let's Encrypt hebben een beperkte geldigheidsduur van 3 maanden. Dit kleine shellscriptje (hieronder in een here-document) laat Chasquid (en Dovecot) automatisch herstarten om vernieuwde certificaten in te lezen:
mkdir -p /etc/letsencrypt/renewal-hooks/post/ cat <<EOF | tee /etc/letsencrypt/renewal-hooks/post/restart #!/bin/bash systemctl restart chasquid systemctl restart dovecot EOF chmod +x /etc/letsencrypt/renewal-hooks/post/restart
Let op dat je wel de bestandsstructuur van Let's Encrypt moet volgen in de '/etc/chasquid/certs/
' directory als je je certificaten op een andere manier regelt:
example.nl/
privkey.pem
cert.pem
fullchain.pem
Chasquid kan zijn eigen gebruikersbeheer doen (zoals je hierboven hebt kunnen zien), maar ook (in aanvulling daarop) meeliften op het gebruikersbeheer en de authenticatie van de Dovecot IMAP/POP-server. Omdat Chasquid is ontworpen om met Dovecot samen te werken, raden we je aan om deze 2 inderdaad in combinatie te gebruiken.
De installatie van Dovecot doen we als volgt:
apt install dovecot-imapd dovecot-pop3d dovecot-lmtpd
Waarna we de gebruikersauthenticatie van Dovecot op deze manier ontsluiten voor Chasquid:
cat <<EOF | tee /etc/dovecot/conf.d/11-chasquid.conf # Allow chasquid to authorize users via dovecot. service auth { unix_listener auth-chasquid-userdb { mode = 0660 user = chasquid } unix_listener auth-chasquid-client { mode = 0660 user = chasquid } } EOF
Let op: We hebben deze configuratie overgenomen uit de documentatie van Chasquid. Check of de configuratie die jij gebruikt overeenkomt met de laatste versie die online staat.
Voor de configuratie van Dovecot zelf verwijzen we je naar de documentatie daarvan: https://doc.dovecot.org/latest/.
Chasquid staat default ingesteld op mail delivery met behulp van maildrop (onderdeel van de Courier mailserver). Om Dovecot aan te roepen voor de aflevering van binnengekomen berichten moet dat worden aangepast als volgt (in het configuratiebestand '/etc/chasquid/chasquid.conf
'):
# Deliver email via lmtp to dovecot. mail_delivery_agent_bin: "/usr/bin/mda-lmtp" mail_delivery_agent_args: "--addr" mail_delivery_agent_args: "/run/dovecot/lmtp" mail_delivery_agent_args: "-f" mail_delivery_agent_args: "%from%" mail_delivery_agent_args: "-d" mail_delivery_agent_args: "%to_user%"
En voor de koppeling met de authenticatie van Dovecot aan de zijde van Chasquid:
# Use dovecot authentication. dovecot_auth: true
Als je SpamAssassin en ClamAV installeert, dan worden deze automatisch door Chasquid gebruikt (middels hooks):
apt install spamassassin spamc apt install clamdscan
Hetzelfde geldt voor greylistd.
Op Ubuntu worden 'spamd.service
' en 'clamav-freshclam.service
' na installatie automatisch opgestart:
systemctl status spamd.service systemctl status clamav-freshclam.service
dus daar hebben we verder geen omkijken naar.
Chasquid ondersteunt sinds kort ook native DKIM (vanaf versie 1.14). Om uitgaande berichten te laten ondertekenen, is het alleen nodig om een DKIM-sleutelpaar te genereren:
chasquid-util dkim-keygen example.nl
We vinden het nieuwe sleutelpaar nu in de file '/etc/chasquid/domains/example.nl/dkim:20250418.pem
'. Chasquid geeft ons gelijk het DKIM-record dat bij deze selector ('20250418') hoort:
root@server:/etc/chasquid# chasquid-util dkim-keygen example.nl Key written to "/etc/chasquid/domains/example.nl/dkim:20250418.pem" 20250418._domainkey.example.nl TXT "v=DKIM1; k=rsa; p=MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAnPU4iFLX+/Fllud5lliueK42fas2xuquYCvWKBPdDYDfxYZ6KwsraWzpFqW80ZQKoVoP46T3PTSyaJKyIP6YC3BQqB52lQxT2FNijAzAIKXGdskuchiRWpklGJcrq7k1CkLfF9qfDeNRIGNg8eT67lCtX6FVL3vsvuGMeJDhPfXyhUIHvVszWoR8x/7SUN2xCGyWQdSWkAlwcuPFRqRS0JLHxjXKlDrUVWMUPnPx9VoFKDPjhZefxNyQuRYTTF0MjuN/BTPOnlSWvTmGLDd0o/4lwyQV9aGjX0edIkpX5KoaOqG/0GaHrJ6WrEdrgVOi3M/i3iUYXXvnTJShiinyXTDLHistisH89zmJefusOdOuSIUbxmaIKwWJnazr6jlkusc8RUBEquSxTyl/CDvAt6MEbaHM6fYKJ5nB+yCwdXqu2Bu4EdynssmoJkRXkvQnLW3UZKpQgiIw4T7okQKq2mRNg32JZREBgnG98YdTE0NTgm6+aIL33UTULDJWW5kfAgMBAAE="
Als je wilt kun je ook zelf een selector kiezen of meerdere DKIM-handtekeningen aan uitgaande berichten laten toevoegen.
Chasquid valideert sowieso de DKIM-handtekeningen op binnenkomende berichten. Berichten die negatief valideren worden wel van een 'Authentication-Results'-header voorzien maar niet geblokkeerd.
Hiermee hebben we de basis van ons mail-systeem opgezet. Voor de overige DNS-records (die Chasquid niet voor je genereert) verwijzen we naar de records zoals die hierboven door Mox zijn gegeven. Maar let op dat Chasquid naast poort 465 (Secure SMTP Submission) ook poort 587 (SMTP Submission + STARTTLS) opent.
Het laatste dat ons te doen staat is om de Chasquid server daadwerkelijk op te starten:
systemctl restart chasquid.service
Waarna we de hier de (lokale) monitoringinterface voor de beheerder kunnen openen: http://127.0.0.1:1099/.
De Stalwart Mail Server is in beginsel een commercieel product, gericht op schaalbaarheid en veiligheid. De ontwikkelaar – Stalwart Labs – stelt echter ook een Community-editie beschikbaar als open-sourcesoftware (volgens het 'open core'-model). Daarin ontbreekt echter de enterprisefunctionaliteit, waaronder AI, SAML-authenticatie, monitoring, clustering, multi-tenancy, branding, undelete en support. Bescherming tegen spam, phishing en andere malware zit wel in alle edities.
Stalwart is geschreven in Rust, een relatief jonge taal met ingebakken memory safety, gericht op het programmeren van snelle systeem- en netwerksoftware. Voor deze evaluatie installeerden we Stalwart Community versie 0.11.7.
Als eerste downloaden we een installatiescript, dat vervolgens de meest recente software voor ons installeert (per default in de directory '/opt/stalwart-mail/
'):
curl --proto '=https' --tlsv1.2 -sSf https://get.stalw.art/install.sh \ -o install.sh sh install.sh
Daarna kunnen we de rest van alle configuratie en beheer via de webinterface doen (let op: het password voor 'admin' wordt gegeven door het installatiescript): http://localhost:8080/login.
Merk op dat de Stalwart server gelijk na de installatie wordt opgestart. Je kunt deze dienst via Systemd beheren onder de naam 'stalwart-mail.service
':
systemctl status stalwart-mail.service
Als alternatief voor het installatiescript is er ook een Docker image voor Stalwart beschikbaar.
Stalwart biedt een keurige, zakelijke interface, waar we onze configuratie beginnen met het aanmaken van een nieuw domein ('example.nl') en een nieuwe gebruiker ('gebruiker@example.nl').
Alle data worden default opgeslagen in embedded RocksDB databases, maar er zijn allerlei andere opties voor de verschillende onderdelen beschikbaar, waaronder opslag in de cloud.
In het scherm 'Settings' → 'Listeners' kunnen we zien welke Listeners (softwareonderdelen voor het bedienen van binnenkomende verbindingen) beschikbaar zijn. Naast de al eerdergenoemde treffen we hier ook Sieve aan (op poort 4190), een specificatietaal en ingang om mailfilters centraal op de server te beheren.
Een andere is JMAP, een modern alternatief voor IMAP gebaseerd op JSON en HTTP.
Tenslotte ondersteunt Stalwart ook Autoconfiguration/Autodiscovery (net als Mox).
De TLS-instellingen in 'Setting' → 'TLS' geven je de mogelijkheid om zelf certificaten toe te voegen (de interface noemt dat "creëren") of deze te laten genereren via een ACME-provider (zoals Let's Encrypt).
Het systeem geeft ons geen DANE-records om te publiceren, maar dat is eenvoudig zelf te doen op basis van het certificaat:
[root@server example.nl]$ openssl x509 -in ./cert.pem -outform DER | openssl sha256 SHA2-256(stdin)= f61bf58d20d9a3898a02a2ff031e6103d267c9e86e05fccba73b5de109b1032f
Deze hashwaarde kun je direct in je TLSA-record opnemen:
# DANE for mail _25._tcp.mx.example.nl IN TLSA 3 0 1 f61bf58d20d9a3898a02a2ff031e6103d267c9e86e05fccba73b5de109b1032f
De instellingen voor uitgaande mail vinden we onder 'Settings' → 'SMTP' → 'Outbound' → 'TLS'. Daar kunnen we verschillende opties voor het gebruik van STARTTLS en de validatie van DANE en MTA-STS zetten. We treffen hier ook een hele serie instellingen voor (TLS-gerelateerde) TLSRPT-rapportages.
Onder hetzelfde 'SMTP'-menu vinden we ook verschillende configuratiepagina's voor SPF, DKIM, DMARC en ARC. De eerste 3 hebben aparte instellingen voor het genereren van rapportageberichten. Bij SPF en DMARC gaat het alleen om validatie. Bij de DKIM-instellingen kun je zien dat er voor ons domein 'example.nl' ook gelijk 2 DKIM-sleutelparen voor de ondertekening van uitgaande berichten zijn aangemaakt.
Heb je een maildomein aangemaakt, dan klik je naar 'Directory' → 'Domains'. Daar vind je bij het betreffende domein het menu item 'View DNS records', waarmee je alle informatie voor de benodigde DNS-records en de zone file te zien krijgt.
Maddy zit een beetje tussen Chasquid en Mox in. De software is (ook) geschreven in Go en is opgebouwd uit functionele modules die in de configuratie aan elkaar zijn geknoopt tot een MTA. Ondersteuning voor SPF, DKIM, DMARC, DANE en MTA-STS is ingebouwd.
Voor IMAP is wel een eigen implementatie beschikbaar, maar die is nog in ontwikkeling. Voor bedrijfsmatige toepassingen wordt vooralsnog aangeraden om Maddy te combineren met Dovecot (vergelijk Chasquid). Daarnaast wordt Unbound aanbevolen als validerende resolver (vergelijk Mox).
Maddy zelf geeft aan dat de software op dit moment nog als bètaproduct moet worden beschouwd.
De installatie van Maddy kan vanaf de broncode of als Docker image. Voor onze evaluatie gebruiken we de broncode voor versie 0.8.1.
apt install golang [gcc libc6-dev make] apt install git git clone https://github.com/foxcpp/maddy.git cd maddy/ git checkout v0.8.1 ./build.sh ./build.sh install
Met dat laatste commando worden alle onderdelen op hun plek gezet, waaronder een servicebestand voor Systemd.
Omdat Maddy onder een gewone gebruiker draait, moeten we daarvoor nog wel een Unix-account aanmaken.
systemctl daemon-reload useradd -mrU -s /sbin/nologin -d /var/lib/maddy -c "maddy mail server" maddy
De basisconfiguratie van Maddy beperkt zich tot het instellen van de hostnaam en het primaire domein:
cp /etc/maddy/maddy.conf /etc/maddy/maddy.conf.org vim /etc/maddy/maddy.conf $(hostname) = mail.example.nl $(primary_domain) = example.nl tls file /etc/maddy/certs/$(primary_domain)/fullchain.pem /etc/maddy/certs/$(primary_domain)/privkey.pem
Zoals je in dit configuratiebestand kunt zien, verwacht Maddy zijn TLS-certificaten in de directory '/etc/maddy/certs/'
. We hebben het pad in de configuratie aangepast naar 'primary_domain
', zodat daarbij niet de hostnaam maar de domeinnaam wordt gebruikt.
Gebruik je Let's Encrypt voor je certificaten, dan kun je een symlink gebruiken precies zoals we dat hierboven voor Mox ook deden:
setfacl -R -m u:maddy:rX /etc/letsencrypt/{live,archive} ln -s /etc/letsencrypt/live/ /etc/maddy/certs
Maddy laadt zijn certificaten elke minuut opnieuw in, dus je hoeft de server niet te herstarten na het vernieuwen of toevoegen van certificaten.
Meer dan dit is niet nodig om Maddy op te kunnen starten:
systemctl start maddy systemctl status maddy
Zoals je in onderstaand screenshot kunt zien, maakt Maddy bij deze eerste run een DKIM-sleutelpaar voor je aan. In de file '/var/lib/maddy/dkim_keys/example.nl_default.dns'
vind je de DKIM-instellingen die je onder het label 'default._domainkey.example.nl
' aan je zone moet toevoegen ('default' is hier de naam van de DKIM-selector).
In de documentatie vind je een voorbeeld van alle DNS-records die je voor SPF, DKIM, DMARC, DANE, MTA-STS en TLSRPT toe moet voegen. Gebruik je DANE-verankering – wat wij van harte aanraden – dan heeft MTA-STS geen toegevoegde waarde meer. Maddy ondersteunt de validatie van allebei voor binnenkomende mailberichten, net als de validatie van SPF, DKIM en DMARC.
Draait je server eenmaal en heb je alle benodigde DNS-records aan je zone toegevoegd, dan is het tijd om de eerste gebruiker aan te maken. Maddy slaat gebruikersgegevens op in een embedded SQLite database.
maddy creds create gebruiker@example.nl maddy imap-acct create gebruiker@example.nl
Het eerste commando maakt de gebruiker aan, het tweede een IMAP store voor zijn of haar mail (die laatste kan ook een S3 bucket zijn).
Deze opsplitsing komt in eerste instantie eigenaardig over, maar staat je toe om dingen te doen als het aanmaken van meerdere IMAP stores voor dezelfde gebruiker, of het combineren van verschillende mailadressen in een enkele store.
We zijn blij verrast met de universele ondersteuning van de moderne beveiligingsstandaarden in de 4 besproken mailservers. Dat maakt deze systemen immers ook praktisch bruikbaar in een wereld die op dit moment (nog) wordt gedomineerd door de grote mailproviders. Waar het tot voor kort voor hobbyisten en kleine dienstverleners heel lastig was om een mailsysteem in eigen beheer op te zetten, laten de setups hierboven zien dat dat voor een liefhebber of professional met wat Linux-kennis prima te doen is. Sterker nog, nu de moderne beveiligingsstandaarden integraal onderdeel uitmaken van elk van deze servers, kun je een geschikte selecteren op basis van zijn andere features.
Mox ziet er behoorlijk compleet uit en is heel eenvoudig op te zetten. Bovendien is het een puur Nederlands product, voorzien van een zelf ontwikkeld (reputatie-gebaseerd) 'anti-spam'-systeem en een eigen webmailinterface. Dat alles maakt deze server ideaal voor SOHO/MKB-toepassingen. Onderaan deze pagina hebben de ontwikkelaars de roadmap voor Mox gepubliceerd.
Een van de ontwerpdoelen van de ontwikkelaars destijds was om met hun mailserver 100% te scoren op de Internet.nl testportaal.
Chasquid is meer een MTA dan Mox, dat een complete oplossing wil zijn. Deze server vraagt iets meer werk en wat meer kennis van Unix om op te zetten. Dit pakket selecteer je waarschijnlijk als je op zoek bent naar een cleane, maar complete MTA om die met andere Unixsoftware te integreren.
Het belangrijkste voordeel van Stalwart is dat je met de gratis Community-editie van start kunt gaan, om later eventueel over te stappen naar een van de betaalde edities. Vergelijk de argumenten om in eerste instantie met Fedora Linux, AlmaLinux en/of Rocky Linux te werken, zodat later altijd naar betaalde RHEL-ondersteuning kan worden overgestapt.
De webinterface van Stalwart ziet er netjes uit, maar bevat een heleboel configuratiepagina's met enorm veel instellingen. Veel daarvan bestaan echter (nog?) uit kleine stukjes en plukjes tekst, zodat we ons afvragen of de instellingen zich niet beter lenen voor een tekstueel configuratiebestand.
Maddy zit tussen Chasquid en Mox in. Omdat de ontwikkelaars zelf aangeven dat deze software op dit moment nog als bètaproduct moet worden beschouwd, zouden wij je afraden Maddy nu al in een productie-omgeving op te nemen.
Of je setup daadwerkelijk aan alle moderne internetstandaarden voor mail voldoet kun je zelf checken op het testportaal van Internet.nl: https://internet.nl/.
Wat alle 4 mailsystemen gemeen hebben is dat ze nog relatief jong zijn en onderdeel uitmaken van een beweging weg van de grote mailproviders. De ontwikkeling van zowel Mox [1, 2, 3] als Stalwart [1, 2] heeft via NLnet [1, 2] financiële ondersteuning gekregen uit het 'Next Generation Internet'-programma (NGI) van de Europese Commissie.
De beschikbaarheid van veilige, onafhankelijke en toegankelijke mailsystemen voor self-hosting was uitgangspunt bij de toekenning van deze subsidies. Voorwaarden waren de publicatie als open-sourcesoftware, gebruiksgemak, en de ondersteuning van moderne (beveiligings-)standaarden. Alleen door de decentralisering ("democratisering") van de mailinfrastructuur krijgen we de controle over onze eigen gegevens en communicatie terug.