Utilisateurs et domains virtuels avec Postfix et Dovecot
Par Bishop le jeudi 5 juillet 2012, 09:00 - Administration - Lien permanent
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.