ubuntuusers.de

Dovecot

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

./dovecot_logo.gif Dovecot 🇬🇧 ist ein Open-Source-E-Mailserver für Linux, der die Protokolle IMAP und POP3 unterstützt. Seine Spezialität sind kleine Netzwerke (ca. 200 Mailboxen) bis hin zu großen Firmennetzwerken (über 1000 Mailboxen). Die Daten werden im mbox- bzw. Maildir-Format abgelegt und können so leicht migriert oder in E-Mail-Clients genutzt werden, die lokal auf die Daten zugreifen. Des Weiteren müssen keine Benutzer angelegt werden. Jeder lokale Benutzer kann sich direkt auf dem Mailserver mit seinem Benutzerdaten anmelden.

Installation

Grundfunktionalität

Zuerst muss das Grundpaket installiert werden [1]:

  • dovecot-core

Befehl zum Installieren der Pakete:

sudo apt-get install dovecot-core  

Oder mit apturl installieren, Link: apt://dovecot-core

Die zu installierenden Protokoll-Pakete sind abhängig von den E-Mail-Protokollen, die man anbieten möchte. Wer Dovecot z.B. als reinen IMAP-Server nutzen möchte, braucht dovecot-pop3d nicht zu installieren; umgekehrt gilt natürlich dasselbe. Mindestens eines muss aber installiert sein.

  • dovecot-imapd

  • dovecot-pop3d

Befehl zum Installieren der Pakete:

sudo apt-get install dovecot-imapd dovecot-pop3d 

Oder mit apturl installieren, Link: apt://dovecot-imapd,dovecot-pop3d

Benutzerauthentifizierung

Dovecot kann sich gegen sehr viele Benutzerdatenbanken authentifizieren. Neben lokal gespeicherten Passwortdatenbanken oder der Authentifizierung anhand der Systembenutzer kann LDAP oder eine klassische Datenbank benutzt werden. Dovecot unterstützt MySQL, PostgreSQL und SQLite.

  • dovecot-ldap (optional)

  • dovecot-mysql (optional)

  • dovecot-pgsql (optional)

  • dovecot-sqlite (optional)

Befehl zum Installieren der Pakete:

sudo apt-get install dovecot-ldap dovecot-mysql dovecot-pgsql dovecot-sqlite 

Oder mit apturl installieren, Link: apt://dovecot-ldap,dovecot-mysql,dovecot-pgsql,dovecot-sqlite

Hilfspakete

Zudem bietet Dovecot noch einige Hilfspakete. Insbesondere die beiden Sieve-Pakete, die eine serverseitige E-Mail-Filterung ermöglichen und das Antispam-Plugin sind sehr nützlich.

  • dovecot-lmtpd (optional)

  • dovecot-sieve (optional)

  • dovecot-managesieved (optional)

  • dovecot-antispam (optional)

Befehl zum Installieren der Pakete:

sudo apt-get install dovecot-lmtpd dovecot-sieve dovecot-managesieved dovecot-antispam 

Oder mit apturl installieren, Link: apt://dovecot-lmtpd,dovecot-sieve,dovecot-managesieved,dovecot-antispam

Dienststeuerung

Dovecot arbeitet als Dienst im Hintergrund. Nachdem alle benötigten Pakete (nach)installiert und der Server korrekt konfiguriert wurde, kann man ihn aus einem Terminal heraus [2] über den Befehl

sudo service dovecot restart 

neu starten.

Konfiguration

Dovecot 2 wird, anders als noch Dovecot 1, über Konfigurationsdateien unterhalb des Verzeichnisses /etc/dovecot/conf.d/ konfiguriert. Die Datei /etc/dovecot/dovecot.conf ist weiterhin vorhanden, sie bindet die jeweiligen spezifischen Konfigurationsdateien ein. Eine monolithische Konfiguration ist somit weiterhin möglich, die Aufsplittung der Konfiguration ist allerdings sehr empfehlenswert, da man so bei einer Fehlkonfiguration nur den betroffenen Teil zurücksetzen muss, um wieder einen funktionierenden E-Mail-Server zu haben.

Falls man sich die komplette aktuelle Konfiguration anzeigen lassen möchte, kann man dies mit:

doveconf -n 

tun.

Konfiguration der POP3 und IMAP-Backends

Grundsätzlich sollten die Standardeinstellungen bei beiden ausreichen, allerdings schadet es nicht, sich die beiden Konfigurationsdateien einmal anzusehen. Diese sind /etc/dovecot/conf.d/20-pop3.conf und /etc/dovecot/conf.d/20-imap.conf. In beiden findet man eine Variable, mit der man auf Eigenheiten bestimmter E-Mail-Clients eingehen kann. Diese lauten pop3_client_workarounds beziehungsweise imap_client_workarounds und sind standardmäßig auskommentiert. Die möglichen Belegungen werden in den Kommentaren dazu erläutert.

Ebenso findet man in beiden Dateien die Variable mail_max_userip_connections, welche angibt, wie viele gleichzeitige Verbindungen von einem Benutzer pro verbundener Internet-IP erlaubt sind. Diese ist bei beiden standardmäßig auf 10 eingestellt, was im Normalfall ausreichen sollte. Gerade bei IMAP in Verbindung mit IMAP IDLE für Push-Benachrichtigungen kann es aber vorkommen, das mehr Verbindungen benötigt werden. Wenn man dann noch mit mehreren Clients (Laptop, Smartphone, Tablet) hinter einem NAT-Router sitzt, bekommt man Verbindungsprobleme. Dann kann es helfen, diese Variable auf 20 oder höher zu setzen.

Verschlüsselte Kommunikation

Grundsätzlich sollte man nur verschlüsselte Kommunikation mit dem E-Mail-Server zulassen. Dazu fragt Dovecot bei Installation, ob ein selbstsigniertes Zertifikat erstellt werden soll. Hat man dies verneint, kann man dies mit ssl-cert nachholen. Besser ist es allerdings, ein korrekt signiertes Zertifikat zu benutzen. Dabei muss man genau wie in Apache/SSL beschrieben vorgehen. Alternativ kann man auch CAcert (Abschnitt „Webserver“) nutzen oder eine eigene Certificat Authority betreiben.

Hat man ein SSL-Zertifikat, muss man dieses in der Konfigurationsdatei /etc/dovecot/conf.d/10-ssl.conf eintragen.

ssl = required
ssl_cert = </etc/ssl/certs/dein-serverzertifikat.crt
ssl_key = </etc/ssl/private/dein-serverschlüssel.key

Der Wert required erfordert zwingend eine verschlüsselte Verbindung. Dies sollte man nicht verändern. Die Werte für das Zertifikat und den privaten Schlüssel müssen an die eigenen Begebenheiten angepasst werden; die beiden "<" sind keine Tippfehler. Wer weitergehende Einstellungen für SSL vornehmen will, sei auf die SSL-Konfiguration 🇬🇧 im Dovecot-Wiki verwiesen.

Speicherort und Mailbox-Format

E-Mails können von Dovecot auf drei verschiedene Arten gespeichert werden: In einer großen mbox-Datei und als maildir, wobei jede E-Mail als eine Datei in den entsprechenden Unterordner des Postfachs gespeichert wird. Diese beiden Formate werden auch von anderen Mailservern verstanden und sind somit sehr portabel. Das dritte Format ist das Dovecot-spezifische dbox, welches in diesem Artikel aber nicht weiter behandelt wird.

Standardmäßig speichert Dovecot unter Ubuntu die Mails in einer mbox unterhalb des mail-Verzeichnisses im Homeverzeichnis. Der eigentliche Posteingang bleibt aber unterhalb von /var/mail/. Dies kann in der Datei /etc/dovecot/conf.d/10-mail.conf geändert werden.

mail_location = mbox:~/mail:INBOX=/var/mail/%u

Wie man sieht, ist klar definiert, dass es sich um eine mbox handelt. Der Platzhalter %u wird automatisch zum vollen Benutzernamen erweitert. Lautet dieser benutzer@domäne, wird dies so übernommen. Möchte man nur den Benutzer-Teil, nimmt man %n, möchte man den Domänen-Teil, $d.

Möchte man jetzt maildir benutzen und zudem alle Dateien in einem bestimmten Verzeichnis haben, ändert man dies beispielsweise auf:

mail_location = maildir:/var/maildirs/%d/%n

In diesem Fall gibt es keinen speziellen Eintrag für den Posteingang mehr (INBOX), zudem werden die Mailboxen erst nach der Domäne des Benutzers und danach nach dem Benutzernamen einsortiert und liegen zudem alle unterhalb des Ordner /var/maildirs/. Dieser Ordner muss dem Benutzer mail gehören, da Dovecot sonst keine neuen Mailboxen anlegen kann, wenn sich ein Benutzer anmeldet.

Hinweis:

Es ist darauf zu achten, das die Mailbox nicht automatisch zwischen den Formaten konvertiert wird. Will man nachträglich wechseln, muss man diesen Schritt manuell durchführen. Die dazu notwendigen Schritte findet man im entsprechenden Migrations-Artikel 🇬🇧 im Dovecot-Wiki.

Konfiguration der Benutzer-Anmeldung

Dovecot hat zwei verschiedene Datenbanken mit Nutzerinformationen. Die Passwortdatenbank wird benutzt, um herauszufinden, ob sich ein Benutzer am Server anmelden darf. In der Benutzerdatenbank stehen weitere Informationen über den Benutzer. So können hier Standardeinstellungen wie die für den Login und den Zugriff auf den Mail-Speicherort zu benutzenden User- und Gruppen-IDs, das Mailbox-Format und der Ort und das Homeverzeichnis für den Benutzer überschrieben werden.

Bei Benutzern muss man zwischen zwei Arten unterscheiden. Einmal reale Benutzer, die auch eine Account auf dem Rechner haben, auf dem der Server läuft und die sich dort demzufolge einloggen können. Zum anderen virtuelle Nutzer, also solche, die das nicht können, aber trotzdem ein E-Mail-Konto haben. Da es sich hierbei nicht um richtige Benutzer mit Zugriff auf das System handelt, müssen für diese noch ein paar Vorkehrungen getroffen werden.

Für virtuelle Benutzer benötigt man zwei Dinge: erstens einen Benutzer auf dem System, der der Gruppe mail angehört, mit dem die Mailboxen im Dateisystem erstellt werden können und der danach für die Dateizugriffsrechte benutzt wird. Hier reicht ein Benutzer ohne Anmeldemöglichkeit (also ohne Passwort, Shell und Homeverzeichnis) aus. Wie man einen solchen erstellt, ist im Artikel adduser beschrieben.

Zweitens haben virtuelle Benutzer keine Homeverzeichnis. Dovecot benötigt zwar aktuell für den Regelbetrieb nicht zwingend ein Homeverzeichnis für jeden Benutzer, manche Plugins setzen dies aber schon voraus, so etwa das Sieve-Plugin. Die Entwickler behalten sich zudem vor, in Zukunft ein Homeverzeichnis zu fordern und empfehlen deshalb schon jetzt, für jeden Benutzer eines einzurichten. Für virtuelle Benutzer sollte also entweder per Standardeinstellung oder einem entsprechenden Eintrag in der Benutzerdatenbank ein Homeverzeichnis zugewiesen werden. Dieses Verzeichnis (z.B. /home/virtual) muss für die Gruppe mail schreibbar sein, damit die Homeverzeichnisse, genau wie die Mailboxen, erstellt werden können.

Die Konfiguration der Passwort und Benutzerdatenbanken werden in der Datei /etc/dovecot/conf.d/10-auth.conf festgelegt. Hier muss die Raute # vor dem entsprechenden Eintrag/gewünschten Backend entfernt werden. Für lokale Benutzer ist keine Änderung nötig, diese können sich direkt auf dem Mailserver mit ihrem normalen Login/Passwort einloggen. Möchte man dies deaktivieren, kommentiert man die folgende Zeile ein:

# !include auth-system.conf.ext

Für einfache Konfigurationen reicht es oftmals auch aus, nur in der Passwortdatenbank zu prüfen, ob ein Benutzer berechtigt ist, auf den Server zuzugreifen und alle weiteren Felder durch eine statische Benutzerdatenbank generieren zu lassen. Diese wird dann anstatt der dynamischen Benutzerdatenbank in den jeweiligen Konfigurationsdateien eingefügt. Eine Konfiguration könnte dann wie folgt aussehen:

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/virtual/%u
}

Lokale Passwortdatei

Für die zusätzliche Nutzung einer lokal gespeicherten Passwortdatei mit dovecot-passwd löscht man das Kommentarzeichen # vor:

!include auth-passwdfile.conf.ext

Damit liest Dovecot standardmäßig die Benutzer und Passwörter aus der Datei /etc/dovecot/users aus. Die verwendete Formatierung der Datei ist dabei an die Datei /etc/passwd angelehnt.

user:password:uid:gid:(gecos):home:(shell):extra_fields

Unter Verwendung von doveadm pw können Passwort-Hashes erstellt werden. Standardmäßig wird hier das Schema CRAM-MD5 benutzt, mit dem Parameter -s kann man ein eigenes angeben. Mit -l listet man alle verfügbaren Schemata auf.

Anschließend erstellt man die entsprechende Zeile in der Passwortdatei, wobei 2000 in diesem Fall die User- sowie Group-ID des erstellten Mail-Benutzers ist. Das Feld für die Shell kann bei virtuellen Benutzern frei bleiben, da es nicht benötigt wird (siehe oben). Hat man für das Homeverzeichnis ein generisches Muster festgelegt, so kann auch dieses leer bleiben.

# user:passwort:UserID:GroupID::homeDir
test:$6$o6mAiIneKi.qISGA$GubLbhEXCp/UTSf993zmhkehI067ZJ.zTOhm261visOxVBM614jEG8Q7BGni/MdPMOl88knIqg/CpTnNMdn7l/:2000:2000::/home/virtual/test

Mehr Informationen:

LDAP-Authentifizierung

Um eine Anmeldung über LDAP zu ermöglichen, muss die folgende Zeile auskommentiert werden:

!include auth-ldap.conf.ext

Diese Datei muss nur in Ausnahmefällen editiert werden. Die weitere Konfiguration erfolgt nur in der Datei /etc/dovecot/dovecot-ldap.conf.ext. Folgende Einstellungen sind wichtig:

hosts = ldap-server-1 ldap-server-2
base = ou=users,dc=domain,dc=com
scope = subtree
auth_bind = yes

In hosts werde die verfügbaren LDAP-Server eingetragen und base ist der Startpunkt für die Suche im LDAP-Verzeichnisbaum. Von diese Basis ausgehend sucht Dovecot dann im scope nach Benutzern. Möglich sind hier base (nur in der Basis), onelevel (in der Basis und allen direkten Unterordnern) und subtree (kompletter Verzeichnisbaum ab der Basis). Wenn man also weiß, dass Benutzer nur in der Basis angelegt werden, kann man base auswählen. Hat man eine komplexere Struktur mit Unterverzeichnissen, muss man auf onelevel oder subtree ausweichen.

Der Parameter auth_bind steht für "Authentication Bind". Steht er auf yes, wird das Passwort vom LDAP-Server selbst verifiziert (Dovecot bekommt es also nie zu sehen und bekommt nur ein "Gültig" oder "Ungültig" zurückgemeldet). Bei no liest Dovecot das Passwort aus dem LDAP aus und überprüft es selbst. Aufgrund der höheren Sicherheit wird das Aktivieren der Authentication Binds empfohlen.

Datenbank-Authentifizierung

Für die Anmeldung anhand einer Datenbank wird, analog zu den anderen auth-Backends, die entsprechende Zeile auskommentiert:

!include auth-sql.conf.ext

Die Konfiguration erfolgt für Postgres und MySQL gleich, da nur SQL-Befehle benutzt werden. Die folgende Beispielkonfiguration wurde mit MySQL getestet.

Bevor man die Konfiguration einstellt, muss man die Voraussetzungen schaffen, sich über die Datenbank anzumelden. Dazu müssen, sofern nicht eine bestehende Datenbanktabelle genutzt werden soll, eventuell ein neues Schema, eine Tabelle zum Speichern der Benutzer sowie ein Benutzer mit Lese-Zugriff auf die Benutzertabelle erstellt werden.

Eine Tabelle zum Speichern der Benutzer kann beispielsweise wie folgt erstellt werden:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
CREATE TABLE users (
  `id` INT(11) NOT NULL,
  `username` VARCHAR(128) NOT NULL,
  `domain` VARCHAR(128) NOT NULL,
  `password` VARCHAR(255) NOT NULL,
  `home` VARCHAR(255) DEFAULT NULL,
  `uid` INT(11) DEFAULT NULL,
  `gid` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
  active CHAR(1) DEFAULT 'Y' NOT NULL
);

In der Datei /etc/dovecot/dovecot-ldap.conf.ext werden dann manuell die SQL-Queries eingetragen, mit denen die passdb bzw. userdb dann arbeitet.

# Treiber für die Datenbank, auf >pgsql< ändern für Postgres
driver = mysql 

# The mysqld.sock socket may be in different locations in different systems.
# Use "host= ... pass=foo#bar" with double-quotes if your password has '#' character.
connect = host=datenbankserver dbname=datenbankname user=datenbankbenutzer password=datenbankpasswort
# Alternatively you can connect to localhost as well:
#connect = host=localhost dbname=mails user=admin password=pass

password_query = SELECT username, domain, password \
  FROM users WHERE username = '%n'

# deactivated if we are using statuc userdb
user_query = SELECT home, uid, gid FROM users WHERE username = '%n' AND domain = '%d'

default_pass_scheme = SHA512-CRYPT

Die queries müssen relevante Felder mit den passenden Namen zurückliefern! Heißen diese, wie in der oben genannten Beispieltabelle, schon in der Datenbank richtig, ist nichts weiter zu tun. Ansonsten müssen alle betroffenen Felder mit dem "AS"-Stichwort umbenannt werden. Folgende Namen müssen für die entsprechenden Felder verwendet werden:

Feld Name
Benutzer username
Domäne domain
Passwort password
Home-Verzeichnis home
User-ID uid
Gruppen-ID gid

Ein entsprechender password_query mit unpassenden Benutzer- und Passwort-Feldern könnte dann wie folgt aussehen:

1
SELECT user AS username, domain, pw_hash AS password FROM usertable WHERE user = '%n'

Für den user_query gilt das gleiche:

1
SELECT homedir AS home, user_id AS uid, group_id AS gid FROM usertable WHERE user = '%n' AND domain = '%d'

Plugins

Dovecot bringt mehrere Plugins mit, die man optional aktivieren kann, um zusätzliche Funktionalitäten bereitzustellen.

Plugins können in der Datei 10-mail.conf global aktiviert werden. Alternativ bietet es sich an, die Plugins in den Konfigurationsdateien der Unterkomponenten zu aktivieren. So nützt einem das Antispam-Plugin bei Benutzung von POP3 wenig, da die Funktionalität hier brachliegt. Es liegt also nahe, dieses nur in der IMAP-Konfiguration zu aktivieren. In der 10-mail.conf trägt man die zu verwendenden Plugins als Leerzeichen-getrennte Liste in die mail_plugins ein, wobei man die Option durch Entfernen des Kommentarzeichens # am Zeilenanfang aktivieren muss. In den Konfigurationsdateien der Unterkomponenten trägt man die Plugins am Ende der bestehenden Auflistung ein, wobei das voranstehende mail_plugins = $mail_plugins nicht verändert werden darf, da sonst vorherige Plugins deaktiviert werden.

Sieve

E-Mails in Dovecot kann man mit Sieve-Skripten automatisch filtern lassen. Wenn das Paket dovecot-sieve installiert wurde, kann pro Postfach ein Sieve-Skript abgelegt werden. Der Ort, an dem das Sieve-Skript abgelegt wird, wird in 90-sieve.conf festgelegt. Standardmäßig ist dies $HOME/.dovecot.sieve. Die Logdatei findet sich unter $HOME/.dovecot.sieve.log. Das Sieve-Skript benötigt ohne eigene Konfiguration also ein (virtuelles) Homeverzeichnis.

Um das Plugin zu aktivieren kann man es, alternativ zur erwähnten globalen Konfigurationsdatei, in der 20-lmtp.conf eintragen.

Manage-Sieve

Will man die Sieve-Skripte nicht manuell per Texteditor auf dem Server anpassen, muss bei Ubuntu nur das am Anfang des Artikels genannte Paket für das Manage-Sieve-Plugin installiert werden. Das Plugin ist nach einem Neustart von Dovecot automatisch aktiviert und übernimmt zudem die SSL-Einstellungen des Hauptprogramms. Hat man dort, wie empfohlen, SSL als erforderlich markiert, findet auch die Verbindung zum Manage-Sieve-Plugin nur verschlüsselt statt.

Ist das Plugin installiert, kann man seine Sieve-Skripte auch über entsprechende Oberflächen schreiben. Der Webmailer Roundcube 🇬🇧 bietet dabei eine grafische Schnittstelle. KMail hat einen simplen Texteditor integriert, der beim Speichern das Skript auf den Server lädt. Bei Thunderbird lässt sich diese Funktionalität über ein Plugin nachrüsten.

Antispam

Das Antispam-Plugin erlaubt das einfache Markieren von Nachrichten als Spam bzw. nicht-Spam. Dazu muss man nach erfolgter Konfguration die E-Mails in den Spam-Ordner verschieben, um sie als Spam zu markieren bzw. aus dem Spam-Ordner herausschieben, um sie als nicht-Spam (Ham) zu kennzeichnen. Das Plugin trainiert dann automatisch den eingetragenen Spamfilter. Antispam sortiert nicht eingehende E-Mails automatisch in den Spam-Ordner. Dafür erstellt man sich eine für die eigenen Spam-Konfiguration passende Sieve-Regel wie z.B. die folgende:

require ["fileinto","imapflags"];
# rule:[SPAM]
if header :contains "subject" ["***SPAM***"] {
        setflag "\\seen";
        fileinto "Spam";
        stop;
} else {
        # The rest goes into INBOX
        # default is "implicit keep", we do it explicitly here
        keep;
}

Das Plugin kann entweder global oder in der 20-imap.conf aktiviert werden und benötigt eine funktionierende Spamassasin-Installation.

Zusätzlich muss ein Skript erstellt werden, das den Spamfilter antrainiert. Dieses speichert man unter /usr/local/bin/sa-learn-pipe.sh mit folgendem Inhalt:

1
2
3
4
5
#!/bin/bash
echo /usr/bin/sa-learn $* /tmp/sendmail-msg-$$.txt echo "$$-start ($*)" >> /tmp/sa-learn-pipe.log
/usr/bin/sa-learn $* /tmp/sendmail-msg-$$.txt && rm -f /tmp/sendmail-msg-$$.txt &
echo "$$-end" >> /tmp/sa-learn-pipe.log
exit 0

Dieses Skript wird dann in der Pluginkonfiguration 90-plugin.conf eingetragen, zusammen mit ein paar weiteren Optionen.

plugin {
#  antispam_mail_sendmail_args= --username=%u        # Wenn man benutzerspezifische Spamfilter benutzen möchte
  antispam_mail_spam  = --spam
  antispam_mail_notspam  = --ham
  antispam_mail_sendmail = /usr/local/bin/sa-learn-pipe.sh # Das oben erstellte Skript
  antispam_spam = Spam;SPAM                          # Ordner die Spam enthalten
  antispam_trash = Trash;trash                       # Papierkörbe; wenn eine Mail hierhin verschoben wird, gilt sie nicht als "Ham"
}

Weitere Plugins

Dovecot bringt noch weitere Plugins mit, unter anderen ein Plugin, mit dem man Quotas für Benutzer aktivieren kann. Für diese sei aber auf das ausführliche Dovecot-Wiki verwiesen.

Diese Revision wurde am 15. Februar 2024 17:32 von simcup erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Email, SMTP, POP, Netzwerk, Server, Kommunikation, IMAP, Internet