====== Installer un serveur mail multi-domaines ======
Dans ce tutoriel nous allons voir comment installer et configurer un service d'envoi et de réception des mails complet supportant plusieurs domaines. Le tout se basera sur postfix, courier et mysql.
===== Installation et configuration =====
Postfix est un serveur smtp open-source qui permettra l'envoi de vos mails. Nous allons le configurer pour qu'il permette uniquement aux comptes autorisés d'envoyer des mails mais également pour stocker les mails envoyés par un compte dans le bon dossier.
==== Création de la base de données ====
Nous allons tout d'abord créer la base de données des utilisateurs, domaines et alias autorisés. Pour cela vous pouvez utiliser soit phpMyAdmin ou directement en ligne de commande. Voila les données à saisir :
{{:warning.png |}} Le nom de la base de données sera postfix, modifiez si besoin.
CREATE DATABASE `postfix`;
USE postfix;
--
-- Structure de la table `domain`
--
CREATE TABLE `domain` (
`domain` varchar(255) NOT NULL default '',
`actif` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`domain`)
) ENGINE=MyISAM COMMENT='Postfix Admin - Domaines Virtuels';
--
-- Structure de la table `mailbox`
--
CREATE TABLE `mailbox` (
`email` varchar(255) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`quota` int(10) NOT NULL default '0',
`actif` tinyint(1) NOT NULL default '1',
`imap` tinyint(1) NOT NULL default '1',
`pop3` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`email`)
) ENGINE=MyISAM COMMENT='Postfix Admin - Boites mails virtuelles';
--
-- Structure de la table `alias`
--
CREATE TABLE `alias` (
`source` varchar(255) NOT NULL default '',
`destination` text NOT NULL,
`actif` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`source`)
) ENGINE=MyISAM COMMENT='Postfix Admin - Alias virtuels';
Puis on déclare l'utilisateur MySql pour postfix :
GRANT SELECT ON `postfix`.* TO 'postfix'@'%'
IDENTIFIED BY 'pass';
==== Installation de postfix ====
On va maintenant installer postfix et son module mysql :
apt-get install postfix postfix-mysql
Chaque utilisateur virtuel verra ses mails stockés physiquement sous forme de fichiers dans un dossier. Étant donné que les utilisateurs sont virtuels, il faut un utilisateur réel comme propriétaire du dossier contenant tous les mails. On va créer cet utilisateur que l'on va nommer vmail :
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /var/spool/vmail/ -m
On va maintenant éditer la configuration de postfix :
vi /etc/postfix/main.cf
Copier la configuration :
# /etc/postfix/main.cf
# Configuration Postfix
# espace.fr.to
#
smtpd_banner = $myhostname ESMTP (Debian/GNU)
biff = no
disable_vrfy_command = yes
smtpd_helo_required = yes
# ajoute le domaine aux emails de la distribution locale
# ainsi vous pourrez envoyer des emails sans @domain.priv
# par la commande sendmail
mydomain = domain.priv
append_dot_mydomain = yes
# Envoi une alerte de dépassement de délai par email
#delay_warning_time = 4h
myhostname = smtp.domain.priv
# domaine de distribution local
mydestination = localhost, localhost.localdomain
# Mettez ici le relais smtp de votre FAI si vous avez des problèmes de blacklist
# à cause de votre IP
relayhost =
# adresseIP/Masque des réseaux locaux (réseaux autorisés pour l'envoi de courier)
mynetworks = 127.0.0.0/8 192.168.0.0/24
inet_interfaces = all
#restrictions d'accès
# adresses d'expédition
# le "reject_unknown_sender_domain" verifie que le domaine existe
smtpd_sender_restrictions =
permit_mynetworks,
reject_unknown_sender_domain,
warn_if_reject reject_unverified_sender
# adresses de destination
smtpd_recipient_restrictions =
permit_mynetworks,
reject_unauth_destination,
reject_unknown_recipient_domain,
reject_non_fqdn_recipient
# client
smtpd_client_restrictions =
permit_mynetworks,
reject_unknown_client
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf,mysql:/etc/postfix/mysql-virtual_aliases_mailbox.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_base = /var/spool/vmail/
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = no
virtual_mailbox_limit = 51200000
virtual_maildir_limit_message = "Desole, la boite email de l'utilisateur est pleine, essayez plus tard."
virtual_overquota_bounce = yes
Puis on édite les fichiers de configuration mysql :
vi /etc/postfix/mysql-virtual_domains.cf
# mysql-virtual_domains.cf
hosts = 127.0.0.1
user = postfix
password = pass
dbname = postfix
select_field = 'virtual'
table = domain
where_field = domain
additional_conditions = AND actif=1
vi /etc/postfix/mysql-virtual_mailboxes.cf
# mysql-virtual_mailboxes.cf
hosts = 127.0.0.1
user = postfix
password = pass
dbname = postfix
select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
table = mailbox
where_field = email
additional_conditions = AND actif=1
vi /etc/postfix/mysql-virtual_aliases.cf
# mysql-virtual_aliases.cf
hosts = 127.0.0.1
user = postfix
password = pass
dbname = postfix
select_field = destination
table = alias
where_field = source
additional_conditions = AND actif=1
vi /etc/postfix/mysql-virtual_aliases_mailbox.cf
# mysql-virtual_aliases_mailbox.cf
hosts = 127.0.0.1
user = postfix
password = pass
dbname = postfix
select_field = email
table = mailbox
where_field = email
additional_conditions = AND actif=1
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf
# mysql-virtual_mailbox_limit_maps.cf
hosts = 127.0.0.1
user = postfix
password = pass
dbname = postfix
select_field = quota
table = mailbox
where_field = email
Un peu de protection :
chgrp postfix /etc/postfix/mysql-virtual_*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql-virtual_*.cf
On redémarre et on check :
/etc/init.d/postfix restart
postfix check
On installe courier :
apt-get install courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-pop
Répondre non pour la création des dossiers.
On édite la configuration :
vi /etc/courier/authdaemonrc
Remplacer
authmodulelist="authpam"
par :
authmodulelist="authmysql"
Puis on configure l'accès par mysql :
vi /etc/courier/authmysqlrc
Pour mettre la configuration suivante :
MYSQL_SERVER localhost
MYSQL_USERNAME postfix
MYSQL_PASSWORD pass
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
# MYSQL_CLEAR_PWFIELD clear
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD "/var/spool/vmail/"
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
#Ligne à commenter
# MYSQL_NAME_FIELD name
MYSQL_QUOTA_FIELD quota
Redémarrer le daemon :
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-pop restart
Il peut y avoir une erreur avec les aliases :
rm -f /etc/aliases.db
newaliases