Dovecot ist ein IMAP und POP3-Server. In diesem Setup ist er auch für die Authentifizierung der User zuständig.

Installation und Konfiguration

root@tutorial:~# apt install dovecot-imapd dovecot-pop3d dovecot-pgsql dovecot-lmtpd

Wir legen einen User und eine Gruppe an, unter dem nachher die E-Mails verarbeitet und abgelegt werden. Dann noch ein Verzeichnis, in welchem später die E-Mails abgelegt werden.

root@tutorial:~# groupadd -g 5000 vmail
root@tutorial:~# useradd -g vmail -u 5000 vmail -d /var/vmail

root@tutorial:~# usermod -a -G vmail dovecot
root@tutorial:~# mkdir /var/vmail
root@tutorial:~# chown vmail:vmail /var/vmail

In

/etc/dovecot/conf.d/10-mail.conf 

konfigurieren wir den Ablageort der E-Mails auf den oben angelegten Pfad
Wir ändern den Punkt

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

folgendermaßen ab:

mail_location = maildir:~/ 

Als nächstes deaktivieren wir den Login mit Plain-Text-Passwörtern und sagen Dovecot, daß er für die Überprüfung der Login-Daten eine SQL-Datenbank nutzen soll. Welche, konfigurieren wir später.
Hierfür ändern wir die Datei

/etc/dovecot/conf.d/10-auth.conf 

folgendermaßen ab:

An den nachfolgenden 2 Positionen wir das # am Anfang der Zeile entfernt.

disable_plaintext_auth = yes
!include auth-sql.conf.ext

In der Zeile

auth_mechanisms = plain

ergänzen wir ein login, sodaß die Zeile wie folgt aussieht

auth_mechanisms = plain login

Am Anfang der Zeile

!include auth-system.conf.ext

fügen wir ein # ein.

Jetzt kontrollieren wir in

/etc/dovecot/conf.d/auth-sql.conf.ext 

ob die folgenden Zeilen aktiv sind (also keine # davor sind).

passdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf.ext
}

userdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql.conf.ext
}

Sollte hier alles OK sein ändern wir die oben genannte

/etc/dovecot/dovecot-sql.conf.ext

wie folgt ab:

In den nachfolgenden Zeilen entfernen wir jeweils das # am Anfang und ändern die Zeilen entsprechend ab. Natürlich daran denken, daß ihr das Password benutzt welches ihr bei der PostgreSQL-Installation eingegeben habt.

driver = pgsql

connect = host=localhost dbname=mails user=mailreader password=secret

default_pass_scheme = SHA512-CRYPT

password_query = SELECT userid as user, password FROM users WHERE userid = '%u'

user_query = SELECT '/var/vmail/'||home AS home, uid, gid FROM users WHERE userid = '%u'

Als nächstens konfigurieren wir, auf welchen Ports Dovecot auf Verbindungen warten soll und die lmtp-Verbindung zwischen Postfix und Dovecot
Falls die Zeilen auskommentiert sind, muß natürlich das # davor entfernt werden. Hierfür editieren wir

/etc/dovecot/conf.d/10-master.conf

Als erstes schalten wir unverschlüsseltes IMAP (also OHNE S) ab und verschlüsseltes (also MIT S) ein

service imap-login {

    inet_listener imap {

        port = 0

    }

    inet_listener imaps {

        port = 993

        ssl = yes}

    }
}

und jetzt das Selbe mit POP3

service pop3-login {

    inet_listener pop3 {

        port = 0

    }

    inet_listener pop3s {

        port = 995

        ssl = yes

    }

}

Als letztes in dieser Datei noch der User unter welchem die Authentifizierung laufen soll. Wir ändern dies vom Standard root auf vmail.
Wie im Kommentartext zu lesen ist, werden hier root-Rechte nur gebraucht, wenn wir auf /etc/shadow zugreifen wollen. Da wir aber die Passwort- und anderen Userdaten in der PostgreSQL-Datenbank stehen haben, können wir das unbesorgt ändern.

service auth-worker{

    user = vmail

}

Jetzt die SSL-Verschlüsselung zu Dovecot. Hier benutze ich für das Tutorial die Standard-Zertifikate die man mit dem im Dovecot-Paket liegenden Script erstellen kann. Diese Zertifikate BITTE NICHT in freier Wildbahn nutzen.

Zuerst sagen wir Dovecot, dass eine Verbindung zu ihm auf jeden Fall per SSL verschlüsselt sein soll.

ssl = required

Als SSL-Zertifikate nutzen wir die Gleichen, wie wir auch in Postfix nutzen. Hierzu entfernen wir einfach nur die # und ändern die Pfade entsprechend ab.
Und nochmals: Sollte der Server auch von außen erreichbar sein... NICHT DIESE ZERTIFIKATE NUTZEN Ihr könnt hierzu recht einfach ein Let's Encrypt [1] Zertifikat erstellen.
Das Selbe gilt natürlich auch für Postfix!

ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem
ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key 

 


Fußnoten

[1] https://letsencrypt.org