Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
doc:reseau:postfix [23/03/2009 21:31] smolski |
doc:reseau:postfix [17/12/2020 23:05] (Version actuelle) vv222 Nouvelle section "articles liés", avec un lien vers la doc Sender Rewriting Scheme |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== 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 : | ||
+ | <code root>apt-get install mysql-server</code> | ||
+ | |||
+ | === Postfix === | ||
+ | Pour installer postfix et les modules nécessaire pour la gestion via mysql, entrez cette commande : | ||
+ | <code root>apt-get install postfix postfix-mysql</code> | ||
+ | |||
+ | //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 : | ||
+ | <code root> | ||
+ | groupadd -g 5000 vmail</code> | ||
+ | <code root>useradd -g vmail -u 5000 vmail -d /home/vmail -m</code> | ||
+ | |||
+ | 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 | ||
+ | |||
+ | <code root>cp /etc/postfix/main.cf.proto /etc/postfix/main.cf | ||
+ | nano /etc/postfix/main.cf</code> | ||
+ | |||
+ | 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 : === | ||
+ | |||
+ | <code text mysql-virtual-mailbox-domains.cf> | ||
+ | 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' | ||
+ | </code> | ||
+ | |||
+ | <code text mysql-virtual-mailbox-maps.cf> | ||
+ | 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' | ||
+ | </code> | ||
+ | |||
+ | <code text mysql-virtual-alias-maps.cf> | ||
+ | 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' | ||
+ | </code> | ||
+ | |||
+ | |||
+ | Pour chaque fichier, nous allons exécuter la commande **postmap** : | ||
+ | |||
+ | <code root>postmap /etc/postfix/mysql-virtual-mailbox-domains.cf</code> | ||
+ | <code root>postmap /etc/postfix/mysql-virtual-mailbox-maps.cf</code> | ||
+ | <code root>postmap /etc/postfix/mysql-virtual-alias-maps.cf | ||
+ | </code> | ||
+ | |||
+ | |||
+ | 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 : | ||
+ | <code user> | ||
+ | wget http://switch.dl.sourceforge.net/sourceforge/postfixadmin/postfixadmin_2.3rc2_all.deb | ||
+ | </code> | ||
+ | |||
+ | === Installer postfixadmin : === | ||
+ | |||
+ | <code root>dpkg -i postfixadmin_2.3rc2_all.deb</code> | ||
+ | |||
+ | Créer un lien des fichiers de postfixadmin à votre serveur web (dans mon cas /var/www) | ||
+ | |||
+ | <code root>ln -s /usr/share/postfixadmin /var/www</code> | ||
+ | |||
+ | Créer l'hôte virtuel dans apache pour vous connecter à postfix admin puis on redémarre apache | ||
+ | |||
+ | <code root>service apache2 restart</code> | ||
+ | |||
+ | ==== Configuration de postfixadmin ==== | ||
+ | |||
+ | Éditer le fichier de configuration **/var/www/postfixadmin/config.inc.php** | ||
+ | |||
+ | <code root>nano /var/www/postfixadmin/config.inc.php</code> | ||
+ | |||
+ | Les options à vérifier sont les suivantes (à adapter selon vos souhaits): | ||
+ | <code php> | ||
+ | $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'; | ||
+ | </code> | ||
+ | |||
+ | 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. | ||
+ | |||
+ | <code user>mysql -u root -p</code> | ||
+ | <code sql> | ||
+ | CREATE DATABASE postfix; | ||
+ | GRANT ALL PRIVILEGES ON postfix.* TO @localhost IDENTIFIED BY ''; | ||
+ | quit | ||
+ | </code> | ||
+ | |||
+ | 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 | ||
+ | |||
+ | <code root>mv setup.php setup.php.disable</code> | ||
+ | |||
+ | |||
+ | 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 === | ||
+ | <code root>useradd vacation</code> | ||
+ | |||
+ | === 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 === | ||
+ | <code root>mkdir /var/spool/vacation</code> | ||
+ | <code root>chown -R vacation:vacation /var/spool/vacation</code> | ||
+ | <code root>chmod -R 700 /var/spool/vacation</code> | ||
+ | |||
+ | === 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]] | ||
+ | |||
+ | <code root>cd /var/spool/vacation</code> | ||
+ | <code root>wget http://phpu.lindev.fr/dld.php?i=2509e7ec-f8a0-4dc6-8fda-87997b646d29</code> | ||
+ | <code root>chmod 700 vacation.pl</code> | ||
+ | |||
+ | |||
+ | === Editer vacation.pl === | ||
+ | |||
+ | Modifier les paramètres de connexion à la base de données et installer les modules nécessaires | ||
+ | <code root>apt-get install libmail-sendmail-perl libdbd-pg-perl libemail-valid-perl libmime-perl libmime-charset-perl libmime-encwords-perl</code> | ||
+ | |||
+ | 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 : | ||
+ | <code text /etc/postfix/transport> | ||
+ | autoreply-lindev.fr vacation | ||
+ | </code> | ||
+ | |||
+ | //Notez que autoreply-lindev.fr correspond à l'option ''$CONF['vacation_domain'] = 'autoreply-lindev.fr';'' de la configuration de postfixadmin.// | ||
+ | |||
+ | === Activer le fichier transport === | ||
+ | |||
+ | <code root>postmap /etc/postfix/transport</code> | ||
+ | |||
+ | Et voilà c'est fini le mode vacation est maintenant opérationnel ! | ||
+ | |||
+ | Nous allons redémarrer **postfix** et **dovecot** via cette commande : | ||
+ | |||
+ | <code root>service postfix restart</code> | ||
+ | <code root>service dovecot restart</code> | ||
+ | |||
+ | ==== Surveiller les logs ==== | ||
+ | |||
+ | Pour voir les logs en temps réels, nous pouvons utiliser cette commande | ||
+ | |||
+ | <code root>tail -f /var/log/mail.log</code> | ||
+ | |||
+ | ==== 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]] |