📨 Bitte zuerst den vorherigen Teil lesen!
Dieser Artikel ist der fünfte Teil der Serie "E-Mail-Server unter Linux einrichten".
Im vorherigen Teil haben wir die vier notwendigen Konfigurationsdateien von Dovecot analysiert. Wenn Sie ihn noch nicht gelesen haben, empfehle ich Ihnen, dies zuerst zu tun.
👉 Vorheriger Teil: Analyse der notwendigen Konfigurationsdateien von Dovecot


🔄 Hinweis zur Reihenfolge
Im letzten Teil hatte ich angekündigt, dass im nächsten Artikel die auth-sql.conf.ext-Einstellungen behandelt werden, aber während ich den Artikel schrieb, stellte ich fest, dass es logischer ist, zunächst das Design der DB-Tabellen zu erläutern.

Deshalb wird dieser Artikel sich mit dem Konzept der virtuellen Benutzer in Dovecot und dem Design der PostgreSQL-Tabellen beschäftigen,
und im nächsten Teil werde ich die Einstellungen für die Anbindung von Dovecot an PostgreSQL mit auth-sql.conf.ext erläutern.


🎯 Was sind Dovecot virtuelle Benutzer? Warum werden sie benötigt?

Die Methoden zur Authentifizierung von Benutzern in Dovecot sind grob in zwei Kategorien eingeteilt.

  1. Authentifizierung über Systemkonten
  2. Authentifizierung über die /etc/passwd und /etc/shadow Dateien von Linux
  3. Verwendung typischer Systembenutzerkonten
  4. Aufwändige Kontoverwaltung und Schwierigkeit beim Erstellen von E-Mail-spezifischen Konten

  5. Authentifizierung über virtuelle Benutzer (Virtual Users)

  6. Authentifizierung über eine separate Datenbank (z.B. PostgreSQL, MySQL)
  7. Unabhängige Verwaltung von E-Mail-spezifischen Benutzern im Vergleich zu Systemkonten
  8. Hervorragende Sicherheit und Skalierbarkeit, geeignet für umfangreiche E-Mail-Dienste

Wir planen, eine virtuelle Benutzerumgebung mit PostgreSQL zu erstellen.
Das bedeutet, dass Benutzerinformationen aus der Datenbank abgerufen werden, ohne dass echte Linux-Konten erstellt werden müssen.

🔹 Vorteile einer virtuellen Benutzerumgebung

  • Hohe Sicherheit durch Trennung von Systemkonten
  • Benutzerkonten können einfach hinzugefügt und entfernt werden
  • Unterstützung von mehreren Domains (Verwaltung mehrerer E-Mail-Domains auf einem Server)
  • Hervorragende Skalierbarkeit und einfache Verwaltung

Eine Taube, die einen Brief in der Nähe einer Datenbank hält


🛠️ Tabellendesign in PostgreSQL

Um virtuelle Benutzer in Dovecot angemessen zu verwalten, sind mindestens 3 Tabellen erforderlich.

1️⃣ Notwendige Tabellenkonfiguration

  1. mail_domain - Liste der Domains, die der Mailserver verwalten wird
  2. mail_users - Informationen zu den tatsächlichen E-Mail-Nutzern
  3. mail_alias - Verwaltung von E-Mail-Aliasen (Weiterleitungen)

Der Grund für diese Trennung ist die Skalierbarkeit und die einfache Wartung.
Dies ist besonders nützlich, wenn mehrere E-Mail-Domains betrieben oder bestimmte E-Mails an andere Adressen weitergeleitet werden müssen.


2️⃣ Tabellenschema und SQL-Beispiele

📌 1. mail_domain (Verwaltung der Domainliste)
Tabelle zur Verwaltung der Domains, die vom Mailserver akzeptiert werden.
Das heißt, Domains wie example.com und mydomain.com werden definiert.

CREATE TABLE mail_domain (
    id SERIAL PRIMARY KEY,
    domain_name VARCHAR(255) NOT NULL UNIQUE,
    active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT NOW()
);

🔹 Erklärung
- domain_name → E-Mail-Domain (z.B. example.com)
- active → ob die Domain genutzt werden kann (kann deaktiviert werden)
- created_at → Erstellungsdatum

Beispiel für das Einfügen von Testdaten

INSERT INTO mail_domain (domain_name) VALUES ('example.com');
INSERT INTO mail_domain (domain_name) VALUES ('mydomain.com');

📌 2. mail_users (E-Mail-Benutzerkonten)
Informationen zu Benutzerkonten, die tatsächlich E-Mails verwenden.
Jeder Benutzer muss zu einer bestimmten Domain gehören.

CREATE TABLE mail_users (
    id SERIAL PRIMARY KEY,
    domain_id INT NOT NULL REFERENCES mail_domain(id) ON DELETE CASCADE,
    email VARCHAR(255) NOT NULL UNIQUE,
    password TEXT NOT NULL,
    home_directory TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);

🔹 Erklärung
- domain_id → verknüpft mit der id der mail_domain-Tabelle (Domain, zu der der Mailbenutzer gehört)
- email → E-Mail-Adresse des Benutzers (user@example.com)
- password → Speicherung des verschlüsselten Passworts
- home_directory → Speicherort der E-Mails (/var/mail/vmail/user@example.com)
- created_at → Erstellungsdatum des Kontos

Beispiel für das Einfügen von Testdaten

INSERT INTO mail_users (domain_id, email, password, home_directory)
VALUES (1, 'user@example.com', 'hashed_password_here', '/var/mail/vmail/user@example.com');

📌 3. mail_alias (E-Mail-Alias / Weiterleitung) Erforderlich, um E-Mails an eine andere Adresse weiterzuleiten oder mehrere Aliase für eine einzelne Adresse zu nutzen.

CREATE TABLE mail_alias (
    id SERIAL PRIMARY KEY,
    domain_id INT NOT NULL REFERENCES mail_domain(id) ON DELETE CASCADE,
    source_email VARCHAR(255) NOT NULL,
    destination_email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);

🔹 Erklärung

  • source_email → ursprüngliche E-Mail-Adresse (z.B. contact@example.com)
  • destination_email → E-Mail-Adresse, an die weitergeleitet werden soll (z.B. admin@example.com)
  • Funktion zur automatischen Weiterleitung einer bestimmten E-Mail-Adresse an eine andere

Beispiel für das Einfügen von Testdaten

INSERT INTO mail_alias (domain_id, source_email, destination_email)
VALUES (1, 'contact@example.com', 'admin@example.com');

Jetzt wird jede E-Mail, die an contact@example.com gesendet wird, automatisch an admin@example.com weitergeleitet.

🔍 Empfohlene Tabellen für künftige Erweiterungen

Zusätzlich zu den grundlegenden Funktionen einer E-Mail-Dienstleistung können zusätzliche Funktionen erweitert werden. Nachfolgend einige Beispiele für Tabellen, die in Zukunft erweitert werden könnten.

Tabellenname Rolle
mail_quota Speicherplatzbeschränkung pro Benutzer
mail_blacklist Liste blockierter E-Mails
mail_whitelist Liste erlaubter E-Mails
mail_forwarding Weiterleitung an externe E-Mail-Konten
mail_autoresponder Verwaltung automatischer Antwortnachrichten
mail_address_book Verwaltung interner Adressbücher

🏁 Zusammenfassung und nächste Schritte

In diesem Artikel behandelte Themen
- Dovecot virtuelles Benutzerkonzept und Notwendigkeit
- PostgreSQL Tabellenentwurf (mail_domain, mail_users, mail_alias)
- Empfohlene zusätzliche Tabellen zur Erweiterung der E-Mail-Verwaltung

Voraussichtlicher nächster Teil: auth-sql.conf.ext-Einstellungen und Passwort-Hashing-Methoden
Jetzt sind die Datenbanktabellen bereit. Im nächsten Teil wird erläutert, wie Dovecot Informationen von PostgreSQL abruft, um Benutzer zu authentifizieren,
und wir werden die Methoden zum Hashen von Passwörtern in Benutzerkonten behandeln.

Insbesondere vergleichen wir die Eigenschaften und Sicherheitsunterschiede der Methoden MD5, SHA-256, BCRYPT und
wir werden ausführlich betrachten, wie diese Methoden in Dovecot und PostgreSQL angewendet werden können.

👉 Nächster Teil: auth-sql.conf.ext-Einstellungen und Methoden zum Hashen von Passwörtern (Demnächst!)