Starbridge Corp

Maildrop, Mysql et Quotas

vendredi 27 avril 2007 par tonio

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 install

On 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 -v

devrait 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 restart

On 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.

mailq

Si 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.tld

pour courier-authdaemon :

authtest user@domain.tld

article original : Enforcing mailquotas for virtual domains/users


Accueil du site | Contact | Plan du site | | Statistiques | visites : 212875

Suivre la vie du site fr  Suivre la vie du site HowTo Mail   ?

Site réalisé avec SPIP 2.1.1 + AHUNTSIC

Creative Commons License