Ich benutze exim4
als Mailserver unter Debian und Ubuntu. Da meine
Server untereinander per VPN verbunden sind, möchte ich Mails an mich
selbst nicht erst an den Smarthost meines Providers schicken, um sie
dann wieder dort abzuholen. Stattdessen sollen diese Mails direkt bei
meinem lokalen Mailserver abgegeben werden. Außerdem verbleiben die
Mails dann komplett im VPN und müssen nicht durchs „böse“ öffentliche
Internet.
gezieltes Mailrouting
Das Vorhaben lässt sich mit Exim problemlos umsetzen und ist unter
Debian sogar schon vorbereitet: Man braucht nur die Datei
/etc/exim4/hubbed_hosts
anzulegen.
- interne.domain.tld: mailserver.interne.domain.tld
- externe.domain.tld: mailserver.interne.domain.tld
Mit diesen Einstellungen gehen Mails an meine interne und externe
Domain nicht an den Smarthost meines Providers (der meine interne
Domain nicht mal kennt), sondern direkt an meinen internen Mailserver.
Fallback fällt flach
Aus Fallbackgründen (das VPN könnte ja mal wegbrechen oder jemand
könnte so dämlich sein, den zentralen Server abzuschalten, wenn er
wochenlang nicht zu Hause ist… *hust*) habe ich in der hubbed_hosts
pro Zeile mehrere Mailserver eingetragen, in der Hoffnung, dass der
zweite genommen wird, wenn der erste nicht erreichbar ist:
- interne.domain.tld: mailserver1.int.dom.tld:mailserver2.int.dom.tld
- externe.domain.tld: mailserver1.int.dom.tld:mailserver2.int.dom.tld
Aber Pustekuchen, das funktioniert nicht! Der DNS-Lookup auf
mailserver1
schlägt fehl und der zweite Mailserver wird komplett
ignoriert. Entweder bleibt die Mail dann liegen oder es erfolgt ein
Fallback auf den Smarthost (bzw. den nächsten definierten Router) – für letzteres muss man pass_on_timeout =
yes
in /etc/exim4/conf.d/router/150_exim4-config_hubbed_hosts
ergänzen.
Richtig machen, dann klappt’s
Nach etwas Googeln habe ich aber die Lösung gefunden – und jetzt
verstehe ich auch die Exim-Anleitung, da steht das nämlich auch so
drin ;-) Man muss die Hosts in der Routing-Liste durch einen Eintrag
+
trennen, damit sie als unterschiedliche Gruppen betrachtet
werden – eine Gruppe schlägt immer als ganzes fehl, daher wird in der
obigen Konfiguration der zweite Server ignoriert, wenn der erste
fehlschlägt. (Das Verfahren soll wohl den MX-Mechanismus aus dem DNS
mit unterschliedlichen numerischen Werten nachbauen.)
Hiermit klappt es also (man beachte, dass die Liste rechts jetzt aus
drei Einträgen besteht: zwei Hosts und einem Gruppentrenner):
- interne.domain.tld: mailserver1.int.dom.tld:+:mailserver2.int.dom.tld
- externe.domain.tld: mailserver1.int.dom.tld:+:mailserver2.int.dom.tld
Wenn mailserver1
weg ist, wird jetzt an mailserver2
zugestellt. Toll!
Universell benutzbar
Ich habe einige Rechner, die sämtliche Mail an meinen internen
Mailserver weitergeben, dort wird dann eventuell nötiges Relaying
„nach draußen“ übernommen.
In dieser Konstellation benutze ich keine keine hubbed_hosts
,
sondern setze lediglich den Eintrag dc_smarthost
in
/etc/exim4/update-exim4.conf.conf
auf meinen Mailserver, damit dieser als
Smarthost dient.
Die Variable dc_smarthost
ist ebenfalls eine Routing-Liste,
dementsprechend funktioniert auch dort der Trick von oben: Mit dem
Gruppentrenner +
lassen sich auch an dieser Stelle weitere Server
als Fallback setzen.
Ich mag Exim
Auch, wenn ich nur alle Jubeljahre etwas an der Konfiguration ändere
und darum alles andere als fit in der Materie bin: Bis jetzt hat mich
Exim noch immer alles mit sich machen lassen, was ich brauchte, und
die Konfiguration war – spätestens im Nachhinein ;-) – immer logisch.
Ich mag das Programm!