[Postfixbuch-users] postfix policy-service - mehrere empfänger

Thomas Schwenski mailing-lists at thomasschwenski.de
Mi Apr 7 19:26:52 CEST 2010


Hallo Andre,

Andre Hübner schrieb:
> > Hallo,
> >
>>> >>> Bei der Einbindung eines Policy-Dienstes in den
>>> >>> smtpd_recipient_restrictions werden die Checks während der
>>> >>> (E)SMTP-Session nach dem "RCPT TO:" durchgeführt.
>>> >>> IMHO sogar für jeden Empfänger einzeln.
>>> >>> An dieser Stelle kannst Du also "pro Empfänger" eine
Entscheidung über
> >
> > nö, der policy-service bekommt "mail from", "rcpto to" und paar andere
> > sachen. man könnte zwar programmiertechnisch selbst die
> > /etc/postfix/virtual auseinandernehmen und kucken wer die mail
> > letztendlich erhält, aber trotzdem nicht die einzelnen empfänger
> > rejecten.

Wir reden aneinander vorbei:
Der policy-Daemon bekommt natürlich nur die vom Absender angegebenen
ENVELOPE-Recipients zu sehen - Mehr nicht.
Und logisch betrachtet geht den auch nicht mehr an.

Den Absender interessiert ja auch nur, dass der Envelope-Recipient die
Mail bekommen hat. Ob sich hinter einer dieser Adressen ein Verteiler
verbirgt und ob ein einzelner der im Verteiler eingetragenen Empfänger
seine Mail nicht bekommen hat, interessiert ihn eigentlich nicht
(solange ein anderer die bekommen hat).

Ich würde sogar soweit gehen zu Behaupten, dass es ein
datenschutzrechliches Problem werden kann, wenn Du die Empfänger wegen
so etwas nach außen hin einzeln preisgibst!
Zumindest gibst Du personenbezogene Daten an Dritte weiter.


Aber JA:
Es ist (allein durch die Implementierung des Policy-Daemons) möglich,
über die Einbindung der relevanten Maps die tatsächlichen Empfänger
aufzulösen und dann für alle einzeln eine Überprüfung durchzuführen ob
die Mail zu groß sein könnte.
Aber bis in die wievielte Ebene willst Du das eigentlich parktizieren?
Irgendwann läufst Du ja auch Gefahr, dass der Policy-Daemon zu viel zu
tun bekommt, dass Timeouts auftreten können.

Nicht zu vernachlässigen ist und bleibt auch weiterhin, dass jede
Lösung, die "nicht aus einem Guss" ist, wie es nunmal bei unser aller
Postfix-Amavis-Postfix-(Courier|Cyrus|Dovecot|...)-Lösungen der Fall
ist, sowieso nicht alle Eventualitäten abdeckt, "da ja am Anfang
geschaut wird, was am Ende schon da ist".
Es werden nur Mail berücksichtigt, die schon in den Postfächern abgelegt
worden sind. Mails die in der Verarbeitungskette noch unterwegs sind,
werden nicht berücksichtigt.
Das heißt der Policy-Daemon nimmt die Mail an, weil im Postfach noch
ausreichend Platz ist, aber wenn die Mail dann in das Postfach gelegt
werden soll, kann der Platz trotzdem nicht reichen.




Und um es nochmal klarzustellen:
Laut meinen Informationen führt Postfix im RCPT TO-State der
(E)SMTP-Session für jeden ENVELOPE-Recipient die Checks (also auch die
Abfrage eines Policy-Daemons) einzeln durch.
Hier ist eine Ablehnung oder Annahme der Mail für einzelne
ENVELOPE-Recipients noch möglich, dafür die Größe der Mail nicht
zuverlässig bekannt.
Im END-OF-DATA-State dagegen werden die Checks nur noch für _alle_
Envelope-Recipients zusammen durchgeführt; Annahme oder Ablehnung der
Mail geht dann auch nur noch für alle.



> > mit was antwortet man auch dem client falls der empfang für
> > einen kopieempfänger abgelehnt werden soll?

Gar nicht.

> > falls das anders sein sollte dann bitte eine exakte erklärung/config ,
> > bei all meinen tests hab ich das nie erhalten.
> > da die size bei smtpd_recipient_restrictions nicht gesichert ist könnte
> > ich mich auf den kompromiss einlassen die reale postfachgröße neu
> > berechnen zu lassen. dovecot macht das bei mir ganz easy per
> > echo "x getquotaroot inbox" | USER=$MAILUSER /usr/sbin/dovecot
> > --exec-mail imap
> > (quota wird in mysql-dict gehalten)

Ja und?
Dann hast Du die Größe des Postfachs aber nicht der Mail!

>>> >>> Das Problem ist nicht das Policy-Protokoll, es ist auch nicht
Postfix.
>>> >>> Es ist schlicht nur ein Problem mit dem Design des
SMTP-Protokolls, was
>>> >>> nur diese beiden Varianten ermöglicht.
> >
> > gemischte schuldverhältnisse würde ich sagen.

Falsch.

> > unabhängig von smtp wäre es möglich einem service alle expandierten
empfänger
> > zur verfügung zu stellen.

Ja, das ist machbar - siehe meine obigen Ausführungen.
Aber das hat nichts damit zu tun, dass weder Postfix noch das
Policy-Protokoll etwas dafür können, dass die Größenproblematik, sich
nicht 100%ig lösen lassen.

> > der service könnte dann statt ok/dunno/reject für die gesamtheit des
> > mailvorgangs irgendwie die einzelnen empfänger bewerten
> > und die zustellung steuern, das wäre zumindest meine wunschvorstellung.

Der Wunsch wird Dir nur dann erfüllt, wenn Du Deinen Server zur
Bounce-Schleuder machen willst.

> > falls ein kopieempfänger over quota ist muss dies sicherlich nicht in
> > einen reject an den absender resultieren.

FALSCH.

Falls ein (in einem addressierten Verteiler eingetragener) Empfänger
over Quota wäre, KANN dies gar nicht in einem REJECT an den Absender
resultieren (außer dieser würde für _alle_ Envelope-Recipients und im
Verteiler eingetragenen Adressen gelten).

> > das protokoll problem wäre dann das ich den sender nicht über diese
> > vorgänge informieren kann, da  der mit einem kopieempfänger
> > nicht wirklich was zu tun hatte. aus
> > gründen der diskretion wäre das vielleicht auch ganz gut...

Erstens das und zweitens kannst Du im SMTP-Protokoll keine Mail, die an
Empfänger A, B und C addressiert war für den Empfänger D ablehnen,
selbst wenn A auf D weiterleiten würde.

Solche Konstrukte wären ein absolutes Gurken-Setup!

Entschuldige (falls nötig) meine _deutliche_ Ausdrucksweise und Wortwahl.


Thomas





Mehr Informationen über die Mailingliste Postfixbuch-users