1. Index
  2. Debian
  3. Desktop
  4. Heimserver
  5. Webserver

Nachrichten speichern

Dovecot speichert lokal von Postfix zugestellte Nachrichten im Postfach des jeweiligen Benutzers. Benutzer authentifizieren sich mit ihrem Kerberos Ticket oder Passwort, um Zugriff auf ihre Nachrichten über IMAP zu erhalten. Das veraltete POP3 aktivieren wir nicht.

Pakete installieren

Dovecot besteht aus mehreren Komponenten, von denen wir Folgende verwenden:

apt install dovecot-{core,lmtpd,imapd,ldap,gssapi,sieve,managesieved}

Für den Schlüsselaustausch erzeugen wir einen Satz Diffie-Hellmann-Parameter.

openssl dhparam -out /etc/ssl/dh4096.pem 4096

Dovecot konfigurieren

Dovecot verwendet das Let's Encrypt Zertifikat für TLS. Klartext-Passwörter werden ausschließlich über verschlüsselte Verbindungen via PAM geprüft, oder besser noch via GSSAPI gegen Kerberos authentifiziert.

/etc/dovecot/dovecot.conf
#auth_verbose = yes #disable_plaintext_auth = yes ssl_dh = </etc/ssl/dh4096.pem ssl_key = </etc/letsencrypt/live/illusioni.de/privkey.pem ssl_cert = </etc/letsencrypt/live/illusioni.de/fullchain.pem auth_mechanisms = plain gssapi auth_krb5_keytab = /etc/krb5/dovecot.keytab auth_gssapi_hostname = "$ALL" userdb { driver = ldap args = /etc/dovecot/dovecot-ldap.conf } passdb { driver = pam }

Sobald ein neues Zertifikat ausgestellt wird, laden wir die Konfiguration neu.

/etc/letsencrypt/renewal-hooks/post/reload
doveadm reload

Benutzer authentifizieren

In dieser Konfiguration bezieht Dovecot Benutzerdaten aus dem LDAP-Verzeichnis mit den zuvor erstellten Zugangsdaten. Der Benutzer-Filter findet Datensätze entweder anhand des Benutzernamens oder der hinterlegten Elektropost-Adresse. Die Benutzer-Attribute ordnen die von Dovecot benötigten Informationen den LDAP-Attributen zu.

/etc/dovecot/dovecot-ldap.conf
uris = ldap://localhost tls = yes tls_ca_cert_file = /etc/ssl/ca.crt base = ou=users,dc=illusioni,dc=de dn = cn=dovecot,ou=daemons,dc=illusioni,dc=de dnpass = Password user_filter = (|(uid=%u)(mail=%u)) user_attrs = \ =mail=mbox:/srv/mail/%{ldap:uid},\ =home=%{ldap:homeDirectory},\ =uid=%{ldap:uidNumber},\ =gid=%{ldap:gidNumber}

Nun sollte doveadm user '*' alle Benutzer auflisten, die Elektropost empfangen können.

Postfächer konfigurieren

Eintreffende Nachrichten werden dann auf die Postfächer verteilt. Ob man sich für das Maildir- oder das Mbox-Format entscheidet ist Geschmackssache. Der Platzhalter %u steht für den Benutzernamen, %d für den Namen der Internet-Domäne, falls man diese in den Pfad einbauen möchte. Desweiteren werden häufig verwendete Ordner mit angelegt.

/etc/dovecot/dovecot.conf
mail_location = mbox:/srv/mail/%u namespace inbox { inbox = yes; mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Junk { auto = create special_use = \Junk } mailbox Trash { auto = create special_use = \Trash } mailbox Archive { auto = subscribe special_use = \Archive } mailbox Sent { auto = subscribe special_use = \Sent } }

Protokolle definieren

Dieser Abschnitt legt fest, welche Protokolle mit welchen Erweiterungen gestartet werden.

/etc/dovecot/dovecot.conf
protocols = lmtp imap sieve protocol lmtp { postmaster_address = postmaster@illusioni.de mail_plugins = sieve } protocol imap { mail_plugins = imap_sieve } protocol sieve { }

Nachrichten empfangen

Postfix authentifiziert Benutzer über den von Dovecot angebotenen SASL-Mechanismus und liefert lokal zuzustellende Nachrichten an den LMTP-Daemon aus. Dazu legen diese Dienste Unix Domain Sockets mit entsprechenden Zugriffsrechten an.

/etc/dovecot/dovecot.conf
service auth { unix_listener /var/spool/postfix/private/dovecot-auth { mode = 0660 user = postfix group = postfix } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } }

Nachrichten replizieren

Nachrichten filtern

Mit dem Pidgeonhole Plugin kann der LDA eingehende Nachrichten auf Unterordner verteilen. Die Filterregeln lassen sich zum Beispiel über das Sieve Plugin für Mozilla Thunderbird verwalten. Außerdem können Benutzer den Spamfilter trainieren, indem Sie Nachrichten in den Junk-Ordner hinein oder hinaus verschieben.

/etc/dovecot/dovecot.conf
service managesieve-login { } service managesieve { } plugin { sieve = ~/.dovecot.sieve sieve_dir = ~/sieve sieve_plugins = sieve_imapsieve sieve_extprograms sieve_pipe_bin_dir = /etc/dovecot/sieve sieve_global_extensions = +vnd.dovecot.pipe # From elsewhere to Junk folder imapsieve_mailbox1_name = Junk imapsieve_mailbox1_causes = COPY imapsieve_mailbox1_before = file:/etc/dovecot/sieve/report-spam.sieve # From Junk folder to elsewhere imapsieve_mailbox2_name = * imapsieve_mailbox2_from = Junk imapsieve_mailbox2_causes = COPY imapsieve_mailbox2_before = file:/etc/dovecot/sieve/report-ham.sieve }

Dazu muss man noch einen Satz Sieve-Skripte erstellen, die beim Verschieben von Nachrichten in den Junk-Ordner diese als Spam trainieren…

/etc/dovecot/sieve/report-spam.sieve
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"]; if environment :matches "imap.email" "*" { set "email" "${1}"; } pipe :copy "learn-spam.sh" [ "${email}" ];

…oder beim Hinausverschieben als Ham.

/etc/dovecot/sieve/report-ham.sieve
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"]; if environment :matches "imap.mailbox" "*" { set "mailbox" "${1}"; } if string "${mailbox}" "Trash" { stop; } if environment :matches "imap.user" "*" { set "username" "${1}"; } pipe :copy "learn-ham.sh" [ "${email}" ];

Und die referenzierten Shell-Skripte für Spam…

/etc/dovecot/sieve/learn-spam.sh
exec /usr/bin/rspamc -h localhost:11334 learn_spam

…und Ham.

/etc/dovecot/sieve/learn-ham.sh
exec /usr/bin/rspamc -h localhost:11334 learn_ham

Zum Schluß werden die Sieve-Skripte noch kompiliert und schließlich Dovecot neu gestartet.

sievec /etc/dovecot/sieve/report-ham.sieve
sievec /etc/dovecot/sieve/report-spam.sieve
chmod +x /etc/dovecot/sieve/learn-ham.sh
chmod +x /etc/dovecot/sieve/learn-spam.sh
systemctl restart dovecot

Anmeldung testen

Ein manueller Test zeigt, ob die Verbindung per TLS funktioniert.

openssl s_client -connect localhost:143 -starttls imap
a login "User" "Password"
a OK Logged in
b select inbox
^D

Literatur

  1. Thomas Leister: Mailserver mit Dovecot, Postfix, MySQL und Rspamd unter Debian 9 Stretch, 2017
  2. Cullum Smith: How To Run Your Own Mail Server, 2017
  3. Dovecot Wiki: Replacing antispam plugin with IMAPSieve
  4. Dovecot Wiki: Replication with dsync
  5. Dovecot Wiki: Doveadm
  6. Mozilla Thunderbird: Sieve Add-On
  7. RFC 3501: Internet Message Access Protocol (IMAP) - Version 4rev1, 2003