Ubuntu 16.04 - Mailserver - Dovecot
Dovecot ist ein Open Source IMAP und POP3 Server, der Dieste bereitstellt um Mails mit einem Client wie Outlook oder Thunderbird abzuholen. Der Server legt die E-Mails im mbox oder Maildir-Format ab.
Die Installation wird analog zu meinem alten Setup ablaufen. Werde die Schritte aber dennoch notieren um sie mir wieder ins Gedächtnis zu rufen und einen vollständigen Notizzettel zu haben :-)
Installation
Für die Installation des Grundsystems benötigt man das Core-Paket (dovecot-core) und mindestens eines der beiden folgenden Pakete:
- dovecot-imapd
- dovecot-pop3d
Möchte man nur einen IMAP Server muss man das Paket dovecot-pop3d nicht installieren und umgekehrt.
Damit Dovecot Werte aus einer MySQL Datenbank lesen kann wird noch das Paket dovecot-mysql installiert.
apt install dovecot-core dovecot-imapd dovecot-mysql
Konfiguration
Die Konfiguration findet zwar grundsätzlich in der Datei /etc/dovecot/dovecot.conf statt, in Ubuntu sind die meißten Optionen allerdings in Dateien in /etc/dovecot/conf.d ausgelagert. Daher ist es eigentlich nicht nötig die Hauptkonfigurationsdatei zu verändern.
Alle Einstellungen die von den Standardeinstellungen abweichen, kann man sich mit
dovecot -n
anzeigen lassen. Nach Änderungen an der Konfiguration muss natürlich Dovecot neu gestartet werden.
Protokolle
Standardmäßig werden die Protokolle aktiviert, deren Paket man installiert hat. Diese Pakete legen Dateien an die unter /usr/share/dovecot/protocols.d/*.protocol zu finden sind.
10-auth.conf (Benutzerauthentifikation)
Die Benutzer sollen über eine MySQL Datenbank verwaltet werden können. Dazu haben wir ja schon wie in der Einleitung beschrieben das Paket dovecot-mysql installiert.
Die Konfiguration erfolgt über /etc/dovecot/conf.d/10-auth.conf. Hier muss die Zeile für die Authentifikation über das System auskommentiert werden und die Zeile für die Authentifikation am SQL Server einkommentiert werden:
#!include auth-system.conf.ext
!include auth-sql.conf.ext
Außerdem sollen bei einer unverschlüsselten Verbindung keine Klartext Kennwörter erlaubt sein. Dazu aktiviert man in der Datei den Eintrag:
disable_plaintext_auth = yes
auth-sql.conf.ext
Da ich für Benutzer keine besonderen Einstellungen wie Quotas oder ähnliches verwenden möchte, verwende ich die am Ende der Datei /etc/dovecot/conf.d/auth-sql.conf.ext stehende, statische userdb Einstellung. Diese besagt dass für jeden Benutzer ein Verzeichnis unter /var/vmail/[Domainname]/[Benutzername] angelegt wird in dem bessen Mails gespeichert werden.
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/vmail/%d/%n
}
Außerdem wird hier festgelegt dass der Zugriff auf die Verzeichnisse über einen gemeinsamen Benutzer namens vmail mit der Gruppe vmail passieren soll.
Diesen Benutzer und die Gruppe muss man anlegen:
adduser --system --group --no-create-home vmail
Außerdem muss das Verzeichnis /var/vmail angelegt werden und dem Benutzer vmail und der Gruppe vmail zugewiesen werden.
mkdir /var/vmail
chown vmail:vmail /var/vmail
chmod 0770 /var/vmail
In der Datei /etc/dovecot/auth-sql.conf.ext wird außerdem auf die Datei /etc/dovecot/dovecot-sql.conf.ext referenziert in der weitere Parameter für die Verbindung mit der Datenbank festgelegt werden.
MySQL Datenbank
Für die Authentifikation der Benutzer wird eine MySQL Datenbank benötigt. Sollte der Server noch nicht installiert sein tut man dies mit:
apt install mysql-server
Wie in der Datei /etc/dovecot/dovecot-sql.conf.ext beschrieben muss man eine neue Datenbank mit ein paar Tabellen anlegen. Die Datenbank bekommt den Namen vmail. Dieser Name wird in den meißten Anleitungen im Netz gewält. Als Kollation verwende ich utf8_general_ci.
CREATE DATABASE vmail
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
Für den Zugriff auf die Datenbank wird noch ein Benutzer benötigt.
GRANT ALL PRIVILEGES
ON vmail.*
TO 'vmail'@'localhost'
IDENTIFIED BY 'mysecret';
Als nächstes die Benutzertabelle:
CREATE TABLE users (
username VARCHAR(128) NOT NULL,
domain VARCHAR(128) NOT NULL,
password VARCHAR(128) NOT NULL,
PRIMARY KEY (username, domain)
);
Benutzer anlegen
Um einen Benutzer anzulegen muss man einen Eintrag in der users - Tabelle mit Benutzernamen, Domain und einem Passwort-Hash erzeugen. Den Passwort-Hash kann man z.B. erzeugen mit:
doveadm pw -s SHA512-CRYPT
Es wird zweimal um die Eingabe des neuen Passworts gefragt und dann der Hash ausgegeben. Das {SHA512-CRYPT} am Anfang muss man weglassen, da es nur den verwendeten Algorithmus zeigt.
INSERT INTO users
(username, domain, password)
values
('benutzer1', 'meinedomain.de', '$6$A3Z[...]MCQgfsz');
dovecot-sql.conf.ext
Sind die Tabellen angelegt, können wir uns an die Konfiguration machen. Dazu editiert man die Datei /etc/dovecot/dovecot-sql.conf.ext.
Hier wählt man zunächst die Verbindungsart aus. Nicht vergessen die benötigten Einträge auch einzukommentieren.
driver = mysql
Als nächstes legt man die Verbindungsparameter fest. Man kann statt dem Socket auch localhost verwenden.
connect = host=/var/run/mysqld/mysqld.sock dbname=vmail user=vmail password=mysecret
Der voreingestellte Hashing Algorithmus MD5 gilt nicht als besonders sicher. Daher verwende ich als Passwort Schema den stärkeren SHA512-CRYPT Algorithmus.
default_pass_scheme = SHA512-CRYPT
Den Passwort-Query kann man so einkommentieren wie er im Beispiel steht:
password_query = \
SELECT username, domain, password \
FROM users WHERE username = '%n' AND domain = '%d'
10-mail.conf (Mailbox Format und Speicherort)
Dovecot kann Postfächer im mbox sowie im Maildir Format verwalten. Bei der mbox Variante werden alle Mails in einer Datei gespeichert, beim maildir Format ist jede Mail eine eigene Datei.
Standardmäßig ist das mbox Format voreingestellt und das INBOX Verzeichnis des Postfachs liegt unter /var/mail/%u und die restlichen Verzeichnisse im Benutzerordner unter ~/mail.
Da mein bisheriger Mailbestand auf Maildir basiert und Maildir einfacher zu handhaben ist und obendrein auch fehlertoleranter ist, werde ich Dovecot so konfigurieren dass Dovecot wieder das Maildir Format verwendet.
Dazu editiert man die Datei /etc/dovecot/conf.d/10-mail.conf und trägt als mail_location folgendes ein:
mail_location = maildir:/var/vmail/%d/%n/Maildir
Zusätzlich muss noch unser neuer Systembenutzer vmail sowie dessen Gruppe in diese Datei eingetragen werden:
mail_uid = vmail
mail_gid = vmail
mail_privileged_group = vmail
Damit wird Dovecot mitgeteilt, wie und mit welchem Benutzer/Gruppe auf die Mailbox Verzeichnisse zugegriffen werden soll.
10-master.conf
Als nächste Datei kommt die /etc/dovecot/conf.d/10-master.conf.
Da ich IMAP nur über Port 143 mit TLS erlauben möchte, habe ich iher IMAPS deaktiviert indem ich den Port auf 0 gesetzt habe.
service imap-login {
inet_listener imap {
#port = 143
}
inet_listener imaps {
port = 0
#ssl = yes
}
}
Außerdem habe ich hier dem Benutzer vmail Zugriff auf den Auth-Socket von Dovecot gegeben:
service auth {
unix_listener auth-userdb {
mode = 0666
user = vmail
group = vmail
}
}
10-ssl.conf (Verbindung absichern mit TLS/SSL)
Die SSL/TLS Konfiguration kann angepasst werden indem man die Datei /etc/dovecot/conf.d/10-ssl.conf editiert. Ich empfehle ein Zertifikat von Let's encrypt zu verwenden. Man kann während der Einrichtung aber auch das selbst signierte Zertifikat von Ubuntu verwenden. Dieses kann man installieren und erzeugen mit:
apt-get install ssl-cert
make-ssl-cert generate-default-snakeoil
Damit werden diese beiden Dateien erzeugt:
SSL-Zertifikat | /etc/ssl/certs/ssl-cert-snakeoil.pem |
---|---|
SSL-Schlüssel | /etc/ssl/private/ssl-cert-snakeoil.key |
Spätestens wenn der Server mal Live geht sollte das Zertifikat gegen eines von Let's encrypt ersetzt werden. Zum Testen während der Einrichtung wird dieses aber erst mal reichen.
Folgende Anpassungen werden jetzt in der Datei /etc/dovecot/conf.d/10-ssl.conf gemacht:
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = required
# PEM encoded X.509 SSL/TLS certificate and private key.
#ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem
#ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key
ssl_cert = </etc/letsencrypt/live/www.mydomain.de/fullchain.pem
ssl_key = </etc/letsencrypt/live/www.mydomain.de/privkey.pem
# DH parameters length to use.
ssl_dh_parameters_length = 2048
# SSL protocols to use
ssl_protocols = !SSLv2 !SSLv3
# SSL ciphers to use
ssl_cipher_list = EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA128-SHA:AES128-SHA
# Prefer the server's order of ciphers over client's.
ssl_prefer_server_ciphers = yes
Um zu testen ob das Zertifikat korrekt eingebunden wurde kann man folgenden Befehl verwenden:
echo "quit" | openssl s_client -starttls imap -connect www.mydomain.de:imap
Funktioniert natürlich nur dann wenn der Dovecot Server neu gestartet wurde und die zuletzt getätigten Einstellungen auch übernommen wurden.
15-lda.conf
In der Datei /etc/dovecot/conf.d/15-lda.conf habe ich nur die Postmaster-Adresse gesetzt damit ich mitbekomme, wenn eine Zustellung fehlschlägt.
postmaster_address = webmaster@fam-moser.de
15-mailboxes.conf
In der Datei /etc/dovecot/conf.d/15-mailboxes.conf werden Details zu den Mailboxen wie z.B. Unterordner die standardmäßig angelegt werden definiert. Ich habe hier die Standard-Order so eingestellt dass diese automatisch aboniert werden.
namespace inbox {
# These mailboxes are widely used and could perhaps be created automatically:
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = subscribe
special_use = \Junk
}
mailbox Trash {
auto = subscribe
special_use = \Trash
}
}
Dovecot neu starten
Zum Abschluss dieses Schrittes muss man jetzt dem Dovecot neu starten:
systemctl restart dovecot
E-Mail Client
Jetzt sollte man sich mit einem E-Mail Client mit dem IMAP-Server verbinden können. Man wird eine Warnung wegen dem selbst signierten Zertifikat bekommen für welches man eine Ausnahme festlegen muss. Dann sollte die Verbindung aber klappen. Folgende Einstellungen sollten gewählt werden:
Einstellung | Wert |
---|---|
Verbindungsart | IMAP |
Port | 143 |
Verbindungssicherheit | STARTSSL |
Authentifizierung | Passwort, normal |
Vorbereitungen für Postfix
Postfix wird später anfragen an Dovecot stellen, ob ein Benutzer berechtigt ist Mails zu versenden. Dazu muss Dovecot einen Socket bereitstellen über den Postfix seine Anfragen stellen kann. Der Socket wird in der Datei /etc/dovecot/conf.d/10-master.conf konfiguriert.
service auth {
unix_listener auth-userdb {
mode = 0666
user = vmail
group = vmail
}
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
LMTP Socket
Für die lokale Zustellung in die Postfächer wird LMTP (Local Mail Transport Protocol) verwendet, das ähnlich wie SMTP ist. Dazu wird das Paket dovecot-lmtpd benötigt.
apt install dovecot-lmtpd
Dazu richten wir postfix nochmal einen Socket in der Datei /etc/dovecot/conf.d/10-master.conf ein:
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0660
user = postfix
group = postfix
}
}