Maildrop, Mysql et Quotas
activer la gestion quotas par maildrop et mysql
Ce document décrit la procédure pour activer la gestion des quotas avec maildrop base : Debian Etch ou Lenny
Le répertoire racine pour les boîtes virtuelles est /home/virtual/
La boite user@domain.tld se traduit donc par /home/virtual/user@domain.tld on prend comme base ce paramétrage pour le reste du document
Buts
Activer la gestion des quotas pour les utilisateurs virtuels
Permettre aux utilisateurs de voir leur quotas
alerter les utilisateurs si le quotas est presque atteint
Prérequis
Une installation fonctionnelle de postfix en mode virtual domains/users (voir ici
Une base sql fonctionnelle (de préférence celle de Postfixadmin)
Courier-Imap installé et fonctionnel avec Courier-Authlib et les packages de dev pour courier dans debian
Un champ quota dans la table utilisateur ( varchar(20) )
PostfixAdmin (optionnel)
Tous ces prérequis sont detaillés dans le document d’installation complète d’un serveur de mail On y retrouvera également l’installation ci dessous.
Compilation de Maildrop
wget http://heanet.dl.sourceforge.net/sourceforge/courier/maildrop-2.0.4.tar.bz2
tar jxf maildrop-2.0.4.tar.bz2
cd maildrop-2.0.4
./configure -prefix=/usr/local/courier --with-etcdir=directory=/etc/courier --enable-maildrop-uid=20001 --enable-maildrop-gid=20001 --enable-maildirquota --without-db
make
make install
chown vmail: /usr/local/courier/bin/*Notes :
Le ./configure est particulièrement long et donne l’impression de tourner en boucle. Ceci est normal, il faut attendre la fin du processus.
A la fin du make avec la version 2.0.4, il se peut que l’on obtienne un message d’erreur sur un des composants. Meme si cela n’empechara pas maildrop de fonctionner on peut regler le probleme comme ceci :
cd makedat
ln -s makedatprog.c makedatprog
cd ..
make installOn applique les permissions correctement sur les exécutables et sur /var/run/courier/authdaemaon :
chown vmail: /usr/local/courier/bin/*
chown vmail:daemon /var/run/courier/authdaemon/
chmod 750 /var/run/courier/authdaemon/On vérifie si maildrop est correctement configuré :
On vérifie si maildrop est correctement installé (modules activés) :
/usr/local/courier/bin/maildrop -vdevrait donner :
maildrop 2.0.4 Copyright 1998-2005 Double Precision, Inc.
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.On édite le fichier /etc/courier/authdaemonrc
il faut remplacer authmodulelist="authpam" par authmodulelist="authpam authmysql"
On édite le /etc/courier/authmysqlrc
Il faut faire très attention à la syntaxe de ce fichier et bien mettre un tab entre le paramètre et sa valeur. Il ne doit y avoir aucun espace à la fin d’un paramètre. La moindre erreur entrainera le non fonctionnement de l’authentification.
On sécurise :
chmod 640 /etc/courier/authmysqlrc
On crée /home/virtual/.mailfilter pour activer les logs et la création automatique des maildir à la livraison (postfix ne sait pas le faire comme avec le transport par defaut "virtual") :
chown vmail: /home/virtual/.mailfilter
chmod 600 /home/virtual/.mailfilter
configuration de Postfix
/etc/postfix/main.cf
virtual_transport = maildrop
maildrop_destination_recipient_limit = 1 /etc/postfix/master.cf
#maildrop unix - n n - - pipe
# flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/courier/bin/maildrop -w 90 -d ${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop} ${sender}on redémarre le daemon d’authentification et postfix.
/etc/init.d/courier-authdaemon restart
/etc/init.d/postfix restartOn doit vérifier si Postfix travaille bien avec maildrop :
il faut envoyer un mail à l’utilisateur et regarder les logs.
attention les quotas ne sont pas encore actifs, on verifie seulement si maildrop livre correctement le courrier (ce qui est tout de même sa fonction première !)
cat /var/log/mail.log | grep “maildrop” –A 2 on devrait obtenir :
Feb 28 11:50:41 spike postfix/qmgr[7345]: 2875B7823E62: from=<remote@user.nl>, size=3308, nrcpt=1 (queue active)
Feb 28 17:18:05 spike postfix/pipe[11615]: 04DD57822697: to=<user@domain.tld>, relay=maildrop, delay=0, status=sent (domain.tld) sinon il faut vérifier la queue de postfix et regarder les logs plus globalement.
mailqSi tout fonctionne correctement (et que le mail est bien arrivé dans la boite : !) on peut poursuivre :
on crée un message d’alerte générique pour le dépassement de quotas
mkdir /usr/local/courier/etc/
cd /usr/local/courier/etc/
wget http://www.starbridge.org/spip/doc/Procmail/usr/local/courier/etc/quotawarnmsg
chown -R vmail: /usr/local/courier/etc/
chmod 644 /usr/local/courier/etc/quotawarnmsg
ln -s /usr/local/courier/etc/quotawarnmsg /usr/local/etc/
ln -s /usr/local/courier/etc/quotawarnmsg /etc/On peut passer au paramétrage des quotas :
on peut utiliser pour cela un script php pour facilement gérer les comptes utilisateurs : postfixadmin est très bien, on peut aussi exceptionnelement utiliser phpmyadmin ou bien plus basiquement éditer directement en ligne de commande
on a besoin de régler un quota de 5 Mo par exemple : il faut entrer la valeur 5000000S dans la base S est pour la taille (Size). On peut aussi utilsier C ce qui signifie le nombre de mail 1000C serait donc un quota de 1000 messages.
voici les commandes pour le faire manuellement
# mysql -p postfix
Enter password:
mysql> update mailbox set quota='5000000S' where username='username@domain.tld';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> quit
Bye On essaie d’envoyer un mail à cet utilisateur mais sans pièce jointe (pas encore..)
vérifier les log de postfix et bien sur que le message arrive bien ! si oui on continue :
principe de fonctionnement :
cd /home/virtual/user@domain.tld
cat maildirsize
Le fichier maildirsize permet de stocker les informations ralatives au quotas, et il est aussi utiliser par courier-imap.
Dans notre cas cela donne :
cat maildirsize
5000000S
42898 9
3403 1
1622 1
2371 1 cela siginifie qu’un quota de 5Mo est actif.
Si on efface ce fichier il sera automatiquement recrée par maildrop .
4 Messages ont ete comptabilisés.
Partons du principe que cet utilisateur consomme 3 Mo des ces 5 Mo de quotas. Si un mail arrive et qu’il est plus grand que les 2 Mo restants, le mail sera refusé. Si un mail d’1,7 Mo par exemple est recu, voila ce qu’il se passera :
maildrop livrera le mail car il 3 + 1.7 est inférieur a 5
Maildrop mettra à jour le maildirsize et l’utilisateur aura maintenant un quota de 4.7Mo
Maildrop verra qu’il doit avertir l’utilisateur car il dépasse 90% de son quota
(90% est le -w 90 dans le /etc/postfix/master.cf)
Maildrop déposera une copie de /usr/local/courier/etc/quotawarnmsg dans la boite de l’utilisateur pour l’avertir.
cette alerte sera relancée toutes les 24 heures
Tests
Les commandes suivantes peuvent être utiliser pour tester l’installation :
pour maildrop :
maildrop -V 7 -d user@domain.tldpour courier-authdaemon :
authtest user@domain.tldarticle original : Enforcing mailquotas for virtual domains/users
