Nachdem die Grundvorraussetzungen im ersten Teil geschaffen wurden, wenden wir uns in diesem Teil der Anpassung, Installation und Konfiguration von dovecot zu. Obwohl fast alles im Blog detailliert beschrieben ist, empfehle ich, die Konfigurationsdateien für das Mailsystem herunterzuladen.
Installation von Dovecot
Nach einem
sudo apt-get install dovecot-common dovecot-imapd dovecot-pop3d
sind die notwendigen Dovecot-Pakete installiert.
Anpassung der Installation
Dovecot verwendet zur Zustellung von Mails den Dovecot Local Delivery Agent (LDA). Damit dieser die Mails in allen Verzeichnissen der Benutzer ablegen kann, benötigt er root-Rechte, die wir über das Setuid-Bit vergeben. Zum Mailversand setzen wir jedoch exim als Message Transfer Agent (MTA) ein, so dass Mails nie direkt via Dovecot-LDA, sondern immer indirekt über exim zugestellt werden. Da deshalb nur exim den Dovecot LDA aufrufen muss, wäre es sicherheitstechnisch bedenklich, könnte jeder Benutzer den Dovecot LDA mit Setuid-Bit aufrufen (eine Sicherheitslücke im Dovecot LDA würde dann sofort das gesamte System kompromittieren). Deshalb richten wir einen speziellen Benutzer namens secmail ein, der diese Rechte besitzt und dessen sich exim dann bedienen soll.
sudo adduser --system --group --disabled-login --shell /bin/false --home /home/secmail secmail
Anschließend müssen wir für unsere Konfiguration das setuid-Bit für Dovecots LDA setzen, damit dieser zur Zustellung jeweils auf die jeweilige Benutzer-ID wechseln kann. Durch den Aufruf von dpkg-statoverride werden die Berechtigungen auch bei Paketaktualisierungen beibehalten, obwohl der Einsatz auch einige Nachteile mit sich bringt.
sudo dpkg-statoverride --update --add root secmail 4710 /usr/lib/dovecot/deliver
Konfiguration von dovecot
Zunächst kopieren wir die im ersten Teil der Anleitung erzeugten Dateien des Client-Zertifikats für dovecot in das Konfigurationsverzeichnis und passen die Berechtigungen an.
sudo cp /etc/ssl/easy-rsa/keys/dovecot-client.key /etc/ssl/easy-rsa/keys/dovecot-client.crt /etc/dovecot sudo chown root.dovecot /etc/dovecot/dovecot-client.{key,crt} sudo chmod 640 /etc/dovecot/dovecot-client.key
Die Konfiguration von dovecot ist im Vergleich zu anderen Mailservern wie qmail, courier-imap oder cyrus einfach und gut dokumentiert. Meine um Kommentare und Leerzeilen verkürzte Version sieht so aus:
protocols = imap imaps managesieve log_path = /var/log/dovecot.log log_timestamp = "%Y-%m-%d %H:%M:%S " ssl_cert_file = /etc/ssl/certs/myserver.crt ssl_key_file = /etc/ssl/private/myserver.key ssl_ca_file = /etc/ssl/certs/ca.crt ssl_verify_client_cert = yes login_user = dovecot login_greeting = Ready. mail_privileged_group = protocol imap { login_executable = /usr/lib/dovecot/imap-login mail_executable = /usr/lib/dovecot/imap } protocol pop3 { pop3_uidl_format = %08Xu%08Xv } protocol managesieve { login_executable = /usr/lib/dovecot/managesieve-login mail_executable = /usr/lib/dovecot/managesieve sieve=~/.dovecot.sieve sieve_storage=~/sieve } protocol lda { postmaster_address = paul@myserver mail_plugins = cmusieve mail_plugin_dir = /usr/lib/dovecot/modules/lda log_path = /var/log/dovecot-deliver.log auth_socket_path = /var/run/dovecot/auth-master } auth_executable = /usr/lib/dovecot/dovecot-auth auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@ auth default { mechanisms = plain passdb ldap { args = /etc/dovecot/dovecot-ldap-passdb.conf } userdb ldap { args = /etc/dovecot/dovecot-ldap-userdb.conf } user = root socket listen { master { path = /var/run/dovecot/auth-master mode = 0660 group = secmail } } } dict { } plugin { }
Eine entsprechende Datei kann man einfach durch ein
cat /etc/dovecot/dovecot.conf | egrep -v '(^\t* *#|^\t* *$)'
erzeugen. Hier ist der Inhalt der referenzierten Dateien dovecot-ldap-passdb.conf und dovecot-ldap-userdb.conf.
dovecot-ldap-passdb.conf:
hosts = myserver tls = yes tls_ca_cert_file = /etc/ssl/certs/ca.crt tls_cert_file = /etc/dovecot/dovecot-client.crt tls_key_file = /etc/dovecot/dovecot-client.key tls_require_cert = demand auth_bind = yes auth_bind_userdn = uid=%Ln,ou=users,o=effinger ldap_version = 3 base = uid=%Ln,ou=users,o=effinger
dovecot-ldap-userdb.conf:
hosts = myserver tls = yes tls_ca_cert_file = /etc/ssl/certs/ca.crt tls_cert_file = /etc/dovecot/dovecot-client.crt tls_key_file = /etc/dovecot/dovecot-client.key tls_require_cert = demand ldap_version = 3 base = uid=%Ln,ou=users,o=effinger scope = subtree user_attrs = dcMailMessageStore=home=%$/%Ld,uidNumber=uid,gidNumber=gid,=mail=maildir:~/maildir:INBOX=~/maildir/INBOX user_filter = (|(mail=%d)(&(dcSubMailAddress=%d)(dcAccountStatus=active)))
Nach einem
sudo /etc/init.d/dovecot restart
sollte man den Login testen. Dazu kann man die Anleitung zum Testen von IMAP mit telnet von A. P. Lawrence verwenden. Das sieht dann beispielsweise so aus:
$ telnet localhost 143 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. * OK Ready. as1 login paul@paul mypassword as1 OK Logged in. as2 logout * BYE Logging out as2 OK Logout completed. Connection closed by foreign host.
Wichtig ist dabei, beide E-Mail-Addressen zu überprüfen (lokal und extern). Im Beispiel hier muss man also die logins paul@paul sowie paul@paulpanzer@gmx.de testen.
Zum Schluss möchte ich noch auf einige Seiten hinweisen, die bei der Konfiguration von dovecot hilfreich für mich waren
- Offizielle Docevot-Dokumentation
- Beispielhaftes Server-Setup mit virtuellen Benutzern
- Secure Virtual Mailserver Howto
In Teil 3 befassen wir uns mit der Einrichtung von Exim als MTA (Message Transfer Agent).


[...] und getmail unter Ubuntu – (4) getmail Nachdem wir in den drei ersten Teilen zunächst OpenLDAP, Dovecot und Exim eingerichtet haben, geht es nun daran, getmail so einzurichten, dass Mails von einem [...]
[...] geschrieben habe. In den letzten vier Blogartikeln wurde das Zusammenspiel der Grundkomponenten mit Dovecot, Exim, OpenLDAP und getmail konfiguriert. Jetzt geht es ans Feintuning – das Einrichten eines [...]