[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