(transparenter) SMTP Proxy für Loadbalancing

traced

Registered User
Hi! Sagt mal, kennt jemand von Euch/hat jemand von Euch sowas im Einsatz?

Für mich wäre hauptsächlich interessant dass der SMTP Proxy Mails annimmt, und an die dahinterliegenden Mailserver weiterleitet, bzw. verteilt.

Auch sollte der Proxy erkennen wann ein einzelner Server schlapp macht, bzw. nicht mehr antwortet, und diesen aus dem Pool nehmen. Loadbalancing der DNS RoundRobin Gedöns möchte ich lieber vermeiden.

Danke!!

viele Grüße
Basti
 
Pen ist zwar kein SMTP-Proxy, aber als TCP-Loadbalancer sollte er die gewünschten Funktionen mitbringen (hat ein Beispiel in der Doku). Pro Mail gibt es ja nur eine TCP-Session, was die Sache sehr einfach macht.
 
Hallo!
Ich kann zwar zur eigentlichen Frage nichts beitragen, dennoch würde mich interessieren, warum man soetwas machen sollte.

Bisher bin ich immer davon ausgegangen, das gerade SMTP eines der wenigen Dinge ist, bei dem man sich Gedanken um Proxy'ing bzw. Loadbalancing Gedanken machen muss.

Was spricht gegen den Einsatz der ganz normalen DNS MX Einträge?

mfG
Thorsten
 
Hi Thorsten,
in meinen "Ausmassen" würde das per MX noch reichen, das würde dann z.B. wie hier bei Googlemail aussehen:

Code:
# host googlemail.com
googlemail.com has address 66.249.91.83
googlemail.com has address 72.14.205.83
googlemail.com has address 209.85.171.83
googlemail.com mail is handled by 5 gmail-smtp-in.l.google.com.
googlemail.com mail is handled by 10 alt1.gmail-smtp-in.l.google.com.
googlemail.com mail is handled by 10 alt2.gmail-smtp-in.l.google.com.
googlemail.com mail is handled by 50 gsmtp147.google.com.
googlemail.com mail is handled by 50 gsmtp183.google.com.

Code:
# host alt1.gmail-smtp-in.l.google.com
alt1.gmail-smtp-in.l.google.com has address 74.125.45.27
alt1.gmail-smtp-in.l.google.com has address 74.125.45.114

Hier gibt es 5 MX Einträge, wo aber teilweise die MX Einträge wiederum mehrere IP Adressen haben, also sprich die A-Records der MX Einträge.

Für mich ging es hier aber auch erstmal mehr um die Theorie, weil ich in der Postfix Mailingliste gelesen habe, dass nach RFC z.B. nicht mehr als ein Dutzend MX Einträge möglich sind. Ausserdem gibts nach dem RoundRobin Prinzip kein wirkliches Loadbalancing, da es sein kann dass der erste Server im Pool hoffnungslos überlastet ist, und trotzdem noch angemailt wird.

Ausserdem, wenn Du nur zwei MX Einträge hast, also sagen wir 2 gleichwertige Server, und die beiden haben die selbe Priorität, der erste wird angemailt, reagiert aber nicht, dann gibt es für den versendenden MTA ja keinen BackupMX, weil beide die selbe Priorität haben.

Es ist auch nicht gegeben dass er beim nächsten zustellversuch den anderen MX nimmt, weil ja vielleicht die IP ein einem lokalen DNS Cache ist.

Deswegen bräuchte ich mindestens 4:

MX 10 server1
MX 10 server2
MX 50 server3
MX 50 server4

Oder verstehe ich hier etwas falsch?

Viele Grüße
Basti

Edit: Danke MKR für den Link, werd ich nachher gleich mal reinschauen!
 
Last edited by a moderator:
Hallo!
Wie es bei Google aussieht hast du ja bereits herausgefunden :). Eventuell habe ich dein Eingangsposting auch unterschätzt. Ich ging bisher davon aus, es geht um die Überbrückung eines temporären Ausfalls. Dafür eignen sich DNS MX Records durchaus.

Wenn du es professionell angehen willst, kommst du wohl um IP Loadbalancing nicht herum. Und so ewig viele MX Einträge brauchst du dann gar nicht mehr, da sich ja, wie du bereits schriebst, hinter der virtuellen IP für einen SMTP Server (fast) beliebig viele reale Mailserver verbergen können.

Nur bei solchen Konstellationen sollte man den / die LBs dann auch redundant auslegen. Ansonsten ist der Effekt gleich null, da dein LB dann der SPOF ist.

mfG
Thorsten
 
Danke für Deine Antwort Thorsten.

Das (gedanklich heranreifende) Setup würde aus zwei LBs bestehen, die jeweils einen MX Eintrag mit eigener Priorität bekommen würden.

Und hinter den LBs dann der Pool Mailserver.

Wie getippt, es ist noch lange nicht so weit dass ich das brauchen würde, aber ich bin von Natur aus neugierig, und, mit etwas Glück kommt der Tag ja an dem ich so ein massives Setup brauche *träum*

lg Basti
 
Ausserdem, wenn Du nur zwei MX Einträge hast, also sagen wir 2 gleichwertige Server, und die beiden haben die selbe Priorität, der erste wird angemailt, reagiert aber nicht, dann gibt es für den versendenden MTA ja keinen BackupMX, weil beide die selbe Priorität haben.

Wenn ich RFC 974 richtig interpretiere, muss ein Mailer erst bei allen Servern mit gleicher Priorität einen Zustellversuch durchführen, wenn der erste Server nicht reagieren sollte, bevor auf Server mit einem höheren MX RR zugegriffen werden darf.

Insofern würde ich allen MX-Rechnern, die Mails auch tatsächlich zustellen die gleiche Priorität geben (bei meinem letzten Arbeitgeber ist das mit 4 MX-Rechnern so gelöst).
Wenn man dann hinter dem jeweiligen A-Record mehrere IP-Adressen versteckt, kann man damit die Last schon gut verteilen. Solange Du genügend MX-Records hast, sollte es auch kein Problem sein, wenn ein paar Server überlastet sind (was beim reinen DNS-Roundrobin zu einem Problem werden würde, da im ersten Anlauf pro MX-Record nur ein Versuch durchgeführt wird). Andererseits stellen viele MX-Records ein Problem dar, wenn Greylisting eingesetzt werden soll. In diesem Fall könnte ein Loadbalancer vorteilhaft sein, ansonsten denke ich, dass es auch gut ohne gehen sollte.
 
muss ein Mailer erst bei allen Servern mit gleicher Priorität einen Zustellversuch durchführen, wenn der erste Server nicht reagieren sollte, bevor auf Server mit einem höheren MX RR zugegriffen werden darf

Das würde eigentlich alle meine Probleme lösen :D

Andererseits stellen viele MX-Records ein Problem dar, wenn Greylisting eingesetzt werden soll.

Greylisting haben wir komplett durch policyd-weight, bzw. auf einem Testsystem durch postfwd ersetzt, und konnten feststellen dass die Erkennungsraten gleich / fast sogar besser sind. Leider wollten einige Kunden nicht dass sich Mails (wenn auch nur beim ersten Mal) verzögern. PD leistet aber wirklich gute Dienste.

ansonsten denke ich, dass es auch gut ohne gehen sollte.

Ich werd mich mal ein wenig über die von Dir gepostete RFC schlau machen. Dann könnte ich mir den LB wirklich sparen.

Vielen Dank schonmal an alle hier!

lg Basti

edit:

Note that
multiple MXs may have the same preference value. In this case, all
MXs at with a given value must be tried before any of a higher value
are tried. In addition, in the special case in which there are
several MXs with the lowest preference value, all of them should be
tried before a message is deemed undeliverable.

Aus der RFC. Das liest sich auf jeden Fall schonmal gut, und ich denke die meisten Mailserver halten sich auch daran :)
 
Last edited by a moderator:
Sorry für den Doppelpost, aber ich seh grad hotmail löst das so wie beschrieben:

Code:
root@vm2:~# host hotmail.com
hotmail.com has address 64.4.32.7
hotmail.com has address 64.4.33.7
hotmail.com mail is handled by 5 mx4.hotmail.com.
hotmail.com mail is handled by 5 mx1.hotmail.com.
hotmail.com mail is handled by 5 mx2.hotmail.com.
hotmail.com mail is handled by 5 mx3.hotmail.com.

root@vm2:~# host mx1.hotmail.com
mx1.hotmail.com has address 65.54.244.136
mx1.hotmail.com has address 65.54.244.8
mx1.hotmail.com has address 65.54.245.8

root@vm2:~# host mx2.hotmail.com
mx2.hotmail.com has address 65.54.245.40
mx2.hotmail.com has address 65.54.244.168
mx2.hotmail.com has address 65.54.244.40

root@vm2:~# host mx3.hotmail.com
mx3.hotmail.com has address 65.54.244.72
mx3.hotmail.com has address 65.54.245.72
mx3.hotmail.com has address 65.54.244.200

root@vm2:~# host mx4.hotmail.com
mx4.hotmail.com has address 65.54.245.104
mx4.hotmail.com has address 65.54.244.104
mx4.hotmail.com has address 65.54.244.232
root@vm2:~#
 
Back
Top