Mailserver Setup · 5 min read · Nov 11, 2025

Virtuelle Benutzer und Domains mit Postfix, Courier und MySQL (+ SMTP-AUTH, Quota, SpamAssassin, ClamAV)

Dies ist ein “copy & paste” HowTo! Der einfachste Weg, dieses Tutorial zu befolgen, ist die Verwendung eines Befehlszeilenclients/SSH-Clients (wie PuTTY für Windows) und einfach die Befehle zu kopieren und einzufügen (außer dort, wo Sie eigene Informationen wie IP-Adressen, Hostnamen, Passwörter,… angeben müssen). Dies hilft, Tippfehler zu vermeiden.

Virtuelle Benutzer und Domains mit Postfix, Courier und MySQL (+ SMTP-AUTH, Quota, SpamAssassin, ClamAV)

Version 1.0
Autor: Falko Timme

Dieses Tutorial ist Copyright (c) 2005 von Falko Timme. Es basiert auf einem Tutorial von Christoph Haas, das Sie unter http://workaround.org finden können. Sie dürfen dieses Tutorial unter der Creative Commons Lizenz 2.5 oder einer späteren Version verwenden.

Dieses Dokument beschreibt, wie man einen Mailserver basierend auf Postfix installiert, der auf virtuellen Benutzern und Domains basiert, d.h. Benutzer und Domains, die sich in einer MySQL-Datenbank befinden. Ich werde auch die Installation und Konfiguration von Courier (Courier-POP3, Courier-IMAP) demonstrieren, sodass Courier gegen dieselbe MySQL-Datenbank authentifizieren kann, die Postfix verwendet.

Der resultierende Postfix-Server ist in der Lage, SMTP-AUTH und TLS sowie Quota zu unterstützen (Quota ist standardmäßig nicht in Postfix integriert, ich werde zeigen, wie Sie Ihr Postfix entsprechend patchen). Passwörter werden in verschlüsselter Form in der Datenbank gespeichert (die meisten Dokumente, die ich gefunden habe, befassten sich mit Klartextpasswörtern, was ein Sicherheitsrisiko darstellt). Darüber hinaus behandelt dieses Tutorial die Installation von Amavisd, SpamAssassin und ClamAV, sodass E-Mails auf Spam und Viren gescannt werden.

Der Vorteil eines solchen “virtuellen” Setups (virtuelle Benutzer und Domains in einer MySQL-Datenbank) ist, dass es viel leistungsfähiger ist als ein Setup, das auf “echten” Systembenutzern basiert. Mit diesem virtuellen Setup kann Ihr Mailserver Tausende von Domains und Benutzern verwalten. Außerdem ist es einfacher zu verwalten, da Sie nur mit der MySQL-Datenbank umgehen müssen, wenn Sie neue Benutzer/Domains hinzufügen oder bestehende bearbeiten. Keine postmap-Befehle mehr, um db-Dateien zu erstellen, kein erneutes Laden von Postfix usw. Für die Verwaltung der MySQL-Datenbank können Sie webbasierte Tools wie phpMyAdmin verwenden, die ebenfalls in diesem Howto installiert werden. Der dritte Vorteil ist, dass Benutzer eine E-Mail-Adresse als Benutzernamen haben (anstatt eines Benutzernamens + einer E-Mail-Adresse), was leichter zu verstehen und sich zu merken ist.

Dieses Tutorial basiert auf Debian Sarge (Debian 3.1). Sie sollten bereits ein grundlegendes Debian-System eingerichtet haben, wie hier beschrieben: https://www.howtoforge.com/perfect_setup_debian_sarge und https://www.howtoforge.com/perfect_setup_debian_sarge_p2.

Dieses Howto ist als praktische Anleitung gedacht; es behandelt nicht die theoretischen Hintergründe. Diese werden in vielen anderen Dokumenten im Web behandelt.

Dieses Dokument kommt ohne Gewährleistung jeglicher Art! Ich möchte sagen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten, dieses Ziel zu erreichen, aber dies ist der Weg, den ich wähle. Ich gebe keine Garantie, dass dies für Sie funktioniert!

1 Installieren Sie Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Dies kann alles mit einem einzigen Befehl installiert werden:

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authmysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin (1 Zeile!)

Sie werden ein paar Fragen gestellt:

Aktivieren Sie suExec? <– Ja
Verzeichnisse für die webbasierte Verwaltung erstellen? <– Nein
Allgemeiner Konfigurationstyp? <– Internetseite
Wohin soll die Mail für root gehen? <– NONE
Mailname? <– server1.example.com
Andere Ziele, um Mail zu akzeptieren? (leer für keine) <– server1.example.com, localhost, localhost.localdomain
Erzwingen Sie synchrone Updates in der Mail-Warteschlange? <– Nein
SSL-Zertifikat erforderlich <– Ok
Installationshinweise <– Ok
Welchen Webserver möchten Sie automatisch neu konfigurieren? <– apache, apache2
Möchten Sie, dass ich apache jetzt neu starte? <– Ja

2 Wenden Sie den Quota-Patch auf Postfix an

Wir müssen die Postfix-Quellen herunterladen, sie mit dem Quota-Patch patchen, neue Postfix .deb-Pakete erstellen und diese .deb-Pakete installieren:

apt-get install build-essential dpkg-dev fakeroot debhelper libdb4.2-dev libgdbm-dev libldap2-dev libpcre3-dev libmysqlclient10-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch (1 Zeile!)
cd /usr/src
apt-get source postfix
wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.1.5-trash.patch.gz
gunzip postfix-2.1.5-trash.patch.gz
cd postfix-2.1.5
patch -p1 < ../postfix-2.1.5-trash.patch
dpkg-buildpackage
cd ..
dpkg -i postfix_2.1.5-9_i386.deb
dpkg -i postfix-mysql_2.1.5-9_i386.deb
dpkg -i postfix-tls_2.1.5-9_i386.deb

3 Erstellen Sie die MySQL-Datenbank für Postfix/Courier

Standardmäßig wird MySQL ohne ein Root-Passwort installiert, das wir sofort ändern (ersetzen Sie yourrootsqlpassword durch das Passwort, das Sie verwenden möchten):

mysqladmin -u root password yourrootsqlpassword

Jetzt erstellen wir eine Datenbank namens mail:

mysqladmin -u root -p create mail

Als nächstes gehen wir zur MySQL-Shell:

mysql -u root -p

In der MySQL-Shell erstellen wir den Benutzer mail_admin mit dem Passwort mail_admin_password (ersetzen Sie es durch Ihr eigenes Passwort), der SELECT,INSERT,UPDATE,DELETE-Berechtigungen auf der mail-Datenbank hat. Dieser Benutzer wird von Postfix und Courier verwendet, um sich mit der mail-Datenbank zu verbinden:

GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost’ IDENTIFIED BY ‘mail_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mail. TO ‘mail_admin’@’localhost.localdomain’ IDENTIFIED BY ‘mail_admin_password’;
FLUSH PRIVILEGES;

Immer noch in der MySQL-Shell erstellen wir die Tabellen, die Postfix und Courier benötigen:

USE mail;

CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;

CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) TYPE=MyISAM;

CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) TYPE=MyISAM;

quit;

Wie Sie vielleicht bemerkt haben, haben wir mit dem Befehl quit; die MySQL-Shell verlassen und sind zurück auf der Linux-Shell.

Die Tabelle domains speichert jede virtuelle Domain, für die Postfix E-Mails empfangen soll (z.B. example.com).

domain
example.com

Die Tabelle forwardings dient zum Aliasieren einer E-Mail-Adresse zu einer anderen, z.B. E-Mails für [email protected] an [email protected] weiterzuleiten.

sourcedestination
[email protected][email protected]

Die Tabelle users speichert alle virtuellen Benutzer (d.h. E-Mail-Adressen, da die E-Mail-Adresse und der Benutzername identisch sind) und Passwörter (in verschlüsselter Form!) sowie einen Quota-Wert für jedes Postfach (in diesem Beispiel beträgt der Standardwert 10485760 Bytes, was 10 MB entspricht).

emailpasswordquota
[email protected]No9.E4skNvGa. (“secret” in verschlüsselter Form)10485760

Die Tabelle transport ist optional, sie ist für fortgeschrittene Benutzer. Sie ermöglicht es, E-Mails für einzelne Benutzer, ganze Domains oder alle E-Mails an einen anderen Server weiterzuleiten. Zum Beispiel,

domaintransport
example.comsmtp:[1.2.3.4]

würde alle E-Mails für example.com über das SMTP-Protokoll an den Server mit der IP-Adresse 1.2.3.4 weiterleiten (die eckigen Klammern [] bedeuten “keine Suche nach dem MX-DNS-Eintrag durchführen” (was für IP-Adressen sinnvoll ist…). Wenn Sie stattdessen einen vollständig qualifizierten Domainnamen (FQDN) verwenden, würden Sie die eckigen Klammern nicht verwenden.).

Übrigens, (ich gehe davon aus, dass die IP-Adresse Ihres Mailserver-Systems 192.168.0.100 ist) können Sie phpMyAdmin über http://192.168.0.100/phpmyadmin/ in einem Browser aufrufen und sich als mail_admin anmelden. Dann können Sie sich die Datenbank ansehen. Später können Sie phpMyAdmin verwenden, um Ihren Mailserver zu verwalten.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.