Virtuelle Benutzer und Domains mit Postfix, Courier und MySQL (Fedora Core 5)

Version 1.0
Author: Falko Timme


Diese Anleitung unterliegt dem Copyright (c) 2006 von Falko Timme und stammt von einem Tutorial von Christoph Haas, was auf http://workaround.org zu finden ist. Du kannst dieses Tutorial unter der Creative Commons License 2.5 oder jeder neueren Verion verwenden.
Diese Anleitung veranschaulicht, wie man einen Postfix-basierten Mail Server installiert, der auf virtuellen Benutzern und Domains basiert, d.h. Benutzer und Domains, die sich in einer MySQL Datenbank befinden. Außerdem werde ich die Installation und Konfiguration von Courier (Courier-POP3, Courier-IMAP) demonstrieren, damit 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 standardmäßig eingebaut, ich werde zeigen, wie Du Dein Postfix richtig patchst). Passwörter werden in der Datenbank verschlüsselt gespeichert (die meisten Dokumente haben mit unverschlüsselten Passwörtern gearbeitet, was ein Sicherheitsrisiko bedeutet). Weiterhin behandelt diese Anleitung die Installation von Amavisd, SpamAssassin und ClamAV, so dass E-Mails nach Spam und Viren gescannt werden.

Der Vorteil eines solchen "virtuellen" Setups (virtuelle Benutzer und Domains in einer MySQL Datenbank) ist, dass es viel leitstungsstärker ist als ein Setup, das auf "realen" Systembenutzern basiert. Mit diesem virtuellen Setup kann Dein E-Mail Server Tausende von Domains und Benutzern bearbeiten. Außerdem ist es einfacher zu verwalten, da Du Dich nur mit der MySQL Datenbank auseinandersetzen musst, wenn Du neue Benutzer/Domains hinzufügst oder bereits vorhandene bearteitest. Keine Postmap Befehle um db Dateien zu erstellen mehr, kein Neuladen von Postfix mehr, etc. Für die Verwaltung der MySQL Datenbank kannst Du Web-basierte Tools wie phpMyAdmin verwenden, die ebenfalls in dieser Anleitung installiert werden. Der dritte Vorteil besteht darin, dass Benutzer eine E-Mail Adresse als Benutzernamen haben (anstelle eines Benutzernamens + E-Mail Adresse), was einfacher zu verstehen und zu behalten ist.

Diese Anleitung basiert auf Fedora Core 5 (i386). Du solltest bereits ein Fedora Basissystem aufgesetzt haben, wie hier (für ein x86_64 System, die Prozedur für i386 Systeme ist allerdings die gleiche): http://www.howtoforge.com/perfect_setup_fedora_core_5 und hier http://www.howtoforge.com/perfect_setup_fedora_core_5_p2 beschrieben wird. Außerdem solltest Du sicher gehen, dass die Firewall ausgeschaltet (zumindest jetzt) und SELinux deaktiviert ist (das ist wichitg!), wie hier gezeigt wird http://www.howtoforge.com/perfect_setup_fedora_core_5_p3.

Diese Anleitung ist ein praktischer Leitfaden; theoretisches Hintergrundwissen wird nicht abgedeckt. Dies wird in zahlreichen anderen Dokumenten im Web behandelt.

Diese Anleitung ist ohne jegliche Gewähr! Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist ein solches System einzurichten. Es gibt viele Möglichkeiten, dieses Ziel zu erreichen - dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Bearbeite /etc/hosts

Unser Hostname in diesem Beispiel ist server1.example.com und hat die IP Adresse 192.168.0.100, also ändern wir /etc/hosts wie folgt:

vi /etc/hosts


# Do not remove the following line, or various programs
# that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost 192.168.0.100 server1.example.com server1

2 Konfiguriere eine zusätzliche Paketdatenbank für Fedora Pakete

Einige Pakete, die wir installieren müssen (wie courier-imap), sind in den offiziellen Fedora Paketdatenbanken nicht verfügbar, also müssen wir eine andere Paketdatenbank yum hinzufügen:

rpm -ivh http://www.enlartenment.com/packages/fedora/5/i386/enlartenment-release-1.1-2.fc5.mf.noarch.rpm

Danach müssen wir enabled auf 1 in /etc/yum.repos.d/enlartenment.repo setzen:

vi /etc/yum.repos.d/enlartenment.repo


[enlartenment]
name=Enlartenment Repository for $releasever - $basearch baseurl=http://www.enlartenment.com/packages/fedora/$releasever/$basearch/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-enlartenment enabled=1 gpgcheck=1 [enlartenment-sources] name=Enlartenment Repository for $releasever - Sources baseurl=http://www.enlartenment.com/packages/fedora/$releasever/SRPMS/ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-enlartenment enabled=1 gpgcheck=1
Als Nächstes importieren wir den GPG Key dieser Paketdatenbank:

rpm --import http://www.enlartenment.com/RPM-GPG-KEY.mf


3 Installation von Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Das kann alles mit nur einem Befehl installiert werden:

yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel maildrop courier-imap courier-authlib-mysql phpmyadmin pcre-devel openldap-devel

Wenn Du dies siehst:

warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
Public key for ntp-4.2.0.a.20050816-11.FC5.i386.rpm is not installed
Retrieving GPG key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
Importing GPG key 0x4F2A6FD2 "Fedora Project <fedora@redhat.com>"
Is this ok [y/N]:

antworte bitte mit y.

4 Den Quota Patch in Postfix anbringen

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

cd /usr/src
wget http://ftp-stud.fht-esslingen.de/pub/Mirrors/fedora/linux/core/5/source/SRPMS/postfix-2.2.8-1.2.src.rpm
rpm -ivh postfix-2.2.8-1.2.src.rpm
cd /usr/src/redhat/SOURCES
wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.2.8-vda.patch.gz
gunzip postfix-2.2.8-vda.patch.gz
cd /usr/src/redhat/SPECS/

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

vi postfix.spec

Ändere %define MYSQL 0 zu %define MYSQL 1, füge Patch0: postfix-2.2.8-vda.patch der # Patches Zeile hinzu und füge letztlich %patch0 -p1 -b .vda der %setup -q Zeile hinzu:
[...]
%define MYSQL 1 [...] # Patches Patch0: postfix-2.2.8-vda.patch Patch1: postfix-2.1.1-config.patch Patch3: postfix-alternatives.patch Patch4: postfix-hostname-fqdn.patch Patch6: postfix-2.1.1-obsolete.patch Patch7: postfix-2.1.5-aliases.patch Patch8: postfix-large-fs.patch Patch9: postfix-2.2.5-cyrus.patch [...] %setup -q # Apply obligatory patches %patch0 -p1 -b .vda %patch1 -p1 -b .config %patch3 -p1 -b .alternatives %patch4 -p1 -b .postfix-hostname-fqdn %patch6 -p1 -b .obsolete %patch7 -p1 -b .aliases %patch8 -p1 -b .large-fs %patch9 -p1 -b .cyrus [...]
Dann bauen wir unser neues Postfix rpm Paket mit Quota und MySQL Unterstützung:

rpmbuild -ba postfix.spec

Du wirst viele Warnungen wie folgende sehen, die Du aber ignorieren kannst:

msg.h:12:1: warning: "/*" within comment
msg.h:14:1: warning: "/*" within comment
msg.h:33:1: warning: "/*" within comment
msg.h:34:1: warning: "/*" within comment
msg.h:35:1: warning: "/*" within comment
msg.h:36:1: warning: "/*" within comment

Unser Postfix rpm Paket wird in /usr/src/redhat/RPMS/i386 erstellt, also begeben wir uns dahin und installieren es:

cd /usr/src/redhat/RPMS/i386
rpm -ivh postfix-2.2.8-1.2.i386.rpm

(Falls Du Probleme mit der Erstellung des Postfix rpm Paketes haben solltest, kannst Du meines von hier runter laden.)

5 MySQL Passwörter einrichten und phpMyAdmin konfigurieren

Starte MySQL:

chkconfig --levels 235 mysqld on
/etc/init.d/mysqld start

Richte dann Passwörter für das MySQL Root Konto ein:

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

Nun konfigurieren wir phpMyAdmin. Erstelle /usr/share/phpmyadmin/config.inc.php:

vi /usr/share/phpmyadmin/config.inc.php


<?php
$cfg[PmaAbsoluteUri] = 'http://192.168.0.100/phpmyadmin/'; $i=0; $i++; $cfg['Servers'][$i]['auth_type'] = 'http'; ?>
Dann ändern wir die Apache Konfiguration, so dass phpMyAdmin nicht nur Verbindungn von localhost zulässt:

vi /etc/httpd/conf.d/phpmyadmin.conf


Alias /phpmyadmin/ "/usr/share/phpmyadmin/"
#<Location "/phpmyadmin/"> # Order allow,deny # Allow from 127.0.0.1 #</Location>
Dann erstellen wir die System Startup Links für Apache und starten es:

chkconfig --levels 235 httpd on
/etc/init.d/httpd start

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

6 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 gehen wir zu 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 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 bereits aufgefallen ist, haben wir mit dem quit; Befehl die MySQL Kommandozeile verlassen und sind wieder in der Linux Kommandozeile.

Die domains Tabelle speichert jede virtuelle Domain, für die Postfix E-Mails erhalten soll (z.B. example.com).
domain
example.comDie forwardingst Tabelle steht für das Aliasing von einer E-Mail Adresse mit einer 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 die E-Mail Adresse und der Benutzername identisch sind) und Passwörter (in verschlüsselter Form!) sowie 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 gedacht. Sie erlaubt das Weiterleiten von E-Mails für einzelneBenutzer, ganze Domains oder alle Mails an einen anderen Server. Zum Beispiel würde
domain transport
example.com smtp:[1.2.3.4]alle E-Mails für example.com via smtp Protocol 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) verwenden würdest, würdest Du die eckigen Klammern nicht verwenden.).

0 Kommentar(e)

Zum Posten von Kommentaren bitte