====== postfix : serveur mail smtp ====== * Objet : configuration de postfix pour une gestion multi-domaines via MySQL. * Niveau requis : {{tag>avisé}} * Commentaires : //Vous voulez gérer les comptes mails de différents domaines via postfix. // * Suivi : {{tag>à-tester}} * Création par [[user>stopher]] le 23-3-2009 * Testé par <...> le <...> * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?id=1231 |ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) ===== Introduction ===== Ce tutoriel présente comment monter un serveur de mail multi-domaines géré par une base mysql et administré par postfixadmin, activation du mode vacation (répondeur automatique) ===== Installations ===== === MySQL === Pour installer le serveur mysql, il faut juste entrer la commande suivante : apt-get install mysql-server === Postfix === Pour installer postfix et les modules nécessaire pour la gestion via mysql, entrez cette commande : apt-get install postfix postfix-mysql //Si des questions vous sont posées, répondez par défaut, de toute manière les options sont modifiées plus bas// === Dovecot === Pour installer dovecot, entrez cette commande : apt-get install dovecot-common dovecot-imapd dovecot-pop3d ===== Configuration ===== === Configuration de postfix === Là on a fait le plus simple... reste à configurer le tout... Première étape, créer l'utilisateur et le groupe utilisés par postfix : groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /home/vmail -m Ensuite on s'attaque au fichier de configuration de postfix à savoir : ''/etc/postfix/main.cf'' Les versions récentes de debian offrent un canevas de ce fichier sous le nom main.cf.proto. Faites-en une copie cp /etc/postfix/main.cf.proto /etc/postfix/main.cf nano /etc/postfix/main.cf Dans ce fichier, les options à modifier/ajouter sont : Nom d'hôte du serveur, veiller à ce que ce nom soit [[http://fr.wikipedia.org/wiki/Fully_qualified_domain_name|fqdn]] et qu'il soit existant dans le domaine (reverse dns) myhostname=mailhost.lindev.fr Destinations locales gérés par postfix. Attention à ne pas mettre un domaines que vous allez gérer virtuellement mydestination=mailhost.lindev.fr, localhost.lindev.fr, localhost Permet de définir un relais pour vos mails sortant exemple : **[smtp.nordnet.fr]** vide par défaut relayhost= mynetworks permet de définir (le) les réseaux qui sont autorisés à envoyer des mails mynetworks=127.0.0.0/8 10.0.0.0/24 mydomain permet de définir le domaine internet du système de messagerie mydomain=lindev.fr home_mailbox définit le chemin optionnel d'un fichier de boîte-aux-lettres relatif au répertoire personnel d'un utilisateur home_mailbox=/ smtpd_recipient_restrictions permet d'ajouter des restrictions sur les mails entrant smtpd_recipient_restrictions= permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_non_fqdn_sender, reject_unknown_recipient_domain, reject_invalid_helo_hostname, reject_unlisted_recipient, reject_unlisted_sender, reject_non_fqdn_helo_hostname, reject_rbl_client list.dsbl.org, reject_rhsbl_sender dsn.rfc-ignorant.org message_size_limit correspond à la taille maximale d'un message en octets message_size_limit=10240000 Repérez la ligne setgid_group et modifiez-la comme suit: setgid_group = vmail Voilà pour les principaux paramètres à modifier, nous allons maintenant lier postfix à la base mysql. Pour lier postfix à la base, nous allons créer trois fichiers : - mysql-virtual-mailbox-domains.cf - mysql-virtual-mailbox-maps.cf - mysql-virtual-alias-maps.cf Le premier correspond à la gestion des noms de domaine, le second gère les boites des utilisateurs, et le troisième gère les alias. === Contenu de ces trois fichiers : === user =**votre_utilisateur_de_BD** password =le password de l'utilisateur hosts = 127.0.0.1 dbname = postfix query= SELECT domain FROM domain WHERE domain='%s' user =votre_utilisateur_de_BD password =le password de l'utilisateur hosts = 127.0.0.1 dbname = postfix query= SELECT maildir FROM mailbox WHERE username='%s' AND active='1' user =votre_utilisateur_de_BD password =le password de l'utilisateur hosts = 127.0.0.1 dbname = postfix query= SELECT goto FROM alias WHERE address='%s' Pour chaque fichier, nous allons exécuter la commande **postmap** : postmap /etc/postfix/mysql-virtual-mailbox-domains.cf postmap /etc/postfix/mysql-virtual-mailbox-maps.cf postmap /etc/postfix/mysql-virtual-alias-maps.cf Ensuite, nous retournons dans le fichier de configuration de postfix pour lui demander d'utiliser ces fichiers, vous devez donc ajouter dans ce fichier (''/etc/postfix/main.cf'') les lignes suivantes : virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_mailbox_base = /home/vmail Et voilà c'est terminé pour postfix ! ==== Configuration de dovecot ==== Très rapide et très simple, voici le fichier à modifier : ''/etc/dovecot/dovecot.conf'' Les lignes à vérifier/modifier sont : protocols = imap pop3 imaps pop3s listen = [::] disable_plaintext_auth = no log_timestamp = "%Y-%m-%d %H:%M:%S " ssl_listen = [::] mail_location = maildir:/home/vmail/%u mail_privileged_group = vmail protocol imap { mail_plugins = quota imap_quota } protocol pop3 { pop3_uidl_format = %08Xu%08Xv mail_plugins = quota } protocol lda { mail_plugins = quota } auth default { mechanisms = plain passdb sql { args = /etc/dovecot/dovecot-sql.conf } userdb sql { args = /etc/dovecot/dovecot-sql.conf } user = root count = 2 } dict { } plugin { #exemple pour un stockage de 5Gb par compte et/ou 1000000000000 mails quota = maildir:storage=5242880:messages=1000000000000 } Nous n'allons pas détailler chaque ligne, qui sort du but de ce tutoriel, décommentez/ajouter juste ce qu'il faut, et commentez le reste . Dans cet exemple, un petit plus, la gestion des quotas, qui n'est vraiment pas obligatoire, dans notre cas, le quota est de 5Go ou 1000000000000 Messages par boite . === Passons à la liaison dovecot/mysql : === Commençons par éditer le fichier ''dovecot-sql.conf'' : driver = mysql connect = host=127.0.0.1 dbname=postfix user=**utilisateur de la bd** password=**mot de passe user bd** default_pass_scheme = PLAIN-MD5 password_query = SELECT username as user, password FROM mailbox WHERE username = '%u' user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' Voilà, votre serveur est prêt à l'emploi, il ne reste plus qu'à installer **postfixadmin** et à remplir la base de données .. ==== Installation de postfixadmin ==== Récupérer **postfixadmin** comme ceci : wget http://switch.dl.sourceforge.net/sourceforge/postfixadmin/postfixadmin_2.3rc2_all.deb === Installer postfixadmin : === dpkg -i postfixadmin_2.3rc2_all.deb Créer un lien des fichiers de postfixadmin à votre serveur web (dans mon cas /var/www) ln -s /usr/share/postfixadmin /var/www Créer l'hôte virtuel dans apache pour vous connecter à postfix admin puis on redémarre apache service apache2 restart ==== Configuration de postfixadmin ==== Éditer le fichier de configuration **/var/www/postfixadmin/config.inc.php** nano /var/www/postfixadmin/config.inc.php Les options à vérifier sont les suivantes (à adapter selon vos souhaits): $CONF['configured'] = true; $CONF['postfix_admin_url'] = 'http://postfixadmin.lindev.fr'; $CONF['default_language'] = 'fr'; $CONF['database_type'] = 'mysql'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfix'; $CONF['database_password'] = '< Votre mot de passe de la base >'; $CONF['database_name'] = 'postfix'; $CONF['database_prefix'] = ''; $CONF['encrypt'] = 'md5'; $CONF['domain_path'] = 'NO'; $CONF['domain_in_mailbox'] = 'YES'; $CONF['vacation'] = 'YES'; $CONF['vacation_domain'] = 'autoreply-lindev.fr'; $CONF['vacation_control'] ='YES'; $CONF['vacation_control_admin'] = 'YES'; $CONF['alias_control'] = 'YES'; $CONF['alias_control_admin'] = 'YES'; $CONF['special_alias_control'] = 'NO'; $CONF['alias_goto_limit'] = '0'; $CONF['user_footer_link'] = "http://postfixadmin.lindev.fr/main"; $CONF['show_footer_text'] = 'YES'; $CONF['footer_text'] = 'Return to postfixadmin.lindev.fr'; $CONF['footer_link'] = 'http://postfixadmin.lindev.fr'; Pour les autres options elles sont soit commentées, soit inchangées ( à adapter selon vos besoins). Ensuite créez une base de donnée pour postfixadmin que j'ai nommé tout le long de ce tutoriel **postfix** Ainsi que l'utilisateur associé qui possède tout les droits sur cette base. mysql -u root -p CREATE DATABASE postfix; GRANT ALL PRIVILEGES ON postfix.* TO @localhost IDENTIFIED BY ''; quit Et allez sur votre page d'administration, dans le setup (dans mon cas c'est): **http://postfixadmin.lindev.fr/setup.php** Si tout est ok et que vous utilisez une vieille version (avant 2.3), renommez le fichier setup.php mv setup.php setup.php.disable Voilà, vous pouvez maintenant créer vos comptes/domaines * Dans un premier temps, vous devrez définir le mot de passe pour « setup » ** Ce mot de passe devra être recopié (encrypté), tel que retourné par la page et selon les consignes données * Ensuite vous devrez créer un compte d'administrateur ** Suivez les indications à l'écran ==== Mise en place du mode vacation ==== Nous avons activé le mode vacation dans la configuration de postfixadmin, ce qui permet de renvoyer un message automatique d'absence lorsque vous êtes parti en vacances par exemple ... === création de l'utilisateur local vacation === useradd vacation === Modifier la ligne comme ci-dessous dans le fichier /etc/passwd === vacation:x:65501:65501:Virtual Vacation:/nonexistent:/bin/false === Idem pour /etc/group === vacation:x:65501: === Ensuite, créer un dossier pour vacation === mkdir /var/spool/vacation chown -R vacation:vacation /var/spool/vacation chmod -R 700 /var/spool/vacation === Copier le script vacation.pl dans le dossier de vacation (/var/spool/vacation) === [[http://phpu.lindev.fr/dld.php?i=2509e7ec-f8a0-4dc6-8fda-87997b646d29|Vacation.pl]] cd /var/spool/vacation wget http://phpu.lindev.fr/dld.php?i=2509e7ec-f8a0-4dc6-8fda-87997b646d29 chmod 700 vacation.pl === Editer vacation.pl === Modifier les paramètres de connexion à la base de données et installer les modules nécessaires apt-get install libmail-sendmail-perl libdbd-pg-perl libemail-valid-perl libmime-perl libmime-charset-perl libmime-encwords-perl Nous devons ensuite modifier le fichier ''/etc/postfix/master.cf'': === Modification de master.cf === Ajouter ces lignes à la fin : vacation unix - n n - - pipe flags=DRhu user=vacation argv=/var/spool/vacation/vacation.pl === Modification du main.cf === Enfin, nous allons modifier le fichier **/etc/postfix/main.cf** en ajoutant cette ligne : transport_maps = hash:/etc/postfix/transport nous allons donc créer le fichier ''/etc/postfix/transport'' avec le contenu suivant : autoreply-lindev.fr vacation //Notez que autoreply-lindev.fr correspond à l'option ''$CONF['vacation_domain'] = 'autoreply-lindev.fr';'' de la configuration de postfixadmin.// === Activer le fichier transport === postmap /etc/postfix/transport Et voilà c'est fini le mode vacation est maintenant opérationnel ! Nous allons redémarrer **postfix** et **dovecot** via cette commande : service postfix restart service dovecot restart ==== Surveiller les logs ==== Pour voir les logs en temps réels, nous pouvons utiliser cette commande tail -f /var/log/mail.log ==== Conclusion ==== Vous voilà avec un serveur de mails complet, administrable via une interface web, qui peut gérer plusieurs domaines, et qui permet la gestion des comptes personnalisés. ==== Sources ==== [[http://www.lindev.fr|Lindev.fr]] ===== Articles liés ===== ==== Sender Rewriting Scheme ==== Si vous utilisez des alias avec Postfix à destination d’un autre serveur que le vôtre, et que celui-ci respecte les enregistrements [[https://fr.wikipedia.org/wiki/Sender_Policy_Framework|Sender Policy Framework (SPF)]], certains de vos e-mails seront rejetés. Cet article explique comment mettre en place [[https://en.wikipedia.org/wiki/Sender_Rewriting_Scheme|Sender Rewriting Scheme (SRS)]] (article en anglais), une solution permettant d’éviter ce genre de blocage : [[:doc:reseau:postfix:srs|Postfix - Sender Rewriting Scheme]]