[Postfixbuch-users] Postfix / Courier softqouta mysql

Thomas Schwenski postfixbuch at thomas-schwenski.de
Di Nov 20 18:31:29 CET 2007


Hallo Maximillian,

IMHO beherrscht Postfix bis jetzt keine Quota ohne Patch.
Ehe Du jetzt an's Selbstkompilieren gehst, habe ich eine "einfachere" Idee.

Man nehme einen Policy-Daemon der genau diese Aufgabe übernimmt und 
erspare sich damit den ganzen Kompilier-Ärger.
(Naja eher Aufwand, als Ärger.)

Zwei Probleme gibt's dabei.
Den Daemon musst Du Dir selber schreiben und sinnvollerweise 2-mal in 
die Postfix-Konfiguration einbinden.

Einmal in den smtpd_recipient_restrictions[1] und einmal in den
smtpd_end_of_data_restrictions[2].

Warum zweimal?
Die Größe einer E-Mail steht zu zwei Zeitpunkten fest:
Theorethisch einmal, wenn der Absender mit dem MAIL FROM die Größe der 
E-Mail angibt.
Zu diesem Zeitpunkt sind dem empfangenden Mailserver aber noch nicht die 
Empfänger und damit die Postfachgrößenbeschränkungen bekannt.
Diese sind erst nach dem RCPT TO bekannt.
Daher einmal die Einbindung in den smtpd_recpient_restrictions um die 
Annahme zu großer Mails an EINZELNE Empfänger zu verweigern.
(Empfänger mit ausreichend Platz in der Mailbox erhalten die E-Mail 
weiterhin.)

Die Angabe über die Mailgröße ist zu diesem Zeitpunkt aber nicht 
verlässlich, denn schließlich kann der sendende Mailserver ja alles 
mögliche angeben.
Verlässlich ist aber die Größe, die der empfangende Mailserver 
ermittelt, sobald die E-Mail komplett übertragen wurde.
Das ist in den smtpd_end_of_data_restrictions der Fall.
Allerdings würde an dieser Stelle eine Ablehnung der E-Mail auf Grund 
der Postfachspeicherbegrenzung eines einzelnen Empfängers bedeuten, dass 
die E-Mail-Annahme für ALLE Empfänger verweigert wird.
(Was vielleicht nicht ganz so schlimm ist.)

Warum sollte der Policy-Daemon zweimal eingebunden werden, wenn es egal 
ist, ob die Mail für alle Empfänger abgewiesen wird?
Ganz einfach: wenn der Daemon nur in den smtpd_end_of_data_restrictions 
eingebunden ist, bedeutet das nicht nur den Wegfall eines Features, 
sondern zu diesem Zeitpunkt wurde die E-Mail bereits komplett übertragen 
und hat bereits Traffic verursacht und Rechnerressourcen verbraucht.

Warum sollte die E-Mail auf Grund einer nicht verlässlichen Angabe 
geblockt werden?
Gegenfrage: Welchen Sinn hat es, dass ein absendender Mailserver einen 
höheren als den tatsächlichen Wert übermittelt?
Und wenn er es macht, ist das dann das Problem des Empfängers?

Allerdings solltest Du etwas beachten und nicht einfach die Quota-Size 
von Courier übernehmen:
Viele setzen einen Content-Filter (z.B. Amavisd-new) ein.
D.h. es können noch Mails in Bearbeitung (auch in der Postfix-Mailqueue) 
und noch nicht im Maildir abgelegt sein.
Würdest Du die Quota einfach übernehmen heißt das, dass die erste 
smtpd-Instanz die E-Mail annimmt und (je nach Konfiguration) die 
smtpd-Instanz nach dem Content-Filter oder Courier verweigert die 
Annahme der E-Mail.
Damit bleibt die Mail entweder in der Postfix-Mailqueue oder dein Server 
ist für das Versenden der DSN verantwortlich.
Und beides gilt es zu vermeiden.
D.h. Du musst einen ausreichend großen Puffer einkalkulieren.

Besonders die Problematik beim Einsatz eines Content-Filters dürfte so 
oder ähnlich auch bei Verwendung des Patches bestehen.

Das Ganze funktioniert erst ab Postfix 2.2[3]

Das sind die Gedanken, die ich mir bis jetzt zum Thema gemacht habe.
Leider fehlte mir bisher immer die Zeit einen solchen Daemon zu 
programmieren. Sonst wäre das schon lange geschehen.

Vielleicht hat noch einer der Experten von der Liste noch einen Hinweis, 
was ich eventuell nicht weiß, nicht berücksichtigt habe oder übersehe.

Gruß
Thomas






[1]
http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions
[2] http://www.postfix.org/postconf.5.html#smtpd_end_of_data_restrictions
[3]
http://www.postfix.org/SMTPD_POLICY_README.html

Maximilian Thoma schrieb:
> Hallo Liste,
> 
> ich wollte meine Konfiguration um Quota erweitern und habe folgende
> Parameter hinzugefügt:
> 
> virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-v_quota.cf
> virtual_mailbox_limit_override = yes
> virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn
> his diskspace quota, please try again later.
> virtual_overquota_bounce = yes
> 
> Leider nimmt er dann immer noch Mails an obwohl er über dem Quota ist.
> 
> Die Abfrage ist erfolgreich:
> mxadm at server ~$ sudo postmap -q quota at thoma.cc
> mysql:/etc/postfix/mysql-v_quota.cf
> 10240
> 
> Ich habe ein wenig im Netz rumgesucht und bin darauf gekommen das man
> für die Quota Funktion einen Patch installieren muss.
> 
> Hat das jemand von euch schon gemacht?
> Ist das ein Problem bei einem laufendem System?
> Geht es auch irgendwie ohne den Patch?
> 
> Die Hinweise die ich gefunden haben betreffen Debian Sarge.
> Ist im Debian Etch dieser Patch schon mit drin?
> 
> 
> Howto: http://www.howtoforge.com/virtual_postfix_mysql_quota_courier
> 
>>>>> Schnipp >>>>
> 2 Apply Quota Patch To Postfix
> 
> We have to get the Postfix sources, patch it with the quota patch, build
> new Postfix .deb packages and install those .deb packages:
> 
> apt-get install build-essential dpkg-dev fakeroot debhelper libdb4.2-dev
> libgdbm-dev libldap2-dev libpcre3-dev libmysqlclient10-dev libssl-dev
> libsasl2-dev postgresql-dev po-debconf dpatch (1 line!)
> cd /usr/src
> apt-get source postfix
> wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.1.5-trash.patch.gz
> gunzip postfix-2.1.5-trash.patch.gz
> cd postfix-2.1.5
> patch -p1 < ../postfix-2.1.5-trash.patch
> dpkg-buildpackage
> cd ..
> dpkg -i postfix_2.1.5-9_i386.deb
> dpkg -i postfix-mysql_2.1.5-9_i386.deb
> dpkg -i postfix-tls_2.1.5-9_i386.deb
> <<<<< Schnapp <<<<<<<
> 
> 
> Danke schon mal im voraus.
> 
> Gruß
> 
> 
> Maximilian
> 
> 
> 




Mehr Informationen über die Mailingliste Postfixbuch-users