Virtuelle Benutzer und Domains mit Postfix, Courier und MySQL (Mandriva 2008.0)

Version 1.0
Author: Falko Timme


Diese Anleitung ist urheberrechtlich geschützt (Copyright (c) 2008 by Falko Timme). Sie stammt von einer Anleitung von Christoph Haas, die Du auf folgender Seite finden kannst http://workaround.org. Du kannst diese Anleitung unter der Creative Commons License 2.5 oder jeder anderen späteren Version verwenden.
Diese Anleitung beschreibt wie man einen Postfix Mail Server installiert, der auf virtuellen Benutzern und Domains basiert, das heißt Benutzer und Domains, die in einer MySQL Datenbank sind. Weiterhin werde ich die Installation und Konfiguration von Courier (Courier-POP3, Courier-IMAP) veranschaulichen, damit sich Courier gegenüber der gleichen MySQL Datenbank, die Postfix verwendet, autentifizieren kann.

Der daraus resultierende Postfix Server ist geeignet für SMTP-AUTH und TLS sowie quota (quota ist nicht standardmäßig in Postfix enthalten, ich werde aufzeigen, wie man Postfix sachgerecht patcht). Passwörter werden in den Datenbanken verschlüsselt abgelegt (die meisten Dokumente, die ich gefunden habe, haben sich mit einfachen Text-Passwörtern befasst, was ziemlich riskant ist). Weiterhin deckt diese Anleitung auch die Installation von Amavisd, SpamAssassin und ClamAV ab, sodass E-Mails auf Spam und Viren überprüft werden.

Der Vorteil eines solchen “virtuellen” Setups (virtuelle Benutzer und Domains in einer MySQL Datenbank) ist, dass es weitaus leistungsfähiger als ein Setup, das auf “realen” Systembenutzern basiert. Mit diesem virtuellen Setup kann Dein Mail Server Tausende von Domains und Benutzern bedienen. Davon abgesehen, ist es einfacher zu verwalten, da man sich nur mit der MySQL Datenbank beschäftigen muss, wenn man neue Benutzer/Domains hinzufügt oder bereits vorhandene bearbeitet. Keine postmap Befehle mehr um db Dateien zu erstellen, kein Neuladen von Postfix, etc. Zur Administration der MySQL Datenbank kannst Du web-basierte Tools wie phpMyAdmin verwenden, die auch in dieser Anleitung installiert werden. Der dritte Vorteil ist, dass die Benutzer eine E-mail Adresse als Benutzernamen haben (anstelle eines Benutzernamens + E-mai Adresse), was einfacher zu verstehen ist und man kann es sich besser merken.

Diese Anleitung basiert auf Mandriva 2008.0 (i386). Du solltest bereits ein Mandriva Basissystem eingerichtet haben, wie in den Kapiteln 1 bis 7 dieser Anleitung: http://www.howtoforge.com/perfect_server_mandriva_2008.0 beschrieben wird.

Diese Anleitung ist ein praktischer Leitfaden und deckt kein theoretisches Hintergrundwissen ab. Dies wird in anderen Dokumenten im Web abgehandelt.

Diese Anleitung ist ohne jegliche Gewähr! Allerdings möchte ich an dieser Stelle darauf hinweisen, dass dies hier nicht der einzige Weg ist, ein solches System zu installieren. Es gibt viele Möglichkeiten - ich selbst habe mich für diese entschieden. Ich kann aber nicht garantieren, dass diese Lösung bei jedem funktioniert bzw. für jeden die richtige ist!

Vorbemerkung

Das System sollte eine statische IP Adresse haben. In dieser Anleitung verwende ich 192.168.0.100 als meine IP Adresse und server1.example.com als den Hostnamen.

1 Installation von Apache, MySQL, phpMyAdmin

Dies kann alles mit einem einzigen Befehl installiert werden:

urpmi MySQL MySQL-client libmysql15-devel phpmyadmin db4-devel html2text libsasl-devel openssl-devel openldap-devel pcre-devel postgresql-devel


2 Installation von Courier und Saslauthd

Um Courier und saslauthd zu installieren, lassen wir einfach Folgendes laufen:

urpmi courier-authlib courier-authlib-mysql courier-imap courier-pop cyrus-sasl libsasl2 libsasl2-devel libsasl2-plug-plain libsasl2-plug-anonymous libsasl2-plug-crammd5 libsasl2-plug-digestmd5 libsasl2-plug-gssapi libsasl2-plug-login


3 Anbringen von Quota Patch in Postfix

Wir müssen den Postfix Quelltext beziehen, ihn dann mit dem Quota Patch patchen, neue Postfix rpm Pakete erstellen und diese Pakete dann installieren.

cd /usr/src
wget ftp://ftp.uni-bayreuth.de/pub/linux/Mandrakelinux/official/2008.0/SRPMS/main/release/postfix-2.4.5-2mdv2008.0.src.rpm
rpm -ivh postfix-2.4.5-2mdv2008.0.src.rpm

Der letzte Befehl wird ein paar Warnungen anzeigen, die Du ignorieren kannst:

warning: user mandrake does not exist - using root
warning: group mandrake does not exist - using root

Nun patchen wir den Postfix Quelltext mit dem Postfix-2.4.5-vda-ng patch (von http://vda.sourceforge.net/):

cd /usr/src/rpm/SOURCES
tar xvfz postfix-2.4.5.tar.gz
wget http://vda.sourceforge.net/VDA/postfix-2.4.5-vda-ng.patch.gz
gunzip postfix-2.4.5-vda-ng.patch.gz
cd postfix-2.4.5
patch -p1 < ../postfix-2.4.5-vda-ng.patch
cd ..
mv postfix-2.4.5.tar.gz postfix-2.4.5.tar.gz_orig
tar -pczf postfix-2.4.5.tar.gz postfix-2.4.5/
rm -fr postfix-2.4.5/

Dann erstellen wir unser neues Postfix rpm Paket mit quota und MySQL Unterstützung:

cd /usr/src/rpm/SPECS/
rpmbuild -ba postfix.spec

Unser Postfix rpm Paket wird in /usr/src/rpm/RPMS/i586 erstellt, also gehen wir dahin:

cd /usr/src/rpm/RPMS/i586

Der Befehl

ls -l

zeigt die verfügbaren Pakete an:

[root@server1 i586]# ls -l
total 4552
-rw-r--r-- 1 root root 264550 2008-01-04 19:36 libpostfix1-2.4.5-2mdv2008.0.i586.rpm
-rw-r--r-- 1 root root 1746569 2008-01-04 19:36 postfix-2.4.5-2mdv2008.0.i586.rpm
-rw-r--r-- 1 root root 2540076 2008-01-04 19:36 postfix-debug-2.4.5-2mdv2008.0.i586.rpm
-rw-r--r-- 1 root root 24970 2008-01-04 19:36 postfix-ldap-2.4.5-2mdv2008.0.i586.rpm
-rw-r--r-- 1 root root 20132 2008-01-04 19:36 postfix-mysql-2.4.5-2mdv2008.0.i586.rpm
-rw-r--r-- 1 root root 20154 2008-01-04 19:36 postfix-pcre-2.4.5-2mdv2008.0.i586.rpm
-rw-r--r-- 1 root root 20196 2008-01-04 19:36 postfix-pgsql-2.4.5-2mdv2008.0.i586.rpm
[root@server1 i586]#

Deinstallieren zunächst Dein derzeitiges Postfix Paket...

urpme postfix

...wähle dann das postfix und das postfix-mysql Paket aus und installiere sie wie folgt:

rpm -ivh postfix-2.4.5-2mdv2008.0.i586.rpm postfix-mysql-2.4.5-2mdv2008.0.i586.rpm


4 Richte MySQL Passwörter ein und konfigure phpMyAdmin

Der Netzwerkbetrieb ist im Mandriva 2008 MySQL Paket standardmäßig nicht aktiviert. Jedoch wird der Netzwerkbetrieb von ISPConfig verlangt. Dies können wir ändern, indem wir die Zeile skip-networking in /etc/my.cnf auskommentieren:

vi /etc/my.cnf


[...]
# Don't listen on a TCP/IP port at all. This can be a security enhancement, # if all processes that need to connect to mysqld run on the same host. # All interaction with mysqld must be made via Unix sockets or named pipes. # Note that using this option without enabling named pipes on Windows # (via the "enable-named-pipe" option) will render mysqld useless! # #skip-networking [...]
Danach starten wir MySQL:

/etc/init.d/mysqld start

Überprüfe nun, ob der Netzwerkbetrieb aktiviert ist. Lass Folgendes laufen

netstat -tap | grep mysql

Die Ausgabe sollte wie folgt aussehen:

[root@server1 var]# netstat -tap | grep mysql
tcp 0 0 *:mysql-im *:* LISTEN 5697/mysqlmanager
tcp 0 0 *:mysql *:* LISTEN 5705/mysqld

Lass als Nächstes Folgendes laufen

mysqladmin -u root password yourrootsqlpassword
mysqladmin -h server1.example.com -u root password yourrootsqlpassword

um ein Passwort für den Benutzer Root einzurichten (sonst kann jeder auf Deine MySQL Datenbank zugreifen!).

Nun kannst Du Deinen Browser auf http://server1.example.com/phpmyadmin/ oder http://192.168.0.100/phpmyadmin/ ausrichten und Dich mit dem Benutzernamen Root und Deinen neuen Root MySQL Passwort anmelden.

5 Erstelle die MySQL Datenbank für Postfix/Courier

Wir erstellen einen Datenbank mit der Bezeichnung mail:

mysqladmin -u root -p create mail

Als Nächstes gehen wir zur MySQL Kommandozeile:

mysql -u root -p

In der MySQL Kommandozeile erstellen wir den Benutzer mail_admin mit dem Passwort mail_admin_password (ersetze es mit Deinem eigenen Passwort), der SELECT,INSERT,UPDATE,DELETE Privilegien in der mail Datenbank hat. Mit diesem Benutzer werden sich Postfix und Courier mit der mail Datenbank 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 Kommandozeile erstellen wir die Tabellen, die Postfix und Courier benötigen:

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 INT(10) 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 Du vielleicht festgestellt hast, haben wir mit dem quit; Befehl die MySQL Kommandozeile verlassen und sind zurück in der Linux Kommandozeile.

Die domains Tabelle wird jede virtuelle Domain speichern, für die Postfix E-Mails erhalten sollte (z.B. example.com).
domain
example.comDie forwardings Tabelle ist für das Aliasing einer E-Mail Adresse mit der anderen zustänidg, z.B. leite E-Mails für info@example.com an sales@example.com weiter.
source destination
info@example.com sales@example.comDie users Tabelle speichert alle virtuellen Benutzer (das heißt E-Mail Adressen, da die Adressen und der Benutzername das Gleiche ist) und Passwörter (in verschlüsselter Form!) sowie einen Quota-Wert für jede Mail Box (in diesem Beispiel ist der Standardwert 10485760 bytes, das heißt 10MB).
email password quota
sales@example.com No9.E4skNvGa. ("secret" in encrypted form) 10485760Die transport Tabelle ist optional, sie ist für fortgeschrittene Benutzer. Sie erlaubt Mails an einzelne Benutzer, ganze Domains oder alle Mails an einen anderen Server weiterzuleiten. Zum Beispiel würde
domain transport
example.com smtp:[1.2.3.4]alle E-Mails für example.com via smtp Protokoll an den Server mit der IP Adresse 1.2.3.4 weiterleiten (die eckigen Klammern [] bedeuten "schlage den MX DNS Record nicht nach" (was für IP Adressen Sinn macht...). Wenn Du stattdessen einen Fully Qualified Domain Name (FQDN) nutzt, verwendest Du die eckigen Klammern nicht.).

0 Kommentar(e)

Zum Posten von Kommentaren bitte