Obwohl mein erweiterter Mailstack funktional nichts mehr zu wünschen übrig lässt, geht mir die gegen Cyrus gerichtete Empfehlung der Postfix-Community (Dovecot provides an alternative that may be worth considering.
) nicht aus dem Kopf, und nachdem ich so weit gekommen bin, traue ich mir auch den Betrieb eines eigenen IMAP-Servers zu.
Die Dovecot-Dokumentation ist nur auf den ersten Blick etwas einschüchternd, und mit Hilfe des Ubuntu-Wikis komme ich gut voran. Für den Heimbedarf (weniger als 5 Benutzerkonten, keine serverseitigen Mailfilter) werden drei Pakete benötigt:
apt-get install dovecot-core dovecot-imapd dovecot-lmtpd
Die Konfiguration erfolgt vollständig in /etc/dovecot/conf.d/
. Im Gegensatz zu Rspamd haben die Dovecot-Maintainer umfangreich kommentierte Beispieldateien bereitgestellt, aus denen allerdings nur wenige Parameter benötigt werden
# 10-auth.conf disable_plaintext_auth = yes auth_default_realm = eden.one auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@ !include auth-passwdfile.conf.ext
Keine Klartext-Passwörter ohne SSL, Benutzernamen ohne Domäne/Realm werden um eden.one
ergänzt, die Kreativität bei der Wahl von Benutzernamen wird zum Schutz vor SQL-Injektionen beschränkt, und die Passwörter liegen in einer Textdatei.
# 10-mail.conf mail_location = maildir:/var/mail/virtual/%u namespace inbox { type = private inbox = yes } mail_uid = vmail mail_gid = vmail mail_privileged_group = mail auth_socket_path = /var/run/dovecot/auth-userdb mailbox_list_index = yes
Dovecot soll Nachrichten im Maildir-Format speichern, die Inbox jeder Nutzerin als privaten Bereich betrachten und stellvertretend für alle virtuellen Nutzerinnen als Systemnutzerin vmail
agieren. Der Socket für den Authentifizierungsdienst wird verwirrenderweise hier und nicht in 10-auth.conf
oder in 10-master.conf
definiert.
# 10-master.conf default_internal_user = dovecot service imap-login { inet_listener imap { port = 143 } inet_listener imaps { port = 993 ssl = yes } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 group = postfix user = postfix } } service auth { unix_listener auth-userdb { mode = 0660 user = vmail group = vmail } unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } }
Dovecot lauscht auf zwei IMAP-Ports (wobei auch Anfragen auf Port 143 durch die entsprechenden Parameter in 10-auth.conf (s.o.) und 10-ssl.conf (s.u.) zur Verschlüsselung gezwungen werden). Über Unix-Sockets stellt Dovecot einen LMTP-Server und den Authentifizierungsservice für IMAP-Logins (Typ: userdb) und für Postfix (Typ: client) zur Verfügung.
# 10-ssl.conf ssl = required ssl_cert = </etc/ssl/certs/mycert.pem ssl_key = </etc/ssl/private/mykey.key ssl_client_ca_dir = /etc/ssl/certs
Jede Verbindung wird verschlüsselt, und zwar mit Hilfe der SSL-Zertifikate für meine Domain.
# 15-lda.conf postmaster_address = postmaster@eden.one hostname = mail.eden.one
Auch bei der internen LMTP-Kommunikation mit Postfix soll Dovecot sich als mail.eden.one
vorstellen –
Received: from mail.eden.one by mail.eden.one with LMTP id AXunOntwEWKkcA0Ap6K1+g (envelope-from <jane.doe@gmail.com>) for <user@eden.one>; Sat, 12 Feb 2022 22:34:35 +0000
– obwohl diese Angabe keinen Menschen außer mir interessiert und auch mich nicht unbedingt interessieren müsste. Relevanter sind die entsprechenden MUA/MTA-Einstellungen, die immerhin sichtbar werden, wenn eine exzentrische Empfängerin die E-Mail-Header einblendet.
# 15-mailboxes.conf namespace inbox { mailbox Drafts { special_use = \Drafts auto = subscribe } mailbox Junk { special_use = \Junk auto = subscribe } mailbox Trash { special_use = \Trash auto = subscribe } mailbox Archive { special_use = \Archive auto = subscribe } mailbox Sent { special_use = \Sent auto = subscribe } mailbox virtual/Flagged { special_use = \Flagged comment = All my flagged messages } }
Die genannten Standardpostfächer sollen automatisch angelegt und abonniert werden.
# auth-passwdfile.conf.ext passdb { driver = passwd-file args = scheme=SHA256-CRYPT username_format=%u /etc/dovecot/users } userdb { driver = passwd-file args = username_format=%u /etc/dovecot/users override_fields = home=/home/virtual/%u }
Als Passwort- und Nutzerdatei dient eine schlanke Textdatei ohne UID/GID (vgl. mail_uid
und mail_gid
in 10-mail.conf
) und ohne individuelles Homeverzeichnis.
Nach dem Abschluss der Dovecot-Konfiguration muss ein Passwort-Hash generiert (doveadm pw -s SHA256-CRYPT
) und mit dem zugehörigen Benutzernamen in /etc/dovecot/users
geschrieben werden (alle übrigen Felder bleiben leer):
user@eden.one:{SHA256-CRYPT}$5$lpskns12qTM5P2Zm$TMTAV6IYrvMUG8sT16sK6LZBiDMa3LWHXebtKrSEhr1::::::
Postfix muss instruiert werden, auf den von Dovecot bereitgestellten Socket (statt auf saslauthd) zu lauschen:
# /etc/postfix/main.cf smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth
Um das Postfach der Nutzerinuser@eden.one
in /var/mail/virtual/user@eden.one
zu befüllen, wird eine der virtual_alias_domains
zur virtuellen Mailbox-Domäne befördert, um eingehende E-Mails lokal über den oben definierten LMTP-Socket auszuliefern:
# /etc/postfix/main.cf virtual_mailbox_domains = eden.one virtual_mailbox_maps = hash:/etc/postfix/mailbox_users virtual_transport = lmtp:unix:private/dovecot-lmtp
Mit virtual_mailbox_maps
kann Postfix die Verbindung zwischen einer Adresse und einem Dateipfad zur Ablage von Nachrichten herstellen. In meiner Konfiguration enthält mailbox_users
dagegen lediglich die von Dovecot bereitgestellten Nutzerinnen/Postfächer:
user@eden.one OK
Praktischerweise funktionieren die Weiterleitungen in virtual_alias_maps
auch nach der Umstellung für die Mailbox-Domäne. Es können nicht nur Nachrichten an externe Empfängerinnen geschickt werden, sondern auch eine Kombination lokaler Postfächer und externer Empfängerinnen ist möglich (sales_marketing@eden.one user@eden.one, jane.doe@gmail.com
). Mit
service dovecot restart postmap /etc/postfix/mailbox_users service postfix restart
wird der vollständige Mailstack in Betrieb genommen, und nach der Freischaltung der IMAP-Ports 143 und 993 in der Firewall reduziert sich meine Abhängigkeit theoretisch um einen Anbieter. Praktisch wäre es ausgesprochen leichtsinnig, sämtliche Dienste von nur einem – wenn auch sehr professionellen – Unternehmen zu beziehen, und so stütze ich mich weiterhin auf Pairdomains, IONOS, Posteo und Apple.