Mail Server · 7 min read · Jan 26, 2026
Virtuelle Benutzer und Domains mit Postfix, Courier, MySQL und SquirrelMail (Ubuntu 14.04LTS)
Dieses Tutorial ist urheberrechtlich geschützt (c) 2014 von Falko Timme & Srijan Kishore. 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. 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 einer solchen “virtuellen” Einrichtung (virtuelle Benutzer und Domains in einer MySQL-Datenbank) ist, dass sie viel leistungsfähiger ist als eine Einrichtung, die auf “realen” Systembenutzern basiert. Mit dieser virtuellen Einrichtung 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, 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 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 Ubuntu 14.04 Server (Trusty Tahr), daher sollten Sie eine grundlegende Ubuntu 14.04 Serverinstallation einrichten, bevor Sie mit diesem Tutorial fortfahren. 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.
Stellen Sie sicher, dass Sie als root angemeldet sind (geben Sie ein
sudo su
um root zu werden), da wir alle Schritte aus diesem Tutorial als Root-Benutzer ausführen müssen.
Es ist sehr wichtig, dass Sie /bin/sh als Symlink zu /bin/bash machen…
dpkg-reconfigure dash
Verwenden Sie dash als Standard-System-Shell (/bin/sh)? <– Nein
… und dass Sie AppArmor deaktivieren, wenn Sie die Meldung apparmor: unrecognized service erhalten, entfernen Sie es aus update-rc.d
service apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils
2 Installieren von 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
Sie werden einige 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
Webserver automatisch neu konfigurieren: <– apache2
Datenbank für phpmyadmin mit dbconfig-common konfigurieren? <– Nein
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 postfix
Manchmal können Sie einen Fehler wie folgt erhalten:-
root@server1:~# apt-get build-dep postfix
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut
Statusinformationen werden eingelesen… Fertig
E: Sie müssen einige ‘source’-URIs in Ihrer sources.list einfügen
root@server1:~#
Sie können dies wie folgt korrigieren, indem Sie die Quell-Repositorys hinzufügen:
vi /etc/apt/sources.list
Fügen Sie den Eintrag wie in meinem Fall hinzu
deb http://archive.ubuntu.com/ubuntu trusty main restricted universe
deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe
deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb http://archive.canonical.com/ubuntu trusty partner
deb-src http://archive.ubuntu.com/ubuntu trusty main restricted universe
deb-src http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe
deb-src http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb-src http://archive.canonical.com/ubuntu trusty partner
Als nächstes
apt-get update
apt-get build-dep postfix
cd /usr/src
apt-get source postfix
(Stellen Sie sicher, dass Sie die richtige Postfix-Version in den folgenden Befehlen verwenden. Ich habe Postfix 2.11.0 installiert. Sie können Ihre Postfix-Version herausfinden, indem Sie ausführen
postconf -d | grep mail_version
Die Ausgabe sollte wie folgt aussehen:
root@server1:/usr/src# postconf -d | grep mail_version
mail_version = 2.11.0
milter_macro_v = $mail_name $mail_version
root@server1:/usr/src#
wget http://vda.sourceforge.net/VDA/postfix-vda-v13-2.10.0.patch
cd postfix-2.11.0
patch -p1 < ../postfix-vda-v13-2.10.0.patch
Öffnen Sie als nächstes debian/rules und ändern Sie DEB_BUILD_HARDENING von 1 auf 0:
vi debian/rules
| [...] export DEB_BUILD_HARDENING=0 [...] | |
Wenn Sie dies nicht tun, schlägt Ihr Build mit den folgenden Fehlermeldungen fehl:
maildir.c: In Funktion âdeliver_maildirâ:
maildir.c:974:17: Fehler: Format ist kein Stringliteral und keine Formatargumente [-Werror=format-security]
maildir.c:977:17: Fehler: Format ist kein Stringliteral und keine Formatargumente [-Werror=format-security]
maildir.c:983:17: Fehler: Format ist kein Stringliteral und keine Formatargumente [-Werror=format-security]
maildir.c:986:17: Fehler: Format ist kein Stringliteral und keine Formatargumente [-Werror=format-security]
maildir.c: In Funktion âsql2fileâ:
maildir.c:404:25: Warnung: Rückgabewert von âreadâ, deklariert mit Attribut warn_unused_result, wird ignoriert [-Wunused-result]
maildir.c:417:26: Warnung: Rückgabewert von âwriteâ, deklariert mit Attribut warn_unused_result, wird ignoriert
cc1: Einige Warnungen werden als Fehler behandelt
make: [maildir.o] Fehler 1
make: Verlasse das Verzeichnis `/usr/src/postfix-2.11.0/src/virtual’
make[1]: [update] Fehler 1
make[1]: Verlasse das Verzeichnis `/usr/src/postfix-2.11.0’
make: * [build] Fehler 2
dpkg-buildpackage: Fehler: debian/rules build gab den Fehlerstatus 2 zurück
root@server1:/usr/src/postfix-2.11.0#
Jetzt können wir die neuen Postfix.deb-Pakete erstellen:
dpkg-buildpackage
Jetzt gehen wir ein Verzeichnis nach oben, dort wurden die neuen .deb-Pakete erstellt:
cd ..
Der Befehl
ls -l
zeigt Ihnen die verfügbaren Pakete:
root@server1:/usr/src# ls -l
total 6824
drwxr-xr-x 18 root root 4096 Apr 30 04:28 postfix-2.11.0
-rw-r–r– 1 root root 46756 Apr 30 04:28 postfix-cdb_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 142842 Apr 30 04:28 postfix-dev_2.11.0-1_all.deb
-rw-r–r– 1 root root 851842 Apr 30 04:28 postfix-doc_2.11.0-1_all.deb
-rw-r–r– 1 root root 53898 Apr 30 04:28 postfix-ldap_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 48500 Apr 30 04:28 postfix-mysql_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 48610 Apr 30 04:28 postfix-pcre_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 48324 Apr 30 04:28 postfix-pgsql_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 55701 Jun 7 2013 postfix-vda-v13-2.10.0.patch
-rw-r–r– 1 root root 267855 Apr 30 04:27 postfix_2.11.0-1.diff.gz
-rw-r–r– 1 root root 1522 Apr 30 04:27 postfix_2.11.0-1.dsc
-rw-r–r– 1 root root 3885 Apr 30 04:28 postfix_2.11.0-1_amd64.changes
-rw-r–r– 1 root root 1329238 Apr 30 04:28 postfix_2.11.0-1_amd64.deb
-rw-r–r– 1 root root 4034741 Feb 12 01:38 postfix_2.11.0.orig.tar.gz
root@server1:/usr/src#
Wählen Sie die Pakete postfix und postfix-mysql aus und installieren Sie sie wie folgt:
dpkg -i postfix_2.11.0-1_amd64.deb postfix-mysql_2.11.0-1_amd64.deb
4 Erstellen Sie die MySQL-Datenbank für Postfix/Courier
Jetzt erstellen wir eine Datenbank namens mail:
mysqladmin -u root -p create mail
Sie werden nach dieser Frage gefragt:
Passwort eingeben: <– yourrootsqlpassword
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 (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 Tabellen, die von Postfix und Courier benötigt werden:
USE mail;
CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
ENGINE=MyISAM;
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
ENGINE=MyISAM;
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT ‘10485760’,
PRIMARY KEY (email)
) ENGINE=MyISAM;
CREATE TABLE transport (
domain varchar(128) NOT NULL default ‘’,
transport varchar(128) NOT NULL default ‘’,
UNIQUE KEY domain (domain)
) ENGINE=MyISAM;
quit;
Wie Sie vielleicht bemerkt haben, 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 zu aliasieren, 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 bedeutet).
| password | quota | |
| [email protected] | No9.E4skNvGa. (“secret” in verschlüsselter Form) | 10485760 |
Die transport-Tabelle ist optional, sie ist für fortgeschrittene Benutzer. 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 vollständig qualifizierten 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.