E-Mail-Server · 8 min read · Oct 14, 2025

Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (Fedora 17 x86_64)

Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (Fedora 17 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, damit Courier gegen die gleiche 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). Zusätzlich behandelt dieses Tutorial die Installation von Amavisd, SpamAssassin und ClamAV, damit 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 weitaus 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 zu tun hast, wenn du neue Benutzer/Domains hinzufügst oder bestehende bearbeitest. Keine weiteren postmap-Befehle zur Erstellung 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 leichter 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 funktionieren wird!

1 Vorbemerkung

Dieses Tutorial basiert auf Fedora 17 x86_64, daher solltest du eine grundlegende Fedora 17 Serverinstallation einrichten, bevor du mit diesem Tutorial fortfährst. 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.

Du solltest sicherstellen, dass die Firewall deaktiviert ist (zumindest vorerst).

Stelle auch sicher, dass SELinux deaktiviert ist:

Bearbeite /etc/selinux/config und setze SELINUX=disabled:

vi /etc/selinux/config

| # Diese Datei steuert den Zustand von SELinux im System. # SELINUX= kann einen dieser drei Werte annehmen: # enforcing - SELinux-Sicherheitsrichtlinie wird durchgesetzt. # permissive - SELinux gibt Warnungen aus, anstatt sie durchzusetzen. # disabled - Es wird keine SELinux-Richtlinie geladen. SELINUX=disabled # SELINUXTYPE= kann einen dieser beiden Werte annehmen: # targeted - Zielprozesse sind geschützt, # minimum - Modifikation der gezielten Richtlinie. Nur ausgewählte Prozesse sind geschützt. # mls - Multi Level Security Schutz. SELINUXTYPE=targeted |

Anschließend müssen wir das System neu starten:

reboot

2 Installiere einige Software

Zuerst aktualisieren wir unsere vorhandenen Pakete auf dem System:

yum update

Jetzt installieren wir einige Software, die wir später benötigen:

yum groupinstall 'Entwicklungstools'
yum groupinstall 'Entwicklungslibraries'

3 Installiere Apache, MySQL, phpMyAdmin

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

4 Installiere 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 falko

Wir 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

visudo

In 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:

| [...] ## 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 werde der Benutzer falko:

su falko

Als 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_64
echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros

Jetzt erstellen wir ein Download-Verzeichnis und laden die Quelldateien von http://www.courier-mta.org/download.php herunter:

mkdir $HOME/downloads  
cd $HOME/downloads
wget https://sourceforge.net/projects/courier/files/authlib/0.64.0/courier-authlib-0.64.0.tar.bz2  
wget https://sourceforge.net/projects/courier/files/imap/4.9.3/courier-imap-4.9.3.tar.bz2  
wget https://sourceforge.net/projects/courier/files/maildrop/2.5.5/maildrop-2.5.5.tar.bz2

(Stelle sicher, dass du courier-imap-4.9.3.tar.bz2 und nicht das neuere courier-imap-4.10.0.tar.bz2 herunterlädst - der Versuch, courier-imap-4.10.0.tar.bz2 zu erstellen, hat mein System reproduzierbar zum Stillstand gebracht.)

Jetzt (immer noch in $HOME/downloads) können wir courier-authlib erstellen:

sudo rpmbuild -ta courier-authlib-0.64.0.tar.bz2

Nach dem Build-Prozess können die rpm-Pakete in /root/rpmbuild/RPMS/x86_64 ( /root/rpmbuild/RPMS/i386, wenn du auf einem i386-System bist) gefunden werden. Der Befehl

sudo ls -l /root/rpmbuild/RPMS/x86_64

zeigt dir die verfügbaren rpm-Pakete:

[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64  
total 580  
-rw-r--r-- 1 root root 127673 Jun 11 17:29 courier-authlib-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root 315769 Jun 11 17:29 courier-authlib-debuginfo-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  37937 Jun 11 17:29 courier-authlib-devel-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  17657 Jun 11 17:29 courier-authlib-ldap-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  13865 Jun 11 17:29 courier-authlib-mysql-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  13101 Jun 11 17:29 courier-authlib-pgsql-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   8421 Jun 11 17:29 courier-authlib-pipe-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  34917 Jun 11 17:29 courier-authlib-userdb-0.64.0-1.fc17.x86_64.rpm  
[falko@server1 downloads]$

Wähle die aus, die du installieren möchtest, und installiere sie wie folgt:

sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/courier-authlib-0.64.0-1.fc17.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-mysql-0.64.0-1.fc17.x86_64.rpm /root/rpmbuild/RPMS/x86_64/courier-authlib-devel-0.64.0-1.fc17.x86_64.rpm

Jetzt gehen wir zurück in unser Download-Verzeichnis:

cd $HOME/downloads

Führe die folgenden Befehle aus, um erforderliche Verzeichnisse zu erstellen/Verzeichnisberechtigungen zu ändern (denn andernfalls schlägt der Build-Prozess für Courier-Imap fehl):

sudo mkdir /var/cache/ccache/tmp  
sudo chmod o+rwx /var/cache/ccache/  
sudo chmod 777 /var/cache/ccache/tmp

Jetzt 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.bz2

Nach dem Build-Prozess können die rpm-Pakete in $HOME/rpm/RPMS/x86_64 ( $HOME/rpm/RPMS/i386, wenn du auf einem i386-System bist) gefunden werden:

cd $HOME/rpm/RPMS/x86_64

Der Befehl

ls -l

zeigt dir die verfügbaren rpm-Pakete:

[falko@server1 x86_64]$ ls -l  
total 1248  
-rw-rw-r-- 1 falko falko 318293 Jun 11 18:28 courier-imap-4.9.3-1.17.x86_64.rpm  
-rw-rw-r-- 1 falko falko 957697 Jun 11 18:28 courier-imap-debuginfo-4.9.3-1.17.x86_64.rpm  
[falko@server1 x86_64]$

Du kannst courier-imap wie folgt installieren:

sudo rpm -ivh courier-imap-4.9.3-1.17.x86_64.rpm

Jetzt gehen wir zurück in unser Download-Verzeichnis:

cd $HOME/downloads

und führen rpmbuild erneut aus, diesmal um ein Maildrop-Paket zu erstellen:

sudo rpmbuild -ta maildrop-2.5.5.tar.bz2

Nach dem Build-Prozess können die rpm-Pakete in /root/rpmbuild/RPMS/x86_64 ( /root/rpmbuild/RPMS/i386, wenn du auf einem i386-System bist) gefunden werden. Der Befehl

sudo ls -l /root/rpmbuild/RPMS/x86_64

zeigt dir die verfügbaren rpm-Pakete:

[falko@server1 downloads]$ sudo ls -l /root/rpmbuild/RPMS/x86_64  
total 1844  
-rw-r--r-- 1 root root 127673 Jun 11 17:29 courier-authlib-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root 315769 Jun 11 17:29 courier-authlib-debuginfo-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  37937 Jun 11 17:29 courier-authlib-devel-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  17657 Jun 11 17:29 courier-authlib-ldap-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  13865 Jun 11 17:29 courier-authlib-mysql-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  13101 Jun 11 17:29 courier-authlib-pgsql-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   8421 Jun 11 17:29 courier-authlib-pipe-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  34917 Jun 11 17:29 courier-authlib-userdb-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root 285877 Jun 11 18:42 maildrop-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root 829453 Jun 11 18:42 maildrop-debuginfo-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root 102417 Jun 11 18:42 maildrop-devel-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root  66177 Jun 11 18:42 maildrop-man-2.5.5-1.17.x86_64.rpm  
[falko@server1 downloads]$

Du kannst jetzt maildrop wie folgt installieren:

sudo rpm -ivh /root/rpmbuild/RPMS/x86_64/maildrop-2.5.5-1.17.x86_64.rpm

Nachdem du alle benötigten Pakete kompiliert und installiert hast, kannst du wieder root werden, indem du tippst

exit

5 Wende den Quota-Patch auf Postfix an

Wir müssen das Postfix-Quell-rpm herunterladen, 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/fedora/linux/releases/17/Everything/source/SRPMS/p/postfix-2.9.2-2.fc17.src.rpm  
rpm -ivh postfix-2.9.2-2.fc17.src.rpm

Der letzte Befehl zeigt einige Warnungen an, die du ignorieren kannst:

warnung: Benutzer mockbuild existiert nicht - verwende root  
warnung: Gruppe mockbuild existiert nicht - verwende root
cd /root/rpmbuild/SOURCES  
wget http://vda.sourceforge.net/VDA/postfix-vda-v11-2.9.1.patch  
cd /root/rpmbuild/SPECS/

Jetzt müssen wir die Datei postfix.spec bearbeiten:

vi postfix.spec

Füge Patch0: postfix-vda-v11-2.9.1.patch zur # Patches-Strophe hinzu und %patch0 -p1 -b .vda-v11 zur %setup -q-Strophe:

| [...] # Patches Patch0: postfix-vda-v11-2.9.1.patch Patch1: postfix-2.7.0-config.patch Patch2: postfix-2.6.1-files.patch Patch3: postfix-alternatives.patch Patch8: postfix-large-fs.patch Patch9: pflogsumm-1.1.3-datecalc.patch [...] %prep %setup -q # Wende obligatorische Patches an %patch0 -p1 -b .vda-v11 %patch1 -p1 -b .config %patch2 -p1 -b .files %patch3 -p1 -b .alternatives %patch8 -p1 -b .large-fs [...] |

Bevor wir das neue Postfix-Paket erstellen, müssen wir seine Abhängigkeit libdb-devel installieren - und da libdb-devel mit db4-devel in Konflikt steht, müssen wir dieses Paket zuerst entfernen:

yum remove db4-devel
yum install libdb-devel

Dann bauen wir unser neues Postfix-rpm-Paket mit Quota- und MySQL-Unterstützung:

rpmbuild -ba postfix.spec

Unser Postfix-rpm-Paket wird in /root/rpmbuild/RPMS/x86_64 ( /root/rpmbuild/RPMS/i386, wenn du auf einem i386-System bist) erstellt, also gehen wir dorthin:

cd /root/rpmbuild/RPMS/x86_64

Der Befehl

ls -l

zeigt dir die verfügbaren Pakete:

[root@server1 x86_64]# ls -l  
total 10312  
-rw-r--r-- 1 root root  127673 Jun 11 17:29 courier-authlib-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  315769 Jun 11 17:29 courier-authlib-debuginfo-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   37937 Jun 11 17:29 courier-authlib-devel-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   17657 Jun 11 17:29 courier-authlib-ldap-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   13865 Jun 11 17:29 courier-authlib-mysql-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   13101 Jun 11 17:29 courier-authlib-pgsql-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root    8421 Jun 11 17:29 courier-authlib-pipe-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   34917 Jun 11 17:29 courier-authlib-userdb-0.64.0-1.fc17.x86_64.rpm  
-rw-r--r-- 1 root root  285877 Jun 11 18:42 maildrop-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root  829453 Jun 11 18:42 maildrop-debuginfo-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root  102417 Jun 11 18:42 maildrop-devel-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root   66177 Jun 11 18:42 maildrop-man-2.5.5-1.17.x86_64.rpm  
-rw-r--r-- 1 root root 2291437 Jun 11 19:04 postfix-2.9.2-2.fc17.x86_64.rpm  
-rw-r--r-- 1 root root 6308357 Jun 11 19:04 postfix-debuginfo-2.9.2-2.fc17.x86_64.rpm  
-rw-r--r-- 1 root root   65393 Jun 11 19:04 postfix-perl-scripts-2.9.2-2.fc17.x86_64.rpm  
[root@server1 x86_64]#

Wähle das Postfix-Paket aus und installiere es wie folgt:

rpm -ivh postfix-2.9.2-2.fc17.x86_64.rpm
Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.