Utilisateurs et domains virtuels avec Postfix et Dovecot

Dans un article précédent, j'ai expliqué comment mettre en place un serveur de messagerie. Nous allons ici ajouter un support MySQL pour profiter des alias et domaines virtuels; mais aussi de l'authentification basée dessus.

Installation

Nous avons besoin que Postfix et Dovecot supportent MySQL pour pouvoir fonctionner. Pour le serveur MySQL, je pars du principe que vous en avez un ou savez comment le mettre en place.

sudo aptitude install postfix-mysql dovecot-mysql

Base MySQL

Nous allons commencer par mettre en place la BDD qui nous servira par la suite.

Commençons par créer une base (ex:postfix) avec un utilisateur (ex:postfix) :
CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'mdp';
GRANT USAGE ON * . * TO 'postfix'@'localhost' IDENTIFIED BY 'mdp' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS 'postfix' ;
GRANT ALL PRIVILEGES ON 'postfix' . * TO 'postfix'@'localhost';

Nous avons besoin, dans cette configuration, de trois tables :
CREATE TABLE IF NOT EXISTS 'alias' ('source' varchar(80) NOT NULL,'destination' text NOT NULL,PRIMARY KEY ('source'));
CREATE TABLE IF NOT EXISTS 'domains'('domain' varchar(50) NOT NULL,PRIMARY KEY ('domain'));
CREATE TABLE IF NOT EXISTS 'mailbox'('email' varchar(80) NOT NULL,'password' varchar(20) NOT NULL, PRIMARY KEY ('email'));

Ces trois tables vont à l'essentiel, mais il est possible de faire plus (séparation du login et du domain, ajout de date de login ...). Sachez aussi que le serveur mail n'est pas obligé d'héberger le serveur Mysql, il est possible d'autoriser la connexion distante à la base de données.

Configuration Mysql

Commençont par les fichier de Postfix. Nous allons créer un dossier mysql dans le dossier /etc/postfix pour y accueillir les fichiers d'accès de notre BDD.

sudo mkdir /etc/postfix/mysql

Nous avons besoin d'un fichier mailbox.cf pour la gestion des comptes, qui contiendra :
user =postfix password =mdp hosts = <ip_serveur_mysql> dbname = postfix query= SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM mailbox WHERE email='%s'

Nous avons besoin d'un fichier domain.cf pour la gestion des domains, qui contiendra :
user =postfix password =mdp hosts = <ip_serveur_mysql> dbname = postfix query= SELECT domain FROM domains WHERE domain='%s'

Nous avons besoin d'un fichier aliases.cfpour la gestion des aliases, qui contiendra :
user =postfix password =mdp hosts = <ip_serveur_mysql> dbname = postfix query = SELECT destination FROM alias WHERE source='%s'

Après Postfix, il nous faut configurer Dovecot. Nous créons le fichier /etc/dovecot/dovecot-sql.conf qui contiendra :
driver = mysql connect = host=<ip_serveur_mysql> dbname=postfix user=postfix password=mdp default_pass_scheme = CRYPT password_query = SELECT email as user, password FROM mailbox WHERE email='%u';

Ces fichiers de configuration permettront à Postfix de connaître les utilisateurs, les alias et les domains pour lequel il doit travailler; Dovecot s'en servira pour authentifier les utilisateurs.

Adaptation des fichiers de configuration

 Commençons par Postfix. Si l'on se base sur la configuration du précédent billet, il nous faut commenter toute la partie #Fichier, soit tout ce qui se rapporte à la gestion de la boite mail, des alias et du maildir; Mais aussi à ce qui touche aux domaines de livraison:

/etc/postfix/main.cf
#mydestination = <domaines_de_livraison>

#Fichier
#mailbox_size_limit = 0
#recipient_delimiter = +
#alias_maps = hash:/etc/aliases
#alias_database = hash:/etc/aliases
#home_mailbox = Maildir/
#mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/dovecot.conf -m "${EXTENSION}"

#Virtual
alias_maps =
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/aliases.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql/domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql/mailbox.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_mailbox_base = /home/facteur
virtual_transport=dovecot
dovecot_destination_recipient_limit = 1

/etc/postfix/master.cf
#A la fin du fichier, ajouter les lignes
dovecot unix - n n - - pipe
flags=DRhu user=facteur:facteur argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

Notre MTA et MDA sont maintenant configurés.

Configuration du système

Pour accueillir les boites mails, nous avons besoin d'un utilisateur unique (ex:facteur) :
sudo groupadd -g 5000 facteur
sudo useradd -g facteur -u 5000 facteur -d /home/facteur -m

Nous y voila, il ne reste plus qu'à redémarrer les services postfix et dovecot pour que le tout fonctionnent.

La discussion continue ailleurs

URL de rétrolien : http://www.leslamas.net/index.php?trackback/48

Fil des commentaires de ce billet