Der eigene Mailserver
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:
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.