====== 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]]