Univention hat den Mailserver Dovecot als Standard-IMAP/POP3-Server in UCS integriert. Dieser Artikel gibt einen ersten Überblick zur Dovecot-Integration.

Warum Dovecot als Standard-IMAP/POP3 Server in UCS?

Dovecot IMAP Server LogoDovecot wurde mit einem Fokus auf Sicherheit, Stabilität und Performance bei gleichzeitiger Standardkonformität implementiert. Dovecot startet – ähnlich Postfix – mehrere Prozesse für verschiedene Zwecke. Die Prozesse können mit unterschiedlichen Besitzer- und Gruppenberechtigungen ausgeführt werden, um die Auswirkungen bei einem Sicherheitsproblem zu begrenzen.

Dovecot unterstützt verschiedene Speicherformate: mbox, Maildir und dbox. Zur Erhöhung der Zugriffsgeschwindigkeit nutzt Dovecot in Verbindung mit allen Speicherformaten Indizes. Diese sind selbstheilend und selbstoptimierend, was Administratoren lästige Eingriffe erspart und Backups erheblich vereinfacht.

Dovecot wurde in der Annahme geschrieben, dass mehrere Prozesse gleichzeitig auf dieselbe Mailbox zugreifen wollen. Es ist daher gut dafür gerüstet, seine Dateien auf Netzwerkspeichern abzulegen. Auch für größere Projekte und mögliche Erweiterungen der UCS-Integration ist Dovecot ideal geeignet. So bringt Dovecot z.B. für den Aufbau eines Clusters einen eigenen Load-Blancer mit. Damit macht Dovecot es Administratoren einfach, das System sowohl horizontal als auch vertikal zu skalieren.

Dovecot skaliert hervorragend: Es wird sowohl ressourcenschonend auf Servern für wenige Benutzer eingesetzt, als auch in größeren Umgebungen mit mehr als einer Million Benutzern.

Dovecot ist einer der wenigen, vollständig standardkonformen IMAP-Server. Das Verhalten kann zur Kompatibilität mit nicht-standardkonformen IMAP-Clients angepasst werden.

UCS-Integration von Dovecot

Univention integriert Dovecot in der Version 2.2.13 in UCS 4.0. Ab sofort wird bei einer UCS 4.0-2 Neuinstallation nicht mehr der IMAP-Server Cyrus installiert, sondern Dovecot.

Bestehende Installationen mit Cyrus sind davon nicht betroffen.

Zur Installation reicht es aus, im Univention App Center die Applikation „Mailserver“ zu installieren. Falls Cyrus als IMAP-Server verwendet werden soll, folgen Sie bitte den Anweisungen weiter unten im Artikel. Müssen E-Mails von einem externen Mail-Server abgerufen werden, kann zusätzlich die Applikation „Fetchmail“ installiert werden.

Administration von Dovecot über Univention Management Console

Grundeinstellungen IMAP Mail Ordner in UCS mit DovecotAdministratoren verwenden das gewohnte Webinterface “Univention Management Console” (UMC) zum Anlegen, Bearbeiten und Löschen von Benutzern, Domänen, Gruppen und globalen IMAP-Ordnern.

Nach der Installation der Applikation “Mailserver” müssen zunächst die zu nutzenden Mail-Domänen im UMC-Modul “E-Mail” aus der Sektion “Domäne” eingerichtet werden. Diese brauchen nicht mit dem Namen der UCS-Domäne übereinzustimmen.

Erweiterte Mail Einstellungen in UCS mit DovecotEin E-Mail-Account wird erzeugt, indem einem Benutzer eine primäre E-Mail-Adresse zugeordnet wird. Weitere Adressen (Aliase) können in den erweiterten Benutzereinstellungen hinzugefügt werden. Dort kann auch eine E-Mail-Quota und der zuständige Mailserver (Mail Home Server) definiert werden.

Wenn es in einer UCS-Domäne mehrere IMAP-Server gibt, können Benutzer verschiedenen „Home Servern“ zugeordnet werden. Die E-Mails eines Benutzers liegen dann nur auf diesem Server. E-Mails dürfen auf jedem der UCS E-Mail-Server eingehen. Sie werden automatisch an den richtigen Home Server weitergeleitet.

Home Server können genutzt werden, um eine einfache Lastverteilung zu realisieren, oder um in verteilten Organisationen Nachrichten auf dem Server, der dem Benutzer am nächsten ist, zu speichern.

Benutzergruppen kann in den erweiterten Einstellungen des Gruppenmoduls eine eigene E-Mail-Adresse zugeordnet werden. Wird eine Nachricht an diese Adresse geschickt, so erhalten alle Mitglieder der Gruppe eine Kopie der Mail. Diese Funktion ist für Arbeitsgruppen sehr praktisch und erspart lästige und fehlerträchtige Adressatenlisten.

Dovecot unterstützt auch Globale IMAP-Ordner (shared folder) mit Berechtigungslisten (ACLs), denen optional eine E-Mail-Adresse zugewiesen werden kann. Die globalen IMAP-Ordner werden ebenfalls im UMC-Modul “E-Mail” administriert.

Details zur Administration von Dovecot auf UCS

Nach der Installation ist Dovecot sofort einsatzbereit. Es laufen die Netzwerkdienste zum Abrufen der E-Mail per IMAP4 (Ports 143, 993) und POP3 (Ports 110, 995) sowie zum Transfer von Sieve-Skripten (ManageSieve, Port 4190). Die unverschlüsselte Kommunikation wurde auf allen Ports deaktiviert.

Zusätzlich laufen drei Dienste für Postfix: auf einem Socket lauscht die Dovecot-eigene SASL-Implementierung für die Authentifikation. Auf einem weiteren Socket werden per LMTP neue E-Mails zur Abspeicherung übergeben. Ein Dienst zur Prüfung der Mail-Quota während des SMTP-Dialogs – also vor der Annahme der E-Mail – beantwortet Anfragen standardmäßig auf localhost (Port 12340).

Dovecots Standardspeicherformat, das auch UCS verwendet, ist Maildir++. Es ist eine vorwärts- und rückwärtskompatible Erweiterung vom Maildir-Standard zur Unterstützung von Quotas und Unterordnern. Das Format ist gut geeignet für schnelle Backups, Speicherung auf NFS und verspricht exzellente Performance auf kleinen bis mittelgroßen Installationen.

UCS legt die Mailboxen der Benutzer unterhalb von /var/spool/dovecot/private/<domain>/<user> ab. Dieser Pfad entspricht in der Dovecot-Terminologie dem mail home. Das mail directory bzw. die Einstellung mail_location ist das Verzeichnis Maildir unterhalb des mail home – hier startet der Maildir-Verzeichnisbaum. Unterhalb des mail home gibt es noch ein anderes Verzeichnis: sieve. Es enthält die von UCS oder dem Benutzer hochgeladenen Sieve-Skripte. Das gerade aktive Skript ist im mail home verlinkt.

Special-Use-Ordner anlegen und abonnieren

Dovecot ist sehr effizient in seiner Datenhaltung. Beim Anlegen eines E-Mail-Accounts legt Dovecot in der Standardeinstellung keine Ordnerstrukturen für den neuen Mail-Account auf dem Mailserver an.

Dovecot legt Ordner automatisch beim ersten Zugriff auf sie an, wenn sie nicht bereits im Dateisystem existieren. Ein Zugriff geschieht entweder über das IMAP-Protokoll durch das Programm des Benutzers oder bei der Einlieferung von neuen E-Mails durch Postfix per LMTP. Bei der Einlieferung wird automatisch das aktive Sieve-Skript ausgeführt.

Durch das automatische Anlegen eines Sieve-Skriptes zur Spam-Filterung wird bei neuen Benutzern auf UCS-Mailservern mindestens der Wurzelordner der Ordnerstruktur angelegt.

Viele Benutzer sind es gewohnt, einige typische Ordner in einem neuen Account vorzufinden. Damit diese Ordner automatisch von den Client-Programmen angezeigt werden, müssen sie bereits für den Benutzer abonniert sein.

Dazu dienen die UCR Variablen mail/dovecot/mailboxes/auto/NAME=VALUE. Sie erlauben das automatische Erzeugen und Abonnieren von Ordnern zu konfigurieren. Ist VALUE auf create gesetzt, so wird der Ordner NAME automatisch erzeugt. Ist VALUE auf subscribe gesetzt, wird er zusätzlich automatisch abonniert. Bei der Einstellung no geschieht nichts.

Soll z.B. der Papierkorb automatisch erzeugt und abonniert werden, so konfiguriert das:

# ucr set mail/dovecot/mailboxes/auto/Trash=subscribe
# doveadm reload

Darüber hinaus können Ordner mit einer „special-use“ Markierung nach RFC 6154 versehen werden. Diese Markierungen dienen dazu Mail-Clients anzuzeigen, welchen Zweck ein Ordner erfüllt. Gültige Markierungen sind: \All, \Archive, \Drafts, \Flagged, \Junk, \Sent und \Trash. Für die üblichen Ordner (Drafts, Junk, Spam, Sent, Trash) wurden diese Variablen bei der Installation bereits gesetzt. Möglicherweise aber heißt der Ordner „Gesendet“ anders, dann kann er z.B. so markiert werden:
# ucr set "mail/dovecot/mailboxes/special/Gesendete Objekte=\Sent"

Und damit der Ordner automatisch abonniert wird:
# ucr set "mail/dovecot/mailboxes/auto/Gesendete Objekte=subscribe"

Für die Aktivierung der Änderungen ist ein Neueinlesen der Dovecot-Konfiguration notwendig:
# doveadm reload

Quota bei Dovecot einstellen und überwachen

Die von Dovecot überwachte E-Mail-Quota kann pro Benutzer eingestellt werden. In den erweiterten Einstellungen eines Benutzers wird die E-Mail-Quota in MB angegeben. Dort gemachte Einstellungen werden sofort wirksam. Um sie bei mehreren Benutzern gleichzeitig zu ändern, kann die Mehrfachbearbeitungsfunktion verwendet werden.

Die Anzeige des Speicherverbrauchs von einzelnen oder allen Benutzern ist mit folgenden Befehlen möglich:

# doveadm quota get -u <email>
# doveadm quota get -A

Damit Benutzer nicht von einem plötzlichen Erreichen der Quota überrascht werden, können Warnhinweise bei bestimmten Füllständen der Mailbox versandt werden. Der Wert, bei dessen Überschreiten Nachrichten verschickt werden sollen, der Betreff und der Inhalt der Nachrichten sind konfigurierbar.

UCS hat eine Nachricht bei je 80% und 95% voreingestellt:

  • mail/dovecot/quota/warning/subject=”Quota-Warning“
  • mail/dovecot/quota/warning/text/80=”Your mailbox has filled up to over $PERCENT%.“
  • mail/dovecot/quota/warning/text/95=”Attention: Your mailbox has already filled up to over $PERCENT%.“

Die Zeichenkette $PERCENT wird in der E-Mail mit dem überschrittenen Wert ersetzt.

Sie können z.B. folgende deutschen Äquivalente konfigurieren:

# ucs set "mail/dovecot/quota/warning/subject=Quota Warnung" \
"mail/dovecot/quota/warning/text/80=Ihr Postfach ist zu über $PERCENT% gefüllt." \
"mail/dovecot/quota/warning/text/95=Achtung: Ihr Postfach ist bereits zu über $PERCENT% gefüllt. Bitte löschen Sie einige Nachrichten oder wenden Sie sich an den Administrator."

Dovecot im Backend

Neue Nachrichten für Benutzer, die ihre Quota überschritten haben, können Backscatter erzeugen oder die Queues des Mailservers verstopfen. Daher wird angestrebt, Mails für volle Mailboxen gleich beim Empfang abzulehnen. Sie erzeugen so später keinen Backscatter, welcher sich negativ auf die Reputation des eigenen Mail-Servers auswirkt.

Postfix und Dovecot sind auf einem UCS-Mailserver so eingerichtet, dass Postfix bei Dovecot während des SMTP-Dialogs nachfragt, ob es einen Grund gibt die Mail abzulehnen. Zu diesem Zweck läuft bei Dovecot der anfangs erwähnte „Dienst zur Prüfung der Mail-Quota“ („quota-status service“). Dieser ist standardmäßig so eingerichtet, dass er nur auf dem loopback interface auf Anfragen antwortet – also nur von einem auf dem gleichen System laufenden Dienst, wie z.B. Postfix, befragt werden kann.

Soll nun ein Postfix auf einem vorgelagerten System den quota-status service nutzen, so muss dieser auf dem externen Interface laufen und die Firewallregeln müssen angepasst werden:

# ucr set mail/dovecot/quota-status/ip =0.0.0.0 \
mail/dovecot/quota-status/port =12340 \
security/packetfilter/package/univention-mail-dovecot/tcp/12340/all="ACCEPT" \
security/packetfilter/package/univention-mail-dovecot/tcp/12340/all/en="quota-status"
# /etc/init.d/univention-firewall restart
# doveadm reload

Konfigurationsänderungen bei Dovecot aktivieren

Nach dem Ändern von Konfigurationsdateien muss Dovecot noch mitgeteilt werden, dass es sie neu einlesen soll:
# doveadm reload

Bereits eingeloggte Benutzer sind üblicherweise nicht von Konfigurationsänderungen betroffen, da nur der Master-Prozess die Konfiguration neu einliest. Bestehende Verbindungen laufen in eigenen Prozessen und sind daher nicht von den Änderungen betroffen. Um zu sehen welche Benutzer gerade eingeloggt sind und von welchen Prozessen diese betreut werden, kann folgender Befehl ausgeführt werden:
# doveadm who

Um bestehende Verbindungen von Benutzern zu trennen, kann folgender Befehl ausgeführt werden:
# doveadm kick <email>

Es ist möglich die Wildcards '?' und '*' zu verwenden, z.B.
# doveadm kick ‚*@example.org‘

Für IMAP-Clients hat eine solche Trennung normalerweise keine negative Auswirkung. Sie verbinden sich nach einiger Zeit einfach erneut.

Es gibt jedoch Konfigurationsänderungen, die nur durch einen Neustart des gesamten Dovecot-Servers aktiviert werden. Das sind z.B. Änderungen am Authentifikationscaching. In solchen Fällen kann der Dovecot-Dienst über das UMC Modul “Systemdienste” oder mit
# /etc/init.d/dovecot restart
neu gestartet werden.

Migration von Cyrus zu Dovecot

Eine automatische Migration von Cyrus zu Dovecot wird vom UCS Mail-Stack nicht unterstützt. Ein zukünftiger Artikel in der Univention Support Database (SDB) wird das Vorgehen für einige Szenarien beschreiben.

Installation der Mailserver-App mit Cyrus

Mit der Integration von Dovecot als Standard-IMAP-Server für UCS wurde der vorherige IMAP-Server Cyrus jedoch noch nicht auf das Abstellgleis geschoben. Cyrus ist weiterhin verfügbar und installierbar, um den IMAP- und POP3-Dienst bereit zu stellen.

Um den Univention Mail Server mit Cyrus zu installieren, ist folgender Befehl auszuführen:
# univention-install univention-mail-server univention-mail-cyrus

Weiteres zur Cyrus-Installation und -Integration findet sich in der Cyrus-Mail-Server Dokumentation.

Microsoft Outlook mit Dovecot und UCS

In der UCS-Standardkonfiguration können standardkonforme POP3- und IMAP-Clients wie Mozilla Thunderbird, K9-Mail, Horde und OX App Suite ihre Nachrichten ohne Probleme von Dovecot abholen. Für Outlooks POP3-Implementierung werden von UCS automatisch Workarounds aktiviert.

Da Microsoft Outlook STARTTLS nicht unterstützt, muss zur Verbindung mit Dovecot in Outlook für das Mailkonto in den erweiterten Einstellungen „SSL“ aktiviert werden (für IMAP auf Port 993, für POP3 auf Port 995). Alternativ kann das Erzwingen von Verschlüsselung mit dem Setzen der UCR Variablen mail/dovecot/ssl/disable_plaintext_auth=no deaktiviert werden. Aus Sicherheitsgründen wird hiervon dringend abgeraten, da ansonsten Passwörter unverschlüsselt übertragen werden.

Performance / Skalieren

In UCS wird Dovecot für jeweils maximal 400 gleichzeitige Verbindungen per IMAP oder POP3 vorkonfiguriert. Wie bei anderen IMAP-Servern auch, kann eine Installation mit dieser Einstellung unter Umständen jedoch deutlich weniger Benutzer als 400 versorgen. Dies hängt vom Verhalten der Clients ab: manche mobile Clients schließen z.B. ungenutzte Verbindungen nicht korrekt oder es werden von Webmailern mehrere Verbindungen pro Benutzer geöffnet.

Die Beschränkungen dienen primär dazu, einem denial of service-Angriff durch sehr viele geöffnete Prozesse und Netzwerkverbindungen zu widerstehen.

Wenn das Limit erreicht ist, schreibt Dovecot eine Nachricht ins Logfile unter /var/log/dovecot.info:
master: Warning: service(imap-login): process_limit (400) reached, client connections are being dropped

Mit Hilfe des Befehls doveadm who können Sie jederzeit nachschauen, wer von welcher IP aus wie oft eingeloggt ist. Die Option „-1“ führt dazu, dass für jede Verbindung eines Benutzers eine eigene Zeile ausgegeben wird. Dies kann man nutzen, um die Anzahl der offenen Verbindungen zu zählen:
# doveadm who -1 | wc -l

Um die Schranken zu verändern, können die UCR Variablen mit dem Präfix mail/dovecot/limits/* angepasst werden. Der Vorgang ist auf Grund des komplexen Zusammenspiels dieser Variablen nur semi-automatisch. Die Bedeutung aller Variablen kann in der Dovecot-Dokumentation im Abschnitt Service configuration nachgelesen werden. Soll z.B. die erlaubte Anzahl an gleichzeitigen POP3- und IMAP-Verbindungen auf 3000 erhöht werden, muss folgendes ausgeführt werden:
# ucr set mail/dovecot/limits/default_client_limit=3000 \
mail/dovecot/limits/default_process_limit=3000
# doveadm reload

Durch das komplexe Zusammenspiel mehrerer Schranken in Dovecot kann es sein, dass nach dem Ändern von Schranken in der Logdatei /var/log/dovecot.info auf mögliche Inkonsistenzen hingewiesen wird:
config: Warning: service auth { client_limit=2000 } is lower than required under max. load (15000)
config: Warning: service anvil { client_limit=1603 } is lower than required under max. load (12003)

Nach jeder Änderung sollte diese Datei daher auf diese oder ähnliche Meldungen hin geprüft und ggf. die Schranken entsprechend angepasst werden.

Es ist zu beachten, dass das vom Linux-Kernel kontrollierte ulimit für die erlaubte maximale Anzahl gleichzeitig geöffneter Dateien/Verbindungen pro Prozess wird nur bei einem Neustart des Dovecot-Dienstes verändert, daher:
# /etc/init.d/dovecot restart

High-Performance Mode

In der UCS-Standardkonfiguration wird Dovecot im „High-security mode“ betrieben. Jede Verbindung wird von einem separaten Login-Prozess betreut. Login-Prozesse sind zuständig für Authentifikation und dienen als SSL-Proxy zwischen Benutzer und IMAP-Prozess. Sollte die Sicherheit eines Login-Prozesses kompromittiert werden (eine Sicherheitslücke in z.B. Dovecot oder OpenSSL), kann nur auf das Passwort und die E-Mails des Benutzers dieses Prozesses zugegriffen werden.

Diese Sicherheit hat einen Preis: pro Benutzer und Verbindung laufen mindestens zwei separate Prozesse.

Installationen mit 10.000en Benutzern stoßen daher an Betriebssystemgrenzen. Dovecot kann in einem solchen Fall im „High-performance mode“ betrieben werden. Um ihn zu aktivieren, wird den Login-Prozessen erlaubt, mehr als eine Verbindung zu bedienen. Dies wird konfiguriert mit:
# ucr set mail/dovecot/limits/imap-login/service_count=0

Wird nun z.B. client_limit=1000 und process_limit=100 gesetzt, so werden nur 100 Login-Prozesse gestartet, diese bedienen jedoch jeweils bis zu 1000 Verbindungen – insgesamt können also 100.000 Verbindungen bedient werden.

Der Preis: Würde ein Login-Prozess kompromittiert, könnte der Angreifer womöglich die Logindaten und E-Mails aller anderen Benutzer, die dieser Prozess bedient, abgreifen.

Um die Last der Login-Prozesse zwischen allen CPU-Kernen gleichmäßig aufzuteilen, sollte mail/dovecot/limits/imap-login/process_min_avail auf die Anzahl der CPU-Kerne im System gesetzt werden.

Relevante Dovecot-Dokumentation:

http://wiki2.dovecot.org/PerformanceTuning
http://wiki2.dovecot.org/LoginProcess
http://wiki2.dovecot.org/Services

Auth caching

Das Authentifizieren von Benutzern über LDAP ist CPU-intensiv. Um den LDAP-Server zu entlasten und die Login-Geschwindigkeit für Benutzer zu erhöhen, werden Login-Daten in einem Zwischenspeicher vorgehalten.

Einstellungen zur Gültigkeitsdauer von positiven und negativen Cache-Treffern sowie der Größe des Caches können mit den UCR-Variablen mail/dovecot/auth/cache_* getroffen werden.

Zum Auslesen von Statistiken über die Ausnutzung des Caches, muss ein Signal an den Haupt-Authentifizierung-Prozess gesendet werden:
# kill -s SIGUSR2 <PID von „dovecot/auth“>

Es ist wichtig, das Signal nur an den richtigen Prozess zu senden, um nicht versehentlich den ganzen IMAP-Server zu beenden. Der richtige Prozess heißt “dovecot/auth” ohne „-w“.

Ein Cache kann stören, wenn das Passwort eines Benutzers geändert wird und die Änderung sofort wirksam werden soll. Für diesen Fall kann Dovecot zum sofortigen Leeren des Caches aufgefordert werden:
# doveadm auth cache flush

Logging

Zur Beobachtung von Dovecot werden logfiles geschrieben. Standardmäßig werden Meldungen an syslog geschickt, und dieses sortiert sie je nach loglevel: /var/log/dovecot.err, dovecot.warn oder dovecot.info. /var/log/dovecot.log enthält die Meldungen aller loglevel inklusive “debug” und dovecot.lmtp enthält nur die Meldungen des LMTP-Dienstes.

Die für das Logging relevanten UCR Variablen sind: mail/dovecot/logging/*. Mit ihnen kann sowohl angepasst werden wohin, als auch wovon mehr als nur Fehlermeldungen geloggt werden soll.

Bei Änderungen an der Konfiguration der Logging-Ziele (log_path, info_log_path, debug_log_path, syslog_facility) helfen die „dovecot log“-Kommandos die neuen Einstellungen zu überprüfen:
# doveadm log test
# doveadm log find

Daniel Tröder ist Open Source Software Engineer und kümmert sich zur Zeit besonders intensiv um die Weiterentwicklung des Mail-Stacks von UCS.

Was ist Ihre Meinung? Hinterlassen Sie einen Kommentar!

Kommentare

  1. wow
    Vielen Dank für diesen ausführlichen Blogpost – die dovecot Integration schaut wirklich gelungen aus.

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.