Mettre en place les quotas avec Dovecot

Dovecot

Rapide procédure pour mettre en place des règles de quota de notre serveur IMAP Dovecot sur une Fedora 20.

Pour rappel, ce qui suit fait référence à un serveur de messagerie basé sur Postfix et Dovecot. Voir ce billet – et ceux qui suivent – pour connaitre la base : Serveur de messagerie simple avec Postfix et Dovecot.
Le présent tutoriel est testé sur une Fedora 20 avec Dovecot 2.2.12

Configuration des quotas

Editer le fichier de configuration /etc/dovecot/conf.d/15-lda.conf et ajouter le plugin quota :

protocol lda {
	mail_plugins = $mail_plugins sieve quota

Faire de même pour le protocole IMAP avec imap_quota dans le fichier /etc/dovecot/conf.d/20-imap.conf :

protocol imap {
	mail_plugins = $mail_plugins quota imap_quota

Nous allons stocker les configurations de quota dans la table utilisateurs de MySQL, si elle n’existe pas déjà il faut que la colonne quota soit ajoutée. Pour rappel, voici la définition de la table utilisateurs utilisée par Postfix/Dovecot :

CREATE TABLE IF NOT EXISTS `MX_users` (
	`id` int(11) NOT NULL AUTO_INCREMENT,
	`email` varchar(128) NOT NULL,
	`password` varchar(128) NOT NULL,
	`name` varchar(128) NOT NULL DEFAULT '',
	`uid` smallint(5) unsigned NOT NULL DEFAULT '6000',
	`gid` smallint(5) unsigned NOT NULL DEFAULT '6000',
	`domain` varchar(128) NOT NULL DEFAULT '',
	`maildir` varchar(255) NOT NULL DEFAULT '',
	`quota` int(11) DEFAULT NULL,
	`is_imap` tinyint(1) unsigned NOT NULL DEFAULT '1',
	`is_active` tinyint(1) NOT NULL DEFAULT '1',
	PRIMARY KEY (`id`),
	KEY `domain` (`domain`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ;

La prise en charge de MySQL par Dovecot se situe sous /etc/dovecot/conf.d/auth-sql.conf.ext et ressemble à cela :

userdb {
	driver = sql
	args = /etc/dovecot/mysql_users.cf
}

On peut maintenant définir nos règles de quota par défaut dans le fichier /etc/dovecot/conf.d/90-quota.ext :

plugin {
	quota_rule = *:storage=1000M
	quota_rule2 = Trash:storage=+100M
	quota_grace = 10%%
}

Dans cet exemple, chaque boite aux lettres a 1000Mo de capacité, et il y a un bonus de 100Mo accordé pour les messages en corbeille. Le quota par utilisateur peut substituer les règles par défaut en utilisant les informations de la colonne quota de la table utilisateurs (/etc/dovecot/mysql_users.cf) dont voici la requête user_query mise-à-jour, celle-ci sert à retourner les informations d’un utilisateur :

user_query = SELECT maildir, uid, gid, CONCAT('*:storage=',quota) AS quota_rule FROM MX_users WHERE email = '%n' AND domain = '%d'

On voit que l’information quota_rule est retournée et sera utilisée pour fixer le quota de l’utilisateur. Les valeurs possibles pour le champ « quota » sont les suivantes :

  • NULL : garde les valeurs par défaut
  • 0 (zero) : désactive les quotas pour l’utilisateur
  • Tout autre valeur sera le nombre de Ko alloués

Lorsque les modifications sont effectuées, il suffit de redémarrer Dovecot :

systemctl restart dovecot.service

Vérifier les logs /var/log/dovecot-lda.log et /var/log/dovecot-lda-errors.log afin de voir si les messages sont toujours bien acheminés. Depuis Mozilla Thunderbird il est possible de vérifier le quota alloué à une boite aux lettre, pour cela il faut faire un clic-droit sur Inbox -> Propriétés-> Quota.

Thunderbird quota

Information de quota dans Thunderbird

Le webmail Roundcube donne également cette information dans le coin bas gauche de son interface.

Roundcube quota

Information de quota dans Roundcube

1 thought on “Mettre en place les quotas avec Dovecot”

  1. Merci, mais cela ne fonctionne pas pour moi sur une Debian 3.2 avec un Dovecot 2.1.7.

    Dans mon /etc/dovecot/conf.d/auth-sql.conf.ext
    j’ai ces lignes :

    userdb {
    driver = static
    args = uid=vmail gid=vmail home=/var/vmail/%d/%n
    }

    et c’est incompatible avec votre ligne sql !

    Merci

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *