Howto: Postfix als Backup MX einrichten

E-Mail als asynchrone Kommunikationsform ist, was die Zustellung der Nachrichten angeht, sehr tolerant. Sollte der Mailserver des Empfängers mal nicht erreichbar sein, wird im Allgemeinen mehrere Stunden bis Tage versucht, die Mail doch zuzustellen. Nach Ablauf dieses Zeitraumes erhält der Absender bei Nichtzustellung einen non-delivery-report. Welcher Postbote kommt schon zwei Mal?

Um mein Mailsystem ausfallsicherer zu machen, habe ich Postfix auf meinem zweiten Server nun als Backup MX für den ersten eingerichtet. Im Gegenzug ist der erste Server Backup MX für die auf dem zweiten Server gehosteten Domains. Und so gehts: Die main.cf muss bei dieser “gekreuzten” Konfiguration an drei Stellen angepasst werden: relay_domains, permit_mx_backup_networks sowie die smtpd_recipient_restrictions:

/etc/postfix/main.cf:
relay_domains = $mydestination, hash:/etc/postfix/maps/relay_domains
...
permit_mx_backup_networks = {IP-Adresse des Backup-Mx}/32
...
smtpd_recipient_restrictions =
permit_mynetworks,
permit_mx_backup,
...

/etc/postfix/maps/relay_domains:
domain.de anything
domain2.de anything
...

Danach ein postmap relay_domains sowie ein /etc/init.d/postfix restart und der Backup-MX ist bereit. Nun noch die entsprechenden Änderungen auf dem anderen Server anwenden und man hat ein wesentlich ausfallsichereres Mailsystem.
Bei Ausfall eines Servers nimmt der andere die Mails entgegen und stellt sie dem ersten bei erneuter Verfügbarkeit zu.

Selbstverständlich müssen die DNS-Zonefiles noch angepasst werden:
$TTL 1H
@ IN SOA server.domain.tld. hostmaster.domain.tld. (
2007031402 ; serial
10800 ; refresh
3600 ; retry
604800 ; expiry
86400) ; minimum

IN NS ns.domain.tld.
IN NS ns2.domain.tld.

IN A 12.34.56.78
IN MX 10 mx
IN MX 20 mx2
IN TXT "v=spf1 mx ptr -all"

* IN A 12.34.56.78
IN MX 10 mx
IN MX 20 mx2

mx IN A 12.34.56.78
mx2 IN CNAME backupmx.domain.tld.

Das Füllen der relay_domains ist momentan noch Handarbeit, aber dafür werde ich wohl noch ein Skript erstellen, welches die Datei zyklisch aus der Domain-Tabelle in der MySQL-Datenbank füllt.

8 Replies to “Howto: Postfix als Backup MX einrichten”

  1. Und du nimmst alle Mails an alle Empfänger an? Keine Validierung ob es die auch wirklich gibt? Damit fängst du dir entweder eine Menge Müll ein – oder (wenn du bei der Zustellung von secondary zu primary dann erst erkennst was valide ist) du erzeugst “Backscatter”. Beides unschön. Schau dir also mal die Postfix Doku zu relay_recipient_maps an.

    Übrigens: Viele Spammer gehen direkt auf den Secondary – weil da oft weniger strikte Spamfilter laufen.

  2. Danke für den Hinweis, ich werde mir es mal anschauen.

    Das mit dem “direkt auf den Secondary” ist mir bei der Durchsicht meiner Logs auch schon aufgefallen. Allerdings laufen bei mir auf beiden Servern die gleichen Spamfilter 🙂

  3. Hallo nochmal,

    und schon werden die Dateien automatisch generiert. Ein paar Zeilen PHP und ein Shellskript, was per Cron alle 6h ausgeführt wird, auf dem jeweils anderen Server und schon klappts auch mit den relay_recipient_maps:


    mail from: test@test.de
    250 2.1.0 Ok
    rcpt to: test@oark.net
    550 5.1.1 : Recipient address rejected: User unknown in relay recipient table
    rcpt to: webmaster@oark.net
    250 2.1.5 Ok

  4. Eindeutig ein bookmark-must-have! Sobald ich nen gemütlichen Stellplatz mit schönem, günstigem Uplink für meinen kleinen HP NetServer gefunden habe, werde ich mir diesen Artikel für das Setup vom Backup MX wohl noch einmal gründlicher zu Gemüte ziehen.

    Top!

  5. Da ist noch ein Problem: Ein MX-Entry muss auf ein A-Entry zeigen. Du verwendest aber ein CNAME-Entry für den mx2, und das ist *verboten* (siehe RfC).

  6. Du hast Recht, das ist mir irgendwann auch aufgefallen und ich habs “heimlich” korrigiert 🙂

    Danke für den Hinweis.

Leave a Reply

Your email address will not be published. Required fields are marked *