Contrôle de l'espace disque utilisé : les quotas - Debian 5.0 Lenny
Rédigé par Marc GUILLAUME | Aucun commentaireUtiliser la gestion des quotas d'espace disque de Dovecot.
Votre serveur mail ne dispose pas d'un espace disque infini. Surtout si vous utilisez IMAP
, les utilisateurs apprécieront le confort de laisser leurs mails sur le serveur. Et il y a même des utilisateurs IMAP
qui ne savent pas que des mails juste marqués pour effacement utilisent encore de l'espace disque. Alors, sauf si vous avez vraiment peu d'utilisateurs ou des utilisateurs très disciplinés, vous pouvez vouloir limiter l'espace disque que chaque utilisateur peut occuper. Dovecot peut stocker la taille de la boîte aux lettres d'un utilisateur et le nombre de mails qu'elle peut contenir dans son le dossier virtuel.
Activer l'extension de quota de Dovecot
Il faut activer cette extension de quotas à trois endroits dans le fichier /etc/dovecot/dovecot.conf
(extrait de la documentation de Dovecot) :
protocol imap { mail_plugins = quota imap_quota } protocol pop3 { mail_plugins = quota } protocol lda { mail_plugins = quota }
Configuration globale des quotas
Le cas le plus simple est d'avoir un quota limite identique pour tous les utilisateurs. Disons que vous accordez à chaque utilisateur 1 GB d'espace avec pas plus de 1000 mails. La configuration dans votre fichier /etc/dovecot/dovecot.conf
sera :
plugin { quota = maildir:storage=1000000:messages=1000 }
Souvenez vous que les paramètres de stockage doivent être indiqués en KB. Vous pouvez même omettre le paramètre messages si vous ne voulez pas limiter le nombre de mails.
Configuration des quotas pour chaque utilisateur
Si vous avez certains utilisateurs qui ont des quotas différents des quotas globaux, alors vous pouvez stocker les règlabes de quota dans votre table virtual_users
. Utilisez cette commande SQL pour ajouter deux colonnes à la table virtual_users
.
mysql> ALTER TABLE `virtual_users` ADD `quota_kb` INT NOT NULL, ADD `quota_messages` INT NOT NULL ;
Et vous devrez activer la requête user_query
dans votre fichier /etc/dovecot/dovecot-sql.conf
. Tout au long de ce guide il vous était suggéré d'utiliser l'approche "userdb static
" dans votre fichier /etc/dovecot/dovecot.conf
. Mais cela suppose que tous vos utilisateurs ont des configurations semblables. Dans le cas d'une configuration spécifique par utilisateur vous devrez désactiver "userdb static
" et activer "userdb sql
" pour obliger Dovecot à faire une requête supplémentaire afin de récupérer les informations d'utilisateur dans la base de données :
#userdb static { # args = uid=5000 gid=5000 home=/var/vmail/%d/%n allow_all_users=yes # userdb sql { args = /etc/dovecot/dovecot-sql.conf }
Et ajouter à votre fichier /etc/dovecot/dovecot-sql.conf
cette ligne :
user_query = SELECT CONCAT('/var/vmail/',CONCAT(SUBSTRING_INDEX(email,'@',-1), '/',SUBSTRING_INDEX(email,'@',1))) AS home, 5000 AS uid, 5000 AS gid, CONCAT('maildir:storage=',quota_kb,':messages=',quota_messages) AS quota FROM virtual_users WHERE email='%u';
Cette requête peut sembler assez moche, mais elle fait la même chose que
args = uid=5000 gid=5000 home=/var/vmail/%d/%n allow_all_users=yes
la ligne ci-dessus en récupérant en plus les informations de quota_kb
et quota_messages
.
Ce qui se passe si un utilisateur dépasse son quota
Les quotas dans Dovecot ne sont pas spécialement "user-friendly" (sympathiques pour l'utilisateur). Par exemple le destinataire ne reçoit pas d'avertissement lorsqu'il approche de sa limite de quota. L'utilisateur reçoit juste un mail de retour avec dans le sujet Automatically rejected mail qui lui dit "Your message to <john@example.com> was automatically rejected: Quota exceeded" (Votre message pour John@example.com a été automatiquement rejeté : quota d'espace disque dépassé).