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