Dovecot 2.4 Installation auf Debian 13

Dovecot 2.4 IMAP Server Installation auf Debian 13, eine freie Open-Source-Software für leistungsstarke und sichere IMAP- und POP3-E-Mail-Server für Linux.

Dovecot 2.4 Installation auf Debian 13

Setup: Virtuelle Mailbox-Benutzer, verwaltet in MySQL. LAMP-Stack und Postfix ist bereits vorhanden.

1. Dovecot Pakete Installation

apt update
apt install dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql
apt install postfix-mysql

2. vmail-Systembenutzer anlegen

groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/mail/vhosts -m -s /usr/sbin/nologin
mkdir -p /var/mail/vhosts
chown -R vmail:vmail /var/mail/vhosts

3. MySQL-Datenbank für Mail-Accounts

CREATE DATABASE mailserver;

USE mailserver;

CREATE TABLE virtual_domains (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL UNIQUE
);

CREATE TABLE virtual_users (
  id INT PRIMARY KEY AUTO_INCREMENT,
  domain_id INT NOT NULL,
  email VARCHAR(100) NOT NULL UNIQUE,
  password VARCHAR(150) NOT NULL,
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
);

CREATE TABLE virtual_aliases (
  id INT PRIMARY KEY AUTO_INCREMENT,
  domain_id INT NOT NULL,
  source VARCHAR(100) NOT NULL,
  destination VARCHAR(100) NOT NULL,
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
);

Dedizierter MySQL-Verwaltungsuser (statt root)

CREATE USER 'mailadmin'@'localhost' IDENTIFIED BY 'STARKES_PASSWORT';
GRANT SELECT, INSERT, UPDATE, DELETE ON mailserver.* TO 'mailadmin'@'localhost';

CREATE USER 'mailuser'@'localhost' IDENTIFIED BY 'ANDERES_PASSWORT';
GRANT SELECT ON mailserver.* TO 'mailuser'@'127.0.0.1';

CREATE USER 'mailuser'@'127.0.0.1' IDENTIFIED BY 'ANDERES_PASSWORT';
GRANT SELECT ON mailserver.* TO 'mailuser'@'127.0.0.1';

FLUSH PRIVILEGES;

Hinweis Der MySQL-Verwaltungsuser als ‚localhost‘ und ‚127.0.0.1‘ erstellen, da MySQL diese als unterschiedliche User behandelt. Damit der Postfix User-Lookup über einer der beiden möglich ist.

  • mailadmin — volle Rechte, genutzt vom Verwaltungs-Script (mailuser.sh)
  • mailuser — nur Lesezugriff, genutzt von Dovecot und Postfix für die Auth-/Domain-Lookups

4. Dovecot-Konfiguration (/etc/dovecot/dovecot.conf)

Dovecot 2.4 verwendet eine neue, zentrale Config-Syntax. Alles Wesentliche steht in einer Datei statt verteilt über conf.d/*.conf.

dovecot_config_version = 2.4.0
dovecot_storage_version = 2.4.0

protocols {
    lmtp = yes
    imap = yes
}

ssl = required
ssl_server_cert_file = /etc/letsencrypt/live/mail.beispiel.tld/fullchain.pem
ssl_server_key_file = /etc/letsencrypt/live/mail.beispiel.tld/privkey.pem

sql_driver = mysql
mysql 127.0.0.1 {
  user = mailuser
  password = ANDERES_PASSWORT
  dbname = mailserver
}

auth_mechanisms = plain login
auth_username_format = %{user | lower}

passdb sql {
    query = SELECT email AS user, password FROM virtual_users WHERE email = '%{user | lower}';
    default_password_scheme = SHA512-CRYPT
}

userdb sql {
    query = SELECT email AS user FROM virtual_users WHERE email = '%{user | lower}';
    iterate_query = SELECT email FROM virtual_users;
}

mail_uid = vmail
mail_gid = vmail
mail_privileged_group = vmail
mail_home = /var/mail/vhosts/%{user | domain}/%{user | username}
mail_driver = maildir
mail_path = ~/mail
mailbox_list_layout = fs

namespace inbox {
    inbox = yes
}

service lmtp {
    unix_listener /var/spool/postfix/private/dovecot-lmtp {
        mode = 0660
        group = postfix
        user = postfix
    }
}

service auth {
    unix_listener /var/spool/postfix/private/auth {
        mode = 0660
        user = postfix
        group = postfix
    }
    unix_listener auth-userdb {
        mode = 0660
        user = vmail
        group = vmail
    }
}

Wichtig: In den SQL-Queries für passdb/userdb muss %{user | lower} verwendet werden — nicht %{user | username | lower}. Der username-Filter schneidet den Domain-Teil ab und sucht dann fälschlich nur nach dem Lokalteil der Adresse, wodurch die Query in virtual_users keinen Treffer findet. Für mail_home (Pfadaufbau) ist die Trennung in domain/username dagegen korrekt und gewollt.

chmod 600 /etc/dovecot/dovecot.conf
chown root:root /etc/dovecot/dovecot.conf

5. Postfix-Anbindung (/etc/postfix/main.cf)

virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

/etc/postfix/mysql-virtual-mailbox-domains.cf

user = mailuser
password = ANDERES_PASSWORT
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'

/etc/postfix/mysql-virtual-mailbox-maps.cf

user = mailuser
password = ANDERES_PASSWORT
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_users WHERE email='%s'
chown root:postfix /etc/postfix/mysql-virtual-*.cf
chmod 640 /etc/postfix/mysql-virtual-*.cf

6. Dienste starten

doveconf -n          # Syntax-Check
postfix check
systemctl restart dovecot
systemctl restart postfix
systemctl enable dovecot

7. Verwaltungs-Script mailuser.sh

CLI-Tool zum Anlegen/Verwalten von Domains, Benutzern und Aliassen, nutzt den mailadmin-MySQL-User und doveadm pw -s SHA512-CRYPT für Passwort-Hashes.

Nutzung: mailuser.sh {add-domain|add-user|password|add-alias|delete-user|list}

8. Test der kompletten Kette

Domain-/User-Lookup über Postfix:

postmap -q beispiel.tld mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
postmap -q mein.email@beispiel.tld mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Dovecot-Auth direkt testen:

doveadm auth test mein.email@beispiel.tld

passdb: mein.email@beispiel.tld auth succeeded

IMAP-Login:

openssl s_client -connect localhost:993 -crlf
a login mein.email@beispiel.tld PASSWORT
a select inbox

Testmail per sendmail (Postfix-Wrapper, kein zusätzliches Paket nötig):

sendmail mein.email@beispiel.tld << 'EOF'
Subject: Testmail
From: mein.email@beispiel.tld
To: mein.email@beispiel.tld

Dies ist eine Testmail.
EOF

Zustellung prüfen:

ls -la /var/mail/vhosts/beispiel.tld/admin/mail/new/

Mail-Log live mitverfolgen:

tail -f /var/log/mail.log

Ergebnis: Postfix → LMTP → Dovecot → MySQL-Auth → Maildir-Zustellung funktioniert durchgängig für virtuelle Domains/Benutzer.

Offene Erweiterungen (optional)

  • Sieve-Filter (dovecot-sieve, dovecot-managesieved) für serverseitige Regeln
  • fail2ban-Jail für Dovecot/Postfix gegen Brute-Force-Logins
  • Postfix Submission (Port 587 mit STARTTLS Explicit TLS) für externe Mail-Clients konfigurieren
  • Postfix Submissions (Port 465 mit implizitem TLS)) für externe Mail-Clients konfigurieren

WireGuard auf MikroTik hEX S einrichten

Die Einrichtung von WireGuard zwischen einem MikroTik hEX S (Server) und einem Windows 11 PC (Client) erfordert die Konfiguration auf beiden Geräten. WireGuard basiert auf einem Austausch von öffentlichen Schlüsseln (Public Keys). Der Server erfordert eine Public IP (DDNS) und komminiziert mit dem Client per Standard über UDP Port 51820, wir verwenden hier einen anderen Port.

Hier ist die Schritt-für-Schritt-Anleitung.


Schritt 1: Konfiguration auf MikroTik hEX S

Du kannst diese WireGuard Befehle über das MikroTik Terminal ausführen oder die entsprechenden Menüs in WinBox oder WebFig nutzen.

1. WireGuard-Schnittstelle erstellen

Dadurch wird die virtuelle Schnittstelle beim MikroTik erstellt und automatisch ein Schlüsselpaar generiert.

/interface wireguard
add listen-port=15670 name=wg-server

Hinweis für WinBox: Gehe auf WireGuard -> Reiter WireGuard -> + klicke -> Name und Port (z. B. 15670) eintragen. Kopiere den generierten Public Key für später.

2. IP-Adresse für WireGuard-Netzwerk

Das VPN benötigt ein eigenes Subnetz (z. B. 10.0.10.0/24). Der Router erhält die 10.0.10.1.

/ip address
add address=10.0.10.1/24 interface=wg-server network=10.0.10.0

Hinweis für WinBox: IP -> Addresses -> + klicke -> Address: 10.0.10.1/24, Interface: wg-server.

3. Firewall-Port öffnen

Der Router muss eingehenden WireGuard-Traffic auf dem gewählten UDP-Port erlauben.

/ip firewall filter
add action=accept chain=input comment="Allow WireGuard" dst-port=15670 protocol=udp place-before=0

Hinweis für WinBox/WebFig: IP -> Firewall -> Filter Rules -> Regel ganz nach oben schieben.


Schritt 2: Konfiguration Windows 11 Client

  1. Lade den offiziellen WireGuard-Installer für Windows herunter und installiere ihn.
  2. Öffne WireGuard und klicke unten links auf den Pfeil -> „Einen leeren Tunnel hinzufügen“, oder drücke Ctrl + N.
  3. Ersetze den Text im Textfeld mit folgender Konfiguration:
[Interface]
PrivateKey = [WIRD_AUTOMATISCH_GENERIERT]
Address = 10.0.10.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = [HIER_DEN_PUBLIC_KEY_VOM_MIKROTIK_EINTRAGEN]
Endpoint = [IHRE_EFFEKTIVE_ÖFFENTLICHE_IP_ODER_DDNS]:15670
AllowedIPs = 192.168.1.0/24
PersistentKeepalive = 25

  • AllowedIPs: 0.0.0.0/0 leitet den gesamten Internetverkehr über das VPN. Wenn nur Zugriff auf das entfernte Netzwerk möglich sein soll, trage stattdessen das Subnetz ein, zum Beispiel 192.168.1.0/24.
  • Address: Der Windows-PC erhält die IP 10.0.10.2.
  • Kopiere den Öffentlichen Schlüssel (Public Key), der oben im Feld Öffentlicher Schlüssel (rot) angezeigt wird.
  • Wenn alles fertig ist klicke auf Speichern.
WireGuard auf MikroTik hEX S einrichten

WireGuard PublicKey abrufen

Du kannst diesen Befehl im MikroTik Terminal ausführen.

/interface wireguard print

Der angezeigte PublicKey für den WireGuard Client Abschnitt [Peer].


Schritt 3: Client im MikroTik eintragen (Peer hinzufügen)

Gehe zurück zum MikroTik, um den Windows-Client zu autorisieren.

/interface wireguard peers
add allowed-address=10.0.10.2/32 interface=wg-server public-key="[HIER_DEN_PUBLIC_KEY_VON_WINDOWS_EINTRAGEN]"

Hinweis für WinBox: WireGuard -> Reiter Peers -> + klicke -> Interface: wg-server, Public Key von Windows einfügen, Allowed Address: 10.0.10.2/32.


Schritt 4: Verbindung aktivieren und testen

  1. Klicke in der Windows-WireGuard-App auf Aktivieren.
  2. Prüfe den Status: Wenn die Anzeige grün wird und bei „Übertragung“ Daten (Bytes gesendet/empfangen) hochzählen, steht die Verbindung.
  3. Teste den Zugriff, mit im Windows-Browser 10.0.10.1 aufrufen – du solltest auf der MikroTik-Oberfläche landen.