Postfix als Backup MX einrichten

Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>

Diese Anleitung veranschaulicht, wie man einen Postfix Mailserver als einen Backup Mail Exchanger für eine Domain einrichtet, sodass er Mails für diese Domain akzeptiert für den Fall, dass der primäre Mail Exchanger ausfällt oder nicht erreichbar ist und die Mails an den primären MX weiterleitet, sobald dieser wieder an ist.

Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

Ich möchte einen Backup MX für die Domain example.com einrichten. In diesem Beispiel heißt der primäre MX für example.com mx1.example.com (IP Adresse 1.2.3.4), also nenne ich den Backup MX mx2.example.com (IP Adresse 1.2.3.5).

Ich habe MX Einträge für example.com erstellt, die wie folgt aussehen:

example.com. 86400 IN MX 10 mx1.example.com.
example.com. 86400 IN MX 20 mx2.example.com.

Es ist wichtig, dass der primäre MX eine niedrigere Nummer (10) hat und daher eine höhere Priorität als der Backup MX (20).

Ich gehe davon aus, dass Postfix auf mx2.example.com bereits installiert ist und funktioniert.

2 Konfiguration von Postfix auf mx2.example.com

Um aus mx2.example.com einen Backup MX für die Domain example.com zu machen, müssen wir nur drei Zeilen in /etc/postfix/main.cf ändern und hinzufügen.

vi /etc/postfix/main.cf

Vergewissere Dich zunächst, dass smtpd_recipient_restrictions beinhaltet permit_mynetworks und reject_unauth_destination, etwas in der Art sollte also in Ordnung sein:

[...]
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
[...]

Dann müssen wir example.com dem relay_domains Paramater hinzufügen; falls es noch keinen relay_domains Paramater in /etc/postfix/main.cf gibt, wird das Folgende genügen:

[...]
relay_domains = $mydestination, example.com
[...]

Letztlich fügen wir einen leeren relay_recipient_maps Parameter /etc/postfix/main.cf hinzu:

[...]
relay_recipient_maps =
[...]

(Auf diesem Wege müssen wir keine Liste von gültigen E-Mail Adressen für ein Backup festlegen, was eine ziemlich entmutigende Aufgabe wäre, wenn man Hunderte von E-Mail-Konten verwalten muss.)

Eine wichtige Sache muss ich noch hinzufügen: Du darfst nicht example.com in den folgenden Parametern in /etc/postfix/main.cf aufführen:

  • mydestination
  • virtual_alias_domains
  • virtual_mailbox_domains

Das war es schon. Jetzt müssen wir nur noch Postfix neu starten:

/etc/init.d/postfix restart

3 Testen

Um den neuen Backup MX zu testen, stoppen wir den MTA (Postfix, Sendmail, Exim, etc.) auf mx1.example.com und senden eine E-Mail von einem entfernten Server an ein example.com Konto (z.B. someuser@example.com).

Wenn Du Zugriff auf das Mail Log auf dem entfernten (sendenden) Server hast, solltest Du etwas in der Art darin vorfinden:

Jun 6 18:29:16 mail postfix/smtp[17746]: AF814144146: to=<someuser@example.com>, relay=mx2.example.com[1.2.3.5], delay=1, status=sent (250 2.0.0 Ok: queued as DCA5A1BF40F)

Wie Du sehen kannst, wurde die Mail an mx2.example.com anstelle von mx1.example.com geschickt, da mx1.example.com nicht erreichbar ist. Lass uns jetzt einen Blick auf das Mail Log von mx2.example.com werfen:

Jun 6 18:29:16 mx2 postfix/qmgr[3049]: DCA5A1BF40F: from=<falko@blabla.tld>, size=892, nrcpt=1 (queue active)
Jun 6 18:29:16 mx2 postfix/smtpd[3051]: disconnect from mail.blabla.tld[1.2.3.6]
Jun 6 18:29:16 mx2 postfix/smtp[3057]: connect to mx1.test1.de[1.2.3.4]: Connection refused (port 25)
Jun 6 18:29:16 mx2 postfix/smtp[3057]: DCA5A1BF40F: to=<someuser@example.com>, relay=none, delay=0.07, delays=0.03/0.02/0.01/0, dsn=4.4.1, status=deferred (connect to mx1.test1.de[1.2.3.4]: Connection refused)

mx2.example.com hat die Mail akzeptiert und versucht sich mit mx1.example.com zu verbinden, um sie an den primären MX zu senden. Da der pirmäre MX nicht funktioniert, kann mx2.example.com die Mail nicht senden und behält sie in der Mailliste bis mx1.example.com wieder verfügbar ist.

Nun starten wir den MTA auf mx1.example.com erneut. Der Backup MX wird die aufgehaltene Mail nicht sofort senden, jedoch solltest Du nach ein paar Minuten etwas in der Art im Mail Log von mx2.example.com sehen:

Jun 6 18:56:44 mx2 postfix/qmgr[3080]: DCA5A1BF40F: from=<falko@blabla.tld>, size=892, nrcpt=1 (queue active)
Jun 6 18:56:45 mx2 postfix/smtp[3083]: DCA5A1BF40F: to=<someuser@example.com>, relay=mx1.example.com[1.2.3.4]:25, delay=1648, delays=1648/0.09/0.4/0.12, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 167995B0109)

Die Mail wurde an den primären MX gesendet, Du siehst Folgendes in dem Mail Log:

Jun 6 18:56:45 mx1 postfix/local[4963]: 167995B0109: to=<someuser@server1.example.com>, orig_to=<someuser@example.com>, relay=local, delay=0.54, delays=0.08/0.02/0/0.43, dsn=2.0.0, status=sent (delivered to command: /usr/bin/procmail -f-)

Es sind also keine Mails verloren gegangen während mx1.example.com nicht funktionierte und Benutzer können nun weiter ihre Mails von mx1.example.com abrufen.

4 Links

Das könnte dich auch interessieren …