Waarom zelf hosten
Mail is een van de lastigste diensten om zelf te draaien, en juist daarom leerzaam. Wie zijn eigen mail host, krijgt te maken met DNS, TLS, reputatie, spamfilters en de vraag hoe een ander zeker weet dat een bericht echt van jou komt. Dat zijn dezelfde vragen als bij mailrelays en afzenderdomeinen op het werk.
De opzet
- mailcow (Docker Compose) in een eigen VM: Postfix, Dovecot, Rspamd, SOGo en de beheerinterface.
- Uitgaande mail via een smarthost bij Cyso Cloud. Een thuisverbinding heeft geen goede verzendreputatie: IP-adressen van consumentenlijnen staan bij veel ontvangers standaard op een lijst. Postfix stuurt daarom alles via een geauthenticeerde relay met TLS, vanaf een IP-adres met een schone reputatie.
Wat er nodig is voor 10/10
| Onderdeel | Waarom |
|---|---|
| SPF | Zegt welke servers namens het domein mogen versturen. Hier: de smarthost, niet het thuis-IP. |
| DKIM | mailcow ondertekent elk bericht; de publieke sleutel staat in DNS. Ontvangers controleren of het bericht onderweg niet is aangepast. |
| DMARC | Koppelt SPF en DKIM aan het afzenderadres, en vertelt ontvangers wat ze moeten doen bij een mislukte controle. |
| TLS | Versleuteld naar de smarthost, en de smarthost doet STARTTLS naar de ontvanger. |
Met die inrichting scoort een testbericht 10/10.
Wat ik ervan leerde
- SPF heeft een limiet van tien DNS-lookups. Elke
include:telt mee. Een SPF-record dat door de jaren is gegroeid, valt daar ongemerkt overheen, en dan faalt SPF voor iedereen. - De relay bepaalt je reputatie. Hoe goed je eigen server ook is ingericht, een slechte reputatie van het verzendende IP-adres maakt alles ongedaan.
- Test de echte sessie, niet een curl. Of mail aankomt, zie je aan de SMTP-sessie van de server zelf: welke
AUTH-methode, welke TLS-versie, welke ciphers. Een losse test vanaf een andere machine bewijst niets over de relay. Dezelfde les kwam ik op het werk tegen bij een scanner die geen moderne TLS-ciphers sprak. Zie Een scanner die niet kon mailen. - PHP-onderdelen verdienen aandacht. De webmail en de beheerinterface draaien op PHP-FPM. Bij het php2shell-lek kregen die als eerste een tussenmaatregel, via een override die een update van mailcow overleeft.