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 weiter Anpassungen nötig, weil Confixx bei den Systembenutzerb 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

Creative Commons-Lizenzvertrag Dieser Inhalt ist unter der Creative Commons-Lizenz BY-NC-SA 3.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.