Virtuelle Benutzer und Domains Mit Postfix, Courier Und MySQL (Ubuntu 7.10)

Version 1.0
Author: Falko Timme


Diese Anleitung ist urheberrechtlich geschützt (Copyright (c) 2007 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 patscht). 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 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!

1 Vorbemerkung

Diese Anleitung basiert auf dem Ubuntu 7.10 Server (Gutsy Gibbon), also solltest Du ersteinmal eine Ubuntu 7.10 Server Gundinstallation vornehmen, bevor Du mit dieser Anleitung weiter machst (z.B. wie auf den Seiten 1 - 3 der Anleitung: Der Perfekte Server - Ubuntu Gutsy Gibbon (Ubuntu 7.10) gezeigt wird). Das System sollte eine statische IP Adresse haben. Ich verwende 192.168.0.100 als meine IP address und server1.example.com als den Hostnamen.

Vergewissere Dich, dass Du als Root Benutzer angemeldet bist (gib ein

sudo su

um Root Benutzer zu werden), da wir alle Schritte dieser Anleitung als Root Benutzer durchführen müssen.

2 Installiere Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Um Postfix, Courier, Saslauthd, MySQL, und phpMyAdmin zu installieren, führen wir einfach Folgendes 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 postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql

Ein paar Fragen werden Dir gestellt werden:

New password for the MySQL "root" user: <-- yourrootsqlpassword
Create directories for web-based administration ? <-- No
General type of mail configuration: <-- Internet Site
System mail name: <-- server1.example.com
SSL certificate required <-- Ok
Web server to reconfigure automatically: <-- apache2

3 Anbringen von Quota Patch in Postfix

Wir müssen den Postfix Quelltext beziehen, patche ihn mit dem Quota Patch, erstelle neue Postfix .deb Pakete und installiere diese .deb Pakete:

apt-get install build-essential dpkg-dev fakeroot debhelper libgdbm-dev libldap2-dev libpcre3-dev libssl-dev libsasl2-dev postgresql-server-dev-8.2 po-debconf dpatch libmysqlclient15-dev lsb-release libcdb-dev libdb4.5-dev


cd /usr/src
apt-get source postfix

(Vergewissere Dich, dass Du die richtige Postfix Version bei folgenden Befehlen verwendest. Ich habe Postfix 2.4.5 installiert. Um Deine Postfix Version herauszufinden, kannst Du Folgendes laufen lassen

postconf -d | grep mail_version

Die Ausgabe solle so aussehen:

root@server1:~# postconf -d | grep mail_version
mail_version = 2.4.5
milter_macro_v = $mail_name $mail_version
root@server1:~#

)

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
dpkg-buildpackage

Es kann sein, dass Du eine solche Warnung am Ende des dpkg-buildpackage Befehls siehst:

(WARNING: Failed to sign .dsc and .changes file)

Du kannst diese Mitteilung ignorieren.

Jetzt gehen wir ein Verzeichnis hoch, dort wurden die neuen .deb Pakete erstellt:

cd ..

Der Befehl

ls -l

zeigt Dir Pakete, die verfügbar sind:

root@server1:/usr/src# ls -l
total 5424
drwxr-xr-x 19 root src 4096 2007-11-16 14:33 postfix-2.4.5
-rw-r--r-- 1 root src 222693 2007-11-16 14:30 postfix_2.4.5-3ubuntu1.diff.gz
-rw-r--r-- 1 root src 663 2007-11-16 14:30 postfix_2.4.5-3ubuntu1.dsc
-rw-r--r-- 1 root src 1783 2007-11-16 14:33 postfix_2.4.5-3ubuntu1_i386.changes
-rw-r--r-- 1 root src 1123668 2007-11-16 14:33 postfix_2.4.5-3ubuntu1_i386.deb
-rw-r--r-- 1 root src 2934634 2007-08-03 19:53 postfix_2.4.5.orig.tar.gz
-rw-r--r-- 1 root src 57055 2007-08-02 01:13 postfix-2.4.5-vda-ng.patch
-rw-r--r-- 1 root src 38078 2007-11-16 14:33 postfix-cdb_2.4.5-3ubuntu1_i386.deb
-rw-r--r-- 1 root src 133642 2007-11-16 14:33 postfix-dev_2.4.5-3ubuntu1_all.deb
-rw-r--r-- 1 root src 826202 2007-11-16 14:33 postfix-doc_2.4.5-3ubuntu1_all.deb
-rw-r--r-- 1 root src 44340 2007-11-16 14:33 postfix-ldap_2.4.5-3ubuntu1_i386.deb
-rw-r--r-- 1 root src 40118 2007-11-16 14:33 postfix-mysql_2.4.5-3ubuntu1_i386.deb
-rw-r--r-- 1 root src 39956 2007-11-16 14:33 postfix-pcre_2.4.5-3ubuntu1_i386.deb
-rw-r--r-- 1 root src 40190 2007-11-16 14:33 postfix-pgsql_2.4.5-3ubuntu1_i386.deb
root@server1:/usr/src#

Wähle das postfix und postfix-mysql Paket und installiere sie wie folgt:

dpkg -i postfix_2.4.5-3ubuntu1_i386.deb
dpkg -i postfix-mysql_2.4.5-3ubuntu1_i386.deb

4 Erstelle die MySQL Datenbank Für Postfix/Courier

Nun erstellen wir eine Datenbank mit dem Namen 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 dies mit Deinem eigenen Passwort), der SELECT,INSERT,UPDATE,DELETE Privilegien in der mail Datenbank hat. Diesen Benutzer verwenden Postfix und Courier 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 Kommandozeile, wir erstellen 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 solle (z.B. example.com).
domain
example.comDie forwardings Tabelle ist für das Aliasing einer E-Mail Adresse mit der anderen zuständig, 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 virtuell Benutzer (das heißt E-Mail Adressen, da die E-Mail Adresse und der Benutzername das gleiche 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. 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).

Übrigens (Ich nehem an, die IP Adresse Deines Mail Server Systems 192.168.0.100 ist) kannst Du auf phpMyAdmin über http://192.168.0.100/phpmyadmin/ in einbem Browser zugreifen und Dich als mail_admin anmelden. Dann kannst Du Dir die Datenbank einmal ansehen. Später kannst Du phpMyAdmin verwenden um Deinen Mail Server zu verwalten.

3 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: planet_fox

Ich hatte Probleme bei erstellen der Tabelle CREATE TABLE transport und CREATE TABLE user auf einem mysql5 server könnte es so Lösen


CREATE TABLE `users` (
`email` varchar(80) NOT NULL,
`password` varchar(20) NOT NULL,
`quota` int(10) default '10485760',
PRIMARY KEY (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `forwardings` (
`source` varchar(80) NOT NULL,
`destination` text NOT NULL,
PRIMARY KEY (`source`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Von: Aerox95

Nach der Einrichtung nach diesem Tutorial ging das Empfangen von Mails problemlos, aber nicht das versenden.

Lösung war, unter
/var/run/saslauthd/ den Dateien neue Besitzer und Gruppen zu geben:

drwx--x--- 2 postfix sasl 100 May 11 15:24 .
drwxr-xr-x 13 root root 360 May 11 15:24 ..
srwxrwxrwx 1 postfix postfix 0 May 11 15:24 mux
-rw------- 1 postfix postfix 6 May 11 15:24 saslauthd.pid
-rw------- 1 postfix postfix 0 May 11 15:24 mux.accept

Danach gings.


Von: apoc

Danke für das super Howto. Ich möchte noch ergänzen das man bei forwardings auch einfach den PRIMARY KEY weglassen kann, dann ist es möglich eine eMail an 2 weitere zu verteilen, haben wir so für info@.. gemacht.

Und noch hier mein kleines Manage Script für die Konsole, kann nicht viel, aber vielleicht findet es ja jemand hilfreich:
http://apoc.sixserv.org/scripts/vmail_manage_script.rb