Diese Dokumentation beschreibt den vollständigen Aufbau eines virtuellen Mailservers unter Debian 13 (Trixie) mit Postfix, Dovecot, LMTP‑Zustellung, TLS‑Absicherung, Alias‑Management und einem klaren Flat‑Mailstore‑Design. Der Fokus liegt auf Stabilität, Übersichtlichkeit und Erweiterbarkeit.
🔧 1. Pakete installieren (Postfix + Dovecot)
Für einen vollständigen virtuellen Mailserver werden folgende Pakete benötigt:
apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd dovecot-common mailutils rsync🔧 2. System-Nutzer & Gruppen anlegen
Vorhandene Accounts prüfen:
getent passwd vmail
getent group vmailFalls der Benutzer noch nicht existiert:
adduser --system --group --uid 115 vmail
Hinweis: Die früher genutzte Gruppe vmailgrp ist veraltet. Die Gruppe vmail reicht vollständig aus.
🧱 2. Architektur & Komponenten
Der Mailserver nutzt virtuelle Nutzer und speichert alle Postfächer zentral unter /var/vmail/. Systemnutzer und Mailkonten bleiben strikt getrennt.
Komponentenübersicht
- Postfix – SMTP‑Server für Empfang & Versand
- Dovecot – IMAP‑Server, Auth‑Backend & LMTP‑Zustellung
- Virtuelle Nutzer – hinterlegt in
/etc/dovecot/passwd - Virtuelle Domains – definiert in
/etc/postfix/vhosts - Flat Mailstore – jeder Nutzer besitzt ein eigenes Verzeichnis
/var/vmail/<nutzer>/ - Aliases – gesteuert über
/etc/postfix/valiases
Das System ist modular, wartungsarm und beliebig erweiterbar.
📁 3. Verzeichnisstruktur
/etc/postfix/
├── main.cf
├── master.cf
├── vhosts
├── vmailbox
└── valiases
/etc/dovecot/
├── dovecot.conf
├── passwd
└── conf.d/
├── 10-mail.conf
├── 10-auth.conf
├── auth-passwdfile.conf.ext
├── 10-master.conf
├── 10-ssl.conf
└── 15-lda.conf
/var/vmail/<adresse>/Maildir/
Flat Mailstore Hinweis:
Jedes Postfach wird anhand des lokalen Teils (z. B. oib) gespeichert.
Beispiel: oib@keisanki.net → /var/vmail/oib/Maildir/.
Domains spielen in der Directory-Struktur keine Rolle.
📬 4. Postfix-Konfiguration
Postfix-Dateirechte prüfen (empfohlener Systemcheck)
Damit Postfix seine Maps sicher lesen kann, dürfen diese nicht von Gruppe/others beschreibbar sein.
Fix:
chown root:root /etc/postfix/vmailbox /etc/postfix/valiases /etc/postfix/vhosts
chmod 0644 /etc/postfix/vmailbox /etc/postfix/valiases /etc/postfix/vhostsPostfix-Chroot: SSL-CA-Zertifikate synchronisieren
Wenn Postfix meldet, dass Zertifikate zwischen System und Chroot unterschiedlich sind:
warning: /var/spool/postfix/etc/ssl/certs/... and /etc/ssl/certs/... differFix: Zertifikatsstore synchronisieren:
mkdir -p /var/spool/postfix/etc/ssl/certs
rsync -a --delete /etc/ssl/certs/ /var/spool/postfix/etc/ssl/certs/Der Server bietet nur IMAP(S) – POP3 ist deaktiviert.
main.cf
myhostname = mail.keisanki.net
mydomain = keisanki.net
myorigin = /etc/mailname
mydestination = localhost
virtual_mailbox_domains = /etc/postfix/vhosts
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_alias_maps = hash:/etc/postfix/valiases
virtual_minimum_uid = 115
virtual_uid_maps = static:115
virtual_gid_maps = static:115
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.keisanki.net/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.keisanki.net/privkey.pem
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
virtual_transport = lmtp:unix:private/dovecot-lmtp
disable_dns_nis = yes
master.cf
smtp inet n - y - - smtpd
submission inet n - y - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
lmtp unix - - n - - lmtp
-o lmtp_rcpt_check_quit=on
-o lmtp_data_done_timeout=1200svhosts
keisanki.netvmailbox
oib@keisanki.net oib/Index aktualisieren:
postmap /etc/postfix/vmailboxvaliases
postmaster@keisanki.net oib@keisanki.net
root@keisanki.net oib@keisanki.net
logcheck@keisanki.net oib@keisanki.net
logwatch@keisanki.net oib@keisanki.netMap neu generieren:
postmap /etc/postfix/valiases📨 5. Dovecot-Konfiguration
Fehlender LMTP-Dienst (wichtiger Systemcheck)
Wenn Dovecot meldet:
Fatal: service(lmtp) access(/usr/lib/dovecot/lmtp) failed: No such file or directoryDann ist das LMTP‑Modul nicht installiert.
Fix:
apt install dovecot-lmtpd
systemctl restart dovecotdovecot.conf
!include_try /usr/share/dovecot/protocols.d/*.protocol
listen = *
!include conf.d/*.conf
!include_try local.conf👤 6. Virtuelle Nutzer
Neuen Nutzer anlegen:
echo "USER@keisanki.net:$(doveadm pw -s SHA512-CRYPT)" >> /etc/dovecot/passwdBeispiel in passwd:
oib@keisanki.net:{SHA512-CRYPT}HASHVALUEHEREPasswort generieren:
doveadm pw -s SHA512-CRYPT⚙️ 7. Dovecot conf.d Dateien
10-mail.conf
mail_home = /var/vmail/%n
mail_uid = 115
mail_gid = 115Mit %n wird nur der lokale Teil (z. B. oib) als Verzeichnisname verwendet.
So können mehrere Domains (z. B. oib@keisanki.net, oib@orangeicebear.at) im gleichen Postfach landen.
10-auth.conf
auth_mechanisms = plain login
!include auth-passwdfile.conf.extauth-passwdfile.conf.ext
passdb passwd-file {
default_password_scheme = SHA512-CRYPT
passwd_file_path = /etc/dovecot/passwd
}
userdb static {
fields {
home = /var/vmail/%{ user | username }
quota_rule=*:storage=1G
}
}10-master.conf
Nach einer Standard‑Installation sind in /etc/dovecot/conf.d/10-master.conf viele Dienste kommentiert oder nur als Beispiele vorhanden. Für dein Setup müssen nur wenige Blöcke tatsächlich aktiviert oder angepasst werden.
Minimal notwendige Anpassungen:
- IMAPS Listener aktivieren (Port 993)
- LMTP‑Socket für Postfix
- Auth‑Socket für Postfix (SMTP‑AUTH)
Finaler relevanter Block:
service imap-login {
inet_listener imaps {
port = 993
ssl = yes
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.keisanki.net/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.keisanki.net/privkey.pem
15-lda.conf
protocol lda {
postmaster_address = postmaster@keisanki.net
}🛠️ 8. Weiterleitungen für Logcheck & Logwatch
echo "logcheck@keisanki.net oib@keisanki.net" >> /etc/postfix/valiases
echo "logwatch@keisanki.net oib@keisanki.net" >> /etc/postfix/valiases
postmap /etc/postfix/valiases
systemctl restart postfix🧭 9. LMTP vs. LDA – Überblick
LMTP (Empfehlung)
- perfekte Integration mit Dovecot
- zuverlässige Zustellung
- sauber getrennte Zustellprozesse
- ideal für virtuelle Nutzer
LDA
- einfacher, aber weniger robust
- nur sinnvoll für klassische Systemnutzer
Fazit: Moderne Setups sollten LMTP verwenden.