Mailserver 6 von 10: Mailabruf mit Dovecot

Jahrelang habe ich mich davor gedrückt, doch endlich ist es geschafft - die Einrichtung eines eigenen Mailservers. In einer kleinen Artikelserie möchte ich einmal meine Erfahrungen und Konfigurationsschritte festhalten. Diese Serie basiert auf zahllosen Tutorials, Best Practices, Gesprächen mit Mailserver-Betreibern, aus endlosem Dokumentationen lesen und dem Wissen der Bücher "Postfix" von Kyle D. Dent und "Postfix - Einrichtung, Betrieb und Wartung" von Ralf Hildebrandt und Patrick Ben Koetter. Vielleicht werden sie ja nützlich für andere Leute sein, die das gleiche erreichen wollen.

Doch eines vorab: Die Einrichtung und der Betrieb eines Mailservers ist eine komplexe Sache. Klar, die Software lässt sich schnell installieren, doch fertig ist man danach noch lange nicht, wenn man ernsthaft damit arbeiten möchte.

Der Fahrplan der Artikelserie:

  1. Einleitung
  2. Mailempfang und Mailversand mit Dovecot und Postfix
  3. Virenprüfung mit ClamAV
  4. Mailsignatur mit OpenDKIM
  5. Spamprüfung mit SpamAssassin
  6. Mailabruf mit Dovecot
  7. Mailboxen konfigurieren mit mailconf.phs
  8. Mails synchronisieren mit mailsync.phs
  9. Mailqueue überwachen mit mailqueue.phs
  10. SpamAssassin anlernen mit maillearn.phs

Nachdem wir im letzten Artikel das letzte Mal Hand an den Mailempfang und Mailversand gelegt haben, wird es dieses Mal Zeit, dass der Nutzer seine E-Mails auch tatsächlich abrufen kann. Dazu werden wir Dovecot verwenden, der bereits früher zum Einsatz kam.

In meinem Fall habe ich einen separaten Server, auf den empfangene Mails synchronisiert werden, daher muss ich Dovecot ein zweites Mal vollständig installieren. Solltet ihr Mailabruf und Mailempfang/Mailversand auf einem Server vereinen, braucht ich lediglich die Deltas übernehmen.

Wir beginnen also damit, dass wir Dovecot installieren und anschließend stoppen. Mit dabei sind auch die Anteile von Dovecot, die sich um das IMAP(S)- und das POP3(S)-Protokoll kümmern:

1
2
3
sudo apt-get install dovecot-common dovecot-imapd dovecot-pop3d

sudo /etc/init.d/dovecot stop

Anschließend entschlacken wir wieder die Default-Konfiguration, indem wir nicht benötigte Dateien und Ordner löschen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo rm /etc/dovecot/dovecot-db.conf.ext
sudo rm /etc/dovecot/dovecot-dict-sql.conf.ext
sudo rm /etc/dovecot/dovecot-ldap.conf.ext
sudo rm /etc/dovecot/dovecot.pem
sudo rm /etc/dovecot/dovecot-sql.conf.ext
sudo rm /etc/dovecot/README

sudo rm -R /etc/dovecot/private/

sudo rm /etc/dovecot/conf.d/auth-checkpassword.conf.ext
sudo rm /etc/dovecot/conf.d/auth-deny.conf.ext
sudo rm /etc/dovecot/conf.d/auth-ldap.conf.ext
sudo rm /etc/dovecot/conf.d/auth-master.conf.ext
sudo rm /etc/dovecot/conf.d/auth-sql.conf.ext
sudo rm /etc/dovecot/conf.d/auth-static.conf.ext
sudo rm /etc/dovecot/conf.d/auth-system.conf.ext
sudo rm /etc/dovecot/conf.d/auth-vpopmail.conf.ext

Nun erstellen wir wieder die zusätzlich benötigten Dateien. Beachtet den Ordner "/etc/dovecot/tls/" - dieses Mal werden wir wieder ein TLS-Zertifikat benötigen. Die Webserver-Zertifikate von StartSSL leisten auch hier gute Dienste.

1
2
3
4
5
6
7
8
9
sudo mkdir /etc/dovecot/auth/
sudo touch /etc/dovecot/auth/accounts

sudo mkdir /etc/dovecot/tls/

sudo adduser vmail

sudo mkdir /srv/mailusers/
sudo chown vmail:vmail /srv/mailusers/

Kommen wir zu den Einstellungen in der Datei "/etc/dovecot/dovecot.conf". Hier aktivieren wir nun zusätzlich die Protokolle IMAP(S) und POP3(S). Beachtet auch, dass wir nun auf einer extern erreichbaren Adresse lauschen. Ihr müsst an dieser Stelle "<127.0.0.1>" und "<::1>" durch die IPv4- und IPv6-Adresse ersetzen, unter der euer Server erreichbar ist:

1
2
3
4
5
6
7
!include_try /usr/share/dovecot/protocols.d/*.protocol

listen = <127.0.0.1>, <::1>, 127.0.0.1, ::1

login_greeting = Mailserver welcomes you.

!include /etc/dovecot/conf.d/*.conf

Weiter geht es mit der Datei "/etc/dovecot/conf.d/10-auth.conf". Diese sieht genauso aus wie in unserem vorherigen Setup:

1
2
3
4
5
6
7
auth_default_realm = <example.com>

auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

auth_mechanisms = plain login

!include auth-passwdfile.conf.ext

Dieses Mal legen wir jedoch auch Hand an die Datei "/etc/dovecot/conf.d/10-mail.conf", in der wir festlegen, dass wir das Maildir-Format zur Ablage verwenden werden:

1
2
3
4
5
mail_location = maildir:~/Maildir

namespace inbox {
  inbox = yes
}

In der Datei "/etc/dovecot/conf.d/10-master.conf" wird es nun spannend. Dort aktivieren wir IMAPS und POP3S, deaktivieren aber das unverschlüsselte IMAP und POP3:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
}

service pop3-login {
  inet_listener pop3 {
    port = 0
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}

service lmtp {
}

service imap {
}

service pop3 {
}

service auth {
  chroot = /etc/dovecot/auth/
}

service auth-worker {
  user = $default_internal_user

  chroot = /etc/dovecot/auth/
}

service dict {
}

Solltet ihr den Mailversand und den Mailabruf über dieselbe Dovecot-Installation abwickeln wollen, müsst ihr beim "service auth {}"-Block aufpassen. Ihr wollt ja nicht, dass jemand von außen einfach die Logins durchtesten kann. Daher müsst ihr diesen wie folgt abändern, damit er nur noch vom lokalen Rechner aus erreichbar ist:

1
2
3
4
5
6
7
8
9
service auth {
  inet_listener {
    address = 127.0.0.1 ::1

    port = 10000
  }

  chroot = /etc/dovecot/auth/
}

Dieses Mal aktivieren wir auch endlich TLS in der Datei "/etc/dovecot/conf.d/10-ssl.conf". Dabei deaktivieren wir SSLv2 sowie SSLv3 und beschränken die unterstützten Ciphersuits:

1
2
3
4
5
6
7
8
ssl = yes

ssl_cert = </etc/dovecot/tls/<receive_example_com>.crt
ssl_key  = </etc/dovecot/tls/<receive_example_com>.key

ssl_protocols = !SSLv2 !SSLv3

ssl_cipher_list = HIGH:!aNULL:!eNULL:!3DES:!MD5:!RC4:@STRENGTH

Das IMAP-Protokoll gibt dem Nutzer die Möglichkeit, seine Mails in verschiedenen Ordnern zu organisieren. Dabei gibt es ein paar spezielle Ordner (z.B. die Inbox, den Gesendet-Ordner, den Papierkorb, etc.). Diese speziellen Ordner definieren wir nun in der Datei "/etc/dovecot/conf.d/15-mailboxes.conf":

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
namespace inbox {
  mailbox Drafts {
    auto = subscribe

    special_use = \Drafts
  }
  mailbox Junk {
    auto = subscribe

    special_use = \Junk
  }
  mailbox Trash {
    auto = subscribe

    special_use = \Trash
  }
  mailbox Sent {
    auto = subscribe

    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
}

Abschließend definieren wir in der "/etc/dovecot/conf.d/auth-passwdfile.conf.ext" wieder, dass die Nutzercredentials aus der Datei "/etc/dovecot/auth/accounts" stammen und woher die E-Mails abgerufen werden sollen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
valid_chroot_dirs = /srv/mailusers/

passdb {
  driver = passwd-file
  args = scheme=SSHA256 username_format=%u /accounts
}

userdb {
  driver = passwd-file
  args = username_format=%u /accounts

  default_fields  = uid=vmail gid=vmail
  override_fields = home=/srv/mailusers/%n/./
}

Im Gegensatz zum letzten Mal verwenden wir für die "userdb" nun ebenfalls die Passwd-Datei. Aus dieser lesen wir z.B. die User-ID und die Group-ID, unter der die Maildateien abgelegt sind. Natürlich setzen wir sinnvolle Default-Werte, falls die entsprechenden Angaben in der Passwd-Datei fehlen sollten.

Nun muss die Passwd-Datei noch mit Inhalten befüllt werden. Werte, die in der Datei fehlen, werden durch die Werte in "default_fields" ergänzt, bzw. durch die Werte in "override_fields" ersetzt:

1
2
3
# username:password:uid:gid::home::userdb_mail=maildir:~/Maildir

kenny@example.com:{SSHA256}lsj7m9rKhS/T7Onyu2hSFZnGFNfG9erhNbNK6XNcftLiv1wk

Da zwischen dem Mailempfang und dem Mailabruf eine Synchronisation liegen wird, werden wir in diesem Synchronisierungsschritt die Zugriffsrechte für die Maildateien anpassen. Solltet ihr jedoch beides auf dem gleichen Server ausführen, wäre es unsinnig, dort extra eine Synchronisation vorzunehmen.

In dem Fall habt ihr zwei Möglichkeiten: Entweder, ihr verwendet weiterhin die userdb-Einstellungen vom letzten Mal (mit dem "static"-Driver) und "vmail" als Standard-Maildateibesitzer, oder aber ihr gebt Postfix ebenfalls diese Besitzerinformationen in Form einer UID- und GID-Liste.

Solltet ihr die UID- und GID-Liste bevorzugen, könnt ihr wie folgt vorgehen. Erst einmal muss in der Datei "/etc/postfix/main.cf" folgende Änderung vorgenommen werden:

1
2
virtual_uid_maps = hash:/etc/postfix/uids.conf
virtual_gid_maps = hash:/etc/postfix/gids.conf

Diese Dateien müsst ihr natürlich erstellen und anschließend mit Inhalt füllen:

1
2
sudo touch /etc/postfix/uids.conf
sudo touch /etc/postfix/gids.conf

In der Datei "/etc/postfix/uids.conf" wird jeder Mailbox-Addresse eine UID zugewiesen, während in der Datei "/etc/postfix/gids.conf" jeder Mailbox-Adresse eine GID zugewiesen wird.

Nehmen wir beispielsweise an, wie erzeugen für die Mailbox-Adresse "kenny@example.com" einen neuen Systemnutzer mit dem Namen "mail_kenny". Dann müssen wir uns von diesem die UID und die GID besorgen:

1
2
3
4
sudo adduser mail_kenny

id -u mail_kenny
id -g mail_kenny

Die Zuweisung der UID zur Mailbox-Adresse nehmen wir dann in der Datei "/etc/postfix/uids.conf" vor:

1
2
3
# address -> UID

kenny@example.com <UID>

Die Zuweisung der GID zur Mailbox-Adresse nehmen wir hingegen in der Datei "/etc/postfix/gids.conf" vor:

1
2
3
# address -> GID

kenny@example.com <GID>

Aus den beiden Dateien müssen nach jeder Änderung wieder "*.db"-Dateien erzeugen, damit Postfix sie verwenden kann. Zudem muss anschließend die Postfix-Konfiguration neu eingelesen werden:

1
2
3
4
sudo postmap /etc/postfix/uids.conf
sudo postmap /etc/postfix/gids.conf

sudo /etc/init.d/postfix reload

Wenn ihr das alles umgesetzt habt, wird es Zeit, Dovecot wieder zu starten:

1
sudo /etc/init.d/dovecot start

Damit haben wir alles entscheidende soweit eingerichtet, dass man prinzipiell damit arbeiten könnte. Was fehlt, ist bei einem Setup mit mehreren Servern die Synchronisation, damit empfangene Mails auch tatsächlich abgerufen werden können. Dieses Thema werden wir in einem späteren Artikel betrachten.

Bevor man jedoch E-Mails senden, empfangen und abrufen kann, muss man erst einmal die Listendateien mit den entsprechenden Domains, Adressen, Passwörtern, DKIM-Schlüssel, etc. anlegen. Leider kommen dabei unterschiedlichste Formate zum Einsatz, mit oft redundanten Inhalten.
Um diese gesamte Konfiguration ein wenig zu vereinfachen und fehlerfreier zu gestalten, habe ich "mailconf" geschrieben, was einem die meiste Arbeit abnimmt. Dieses Script werde ich beim nächsten Mal etwas genauer vorstellen.

Empfangene Grüße, Kenny

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.