server:dovecot

Dovecot

Dovecot (englisch ‚Taubenschlag‘) ist ein Mailserver, der die Netzwerkprotokolle IMAP und POP3 unterstützt.

Die Software steht unter Open Source-Lizenzen und läuft unter UNIX, BSD und unioxiden Systemen wie Linux.

Der Server kann mit den Mailboxformaten maildir und mbox umgehen und ist dazu vollständig kompatibel zum Courier-Server und UW-IMAP. Seit der Version 1.0a4 ist außerdem ein dovecot eigenes Format namens dbox in Bearbeitung, welches für Hochleistungsanwendungen gedacht ist. Bis zum jetzigen Zeitpunkt bietet dbox jedoch keine ausgereifte Kompatibilität zu anderen Mailclients oder MTAs.

Apple nutzt Dovecot im Mac OS X Server der Generation 10.6 als Nachfolger von Cyrus.

Dovecot unterstützt unter anderem folgende Merkmale:

  • IMAP4rev1
  • THREAD-, IDLE- und SORT-Erweiterung
  • LMTP als Protokoll zur E-Mail Zustellung
  • Maildir++ Quota
  • Postfix und Exim (ab Version 4) können sich an dem Backend von Dovecot authentifizieren

Quelle: Wikipedia.

Neue Konfiguration erzeugen:

doveconf -Pn > dovecot-new-2.3.conf

Ab Version 2.3.x:

# alt:
#ssl_protocols = !SSLv3
# neu:
ssl_min_protocol = TLSv1.2

Ab Version 2.x wird doveadm-pw statt dovecotpw benutzt.

→ Alle nicht standardmäßig vorbelegten Einstellungen anzeigen:

dovecot -n
# listen v4 + v6:
listen= *, [::]
# v6only:
# listen=[::]
# v4only:
# listen = *

Beispiel: Für Benutzer „jane“ Nachrichten aus der INBOX in den Ordner „Archive/2011/09“ einsortieren:

doveadm move -u jane Archive/2011/09 mailbox INBOX BEFORE 2011-10-01 SINCE 01-Sep-2011
sieve-filter -v -C -u $user@$domain /home/vmail/$domain/$user/.dovecot.sieve INBOX

https://blog.bastelfreak.de/2020/08/dovecot-apply-sieve-filter-to-existing-emails/

protocol lda {
	# prevent errors: deliver(user@host): Fatal: postmaster_address setting not given"
	postmaster_address = postmaster@host.tld
}

Abwesenheitsmeldungen wie Urlaubsbenachrichtigungen lassen sich auf mehrere Arten realisieren:

Mit dovecot-sieve bzw. vacation:

vorher bei Postfix:

Für die Unterstützung von Benutzer durch einen Adminstrator ist es oft nützlich das Postfach aus Sicht des Benutzers zu betrachten. Da man das Passwort nicht hat bzw. auch nicht wissen sollte gibt es die master-Benutzer.

Im Beispiel vergibt man ein Passwort für „masteruser“ und hängt diesen Benutzername an den eigentlichen Benuzternamen mit dem Trenner „*“ ran. Der Benutzername „user@domain.tld“ wird also zu user@domain.tld*masteruser erweitert, das Passwort ist dann das hinterlegte Masterpasswort.

  1. Master-Benutzerpasswort in der Datei /etc/dovecot/masteruserdb hinterlegen: Für das Passwort „test“ hätte also der Benutzer „masteruser“ diesen Eintrag in der Datei (erzeugt mit dovecotpw -s SHA1):
    admin:{SHA1}qUqP5cyxm6YcTAhz05Hph5gvu9M=
  2. Post-login-Scripting einrichten, nimmt aus Sicht der ACLs der Master-User die Identität des Benutzers an 1):
    1. IMAP-Script, abspeichern unter beliebigem Namen (den benutzten Namen unter gegen „Path.to.IMAP-Script“ ersetzen; ggf. Pfad /usr/lib/dovecot/imap anpassen):
      #!/bin/sh
      # Debug:
      # set > /tmp/dovecot-environment.before.$USER
      export MASTER_USER="$USER"
      # Debug:
      # set > /tmp/dovecot-environment.after.$USER
      exec /usr/lib/dovecot/imap "$@"
    2. POP3-Script, abspeichern unter beliebigem Namen (den benutzten Namen unter gegen „Path.to.POP3-Script“ ersetzen; ggf. Pfad /usr/lib/dovecot/pop3 anpassen):
      #!/bin/sh
       
      # Debug:
      # set > /tmp/dovecot-environment.before.$USER
      export MASTER_USER="$USER"
      # Debug:
      # set > /tmp/dovecot-environment.after.$USER
      exec /usr/lib/dovecot/pop3 "$@"
  3. Einträge in der dovecot.conf:
    # separator for master-users, example: "login_user*master_user -> user@domain.tld*masteruser
    auth_master_user_separator=*
    
    auth default {
    
            # master users for Support-puposes
            passdb passwd-file {
                    args = /etc/dovecot/masteruserdb
                    master = yes
                    pass = yes
                    }
    }
    
    
    # Pfad zum Post-login-Script (vor dem Login aufrufen lassen, führt danach das imap/pop3-Programm aus):
    
    protocol imap {
      # needed for master-user-login (master-user takes acls of the user)
      mail_executable = Path.to.IMAP-Script
    }
    
    protocol pop3 {
      # needed for master-user-login (master-user takes acls of the user)
      mail_executable = Path.to.POP3-Script
    }

Weitere Infos:

Diese Fehlermeldung erscheint im Log von Dovecot:

warning: pipe flag `D' requires dovecot_destination_recipient_limit = 1

Der Grund ist der Eintrag in der /etc/postfix/master.cf:

# Mails per Dovecot-Deliver ausliefern -- maximal 50 Mails zeitgleich
dovecot   unix  -       n       n       -       50       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -c /etc/dovecot/dovecot.conf -f ${sender} -d ${user}@${nexthop}

Das flag „D“ bei „flags=DRhu“ erzwingt das Postfix nur ein Empfänger pro (Pipe-) Verbindung übergibt. Kommt eine mail mit mehreren Empfänger (für die alle dovecot zuständig ist) dann kommt diese Fehlermeldung und mails werden nicht an alle Empfänger zugestellt.

Lösung sind diese Zeilen, entscheidend ist „dovecot_destination_recipient_limit = 1“:

virtual_transport = dovecot
# enable "dovecot_destination_recipient_limit = 1" to prevent this warning:
#  "warning: pipe flag `D' requires dovecot_destination_recipient_limit = 1"
#  multiple recipients (to dovecot) in one mail won't work if not activated!
dovecot_destination_recipient_limit = 1

Weitere Infos siehe hier:

# needed since deb10/buster:("Error: net_connect_unix(/var/run/dovecot/stats-writer) failed: Permission de)")
service stats {
  unix_listener stats-reader {
    user = vmail
    group = vmail
    mode = 0660
  }

  unix_listener stats-writer {
    user = vmail
    group = vmail
    mode = 0660
  }
}

Der Aufruf zum Passworthash erzeugen ( doveadm pw -s SSHA256 ) will leider auch Zugriff auf den stats-writer, das lässt sich aber überschreiben: doveadm -o stats_writer_socket_path= pw -s SSHA256 so dass auch ein unprivilegiertes Programm (ohne Mailzugriff) Hashes erzeugen lassen kann.


1)
alternativ kann durch ACL-Regeln für den master-Benutzer Zugriff erlaubt werden