Mail Server · 6 min read · Sep 27, 2025
Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (Debian Lenny)
Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (Debian Lenny)
Version 1.0
Autor: Falko Timme
Dieses Tutorial ist Copyright (c) 2009 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 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 sowie 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 Klartext-Passwörter, 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. 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 einer solchen “virtuellen” Konfiguration (virtuelle Benutzer und Domains in einer MySQL-Datenbank) ist, dass sie viel leistungsfähiger ist als eine Konfiguration, die auf “echten” Systembenutzern basiert. Mit dieser virtuellen Konfiguration kann Ihr Mailserver Tausende von Domains und Benutzern verwalten. Außerdem ist die Verwaltung einfacher, da Sie nur mit der MySQL-Datenbank umgehen müssen, wenn Sie neue Benutzer/Domains hinzufügen oder bestehende bearbeiten. Keine weiteren postmap-Befehle zum Erstellen von DB-Dateien, kein erneutes Laden von Postfix usw. Für die Verwaltung der MySQL-Datenbank können Sie 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 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 Vorbemerkung
Dieses Tutorial basiert auf Debian Lenny, daher sollten Sie eine grundlegende Debian Lenny-Serverinstallation einrichten, bevor Sie mit diesem Tutorial fortfahren (z.B. wie in den Kapiteln 1 -7 dieses Tutorials: Der perfekte Server - Debian Lenny (Debian 5.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 den Hostnamen.
2 Installieren Sie 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 postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpassSie werden ein paar Fragen gestellt:
Neues Passwort für den MySQL “root”-Benutzer: <– yourrootsqlpassword
Wiederholen Sie das Passwort für den MySQL “root”-Benutzer: <– yourrootsqlpassword
Verzeichnisse für die webbasierte Verwaltung erstellen? <– Nein
Allgemeiner Typ der Mailkonfiguration: <– Internet Site
System-Mailname: <– server1.example.com
SSL-Zertifikat erforderlich <– Ok
Arbeitsgruppe/Domänenname: <– WORKGROUP
Smb.conf anpassen, um WINS-Einstellungen von DHCP zu verwenden? <– Nein
Webserver automatisch neu konfigurieren: <– apache2
3 Wenden Sie 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 postfixcd /usr/src
apt-get source postfix(Stellen Sie sicher, dass Sie die richtige Postfix-Version in den folgenden Befehlen verwenden. Ich habe Postfix 2.5.5 installiert. Sie können Ihre Postfix-Version herausfinden, indem Sie ausführen
postconf -d | grep mail_versionDie Ausgabe sollte so aussehen:
server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.5.5
milter_macro_v = $mail_name $mail_version
server1:/usr/src#)
wget http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng.patch.gz
gunzip postfix-2.5.5-vda-ng.patch.gz
cd postfix-2.5.5
patch -p1 < ../postfix-2.5.5-vda-ng.patch
dpkg-buildpackageSie könnten am Ende des dpkg-buildpackage-Befehls eine Warnung wie diese sehen:
dpkg-buildpackage: warning: Failed to sign .dsc and .changes fileDiese Nachricht können Sie ignorieren.
Jetzt gehen wir ein Verzeichnis nach oben, dort wurden die neuen .deb-Pakete erstellt:
cd ..Der Befehl
ls -lzeigt Ihnen die verfügbaren Pakete:
server1:/usr/src# ls -l
total 5880
drwxr-xr-x 19 root root 4096 2009-02-20 14:15 postfix-2.5.5
-rw-r--r-- 1 root src 236910 2009-02-20 14:12 postfix_2.5.5-1.1.diff.gz
-rw-r--r-- 1 root src 1178 2009-02-20 14:12 postfix_2.5.5-1.1.dsc
-rw-r--r-- 1 root src 3695 2009-02-20 14:17 postfix_2.5.5-1.1_i386.changes
-rw-r--r-- 1 root src 1233138 2009-02-20 14:17 postfix_2.5.5-1.1_i386.deb
-rw-r--r-- 1 root src 3157877 2008-09-02 23:18 postfix_2.5.5.orig.tar.gz
-rw-r--r-- 1 root src 58389 2008-09-06 05:02 postfix-2.5.5-vda-ng.patch
-rw-r--r-- 1 root src 41572 2009-02-20 14:17 postfix-cdb_2.5.5-1.1_i386.deb
-rw-r--r-- 1 root src 141394 2009-02-20 14:17 postfix-dev_2.5.5-1.1_all.deb
-rw-r--r-- 1 root src 915978 2009-02-20 14:17 postfix-doc_2.5.5-1.1_all.deb
-rw-r--r-- 1 root src 48934 2009-02-20 14:17 postfix-ldap_2.5.5-1.1_i386.deb
-rw-r--r-- 1 root src 43512 2009-02-20 14:17 postfix-mysql_2.5.5-1.1_i386.deb
-rw-r--r-- 1 root src 43448 2009-02-20 14:17 postfix-pcre_2.5.5-1.1_i386.deb
-rw-r--r-- 1 root src 43586 2009-02-20 14:17 postfix-pgsql_2.5.5-1.1_i386.deb
server1:/usr/src#Wählen Sie die Pakete postfix und postfix-mysql aus und installieren Sie sie wie folgt:
dpkg -i postfix_2.5.5-1.1_i386.deb postfix-mysql_2.5.5-1.1_i386.deb4 Erstellen Sie die MySQL-Datenbank für Postfix/Courier
Jetzt erstellen wir eine Datenbank namens mail:
mysqladmin -u root -p create mailAls nächstes gehen wir zur MySQL-Shell:
mysql -u root -pIn 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 von Postfix und Courier benötigten Tabellen:
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 bigint(20) 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 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.
| source | destination |
| [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).
| password | quota | |
| [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,
| domain | transport |
| example.com | smtp:[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 vollqualifizierten 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.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.