Vous avez acheté un VPS ou un serveur dédié où vous souhaitez y installer un serveur de mails complet pour pouvoir envoyer vos e-mails directement depuis votre serveur. Alors, ce tutoriel va vous permettre de le faire.
Note : Vous pouvez aussi suivre ce tutoriel pour créer un serveur de mails local (c'est à dire l'envoi de mails uniquement sur votre réseau local). L'envoi de mails vers l'extérieur peut ne pas fonctionner dans ce cas. C'est notamment le cas du serveur de Google qui rejette automatiquement les connexions depuis les serveurs qui ne sont pas accessibles depuis l'extérieur.
Prérequis :
- Un serveur VPS ou dédié sous Debian (version 7.7.0 utilisée pour ce tutoriel)
- Serveur sur Internet : Un nom de domaine enregistré sur Internet.
- Serveur local : Un nom de domaine enregistré sur Internet géré ou non sur un serveur DNS local (Attention : Votre serveur d'emails doit être visible de l'extérieur pour que l'envoi de mails vers l'extérieur fonctionne).
- Etre à l'aise avec Linux. Car ce tutoriel est assez compliqué.
Pour commencer ce long tutoriel, nous allons d'abord installer le serveur de mail "Postfix".
Etant donné que Postfix supporte également les bases de données "MySQL", nous allons installer le paquet "postfix-mysql" qui installera postfix avec son extension MySQL.
Bash
apt-get install postfix-mysql
Note : Sous debian, vous devrez utiliser cette commande au lieu de celle ci-dessus :
Bash
apt-get install postfix postfix-mysql
Appuez sur les touches TAB puis ENTER pour passer cet écran
Choisissez "Site Internet".
Indiquez ensuite votre nom de domaine. (Ce qui se trouvera derrière le @ des adresses mail)
Une fois le serveur installé, ouvrez le fichier "/etc/postfix/master.cf" et vérifiez que vous avez un tiret pour la ligne SMTP dans la colonne "chroot".
Si ce n'est pas le cas, indiquez un tiret pour activer le chroot de postfix.
Par sécurité, nous allons créer un utilisateur postfix avec un mot de passe différent des autres utilisateurs de MySQL et nous lui donnerons tous les droits sur la base de données "postfix" uniquement.
Pour cela, accédez à l'interface de phpMyAdmin et cliquez sur "Base de données" dans le menu du haut.
Tapez ensuite "postfix" dans la case prévue à cet effet et sélectionnez "utf8_general_ci" dans la liste. Cliquez ensuite sur "Créer".
Maintenant que la base de données est créée, vérifiez que vous l'avez sélectionnée (voir image ci-dessous) et cliquez ensuite sur l'onglet "Privilèges".
Cliquez ensuite sur "Ajouter un utilisateur" en bas de la liste affichée.
Indiquez maintenant les informations suivantes :
- Nom d'utilisateur : postfix
- Client : localhost (ou sélectionnez Local dans la liste)
- Mot de passe : **** (cliquez sur le bouton "générer" situé en dessous, par sécurité)
Vérifiez enfin que la case 'Donner tous les privilèges sur la base de données "postfix"' est bien sélectionnée et cliquez sur "Exécuter" en bas de page.
Pour créer correctement la base de données MySQL pour Postfix, nous allons utiliser l'outil "Postfix Admin" écrit en PHP.
Note : Vous pouvez évidemment la créer vous même si vous le souhaitez.
Pour installer "Postfix Admin", récupérez le lien de téléchargement de la dernière version et faites un clic droit sur le lien "lien direct (direct link)".
Cliquez ensuite sur "copier l'adresse du lien". Vous aurez un lien de ce genre :
Plain Text
https://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.6/postfixadmin-2.3.6.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpostfixadmin%2Ffiles%2Fpostfixadmin%2F&ts=1391266659&use_mirror=switch
Supprimez ce qui se trouve derrière le ".tar.gz" et tapez ensuite les commandes suivantes :
On se déplace dans le dossier personnel de root
Bash
cd ~
Téléchargement de la dernière version de "Postfix Admin" pour Linux (.tar.gz).
Bash
wget https://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-2.3.6/postfixadmin-2.3.6.tar.gz
On décompresse l'archive que l'on vient de télécharger, dans le dossier www d'apache.
Bash
tar xzvf postfixadmin-2.3.6.tar.gz -C /var/www/
On se déplace dans le dossier "/var/www"
Bash
cd /var/www
On renomme le dossier "postfixadmin-x.x.x" en "postfixadmin"
Bash
mv postfixadmin-2.3.6 postfixadmin
On donne les droits à l'utilisateur apache "www-data" sur le dossier "postfixadmin" (et son contenu : -R)
Bash
chown -R www-data:www-data postfixadmin
On sauvegarde le fichier "config.inc.php" de "postfixadmin"
Bash
cp postfixadmin/config.inc.php postfixadmin/config.inc.php.bak
On remplace toutes les occurrences de "change-this-to-your.domain.tld" par votre domaine (dans notre cas : informatiweb-tuto.net) dans le fichier "postfixadmin/config.inc.php"
Note : Vous devez indiquer votre nom de domaine et non un sous domaine comme mail ou autre. C'est d'ailleurs ce domaine qui sera indiqué derrière le @ des adresses mail du serveur.
Bash
sed -i 's/change-this-to-your.domain.tld/informatiweb-tuto.net/g' postfixadmin/config.inc.php
Modifiez ensuite ce même fichier (postfixadmin/config.inc.php) pour configurer les informations de connection à la base de données :
Bash
vi postfixadmin/config.inc.php
PHP
$CONF['configured'] = true; // Active l'utilisation du programme d'installation de Postfixadmin ... $CONF['default_language'] = 'fr'; ... $CONF['database_type'] = 'mysqli'; // Extension utilisée par PHP. Dans notre cas mysqli. (si vous mettez mysql, un avertissement s'affichera sur la page "setup.php" de "postfixadmin".) $CONF['database_host'] = 'localhost'; // Adresse du serveur MySQL. localhost si apache et MySQL se trouve sur le même ordinateur. $CONF['database_user'] = 'postfix'; // Nom d'utilisateur MYSQL (l'utilisateur postfix que l'on a créé au point 2) $CONF['database_password'] = 'son_mot_de_passe'; // Son mot de passe $CONF['database_name'] = 'postfix'; // Base de donnée à utiliser ... $CONF['encrypt'] = 'md5crypt'; // Cryptage à utiliser
Maintenant que la configuration manuelle est terminée, accédez à la page : http://www.votre-domaine.com/postfixadmin/setup.php
Le script php va maintenant tester votre configuration et tenter de créer les tables de la base de données "postfix".
Si tout se passe bien, vous n'aurez que des lignes terminant par des OK sans aucun message d'erreurs.
Si vous obtenez une erreur "Warning: Depends on: IMAP functions", installez le paquet "php5-imap" (si besoin).
Il se peut que ce paquet soit déjà installé mais désactivé.
Bash
apt-get install php5-imap php5enmod imap service apache2 restart
En bas de page, vous trouverez un formulaire dans lequel vous devrez indiquer un mot de passe.
Vous devrez ensuite indiquer le mot de passe crypté qui vous sera affiché, dans le fichier "postfixadmin/config.inc.php".
Une fois que vous aurez indiqué le mot de passe crypté dans le fichier de configuration, créez le compte administrateur en remplissant le formulaire proposé.
Note : Comme indiqué dans le formulaire, le nom d'utilisateur doit être une adresse e-mail.
Maintenant que "Postfix admin" est configuré, connectez-vous à l'adresse "http://www.votre-domaine.com/postfixadmin/".
Une fois connecté, cliquez sur : Liste domaines --> Nouveau domaine.
Puis indiquez :
- Domaine : votre-domaine.com
- Description : Ce que vous voulez
- Alias : Nombre d'alias maximum pour ce domaine.
- Comptes courriels : Nombre d'adresses mail maximum pour ce domaine.
Allez ensuite dans le menu "Liste virtuels --> Ajouter un compte courriel" pour créer des adresses e-mail dans votre serveur de mail.
Puis indiquez :
- Nom d'utilisateur @ domaine : Ce que vous voulez @ votre-domaine.com
- Mot de passe : Mot de passe du compte
- Nom : Nom et prénom de la personne
La base de données de "Postfix" est maintenant configurée.
Maintenant que le serveur de mail "postfix" et sa base de données (créée correctement via Postfix Admin) sont créés et configurés, il nous reste à configurer Postfix pour qu'il puisse utiliser cette base de données correctement.
Note : Nous allons donc indiquer à postfix où se trouvent telles ou telles informations. C'est ce qu'on appelle : le mappage.
Pour stocker les mails, nous allons créer un utilisateur "vmail" qui se trouvera dans le groupe du même nom, et nous leurs attribuerons l'id 4000 (par facilité).
Bash
groupadd -g 4000 vmail useradd -g vmail -u 4000 vmail -d /var/spool/vmail -m
Déplacez vous ensuite dans le dossier "/etc/postfix" :
Bash
cd /etc/postfix
Nous allons maintenant créer les fichiers de "mappage" suivants :
- mysql_virtual_mailbox_domains.cf
- mysql_virtual_mailbox_maps.cf
- mysql_virtual_alias_maps.cf
- mysql_relay_domains.cf
Ces fichiers contiendront tous la structure suivante :
- hosts : adresse du serveur MySQL
- user : utilisateur de MySQL
- password : mot de passe de cet utilisateur
- dbname : le nom de la base de données de postfix
- query : La requête SQL que "Postfix" devra envoyer au serveur, pour récupérer l'information dont il a besoin.
Voici le contenu de ces fichiers (les lignes "vi ..." permettent de créer les fichiers listés ci-dessus) :
Bash
vi mysql_virtual_mailbox_domains.cf
Plain Text
hosts = 127.0.0.1 user = postfix password = monmotdepasse2 dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 0 and active = 1
Bash
vi mysql_virtual_mailbox_maps.cf
Plain Text
hosts = 127.0.0.1 user = postfix password = monmotdepasse2 dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
Bash
vi mysql_virtual_alias_maps.cf
Plain Text
hosts = 127.0.0.1 user = postfix password = monmotdepasse2 dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = 1
Bash
vi mysql_relay_domains.cf
Plain Text
hosts = 127.0.0.1 user = postfix password = monmotdepasse2 dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 1
Maintenant que ces fichiers de "mappage" sont créés, nous allons configurer le fichier "/etc/postfix/main.cf" de postfix pour lui indiquer (notamment) où se trouvent ces fichiers.
Bash
vi /etc/postfix/main.cf
A la fin de ce fichier, ajoutez les lignes suivantes :
Plain Text
virtual_uid_maps = static:4000 virtual_gid_maps = static:4000 virtual_mailbox_base = /var/spool/vmail virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_mailbox_domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf relay_domains = mysql:/etc/postfix/mysql_relay_domains.cf smtpd_recipient_restrictions = permit_mynetworks, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname
Note :
- Ne pas mettre "reject_non_fqdn_hostname" si vous souhaitez envoyer des mails via votre serveur SMTP depuis des clients d'emails (plus précisément : si votre ordinateur n'a pas de nom de domaine : FQDN).
Dans le cas contraire, l'utilisateur aura une erreur "Helo command rejected: need fully-qualified hostname" lorsqu'il tentera d'envoyer son mail.
Maintenant que postfix connait : les domaines, les adresses e-mail, ... nous devons supprimer notre domaine de la ligne "mydestination".
Dans le cas contraire, l'avertissement suivant s'affichera dans le fichier "/var/log/syslog" : warning: do not list domain informatiweb-tuto.net in BOTH mydestination and virtual_mailbox_domains
Si vous le souhaitez, vous pouvez définir le temps maximum que possède un mail pour arriver au destinataire.
Après ce temps, vous obtiendrez une alerte vous indiquant que le mail x n'a pas été délivré au destinataire.
Par défaut, cette ligne est commentée et vous devrez donc enlever le # pour l'activer :
Plain Text
delay_warning_time = 4h
Pour finir, indiquez votre nom de domaine à la ligne "myhostname" :
Plain Text
myhostname = votre-domaine.net
Par sécurité, modifiez les droits de ces 4 fichiers en tapant les commandes suivantes :
Bash
chmod u=rw,g=r,o= mysql_*.cf chgrp postfix mysql_*.cf
Et pour finir, redémarrer le service "postfix".
Bash
service postfix restart
Pour tester et initialiser une adresse e-mail locale (de votre domaine), commencez par vous connecter par telnet au serveur de mail postfix.
Si debian ne trouve pas la commande telnet, installez-la en tapant ceci :
Bash
apt-get update apt-cache search telnet apt-get install telnet
Informations :
- 127.0.0.1 (ou localhost) : indique que vous vous trouvez sur le même ordinateur que le serveur SMTP
- 25 : Numéro du port correspondant au SMTP
Bash
telnet 127.0.0.1 25
Ensuite, dites bonjour au serveur SMTP. (Remarquez que la commande ressemble au hello en anglais)
Bash
ehlo votre-domaine.com
Indiquez par exemple un expéditeur local existant sinon des erreurs se produiront dans les logs.
Bash
mail from:<lionel@informatiweb-tuto.net>
Indiquez un destinataire local (pour initialiser cette adresse mail)
Bash
rcpt to:<webmaster@informatiweb-tuto.net>
Tapez ensuite "data" pour écrire votre message.
Bash
data Salut
Ensuite, terminez en tapant un "." sur la ligne suivante et réappuyez sur Enter
Pour terminer, tapez "quit" pour quitter telnet et revenir dans le terminal.
Vérifiez maintenant que votre mail a bien été envoyé, en allant dans le fichier "/var/log/mail.log".
Bash
cat /var/log/mail.log
Si tout se passe bien, vous devriez trouver un message contenant ceci "(delivered to maildir)".
Dans le cas contraire, référez-vous aux messages d'erreurs que vous y trouverez.
Si le message était affiché dans les logs, vous pouvez lister le dossier "/var/spool/vmail" pour être sûr que le dossier concernant l'adresse mail du destinataire a bien été créée.
Si c'est le cas, réalisez, le cas échéant, cette opération pour vos autres adresses e-mail locales.
Linux 26/12/2014
Linux 8/9/2016
Linux 24/7/2015
Linux 31/1/2014
Contenu épinglé
Contact
® InformatiWeb-Pro.net - InformatiWeb.net 2008-2022 - © Lionel Eppe - Tous droits réservés.
Toute reproduction totale ou partielle de ce site est interdite et constituerait une contrefaçon sanctionnée par les articles L.335-2 et suivants du Code de la propriété intellectuelle.
Vous devez être connecté pour pouvoir poster un commentaire