Mein Exim leitet alle eingehenden E-Mails an SMTP-Relays von Drittanbietern weiter. Diese verwenden SMTP-Authentifizierung (Benutzername/Passwort).
Es scheint, dass ich in diesem begin authenticators
Abschnitt der Exim-Konfiguration nur EINEN Benutzernamen/ein Passwort definieren kann. Ich möchte bestimmte E-Mails über ein Relay (mit eigener Benutzername/Passwort-Authentifizierung) und andere E-Mails über ein zweites Relay (dessen Benutzername/Passwort-Authentifizierung sich von der des ersten unterscheidet) weiterleiten.
Hier ist ein Großteil meiner Konfiguration. Die begin routers
Domänen in der +local_domains
Liste werden an weitergeleitet smtp-relay-1
und der Rest an smtp-relay-2
.
begin routers
my_domains_relay:
debug_print = "R: my_domains_relay for $local_part@$domain"
driver = manualroute
domains = +local_domains
transport = remote_smtp_smarthost
route_list = * "<+ smtp-relay-1.example.com:465"
host_find_failed = defer
no_more
smart_host_relay:
debug_print = "R: smart_host_relay for $local_part@$domain"
driver = manualroute
transport = remote_smtp_smarthost
route_list = * "<+ smtp-relay-2.example.net:465"
host_find_failed = defer
no_more
begin transports
remote_smtp_smarthost:
debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
driver = smtp
port = 465
hosts_require_tls = *
hosts_require_auth = *
protocol = smtps
begin authenticators
login:
driver = plaintext
public_name = PLAIN
client_send = ^my-username^top-secret-password
Ich möchte in diesem Abschnitt eine separate Authentifizierung mit Benutzername und Passwort definieren begin authenticators
und jede einem einzelnen Router/Transport zuweisen. Derzeit ist die Authentifizierung mit Benutzername und Passwort global und wird für alle Relays verwendet.
In der Exim-Dokumentation heißt es, dass der öffentliche Name mit einer vom Server angekündigten Authentifizierung abgeglichen wird. Wenn also beide meiner SMTP-Relays dies ankündigen, AUTH PLAIN
verwenden sie beide in der Konfiguration diesen einen Benutzernamen/dieses Passwort des Authentifikators. Ich hoffe, es gibt eine Einstellung, mit der ich eine Instanz des Authentifikators mit einem bestimmten Router/Transport verknüpfen kann, aber ich weiß nicht, wie das geht.
Antwort1
Sie können dazu die client_condition
Option „Authenticator“ nutzen (vgl.Abschnitt SMTP-Authentifizierungdes Handbuchs).
Exim akzeptiert höchstens zwei Authentifikatoren für einen bestimmten öffentlichen Namen: einen clientseitigen und einen serverseitigen Authentifikator.
Die von Ihnen gesuchte Funktionalität ist jedoch bereits in der Standardkonfiguration von Debian enthalten: Laden Sie dieexim4-configVerpacken und extrahieren Sie die Dateien (es ist ein ar
Archiv, das zwei tar
Archive enthält).
Die Datei /etc/exim4/conf.d/auth/30_exim4-config_examples
enthält Client-Authentifikatoren, die:
- das Passwort aus der Datei lesen
/etc/exim4/passwd.client
, so dass das Passwort nicht in der Konfiguration von Exim enthalten ist. Das Format der Datei ist eine Zeile pro Server im<servername>:<username>:<password>
Format, - Wählen Sie das Passwort entsprechend dem Host,
- sind gut getestet, sodass Sie die String-Erweiterungen von Exim nicht testen müssen.
Die Debian-Konfiguration läuft auf den folgenden Client-Authentifikator hinaus:
# this returns the matching line from passwd.client and doubles all ^
PASSWDLINE=${sg{\
${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$value}fail}\
}\
{\\N[\\^]\\N}\
{^^}\
}
plain:
driver = plaintext
public_name = PLAIN
.ifndef AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS
client_send = "<; ${if !eq{$tls_out_cipher}{}\
{^${extract{1}{:}{PASSWDLINE}}\
^${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}\
}fail}"
.else
client_send = "<; ^${extract{1}{:}{PASSWDLINE}}\
^${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}"
.endif
Antwort2
Im selben Authentifikator können Sie die if-Bedingung verwenden, um den Satz Benutzername:Passwort für die Authentifizierung auszuwählen. Sie benötigen jedoch die „Bedingung“, um auszuwählen, welches Relay zuerst verwendet werden soll.
Zum Beispiel für E-Mails an[email geschützt]verwendet smtp-relay-1.example.com, authentifiziert durch my-username:top-secret-password, und[email geschützt]verwendet smtp-relay-2.example.com, authentifiziert durch my-username2:top-secret-password2
Die Router und Transportmittel sind die gleichen
begin routers
my_domains_relay:
debug_print = "R: my_domains_relay for $local_part@$domain"
driver = manualroute
domains = +local_domains
transport = remote_smtp_smarthost
route_list = * "<+ smtp-relay-1.example.com:465"
host_find_failed = defer
no_more
smart_host_relay:
debug_print = "R: smart_host_relay for $local_part@$domain"
driver = manualroute
transport = remote_smtp_smarthost
route_list = * "<+ smtp-relay-2.example.net:465"
host_find_failed = defer
no_more
begin transports
remote_smtp_smarthost:
debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
driver = smtp
port = 465
hosts_require_tls = *
hosts_require_auth = *
Die Authentifikatoren müssen in etwa wie folgt geändert werden
begin authenticators
login:
driver = plaintext
public_name = PLAIN
client_send = ^${if eq{$domain}{domain1.com}\
{my-username}\
{my-username2}}\
^${if eq{$domain}{domain1.com}\
{top-secret-password}\
{top-secret-password2}}