E-Mail-Server · 8 min read · Nov 10, 2025
Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (CentOS 6.2 x86_64)
Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (CentOS 6.2 x86_64)
Version 1.0
Autor: Falko Timme
Folge mir auf Twitter
Dieses Tutorial ist Copyright (c) 2012 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. 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 man Postfix entsprechend patcht). Passwörter werden in verschlüsselter Form in der Datenbank gespeichert (die meisten Dokumente, die ich gefunden habe, befassten sich mit Klartext-Passwö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. 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 weitaus leistungsfähiger ist als eine Einrichtung, die auf “echten” Systembenutzern basiert. Mit dieser virtuellen Einrichtung kann dein Mailserver Tausende von Domains und Benutzern verwalten. Außerdem ist es einfacher zu verwalten, da du nur mit der MySQL-Datenbank zu tun hast, 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, 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 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 CentOS 6.2 x86_64, daher solltest du eine grundlegende CentOS 6.2-Serverinstallation einrichten, bevor du mit diesem Tutorial fortfährst (z.B. wie in den ersten sechs Kapiteln von The Perfect Server - CentOS 6.2 x86_64 mit Apache2 [ISPConfig 3] 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 Hostnamen.
Du solltest sicherstellen, dass die Firewall deaktiviert ist (zumindest vorerst) und dass SELinux deaktiviert ist (das ist wichtig!).
2 Zusätzliche Repositories aktivieren und Software installieren
Zuerst importieren wir die GPG-Schlüssel für Softwarepakete:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*Dann aktivieren wir die RPMforge- und EPEL-Repositories auf unserem CentOS-System, da viele der Pakete, die wir im Verlauf dieses Tutorials installieren werden, nicht in den offiziellen CentOS 6.2-Repositories verfügbar sind:
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txtcd /tmp
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm(Wenn der obige Link nicht mehr funktioniert, kannst du die aktuelle Version von rpmforge-release hier finden: http://packages.sw.be/rpmforge-release/)
rpm --import https://fedoraproject.org/static/0608B895.txt
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm
rpm -ivh epel-release-6-5.noarch.rpmyum install yum-prioritiesBearbeite /etc/yum.repos.d/epel.repo…
vi /etc/yum.repos.d/epel.repo… und füge die Zeile priority=10 zum [epel]-Abschnitt hinzu:
| [epel] name=Extra Packages for Enterprise Linux 6 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch failovermethod=priority enabled=1 priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 [...] |
Dann aktualisieren wir unsere vorhandenen Pakete auf dem System:
yum updateJetzt installieren wir einige Software, die wir später benötigen:
yum groupinstall 'Development Tools'3 Apache, MySQL, phpMyAdmin installieren
Das kann alles mit einem einzigen Befehl installiert werden (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-devel libidn-devel db4-devel mod_ssl telnet4 Courier-IMAP, Courier-Authlib und Maildrop installieren
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 ausgefü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ühre aus
visudoIn der Datei, die sich öffnet, gibt es eine Zeile root ALL=(ALL) ALL. Füge eine ähnliche Zeile für falko direkt unter dieser Zeile hinzu:
| [...] ## Allow root to run any commands anywhere root ALL=(ALL) ALL falko ALL=(ALL) ALL [...] |
Jetzt sind wir bereit, unser rpm-Paket zu erstellen. Zuerst werde 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 https://sourceforge.net/projects/courier/files/authlib/0.63.0/courier-authlib-0.63.0.tar.bz2/download
wget https://sourceforge.net/projects/courier/files/imap/4.9.3/courier-imap-4.9.3.tar.bz2/download
wget https://sourceforge.net/projects/courier/files/maildrop/2.5.5/maildrop-2.5.5.tar.bz2/download(Bitte beachte, dass ich hier Courier-IMAP 4.9.3 anstelle des neueren 4.10.0 verwende, da 4.10.0 von systemctl abhängt, das für Fedora existiert, aber nicht für CentOS.)
Jetzt (immer noch in $HOME/downloads) können wir courier-authlib bauen:
sudo rpmbuild -ta courier-authlib-0.63.0.tar.bz2Nach dem Build-Prozess können die rpm-Pakete in /root/rpmbuild/RPMS/x86_64 ( /root/rpmbuild/RPMS/i386, wenn du ein i386-System verwendest) gefunden werden. Der Befehl
sudo ls -l /root/rpmbuild/RPMS/x86_64zeigt dir die verfügbaren rpm-Pakete:
[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64
total 528
-rw-r--r-- 1 root root 124032 Jan 26 17:09 courier-authlib-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 270900 Jan 26 17:09 courier-authlib-debuginfo-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 35068 Jan 26 17:09 courier-authlib-devel-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 17372 Jan 26 17:09 courier-authlib-ldap-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 13928 Jan 26 17:09 courier-authlib-mysql-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 13080 Jan 26 17:09 courier-authlib-pgsql-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 8316 Jan 26 17:09 courier-authlib-pipe-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 34068 Jan 26 17:09 courier-authlib-userdb-0.63.0-1.el6.x86_64.rpm
[falko@server1 downloads]$Wähle die aus, die du installieren möchtest, und installiere sie so:
sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/courier-authlib-0.63.0-1.el6.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-mysql-0.63.0-1.el6.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-devel-0.63.0-1.el6.x86_64.rpmJetzt gehen wir zurück in unser Download-Verzeichnis:
cd $HOME/downloadsFühre die folgenden Befehle aus, um erforderliche Verzeichnisse zu erstellen/Verzeichnisberechtigungen zu ändern (da sonst der Build-Prozess für Courier-Imap fehlschlägt):
sudo mkdir -p /var/cache/ccache/tmp
sudo chmod o+rwx /var/cache/ccache/
sudo chmod 777 /var/cache/ccache/tmpJetzt führe rpmbuild erneut aus, diesmal ohne sudo, da die Kompilierung fehlschlägt, wenn sie als root ausgeführt wird:
rpmbuild -ta courier-imap-4.9.3.tar.bz2Nach dem Build-Prozess können die rpm-Pakete in $HOME/rpm/RPMS/x86_64 ( $HOME/rpm/RPMS/i386, wenn du ein i386-System verwendest) gefunden werden:
cd $HOME/rpm/RPMS/x86_64Der Befehl
ls -lzeigt dir die verfügbaren rpm-Pakete:
[falko@server1 x86_64]$ ls -l
total 1088
-rw-r--r-- 1 falko falko 333540 Jan 26 17:27 courier-imap-4.9.3-1.x86_64.rpm
-rw-r--r-- 1 falko falko 776100 Jan 26 17:27 courier-imap-debuginfo-4.9.3-1.x86_64.rpm
[falko@server1 x86_64]$ Du kannst courier-imap so installieren:
sudo rpm -ivh courier-imap-4.9.3-1.x86_64.rpmJetzt gehen wir zurück in unser Download-Verzeichnis:
cd $HOME/downloadsund führe rpmbuild erneut aus, diesmal um ein Maildrop-Paket zu erstellen:
sudo rpmbuild -ta maildrop-2.5.5.tar.bz2Nach dem Build-Prozess können die rpm-Pakete in /root/rpmbuild/RPMS/x86_64 ( /root/rpmbuild/RPMS/i386, wenn du ein i386-System verwendest) gefunden werden. Der Befehl
sudo ls -l /root/rpmbuild/RPMS/x86_64zeigt dir die verfügbaren rpm-Pakete:
[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64
total 1712
-rw-r--r-- 1 root root 124032 Jan 26 17:09 courier-authlib-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 270900 Jan 26 17:09 courier-authlib-debuginfo-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 35068 Jan 26 17:09 courier-authlib-devel-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 17372 Jan 26 17:09 courier-authlib-ldap-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 13928 Jan 26 17:09 courier-authlib-mysql-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 13080 Jan 26 17:09 courier-authlib-pgsql-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 8316 Jan 26 17:09 courier-authlib-pipe-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 34068 Jan 26 17:09 courier-authlib-userdb-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 286480 Jan 26 17:32 maildrop-2.5.5-1.x86_64.rpm
-rw-r--r-- 1 root root 751348 Jan 26 17:32 maildrop-debuginfo-2.5.5-1.x86_64.rpm
-rw-r--r-- 1 root root 102108 Jan 26 17:32 maildrop-devel-2.5.5-1.x86_64.rpm
-rw-r--r-- 1 root root 65940 Jan 26 17:32 maildrop-man-2.5.5-1.x86_64.rpm
[falko@server1 downloads]$Du kannst jetzt maildrop so installieren:
sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/maildrop-2.5.5-1.x86_64.rpmNachdem du alle benötigten Pakete kompiliert und installiert hast, kannst du wieder root werden, indem du tippst
exit5 Quota-Patch auf Postfix anwenden
Wir müssen das Postfix-Quell-rpm holen, es mit dem Quota-Patch patchen, ein neues Postfix-rpm-Paket erstellen und es installieren.
cd /usr/src
wget http://vault.centos.org/6.2/os/Source/SPackages/postfix-2.6.6-2.2.el6_1.src.rpm
rpm -ivh postfix-2.6.6-2.2.el6_1.src.rpmDer letzte Befehl zeigt einige Warnungen an, die du ignorieren kannst:
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using rootcd /root/rpmbuild/SOURCES
wget http://vda.sourceforge.net/VDA/postfix-2.6.5-vda-ng.patch.gz
gunzip postfix-2.6.5-vda-ng.patch.gz
cd /root/rpmbuild/SPECS/Jetzt müssen wir die Datei postfix.spec bearbeiten:
vi postfix.specFüge Patch0: postfix-2.6.5-vda-ng.patch zur # Patches-Stanza hinzu und %patch0 -p1 -b .vda-ng zur %setup -q-Stanza:
| [...] # Patches Patch0: postfix-2.6.5-vda-ng.patch Patch1: postfix-2.6.1-config.patch Patch2: postfix-2.6.1-files.patch Patch3: postfix-alternatives.patch Patch8: postfix-large-fs.patch Patch9: pflogsumm-1.1.1-datecalc.patch Patch10: postfix-2.6.6-CVE-2011-0411.patch Patch11: postfix-2.6.6-CVE-2011-1720.patch [...] %prep %setup -q # Apply obligatory patches %patch0 -p1 -b .vda-ng %patch1 -p1 -b .config %patch2 -p1 -b .files %patch3 -p1 -b .alternatives %patch8 -p1 -b .large-fs [...] |
Dann bauen wir unser neues Postfix-rpm-Paket mit Quota- und MySQL-Unterstützung:
rpmbuild -ba postfix.specUnser Postfix-rpm-Paket wird in /root/rpmbuild/RPMS/x86_64 ( /root/rpmbuild/RPMS/i386, wenn du ein i386-System verwendest) erstellt, also gehen wir dorthin:
cd /root/rpmbuild/RPMS/x86_64Der Befehl
ls -lzeigt dir die verfügbaren Pakete:
[root@server1 x86_64]# ls -l
total 10728
-rw-r--r-- 1 root root 124032 Jan 26 17:09 courier-authlib-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 270900 Jan 26 17:09 courier-authlib-debuginfo-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 35068 Jan 26 17:09 courier-authlib-devel-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 17372 Jan 26 17:09 courier-authlib-ldap-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 13928 Jan 26 17:09 courier-authlib-mysql-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 13080 Jan 26 17:09 courier-authlib-pgsql-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 8316 Jan 26 17:09 courier-authlib-pipe-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 34068 Jan 26 17:09 courier-authlib-userdb-0.63.0-1.el6.x86_64.rpm
-rw-r--r-- 1 root root 286480 Jan 26 17:32 maildrop-2.5.5-1.x86_64.rpm
-rw-r--r-- 1 root root 751348 Jan 26 17:32 maildrop-debuginfo-2.5.5-1.x86_64.rpm
-rw-r--r-- 1 root root 102108 Jan 26 17:32 maildrop-devel-2.5.5-1.x86_64.rpm
-rw-r--r-- 1 root root 65940 Jan 26 17:32 maildrop-man-2.5.5-1.x86_64.rpm
[root@server1 x86_64]#Um sicherzustellen, dass keine Version von Postfix zuvor auf deinem System installiert war, verwende:
yum remove postfixWähle das Postfix-Paket aus und installiere es so:
rpm -ivh postfix-2.6.6-2.2.el6.x86_64.rpmErhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.