Configuration Serveur · 11 min read · Nov 12, 2025

Comment configurer un serveur de messagerie ISP avec des utilisateurs/domaines virtuels sur Centos 5.0 en utilisant Postfix, Dovecot, MySQL, phpMyAdmin, TLS/SSL - Page 2

Configuration:

SMTP-AUTH/TLS

Tout d’abord, nous configurons SMTP-AUTH et TLS. Pour cela, éditez /usr/lib/sasl2/smtpd.conf avec votre éditeur préféré.

vi /usr/lib/sasl2/smtpd.conf

et apportez les modifications comme indiqué ci-dessous.

pwcheck_method: saslauthd
mech_list: plain login

Créez des répertoires, puis la clé privée et enfin le certificat.

mkdir -p /etc/postfix/ssl/mailserver  
cd /etc/postfix/ssl/mailserver  
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024  
chmod 600 smtpd.key  
openssl req -new -key smtpd.key -out smtpd.csr  
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt  
openssl rsa -in smtpd.key -out smtpd.key.unencrypted  
mv -f smtpd.key.unencrypted smtpd.key  
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

Les clés privées et les certificats ont été créés. Plus tard, nous dirons à Postfix de les utiliser.

MySQL:

Nous allons maintenant créer une base de données nommée mail, pour cela nous allons émettre les commandes données ci-dessous;

mysql -u root -p

Entrez le mot de passe et vous serez à l’invite MySQL ( mysql>).

CREATE DATABASE mail;

Donnez tous les privilèges sur mail à l’utilisateur mail.

GRANT ALL PRIVILEGES ON mail.* TO 'mail'@'localhost' IDENTIFIED BY 'mail';  
FLUSH PRIVILEGES;  
quit

Définissez le mot de passe pour l’utilisateur mail. Cela se fera par l’instruction suivante.

mysqladmin -u mail password newpassword

Ensuite, nous allons créer les tables nécessaires pour notre nouvelle base de données (mail) qui contient des informations sur les domaines, les utilisateurs, les alias et les boîtes aux lettres.

mysql -u mail -p

Après avoir donné le mot de passe, vous serez à l’invite MySQL.

show databases;

Cela affichera toutes les bases de données, y compris notre base de données “mail”. Nous allons utiliser “mail”.

USE mail;
  1. Créez la table des domaines.
CREATE TABLE domain ( domain varchar(255) NOT NULL default '', description varchar(255) NOT NULL default '', aliases int(10) NOT NULL default '0', mailboxes int(10) NOT NULL default '0', maxquota int(10) NOT NULL default '0', transport varchar(255) default NULL, backupmx tinyint(1) NOT NULL default '0', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (domain), KEY domain (domain) ) TYPE=MyISAM COMMENT=' Domaines Virtuels';
  1. La deuxième table la plus importante est la boîte aux lettres, donc créez la boîte aux lettres.
CREATE TABLE mailbox ( username varchar(255) NOT NULL default '', password varchar(255) NOT NULL default '', name varchar(255) NOT NULL default '', maildir varchar(255) NOT NULL default '', quota int(10) NOT NULL default '0', domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (username), KEY username (username) ) TYPE=MyISAM COMMENT='Boîtes aux lettres Virtuelles';
  1. Créez la table des alias.
CREATE TABLE alias ( address varchar(255) NOT NULL default '', goto text NOT NULL, domain varchar(255) NOT NULL default '', created datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', active tinyint(1) NOT NULL default '1', PRIMARY KEY (address), KEY address (address) ) TYPE=MyISAM COMMENT='Alias Virtuels';

Nous avons créé les tables nécessaires, donc quittez MySQL.

quit

Postfix MySQL:

Postfix doit savoir où et comment il peut rechercher toutes les informations liées aux boîtes aux lettres. À cette fin, nous allons créer les fichiers suivants sous /etc/postfix. Les versions récentes de Postfix peuvent utiliser cela au lieu des autres instructions, et dans ce cas, il suffit de commenter toutes les lignes et de décommenter la dernière.

  1. Créez le fichier mysql_virtual_alias_maps.cf pour le transfert d’emails d’une adresse email à une autre.
vi /etc/postfix/mysql_virtual_alias_maps.cf
user = mail
password = mail
hosts = localhost
dbname = mail
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
#query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
  1. Créez le fichier mysql_virtual_domains_maps.cf, pour le mappage des domaines virtuels. Les domaines virtuels sont interrogés à l’aide des informations fournies dans ce fichier.
vi /etc/postfix/mysql_virtual_domains_maps.cf
user = mail
password = mail
hosts = localhost
dbname = mail
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
  1. Créez le fichier mysql_virtual_mailbox_maps.cf. Qui est généralement le mappage des adresses email vers l’emplacement de la boîte aux lettres de l’utilisateur sur votre disque dur. Si vous avez enregistré les emails entrants sur le disque dur en utilisant l’agent de livraison virtuel intégré de Postfix, alors il serait interrogé pour trouver le chemin de la boîte aux lettres.
vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = CONCAT(domain,'/',maildir)
where_field = username
additional_conditions = and active = '1'
#query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
  1. Enfin, créez le fichier mysql_virtual_mailbox_limit_maps.cf qui sera utilisé pour mapper la limite de quota des boîtes aux lettres des utilisateurs.
vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
user = mail
password = mail
hosts = localhost
dbname = mail
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = '1'
#query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
  1. Donnez aux fichiers mysql_virtual les droits de propriété et d’accès appropriés.
chown root:postfix *.cf  
chmod 644 *.cf

Postfix:

Dans la section de configuration de Postfix, nous allons éditer le fichier main.cf situé dans le répertoire de configuration de Postfix ( /etc/postfix), pour entrer quelques informations de base nécessaires pour Postfix.

mv /etc/postfix/main.cf /etc/postfix/main.cf.orig  
vi /etc/postfix/main.cf
############## Postfix###############
#Date Modifiée 17 juin 2008
#-------------------------------------------------------
smtpd_banner = $myhostname
biff = no
append_dot_mydomain = no
relayhost =
mynetworks = 192.168.49.0/24
inet_interfaces = 192.168.49.81
mailbox_size_limit = 0
recipient_delimiter = +
alias_database = hash:/etc/postfix/aliases
alias_maps = $alias_database
myhostname = example.co.tz
mydomain = rnd
myorigin = $myhostname
mydestination = $myhostname, localhost.$mydomain, $transport_maps
mail_spool_directory = /var/spool/mail
debug_peer_level = 2
debugger_command =
  PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
  xxgdb $daemon_directory/$process_name $process_id & sleep 5
disable_vrfy_command = no
readme_directory = /usr/share/doc/postfix-2.2.10/README_FILES
sample_directory = /usr/share/doc/postfix-2.2.10/samples
sendmail_path = /usr/sbin/sendmail
html_directory = no
setgid_group = postdrop
command_directory = /usr/sbin
manpage_directory = /usr/share/man
daemon_directory = /usr/libexec/postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
queue_directory = /var/spool/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 450
####################section postfix se termine ici###############

Informations sur les utilisateurs virtuels Postfix:

Encore une fois, nous allons éditer le fichier main.cf pour ajouter le support des utilisateurs virtuels. Les “virtual_minimum_uid” et “virtual_uid_maps” pointent vers l’identifiant utilisateur 150 dans mon cas, qui est un utilisateur que j’ai créé spécifiquement pour gérer le courrier virtuel. Il utilise le groupe standard “mail” avec le gid par défaut 12. Donc, créez d’abord l’utilisateur en émettant la commande useradd ou adduser.

useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Boîte aux lettres virtuelle" vmail  
chmod 770 /var/vmail/ (créez le répertoire s'il n'existe pas)  
chown vmail:mail /var/vmail  
vi /etc/postfix/main.cf
#######################Utilisateurs et boîtes aux lettres de domaines virtuels###############
virtual_mailbox_domains = mysql:$config_directory/mysql_virtual_domains_maps.cf
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = mysql:$config_directory/mysql_virtual_mailbox_maps.cf
virtual_alias_maps = mysql:$config_directory/mysql_virtual_alias_maps.cf
virtual_minimum_uid = 150
virtual_uid_maps = static:150
virtual_gid_maps = static:12
##############################section virtuelle de main.cf se termine##############

Authentification SASL/TLS de Postfix:

Enfin, nous allons à nouveau éditer le fichier main.cf pour activer l’authentification SASL/TLS. Auparavant, nous avons créé des certificats, nous les utiliserons ici pour sécuriser le serveur de messagerie.

vi /etc/postfix.main.cf
#################### Authentification SASL/TLS###########################
######PARTIE SASL#########
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
######PARTIE TLS###########
smptpd_tls_cert_file = /etc/postfix/ssl/mailserver/smtpd.crt
smtpd_tls_key_file = /etc/postfix/ssl/mailserver/smtpd.key
smtpd_tls_CAfile = /etc/postfix/ssl/mailserver/cacert.pem
smtp_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtpd_tls_received_header = no
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
tls_random_source = dev:/dev/urandom
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_recieved_header = yes
###########################L'authentification SASL/TLS se termine ici#############

Pour ma commodité, j’ai divisé main.cf en trois sections { Postfix, domaines-virtuels-utilisateurs-et-boîtes aux lettres, authentification-SASL/TLS}. L’authentification-SASL/TLS est encore divisée en ( PARTIE-SASL et PARTIE-TLS). Pour vous montrer chaque section et leurs paramètres, j’ai édité le même fichier trois fois. Maintenant, copiez le /etc/aliases et /etc/aliases.db vers /etc/postfix/ et exécutez newaliases.

cp /etc/aliases* /etc/postfix/  
newaliases

Dovecot v1.x IMAP et POP:

Configurons Dovecot qui fournit à la fois un service POP3 et IMAP. Le fichier de configuration pour Dovecot est /etc/dovecot.conf. Nous allons sauvegarder le fichier original dans dovecot.conf.orig, et modifier le fichier en cours d’exécution selon nos besoins. Pour gérer les utilisateurs virtuels avec dovecot, nous allons créer le fichier /etc/dovecot-mysql.conf.

vi /etc/dovecot-mysql.conf
######dovecot-mysql.conf devrait ressembler à ceci##########
# REMARQUE: '\' le fractionnement de ligne est utilisé uniquement pour la lisibilité, actuellement Dovecot ne le prend pas en charge
# Le socket mysqld.sock peut se trouver à différents emplacements dans différents systèmes
driver = mysql
default_pass_scheme = plain
#connect = host=/var/run/mysqld/mysqld.sock dbname=mail user=root password=default
# Alternativement, vous pouvez également vous connecter à localhost :
connect = host=localhost dbname=mail user=mail password=mail
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT '/var/vmail/%d/%n' as home, 'maildir:/var/vmail/%d/%n' as mail, 150 AS uid, 12 AS gid, concat('dirsize:storage=',quota) AS quota FROM mailbox WHERE username ='%u'
####################se termine ici####################

Maintenant, passons à la configuration de dovecot.conf, pour authentifier l’utilisateur virtuel en utilisant la méthode mysql_auth. Gardez à l’esprit que les utilisateurs Linux normaux ne peuvent pas se connecter au serveur de messagerie. Parce que nous n’avons pas activé la méthode d’authentification Pam dans notre configuration dovecot. De plus, first_valid_uid et last_valid_uid sont définis sur 150, ce qui signifie que seul l’utilisateur avec l’uid 150 pourra se connecter. Les protocoles Pop3 et pop3s sont rendus disponibles.

cp -p /etc/dovecot.conf /etc/dovecot.conf.orig  
vi /etc/dovecot.conf

(Éditez uniquement les lignes suivantes)

##############dovecot configuré pour fonctionner avec des utilisateurs virtuels############
base_dir = /var/run/dovecot/
protocols = imap pop3 imaps pop3s
listen = [::]
login_dir = /var/run/dovecot-login
mail_location = mbox:/var/vmail/%d/%n
mbox_read_locks = fcntl
log_timestamp = "%Y-%m-%d %H:%M:%S "
log_path = /var/log/maillog
mail_extra_groups = mail
first_valid_uid = 150
last_valid_uid = 150
maildir_copy_with_hardlinks = yes
userdb sql {
args = /etc/dovecot-mysql.conf
}
passdb sql {
args = /etc/dovecot-mysql.conf
}
####################################se termine ici######################

Après cela, nous allons définir la propriété et les droits d’accès sur /etc/dovecot-mysql.conf.

chmod 600 /etc/dovecot/*.conf  
chown vmail /etc/dovecot/*.conf

Installation et configuration de Roundcube:

Basé sur les NOTES D’INSTALLATION (Roundcube)

  1. Décompressez et placez ce dossier quelque part dans votre racine de document ( /var/www/html/mail)
  2. Assurez-vous que les répertoires suivants (et les fichiers à l’intérieur) sont accessibles en écriture par le serveur web
  • /temp
  • /logs
  1. Créez une nouvelle base de données et un utilisateur de base de données pour RoundCube (voir CONFIGURATION DE LA BASE DE DONNÉES)
  2. Dirigez votre navigateur vers http://url-to-roundcube/installer/
  3. Suivez les instructions du script d’installation (ou voir CONFIGURATION MANUELLE)
  4. Après avoir créé et testé la configuration, supprimez le répertoire d’installation
  5. Fait!

CONFIGURATION DE LA BASE DE DONNÉES

  • MySQL 4.1.x/5.x

Pour la version MySQL 4.1 et supérieure, il est recommandé de créer la base de données pour RoundCube avec le jeu de caractères utf-8. Voici un exemple de la procédure d’initialisation:

mysql -u root -p
CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;  
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';  
quit
mysql -u mail -p roundcubemail < SQL/mysql5.initial.sql

Remarque: ‘password’ est le mot de passe principal pour l’utilisateur roundcube. Il est fortement recommandé de le remplacer par un mot de passe plus sécurisé. Veuillez garder à l’esprit: Vous devez spécifier ce mot de passe plus tard dans ‘config/db.inc.php’.

Section HTTP:

Pour commencer à utiliser l’interface web du serveur de messagerie, nous allons éditer le fichier /etc/httpd/conf/httpd.conf.

vi /etc/httpd/conf/httpd.conf

Et ajoutez les déclarations données ci-dessous.

#Accès au courrier frontal utilisant roundcube

  DocumentRoot /var/www/html/mail
  ServerName mail.example.co.tz

Enregistrez la configuration et quittez.

Création d’utilisateurs et de domaines virtuels:

  1. Maintenant, nous allons créer des domaines virtuels et des utilisateurs virtuels dans notre base de données de messagerie.
mysql -u mail -p
  1. Entrez le mot de passe et vous serez à l’invite mysql>.
USE mail;
  1. Créez d’abord un domaine virtuel dans la table des domaines (example.co.tz) en utilisant la commande donnée ci-dessous.
INSERT INTO domain (domain,description,aliases,mailboxes,maxquota,transport,backupmx,active) VALUES ('example.co.tz','Domaine virtuel','10','10', '0','virtuel', '0','1');
  1. Maintenant, créez deux utilisateurs virtuels dans la table des boîtes aux lettres. J’ai créé ( [email protected] & [email protected]) comme noms d’utilisateur pour kiiza et hoboka.
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','mwamaLis', 'Hoboka Mwamakunge ','hoboka/', '0','example.co.tz','1');  
INSERT INTO mailbox (username,password,name,maildir,quota,domain,active) VALUES ('[email protected]','gekman', 'Kiiza Mutungi','kiiza/', '0','example.co.tz','1');  
quit

Maintenant que nous avons créé des utilisateurs virtuels et un domaine virtuel, nous voulons tester notre serveur de messagerie en nous connectant et en envoyant des mails d’un compte utilisateur à un autre. Alors commençons Dovecot, Postfix, MySQL et les démons du serveur web. Nous voulons également qu’ils démarrent eux-mêmes au prochain redémarrage. Pour cela, nous émettons les commandes suivantes.

chkconfig -level 235 mysqld on  
chkconfig -level 235 saslauthd on  
chkconfig -level 235 postfix on  
chkconfig -level 235 dovecot on  
chkconfig -level 235 httpd on  
/etc/init.d/saslauthd start  
/etc/init.d/mysqld start  
/etc/init.d/postfix start  
/etc/init.d/dovecot start  
/etc/init.d/httpd start
Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.