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 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 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:

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.

IMAP #

Als weitere Kombination bietet sich ein IMAPMailServer an.

Tags:  ServerDienste, EMail

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-9) was last changed on 30-Mar-2009 23:09 by Peter Hormanns