Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:dovecot_archlinux

Inhaltsverzeichnis

Dovecot ArchLinux

Dovecot ist ein Quelloffener IMAP-und POP3-E-Mail-Server für Linux bzw. UNIX-ähnlichen Systeme, entwickelt mit dem Hauptaugenmerk auf Sicherheit. Dovecot ist eine ausgezeichnete Wahl für kleine und große Installationen. Dovecot ist schnell und einfach zu installieren, erfordert keine besonderen Voraussetzungen und ist Ressourcenschonend.

Dovecot wird von Timo Sirainen entwickelt und soll hier in der Version CE zum Einsatz kommen.

Beschreibung Externer Link
Homepage Dovecot
Dokumentation https://doc.dovecot.org/2.3/

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root zu werden geben Sie bitte folgenden Befehl ein:

$ su -
Password: 

Vorbereitungen

Bevor mit der Installation, Konfiguration und der Inbetriebnahme von Dovecot begonnen werden kann, soll hier kurz dargestellt werden, welche Art von Einsatz von Dovecot hier realisiert werden soll.

Vorbereitung - Einsatzzweck

Der nachfolgend beschrieben Einsatzzweck, soll einen Dovecot in eher kleinerer Ausführung darstellen, was jedoch nicht bedeutet, das die nachfolgend beschriebene Installation und Konfiguration, nicht auch für eine

  • Anzahl von mehreren hundert Benutzern mit bis zu einem
  • Datenvolumen von 3 TB Plattenspeicherplatz ermöglichen würde.

Grössere Installationen würden jedoch ein etwas anderes, aber nicht grundlegend anderes Vorgehen benötigen!

Vorbereitung - Mailbox-Format

Eine der Entscheidungen sollte sein, welches „Ablagesystem“ Mailbox-Format zum Einsatz kommen soll.

Grundsätzlich gibt es drei sehr bekannte und häufig benutzte „Ablagesysteme“ Mailbox-Formate:

  1. MailDir - siehe auch, externe Links Maildir, Wikipedia - Maildir
    • ✔ jede e-Mail liegt in einer eigenen Datei direkt im Dateisystem
    • ✔ robust, einfach wartbar da nur Ordnerstruktur im Dateisystem
    • ✔ keine Datenbank im Hintergrund, keine Dataisystem-Locking-Mechanismen, NFS-fähig
    • ✘ viele kleine Dateien, aufwendiger beim Backup (Sicherung) der Dateien
    • Einsatz bis ca. 3 TB empfohlen
  2. (m)dbox - siehe auch, externer Link (m)dbox
    • ✔ schnelleres Backup (Sicherung) da nur wenige Dateien
    • ✔ Verwendung vin aktuelle zwei Speicherorten (ALT-Storage) möglich
    • ✔ optimiertes Dovecot eigenes Format für grössere Installationen
    • ✘ Verwendung einer eingebetteten, internen Datenbank (Wikipedia - Berkely DB) im Hintergrund
    • ☛ Administration nur noch über doveadm-Befehle möglich = höheres „KnowHow“ erforderlich
    • ☛ bei der Sicherung (Backup) muss die Datenbank und die Abhängigkeit zu dieser berücksichtigt werden
    • Einsatz ab ca. 3 TB empfohlen

Vorbereitung - Authentifizierung

Eine weitere der Entscheidungen sollte ebenfalls sein, wie sich die Benutzer authentifizieren sollen

Die Authentifizierung bei Dovecot wird als, und soll auch hier als

  • passdb

Konfiguration beschrieben werden.

Mögliche Verfahren sind hier:

  • PAM (/etc/passwd)
  • passwd-file (/etc/dovecot/users) - für Benutzer ohne Login-shell Möglichkeit
  • LDAP
  • ActiveDirectory
  • SQL

um nur einige zu nennen.

Eine weitere Überlegung sollte sein, wie die Kennung für eine Anmeldung an Dovecot aussehen soll.

Nachfolgende zwei Lösungswege sollten in die Überlegungen mit einbezogen werden, beide haben Vor- und Nachteile:

  1. Kennung = e-Mail-Adresse (localpart@domain)
  2. Kennung = username

Vorbereitung - Kontodatenablage

Eine weitere der Entscheidungen sollte ebenfalls sein, wo ggf. weitere Kontodaten / Benutzer-spezifische Einstellungen für Dovecot hinterlegt werden können.

Die Hinterlegung von Kontodaten / Benutzer-spezifische Einstellungen wird als, und soll auch hier als

  • userdb

Konfiguration beschrieben werden.

Mögliche Verfahren sind hier:

  • passwd-file (/etc/dovecot/users) - für Benutzer ohne Login-shell Möglichkeit
  • LDAP
  • ActiveDirectory
  • SQL

um nur einige zu nennen.

Beispiele für die Hinterlegung von Kontodaten / Benutzer-spezifische Einstellungen in Dovecot wären z.B.

  • Benutzer-spezifische Quotas
  • abweichende Login-Namen zur e-Mail-Adresse
  • Pfadspezifikationen für die e-Mail-Verzeichnisse

Vorbereitung - IMAP-Namensraum

Der IMAP-Namensraum legt fest, welche der beiden Varianten der Darstellung von Ordnern im Hierarchiebaum anzuwenden ist. Die beiden Möglichkeiten sind.

  1. dürfen Ordner in der gleichen Hierarchieebene wie die INBOX vorhanden sein
  2. dürfen Ordner nur unterhalb der Hierarchieebene wie die INBOX vorhanden sein

Des weiteren ist festzulegen, welches Trennzeichnen für Trennung der einzelnen Hierarchien voneinander verwendet werden soll. Historisch bedingt ist das der Punkt (.). Oder sollte ggf., wenn Punkte z.B. in den e-Mail-Adressen erlaubt sind, dies der Schrägstrich (/) sein.

Vorbereitung - Ordner-Präfix

Des weiteren ist festzulegen, welcher Ordner-Präfix für Trennung der einzelnen Hierarchien voneinander verwendet werden soll. Historisch bedingt ist das der Punkt (.). Oder sollte ggf., wenn Punkte z.B. in den e-Mail-Adressen erlaubt sind, dies der Schrägstrich (/) sein.

Festzulegen ist also, welche der beiden nachfolgenden Varianten gewählt werden soll.

  1. INBOX, INBOX.Unterordner, INBOX.Unterordner.Unterordner
  2. INBOX, INBOX/Unterordner, INBOX/Unterordner/Unterordner

Installation

Zur Installation des Dovecot wird nachfolgendes Paket benötigt:

  • dovecot - ist im extra-Repository von ArchLinux enthalten.

Mit nachfolgendem Befehl, wird das Pakete dovecot installiert:

# pacman -S --noconfirm dovecot

Installationsverlauf

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket dovecot installiert wurden:

# pacman -Qil dovecot

Installierte Dateien

Installierte Benutzer

Folgender Benutzer wurde ebenfalls angelegt, was mit folgende Befehl überprüft werden kann:

# cat /etc/passwd | grep dove
dovenull:x:74:74:Dovecot user for completely untrustworthy processes:/:/usr/bin/nologin
dovecot:x:76:76:Dovecot user:/:/usr/bin/nologin

Desweiteren wurden auch folgende Gruppen angelegt, was mit folgendem Befehl überprüft werden kann:

# cat /etc/group | grep dove
dovenull:x:74:
dovecot:x:76:

Dienst/Deamon-Start einrichten

Um einen Dovecot, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:

# systemctl enable dovecot.service
Created symlink '/etc/systemd/system/multi-user.target.wants/dovecot.service' → '/usr/lib/systemd/system/dovecot.service'.

Eine Überprüfung, ob beim Neustart des Server der dovecot-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:

# systemctl list-unit-files --type=service | grep -e dovecot.service
dovecot.service                              enabled         disabled

bzw.

# systemctl is-enabled dovecot.service
enabled

iptables/ip6tables Regeln

Damit der Dovecot auch erreichbar ist und nicht der Abruf von E-Mails via IMAP vom Paketfilter iptables blockiert werden, müssen nachfolgende Regeln zum iptables-Regelwerk hinzugefügt werden.

Um die aktuellen iptables-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# iptables -L -nv --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         
1     1169 2101K ACCEPT     all  --  *     *    0.0.0.0/0   0.0.0.0/0     ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp --  *     *    0.0.0.0/0   0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo    *    0.0.0.0/0   0.0.0.0/0           
4        1    60 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:22
5        0     0 LOG        all  --  *     *    0.0.0.0/0   0.0.0.0/0     LOG flags 0 level 5 prefix "REC-INP Defend "
6        0     0 REJECT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     reject-with tcp-reset
7        0     0 REJECT     udp  --  *     *    0.0.0.0/0   0.0.0.0/0     reject-with icmp-port-unreachable
8        0     0 REJECT     all  --  *     *    0.0.0.0/0   0.0.0.0/0     reject-with icmp-proto-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Nachfolgende Befehle, fügen folgende iptables-Regeln dem iptables-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:

  • -A INPUT -p tcp --dport 24 -j ACCEPT
  • -A INPUT -p tcp --dport 143 -j ACCEPT
  • -A INPUT -p tcp --dport 993 -j ACCEPT
  • -A INPUT -p tcp --dport 4190 -j ACCEPT
  • -A INPUT -p tcp --dport 12340 -j ACCEPT
  • -A INPUT -p tcp --dport 12345 -j ACCEPT

und hier die Befehle:

# iptables -I INPUT 5 -p tcp --dport 24 -j ACCEPT
# iptables -I INPUT 6 -p tcp --dport 143 -j ACCEPT
# iptables -I INPUT 7 -p tcp --dport 993 -j ACCEPT
# iptables -I INPUT 8 -p tcp --dport 4190 -j ACCEPT
# iptables -I INPUT 9 -p tcp --dport 12340 -j ACCEPT
# iptables -I INPUT 9 -p tcp --dport 12345 -j ACCEPT

Ein erneute Abfrage des iptables-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:

# iptables -L -nv --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         
1     1202 2103K ACCEPT     all  --  *     *    0.0.0.0/0   0.0.0.0/0     ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp --  *     *    0.0.0.0/0   0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo    *    0.0.0.0/0   0.0.0.0/0           
4        1    60 ACCEPT     tcp  --  *     *    0.0.0.0/    0.0.0.0/0     tcp dpt:22
5        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:24
6        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:143
7        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:993
8        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:4190
9        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:12340
10       0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:12345
11       0     0 LOG        all  --  *     *    0.0.0.0/0   0.0.0.0/0     LOG flags 0 level 5 prefix "REC-INP Defend "
12       0     0 REJECT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     reject-with tcp-reset
13       0     0 REJECT     udp  --  *     *    0.0.0.0/0   0.0.0.0/0     reject-with icmp-port-unreachable
14       0     0 REJECT     all  --  *     *    0.0.0.0/0   0.0.0.0/0     reject-with icmp-proto-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Die neuen Zeilen sind an Position 5 (INPUT) bis Position 10 (INPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
5        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:24
6        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:143
7        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:993
8        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:4190
9        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:12340
10       0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:12345
...

Um diese iptables-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschliessend noch ausgeführt werden:

# /usr/sbin/iptables-save > /etc/iptables/iptables.rules

Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das iptables-Regelwerk auch korrekt gespeichert wurde:

# cat /etc/iptables/iptables.rules
# Generated by iptables-save v1.8.10 on Sat May 04 07:29:23 2024
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 24 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4190 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 12340 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 12345 -j ACCEPT
-A INPUT -j LOG --log-prefix "REC-INP Defend " --log-level 5
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sat May 04 07:29:23 2024
# Generated by iptables-save v1.8.10 on Sat May 04 07:29:23 2024
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sat May 04 07:29:23 2024
# Generated by iptables-save v1.8.10 on Sat May 04 07:29:23 2024
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sat May 04 07:29:23 2024

Um die aktuellen ip6tables-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# ip6tables -nvL --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         
1        0     0 ACCEPT     all      *     *    ::/0        ::/0          ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp     *     *    ::/0        ::/0                
3        0     0 ACCEPT     all      lo    *    ::/0        ::/0                
4        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:22
5        0     0 LOG        all      *     *    ::/0        ::/0          LOG flags 0 level 5 prefix "REC-INP Defend "
6        0     0 REJECT     tcp      *     *    ::/0        ::/0          reject-with tcp-reset
7        0     0 REJECT     udp      *     *    ::/0        ::/0          reject-with icmp6-port-unreachable
8        0     0 REJECT     all      *     *    ::/0        ::/0          reject-with icmp6-addr-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         
1        0     0 LOG        all      *     *    ::/0        ::/0          LOG flags 0 level 5 prefix "REC-FWD Defend "
2        0     0 REJECT     tcp      *     *    ::/0        ::/0          reject-with tcp-reset
3        0     0 REJECT     udp      *     *    ::/0        ::/0          reject-with icmp6-port-unreachable
4        0     0 REJECT     all      *     *    ::/0        ::/0          reject-with icmp6-addr-unreachable

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Nachfolgende Befehle, fügen folgende ip6tables-Regeln dem ip6tables-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:

  • -A INPUT -p tcp --dport 24 -j ACCEPT
  • -A INPUT -p tcp --dport 143 -j ACCEPT
  • -A INPUT -p tcp --dport 993 -j ACCEPT
  • -A INPUT -p tcp --dport 4190 -j ACCEPT
  • -A INPUT -p tcp --dport 12340 -j ACCEPT
  • -A INPUT -p tcp --dport 12345 -j ACCEPT

und hier die Befehle:

# ip6tables -I INPUT 5 -p tcp --dport 24 -j ACCEPT
# ip6tables -I INPUT 6 -p tcp --dport 143 -j ACCEPT
# ip6tables -I INPUT 7 -p tcp --dport 993 -j ACCEPT
# ip6tables -I INPUT 8 -p tcp --dport 4190 -j ACCEPT
# ip6tables -I INPUT 9 -p tcp --dport 12340 -j ACCEPT
# ip6tables -I INPUT 9 -p tcp --dport 12345 -j ACCEPT

Ein erneute Abfrage des ip6tables-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:

# ip6tables -nvL --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         
1        0     0 ACCEPT     all      *     *    ::/0        ::/0          ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp     *     *    ::/0        ::/0                
3        0     0 ACCEPT     all      lo    *    ::/0        ::/0                
4        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:22
5        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:24
6        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:143
7        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:993
8        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:4190
9        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:12340
10       0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:12345
11       0     0 LOG        all      *     *    ::/0        ::/0          LOG flags 0 level 5 prefix "REC-INP Defend "
12       0     0 REJECT     tcp      *     *    ::/0        ::/0          reject-with tcp-reset
13       0     0 REJECT     udp      *     *    ::/0        ::/0          reject-with icmp6-port-unreachable
14       0     0 REJECT     all      *     *    ::/0        ::/0          reject-with icmp6-addr-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         
1        0     0 LOG        all      *     *    ::/0        ::/0          LOG flags 0 level 5 prefix "REC-FWD Defend "
2        0     0 REJECT     tcp      *     *    ::/0        ::/0          reject-with tcp-reset
3        0     0 REJECT     udp      *     *    ::/0        ::/0          reject-with icmp6-port-unreachable
4        0     0 REJECT     all      *     *    ::/0        ::/0          reject-with icmp6-addr-unreachable

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         

Die neuen Zeilen sind an Position 5 (INPUT) bis Postition 10 (INTPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
5        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:24
6        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:143
7        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:993
8        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:4190
9        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:12340
10       0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:12345
...

Um diese ip6tables-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im ip6tables-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:

# /usr/sbin/ip6tables-save > /etc/iptables/ip6tables.rules 

Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das ip6tables-Regelwerk auch korrekt gespeichert wurde:

# cat /etc/iptables/ip6tables.rules
# Generated by iptables-save v1.8.10 on Sat May 04 07:29:53 2024
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sat May 04 07:29:53 2024
# Generated by iptables-save v1.8.10 on Sat May 04 07:59:23 2024
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 24 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4190 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 12340 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 12345 -j ACCEPT
-A INPUT -j LOG --log-prefix "REC-INP Defend " --log-level 5
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp6-port-unreachable
-A INPUT -j REJECT --reject-with icmp6-addr-unreachable
-A FORWARD -j LOG --log-prefix "REC-FWD Defend " --log-level 5
-A FORWARD -p tcp -j REJECT --reject-with tcp-reset
-A FORWARD -p udp -j REJECT --reject-with icmp6-port-unreachable
-A FORWARD -j REJECT --reject-with icmp6-addr-unreachable
COMMIT
# Completed on Sat May 04 07:29:53 2024
# Generated by iptables-save v1.8.10 on Sat May 04 07:59:23 2024
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sat May 04 07:29:53 2024

Konfigurationsdateien

Die Konfiguration von Dovecot findet in verschiedenen Dateien statt, welche alle in den Verzeichnissen

  • /etc/dovecot
  • /etc/dovecot/conf.d

hinterlegt werden müssen.

:!: ACHTUNG - Nach der Installation sind KEINE Konfigurationsdateien vorhanden!

Woher die Konfigurationsdateien nach einer erfolgreichen Installation von Dovecot kopiert werden sollen, kann mit nachfolgendem Befehl ermittelt werden, welcher gewollt zu einer Fehlermeldung führt:

# doveconf -n | head -n1
doveconf: Fatal: open(/etc/dovecot/dovecot.conf) failed: No such file or directory (copy example configs
 from /usr/share/doc/dovecot/example-config/)
# 2.3.21.1 (d492236fa0): /etc/dovecot/dovecot.conf

Anschliessend kann dann der gesamte Konfigurationsbaum mit nachfolgendem Befehl kopiert werden, so dass der Dovecot Server nun ein Standardkonfiguration besitzt:

# cp -ar /usr/share/doc/dovecot/example-config /etc/dovecot

Abschliessend kann mit nachfolgendem Befehl überprüft werden, ob nun die Konfigurationsdateien für Dovecot vorhanden sind, welche eine Ausgabe in etwa wie die nachfolgende zum Vorschein bringen sollte:

# ls -l /etc/dovecot/*
-rw-r--r-- 1 root root 4333 Aug 14 18:58 /etc/dovecot/dovecot.conf
-rw-r--r-- 1 root root 1507 Aug 14 18:58 /etc/dovecot/dovecot-dict-auth.conf.ext
-rw-r--r-- 1 root root  522 Aug 14 18:58 /etc/dovecot/dovecot-dict-sql.conf.ext
-rw-r--r-- 1 root root 5733 Aug 14 18:58 /etc/dovecot/dovecot-ldap.conf.ext
-rw-r--r-- 1 root root 2183 Aug 14 18:58 /etc/dovecot/dovecot-oauth2.conf.ext
-rw-r--r-- 1 root root 5824 Aug 14 18:58 /etc/dovecot/dovecot-sql.conf.ext

/etc/dovecot/conf.d:
total 128
-rw-r--r-- 1 root root  5248 Aug 14 18:58 10-auth.conf
-rw-r--r-- 1 root root  1781 Aug 14 18:58 10-director.conf
-rw-r--r-- 1 root root  3757 Aug 14 18:58 10-logging.conf
-rw-r--r-- 1 root root 17770 Aug 14 18:58 10-mail.conf
-rw-r--r-- 1 root root  3619 Aug 14 18:58 10-master.conf
-rw-r--r-- 1 root root  1585 Aug 14 18:58 10-metrics.conf
-rw-r--r-- 1 root root  3433 Aug 14 18:58 10-ssl.conf
-rw-r--r-- 1 root root  1657 Aug 14 18:58 15-lda.conf
-rw-r--r-- 1 root root  3111 Aug 14 18:58 15-mailboxes.conf
-rw-r--r-- 1 root root  4520 Aug 14 18:58 20-imap.conf
-rw-r--r-- 1 root root  1367 Aug 14 18:58 20-lmtp.conf
-rw-r--r-- 1 root root  4066 Aug 14 18:58 20-pop3.conf
-rw-r--r-- 1 root root  4299 Aug 14 18:58 20-submission.conf
-rw-r--r-- 1 root root   676 Aug 14 18:58 90-acl.conf
-rw-r--r-- 1 root root   292 Aug 14 18:58 90-plugin.conf
-rw-r--r-- 1 root root  2596 Aug 14 18:58 90-quota.conf
-rw-r--r-- 1 root root   499 Aug 14 18:58 auth-checkpassword.conf.ext
-rw-r--r-- 1 root root   489 Aug 14 18:58 auth-deny.conf.ext
-rw-r--r-- 1 root root   343 Aug 14 18:58 auth-dict.conf.ext
-rw-r--r-- 1 root root   924 Aug 14 18:58 auth-ldap.conf.ext
-rw-r--r-- 1 root root   561 Aug 14 18:58 auth-master.conf.ext
-rw-r--r-- 1 root root   515 Aug 14 18:58 auth-passwdfile.conf.ext
-rw-r--r-- 1 root root   788 Aug 14 18:58 auth-sql.conf.ext
-rw-r--r-- 1 root root   611 Aug 14 18:58 auth-static.conf.ext
-rw-r--r-- 1 root root  2182 Aug 14 18:58 auth-system.conf.ext

Konfiguration: Grundlagen

/usr/bin/doveconf

Ähnlich wie auch bei Postfix, gibt es bei Dovecot ein Werkzeug, mit dem die Konfiguration zur Anzeige gebracht werden kann:

  • /usr/bin/doveconf.

Nachfolgende Befehle sollten zum Einsatz kommen:

  • doveconf -d - Listet die default (Standard) Werte der Dovecot-Konfiguration auf
  • doveconf -n - Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Dovecot-Konfiguration auf
  • doveconf -N - Listet alle nicht Standard und zusätzlich alle explizit gesetzten Standard DovecotKonfigurationswerte auf
  • doveconf -m <MODUL> - Listet die aktuelle Konfiguration, aber nur auf das angegeben Modul auf - z.B.: imap, imap-login, lmtp
  • doveconf -a - Listet alle aktuellen - inklusive der Standard - konfigurierten Werte der Dovecot-Konfiguration auf

Eine aktuelle und vollständige Liste aller Optionen, bringt die man-Page von /usr/bin/doveconf mit, welche mit nachfolgendem Befehl zur Anzeige gebracht werden kann:

# man doveconf

Nach dem Ausführen der Befehls

  • doveconf -n

sollte eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen:

# doveconf -n
# 2.3.21.1 (d492236fa0): /etc/dovecot/dovecot.conf
# OS: Linux 6.6.63-1-lts x86_64  
# Hostname: vml080.idmz.tachtler.net
namespace inbox {
  inbox = yes
  location = 
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix = 
}
passdb {
  driver = pam
}
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = # hidden, use -P to show it
userdb {
  driver = passwd
}

Konfiguration: Basiskonfiguration

/etc/dovecot/dovecot.conf

Nachfolgend sollen die ersten grundlegenden Konfigurationen vorgenommen werden.

protocols

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-protocols
Defaultwert
protocols = imap pop3 lmtp
Neuer Wert
protocols = imap lmtp
Konfiguration
# Protocols we want to be serving.
# Tachtler
# default: #protocols = imap pop3 lmtp submission
protocols = imap lmtp
Beschreibung Die Liste der Protokolle, die dieser Knoten unterstützt.

Eine durch Leerzeichen getrennte Liste von Protokollen (die separat konfiguriert werden) als Wert.

Ein der ersten Entscheidungen kann sein, welches Protokoll der Dovecot überhaupt zur Kommunikation mit dem Client anbieten soll.

Nachfolgend kann z.B. durch eine Änderung des Standard, hier z.B. das Protokoll pop3 - nicht mehr angeboten werden, was jedoch standardmässig der Fall ist.

listen

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-listen
Defaultwert
listen = *, ::
Neuer Wert
listen = 127.0.0.1, 10.0.0.80, ::1, fd00::10:10:0:0:80, 2001:db8::10:10:0:0:80
Konfiguration
# A comma separated list of IPs or hosts where to listen in for connections. 
# "*" listens in all IPv4 interfaces, "::" listens in all IPv6 interfaces.
# If you want to specify non-default ports or anything more complex,
# edit conf.d/master.conf.
# Tachtler
# default: #listen = *, ::
listen = 127.0.0.1, 10.0.0.80, ::1, fd00::10:10:0:0:80, 2001:db8::10:10:0:0:80
Beschreibung Eine durch Kommata getrennte Liste von IP-Adressen oder Hostnamen, über die externe Netzwerkverbindungen abgewickelt werden sollen.

* lauscht an allen IPv4-Schnittstellen, und :: lauscht an allen IPv6-Schnittstellen.

verbose_proctitle

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-verbose_proctitle
Defaultwert
verbose_proctitle = no
Neuer Wert
verbose_proctitle = yes
Konfiguration
# Show more verbose process titles (in ps). Currently shows user name and
# IP address. Useful for seeing who are actually using the IMAP processes
# (eg. shared mailboxes or if same uid is used for multiple accounts).
# Tachtler
# default: #verbose_proctitle = no
verbose_proctitle = yes
Beschreibung Wenn diese Option aktiviert ist, zeigt der Befehl ps ausführlichere Prozessdetails an, einschliesslich des Benutzernamens und der IP-Adresse des verbundenen Clients.

Auf diese Weise lässt sich leichter erkennen, wer die IMAP-Prozesse tatsächlich nutzt.

Nachfolgende Befehle demonstrieren die Anzeige eines bei Dovecot angemeldeten Benutzer, einmal - ohne und einmal mit - erweiterter Prozessliste und Übersicht.

ohne - erweiterter Prozessliste und Übersicht

# ps ax | grep dovecot/imap

mit - erweiterter Prozessliste und Übersicht

# ps ax | grep dovecot/imap

FIXME

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

:!: HINWEIS - Die nachfolgenden Parameter können während der INSTALLATION bei der Fehlersuche hilfreich sein, sollten jedoch in PRODUKTIVEN Umgebungen ggf. nicht gesetzt werden!

Zu beginn einer neuen Dovecot Installation, kann es hilfreich sein das Logging bzw. das Log Level so zu konfigurieren, dass ein erweitertes Logging erfolgt.

auth_verbose

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-auth_verbose
Defaultwert
auth_verbose = no
Neuer Wert
auth_verbose = yes
Konfiguration
# Log unsuccessful authentication attempts and the reasons why they failed.
# Tachtler
# default: #auth_verbose = no
auth_verbose = yes
Beschreibung Neu in Version v2.2.24.

Anpassung der Ausführlichkeit des Protokolls.

Es werden erfolglose Authentifizierungsversuche und die Gründe für das Scheitern protokolliert.

:!: HINWEIS - Das explizite Setzen von auth_debug setzt diese Einstellung ausser Kraft!

auth_verbose_passwords

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-auth_verbose_passwords
Defaultwert
auth_verbose_passwords = no
Neuer Wert KEIN neuer Wert!
Beschreibung Falls das Passwort nicht übereinstimmt, wird das versuchte Passwort protokolliert. es kann das protokollierte Kennwort auch auf n Zeichen gekürzt werden, indem :n anhängen (z.B. sha1:6).

Verfügbare Transformationen:

plain, yes = Klartextpasswort ausgeben (NICHT EMPFOHLEN)
sha1 = Ausgabe des SHA1-verschlüsselten Passworts.

auth_debug

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-auth_debug
Defaultwert
auth_debug = no
Neuer Wert KEIN neuer Wert!
Beschreibung Aktiviert die gesamte Debug-Protokollierung der Authentifizierung (aktiviert auch auth_verbose). Passwörter werden als <hidden> protokolliert.

Durch setzen des Konfigurationswertes wie nachfolgend beschrieben, werden erweiterte Informationen, wie z.B. geladene Module, zusätzlich mit protokolliert.

auth_debug_passwords

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-auth_debug_passwords
Defaultwert
auth_debug_passwords = no
Neuer Wert KEIN neuer Wert!
Beschreibung Mit dieser Einstellung wird die Ausführlichkeit der Protokollierung angepasst. Wenn Passwörter nicht übereinstimmen, werden die Passwörter und das verwendete Schema protokolliert, damit das Problem behoben werden kann.

:!: HINWEIS - Durch die Aktivierung dieser Einstellung wird auch auth_debug aktiviert.

mail_debug

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-mail_debug
Defaultwert
mail_debug = no
Neuer Wert KEIN neuer Wert!
Beschreibung Mit dieser Einstellung wird die Ausführlichkeit der Protokollierung angepasst. Sie aktiviert das Debugging von Mail-Prozessen. Dies kann helfen, den Grund herauszufinden, wenn Dovecot bestimmte E-Mail-Nachrichten nicht findet.

Durch setzen des Konfigurationswertes wie nachfolgend beschrieben, werden zusätzliche Informationen zum e-Mail-Prozess, wie z.B. Dovecot die e-Mail-Verzeichnisse des Benutzer ermittelt, zusätzlich mit protokolliert.

verbose_ssl

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-verbose_ssl
Defaultwert
verbose_ssl = no
Neuer Wert KEIN neuer Wert!
Beschreibung Wenn aktiviert, werden SSL-Fehler auf Protokollebene protokolliert.

log_timestamp

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-log_timestamp
strftime(3) — Linux manual page
Defaultwert
log_timestamp = "%b %d %H:%M:%S "
Neuer Wert KEIN neuer Wert!
Beschreibung Das Präfix für jede in die Protokolldatei geschriebene Zeile.

%-Variablen sind im strftime(3)-Format.

login_log_format_elements

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-login_log_format_elements
Dovecot Config File Syntax - Config Variables - Login variables
Defaultwert
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c
 session=<%{session}>
Neuer Wert KEIN neuer Wert!
Beschreibung Eine durch Leerzeichen getrennte Liste von Elementen der Login-Log-Formatierung.

Elemente, die einen nicht leeren Wert haben, werden zu einer durch Komma getrennten Zeichenfolge zusammengefügt.

Es können Dovecot Config File Syntax - Config Variables - Login variables verwendet werden.

login_log_format

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-login_log_format
Dovecot Config File Syntax - Config Variables - Global variables
Defaultwert
login_log_format = %$: %s
Neuer Wert KEIN neuer Wert!
Beschreibung Die Formatierung der Login-Log-Meldungen.

%s = Die login_log_format_elements Zeichenkette
%$ = Die LOG-Daten

mail_log_prefix

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-mail_log_prefix
Dovecot Config File Syntax - Config Variables - Mail service user variables
Defaultwert
mail_log_prefix = %s(%u)<%{pid}><%{session}>: 
Neuer Wert KEIN neuer Wert!
Beschreibung Es kann hier ein Log-Präfix für Mailprozesse angeben werden.

Es können Dovecot Config File Syntax - Config Variables - Mail service user variables verwendet werden.

deliver_log_format

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-deliver_log_format
Dovecot Config File Syntax - Config Variables - Mail service user variables
Defaultwert
deliver_log_format = msgid=%m: %$
Neuer Wert KEIN neuer Wert!
Beschreibung Das zu verwendende Format für die Protokollierung von E-Mail-Zustellungen.

Variablen, die für diese Einstellung verwendet werden können:

%$ = Status der Zustellung der E-Mail (e.g., saved to INBOX)
%{msgid}, %m = Message-ID
%{subject}, %s = Betreff
%{from}, %f = E-Mail-Adresse des Absenders
%{from_envelope}, %e = SMTP E-Mail-Adresse des Absenders aus dem ENVELOPE
%{size}, %p = physische Grösse der E-Mail
%{vsize}, %w = virtuelle Grösse der E-Mail
%{to_envelope} = E-Mail-Adresse des Empfängers aus dem ENVELOPE
%{delivery_time} = Anzahl der Millisekunden bis zur Zustellung der E-Mail
%{session_time} = LMTP-Sitzungsdauer, ohne %{delivery_time}
%{storage_id} = Backend-spezifische ID für E-Mail, z.B. Maildir-Dateiname

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

In der Konfigurationsdatei wird festgelegt, welche Art von „Ablagesystem“ Mailbox-Format verwendet werden soll und wo die e-Mail (Postfächer) im Dateisystem abgelegt werden sollen und welche plugins verwendet werden.

mail_location

Durch setzen des Konfigurationswertes wie nachfolgend beschrieben, werden zwei Parameter bestimmt.

  1. Welche Art von „Ablagesystem“ Mailbox-Format verwendet werden soll
  2. Wo die e-Mail (Postfächer) im Dateisystem abgelegt werden sollen

Welche Arten von „Ablagesystem“ Mailbox-Format es gibt, kann unter nachfolgendem internen Link nachgelesen werden:

:!: HINWEIS - Hier soll das „Ablagesystem“ bzw. der Mailbox-Format Maildir verwendet werden!

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-mail_location
Dovecot Config File Syntax - Config Variables - Mail user variables
Defaultwert
mail_location = 
Neuer Wert
mail_location = maildir:~/Maildir
Konfiguration
# Location for users' mailboxes. The default is empty, which means that Dovecot
# tries to find the mailboxes automatically. This won't work if the user
# doesn't yet have any mail, so you should explicitly tell Dovecot the full
# location.
#
# If you're using mbox, giving a path to the INBOX file (eg. /var/mail/%u)
# isn't enough. You'll also need to tell Dovecot where the other mailboxes are
# kept. This is called the "root mail directory", and it must be the first
# path given in the mail_location setting.
#
# There are a few special variables you can use, eg.:
#
#   %u - username
#   %n - user part in user@domain, same as %u if there's no domain
#   %d - domain part in user@domain, empty if there's no domain
#   %h - home directory
#
# See doc/wiki/Variables.txt for full list. Some examples:
#
#   mail_location = maildir:~/Maildir
#   mail_location = mbox:~/mail:INBOX=/var/mail/%u
#   mail_location = mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
#
# <doc/wiki/MailLocation.txt>
#
# Tachtler
# default: #mail_location = 
mail_location = maildir:~/Maildir 
Beschreibung Diese Einstellung gibt den Speicherort für die Mailboxen der Benutzer an.

Bei einem leeren Wert versucht Dovecot, die Postfächer automatisch zu finden (in ~/Maildir, /var/mail/username, ~/mail und ~/Mail, in dieser Reihenfolge). Die automatische Erkennung schlägt jedoch häufig bei Benutzern fehl, deren Mail-Verzeichnis noch nicht erstellt wurde, so dass hier, wenn möglich, den vollständigen Speicherort angeben werden sollte.

Dovecot Config File Syntax - Config Variables - Mail user variables können verwendet werden.

Siehe auch: Dovecot Configuration Manual - Mail Location Settings

:!: WICHTIG - Die Definition ~/ in mail_location = maildir:~/Maildir bedeutet nicht, das hier ein vorhandenes home-Verzeichnis eines existierenden Benutzer verwendet werden muss!

:!: HINWEIS - Die Angabe ~/ bedeutet vielmehr, dass hier eine Angabe erfolgt bei der unterhalb dieser Angabe dann der Ordner Maildir angelegt wird!

:!: HINWEIS - Das home-Verzeichnis bei virtuellen Benutzer, welche keine Login-shell haben, kann z.B. in einer separaten Datei passwd-file oder z.B. auch im SQL definiert werden.

Erklärung:

mail_location = maildir:~/Maildir
Wert Beschreibung
maildir: Das verwendete Mailbox-Format ist das Maildir-Format
~ Dynamischer Pfad-Teil zum Dateisystem zum home-Verzeichnis
/Maildir Pfad-Trenner und Ordnername unter dem die Maildir-Struktur angelegt wird

Beispiel: Hinter der Angabe ~/ könnte sich z.B. nachfolgende Definition pro Benutzer verbergen:

  • /srv/vmail/%Ld/%Ln - localpart@domain = /srv/vmail/domain/localpart
  • /srv/vmail/%Lu - user123 = /srv/vmail/user123

Erklärung Nachfolgende Erklärungen zu oben gezeigtem Beispiel:

Wert Beschreibung
/%Lu Pfad-Trenner und variabler Pfad-Teil in Kleinschrift umgewandelter unername - z.B. user1234 oder auch locapart@domain sein
/%Ld Pfad-Trenner und variabler Pfad-Teil in Kleinschrift umgewandelter domain-Teil aus locapart@domain
/%Ln Pfad-Trenner und variabler Pfad-Teil in Kleinschrift umgewandelter localpart-Teil aus locapart@domain

namespace inbox

Nachfolgende Definitionen stellt die Konfiguration für die INBOX der Benutzers dar.

namespace inbox: type

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/namespace/#core_setting-namespace/type
Dovecot Configuration Manual - Namespaces
Defaultwert
type = private
Neuer Wert
type = private
Konfiguration
# If you need to set multiple mailbox locations or want to change default
# namespace settings, you can do it by defining namespace sections.
#
# You can have private, shared and public namespaces. Private namespaces
# are for user's personal mails. Shared namespaces are for accessing other
# users' mailboxes that have been shared. Public namespaces are for shared
# mailboxes that are managed by sysadmin. If you create any shared or public
# namespaces you'll typically want to enable ACL plugin also, otherwise all
# users can access all the shared mailboxes, assuming they have permissions
# on filesystem level to do so.
namespace inbox {
  # Namespace type: private, shared or public
  # Tachtler
  # default: #type = private
  type = private
Beschreibung Der Namensraumtyp.

Der Standardwert ist hier auf private gesetzt. Nachfolgende Werte sind hier möglich

  • private = nur für den Benutzer ersichtlich
  • shared = ersichtlich für Benutzer, welche die entsprechenden Rechte (acl) freigegeben bzw. erhalten haben
  • public = wie shared, jedoch obliegt hier die Verwaltung keinem Benutzer, sondern dem System Administrator

:!: WICHTIG - Der hier gesetzte Standardwert type = private sollte beibehalten werden, da dies die persönliche mailbox (Postfach) des Benutzers darstellt und diese auch „privat“ bleiben sollte!

:!: HINWEIS - Der Wert soll hier explizit gesetzt werden!

namespace inbox: separator

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/namespace/#core_setting-namespace/separator
Dovecot Configuration Manual - Namespaces
Defaultwert
separator = .
Neuer Wert
separator = /
Konfiguration
  # Hierarchy separator to use. You should use the same separator for all
  # namespaces or some clients get confused. '/' is usually a good one.
  # The default however depends on the underlying mail storage format.
  # Tachtler
  # default: #separator = 
  separator = /  
Beschreibung Gibt das Hierarchietrennzeichen für den Namensraum an.

Das Trennzeichen ist ein einzelnes Zeichen, das sonst nicht in Ordnernamen verwendet werden kann.

Die gebräuchlichsten Trennzeichen sind . (Punkt) und / (Schrägstrich), aber es können auch andere Trennzeichen verwendet werden. Zum Beispiel ist ^ in normalen Ordnernamen seltener zu finden.

Es wird empfohlen, das Feld leer zu lassen und den Standardwert zu akzeptieren.

:!: WICHTIG - Das Trennzeichen für die Hierarchieebenen sollte für alle namespaces gleich sein und nicht unterschiedlich vergeben werden. Hier soll der Schrägstrich (/) verwendet werden!

:!: HINWEIS - Der Grund für die Wahl des / (Schrägstrich) als separator liegt darin, das ein Punkt im Benutzername auftreten könnte und spätestens bei shared mailboxes zu einem sehr unschönen Verhalten führen könnte!

namespace inbox: prefix

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/namespace/#core_setting-namespace/prefix
Dovecot Configuration Manual - Namespaces
Dovecot Config File Syntax - Config Variables - Mail user variables
Defaultwert
prefix
Neuer Wert
prefix = INBOX/
Konfiguration
  # Prefix required to access this namespace. This needs to be different for
  # all namespaces. For example "Public/".
  # Tachtler
  # default: #prefix = 
  prefix =  INBOX/ 
Beschreibung Gibt das Präfix für den Namespace an.

:!: HINWEIS - Muss mit dem Hierarchietrennzeichen enden!

Dovecot Config File Syntax - Config Variables - Mail user variables können verwendet werden.

:!: HINWEIS - Dies sollte für jeden namespace unterschiedlich vergeben werden.

namespace inbox: location

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/namespace/#core_setting-namespace/location
Dovecot Configuration Manual - Namespaces
Dovecot Config File Syntax - Config Variables - Mail user variables
Defaultwert
location = mail_location
Neuer Wert KEIN neuer Wert!
Beschreibung Gibt Treiber und Parameter für die physische Speicherung von Postfächern an. Es ermöglicht ein Überschreiben der mail_location-Einstellung für einen Namensraum.

Dovecot Config File Syntax - Config Variables - Mail user variables können verwendet werden.

:!: HINWEIS - Die Angabe in einem namespace überschreibt die Angabe mail_location, welche ausserhalb der jeweiligen namespace Definition bereits „global“ gesetzt wurde. Dies sollte jedoch auf dem Standardwert belassen werden!

namespace inbox: inbox

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/namespace/#core_setting-namespace/inbox
Dovecot Configuration Manual - Namespaces
Defaultwert
inbox = no
Neuer Wert
inbox = yes
Konfiguration
  # There can be only one INBOX, and this setting defines which namespace
  # has it.
  inbox = yes
Beschreibung Wenn ja, wird dieser Namensraum als derjenige angesehen, der den Ordner INBOX enthält.

Es kann nur ein solcher namespace definiert werden.

Diese Definition darf nur in einem namespace gesetzt werden, da nur ein namespace für die jeweilige INBOX des Benutzers zeichnen kann. Das es sich hier um den namespace inbox handelt, sollte hier der Wert gesetzt bzw. auf der bereits durchgeführten Konfiguration belassen werden.

namespace inbox: hidden

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/namespace/#core_setting-namespace/hidden
Dovecot Configuration Manual - Namespaces
Defaultwert
hidden = no
Neuer Wert KEIN neuer Wert!
Konfiguration
  # If namespace is hidden, it's not advertised to clients via NAMESPACE
  # extension. You'll most likely also want to set list=no. This is mostly
  # useful when converting from another server with different namespaces which
  # you want to deprecate but still keep working. For example you can create
  # hidden namespaces with prefixes "~/mail/", "~%u/mail/" and "mail/".
  #hidden = no
Beschreibung Wenn ja, wird der Namensraum vor dem IMAP-Befehl NAMESPACE verborgen.
Siehe auch Dovecot ArchLinux - /etc/dovecot/conf.d/10-mail.conf - namespace inbox: list

namespace inbox: list

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/namespace/#core_setting-namespace/list
Dovecot Configuration Manual - Namespaces
Defaultwert
list = yes
Neuer Wert KEIN neuer Wert!
Konfiguration
  # Show the mailboxes under this namespace with LIST command. This makes the
  # namespace visible for clients that don't support NAMESPACE extension.
  # "children" value lists child mailboxes, but hides the namespace prefix.
  #list = yes
Beschreibung Diesen namespace in die LIST-Ausgabe einbeziehen, wenn die übergeordneten Ordner aufgelistet werden.
Siehe auch Dovecot ArchLinux - /etc/dovecot/conf.d/10-mail.conf - namespace inbox: hidden

Mögliche Optionen sind

  • children - Die Liste der Namensraum-Präfixe wird nur aufgelistet, wenn es untergeordnete Postfächer gibt
  • no - Namensraum und Postfächer werden nicht aufgelistet, es sei denn, es werden explizit Postfächer unter dem Namensraum-Präfix angefordert
  • yes - Namensraum und Postfächer werden immer aufgelistet

:!: HINWEIS - Diese Definition kann dazu verwendet werden, ganze namespaces vor einem client zu verstecken und ist ähnlich wie die Definition hidden, für Clients, die die namespace Erweiterung nicht interpretieren bzw. nicht verstehen.

namespace inbox: subscriptions

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/namespace/#core_setting-namespace/subscriptions
Dovecot Configuration Manual - Namespaces
Dovecot Config File Syntax - Config Variables - Mail user variables
Defaultwert
subscriptions = yes
Neuer Wert KEIN neuer Wert!
Konfiguration
  # Namespace handles its own subscriptions. If set to "no", the parent
  # namespace handles them (empty prefix should always have this as "yes")
  #subscriptions = yes
Beschreibung Ob Abonnements in diesem Namespace gespeichert werden.

Bei gemeinsam genutzten Namespaces ist dies normalerweise nein, so dass die Abonnements der gemeinsam genutzten Ordner in der primären Abonnementdatei des Benutzers gespeichert werden. Wenn nein, werden die Abonnements im ersten übergeordneten Namespace (basierend auf dem Präfix) gespeichert, für den diese Einstellung aktiviert ist.

Beispiel: Wenn diese Einstellung für einen Namespace mit prefix=foo/bar/ auf no gesetzt ist, prüft Dovecot zunächst, ob es einen prefix=foo/-Namespace mit subscriptions=yes und dann einen Namespace mit einem leeren Präfix gibt. Wenn keiner von beiden gefunden wird, wird ein Fehler ausgegeben.

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

Damit Dovecot auch auf Anfragen von z.B. Postfix über das Protokoll lmtp, wie hier beschrieben

erreichbar ist, sind nachfolgende Einstellungen in der Konfigurationsdatei

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

durchzuführen.

service lmtp

Es gibt zwei Möglichkeiten, wie Dovecot lmtp anbieten kann,

  1. unix-Socket - wenn der MTA z.B. Postfix und MDA Dovecot auf ein und dem selben Servern sind.
  2. TCP/IP-Verbindung - wenn der MTA z.B. Postfix und MDA Dovecot nicht auf dem selben Servern sind.

Hier soll die ein Anbindung via TCP/IP-Verbindung erfolgen, was durch nachfolgende Einstellungen erreicht werden kann.

In der nachfolgend gezeigten Konfiguration lauscht der Dovecot auf

  • internen IP-Adressen, welche nicht aus dem Internet erreichbar sein sollten, auf
  • Port 24, der den Port für lmtp (Priv-mail: Private E-Mail-Systeme) darstellt.

service lmtp: inet_listener

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/service_configuration/#inet-listeners
Dovecot Configuration Manual - Service Configuration - inet-listeners
Defaultwert
inet_listener
Neuer Wert
inet_listener lmtp
Konfiguration
service lmtp {
  unix_listener lmtp {
    #mode = 0666
  }
 
  # Create inet listener only if you can't use the above UNIX socket
  # Tachtler
  # default: #inet_listener lmtp {
  inet_listener lmtp {
    # Avoid making LMTP visible for the entire internet
    # Tachtler
    # default: #address =
    address = 10.0.0.80, fd00::10:10:0:0:80
    # Tachtler
    # default: #port = 
    port = 24
  # Tachtler
  # default: #}
  }
  # Tachtler - NEW -
  user = vmail
}
Beschreibung Definiert einen Listener vom Typ: inet_listsners.

service lmtp: address

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/service_configuration/#address
Dovecot Configuration Manual - Service Configuration - inet-listeners
Defaultwert
address = 
Neuer Wert
address = 10.0.0.80, fd00::10:10:0:0:80
Konfiguration
service lmtp {
  unix_listener lmtp {
    #mode = 0666
  }
 
  # Create inet listener only if you can't use the above UNIX socket
  # Tachtler
  # default: #inet_listener lmtp {
  inet_listener lmtp {
    # Avoid making LMTP visible for the entire internet
    # Tachtler
    # default: #address =
    address = 10.0.0.80, fd00::10:10:0:0:80
    # Tachtler
    # default: #port = 
    port = 24
  # Tachtler
  # default: #}
  }
  # Tachtler - NEW -
  user = vmail
}
Beschreibung Durch Leerzeichen getrennte Liste von IP-Adressen/Hostnamen, die abgehört werden sollen. * bedeutet alle IPv4-Adressen, :: bedeutet alle IPv6-Adressen. Standardmässig wird die Einstellung listen verwendet.

service lmtp: port

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/service_configuration/#port
Dovecot Configuration Manual - Service Configuration - inet-listeners
Defaultwert
port = 
Neuer Wert
port = 24
Konfiguration
service lmtp {
  unix_listener lmtp {
    #mode = 0666
  }
 
  # Create inet listener only if you can't use the above UNIX socket
  # Tachtler
  # default: #inet_listener lmtp {
  inet_listener lmtp {
    # Avoid making LMTP visible for the entire internet
    # Tachtler
    # default: #address =
    address = 10.0.0.80, fd00::10:10:0:0:80
    # Tachtler
    # default: #port = 
    port = 24
  # Tachtler
  # default: #}
  }
  # Tachtler - NEW -
  user = vmail
}
Beschreibung Nummer des Ports, der abgehört werden soll. 0 schaltet den Listener aus.

service lmtp: user

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/service_configuration/#user
Dovecot Configuration Manual - Service Configuration - inet-listeners
Defaultwert
user = 
Neuer Wert
user = vmail
Konfiguration
service lmtp {
  unix_listener lmtp {
    #mode = 0666
  }
 
  # Create inet listener only if you can't use the above UNIX socket
  # Tachtler
  # default: #inet_listener lmtp {
  inet_listener lmtp {
    # Avoid making LMTP visible for the entire internet
    # Tachtler
    # default: #address =
    address = 10.0.0.80, fd00::10:10:0:0:80
    # Tachtler
    # default: #port = 
    port = 24
  # Tachtler
  # default: #}
  }
  # Tachtler - NEW -
  user = vmail
}
Beschreibung Grundsätzlich muss der LMTP-Prozess als Benutzer: root laufen und darf nur vorübergehend Rechte an Benutzer abgeben. Andernfalls könnte er keine Postzustellungen an mehr als einen Benutzer mit unterschiedlicher UID verarbeiten.

Wenn allerdings nur eine einzige globale UID/GID verwendet wird, kann die Sicherheit erhöhen werden, indem der lmtp-Prozesse als diesen Benutzer ausgeführt wird.

Konfiguration: Autocreate Mailboxes

Unter Dovecot besteht die Möglichkeit Postfächer (Mailboxes) und auch Ordner (Folder) bei der allerersten Anmeldung eines Benutzer automatisiert von Dovecot anlegen zu lassen.

Hier gibt es drei verschiedene Gestaltungsmöglichkeiten:

Einstellung Beschreibung
auto=no Es wird kein Postfach (Mailbox) / Ordner (Folder) angelegt
auto=create Es wird ein Postfach (Mailbox) / Ordner (Folder) beim ersten Zugriff darauf angelegt, aber es erfolgt kein Abonnement.
auto=subscribe Es wird ein Postfach (Mailbox) / Ordner (Folder) bei der ersten Anmeldung angelegt und es erfolgt ein Abonnement.

Konfiguration: Autocreate Mailboxes

Unter Dovecot besteht die Möglichkeit Postfächer (Mailboxes) und auch Ordner (Folder) bei der allerersten Anmeldung eines Benutzer automatisiert von Dovecot anlegen zu lassen.

Hier gibt es drei verschiedene Gestaltungsmöglichkeiten:

Einstellung Beschreibung
auto=no Es wird kein Postfach (Mailbox) / Ordner (Folder) angelegt
auto=create Es wird ein Postfach (Mailbox) / Ordner (Folder) beim ersten Zugriff darauf angelegt, aber es erfolgt kein Abonnement.
auto=subscribe Es wird ein Postfach (Mailbox) / Ordner (Folder) bei der ersten Anmeldung angelegt und es erfolgt ein Abonnement.

/etc/dovecot/conf.d/15-mailboxes.conf

In dieser Konfigurationsdatei werden die Einstellungen für die Postfächer (Mailboxes) durchgeführt.

Nachfolgend sollen das Postfach (Mailbox) und die nachfolgend genannten Ordner (Folder) automatisch angelegt und diese sollen ebenfalls gleich automatisch abonniert werden.

  • Drafts (Entwürfe)
  • Sent (Gesendet)
  • Trash (Papierkorb)
  • Junk (ggf. Spam)

Dazu können die bereits in der Konfigurationsdatei enthaltenen Einstellungen, wie nachfolgend dargestellt, angepasst werden:

(Komplette Konfigurationsdatei)

##                                                                                                                                                                                                      
## Mailbox definitions
##
 
# Each mailbox is specified in a separate mailbox section. The section name
# specifies the mailbox name. If it has spaces, you can put the name
# "in quotes". These sections can contain the following mailbox settings:
#
# auto:
#   Indicates whether the mailbox with this name is automatically created
#   implicitly when it is first accessed. The user can also be automatically
#   subscribed to the mailbox after creation. The following values are
#   defined for this setting:
# 
#     no        - Never created automatically.
#     create    - Automatically created, but no automatic subscription.
#     subscribe - Automatically created and subscribed.
#  
# special_use:
#   A space-separated list of SPECIAL-USE flags (RFC 6154) to use for the
#   mailbox. There are no validity checks, so you could specify anything
#   you want in here, but it's not a good idea to use flags other than the
#   standard ones specified in the RFC:
#
#     \All       - This (virtual) mailbox presents all messages in the
#                  user's message store.
#     \Archive   - This mailbox is used to archive messages.
#     \Drafts    - This mailbox is used to hold draft messages.
#     \Flagged   - This (virtual) mailbox presents all messages in the
#                  user's message store marked with the IMAP \Flagged flag.
#     \Important - This (virtual) mailbox presents all messages in the
#                  user's message store deemed important to user.
#     \Junk      - This mailbox is where messages deemed to be junk mail
#                  are held.
#     \Sent      - This mailbox is used to hold copies of messages that
#                  have been sent.
#     \Trash     - This mailbox is used to hold messages that have been
#                  deleted.
#
# comment:
#   Defines a default comment or note associated with the mailbox. This
#   value is accessible through the IMAP METADATA mailbox entries
#   "/shared/comment" and "/private/comment". Users with sufficient
#   privileges can override the default value for entries with a custom
#   value.
 
# NOTE: Assumes "namespace inbox" has been defined in 10-mail.conf.
namespace inbox {
  # These mailboxes are widely used and could perhaps be created automatically:
  mailbox Drafts {
    special_use = \Drafts
    # Tachtler
    auto = subscribe
  }
  mailbox Junk {
    special_use = \Junk
    # Tachtler
    auto = subscribe
  }
  mailbox Trash {
    special_use = \Trash
    # Tachtler
    auto = subscribe
  }
 
  # For \Sent mailboxes there are two widely used names. We'll mark both of
  # them as \Sent. User typically deletes one of them if duplicates are created.
  mailbox Sent {
    special_use = \Sent
    # Tachtler
    auto = subscribe
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
 
  # If you have a virtual "All messages" mailbox:
  #mailbox virtual/All {
  #  special_use = \All
  #  comment = All my messages
  #}
 
  # If you have a virtual "Flagged" mailbox:
  #mailbox virtual/Flagged {
  #  special_use = \Flagged
  #  comment = All my flagged messages
  #}
 
  # If you have a virtual "Important" mailbox:
  #mailbox virtual/Important {
  #  special_use = \Important
  #  comment = All my important messages
  #}
}

auto

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/configuration_manual/namespace/#core_setting-namespace/mailbox/auto
Defaultwert
auto = 
Neuer Wert
auto = subscribe
Konfiguration
namespace inbox {
  # These mailboxes are widely used and could perhaps be created automatically:
  mailbox Drafts {
    special_use = \Drafts
    # Tachtler
    auto = subscribe
  }
  mailbox Junk {
    special_use = \Junk
    # Tachtler
    auto = subscribe
  }
  mailbox Trash {
    special_use = \Trash
    # Tachtler
    auto = subscribe
  }
 
  # For \Sent mailboxes there are two widely used names. We'll mark both of
  # them as \Sent. User typically deletes one of them if duplicates are created.
  mailbox Sent {
    special_use = \Sent
    # Tachtler
    auto = subscribe
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
}
Beschreibung Automatisch erstellte Postfächer werden nur beim ersten Zugriff auf die Festplatte erstellt. Die automatisch abonnierten Postfächer werden nicht in die Abonnementdatei geschrieben, es sei denn, der Befehl SUBSCRIBE wird ausdrücklich für sie verwendet.

:!: HINWEIS - Es wird bei jedem Postfach (Mailboxes) / Ordner (Folder) hinzugefügt, ausser bei

  mailbox "Sent Messages" {
    special_use = \Sent
  }

da dies nur eine synonym für den Ordner (Folder) /Sent ist, und dieser sonst doppelt abonniert werden würde!

:!: HINWEIS - Falls Namen mit Leerzeichen vergeben werden sollen, müssen diese in Anführungszeichen eingeschlossen werden!

:!: HINWEIS - Die so definierten Postfächer (Mailboxes) / Ordner (Folder) sind angelegt und abonniert, jedoch werden diese physisch im Dateisystem, erst mit dem ersten Zugriff angelegt !

Konfiguration: Authentifizierung

Die gebräuchlichen Authentifizierungsmöglichkeiten wurden bereits erwähnt und sind unter nachfolgenden internen Links nochmals aufgelistet:

Authentifizierungsabfragen

Zu einer erfolgreichen Authentifizierung gehören zwei Bestandteile, welche nachfolgend aufgeführt sind:

  1. passdb - Benutzername und Passwort
  2. userdb - UID (Benutzerkennung), GID (Gruppenkennung) und HOME-Verzeichnis, EXTRAS-Daten

des angemeldeten Benutzers

Dovecot verwendet die passdb-Abfrage (lookup) um Benutzername und Passwort zu überprüfen, was immer nur bei einer Anmeldung erforderlich ist.

Dovecot verwendet die userdb-Abfrage (lookup) um UID, GID, HOME und EXTRAS für den angemeldeten Benutzer zu bestimmen, was bei vielen Aktionen erfolgt, z.B.

  • nach der erfolgreichen Anmeldung
  • Einlieferung einer neuen e-Mail
  • uvm.

Dabei besteht durchaus die Möglichkeit, das Dovecot die passdb-Abfrage und die userdb-Abfrage gegen verschiedene Quellen durchführt - z.B.

  • passdb-Abfrage (lookup) gegen /etc/passwd-file z.B. (/etc/dovecot/userdb)
  • userdb-Abfrage (lookup) gegen LDAP

:!: HINWEIS - Dies ist möglich, muss jedoch nicht so sein und ist auch nicht empfohlen !

Authentifizierungsquellen

Dovecot bringt in der Konfigurationsdatei

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

ganz am Ende der Konfigurationsdatei vorbereitete include-Dateien mit, welche für die verschiedenen Authentifizierungsquellen bereits grundlegend vorkonfiguriert sind und nur um entsprechend zwingende Angaben ergänzt werden müssen. Nachfolgend eine Aufstellung:

(Nur relevanter Ausschnitt):

...
!include auth-system.conf.ext
#!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-static.conf.ext

Hier nur die vier gebräuchlichsten in einer Übersicht:

inlcude-Datei Authentifizierungsquelle Beschreibung
auth-system.conf.ext /etc/passwd & /etc/shadow Benutzer mit shell-Zugriff
auth-sql.conf.ext SQL-Datenbank Benutzer in einer Datenbank
auth-ldap.conf.ext LDAP Benutzer in LDAP
auth-passwdfile.conf.ext /etc/dovecot/users Benutzer in einer Datei

Konfiguration: Authentifizierungsbenutzer

Wie bereits bei der Darstellung der Authentifizierungsabfragen, was unter nachfolgendem internen Link nachgelesen werden kann

sind einige Angaben notwendig, um den Benutzer zu authentifizieren.

Um die Verwaltung in Dovecot zu vereinfachen, soll ein Dummy-Benutzer genutzt werden, unter dessen Rechten die Verwaltung der e-Mail-Postfächer (Mailboxen) in Dovecot und im Dateisystem, durchgeführt werden kann.

Vorteile hierfür sind nachfolgende, um nur einige zu nennen:

  • Gleiche UID und GID bieten einfachere Verwaltung durch den Dovecot-Administrator (Skripte, Backup usw.)
  • Geteilte Ordner (shared Folder) sind bei unterschiedlichen UID und GID nur sehr schwer oder kaum zu realisieren
  • Es können nicht mehr als 65.535 Benutzerkonten angelegt werden

Konfiguration: Authentifizierungsbenutzer - GID Gruppen-ID

Nach der Installation von Dovecot existiert KEINE Gruppe und KEIN Benutzer mit den

  • GID und dem hohen Wert 10000 und dem
  • Gruppennamen - vmail (virtual user mail),

damit sich diese von allen anderen abhebt und ggf. auch unter anderen Linux-Distributionen nicht mit anderen GID's kollidiert.

Zur Erstellung einer Gruppe mit mit den oben genannten Parametern, kann nachfolgender Befehl verwendet werden:

# groupadd -f -g 10000 vmail

Zur Überprüfung der bereits existierenden Gruppe, kann nachfolgender Befehl verwendet werden:

# cat /etc/group | grep 10000
vmail:x:10000:

Konfiguration: Authentifizierungsbenutzer - UID Benutzer-ID

Nach der Installation von Dovecot existiert KEINE Gruppe und KEIN Benutzer mit dem

  • Kommentar: Dovecot vmail user, mit der
  • UID: 10000 und ebenfalls mit einem hohen Wert, dessen
  • GID: 10000 ist, mit dem
  • Home-Verzeichnis: / und der
  • Login-shell: /usr/bin/nologin und dem
  • Benutzernamen - vmail,

damit sich diese von allen anderen abhebt und ggf. auch unter anderen Linux-Distributionen nicht mit anderen UID's kollidiert.

Zur Erstellung eines Benutzers mit mit den oben genannten Parametern, kann nachfolgender Befehl verwendet werden:

# useradd -c 'Dovecot vmail user' -g 10000 -M -N -u 10000 -s /usr/bin/nologin vmail

Zur Überprüfung ob die Erstellung des neuen Benutzers erfolgreich war, kann nachfolgender Befehl verwendet werden:

# cat /etc/passwd | grep 10000
vmail:x:10000:10000:Dovecot vmail user:/home/vmail:/usr/bin/nologin

Konfiguration: Authentifizierungsbenutzer - /srv/vmail

Bei Verwendung eines Dummy-Benutzers - vmail -, muss ein Verzeichnis in dem die (Postfächer) und die e-Mails der einzelnen Benutzer abgelegt werden können angelegt werden. Dies kann mit nachfolgendem Befehl unter nachfolgendem Verzeichnis erstellt werden:

# mkdir /srv/vmail

:!: WICHTIG - Bei Verwendung eines Dummy-Benutzers - vmail -, muss auch das Verzeichnis in dem die (Postfächer) und die e-Mails der einzelnen Benutzer abgelegt werden, dem Dummy-Benutzer als Eigentümer des Verzeichnisses gehören, was mit nachfolgendem Befehl für das Verzeichnis

  • /srv/vmail

durchgeführt werden soll:

# chown -R vmail:vmail /srv/vmail

Auch die Zugriffsrechte müssen mit nachfolgendem Befehl entsprechende gesetzt werden, falls dies nicht ebenfalls schon so ist, was mit nachfolgendem Befehl durchgeführt werden kann:

# chmod -R 770 /srv/vmail

Zur Überprüfung ob die Rechte des Dummy-Benutzers als Eigentümer richtig gesetzte sind, kann nachfolgender Befehl verwendet werden:

# ls -ld /srv/vmail
drwxrwx--- 2 vmail vmail 6 Oct 27 13:15 /srv/vmail

Konfiguration: Authentifizierungsmethoden

Nachfolgende Authentifizierungsmethoden stellen die meist verwendeten Methoden dar:

  • plain = Passwortübermittlung im Klartext, Speicherung Verschlüsselt möglich
  • login = Passwortübermittlung im Klartext, Speicherung Verschlüsselt möglich
  • cram-md5 = Passwortübermittlung Verschlüsselt, Speicherung im Klartext notwendig !
  • digest-md5 Passwortübermittlung Verschlüsselt, Speicherung im Klartext notwendig !

Konfiguration: Authentifizierungsmethoden - plain/login

Die Übertragungsmethoden plain/login übermitteln den Benutzernamen und das Passwort quasi im Klartext (bas64-encoded). Ein Einsatz sollte daher nur in verschlüsselten Verbindungen SSL/TLS, oder vertrauenswürdigen Netzen, wenn überhaupt, zum Einsatz kommen.

Der Unterschied zwischen plain und login ist, das

  • plain = RFC 4616 konform ist und
  • login = Microsoft, eine nicht RFC-Konforme Implementierung

darstellt.

Konfiguration: Authentifizierungsmethoden - cram-md5/digest-md5

Aktuell ist das Abhören der Übertragung des Benutzernamens und des Passwortes nahezu unmöglich, da bei der Übertragung ein individueller Sitzungsschlüssel zum Einsatz kommt. Mit Hilfe dieses individuellen Sitzungsschlüssels, können Server und Client, jeweils für sich das Passwort berechnen, der ebenfalls nur jeweils einmalig für eine Sitzung identisch ist.

:!: WICHITG - Da Server und Client jeweils das Passwort errechnen können müssen, ist es

  • erforderlich, das Server und Client, das Passwort im Klartext kennen!

:!: HINWEIS - Das bedeutet, dass beim Einsatz von cram-md5/digest-md5 das

  • Passwort des Benutzers im Klartext gespeichert werden muss!

Konfiguration: Authentifizierung - passwd-file

Standardmässig würde Dovecot den Authentifikationsmechanismus /etc/passwd & /etc/shadow wie in der Konfigurationsdatei

  • /etc/dovecot/conf.d/auth-system.conf.ext

beschrieben benutzen.

Deshalb ist /etc/passwd & /etc/shadow aus nachfolgenden Gründen jedoch sehr unpraktisch

  • Jeder Benutzer muss unter Linux angelegt werden (/etc/passwd & /etc/shadow)-Einträge
  • Keine Hinterlegung von personalisierten Einstellungen möglich, wie z.B. quotas
  • Keine E-Mail-Adressen als Login-Kennung möglich
  • Keine Klartextpasswörter für sichere Anmeldung wie z.B. mit cram-md5 möglich

Um passwd-file als Authentifizierungsmöglichkeit nutzen zu können, sind nachfolgende Änderungen notwendig.

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

In dieser Konfigurationsdatei werden die Parameter für die Authentifizierung festgelegt.

disable_plaintext_auth

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-disable_plaintext_auth
Dovecot SSL Configuration
Defaultwert
disable_plaintext_auth = yes
Temporär
disable_plaintext_auth = no
Konfiguration
# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# matches the local IP (ie. you're connecting from the same computer), the
# connection is considered secure and plaintext authentication is allowed.
# See also ssl=required setting.
# Tachtler
# default: #disable_plaintext_auth = yes
disable_plaintext_auth = no
Beschreibung Wenn ja, werden der LOGIN-Befehl und alle anderen Klartext-Authentifizierungen deaktiviert, es sei denn, SSL/TLS wird verwendet (LOGINDISABLED-Fähigkeit) oder die Verbindung ist „gesichert“:

¹ Client IP ist in login_trusted_networks
² Die Client-IP ist von localhost und kommt nicht vom HAProxy-Listener

Siehe Dovecot SSL Configuration für eine detailliertere Erklärung, wie diese Einstellung mit der SSL-Einstellung interagiert.
Siehe auch Dovecot ArchLinux - Konfiguration: Authentifizierungsmethoden - /etc/dovecot/conf.d/10-auth.conf - auth_mechanisms
Dovecot ArchLinux - Konfiguration: Authentifizierungsmethoden - /etc/dovecot/conf.d/10-ssl.conf - ssl

Diese Definition erlaubt oder verbietet den Zugriff von Rechnern, außer localhost, das Anmelden mit den Methoden

  • plain
  • login

wenn, keine SSL/TLS-verschlüsselte Verbindung genutzt wird.

:!: HINWEIS - Solange noch keine SSL/TLS-Konfiguration statt gefunden hat, kann zum testen auch das Anmelden an Dovecot mit oben genannten Methoden, auch bei einer nicht SSL/TLS-verschlüsselten Verbindung temporär erlaubt werden, von anderen Rechnern zuzugreifen.

auth_username_format

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-auth_username_format
Dovecot Configuration Manual - Config Variables
Defaultwert
auth_username_format = %Lu
Neuer Wert KEIN neuer Wert!
Konfiguration
# Username formatting before it's looked up from databases. You can use
# the standard variables here, eg. %Lu would lowercase the username, %n would
# drop away the domain if it was given, or "%n-AT-%d" would change the '@' into
# "-AT-". This translation is done after auth_username_translation changes.
# Tachtler
# default: # auth_username_format = %Lu
auth_username_format = %Lu
Beschreibung Formatierung des Benutzernamens vor der Abfrage der Autorisierungsdatenbank.

:!: HINWEIS - Egal wie der Anmeldename des Benutzer aussieht, E-Mail-Adresse oder Benutzerkennung, es sollte hier nachfolgende Standardeinstellung beibehalten werden.

Erklärung:

Parameter Beispiel Bedeutung
%Lu user@example.com Verweist auf die in Kleinschrift umgewandelte, vollständige e-Mail-Adresse (localpart@domain) oder Benutzerkennung (username)
%Ln user Verweist auf den in Kleinschrift umgewandelten, localpart der e-Mail-Adresse (localpart@domain)

:!: WICHTIG - Es sollte immer mit kompletten E-Mail-Adressen (localpart@localdomain.tld) gearbeitet werden.

  • Es sollte somit immer%Lu ← genutzt werden !!!

Die Benutzerkennung sollte nur zur Authentifizierung mit Benutzername und Passwort dienen. Weitere Abfragen von Dovecot zur Ermittlung der Kontodaten, können dann auf eine gespeicherte E-Mail-Adresse zurückgreifen.

auth_mechanisms

Wie bereits dargelegt und unter nachfolgendem internen Link nachzulesen ist, die Unterschiede zwischen den verschiedenen Authentifizierungsmethoden

Nachfolgende Änderung fügt zu der standardmässigen bereits bestehenden Authentifizierungsmethode plain noch die Authentifizierungsmethoden cram-md5, digest-md5 und login hinzu:

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-auth_mechanisms
Dovecot SSL Configuration
Defaultwert
auth_mechanisms = plain
Neuer Wert
auth_mechanisms = plain digest-md5 cram-md5 login
Konfiguration
# Space separated list of wanted authentication mechanisms:
#   plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp
#   gss-spnego
# NOTE: See also disable_plaintext_auth setting.
# Tachtler
# default: auth_mechanisms = plain
auth_mechanisms = plain digest-md5 cram-md5 login
Beschreibung Hier kann durch Leerzeichen getrennt, eine Liste der Authentifizierungsmechanismen angegeben werden.

Mögliche Werte

plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi otp skey gss-spnego
Siehe auch Dovecot ArchLinux - Konfiguration: Authentifizierungsmethoden - /etc/dovecot/conf.d/10-auth.conf - disable_plaintext_auth

!include auth-passwdfile.conf.ext

Dovecot bringt in der Konfigurationsdatei

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

ganz am Ende der Konfigurationsdatei vorbereitete include-Dateien mit, welche für die verschiedenen Authentifizierungsquellen bereits grundlegend vorkonfiguriert sind und nur nun angepasst werden müssen.

Hier muss der Eintrag

!include auth-system.conf.ext

auskommentiert werden, und der Eintrag

#!include auth-passwdfile.conf.ext

aktiviert werden

Vorher (Standard): (Nur relevanter Ausschnitt):

##
## Password and user databases
##
 
#
# Password database is used to verify user's password (and nothing more).
# You can have multiple passdbs and userdbs. This is useful if you want to
# allow both system users (/etc/passwd) and virtual users to login without
# duplicating the system users into virtual database.
#
# <doc/wiki/PasswordDatabase.txt>
#
# User database specifies where mails are located and what user/group IDs
# own them. For single-UID configuration use "static" userdb.
#
# <doc/wiki/UserDatabase.txt>
 
#!include auth-deny.conf.ext
#!include auth-master.conf.ext
 
!include auth-system.conf.ext
#!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-static.conf.ext

Nachher: (Nur relevanter Ausschnitt):

##
## Password and user databases
##
 
#
# Password database is used to verify user's password (and nothing more).
# You can have multiple passdbs and userdbs. This is useful if you want to
# allow both system users (/etc/passwd) and virtual users to login without
# duplicating the system users into virtual database.
#
# <doc/wiki/PasswordDatabase.txt>
#
# User database specifies where mails are located and what user/group IDs
# own them. For single-UID configuration use "static" userdb.
#
# <doc/wiki/UserDatabase.txt>
 
#!include auth-deny.conf.ext
#!include auth-master.conf.ext
 
# Tachtler
# default: !include auth-system.conf.ext
#!include auth-system.conf.ext
#!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
# Tachtler
# default: #!include auth-passwdfile.conf.ext
!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-static.conf.ext

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

In dieser Konfigurationsdatei werden die Parameter für die Verschlüsselung SSL/TLS festgelegt.

ssl

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-ssl
Dovecot SSL Configuration
Defaultwert
ssl = yes
Temporär
ssl = no
Konfiguration
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
# Tachtler
# default: #ssl = yes
ssl = no
Beschreibung Die Stufe der SSL-Unterstützung. Diese Einstellung wirkt sich sowohl auf die impliziten SSL-Ports als auch auf die STARTTLS-Befehle aus.

Optionen:

no = SSL/TLS ist vollständig deaktiviert.
yes = SSL/TLS ist aktiviert, aber nicht unbedingt für clients erforderlich.
required = SSL/TLS ist für alle imap-, pop3-, managesieve- und submission-Protokoll-client-Verbindungen erforderlich.

Dies unterscheidet sich von disable_plaintext_auth dadurch, dass auch Nicht-Plaintext-Authentifizierungsmechanismen ohne SSL/TLS nicht erlaubt sind.

Zu beachten ist, dass SSL für „gesicherte“ Verbindungen immer noch nicht erforderlich ist, wenn:

¹ Client-IP ist in login_trusted_networks
² Die Client-IP ist von localhost und kommt nicht vom HAProxy-Listener

Siehe auch Dovecot SSL Configuration
Siehe auch Dovecot ArchLinux - Konfiguration: Authentifizierungsmethoden - /etc/dovecot/conf.d/10-auth.conf - disable_plaintext_auth
Dovecot ArchLinux - Konfiguration: Authentifizierungsmethoden - /etc/dovecot/conf.d/10-ssl.conf - ssl
Dovecot ArchLinux - Konfiguration: Authentifizierungsmethoden - /etc/dovecot/conf.d/10-ssl.conf - ssl_cert
Dovecot ArchLinux - Konfiguration: Authentifizierungsmethoden - /etc/dovecot/conf.d/10-ssl.conf - ssl_key

Der Standardwert ist auf yes gesetzt. Nachfolgende Werte sind hier möglich

  • no = SSL/TLS ist vollständig deaktiviert
  • yes = SSL/TLS ist aktiviert, aber nicht unbedingt für clients zwingednd
  • required = SSL/TLS ist für alle imap-, pop3-, managesieve- und submission-Protokoll-client-Verbindungen zwingend vorgeschrieben

Diese Definition aktiviert, deaktiviert und erzwingt den Zugriff von Rechnern, auser localhost, zur Verwendung einer SSL/TLS-verschlüsselte Verbindung.

:!: HINWEIS - Solange noch keine SSL/TLS-Konfiguration statt gefunden hat, kann zum testen auch das Anmelden an Dovecot mit oben genannten Methoden, auch bei einer nicht SSL/TLS-verschlüsselten Verbindung temporär erlaubt werden, von anderen Rechnern zuzugreifen.

ssl_cert

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-ssl_cert
Dovecot SSL Configuration
Defaultwert
ssl_cert = </etc/ssl/certs/dovecot.pem
Temporär
ssl_cert = 
Konfiguration
# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
# Tachtler
# default: ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_cert =
# Tachtler
# default: ssl_key = </etc/ssl/private/dovecot.pem
ssl_key =
Beschreibung Das PEM-kodierte X.509 SSL/TLS-Zertifikat, das für eingehende imap/pop3/etc.-client-Verbindungen vorgelegt wird.

Der ssl_key wird auch für das private Zertifikat benötigt.

Beispiel:

ssl_cert = </etc/ssl/private/dovecot.crt
ssl_key = </etc/ssl/private/dovecot.key


Siehe auch Dovecot SSL Configuration

Siehe auch Dovecot ArchLinux - Konfiguration: Authentifizierungsmethoden - /etc/dovecot/conf.d/10-ssl.conf - ssl
Dovecot ArchLinux - Konfiguration: Authentifizierungsmethoden - /etc/dovecot/conf.d/10-ssl.conf - ssl_key

ssl_key

Information Beschreibung
Dokumentation https://doc.dovecot.org/2.3/settings/core/#core_setting-ssl_key
Dovecot SSL Configuration
Defaultwert
ssl_key = </etc/ssl/private/dovecot.pem
Temporär
ssl_key = 
Konfiguration
# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
# Tachtler
# default: ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_cert =
# Tachtler
# default: ssl_key = </etc/ssl/private/dovecot.pem
ssl_key =
Beschreibung Der PEM-kodierte X.509 SSL/TLS private Schlüssel für ssl_cert.

Beispiel:

ssl_cert = </etc/ssl/private/dovecot.crt
ssl_key = </etc/ssl/private/dovecot.key


Siehe auch Dovecot SSL Configuration

Siehe auch Dovecot ArchLinux - Konfiguration: Authentifizierungsmethoden - /etc/dovecot/conf.d/10-ssl.conf - ssl
Dovecot ArchLinux - Konfiguration: Authentifizierungsmethoden - /etc/dovecot/conf.d/10-ssl.conf - ssl_cert

/etc/dovecot/users

Um passwd-file als Authentifizierungsmöglichkeit nutzen zu können, müssen die virtuellen Benutzer in einer Datei gespeichert werden. Dazu soll eine Datei mit nachfolgendem Pfad und Namen

  • /etc/dovecot/users

mit nachfolgendem Befehl angelegt werden.

# vim /etc/dovecot/users

Der Inhalt der Datei /etc/dovecot/users muss mindestens nachfolgenden Aufbau haben, wobei die Felder

  • <(gecos)>
  • <shell>
  • <extra_fields>

nicht vorhanden sein müssen und ggf. (außer <extra_fields> am Ende der Zeile) mit ::, leer gelassen werden können!

<username>:{CODIERUNG}<password>:<uid>:<gid>:<realname>:<home>:<(gecos)>:<extra_fields>

Beispiel:

klaus@tachtler.net:{PLAIN}geheim:10000:10000::/srv/vmail/tachtler.net/klaus::
petra@tachtler.net:{PLAIN}geheim:10000:10000::/srv/vmail/tachtler.net/petra::

Abschliessend sollten noch die Besitzrechte und die Dateirechte von /etc/dovecot/users mit nachfolgenden Befehlen angepasst werden.

Besitzrechte:

# chown root.dovecot /etc/dovecot/users

Dateirechte:

# chmod 640 /etc/dovecot/users

Zur Überprüfung ob die Besitzrechte und die Dateirechte der Konfigurationsdatei /etc/dovecot/users richtig gesetzte sind, kann nachfolgender Befehl verwendet werden:

# ls -l /etc/dovecot/users
-rw-r----- 1 root dovecot 156 Dec 15 18:34 /etc/dovecot/users

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

:!: HINWEIS - Es sind keine Anpassungen notwendig !!!

In der Konfigurationsdatei

  • /etc/dovecot/conf.d/auth-passwdfile.conf.ext

sind nun die Einstellungen enthalten, die Dovecot zur Authentifizierung benötigt.

  • passdb {…} - zur Verifizierung von Benutzername und Passwort
  • userdb {…} - enthält weitere Parameter zum Benutzer

(Vollständige Konfigurationsdatei)

# Authentication for passwd-file users. Included from 10-auth.conf.
#
# passwd-like file with specified location.
# <doc/wiki/AuthDatabase.PasswdFile.txt>
 
passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}
 
userdb {
  driver = passwd-file
  args = username_format=%u /etc/dovecot/users
 
  # Default fields that can be overridden by passwd-file
  #default_fields = quota_rule=*:storage=1G
 
  # Override fields from passwd-file
  #override_fields = home=/home/virtual/%u
}

Erster Start

Bevor der der dovecot-Daemon/Dienst zum ersten mal gestartet werden soll, ist eine Überprüfung der korrekten Konfiguration durch nachfolgenden Befehl, zu empfehlen

doveconf -n

# doveconf -n
# 2.3.21.1 (d492236fa0): /etc/dovecot/dovecot.conf
# OS: Linux 6.6.63-1-lts x86_64  
# Hostname: vml080.idmz.tachtler.net
auth_mechanisms = plain digest-md5 cram-md5 login
auth_verbose = yes
disable_plaintext_auth = no
listen = 127.0.0.1, 10.0.0.80, ::1, fd00::10:10:0:0:80, 2001:db8::10:10:0:0:80
mail_location = maildir:~/Maildir
namespace inbox {
  inbox = yes
  location = 
  mailbox Drafts {
    auto = subscribe
    special_use = \Drafts
  }
  mailbox Junk {
    auto = subscribe
    special_use = \Junk
  }
  mailbox Sent {
    auto = subscribe
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    auto = subscribe
    special_use = \Trash
  }
  prefix = INBOX/
  separator = /
  type = private
}
passdb {
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
  driver = passwd-file
}
protocols = imap lmtp
service lmtp {
  inet_listener lmtp {
    address = 10.0.0.80, fd00::10:10:0:0:80
    port = 24
  }
  user = vmail
}
ssl = no
userdb {
  args = username_format=%u /etc/dovecot/users
  driver = passwd-file
}
verbose_proctitle = yes

:!: HINWEIS - die Konfiguration des dovecot-Daemon/Dienst konnte korrekt gelesen werden, wenn die Konfiguration erscheint, was letztendlich zwar nicht bedeutet, das Sie auch korrekt ist, aber syntaktische Fehler ausschliesst !!!

Danach kann der dovecot-Server mit nachfolgendem Befehle gestartet werden:

# systemctl start dovecot.service

Überprüfung erfolgreicher Start

Um zu Überprüfen, ob der Start des dovecot-Daemons/Dienstes erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden:

# ss -tauben | grep dovecot
tcp   LISTEN 0      100                    127.0.0.1:143       0.0.0.0:*     ino:25845 sk:4
 cgroup:/system.slice/dovecot.service <->
tcp   LISTEN 0      100                    10.0.0.80:143       0.0.0.0:*     ino:25846 sk:5
 cgroup:/system.slice/dovecot.service <->
tcp   LISTEN 0      100                    10.0.0.80:24        0.0.0.0:*     ino:25834 sk:6
 cgroup:/system.slice/dovecot.service <->
tcp   LISTEN 0      100         [fd00::10:10:0:0:80]:143          [::]:*     ino:25848 sk:8
 cgroup:/system.slice/dovecot.service v6only:1 <->
tcp   LISTEN 0      100     [2001:db8::10:10:0:0:80]:143          [::]:*     ino:25849 sk:9
 cgroup:/system.slice/dovecot.service v6only:1 <->
tcp   LISTEN 0      100         [fd00::10:10:0:0:80]:24           [::]:*     ino:25835 sk:a
 cgroup:/system.slice/dovecot.service v6only:1 <->
tcp   LISTEN 0      100                        [::1]:143          [::]:*     ino:25847 sk:e
 cgroup:/system.slice/dovecot.service v6only:1 <->

oder auch dieser Befehl:

# ps auxwf | grep dovecot | grep -v grep
root        3794  0.0  0.2   7916  5248 ?        Ss   18:56   0:00 /usr/bin/dovecot -F
dovecot     3795  0.0  0.1   4424  2688 ?        S    18:56   0:00  \_ dovecot/anvil [0 connections]
root        3796  0.0  0.1   4560  2944 ?        S    18:56   0:00  \_ dovecot/log 
root        3797  0.0  0.2   7328  4864 ?        S    18:56   0:00  \_ dovecot/config

bzw. auch dieser Befehl:

# systemctl status dovecot.service 
● dovecot.service - Dovecot IMAP/POP3 email server
     Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; preset: >
     Active: active (running) since Sun 2024-12-15 18:56:51 CET; 12min ago
 Invocation: 3d47f63f6bab4354a827c89037922a5b
       Docs: man:dovecot(1)
             https://doc.dovecot.org/
   Main PID: 3794 (dovecot)
     Status: "v2.3.21.1 (d492236fa0) running"
      Tasks: 4 (limit: 2315)
     Memory: 3.7M (peak: 3.9M)
        CPU: 53ms
     CGroup: /system.slice/dovecot.service
             ├─3794 /usr/bin/dovecot -F
             ├─3795 "dovecot/anvil [0 connections]"
             ├─3796 "dovecot/log "
             └─3797 "dovecot/config "

Dec 15 18:56:51 server systemd[1]: Starting Dovecot IMAP/POP3 email server...
Dec 15 18:56:51 server dovecot[3794]: master: Dovecot v2.3.21.1 (d492236fa0) st>
Dec 15 18:56:51 server systemd[1]: Started Dovecot IMAP/POP3 email server..

Login-Test mit doveadm

Um zu Überprüfen, ob eine Anmeldung als Benutzer möglich ist, kann nachfolgender Befehl genutzt werden:

# doveadm auth test klaus@tachtler.net
Password: 
passdb: klaus@tachtler.net auth succeeded
extra fields:
  user=klaus@tachtler.net

Dies würde nachfolgende Einträge in der systemd-journald-LOG wenn die Log-Ausgabe wie in den nachfolgenden internen Links beschrieben

jeweils auf

  • yes

gesetzt wurden:

(Nur relevanter Ausschnitt):

# journalctl -u dovecot
Dec 15 19:28:39 server dovecot[4217]: auth: Debug: Loading modules from directory:
 /usr/lib/dovecot/modules/auth
Dec 15 19:28:39 server dovecot[4217]: auth: Debug: Module loaded:
 /usr/lib/dovecot/modules/auth/lib20_auth_var_expand_crypt.so
Dec 15 19:28:39 server dovecot[4217]: auth: Debug: Read auth token secret from
 /run/dovecot/auth-token-secret.dat
Dec 15 19:28:39 server dovecot[4217]: auth: Debug: passwd-file /etc/dovecot/users:Read 2 users in 0 secs
Dec 15 19:28:39 server dovecot[4217]: auth: Debug: auth client connected (pid=0)
Dec 15 19:28:39 server dovecot[4217]: auth: Debug: client in: AUTH        1        PLAIN
        service=doveadm        debug
        resp=a2xhdXNAdGFjaHRsZXIubmV0AGtsYXVzQHRhY2h0bGVyLm5ldABnZWhlaW0=
 (previous base64 data may contain sensitive data)
Dec 15 19:28:39 server dovecot[4217]: auth: Debug: passwd-file(klaus@tachtler.net):
 Performing passdb lookup
Dec 15 19:28:39 server dovecot[4217]: auth: Debug: passwd-file(klaus@tachtler.net):
 lookup: user=klaus@tachtler.net file=/etc/dovecot/users
Dec 15 19:28:39 server dovecot[4217]: auth: Debug: passwd-file(klaus@tachtler.net):
 Finished passdb lookup
Dec 15 19:28:39 server dovecot[4217]: auth: Debug: auth(klaus@tachtler.net): Auth request finished
Dec 15 19:28:39 server dovecot[4217]: auth: Debug: client passdb out: OK        1
        user=klaus@tachtler.net

Um auch die Authentifizierungsdaten, welche in oben gezeigter Ausgabe base64-kodiert sind, dekodieren zu können, um diese ebenfalls sichtbar verifizieren zu können, kann nachfolgender Befehl genutzt werden, welcher dann auch nachfolgende Ausgabe erzeugen sollte:

# echo a2xhdXNAdGFjaHRsZXIubmV0AGtsYXVzQHRhY2h0bGVyLm5ldABnZWhlaW0= | base64 --decode
klaus@tachtler.netklaus@tachtler.netgeheim

Um zu Überprüfen, ob eine Anmeldung als Benutzer möglich ist, kann nachfolgender Befehl genutzt werden
(durch Eingabe eines falschen Passworts):

# doveadm auth test klaus@tachtler.net
Password: 
passdb: klaus@tachtler.net auth failed
extra fields:
  user=klaus@tachtler.net

Dies würde nachfolgende Einträge zusätzlich in der systemd-journald-LOG wenn die Log-Ausgabe erzeugen:

(Nur relevanter Ausschnitt):

Dec 15 19:45:55 server dovecot[4563]: auth: Debug: Loading modules from directory:
 /usr/lib/dovecot/modules/auth
Dec 15 19:45:55 server dovecot[4563]: auth: Debug: Module loaded:
 /usr/lib/dovecot/modules/auth/lib20_auth_var_expand_crypt.so
Dec 15 19:45:55 server dovecot[4563]: auth: Debug: Read auth token secret from
 /run/dovecot/auth-token-secret.dat
Dec 15 19:45:55 server dovecot[4563]: auth: Debug: passwd-file /etc/dovecot/users:Read 2 users in 0 secs
Dec 15 19:45:55 server dovecot[4563]: auth: Debug: auth client connected (pid=0)
Dec 15 19:45:55 server dovecot[4563]: auth: Debug: client in: AUTH        1        PLAIN
        service=doveadm        debug
        resp=a2xhdXNAdGFjaHRsZXIubmV0AGtsYXVzQHRhY2h0bGVyLm5ldAB0ZXN0
 (previous base64 data may contain sensitive data)
Dec 15 19:45:55 server dovecot[4563]: auth: Debug: passwd-file(klaus@tachtler.net):
 Performing passdb lookup
Dec 15 19:45:55 server dovecot[4563]: auth: Debug: passwd-file(klaus@tachtler.net):
 lookup: user=klaus@tachtler.net file=/etc/dovecot/users
Dec 15 19:45:55 server dovecot[4563]: auth: passwd-file(klaus@tachtler.net):
 Password mismatch (given password: test)
Dec 15 19:45:55 server dovecot[4563]: auth: Debug: passwd-file(klaus@tachtler.net):
 PLAIN(test) != 'geheim'
Dec 15 19:45:55 server dovecot[4563]: auth: Debug: passwd-file(klaus@tachtler.net):
 Finished passdb lookup
Dec 15 19:45:55 server dovecot[4563]: auth: Debug: auth(klaus@tachtler.net): Auth request finished
Dec 15 19:45:57 server dovecot[4563]: auth: Debug: client passdb out: FAIL        1
        user=klaus@tachtler.net

:!: ACHTUNG - Nachfolgende systemd-journald-LOG-Ausgabe-Zeile ist dabei besonders zu beachten:

Dec 15 19:45:55 server dovecot[4563]: auth: Debug: passwd-file(klaus@tachtler.net):
 PLAIN(test) != 'geheim'

Login-Test mit telnet

Um zu Überprüfen, ob eine Anmeldung als Benutzer von einem entfernten Rechner möglich ist, kann nachfolgender Befehl genutzt werden:

# telnet 10.0.0.80 143
Trying 10.0.0.80...
Connected to 10.0.0.80.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN AUTH=DIGEST-MD5
 AUTH=CRAM-MD5 AUTH=LOGIN] Dovecot ready.
a1 login klaus@tachtler.net geheim
a1 OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES
 THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS
 LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS
 BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY PREVIEW STATUS=SIZE SAVEDATE LITERAL+ NOTIFY SPECIAL-USE]
 Logged in
a2 list "" "*"
* LIST (\HasChildren) "/" INBOX
* LIST (\HasNoChildren \Drafts) "/" INBOX/Drafts
* LIST (\HasNoChildren \Junk) "/" INBOX/Junk
* LIST (\HasNoChildren \Trash) "/" INBOX/Trash
* LIST (\HasNoChildren \Sent) "/" INBOX/Sent
a2 OK List completed (0.025 + 0.000 + 0.024 secs).
a3 logout
* BYE Logging out
a3 OK Logout completed (0.001 + 0.000 secs).
Connection closed by foreign host.

Erforderliche Benutzereingaben:

  1. telnet 10.0.0.80 143
  2. a1 login klaus@tachtler.net geheim
  3. a2 list "" "*"
  4. a3 logout

Nach dem Auflisten des (Postfaches), des Benutzers, würde auch das home-Verzeichnis des Benutzers im Dateisystem angelegt werden, falls dies noch nicht geschehen sein sollte.

Dies kann mit nachfolgendem Befehl überprüft werden:

# ls -l /srv/vmail/*
total 0
drwx------ 3 vmail vmail 21 Dec 15 19:59 klaus

Unterhalb von /srv/vmail/klaus, sollte dann das Maildir-Verzeichnis entstanden sein, was mit nachfolgendem Befehl überprüft werden kann:

# ls -l /srv/vmail/tachtler.net/klaus/
total 0
drwx------ 2 vmail vmail 36 Dec 15 19:59 Maildir

bzw.

# ls -l /srv/vmail/tachtler.net/klaus/*
total 4
-rw------- 1 vmail vmail 80 Dec 15 19:59 dovecot.list.index.log

Ausgabe Benutzerdaten

Mit nachfolgendem Befehl, gibt Dovecot eine Liste aller ihm bekannten Benutzer aus:

# doveadm user '*'
klaus@tachtler.net
petra@tachtler.net

Um zu Überprüfen, welche Benutzerdaten Dovecot bekannt sind, kann nachfolgender Befehl genutzt werden:

# doveadm user klaus@tachtler.net
field	value
uid	10000
gid	10000
home	/srv/vmail/tachtler.net/klaus
mail	maildir:~/Maildir

Weiterführende Konfigurationen

Unter nachfolgenden internen Links, werden weiterführende Konfiguration durchgeführt

Dovecot ArchLinux - SSL/TLS

Dovecot ArchLinux - SASL

Dovecot ArchLinux - Quotas

:!: FIXME - Hier geht es weiter … / To be continued …

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/dovecot_archlinux.txt · Zuletzt geändert: 2025/01/10 11:01 von klaus