Zwei Exim-Server und Weiterleitungen

Zwei Exim-Server und Weiterleitungen

es ist eine etwas unklare Sache, die ich zu lösen versuche, deshalb muss ich Sie um Hilfe bitten.

Unsere Benutzer sind auf zwei große Gebäude verteilt, die weit voneinander entfernt sind. Daher haben wir zwei unabhängige Mailserver eingerichtet, sodass jeder Server E-Mails für sein Gebäude bereitstellt. Der Hauptzweck besteht darin, dass Benutzer bei Verbindungsverlust ihren Kollegen im eigenen Gebäude E-Mails senden können, auch wenn externe E-Mails vorübergehend nicht verfügbar sind. Jedes Gebäude verwendet seine eigene Maildomäne. Die Einrichtung ist trivial und funktioniert einwandfrei.

Zur Bekämpfung von Spam und auch zu Verwaltungszwecken haben wir auf jedem Server dieselbe (vollständige) Benutzertabelle, aber jedes Feld ist mit „B1“ oder „B2“ gekennzeichnet, um anzuzeigen, in welchem ​​Gebäude sich der jeweilige Benutzer befindet. Wir haben Tabellen mit Postfächern und Weiterleitungen früher in SQL-Tabellen gespeichert, daher ist es kein Problem, sie zu unterscheiden, indem wir die Bedingung „WHERE which_server='B1'“ zu den Exim-Konfigurationszeilen hinzufügen.

Unerwartet war die Duplizierung von E-Mails bei Weiterleitungen/Aliasen. Hier ist das Beispiel:

Nehmen wir an, BenutzerBenutzer1InGebäude 1verwendet Postfach[email geschützt], während BenutzerBenutzer2InGebäude 2verwendet Postfach[email geschützt]. Soweit alles kein Problem, sie können sich gegenseitig Mails schicken und auch externe Benutzer können sie per Mail kontaktieren.

Stellen wir uns nun vor, wir fügen auf jedem Mailserver einige Weiterleitungen hinzu. Sagen wir so:

[email geschützt]->[email geschützt],[email geschützt],[email geschützt]

Jetzt als Mail von[email geschützt]geht zu[email geschützt], der Mailserver auf Server1 erstellt drei Kopien davon und sendet diese als drei separate Nachrichten weiter (zwei davon gehen an den Server von b2.domain.com, eine an die Server von Gmail). Wenn diese Nachrichten nun beim Server von b2.domain.com ankommen, führt dieser die Umleitung erneut durch (unter Verwendung seiner eigenen SQL-Tabellen) und dupliziert so die Nachrichten.

Ich habe das Gefühl, dass mir eine elegante Lösung dafür fehlt. Könnten Sie mir bitte den richtigen Weg zeigen?

Dank im Voraus!

Antwort1

Sie haben einen starken Indikator, den Sie bei der Analyse der Erweiterung Ihrer Aliastabelle nicht verwenden: ob die E-Mail von außen kommt oder aus dem anderen Gebäude (ein oder mehrere Hostnamen oder IPs). Wenn das Problem darin besteht, dass die Aliaserweiterung in B1 doppelt fehlschlägt, wenn sie von B2 gesendet wird, überspringen Sie die Aliaserweiterung, wenn die Quelle B2 ist. In einer ACL würde dies mit einem erfolgen hosts = !+B2, in Ihrem Fall müssen Sie diese Entscheidung jedoch auf den Routern treffen. Um dies zu tun, würde ich in der Verbindungs-ACL oder Mail-ACL Folgendes festlegen:

warn hosts = +B2
     set acl_c_other_building = 1

Anschließend können Sie im Alias-Router die Bedingung hinzufügen, dass „False“/„Nein“ zurückgegeben wird, wenn der Befehl aus dem anderen Gebäude kommt:

condition = ${if eq{$acl_c_other_building}{1} {no}{yes}}

Mit dieser Logik sind vermutlich die folgenden Router diejenigen, die die Postfachzustellung handhaben und diese Nachricht lokal zustellen.

Wenn es wie erwartet funktioniert, machen Sie im anderen Gebäude den umgekehrten Vorgang.

Antwort2

Ihr Hauptproblem scheint eine inkonsistente Mailumgebung zu sein. Einerseits behandeln Sie die beiden Server wie identische interne Server (dieselben Aliasregeln), andererseits sind sie nur für eine einzige Domäne zuständig, was dazu führt, dass sie sich gegenseitig wie jeden anderen Remote-Mailserver behandeln, sodass Umleitungsduplikate unvermeidlich sind.

Anstatt zu versuchen, dieses verteilte Setup auf der MTA-Routing-Ebene zu handhaben, würde ich vorschlagen, dass Sie beiden Servern die gleiche Domänenkonfiguration geben, was bedeutet, dass beide Server Ihre beiden Domänen als lokal behandeln und an lokale Postfächer liefern und diese Postfächer dann zwischen den Servern replizieren, zum Beispiel mit DovecotsMaster-Master-Replikation

verwandte Informationen