Tags

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 vmail

Falls 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/vhosts

Postfix-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/... differ

Fix: 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=1200s

vhosts

keisanki.net

vmailbox

oib@keisanki.net    oib/

Index aktualisieren:

postmap /etc/postfix/vmailbox

valiases

postmaster@keisanki.net  oib@keisanki.net
root@keisanki.net        oib@keisanki.net
logcheck@keisanki.net    oib@keisanki.net
logwatch@keisanki.net    oib@keisanki.net

Map 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 directory

Dann ist das LMTP‑Modul nicht installiert.

Fix:

apt install dovecot-lmtpd
systemctl restart dovecot

dovecot.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/passwd

Beispiel in passwd:

oib@keisanki.net:{SHA512-CRYPT}HASHVALUEHERE

Passwort generieren:

doveadm pw -s SHA512-CRYPT

⚙️ 7. Dovecot conf.d Dateien

10-mail.conf

mail_home     = /var/vmail/%n
mail_uid      = 115
mail_gid      = 115

Mit %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.ext

auth-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.