Ausnahmen bei Verwendung von relayhost mit smtp_bind_address für bestimmte Domains auf einem Mailrelay

Abstract

Wieder einmal ein Maildomain-Umzug. Der Kunde nutzt zum Versenden ein Mailrelay. Die bisherigen Mailadressen können nicht sofort benannt werden, das Mailrelay leitet normalerweise alles über einen Relayhost nach außen. Eine temporäre Ausnahme von Relayhost wird benötigt. Um die IP-Reputation nicht zu gefährden, soll zusätzlich eine alternative IP-Adresse zum Versenden verwendet werden.

Wieder einmal ein Maildomain-Umzug. Der Kunde nutzt zum Versenden ein Mailrelay. Die bisherigen Mailadressen können nicht sofort benannt werden, das Mailrelay leitet normalerweise alles über einen Relayhost nach außen. Eine temporäre Ausnahme von Relayhost wird benötigt. Um die IP-Reputation nicht zu gefährden, soll zusätzlich eine alternative IP-Adresse zum Versenden verwendet werden.

Note

Diese Anforderung tritt nicht jeden Tag auf. Im Wesentlichen geht es darum, wie man einerseits den Parameter relayhost für bestimmte Senderdomains in Postfix umgehen kann und gleichzeitig eine alternative IP-Adresse zum Versenden einsetzt.

Ich gehe hier davon aus, dass E-Mails auf dem Mailrelay nur mit Authentifizierung über SASL eingeliefert werden dürfen. In der main.cf finden sich dann ähnliche Einträge:

smtpd_sender_login_maps = hash:/etc/postfix/sasl_senders
@relaydomain.de relay_user

Wenn die Mailadressen bisher nicht bekannt sind, müssen "catchall"-Adressen herhalten:

relay_recipient_maps = hash:/etc/postfix/relay_recipients
@relaydomain.de OK

relay_domains = hash:/etc/postfix/relay_domains
relaydomain.de OK

Der Standardausgang ist ein Relayhost, der nur über ein privates Netzwerk erreichbar ist. Im realen Setup steht zusätzlich zur eigentlichen Internet-IP-Adresse 5.6.7.8 eine weitere offizielle Loadbalancer-IP-Adresse zur Verfügung, auf der die anderen Mailserver über dem submission-Port (587/tcp) mit STARTTLS Mails einliefern.

Note

Die Darstellung der Loadbalancer-IP-Adresse und deren Setup habe ich hier weggelassen.

relayhost = 192.168.0.1
inet_interfaces = 127.0.0.1, 192.168.0.2, 5.6.7.8

Definition der Ausnahme in main.cf:

smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/check_sender_access,
                           reject_unknown_sender_domain,
                           reject_non_fqdn_sender,
                           permit_mynetworks,
                           reject_unlisted_sender,
                           check_sender_access hash:/etc/postfix/check_sender_access_relay_special_domains,
                           ...

/etc/postfix/check_sender_access_relay_special_domains
relaydomain.de FILTER out_relaydomain.de

Die dazzu passende master.cf:

out_relaydomain.de unix  -       -       n       -       -       smtp
       -o smtp_bind_address=5.6.7.8
       -o smtp_fallback_relay=
       -o relayhost=

Das gezeigte Beispiel mit FILTER sollte sich auch in anderen Setups verwenden lassen, allerdings kann man Mailrelays natürlich auch von Grund auf anders planen. Anstatt relayhost ließen sich die Anforderungen auch mit transports umsetzen. In dem Zusammenhang gäbe es andere Möglichkeiten, Ausnahmen zu definieren.

Robert Schetterer, 03. February 2014

   Postfix