Ich möchte von meinen Systemen aus je nach der Absender-Adresse unterschiedliche Smarthosts ansteuern. Sprich: Wenn ich
im MUA als vwegert@web.de
schreibe, soll die Mail zur Auslieferung an smtp.web.de
übergeben werden, wenn ich als
Absender meine Manitu-Adresse verwende, soll der dortige Smarthost verwendet werden und so weiter. Exim kann das mit ein
wenig Bastelei.
Erstmal lege ich mir eine Datei namens /etc/exim/smarthosts
an, in der ich die “Routing-Regeln” definiere. Die Datei
sieht so aus:
vwegert@web.de: smarthost=smtp.web.de auth_name=vwegert auth_pass=ganzgeheim
*@volker-wegert.de: smarthost=smtp.volker-wegert.de auth_name=vwegert auth_pass=nochgeheimer
Der Inhalt sollte eigentlich selbsterklärend sein. Wie man sieht, ist die Angabe von Wildcards in der Empfängeradresse
mglich. Da diese Datei sensitive Daten enthält, ist eine entsprechend restriktive Berechtigungsvergabe angebracht. Dann
kommt die exim.conf
dran. Aus der Router-Konfiguration wird der domain_literal
-Router auskommentiert (wenn das noch
nicht passiert ist) und durch folgenden Eintrag ersetzt:
smarthost_auto:
condition = ${extract{smarthost}{${lookup{$sender_address}wildlsearch{/etc/exim/smarthosts}{$value}fail}}}
driver = manualroute
domains = ! +local_domains
route_list = "* ${extract{smarthost}{${lookup{$sender_address}wildlsearch{/etc/exim/smarthosts}{$value}fail}}}"
transport = remote_smtp
Achtung: Die Reihenfolge der Router ist wichtig!
Das liest sich am besten als “Wenn in der Datei /etc/exim/smarthosts
eine Zeile gefunden werden kann, deren Schlüssel als Wildcard auf die Absenderadresse passt und in der ein Smarthost eingetragen ist, dann lege manuell als nächsten MTA auf der Route ebendiesen Smarthost fest und gib die Nachricht per SMTP weiter.”
Das reicht mir ganz knapp noch nicht, denn schließlich will ich mich auf der Gegenseite ja auch noch mit Passwort
melden. Dazu muß in den Transport remote_smtp
noch die Zeile
hosts_try_auth = smtp.volker-wegert.de:smtp.web.de
eingebaut werden. Außerdem gehört folgende Konfiguration in die authenticators
-Sektion:
cram_md5:
driver = cram_md5
public_name = CRAM-MD5
client_name = "${extract{auth_name}{${lookup{$sender_address}wildlsearch{/etc/exim/smarthosts}{$value}fail}}}"
client_secret = "${extract{auth_pass}{${lookup{$sender_address}wildlsearch{/etc/exim/smarthosts}{$value}fail}}}"
Und das sollte es eigentlich auch schon gewesen sein…