Howto: Postfix als Backup MX mit SPF

Durch den Umzug auf den neuen Server und der Restvertragslaufzeit des Alten habe ich ja jetzt sozusagen einen vServer als "spare". Was macht man nun sinnvolles damit?!
Ich habe mich mal für einen backup-mx entschieden. Wenn das alles gut läuft und ich nach dem alten Vertrag noch denke dass ich sowas brauche, werde ich mich einen schönen passenden kleinen Server nazu nehmen.

Aber nun zum Thema.
Was ist ein backup-mx? Eigentlich ganz einfach. Ein backup-mx ist ein Ausfallserver für den primären Email-Server. Angedacht ist, dass wenn bender.morontv.de ausfallen sollte, hermes.morontv.de immernoch verfügbar ist, die eMail annimmt und solange in der eigenen Warteschlange hält, bis er sie an bender.morontv.de zustellen kann.
Wer alles Backup für wen ist, wird in den allgemeinen DNS-Informationen einer Domain festgelegt.
Hier mal ein Auszug aus einem "host -a morontv.de"

morontv.de              A       85.131.189.108
morontv.de              TXT     "v=spf1 ip4:85.131.189.108 ip4:80.82.212.218 ip:89.110.149.90 a mx ~all"
morontv.de              MX      5 bender.morontv.de
morontv.de              MX      10 hermes.morontv.de
morontv.de              NS      ns1.s-dns.de
morontv.de              NS      ns2.s-dns.de

Je kleiner der Zahlenwert vor dem MX-eintrag um so höher ist die Priorität.
Um den postfix auf hermes.morontv.de beizubringen dass er backup-mx für die Domain morontv.de ist, also auch für die Mails für bender.morontv.de verantwortlich ist, diese aber an bender.morontv.de weiterleiten soll, sowie der wieder verfügbar ist, muss man eigentlich recht wenig tun.

Folgende Änderungen muss man auf dem backup-mx, in meinem Fall hermes.morontv.de tun:

vim /etc/postfix/main.cf

Zuerst sollte man sicher gehen, dass permit_sasl_authenticated, permit_mynetworks und reject_unauth_destination vorhanden sind. Das sollte dann so aussehen:

smtpd_recipient_restrictions =
                permit_sasl_authenticated,
                permit_mynetworks,
                reject_unauth_destination,

Ist das gemacht, muss man folgendes in die main.cf eintragen:

relay_domains = $mydestination, morontv.de
relay_recipient_maps =

Durch das relay_recipient_maps = muss nicht jeder user von morontv.de (z.B. michael@morontv.de) einzeln angelegt werden.
Jetzt noch ein postfix reload und der backup-mx ist fertig zum Einsatz.

Da hab ich gedacht, schaun wir uns mal die Mail-Logs an - weil's so schön ist...
Also erstmal den primären Mailserver mit /etc/init.d/postfix stop angehalten...damit auch der backup-MX zum Einsatz kommt...
Dann habe ich von gmx.de eine email an michael@morontv.de geschickt und auf hermes auf eine Reaktion gewartet. Nach kurzer Zeit ist da auch was passiert - auf dem backup-mx:

Dec 21 23:47:48 v1351 postfix/smtpd[1473]: connect from mail.gmx.net[213.165.64.20]
Dec 21 23:47:48 v1351 postfix/policy-spf[1478]: handler sender_policy_framework: is decisive.
Dec 21 23:47:48 v1351 postfix/policy-spf[1478]: : Policy action=PREPEND Received-SPF: pass (gmx.de: 213.165.64.20 is authorized to use 
'xxx@gmx.de' in 'mfrom' identity (mechanism 'ip4:213.165.64.0/23' matched)) receiver=v1351.ncsrv.de; 
identity=mfrom; envelope-from="xxx@gmx.de"; helo=mail.gmx.net; client-ip=213.165.64.20
Dec 21 23:47:53 v1351 postfix/smtpd[1473]: C802119FBCF8A: client=mail.gmx.net[213.165.64.20]
Dec 21 23:47:53 v1351 postfix/cleanup[1496]: C802119FBCF8A: message-id=xxx@gmx.net
Dec 21 23:47:53 v1351 postfix/qmgr[23787]: C802119FBCF8A: from=xxx@gmx.de, size=1297, nrcpt=1 (queue active)
Dec 21 23:47:53 v1351 postfix/smtpd[1473]: disconnect from mail.gmx.net[213.165.64.20]

Jippie, GMX hat den backup-mx schonmal gefunden... und direkt danach kam dann auch:

Dec 21 23:47:53 v1351 postfix/smtp[1497]: connect to bender.morontv.de[85.131.189.108]: Connection refused (port 25)
Dec 21 23:47:53 v1351 postfix/smtp[1497]: C802119FBCF8A: to=michael@morontv.de, relay=none, delay=5.7, delays=5.7/0.04/0.04/0, dsn=4.4.1, status=deferred 
(connect to bender.morontv.de[85.131.189.108]: Connection refused)

Gut, is klar... weil bender war ja noch nicht gestartet... also wieder mit /etc/init.d/postfix start gestartet und gewartet bis der nächste Zustellversucht kommt...und der kam auch:

Dec 22 00:17:38 bender postfix/smtpd[30374]: connect from hermes.morontv.de[89.110.149.90]
Dec 22 00:17:39 bender postfix/policy-spf[30379]: handler sender_policy_framework: is decisive.
Dec 22 00:17:39 bender postfix/policy-spf[30379]: : Policy action=550 Please see http://www.openspf.org/Why?s=mfrom&id=xxx@gmx.de&ip=89.110.149.90&r=unknown
Dec 22 00:17:39 bender postfix/smtpd[30374]: NOQUEUE: reject: RCPT from hermes.morontv.de[89.110.149.90]: 550 5.7.1 : Recipient address rejected: 
Please see http://www.openspf.org/Why?s=mfrom&id=xxxx&ip=89.110.149.90&r=unknown; from=xxx@gmx.de to=michael@morontv.de proto=ESMTP helo=mail.morontv.de
Dec 22 00:17:39 bender postfix/smtpd[30374]: disconnect from hermes.morontv.de[89.110.149.90]

WTF?! Warum wurde die Mail abgelehnt!? - google Fragen...
Die SPF Schnittstelle zählt immer nur den vorhergehenden HOP und der kam ja von hermes.morontv.de und deswegen hat mein eigener backup-mx die SPF-Prüfung versemmelt. Das soll nachtürlich nicht sein und lässt sich auch recht einfach lösen. Nachdem ich ein bisschen die Postfix Acsess Seite gelesen habe, war alles klar. Mann kann mit check_client_access IP-Adressen oder Domains spezifizieren, auf die keinerlei Filter angewendet werden; denen also blind vertraut wird. Sollte bei seinem eigenem backup-mx ja auch so sein.

Also los - am primären Mailserver folgendes tun:
In der "/etc/postfix/main.cf" "check_client_access hash:/etc/postfix/backupmx" einfügen, dass es so aussieht:

smtpd_recipient_restrictions =
                permit_sasl_authenticated,
                permit_mynetworks,
                check_client_access hash:/etc/postfix/backupmx

dann

vim /etc/postfix/backupmx

(falls es die Daei nicht gibt, wird sie damit angelegt.) Und so siehts in meiner Datei aus:

89.110.149.90   OK

Man kann auch IPs komplett blocken - z.B. mit:

89.110.149.90   OK
66.249.93.104 REJECT

Wenn man die Datei fertig bearbeitet hat noch ein "postmap /etc/postfix/backupmx" und ein "postfix reload" und schon werden Mails von dieser IP nicht mehr gecheckt!

Dec 22 01:59:29 bender postfix/smtpd[31177]: connect from hermes.morontv.de[89.110.149.90]
Dec 22 01:59:29 bender postfix/smtpd[31177]: D3BD9E134A: client=hermes.morontv.de[89.110.149.90]
Dec 22 01:59:29 bender postfix/cleanup[31181]: D3BD9E134A: message-id=xxx@gmx.net
Dec 22 01:59:29 bender postfix/smtpd[31177]: disconnect from hermes.morontv.de[89.110.149.90]

WUNDERBAR!

funktioniert iwie nicht so ganz

Hallo,

ich habe es so wie hier steht gemacht.. habe auch ispcp auf dem 2. installiert ume in funktkionstüchtes postfix zu ahben.. habe es erweitert um die zeilen und habe auf dem primären den backup server ip eingetragen.. aber ich bekam die Rückmeldung

This is the mail system at host h915XXX.serverkompetenz.net.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

The mail system

<******@*******>: mail for XXXXXXXX.de loops back to myself

hab das ganze jetzt umgeworfen und hab es so gemacht das ich den MX der 20 ist und der primäre 10 das ich en genauso vom mailaufbau einrichte wie den anderne. denn beide werden nacheinander geprüft.. denke ist so besser..