Mail Server · 6 min read · Oct 03, 2025

Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (Debian Squeeze)

Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (Debian Squeeze)

Version 1.0
Autor: Falko Timme
Folge mir auf Twitter

Dieses Tutorial ist Copyright (c) 2011 von Falko Timme. Es basiert auf einem Tutorial von Christoph Haas, das du unter http://workaround.org findest. Du darfst dieses Tutorial unter der Creative Commons Lizenz 2.5 oder einer späteren Version verwenden.

Dieses Dokument beschreibt, wie man einen Postfix-Mailserver installiert, der auf virtuellen Benutzern und Domains basiert, d.h. Benutzern 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 und Quota zu unterstützen (Quota ist standardmäßig nicht in Postfix integriert, ich werde zeigen, wie man Postfix entsprechend patcht). Passwörter werden in verschlüsselter Form in der Datenbank gespeichert (die meisten Dokumente, die ich gefunden habe, behandelten Klartextpasswörter, was ein Sicherheitsrisiko darstellt). Zusätzlich behandelt dieses Tutorial die Installation von Amavisd, SpamAssassin und ClamAV, sodass E-Mails auf Spam und Viren gescannt werden. Ich werde auch zeigen, wie man SquirrelMail als Webmail-Oberfläche installiert, damit Benutzer E-Mails lesen und senden sowie ihre Passwörter ändern können.

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 dein Mailserver Tausende von Domains und Benutzern verwalten. Außerdem ist es einfacher zu verwalten, da du nur mit der MySQL-Datenbank umgehen musst, wenn du neue Benutzer/Domains hinzufügst oder bestehende bearbeitest. Keine weiteren postmap-Befehle zum Erstellen von DB-Dateien, kein erneutes Laden von Postfix usw. Für die Verwaltung der MySQL-Datenbank kannst du webbasierte Tools wie phpMyAdmin verwenden, das ebenfalls in diesem Howto installiert wird. Der dritte Vorteil ist, dass Benutzer eine E-Mail-Adresse als Benutzernamen haben (anstatt eines Benutzernamens + einer E-Mail-Adresse), was einfacher zu verstehen und sich zu merken ist.

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 jegliche Gewährleistung! 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 dich funktioniert!

1 Vorbemerkung

Dieses Tutorial basiert auf Debian Squeeze, daher solltest du eine grundlegende Debian Squeeze-Serverinstallation einrichten, bevor du mit diesem Tutorial fortfährst (z.B. wie in den ersten acht Kapiteln dieses Tutorials gezeigt: Der perfekte Server - Debian Squeeze (Debian 6.0) [ISPConfig 2]). Das System sollte eine statische IP-Adresse haben. Ich verwende 192.168.0.100 als meine IP-Adresse in diesem Tutorial und server1.example.com als Hostnamen.

Es ist sehr wichtig, dass du /bin/sh zu einem Symlink auf /bin/bash machst:

dpkg-reconfigure dash

Verwende dash als Standard-System-Shell (/bin/sh)? <– Nein

2 Installiere Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Um Postfix, Courier, Saslauthd, MySQL und phpMyAdmin zu installieren, führen wir einfach aus

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass

Du wirst ein paar Fragen gestellt:

Allgemeiner Typ der Mailkonfiguration: <– Internet Site
System-Mailname: <– server1.example.com
Neues Passwort für den MySQL “root”-Benutzer: <– yourrootsqlpassword
Wiederhole Passwort für den MySQL “root”-Benutzer: <– yourrootsqlpassword
Verzeichnisse für die webbasierte Verwaltung erstellen? <– Nein
SSL-Zertifikat erforderlich <– Ok
Arbeitsgruppe/Domänenname: <– WORKGROUP
Webserver automatisch neu konfigurieren: <– apache2
Datenbank für phpmyadmin mit dbconfig-common konfigurieren? <– Nein

3 Wende den Quota-Patch auf Postfix an

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

apt-get build-dep postfix
cd /usr/src  
 apt-get source postfix

(Stelle sicher, dass du die richtige Postfix-Version in den folgenden Befehlen verwendest. Ich habe Postfix 2.7.1 installiert. Du kannst deine Postfix-Version herausfinden, indem du ausführst

postconf -d | grep mail_version

Die Ausgabe sollte so aussehen:

root@server1:/usr/src# postconf -d | grep mail_version  
 mail_version = 2.7.1  
 milter_macro_v = $mail_name $mail_version  
 root@server1:/usr/src#

)

wget http://vda.sourceforge.net/VDA/postfix-vda-2.7.1.patch  
 cd postfix-2.7.1  
 patch -p1 < ../postfix-vda-2.7.1.patch  
 dpkg-buildpackage

Jetzt gehen wir ein Verzeichnis nach oben, dort wurden die neuen .deb-Pakete erstellt:

cd ..

Der Befehl

ls -l

zeigt dir die verfügbaren Pakete:

root@server1:/usr/src# ls -l  
 total 6416  
 drwxr-xr-x 19 root root    4096 Feb 28 15:33 postfix-2.7.1  
 -rw-r--r--  1 root root    3980 Feb 28 15:33 postfix_2.7.1-1_amd64.changes  
 -rw-r--r--  1 root root 1419128 Feb 28 15:33 postfix_2.7.1-1_amd64.deb  
 -rw-r--r--  1 root root  234708 Feb 28 15:31 postfix_2.7.1-1.diff.gz  
 -rw-r--r--  1 root root    1181 Feb 28 15:31 postfix_2.7.1-1.dsc  
 -rw-r--r--  1 root root 3418747 Jun 21  2010 postfix_2.7.1.orig.tar.gz  
 -rw-r--r--  1 root root   42086 Feb 28 15:33 postfix-cdb_2.7.1-1_amd64.deb  
 -rw-r--r--  1 root root  146770 Feb 28 15:33 postfix-dev_2.7.1-1_all.deb  
 -rw-r--r--  1 root root 1003542 Feb 28 15:33 postfix-doc_2.7.1-1_all.deb  
 -rw-r--r--  1 root root   50510 Feb 28 15:33 postfix-ldap_2.7.1-1_amd64.deb  
 -rw-r--r--  1 root root   44160 Feb 28 15:33 postfix-mysql_2.7.1-1_amd64.deb  
 -rw-r--r--  1 root root   44252 Feb 28 15:33 postfix-pcre_2.7.1-1_amd64.deb  
 -rw-r--r--  1 root root   44214 Feb 28 15:33 postfix-pgsql_2.7.1-1_amd64.deb  
 -rw-r--r--  1 root root   59667 Nov  5 15:05 postfix-vda-2.7.1.patch  
 root@server1:/usr/src#

Wähle die Pakete postfix und postfix-mysql aus und installiere sie wie folgt:

dpkg -i postfix_2.7.1-1_amd64.deb postfix-mysql_2.7.1-1_amd64.deb

4 Erstelle die MySQL-Datenbank für Postfix/Courier

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 (ersetze es durch dein 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 von Postfix und Courier benötigt werden:

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 du vielleicht bemerkt hast, haben wir mit dem Befehl quit; die MySQL-Shell verlassen und sind zurück in der Linux-Shell.

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

domain
example.com

Die forwardings-Tabelle dient dazu, eine E-Mail-Adresse auf eine andere umzuleiten, z.B. E-Mails für [email protected] an [email protected] weiterzuleiten.

sourcedestination
[email protected][email protected]

Die users-Tabelle 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 transport-Tabelle ist optional und dient fortgeschrittenen Benutzern. 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 du stattdessen einen vollqualifizierten Domainnamen (FQDN) verwendest, würdest du die eckigen Klammern nicht verwenden).

Übrigens, (ich gehe davon aus, dass die IP-Adresse deines Mailserver-Systems 192.168.0.100 ist) kannst du phpMyAdmin über http://192.168.0.100/phpmyadmin/ in einem Browser aufrufen und dich als mail_admin anmelden. Dann kannst du dir die Datenbank ansehen. Später kannst du phpMyAdmin verwenden, um deinen Mailserver zu verwalten.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.