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

Version 1.0
Author: Falko Timme


Diese Anleitung unterliegt dem Copyright (c) 2008 von Falko Timme. Sie stammt von einem Tutorial von Christoph Haas, das Du hier finden kannst: http://workaround.org. Du kannst dieses Tutorial unter der Creative Commons License 2.5 oder jeder neueren Version verwenden.
Dieses Dokument veranschaulicht, wie man einen Postfix Mail Server installiert, der auf virtuellen Benutzern und Domains basiert, d.h. Benutzer und Domains, die sich in einer MySQL Datenbank befinden. Weiterhin werde ich die Installation und Konfiguration von Courier (Courier-POP3, Courier-IMAP) aufzeigen, so dass sich Courier gegenüber der gleichen MySQL Datenbank authentifizieren kann, die Postfix verwendet.

Der daraus resultierende Postfix Server ist SMTP-AUTH-, TLS- und Quota-fähig (Quota ist in Postfix nicht automatisch integriert, ich werde zeigen, wie Du Dein Postfix richtig patchst). Passwörter werden in der Datenbank in verschlüsselter Form gespeichert (die meisten Dokumente, die ich fand, beschäftigen sich mit normalen Text-Passwörtern, was ein Sicherheitsrisiko darstellt). Zusätzlich befasst sich diese Anleitung mit der Installation von Amavisd, SpamAssassin und ClamAV, so dass E-Mails nach Spam und Viren gescannt werden. Weiterhin werde ich zeigen, wie man SquirrelMail als ein Webmail Interface installiert, damit Benutzer E-Mails lesen und senden können und 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 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.1 (i386). Du solltest bereits ein Mandriva Basissystem eingerichtet haben, was in den Kapiteln 1 bis 7 dieser Anleitung beschrieben wird: http://www.howtoforge.com/perfect-server-mandriva-2008.1. Bitte lass das Kapitel 6.3 "Creating An Auto-Update Script" aus, denn wenn es ein Postfix Update gibt, wird es unser benutzerdefiniertes Postfix, das wir in Kapitel 3 bauen, ersetzen!

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. Ich verwende in dieser Anleitung 192.168.0.100 als meine IP Adresse und server1.example.com als Hostnamen.

1 Installation von Apache, MySQL, phpMyAdmin

Das kann alles mit nur einem Befehl installiert werden:

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


2 Installation von Courier und Saslauthd

Um Courier und saslauthd zu installieren, führen wir einfach Folgendes aus:

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 Einen Quota Patch in Postfix anbringen

Wir müssen das Postfix rpm Quell-Paket beziehen, es mit dem Quota Patch patchen, ein neues Postfix rpm Paket bauen und es installieren.

cd /usr/src
mkdir rpm
wget ftp://wftp.tu-chemnitz.de/pub/linux/mandrakelinux/official/2008.1/SRPMS/main/release/postfix-2.5.1-2mdv2008.1.src.rpm
rpm -ivh postfix-2.5.1-2mdv2008.1.src.rpm

Der letzte Befehl zeigt ein paar Warnungen, die Du aber ignorieren kannst:

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

Nun patchen wir die Postfix Quellen mit dem postfix-2.5.1-vda-ng Patch (von http://vda.sourceforge.net/):

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

Dann bauen 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 begeben wir uns dorthin:

cd /usr/src/rpm/RPMS/i586

Der Befehl

ls -l

zeigt Dir die verfügbaren Pakete an:

[root@server1 i586]# ls -l
total 4712
-rw-r--r-- 1 root root 275303 2008-04-11 16:22 libpostfix1-2.5.1-2mdv2008.1.i586.rpm
-rw-r--r-- 1 root root 1822571 2008-04-11 16:22 postfix-2.5.1-2mdv2008.1.i586.rpm
-rw-r--r-- 1 root root 2608569 2008-04-11 16:22 postfix-debug-2.5.1-2mdv2008.1.i586.rpm
-rw-r--r-- 1 root root 27341 2008-04-11 16:22 postfix-ldap-2.5.1-2mdv2008.1.i586.rpm
-rw-r--r-- 1 root root 22208 2008-04-11 16:22 postfix-mysql-2.5.1-2mdv2008.1.i586.rpm
-rw-r--r-- 1 root root 22150 2008-04-11 16:22 postfix-pcre-2.5.1-2mdv2008.1.i586.rpm
-rw-r--r-- 1 root root 22266 2008-04-11 16:22 postfix-pgsql-2.5.1-2mdv2008.1.i586.rpm
[root@server1 i586]#

Deinstalliere 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.5.1-2mdv2008.1.i586.rpm postfix-mysql-2.5.1-2mdv2008.1.i586.rpm


4 MySQL Passwörter einrichten und phpMyAdmin konfigurieren

Der Netzwerkbetrieb in Mandriva 2008.1s MySQL Paket ist standardmäßig nicht aktiviert, wird aber von ISPConfig verlangt. Wir können das ä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 erstellen wir die System Startup Links für Apache und MySQL...

chkconfig mysqld on
chkconfig httpd on

... und starten beide Dienste:

/etc/init.d/mysqld start
/etc/init.d/httpd start

Überprüfe nun, dass der Netzwerkbetrieb aktiviert ist. Führe dies aus

netstat -tap | grep mysql

Die Ausgabe sollte so aussehen:

[root@server1 i586]# netstat -tap | grep mysql
tcp 0 0 *:mysql-im *:* LISTEN 13537/mysqlmanager
tcp 0 0 *:mysql *:* LISTEN 13545/mysqld
[root@server1 i586]#

Wähle als Nächstes

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

um ein Passwort für den Benutzer root anzulegen (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/ richten und Dich mit dem Benutzernamen root und Deinem neuen Root MySQL Passwort anmelden.

5 Die MySQL Datenbank für Postfix/Courier erstellen

Wir erstellen eine Datenbank mit der Bezeichnung mail:

mysqladmin -u root -p create mail

Als Nächstes begeben wir uns in die 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 einem Passwort Deiner Wahl), der SELECT,INSERT,UPDATE,DELETE Privilegien in der mail Datenbank hat. Mit diesem Benutzer werden sich Postfix und Courier mit der mail Datenbank in Verbindung setzen:

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 Dir vielleicht aufgefallen sein wird, haben wir die MySQL Kommandozeile mit dem quit; Befehl verlassen und befinden uns wieder in der Linux Kommandozeile.

Die domains Tabelle speichert jede virtuelle Domain, 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 zur anderen, z.B. E-Mails für info@example.com an sales@example.com weiterleiten.
source destination
info@example.com sales@example.comDie users Tabelle speichert alle virtuellen Benutzer (d.h. E-Mail Adressen, da E-Mail Adresse und Benutzername identsich sind), Passwörter (in verschlüsselter Form!) und einen Quota-Wert für jede Mail Box (in diesem Beispiel ist der Standardwert 10485760 Bytes, was 10MB bedeutet).
email password quota
sales@example.com No9.E4skNvGa. ("secret" in encrypted form) 10485760Die transport Tabelle ist optional, sie ist für fortgeschrittene Benutzer geeignet. 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