10.3 POP3/IMAP-Server mit Dovecot
Dovecot ist der Shooting-Star unter den IMAP-Server: In den letzten zehn Jahren hat er sich vom späten Newcomer zum technologisch führenden IMAP-Server entwickelt. Mächtig, robust, übersichtlich, logisch: Dovecot ist Admins Liebling.
Mit wenigen Handgriffen richten Sie sich mit Dovecot einen POP3- und IMAP-Server für Familie, Arbeitsgruppen, Unternehmen oder auch kleinen ISPs mit fünfstelligen Nutzerzahlen ein.[ 15 ]
10.3.1 Vorbereitungen im Linux-System
Es empfiehlt sich, alle Dovecot-Accounts unter einer einheitlichen User- und Gruppenkennung zu betreiben, um unabhängig vom System zu sein und um Zugriffsprobleme zu vermeiden, sollten Sie später fortgeschrittene Konfigurationen mit Shared Foldern zwischen den Nutzern betreiben wollen.
Zudem würden getrennte Userkennungen hier sowieso keine nennenswerten weiteren Sicherheitsvorteile bringen, da Dovecot ohnehin auf die Maildaten aller Nutzer zugreifen können muss. Der User- und Gruppenname vmail und die User-/Gruppen-ID »10.000« haben sich als Best Practice für die Speicherung der Dovecot-Mails und als gemeinsame System-UID aller Dovecot-Nutzer eingebürgert.
mail:~ # groupadd -g 10000 vmail
mail:~ # useradd -u 10000 -g 10000 -s /bin/false vmail
Listing 10.51 Anlegen des Users »vmail«
Außerdem können Sie bei dieser Gelegenheit gleich den Ordner vorbereiten, in dem Dovecot später seine E-Mails speichern soll. Je nach persönlicher Vorliebe bietet sich hier /srv/vmail oder /var/vmail an – nicht zu verwechseln mit /var/mail, dem »klassischen« Pfad des Linux-Systems für die Mails der echten Systemuser:
mail:~ # mkdir /srv/vmail
mail:~ # chown vmail:vmail /srv/vmail
mail:~ # chmod 770 /srv/vmail
Listing 10.52 Anlegen des richtigen Verzeichnisses zur Speicherung der E-Mails
10.3.2 Log-Meldungen und Debugging
Die Konfiguration von Dovecot spielt sich in /etc/dovecot/dovecot.conf sowie in zahlreichen aufgesplitteten Unterdateien in /etc/dovecot/conf.d/* ab. Dabei ist es eigentlich egal, wo ein Parameter tatsächlich eingetragen wird. Aus Sicht von Dovecot sind alle Konfigurationsdateien ein großes Ganzes. Aber um als Administrator den Überblick zu behalten und um die vorhandene Dokumentation in den Kommentaren der Konfigurationsdatei besser im Blick zu haben, empfiehlt es sich, die jeweiligen Parameter stets an Ort und Stelle zu pflegen, wo sie bereits vorbereitet und kommentiert sind.
Bevor Sie mit Dovecot starten, sollten Sie zuerst die Gesprächigkeit von Dovecot in seinen Logfiles erhöhen. Die ausführlicheren Meldungen können am Anfang sehr hilfreich sein, um zu verstehen, was Dovecot denkt und wie es vorgeht; später im Produktivbetrieb sollten Sie insbesondere die Debug-Parameter wieder zurücknehmen. In /etc/dovecot/dovecot.conf sollten Sie zuerst Folgendes festlegen:
-
verbose_proctitle = yes
Ist diese Einstellung aktiv, blendet Dovecot in der Prozessliste bei seinen pop3d- und imapd-Prozessen ein, welcher User von welcher IP diesen Prozess initiiert hat; gegebenenfalls wird auch ergänzt, ob SSL aktiv ist:1770 ? S 0:00 dovecot/imap [klaus@example.com 10.0.40.6 IDLE, TLS]
Listing 10.53 Dovecot zeigt übersichtlich, wem ein Prozess gehört.
Diese Einstellung ist sinnvoll, um das System zu überwachen. Ressourcenfresser können so leicht gefunden und identifiziert werden. Aus Datenschutzgründen dürfen Sie diese Einstellung jedoch nicht auf Systemen vornehmen, auf denen neben root auch weiterhin normale User Shell-Logins haben und die Prozessliste sehen könnten.
Des Weiteren können Sie in /etc/dovecot/conf.d/10-logging.conf Folgendes anpassen:
-
auth_verbose = yes
führt zu umfangreichen Log-Meldungen rund um den Authentifizierungsprozess. -
auth_debug = yes
debuggt den Authentifizierungsprozess in jedem Detail, schlüsselt auch die LDAP- oder Datenbankkommunikation auf (sinnvoll zu Beginn, wenig sinnvoll im Live-Betrieb). -
mail_debug = yes
debuggt ausführlich, wie Dovecot das Mailverzeichnis des Users sucht und das verwendete Speicherformat erkennt.
10.3.3 User-Authentifizierung
Dovecot ist gleichzeitig ein POP3- und IMAP-Server und bietet verschiedene Speicherformate an, um die Maildaten der Nutzer sicher auf der Festplatte zu verwahren. Für IMAP-Server bis zu 3 oder 4 TByte Speichervolumen sollten Sie dabei auf das altbewährte Maildir-Format zurückgreifen, bei dem Sie als Administrator nicht viel falsch machen können und bei dessen Administration wenig zu beachten ist.
Tragen Sie darum in die /etc/dovecot/conf.d/10-mail.conf Folgendes ein:
mail_location = maildir:~/Maildir
Listing 10.54 Festlegung von Maildir als Standard-Speicherformat
Ihr System wäre damit bereits fertig benutzbar für alle User, die Sie in /etc/passwd angelegt haben. Doch für einen Mailserver ist es meistens erstrebenswerter, System- und Mailnutzer nicht miteinander zu vermischen.
Dovecot kennt darum die Möglichkeit, in /etc/dovecot/users seine ganz eigene Liste mit Usernamen und Passwörtern zu pflegen. Die Syntax von /etc/dovecot/users ist dabei identisch mit /etc/passwd, sieht man davon ab, dass im zweiten Feld auch gleich das Passwort mit gespeichert wird:[ 16 ]
mail:~ # cat /etc/dovecot/users
# Syntax: username:passwort:uid:gid:home:realname:extra_fields
bla@example.org:{PLAIN}test:10000:10000::/srv/vmail/example.org/bla::
blubb@example.com:{PLAIN}test:10000:10000::/srv/vmail/example.com/blubb::
Listing 10.55 »/etc/dovecot/users« entspricht in Aufbau und Syntax der »/etc/passwd«.
Anders als in der »echten« /etc/passwd können Sie in /etc/dovecot/users nicht nur Usernamen, sondern gleich echte Mailadressen als Login-Kennung angeben. Diese sind stets eindeutig und haben zudem den Vorteil, dass Sie Mails nicht in Postfix von der Mailadresse auf die Login-Kennung umschreiben müssen. Stattdessen können Sie – wie oben gezeigt – die hier angelegten Mailadressen direkt über die Postfix-Tabelle relay_domains bis ins Ziel routen. Auch wenn Sie später vielleicht serverseitige Mailfilterung mit Sieve einrichten wollen, um Ihre User darüber E-Mails sortieren oder Autoresponder einrichten zu lassen, ist es hilfreich, wenn E-Mails bis zum Schluss an die Kennung adressiert sind, die Sie auch im Mailheader als Mailadresse finden.
Nachdem Sie Dovecot neu gestartet haben, können Sie über das doveadm-Kommando prüfen, ob die User-Authentifizierung richtig funktioniert:
mail:~ # doveadm user blubb@example.com
field value
uid 10000
gid 10000
home /srv/vmail/example.com/blubb
mail maildir:~/Maildir
mail:~ # doveadm auth test blubb@example.com
Password:
passdb: blubb auth succeeded
Listing 10.56 »doveadm« debuggt, ob und wie ein Nutzer vorhanden ist.
In älteren Dovecot-Versionen hieß das Kommando nicht doveadm auth test, sondern lediglich doveadm auth.
mail:~ # doveadm auth blubb@example.com
Password:
passdb: peer auth succeeded
Listing 10.57 »doveam auth« gilt bei alten Dovecot-Versionen.
[+] In Abschnitt 17.17, »Benutzerauthentifizierung von Dovecot über LDAP«, zeigen wir Ihnen ausführlich, wie Sie die User-Authentifizierung von Dovecot an LDAP anbinden können.
10.3.4 Aktivierung des LMTP-Servers von Dovecot
Am besten ist es, wenn eingehende E-Mails per LMTP an Dovecot gesandt werden, damit dieser sie in die Postfächer der Nutzer speichern kann. Dovecot bringt dafür von Haus aus einen aktivierten LMTP-Server mit, der in /etc/dovecot/conf.d/10-master.cf jedoch nur als UNIXSocket vorbereitet ist. Postfix könnte Mails an diesen UNIX-Socket zustellen, doch müsste man dann im LMTP-Modul von Postfix auf eine chroot-Konfiguration verzichten. Auf einen außerhalb seiner chroot-Umgebung liegenden UNIX-Socket kann Postfix nicht zugreifen. Besser ist es darum, Dovecot auf localhost den LMTP-Port 24 öffnen zu lassen, den Postfix auch aus seiner chroot-Umgebung heraus erreichen kann. Suchen Sie dafür die Definition des LMTP-Servers in der 10-master.cf, und aktivieren Sie zusätzlich den inet_listener wie folgt:
service lmtp {
unix_listener lmtp {
#mode = 0666
}
# Create inet listener only if you can't use the above UNIX socket
inet_listener lmtp {
# Avoid making LMTP visible for the entire internet
address = 127.0.0.1
port = 24
}
}
Listing 10.58 Aktivierung des LMTP-Sockets auf TCP-Port 24
Nach einem Restart von Dovecot sollte der LMTP-Port empfangsbereit sein (siehe Lsiting ). Falls nicht, finden sich sicherlich Fehlermeldungen im Logfile.
mail:~ # telnet localhost 24
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.heinlein-support.de Dovecot ready.
quit
221 2.0.0 OK
Connection closed by foreign host.
Listing 10.59 Test-Login per LMTP bei Dovecot
Im Postfix-Teil (Abschnitt 10.1.2, »Postfix als Relay vor Exchange, Dovecot oder anderen Backends«) hatten wir das Mail-Routing in /etc/postfix/relay_domains bereits auf Basis von LMTP an einen lokalen LMTP-Server vorbereitet. Zur Erinnerung:
# Diese Domain wird an einen lokalen Dovecot/Cyrus-Server weitergegeben
example.com lmtp:[127.0.0.1]
Listing 10.60 Die Syntax der kombinierten Relay-Domains- und Routing-Tabelle
10.3.5 Einrichten von SSL/TLS-Verschlüsselung
Vermutlich haben Sie bereits SSL-Zertifikate für Postfix erzeugt oder eingebunden, wie in Abschnitt 10.1.6, »SSL/TLS für Postfix einrichten«, gezeigt. Die dort erzeugten Zertifikate können Sie auch direkt für Dovecot weiterverwenden, sofern die Zertifikatshostnamen zu den Hostnamen passen, unter denen Ihre User Ihren Mailserver ansprechen. Passen Sie dazu /etc/dovecot/conf.d/10-ssl.conf wie folgt an:
# Mögliche Werte: yes | no | required
ssl = yes
ssl_cert = </etc/ssl/certs/mail.example.com.crt
ssl_key = </etc/ssl/private/mail.example.com.key
Listing 10.61 Definition von Key und Zertifikaten für Dovecot
[+] Die führende spitze Klammer vor den beiden Pfadangaben zu Key und Zertifikat ist hier ausnahmsweise richtig. Sie dient dazu, dass Dovecot die Keys auf eine besondere Art und Weise einliest, damit sie nicht in falsche Hände geraten.
Wenn Ihre CA Zwischenzertifikate verwendet, dann tragen Sie diese ebenfalls mit in die Datei /etc/ssl/certs/mail.example.com.crt ein. Beginnen Sie dabei erst mit dem Zertifikat Ihres Servers, und fahren Sie dann jeweils mit dem nächsthöheren Zwischenzertifikat fort.
Analog zu Postfix sollten Sie darauf achten, dass Dovecot nicht 1024-Bit-Diffie-Hellman-Schlüssel verwendet, sondern auf 2048-Bit-Schlüssel nutzen. Prüfen Sie, ob in /etc/dovecot/conf.d/10-ssl.conf der folgende Eintrag auf 2048 Bit gesetzt ist, und passen Sie ihn gegebenenfalls entsprechend an:
# DH parameters length to use.
ssl_dh_parameters_length = 2048
Listing 10.62 Diffie-Hellman-Schlüssellänge auf 2048 Bit setzen
Nachdem Sie Ihren Nutzern SSL/TLS zur Verfügung gestellt haben, sollten Sie verhindern, dass diese sich über die Passwortverfahren PLAIN und LOGIN im Klartext, und damit für Dritte mitlesbar, am Server anmelden können. Stattdessen sollten Klartextanmeldungen bei sicheren Verbindungen zulässig sein – also wenn SSL/TLS verwendet wird oder wenn die Verbindung von localhost aus erfolgt. Prüfen Sie dazu den entsprechenden Eintrag zu Beginn der /etc/dovecot/conf.d/10-auth.conf:
disable_plaintext_auth = yes
Listing 10.63 Keine ungesicherten Passwortübertragungen zulassen
[+] Setzen Sie in 10-ssl.conf den Parameter ssl = requiered, so ist Ihr Dovecot nur bei Nutzung von SSL/TLS erreichbar. In heutigen Zeiten sollte eine durchgängige Verschlüsselung erstrebenswert bis selbstverständlich sein.