= Exim Mailserver =

Als Mailserver kommt im Internet am häufigsten das Programm
'''sendmail''' zum Zuge. Dieses ist jedoch meiner (ThomasBayen)
Meinung nach ein Moloch, wenn es um die Konfiguration geht.
Außerdem installiert Debian Linux standardmäßig eine Alternative:
'''Exim''' (http://www.exim.org). Der grosse Vorteil ist, dass
während einer normalen Debian-Installation ein paar Fragen vom
Debconf-Installationsskript gestellt werden und der Exim danach
normalerweise problemlos läuft.

'''Dieser Artikel ist etwas älter und in erster Linie mit Exim3 geschrieben worden. Eine neuere Serverinstallation unter Exim4 steht ist den Seiten MailServer und MailServerUmsetzung dokumentiert.'''

Dennoch wollte ich eine kleine Änderung an der Konfiguration
vornehmen und habe festgestellt, dass die Konfiguration von Exim
nicht wirklich einfach ist. Deshalb möchte ich meine (und Eure)
Spielereien mit Exim hier verewigen:

== Default-Postfach für eine Domain ==

Bei mir kommen Mails an, die mein Fetchmail von verschiedenen
Postfächern abholt sowie alle Mails, die an meine eigene Domain
(z.B. ''meinedomain.de'') gerichtet sind. Nun möchte ich, dass
Mailadressen, zu denen es normale User gibt, auch in die
entsprechenden Postfächer sortiert werden, das alle anderen Mails
aber an einen Default-User zugestellt werden.

=== Für welche Domains nehme ich Mail an? ===

Die Mailauslieferung soll sowohl intern als auch von aussen her
funktionieren. Zu diesem Zweck muss ich zuerst mal eine lokale
Domain einstellen, damit exim erkennt, dass Mail an
''...@meinedomain.de'' nicht ins Internet (an den SMTP-Server
meines Providers) geschickt wird, sondern je nach Usernamen lokal
zugestellt wird. Beim '''exim4''' Debian-Paket kann man das per
Debconf-Einstellungen bei der Installation angeben. Mit
'''dpkg-reconfigure exim-config''' kann man alles neu einstellen.
Neben der Einstellung, mehrere kleine Konfigurations-Dateien zu
benutzen, ist folgende Einstellung das wichtigste:

  mail sent by smarthost; received via SMTP or fetchmail

der Rest ist ziemlich selbsterklärend. Der "forwarding smarthost"
ist der des Providers, z.B. '''smtp.meinprovider.de'''.

=== Default-Adresse ===

Manchmal möchte man eine Default-Mailadresse haben. Dann kann
jemand Mails an alle möglichen Adressen schicken, die alle in einem
einzigen Postfach ankommen. Hier kommt dann leider auch eine Menge
Spam an. Andererseits kann man auf diese Art und Weise bei jedem
Mal, wenn man eine Mailadresse angibt, eine andere "Einwegadresse"
angeben und diese nur kurzfristig in sein Alias-File aufnehmen.
Dennoch geht nichts verloren, wenn man ab und zu sein
Default-Postfach mal überfliegt bzw. scannt. 

Dazu erstellen wir einen Default-Router. Dieser Router soll
einspringen, wenn die Auslieferung einer Mail an eine lokale
Adresse gescheitert ist. Dann soll er die Mail an einen
default-User schicken. Hierzu habe ich die folgende Datei
''/etc/exim4/conf.d/router/950_exim4-config_default_user''
erstellt:

  ### router/950_exim4-config_default_user
  ########################################
  #
  # erstellt von Thomas Bayen
  # Weiterleitung von Mails, die bisher nicht lokal
  # zugestellt werden konnten, an den User "defaultuser",
  # der dann in "/etc/aliases" einem wirklichen Benutzer
  # zugeordnet werden kann.
  #
  default_user:
    debug_print = "R: default_user for $local_part@$domain"
    driver = redirect
    domains = +local_domains
    local_parts = ! root
    data = defaultuser

Jetzt wird Mail, die nicht zustellbar ist, an den User
"defaultuser" zugestellt. In ''/etc/aliases'' kann nun ein Alias
für diesen eingerichtet werden, wenn man die Mails an einen
bestimmten User weiterreichen will (z.B. einen Admin oder ein
Spam-Archiv-Postfach).

Übrigens gibt es je nach Anwendungsfall auch die Möglichkeit, den
Alias-Router so anzupassen, daß man im Alias-File Joker verwenden
kann. Auch damit ist eine weit feinere Zuordnung von Adressen zu
Postfächern möglich. Allerdings werden die Alias-Files vor den
User-Postfächern geroutet. Wenn man dort also ein Default-Alias mit
"*" einträgt, würden keine lokalen Postfächer mehr erreicht. Man
kann natürlich auch beides kombinieren und unseren
Default-User-Router statt an eine feste Adresse zu senden in einem
zweiten Alias-File, das Joker enthält, suchen lassen. Die
data-Zeile sähe dann z.B. so aus:

  data = ${lookup{$local_part}lsearch*{/etc/defaultmailboxes}}


== Backup aller durchlaufenden Mails ==

''...dieses Kapitel beschreibt noch die exim3-Konfiguration.''


Mein erster größerer Server ist seinerzeit von einem bösen Menschen
gehackt worden. Dieser Hack hat mein System analysiert und sodann
eine Mail an sein "Herrchen" geschickt, in dem genau stand, wie
mein System konfiguriert ist. Durch Zufall habe ich diese Mail
abgefangen und somit den Befall erkannt. Dies hat mich auf die Idee
gebracht, das man alle Mails, die mein System durchlaufen, irgendwo
speichern sollte, um sie kontrollieren zu können. Dies hat auch
andere Vorteile, weil man hiermit eine Art automatischen
"Send"-Ordner erzeugen kann. Eine Firma kann so Ihren gesamten Ein-
und ausgehenden Mailverkehr archivieren. Evtl. kann auch eine
Überwachung von Teilnehmern im Netz interessant sein. Hier ist
allerdings der Datenschutz zu beachten und man sollte die
Teilnehmer auf jeden Fall hiervon informieren.

Es kommen verschiedene Stellen in Frage, an denen Mails kopiert
werden können. Man kann dies als einen Router, beim Forwarding, als
User-Filter oder als System-Filter machen. Nach langem Lesen der
Doku habe ich entschieden, dass für mich ein
[http://www.exim.org/exim-html-4.20/doc/html/spec_39.html System
Filter] das Mittel der Wahl ist. Dieser Filter greift ziemlich
früh, bevor die Mail irgendwie bearbeitet oder geroutet wird und
erfasst so wirklich alles, was in den Mailserver hineingeht.

Der Filter selber ist eine Datei, die in der in der
[http://www.exim.org/exim-html-4.20/doc/html/filter_toc.html
Filter-Doku] beschriebenen Syntax Filter-Befehle enthalten kann.
Diese Datei muss dann mit einem ''system_filter''-Kommando in der
Konfigurationsdatei von Exim aufgerufen werden.

Da ich die Mails in einem eigenen Account sammeln möchte, habe ich
zuerst mit '''adduser mailarchiv''' einen solchen angelegt.

Mein Filter ist in '''/etc/exim/thomasbayen.systemfilter''':

  # Exim Filter  <<-- Diese Zeile muss hier stehen, nicht
entfernen!
  unseen deliver mailarchiv@meinedomain.de

Der '''deliver'''-Befehl schickt die Mail an die angegebene Adresse
(ob die Domain hier angegeben werden _muss_, habe ich nicht
probiert). Das '''unseen''' sorgt dafür, dass die Mail nicht
bereits als Zugestellt gilt, sondern noch normal weiterbehandelt
wird.

In '''/etc/exim/exim.conf''' habe ich folgende Zeile (am Anfang,
d.h. innerhalb des ersten Teils vor dem ersten ''end''/''begin'')
eingefügt, damit der Filter auch als Systemn-Filter aufgerufen
wird:

  # -TB-
  # fuer Exim 3.x:
  message_filter=/etc/exim/thomasbayen.systemfilter
  # fuer Exim 4.x:
  # system_filter=/etc/exim/thomasbayen.systemfilter

Nun noch mit '''/etc/init.d/exim restart''' den Mailserver neu
gestartet und Fertig! Wichtig ist es, das Setup am Anfang
vorsichtig zu testen und erstmal sicherzustellen, dass keine
wichtigen Mails ankommen, weil eine defekte Konfiguration auch
schonmal Mails verschwinden lassen kann! -- ThomasBayen

== Kombination mit SpamAssassin ==

Am einfachsten kann man SpamAssassin per ''.procmailrc'' oder per
''.forward''-Datei aufrufen. Dies bedeutet natürlich, dass jeder
User das speziell einrichten kann/muss. Eine Alternative ist eine
zentrale Konfiguration. Hierzu gibts zwei interessante Links:

* http://www.timj.co.uk/linux/exim.php
* http://dman13.dyndns.org/~dman/config_docs/exim-spamassassin

== Kombination mit Challenge/Response Spamfilter ==

Bisher habe ich hiermit noch keine Erfahrung. Da FranzLischka aber immer davon redet, habe ich hier mal Links gesammelt. Ich bitte dabei, die ausführliche Diskussion über Probleme dieses Verfahrens zu beachten. Eine gute Linkliste zum Thema ist http://spamlinks.net/filter-cr.htm Ein scheinbar unter Debian Linux sinnvoll einsetzbares Programm ist [TMDA|http://tmda.net/].

== IMAP ==

Als weitere Kombination bietet sich ein IMAPMailServer an.


[{Tag ServerDienste EMail}]