E-Mail-Server · 8 min read · Sep 27, 2025
Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (CentOS 5.3 x86_64)
Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (CentOS 5.3 x86_64)
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 von Postfix verwendet wird.
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” Einrichtung (virtuelle Benutzer und Domains in einer MySQL-Datenbank) ist, dass sie viel leistungsfähiger ist als eine Einrichtung, die auf “echten” Systembenutzern basiert. Mit dieser virtuellen Einrichtung 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 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, 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 einfacher zu verstehen und sich zu merken ist.
Dieses Howto soll als praktische Anleitung dienen; 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 Sie funktioniert!
1 Vorbemerkung
Dieses Tutorial basiert auf CentOS 5.3 x86_64, daher sollten Sie eine grundlegende CentOS 5.3-Serverinstallation einrichten, bevor Sie mit diesem Tutorial fortfahren (z.B. wie in den ersten sechs Kapiteln von The Perfect Server - CentOS 5.3 x86_64 gezeigt). 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.
Sie sollten sicherstellen, dass die Firewall deaktiviert ist (zumindest vorerst) und dass SELinux deaktiviert ist (das ist wichtig!).
Ich habe diese Einrichtung auf einem x86_64-System getestet. Die Einrichtung sollte ähnlich oder vielleicht sogar identisch für ein i386-System sein, aber ich habe es nicht getestet.
2 Installieren Sie einige Software
Zuerst aktualisieren wir unsere vorhandenen Pakete auf dem System:
yum updateJetzt installieren wir einige Software, die wir später benötigen:
yum groupinstall 'Entwicklungstools'yum groupinstall 'Entwicklungslibraries'3 Installieren Sie Apache, MySQL, phpMyAdmin
Zuerst aktivieren wir das RPMforge-Repository auf unserem CentOS-System, da viele der Pakete, die wir im Verlauf dieses Tutorials installieren werden, nicht in den offiziellen CentOS 5.3-Repositories verfügbar sind:
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.x86_64.rpmAnschließend können wir die benötigten Pakete mit einem einzigen Befehl installieren (einschließlich der Pakete, die wir zum Erstellen von Courier-IMAP benötigen):
yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel phpmyadmin pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers libtool gdbm-devel pam-devel gamin-devel4 Installieren Sie Courier-IMAP, Courier-Authlib und Maildrop
Leider gibt es keine rpm-Pakete für Courier-IMAP, Courier-Authlib und Maildrop, daher müssen wir sie selbst erstellen.
RPM-Pakete sollten nicht als root erstellt werden; courier-imap wird sogar die Kompilierung verweigern, wenn es erkennt, dass die Kompilierung als root-Benutzer durchgeführt wird. Daher erstellen wir jetzt ein normales Benutzerkonto (falko in diesem Beispiel) und geben ihm ein Passwort:
useradd -m -s /bin/bash falko
passwd falkoWir werden später den sudo-Befehl benötigen, damit der Benutzer falko die rpm-Pakete kompilieren und installieren kann. Aber zuerst müssen wir falko erlauben, alle Befehle mit sudo auszuführen:
Führen Sie aus
visudoIn der Datei, die sich öffnet, gibt es eine Zeile root ALL=(ALL) ALL. Fügen Sie eine ähnliche Zeile für falko direkt unter dieser Zeile hinzu:
| [...] ## Erlaube root, beliebige Befehle überall auszuführen root ALL=(ALL) ALL falko ALL=(ALL) ALL [...] |
Jetzt sind wir bereit, unser rpm-Paket zu erstellen. Zuerst werden Sie der Benutzer falko:
su falkoAls nächstes erstellen wir unsere Build-Umgebung:
mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/BUILDROOT
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386
mkdir $HOME/rpm/RPMS/x86_64echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacrosJetzt erstellen wir ein Download-Verzeichnis und laden die Quelldateien von http://www.courier-mta.org/download.php herunter:
mkdir $HOME/downloads
cd $HOME/downloadswget http://prdownloads.sourceforge.net/courier/courier-authlib-0.62.2.tar.bz2
wget http://prdownloads.sourceforge.net/courier/courier-imap-4.4.1.tar.bz2
wget http://prdownloads.sourceforge.net/courier/maildrop-2.0.4.tar.bz2Jetzt (immer noch in $HOME/downloads) können wir courier-authlib bauen:
sudo rpmbuild -ta courier-authlib-0.62.2.tar.bz2Nach dem Build-Prozess finden Sie die rpm-Pakete in $HOME/rpm/RPMS/x86_64 ($HOME/rpm/RPMS/i386, wenn Sie sich auf einem i386-System befinden):
cd $HOME/rpm/RPMS/x86_64Der Befehl
ls -lzeigt Ihnen die verfügbaren rpm-Pakete:
[falko@server1 x86_64]$ ls -l
total 608
-rw-r--r-- 1 root root 139732 Apr 20 15:25 courier-authlib-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 328468 Apr 20 15:25 courier-authlib-debuginfo-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 35327 Apr 20 15:25 courier-authlib-devel-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 18307 Apr 20 15:25 courier-authlib-ldap-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 14497 Apr 20 15:25 courier-authlib-mysql-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 13711 Apr 20 15:25 courier-authlib-pgsql-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 8361 Apr 20 15:25 courier-authlib-pipe-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 35285 Apr 20 15:25 courier-authlib-userdb-0.62.2-1.x86_64.rpm
[falko@server1 x86_64]$Wählen Sie die aus, die Sie installieren möchten, und installieren Sie sie wie folgt:
sudo rpm -ivh courier-authlib-0.62.2-1.x86_64.rpm
sudo rpm -ivh courier-authlib-devel-0.62.2-1.x86_64.rpm
sudo rpm -ivh courier-authlib-mysql-0.62.2-1.x86_64.rpmJetzt gehen wir zurück zu unserem Download-Verzeichnis:
cd $HOME/downloadsund führen rpmbuild erneut aus, diesmal ohne sudo, da die Kompilierung fehlschlägt, wenn sie als root ausgeführt wird:
rpmbuild -ta courier-imap-4.4.1.tar.bz2Nach dem Build-Prozess finden Sie die rpm-Pakete in $HOME/rpm/RPMS/x86_64 ($HOME/rpm/RPMS/i386, wenn Sie sich auf einem i386-System befinden):
cd $HOME/rpm/RPMS/x86_64Der Befehl
ls -lzeigt Ihnen die verfügbaren rpm-Pakete:
[falko@server1 x86_64]$ ls -l
total 1920
-rw-r--r-- 1 root root 139732 Apr 20 15:25 courier-authlib-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 328468 Apr 20 15:25 courier-authlib-debuginfo-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 35327 Apr 20 15:25 courier-authlib-devel-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 18307 Apr 20 15:25 courier-authlib-ldap-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 14497 Apr 20 15:25 courier-authlib-mysql-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 13711 Apr 20 15:25 courier-authlib-pgsql-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 8361 Apr 20 15:25 courier-authlib-pipe-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 35285 Apr 20 15:25 courier-authlib-userdb-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 falko falko 391473 Apr 20 15:37 courier-imap-4.4.1-1.x86_64.rpm
-rw-r--r-- 1 falko falko 939716 Apr 20 15:37 courier-imap-debuginfo-4.4.1-1.x86_64.rpm
[falko@server1 x86_64]$Sie können courier-imap wie folgt installieren:
sudo rpm -ivh courier-imap-4.4.1-1.x86_64.rpmJetzt gehen wir zurück zu unserem Download-Verzeichnis:
cd $HOME/downloadsund führen rpmbuild erneut aus, diesmal um ein Maildrop-Paket zu erstellen:
sudo rpmbuild -ta maildrop-2.0.4.tar.bz2Nach dem Build-Prozess finden Sie die rpm-Pakete in $HOME/rpm/RPMS/x86_64 ($HOME/rpm/RPMS/i386, wenn Sie sich auf einem i386-System befinden):
cd $HOME/rpm/RPMS/x86_64Der Befehl
ls -lzeigt Ihnen die verfügbaren rpm-Pakete:
[falko@server1 x86_64]$ ls -l
total 3172
-rw-r--r-- 1 root root 139732 Apr 20 15:25 courier-authlib-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 328468 Apr 20 15:25 courier-authlib-debuginfo-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 35327 Apr 20 15:25 courier-authlib-devel-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 18307 Apr 20 15:25 courier-authlib-ldap-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 14497 Apr 20 15:25 courier-authlib-mysql-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 13711 Apr 20 15:25 courier-authlib-pgsql-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 8361 Apr 20 15:25 courier-authlib-pipe-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 root root 35285 Apr 20 15:25 courier-authlib-userdb-0.62.2-1.x86_64.rpm
-rw-r--r-- 1 falko falko 391473 Apr 20 15:37 courier-imap-4.4.1-1.x86_64.rpm
-rw-r--r-- 1 falko falko 939716 Apr 20 15:37 courier-imap-debuginfo-4.4.1-1.x86_64.rpm
-rw-r--r-- 1 root root 298373 Apr 20 15:47 maildrop-2.0.4-1.x86_64.rpm
-rw-r--r-- 1 root root 767039 Apr 20 15:47 maildrop-debuginfo-2.0.4-1.x86_64.rpm
-rw-r--r-- 1 root root 134030 Apr 20 15:47 maildrop-devel-2.0.4-1.x86_64.rpm
-rw-r--r-- 1 root root 58400 Apr 20 15:47 maildrop-man-2.0.4-1.x86_64.rpm
[falko@server1 x86_64]$Sie können jetzt maildrop wie folgt installieren:
sudo rpm -ivh maildrop-2.0.4-1.x86_64.rpmNachdem Sie alle benötigten Pakete kompiliert und installiert haben, können Sie wieder root werden, indem Sie
exit5 Wenden Sie den Quota-Patch auf Postfix an
Wir müssen das Postfix-Quell-rpm abrufen, es mit dem Quota-Patch patchen, ein neues Postfix-rpm-Paket erstellen und es installieren.
cd /usr/src
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/centos/5.3/os/SRPMS/postfix-2.3.3-2.1.el5_2.src.rpm
rpm -ivh postfix-2.3.3-2.1.el5_2.src.rpmDer letzte Befehl zeigt einige Warnungen an, die Sie ignorieren können:
warnung: Benutzer mockbuild existiert nicht - verwende root
warnung: Gruppe mockbuild existiert nicht - verwende rootcd /usr/src/redhat/SOURCES
wget http://vda.sourceforge.net/VDA/postfix-2.3.3-vda.patch.gz
gunzip postfix-2.3.3-vda.patch.gz
cd /usr/src/redhat/SPECS/Jetzt müssen wir die Datei postfix.spec bearbeiten:
vi postfix.specÄndern Sie %define MYSQL 0 in %define MYSQL 1, fügen Sie Patch0: postfix-2.3.3-vda.patch zur # Patches-Stanza hinzu und fügen Sie schließlich %patch0 -p1 -b .vda zur %setup -q-Stanza hinzu:
| [...] %define MYSQL 1 [...] # Patches Patch0: postfix-2.3.3-vda.patch Patch1: postfix-2.1.1-config.patch Patch3: postfix-alternatives.patch Patch6: postfix-2.1.1-obsolete.patch Patch7: postfix-2.1.5-aliases.patch Patch8: postfix-large-fs.patch Patch9: postfix-2.2.5-cyrus.patch Patch10: postfix-CVE-2008-2936.patch [...] %setup -q # Wenden Sie obligatorische Patches an %patch0 -p1 -b .vda %patch1 -p1 -b .config %patch3 -p1 -b .alternatives %patch6 -p1 -b .obsolete %patch7 -p1 -b .aliases %patch8 -p1 -b .large-fs %patch9 -p1 -b .cyrus %patch10 -p1 -b .CVE-2008-2936 [...] |
Dann bauen wir unser neues Postfix-rpm-Paket mit Quota- und MySQL-Unterstützung:
rpmbuild -ba postfix.specUnser Postfix-rpm-Paket wird in /usr/src/redhat/RPMS/x86_64 erstellt ( /usr/src/redhat/RPMS/i386 auf einem i386-System), also gehen wir dorthin:
cd /usr/src/redhat/RPMS/x86_64Der Befehl
ls -lzeigt Ihnen die verfügbaren Pakete:
[root@server1 x86_64]# ls -l
total 11732
-rw-r--r-- 1 root root 3940163 Apr 20 15:58 postfix-2.3.3-2.1.x86_64.rpm
-rw-r--r-- 1 root root 7999370 Apr 20 15:59 postfix-debuginfo-2.3.3-2.1.x86_64.rpm
-rw-r--r-- 1 root root 49761 Apr 20 15:58 postfix-pflogsumm-2.3.3-2.1.x86_64.rpm
[root@server1 x86_64]#Wählen Sie das Postfix-Paket aus und installieren Sie es wie folgt:
rpm -ivh postfix-2.3.3-2.1.x86_64.rpmErhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.