[Postfixbuch-users] Suche policy-Dienst für Quotas

Christian Boltz postfixbuch at cboltz.de
Mo Jun 1 18:33:55 CEST 2009


Hallo zusammen,

Am Montag, 1. Juni 2009 schrieb Peer Heinlein:
> Am Montag, 1. Juni 2009 schrieb Gregor Hermens:
> > Mehr bringt imho nichts. An einer brauchbaren Lösung, die rejected
> > statt bounced wäre ich aber auch sehr interessiert.
>
> Je nach Anzahl der Postfächer kann man es sich leisten, einen
> Cron-Job alle Stunde
>
> a) eine Volumenberechnung (du -s) auf das Maildir oder
> b) einen Blick in die Quota-Datei von Dovecot
>
> werfen zu lassen um dann daraus kurz in LDAP oder SQL eine Access-Map
> zu bauen.

In diesem Fall ist text/plain die einfachere Lösung ;-)

> Wer zuviele Mails hat, steht dort eben als REJECT drin.
>
> Und schwupp ist das für die Annahme geregelt.

So, ich hab mir endlich mal die Zeit genommen, ein Script dafür zu 
schreiben. War einfacher als ich ursprünglich gedacht hatte ;-)

#!/bin/bash
cd /home/mailbox
for dir in */*; do 
    test -f $dir/maildirsize || continue
    # Die Umrechnung von Byte zu kByte in maildirsize durch Abschneiden 
    # der letzten 3 Ziffern ist nicht optimal, reicht aber erstmal ;-)
    quota=$(sed -n 's/...S//p' < $dir/maildirsize)
    used=$(du -s $dir | sed 's/\t.*//')
# Debugging 1: Füllstand aller Postfächer ausgeben
#    echo $quota $used $dir >&2
# Debugging 2: Füllstand der overquota-Postfächer ausgeben
#    test "$used" -gt "$quota" && echo $quota $used $dir >&2
    test "$used" -gt "$quota" && echo $dir
done | sed 's§\(.*\)/\(.*\)§\2@\1   450 Mailbox is over quota§' > \
    /etc/postfix/overquota.new

diff /etc/postfix/overquota.new /etc/postfix/overquota >/dev/null || {
    mv /etc/postfix/overquota.new /etc/postfix/overquota && \
    postmap /etc/postfix/overquota
}

Laufzeit: ein paar Sekunden bei 400 Postfächern.

Die Einbindung erfolgt wenig sensationell mit
    check_recipient_access hash:/etc/postfix/overquota,
in den smtpd_recipient_restrictions.
Das Script selbst wird per Cronjob aufgerufen.

Grund für die Verwendung von diff sind zwei Dinge:
- Vermeidung von unnötigen Reloads der overquota-map
- ich sehe am Dateidatum, wann die letzte "echte" Änderung bei den
  übervollen Postfächern war

Bleibt noch die Frage, wie sich maildrop bei einem fast vollen Postfach 
(sprich: noch 1 Byte frei ;-) verhält - stellt es dann noch eine Mail 
zu oder bounct es bereits, weil die Mail größer als 1 Byte ist?
(Weiß das jemand oder muss ich es selbst testen?)


Gruß

Christian Boltz
-- 
Auf Windows 95 laufen so ziemlich alle Spiele. Für ernsthaftes Arbeiten
sollte man aber zusätzlich ein Betriebssystem installieren.



Mehr Informationen über die Mailingliste Postfixbuch-users