Postfix Alternative: Mail mal mit OpenSMTPD

Irgendwie mag ich Alternativen. Ich probiere gerne mal andere Programme – Abseits des mainstreams – aus und stelle dann fest, dass es auch immer mehrere Lösungen für eine Aufgabe gibt. Es geht dann nicht um Gut und Besser, sondern einfach um einen anderen Ansatz. Also fragte ich mich, wer, wo, was ist die Alternative zu Postfix? Und siehe da: Ich stieß auf OpenSMTPD – und bin sehr angetan von diesem SMTP Mailserver. Die gezeigte Konfiguration ist auf einem Ubuntu 18.04 Server entstanden und getestet.

Wer Postfix kennt, weiß, dass er immer mit zwei Konfigdateien kämpfen muss. Für OpenSMTPD brauchen wir nur eine Konfigdatei und legen diese /etc/smtpd.conf mit folgenden Inhalt an: (wobei Server-bezogene Daten und der encryption key entsprechend dem eigenen Server angepasst werden muss)

# This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.

# komprimiert die Warteschlange (optional)
queue compression
# verschlüsselt die Warteschlange, generiere key: 'openssl rand -hex 16' (optional)
queue encryption key "9b1f8fa902c6f2cf808e1c8c75e324244"
# nach 4 Stunden werden Emails in queue gelöscht (optional)
expire 4h
# nur auf ipv4 hören (optional)
limit mta inet4

# Zertifikate dürfen nur chmod 700 haben!
pki mx.marolu.one certificate "/etc/mail/fullchain.pem"
pki mx.marolu.one key "/etc/mail/privkey.pem"

listen on lo

listen on enp2s0 port 25 tls pki mx.marolu.one
listen on enp3s0 port 25 tls pki mx.marolu.one

# tls-require besteht auf verschlüsselte Übertragung, deswegen oben 'pki'.
# ohne mask-source wenn Filteroptionen scheitern, da Name nicht eindeutig (selten! vergleiche header einer Email)
listen on enp2s0 port 587 tls-require pki mx.marolu.one auth mask-source
listen on enp3s0 port 587 tls-require pki mx.marolu.one auth mask-source

# neue aliase: 'makemap -d btree -t aliases aliases'
# makemap Ersatz für newaliases (optional: ohne -d ,dann hash, btree schneller)
table aliases file:/etc/mail/aliases

# liefert an dovecot-lmtp und dovecot kennt user-mailhome
accept from any for domain "marolu.one" alias <aliases> deliver to lmtp "/var/run/dovecot/lmtp"
accept for local alias <aliases> deliver to lmtp "/var/run/dovecot/lmtp"
accept for any relay

Damit sind wir eigentlich schon fertig. Tschüss. Der Rest erklärt sich von alleine. Hilfe findet sich hierhier und hier. Ich glaube, dass wäre dann mein kürzester Artikel auf Pilgermaske – aber keine Sorge oder Pech gehabt: Ich schreib mal weiter.

Meine Aussage stimmt aber so. Die Konfiguration erfolgt nur über diese smtpd.conf in /etc und die hier gezeigte Konfiguration – bestehend aus 15 Zeilen – deckt die gängigen SMTP Einstellungen ab. Also gehen wir ins Detail.

Die ersten drei Parameter (queue, expire, limit) sind optional und müssen nicht gesetzt werden. Allerdings fand ich es ganz hilfreich, dass die queue (Mail- Warteschlange) komprimiert und verschlüsselt wird. Auch ein verfallen der nicht gesendeten Emails nach 4 Stunden (expire) finde ich hilfreich, gerade wenn der Mailserver ein Testsystem ist, an dem viel gebastelt wird. Die Limitierung auf IPv4 erschien in meinen Falle ratsam, weil mein Server nicht auf IPv6 hört.

Der encryption key wird mit folgenden Befehl direkt in die /etc/smtpd.conf hinein generiert und kann dann ergänzt und entsprechend positioniert werden: (Achte auf die zwei Pfeile, sonst ist der Inhalt der Datei weg!)

openssl rand -hex 16 >> smtpd.conf

Die folgenden Zeilen fangen dann mit ‘pki‘ an und meinen damit das Zertifikats- Management des Mailservers. Hier werden also die Zertifikate für TLS eingebunden. Ich habe dazu einen Ordner /etc/mail angelegt, weil ich alle Dateien zu einen Programm gerne beisammen habe. Dort werden die zwei Dateien (crt und key) hinein kopiert und mit chmod 700 berechtet. Links auf Zertifikate- links funktionieren nicht (certbot), weil links 777 gechmodet sind und OpenSMTPD darüber meckert.

Die ‘listen‘ Zeilen geben vor, auf welchen Netzwerkkarten OpenSMTPD hört und unter welchen Bedingungen. So wird an den beiden Netzwerkkarten (intern wie extern also) auf dem default smtp port 25 eine verschlüsselte Verbindung (TLS) angeboten, wobei wir uns mit dem Zertifikat (pki) für mx.marolu.one ausweisen. Logisch, oder?

Ähnliches lesen wir auch aus den folgenden ‘listen’ Parameter: Am port 587 ist TLS – also verschlüsselte Übertragung – zwingend (tls-require) für den Mailclient, auch hier weisen wir mit dem Zert für mx.marolu.one unsere Identität nach und verlangen ein Passwort (auth). Letztlich wollen wir im Mailheader möglichst wenig Informationen mitgeben und maskieren (mask-source) den Namen des Senders.

Die ‘aliases‘ Tabelle sollte ordentlich gepflegt werden. So muss nach RFC Regularien auch ein Empfänger für abuse und postmaster existieren. In der aliases werden damit z.B. diese beiden Postfächer (und andere administrative Adressen) auf einen natürlichen Anwender im System gemappt. Einfach mal diese Datei anschauen und entsprechend pflegen. Damit die Tabelle von OpenSMTPD genutzt werden kann, muss diese in einen hash oder in einen btree umgewandelt werden: (Übrigens, nach jeder Änderung der aliases)

makemap -d btree -t aliases aliases

Dazu benutzen wir nicht den newaliases Befehl aus dem sendmail Projekt, sondern den makemap Befehl, der einige Altlasten von Sendmail, nicht mehr enthält. Die Option -d btree ist optional, aber es wird dem btree eine bessere Performance als einer hash Datei zugesagt (mehr dazu hier, siehe Seite 73/74). Und die Option -t aliases sagt makemap, dass es eine aliases Datei erzeugen soll. Die Standard aliases in /etc spielt hier keine Rolle, wenn die Konfiguration wie oben gezeigt (siehe Ordnerpfad), genutzt wird.

Die letzten drei ‘accept’ Zeilen sagen aus, wer den Mailserver nutzen darf und wo die Emails gelagert werden. Wenn Admina diese Zeilen aufmerksam liest, erschließt sich die Logik dieser Zeilen von ganz allein. Es gibt hier nur zwei Besonderheiten:

  1. Der Mailserver übergibt die Emails mit dieser Konfiguration an den LMTP Dienst von Dovecot. Ich bin der Meinung, dass es nicht die Aufgabe des SMTP Servers ist, die Postfächer zu verwalten. Also soll er diese schnell an den LMTP abgeben und der Dovecot IMAP Dienst weiß – nach einer anständigen Konfiguration – was mit den Emails geschehen soll. Also schau Dir nach der OpenSMTPD Konfiguration deine Dovecot Konfiguration an!
  2. Du findest in diesen Zeilen keinen Hinweis auf virtuelle User. Das ist richtig und so gewollt! In dieser Konfiguration gehen wir von ganz normalen Usern, die auf dem Server angelegt sind und einen home Ordner haben, aus. Warum? Ich glaube, dass viele Adminas einen Mailserver für den Verein, die Clique/den Clan oder Familie betreiben – also ein paar Dutzend Postfächer betreuen. Dafür den Aufwand mit den virtuellen Postfächern? Was ist, wenn ein User geht und will, dass alle seine Daten gelöscht werden? Mit meiner Konfiguration lösche ich seinen Benutzer auf meinen Server und damit seinen home Ordner – in dem sein Maildir Ordner liegt – und fertig. Oder ein Passwortwechsel… Bei virtuellen Users?

Wie dem auch sei. Jedes Konstrukt hat seine Vor- und Nachteile. Natürlich können mit OpenSMTPD auch virtuelle Domänen und User angelegt werden. Damit ist die OpenSMTPD Konfiguration abgeschlossen! Jetzt noch Dovecot – oder einen anderen IMAP Server – anbinden (siehe z.B. diesen link, den letzten Abschnitt und hier) und fertig.

Übrigens: Installiert wird OpenSMTPS mit apt install opensmtpd falls das jemand nicht weiß. Und hier findet sich ein umfassenderer Artikel zu den tables. Letztlich kann Admina den Mailserver hier und hier umfangreich testen. Aller-aller-letztlich ist mit dem Backup der smtp.conf, der /etc/mail und /home/<user>/Maildir Ordner der nächste neu-installierte Server gleich wieder einsatzbereit.

Happy mailing.

Mathias R. Ludwig

Der Betreiber dieses Blogs. Stanislaw Lem und Linux Fan. In Zeiten der Totalen Überwachung.

Das könnte Dich auch interessieren …

Hinterlasse einen Kommentar

avatar
1500

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

  Subscribe  
Benachrichtige mich zu: