Dieser Text befindet sich inhaltlich auf dem Stand des Jahres 2004 und wird nicht mehr gepflegt oder aktualisiert. Er ist in jeder Hinsicht veraltet und steht nur noch zu Dokumentationszwecken online.
Confixx wird - zumindest auf den "Rootservern" von 1&1 - standardmäßig nicht mit Exim, sondern - derzeit - mit Postfix ausgeliefert. Dennoch kann man stattdessen auch Exim einsetzen, und zwar durchaus elegant, so dass neu angelegte Accounts sofort zur Verfügung stehen.
Eine Lösung unter Zugriff auf die von Confixx für (sendmail bzw.) Postfix generierten Dateien habe ich bereits zu Genüge früher ausprobiert; diesmal geht es um eine Lösung, in der Exim direkt auf die MySQL-Datenbank von Confixx zugreift. Das hat den Vorteil, dass keine weiteren Änderungen am System notwendig werden und Änderungen, die Kunden an der Datenbank (über die Weboberfläche) vornehmen, sofort umgesetzt werden; aber natürlich auch den Nachteil einer höheren Systemlast und einen Ausfall auch des Mailsystems, sobald der Datenbankserver ausfällt.
Bei dieser Beschreibung gehe ich davon aus, dass Sie mit der grundsätzlichen Konfiguration von Exim vertraut sind, und gehe nur auf die notwendigen Konfigurationsschritte für die Anpassung an Confixx ein. Die einleitenden Hinweise zur Installation mag der erfahrene Nutzer überblättern.
Exim installieren
Zunächst empfiehlt es sich, einen neuen Systemaccount für Exim anzulegen, und sinnvollerweise auch eine Gruppe dazu. Danach sollte man sich eine aktuelle Version von Exim herunterladen (derzeit 4.42). Im Makefile wären dann zusätzlich zum Default mindestens folgende Einstellungen zu treffen:
LOOKUP_MYSQL=yes
LOOKUP_INCLUDE=-I /usr/include/mysql
LOOKUP_LIBS=-L/usr/local/lib -lmysqlclient
Ansonsten natürlich all das, was sonst noch benötigt wird.
Zum Kompilieren sind dann - jedenfalls unter Suse - noch einige fehlende RPMs aus der passenden Distribution zu ergänzen, bspw. - unter Suse 9.0 -:
ftp://ftp.suse.com/pub/suse/i386/9.0/suse/i586/db-devel-4.1.25-76.i586.rpm
ftp://ftp.suse.com/pub/suse/i386/9.0/suse/i586/mysql-devel-4.0.15-13.i586.rpm
Nach dem make install
sollten dann die erforderlichen Einstellungen in der
Konfigurationsdatei (per default /usr/exim/configure
) getroffen werden,
die in der Dokumentation vorgesehenen Tests durchgeführt, dann
Postfix gestoppt, die Links zu sendmail durch solche auf
Exim ersetzt und schließlich nach dem Muster von
/etc/init.d/postfix
ein /etc/init.d/exim
angelegt und - am einfachsten -
ersteres durch einen symbolischen Link auf Exim ersetzt werden.
Bevor man allerdings die entscheidenen Umbauten vornimmt, sollte man die im folgenden beschriebene Konfiguration ausführlich "trocken" getestet haben.
Konfiguration
Zu diesen erforderlichen Einstellungen gehören dann neben den üblichen die Konfiguration des MySQL-Servers, die der lokalen Domains und die des Routers für die in Confixx angelegten Adressen.
Die ersten beiden Einstellungen nehmen Sie in im Hauptteil der Konfiguration
vor. Es macht dabei Sinn, die in Confixx angelegten Domains als
eigene domainlist zu konfigurieren. Vielleicht wollen Sie auch noch weitere
Domains als lokal definieren? Die könnte man dann in der Datei
/usr/exim/domains-local
anlegen.
Außerdem hinterlassen wir direkt noch einen Makro für den Router, der uns dort dann die data-Anweisung etwas übersichtlicher macht.
######################################################################
# MAIN CONFIGURATION SETTINGS #
######################################################################
[...]
# Macros
EXTRACT_POP3 = ${extract{pop3}{$value}},${tr{${extract{pop3x}{$value}}}{:}{,}}
# MySQL
hide mysql_servers = localhost//ACCOUNT/PASSWORD
[...]
domainlist hostname =
domainlist confixx_domains = mysql;select distinct * from confixx.email where domain = '$domain';
domainlist local_domains = @ : localhost : /usr/exim/domains-local : +confixx_domains
Statt ACCOUNT
und PASSWORD
müssen Sie natürlich die passenden Daten
einsetzen, die Sie der Confixx-Konfigurationsdatei
/root/confixx/confixx_main.conf
entnehmen können. Auch
your.hostname.example
ist passend zu ersetzen.
Dann nehmen wir uns den Router vor:
######################################################################
# ROUTERS CONFIGURATION #
# Specifies how addresses are handled #
######################################################################
# THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT! #
# An address is passed to each router in turn until it is accepted. #
######################################################################
begin routers
[...]
confixx_aliases:
driver = redirect
domains = +confixx_domains
# local_part_suffix = +*
# local_part_suffix_optional
data = ${lookup mysql {select distinct pop3,pop3x from confixx.email where \
prefix='${quote_mysql:$local_part}' and domain='${quote_mysql:$domain}'} \
{EXTRACT_POP3} \
{ ${lookup mysql {select distinct pop3,pop3x from confixx.email where \
prefix='*' and domain='${quote_mysql:$domain}'} \
{EXTRACT_POP3}} } }
check_ancestor
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
Dieser kompliziert aussehende Ausdruck liest die passenden Ziel- bzw. Weiterleitungsadressen (die erste steht im Feld "pop3", alle weiteren durch Doppelpunkte getrennt in "pop3x") für den localpart ("prefix") unter dieser Domain ("domain") aus und setzt sie zu einer durch Kommata getrennten Liste zusammen, und wenn es keinen Eintrag für diesen localpart gibt, dann wird nochmal versucht, einen Catchall-Eintrag zu finden ("*" als "prefix"). Erst wenn das fehlschlägt, wird der Router - der im übrigen nur für die Confixx-Domains überhaupt ausgeführt wird - die Annahme der Adresse ablehnen.
Gegebenenfalls sind noch weitere Anpassungen nötig, weil Confixx bei
den Systembenutzern für die Mailaccounts als Homeverzeichnis das - nicht
existente - /XnirvanaX
angibt. Entweder legt man dieses Verzeichnis an,
oder man passt die Router an:
userforward:
driver = redirect
check_local_user
# local_part_suffix = +*
# local_part_suffix_optional
require_files = $home/.forward
file = $home/.forward
# allow_filter
no_verify
no_expn
check_ancestor
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
[...]
localuser:
driver = accept
check_local_user
# local_part_suffix = +*
# local_part_suffix_optional
current_directory = /var/spool/mail
transport = local_delivery
cannot_route_message = Unknown user
Vielleicht möchte man auch statt /etc/aliases
, in dem Confixx
ebenfalls herumschmiert, eine Datei /usr/exim/aliases-system
verwenden
(die man anfangs einfach als Kopie von /etc/aliases
anlegt)? Der
system_aliases
-Router sähe dann so aus:
system_aliases:
driver = redirect
allow_fail
allow_defer
domains = +hostname
data = ${lookup{$local_part}lsearch{/usr/exim/aliases-system}}
# user = exim
file_transport = address_file
pipe_transport = address_pipe
Das sollte es eigentlich im wesentlichen sein.
Dieser Text befindet sich inhaltlich auf dem Stand des Jahres 2004 und wird nicht mehr gepflegt oder aktualisiert. Er ist in jeder Hinsicht veraltet und steht nur noch zu Dokumentationszwecken online.
Lizenz
Dieser Inhalt ist unter der Creative Commons-Lizenz BY-NC-SA 4.0 DE lizenziert; er darf unter Namensnennung des Autors nicht-kommerziell weitergegeben und auch bearbeitet werden, soweit das neue Werk gleichfalls wieder dieser Creative-Commons-Lizenz unterliegt. Die Einzelheiten ergeben sich aus dem Lizenzvertrag.