en

Der eigene Mailserver

August 2023

E-Mail ist eines der ältesten Protokolle des Internets und zentraler Bestandteil dessen. Es gibt wohl kaum eine Woche in der man nicht damit Kontakt hat.

Ich habe mir also meinen eigenen E-Mail-Server konfiguriert und will dies in diesem Artikel etwas beschreiben. Genau genommen besteht das Ganze aus einem E-Mail-Client, SMTP-Server und einem IMAP-Server.

Als E-Mail-Clients benutze ich K-9 Mail für Android und mu4e für PC. mu4e ist ein Emacs-Modul. Meine beiden E-Mail-Clients verbinden sich mit dem IMAP-Server um Mails zu lesen und um Mails in verschiedenen Ordnern zu organisieren.

Die Mails werden auf meinem Server im Maildir-Format gespeichert. Die Debian-Standardkonfiguration nutzt das mbox-Format bei dem sich alle Mails eines Mailverzeichnisses eines Users in einer Datei befinden. Mit Maildir kann mein Mailserver neu empfangene E-Mails in meine Mailbox schreiben während ich über meinen E-Mail-Client Mails in verschiedene Ordner verschiebe.

Für den Empfang- und Versand von Mails verwende ich den exim MTA (message transfer agent). Dieser verarbeitet die von mir versandten Mails und die von aussen eingehenden Mails anderer Personen.

Das folgende Diagram zeigt das zusammenspiel der beschriebenen Komponenten:

E-Mail-Client «SMTP» Externer Mailserver «Maildir» meine Mailbox «SMTP» exim «IMAP» Dovecot Mails versenden Mails versenden liest und schreibt Mails liest und schreibt Mails schreibt Mails

Mails von extern empfangen

Um Mails von anderen Personen auf der eigenen E-Mail-Domain zu empfangen benötigt man folgende Voraussetzungen.

Die erste Voraussetzung ist ein im Internet öffentlicher MTA der auf Port 25 horcht und das SMTP-Protokoll spricht. Der MTA sollte entweder über eine statische IP oder einen DNS-Eintrag permanent referenzierbar sein. Es sollte auch kein Problem sein, wenn der MTA sporadisch nicht erreichbar ist. Laut SMTP-Spezifikation sollte ein MTA die wiederholten Zustellversuche erst nach ein paar Tagen aufgeben. Mein MTA ist über den DNS-Eintrag mail.ma300k.de erreichbar. Ich nutze exim unter Debian als MTA. Diesen habe ich über dpkg-reconfigure exim4-config als Internet-Mailserver konfiguriert.

Der DNS-Eintrag der E-Mail-Domain (also in meinem Fall z.B. ma300k.de) benötigt einen MX-Eintrag der auf die statische IP oder den DNS CNAME des MTA zeigt.

Mails nach extern senden

Der Versand von selbst verfassten Mails an externe Mailserver ist etwas aufwändiger als der Empfang. Primär weil das ursprüngliche SMTP-Protokoll für eine utopische Welt designed ist, in der sich alle Teilnehmer an die Regeln halten. In der SMTP-Version aus dem Jahr 1971 kann sich jeder Sender als beliebiger Absender ausgeben. Mit DKIM wurde ein Signaturverfahren spezifiziert, mit dem ein Sender beweisen kann, dass eine E-Mail wirklich von seiner E-Mail-Domain stammt und somit legitim ist. Dazu signiert mein MTA ausgehende Mails mit einem geheimen Schlüssel. Der öffentliche Teil dieses Schlüssels wird unter dem DNS-Eintrag für key._domainkey.ma300k.de als Wert abgelegt. Somit kann er durch jeden Empfänger validiert werden.

Neben DKIM erwarten viele Empfänger auch einen SPF-Eintrag. Diese gibt an wie ein E-Mail Empfänger prüfen kann, ob eine E-Mail von einem für die E-Mail-Domain autorisierten MTA versendet wurde. Der SPF-Eintrag wird als DNS-Eintrag an der E-Mail-Domain abgelegt.

Laut dem Talk Email vs Capitalism, or, Why We Can't Have Nice Things von Dylan Beattie sollte man zusätzlich eine E-Mail-Domain mit Vorlauf aufsetzen. Manche E-Mail-Dienste bewerten neu angelegte E-Mail-Domains als unverlässlich und sortieren E-Mails davon eher als Spam ein.

Man kann ausserdem nicht davon ausgehen, dass eine versandte E-Mail immer zugestellt wird. Beim Versand einer Mail von meinem Server an die Mailserver von Microsoft hat sich gezeigt, dass Microsoft die Mail zwar korrekt angenommen hat, jedoch wurde die E-Mail nicht mal im Spam-Ordner zugestellt.

Offline Mails auf PC

Damit ich E-Mails auch offline auf dem PC lesen und verschieben kann, greift mein mu4e nicht direkt auf meinen IMAP-Server zu. Stattdessen habe ich lokal auf meinem PC mehrere Maildirs, die mit dem IMAP-Server synchronisiert werden. Zur Synchronisation verwende ich mbsync welches Teil von isync ist. Netter Nebeneffekt davon ist, dass ich neben meiner eigens gehosteten Mailbox auch meine Mailbox von gmail lokal als Kopie besitze. Die Freude darüber wird vermutlich groß sein, sollte ich je Zugang zu "meinem" Google Account verlieren.

Feedback

Falls der Artikel interessant war oder etwas unklar ist freue ich mich über Fragen per e-Mail an markus.peroebner@gmail.com.