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 :
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