Mit Postfix transport_maps an zwei Server gleichzeitig routen

postfixNormalerweise werden Mails nach den MX-Records im DNS geroutet — und hier können unter anderem mehrere MX-Records mit gleichen oder unterschiedlichen Prioritäten parallel angegeben werden, um Ausfallsicherheit und Lastverteilung zu realisieren. Wenn jedoch manuelle Routing-Einträge in der transport_maps von Postfix vorgenommen werden, ist die Angabe mehrere Ziel-Hosts nicht möglich — es sei denn, man wendet einen DNS-Trick an.

Ein Eintrag in der transport_map hat folgenden Syntax:

example.com        smtp:[mailserver1.example.com]

Die eckigen Klammern weisen Postfix an, daß nach dem A-Record (=der IP-Adresse) von mailserver1.example.com gesucht werden soll. Würden die eckigen Klammern fehlen, so sucht Postfix nach dem MX-Record und (falls dieser nicht vorhanden ist) erst dann nach den A-Record.

Ein redundantes Routing läßt sich jetzt leicht aufsetzen, indem unter einer beliebigen (aber eben erreichbaren) DNS-Zone entsprechende MX-Records eingetragen werden, auf die dann in der transport_maps verwiesen wird. Ich nenne das oft eine „Meta-Domain“, weil dieser Eintrag in der Praxis ausschließlich benutzt wird, um Postfix passende MX-Records zu präsentieren.

Ein Beispiel macht es deutlich: Ein Provider mit hosted Spamfilterung empfängt die Mails eines Kunden „example.com“, die MX-Records zeigen also auf den ISP. Gleichzeitig will der Provider nach der Filterung die Mails an die beiden Mail-Relays des Kunden redundant weiterleiten.

Der Provider setzt sich darum für jeden Kunden eigene MX-Records in seinem eigenen DNS-Zonenfile auf:

example.com.heinlein-support.de.    MX 10  mx1.example.com.
example.com.heinlein-support.de.    MX 10  mx2.example.com.

für den Fall, daß mx1.example.com bereits in den DNS-Daten des Kunden richtig mit A-Records definiert ist. Für den Fall, daß die Ziel-Hostnamen noch nicht feststehen, kann der Provider sich diese ebenfalls selbst definieren:

example.com.heinlein-support.de.    MX 10  mx1.example.com.heinlein-support.de.
example.com.heinlein-support.de.    MX 10  mx2.example.com.heinlein-support.de.

mx1.example.com.heinlein-support.de.     A  xxx.xxx.xxx.xxx
mx2.example.com.heinlein-support.de.     A  xxx.xxx.xxx.xxx

und ist so vom DNS des Kunden unabhängig (was Vor- und Nachteile hat).

Anschließend kann der Provider in seinen transport_maps von Postfix die Mail des Kunden bequem nach diesen MX-Records routen, natürlich ohne eckige Klammern:

example.com        smtp:example.com.heinlein-support.de

Fertig!

Auf diese Art und Weise lassen sich auch komplexe interne Mailroutings zwischen MX-Gateways und Spam-/Virenfiltern hervorragend und leicht absichern, ohne Loadbalancer oder andere Sachen in Anspruch nehmen zu müssen. Auch gewichtetes Standortübergreifendes Routing ist so über unterschiedlich gewichtete MX-Records möglich.

 

 

 

 

 

 

Dieser Beitrag wurde unter Blog, Howtos, Mailserver abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

3 Kommentare zu Mit Postfix transport_maps an zwei Server gleichzeitig routen

  1. Steffen sagt:

    Nach Stundenlangem suchen war das hier wohl der Artikel im Netz der so nahe an mein Problem ran kam wie es wohl nur geht.

    Es ist auch eher speziell.

    Ich soll eine Mail verschicken als „mail@intern.de“ and mehrere „bla@intern.de“ … der Server steht aber extern. Also sagt der gegenüber mail server das „mail@intern.de“ hier nicht rein darf weil der ja schon „drin“ ist.

    Macht Sinn. Somit weniger SPAM.

    Also bekome ich die Anweisung die Mail nicht an den offiziellen im MX eingetragenen Mail Server zu schicken sondern an michkenntniemandmailserver.intern.de … welche dieMail dan intern korrekt verschicken würde.

    Schlau wie ich war dachte ich mir erst … Mensch das trägt man mal kurz in die hosts Datei ein und fertig. Pustekuchen. Für pingund sonstige Scherze zieht das natürlich aber nicht für postfix.

    Mail empfangen und mit postifx dann je nach Absender zu verteilen, zu leiten, etc. geht auch prima.

    Aber eben das „leiten beim verschicken“ bekomme ich irgendwie nicht aus der Doku rauskristalisiert.

    Irgend eine Idee?

  2. Sven sagt:

    Im Zeitalter von TLS Verschlüsselung wird das nicht mehr klappen. Die Mailserver müssen DNS Namen haben, die mit den TLS Zertifikaten übereinstimmen.

  3. Doch, das klappt problemlos.

    Die Server haben ja zwei verschiedene Hostnamen — mx1 und mx2 — und Postfix erkennt beide Namen über die MX-Records. Postfix weiß ganz genau mit wem er redet und das TLS-Zertikat muß halt zum jeweiligen Hostnamen passen.

    Da ist kein Problem im Weg…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.