Installation serveur de messagerie (SMTP)

Niveau : moyen

Durée : 4h

Nous allons voir dans ce tutoriel la mise en place d’un serveur de messagerie sur votre réseau local fonctionnant sur une machine Debian.

Nous utiliserons pour cela, le protocole SMTP pour l’envoi, et IMAP pour la réception des emails. Et nous verrons l’installation des différents paquets et modules nécessaire au bon fonctionnement du serveur. A la fin de ce tutoriel vous aurez la possibilité de créer des adresses emails que vous pourrez fournir à vos utilisateurs pour qu’ils puissent s’échanger des emails grâce à votre application web dédié ici (Rainloop).

Il faut noter que ce tutoriel pourra par la suite être utilisé pour le déploiement de votre serveur de messagerie sur votre nom de domaine si en posséder un. Il faudra bien sur alors veiller à remplacer tous les mots de passe que je donne dans ce tutoriel par des mots de passe sécurisé !

Prérequis :

– Une machine fonctionnant sous Debian (pour ma part 9.5 stretch).

– Une connexion ssh à votre machine.

Aucun autre prérequis n’est nécessaire nous verrons ensemble l’installation d’une pile « LAMP » (Linux Apache Mysql PHP) ;

Note :

Ce tutoriel est particulièrement long et technique, c’est pourquoi je vous demande une attention particulière sur la réalisation de chaque étape. Ne continuez pas le tutoriel si lors de l’installation d’un paquet vous avez un message d’erreur, corrigez d’abord l’erreur et poursuivez le tutoriel. Pensez également à consulter régulièrement les logs après la configuration de chaque fichier de config. Ne pas continuer le tutoriel lors de messages d’erreurs dans les logs.

C’est parti

1. Installation de la pile LAMP (Linux Apache Mysql PHP) 

Tout d’abord faisons une brève mise à jour de notre Debian :

apt-get update && apt-get upgrade -y

Installation des paquets de la pile « LAMP » :

apt-get install apache2 mariadb-server php7.0 -y

Installation de toutes les dépendant PHP nécessaire par la suite et on redémarre apache :

apt-get install php7.0-mysql php7.0-mbstring php7.0-imap php7.0-xml php7.0-curl -y

 service apache2 restart

Installation d’un petit outil que nous permettra de vérifier l’arborescence des dossiers créée par notre système.

apt-get install tree mailutils -y

Et on installe Postfix, c’est le paquet qui nous permet de gérer l’envoi d’emails.

apt-get install postfix postfix-mysql -y

Une interface graphique doit apparaitre cocher le mode « Site Internet » et dans Nom de courrier mettez le nom de votre système pour ma part : osboxes

On installe Dovecot qui, quant à lui, va gérer la réception des emails :

apt-get install dovecot-mysql dovecot-pop3d dovecot-imapd dovecot-managesieved -y

On va également créer sur le serveur un groupe+utilisateur local nommé ici « vmail » qui sera chargé de gérer les emails. Son « home directory » sera défini sur /var/vmail et contiendra par la suite l’ensemble des mails reçus par le serveur.

groupadd -g 5000 vmail

useradd -g vmail -u 5000 vmail -d /var/vmail -m

Passons à la configuration de PostfixAdmin :

2. Installation et configuration de PostfixAdmin.

PostfixAdmin est une interface graphique (ou site web) qui va nous permettre de gérer les domaines, compte de messageries etc.

Pour cela il faut tout d’abord configurer notre base de données dans mariaDB.

Si vous ne l’avez pas déjà fait définissez un mot de passe du user root de mysql :

mysql_secure_installation

Une série de questions vous sera alors posée. La 1ère vous demandera de saisir le mot de passe actuel pour root. Nous n’en avons pas, appuyez juste sur la touche entrée.

Ensuite on vous demande « Set root password ? [Y/n] ». Appuyez de nouveau sur la touche entrée pour répondre « Oui » (Y = Yes) et définir un mot de passe pour l’utilisateur root (2 fois).

Pour toutes les questions qui suivront, appuyez sur entrée pour valider.

Connectez-vous à mariadb et saisissez le mot de passe fraîchement défini pour root :

mariadb -u root -p

On commence par créer une base de données que vous appelez « postfix » :

CREATE DATABASE postfix;

CREATE USER ‘postfix’@’localhost’ IDENTIFIED BY ‘root’;

Ensuite on lui attribue tous les droits sur la base postfix.

GRANT ALL PRIVILEGES ON `postfix` . * TO ‘postfix’@’localhost’;

Et pour la suite on crée un utilisateur « mailuser » qui n’aura que le droit de select sur la base.

CREATE USER ‘mailuser’@’localhost’ IDENTIFIED BY ‘choose_a_password’;

GRANT SELECT ON `postfix`.* TO ‘mailuser’@’localhost’;

On applique les changements et on quitte.

FLUSH PRIVILEGES;

QUIT ;

On installe maintenant Postfixadmin, pour cela on se place dans le répertoire /srv/ , on télécharge l’archive et on la décompresse .

cd /srv/

wget -O postfixadmin.tgz https://github.com/postfixadmin/postfixadmin/archive/postfixadmin-3.2.tar.gz (Ces 2 lignes sont la même commande)

tar -zxvf postfixadmin.tgz

On va maintenance créer un dossier appelé « postfixadmin » et déplacer l’archive à l’intérieur.

mv postfixadmin-postfixadmin-3.2 postfixadmin

On crée un lien symbolique de ce dossier dans le dossier root d’apache par défaut (le dossier « html »).

ln -s /srv/postfixadmin/public /var/www/html/postfixadmin

On crée un fichier « config.local.php »

nano /srv/postfixadmin/config.local.php

Et on y insère le code php suivant :

<?php
$CONF[‘database_type’] = ‘mysqli’;
$CONF[‘database_host’] = ‘localhost’;
$CONF[‘database_name’] = ‘postfix’;
$CONF[‘database_user’] = ‘postfix’;
$CONF[‘database_password’] = ‘root’;
$CONF[‘configured’] = true;
?>

Dans le dossier « www » on va créer un dossier nommé « templates_c » et rendre propriétaire l’utilisateur www-data qui est l’utilisateur spécifique du service web.

mkdir -p /srv/postfixadmin/templates_c

chown -R www-data /srv/postfixadmin/templates_c

On peut maintenant lancer le setup ! rendez-vous sur votre navigateur à l’adresse :

Votre_ip/postfixadmin/setup.php

En veillant bien sûr par remplacer « Votre_ip » par l’ip de votre serveur.

Une série de tests sera alors lancé vérifier qu’il n’y a aucune erreur, si c’est le cas que des « ok » devraient apparaitre. En cas contraire vous ne pouvez pas passer à la prochaine étape sans corriger les erreurs.

Si tous vos tests sont Ok rendez-vous en fin de page et remplissez le formulaire, choisissez un mot de passe et cliquez sur « Generate password hash »

Un message comme ceci va alors apparaitre :

Il faut alors copier toute la ligne fournie et la coller dans le fichier config.local.php entre les balises php comme ceci :

Ensuite il nous est demandé de créer un compte pour se connecter à l’interface admin.

Setup password : mettez le même mot de passe que prédéfinit précédemment

Administateur : admin@votre_ip

Mot de passe : nouveau_mdp

Mot de passe : confirmez_mdp

Cliquez ensuite sur « Ajouter un adminstrateur »

Le message suivant va apparaitre :

Connectez-vous à l’interface web Postfixadmin à l’adresse : votre_ip/postfixadmin/login.php

Connectez-vous avec votre admin user.

Vous arrivez alors sur la page suivante :

Nous allons à présent ajouter notre ip en domaine, cliquez sur « liste des domaines » et « nouveau domaine »

Metter votre ip en domaine et mettez 0 en valeur pour Alias et Comptes courriels, décochez « Le serveur est un « Backup MX » et cochez « Actif » et « Ajouter les alias par défaut » .

Puis « ajouter un domaine »

Maintenant on crée nos adresses emails. Cliquez sur « Liste des virtuels » et « Ajouter un compte courrier »

Créer ensuite 2 adresses emails pour 2 utilisateurs appelez par exemple userA et userB .

Maintenant que nos adresses email sont créées on passe à la configuration de Postfix serveur.

3 . Configuration de Postfix

On va lier Postfix à notre base de données afin que les utilisateurs puissent échanger des messages.

On commence par donner accès au domaine à postfix. Dans /etc/postfix, créer un fichier nommé « mysql-virtual-mailbox-domains.cf » et coller le code suivant :

user = mailuser
password = root
hosts = 127.0.0.1
dbname = postfix
query = SELECT 1 FROM domain where domain='%s'

Activez la configuration avec la commande :

postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

On teste maintenant si la recherche du domaine « votre_ip » fonctionne bien avec la commande :

postmap -q ent.lan mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf

Cette commande nous renvoie « 1 » si ce n’est pas le cas c’est qu’il y a une erreur quelque part.

Ensuite on vérifie si la boîte mail existe, comme pour le domaine. Créer cette fois-ci le fichier « mysql-virtual-mailbox-maps.cf » dans /etc/postfix et y insérer les lignes suivantes :

user = mailuser
password = root
hosts = 127.0.0.1
dbname = postfix
query = SELECT 1 FROM mailbox where username='%s'

On active avec la commande :

postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Et on teste comme pour le domaine :

postmap -q informatique@ent.lan mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf

Cette commande nous renvoie « 1 » si ce n’est pas le cas c’est qu’il y a une erreur quelque part.

Passons maintenant à la configuration de Dovecot

4 . Configuration de Dovecot

On se place dans le dossier /etc/dovecot/conf.d/. Le premier fichier à modifier est « 10-auth.conf ». La ligne « auth_mechanisms » doit avoir comme valeur « plain login ».

Dans ce fichier commentez la ligne « !include auth-system » et décommenter « ! include auth-sql »

Modifiez le fichier « auth-sql.conf.ext. » Recherchez le bloc « userdb » et remplacez les informations par celles-ci :

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/vmail/%d/%n

}

Editez le fichier “10-mail.conf » . Modifiez la ligne « mail_location » actuelle par celle-ci :

mail_location = maildir:/var/vmail/%d/%n/Maildir

Modifier le fichier « 10-master.conf ». Dans le bloc de configuration « service auth », cherchez la partie « # Postfix smtp-auth » et y ajouter les lignes suivantes :

unix_listener /var/spool/postfix/private/auth {
  mode = 0666
  user = postfix
  group = postfix
}

Placez-vous dans le dossier /etc/dovecot pour que Dovecot soit lancé en tant qu’utilisateur « vmail » :

chgrp vmail /etc/dovecot/dovecot.conf
chmod g+r /etc/dovecot/dovecot.conf

Et on redémarre le service :

service dovecot restart

5 . Mise en place de la lisaison Postfix <-> Dovecot

Ajoutez les 2 lignes suivantes à la fin du fichier /etc/postfix/master.cf

Attention à respecter la bonne syntaxe je vous déconseille de copier-coller ces lignes (2 espaces au début de la deuxième ligne et le bon nombre d’espaces entre les symboles) inspirez-vous de la syntaxe des lignes d’au-dessus !

dovecot        unix      –            n           n           –            –            pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}

Si par la suite vous avez des erreurs du type :

Dovecot : master : Warning Killed whith signale 15 (ne cherchez pas l’erreur est ici vous n’avez pas bien respecté la syntaxe)

Redémarrez les services Postfix :

service postfix restart

Appliquez les modifications avec les commandes suivantes :

postconf -e virtual_transport=dovecot
postconf -e dovecot_destination_recipient_limit=1

Testons la configuration actuelle.

Pour l’instant le dossier /var/vmail est vide :

tree /var/vmail

Teston d’envoyer un mail avec la commande mail :

echo test | mail userA@votre_Ip

Aucun retour de cette commande même en cas d’erreur. Vérifiez les logs :

tail -f /var/log/mail.log

Les dernières lignes des logs doivent ressembler à ça :

Le status doit être à « sent »

Vérifions si le dossier a été créé :

tree /var/vmail

6 . Installation et configuration de Rainloop  

Créez un répertoire « rainloop » dans /var/www/html et placez-vous à l’intérieur :

mkdir /var/www/html/rainloop

cd /var/www/html/rainloop

Appliquez les droits:

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chown -R www-data:www-data .

Allez dans le fichier « 000-default.conf » d’apache :

nano 000-default.conf

Et modifier le path de  « DocumentRoot » en « /var/www/html/rainloop »

Activez le site et redémarrez apache :

 a2ensite rainloop.conf

service apache2 restart

  Depuis le navigateur allez à l’adresse suivante :

Votre_ip/rainloop/ ?admin

Les identifiants par défaut sont :

  • Login : admin
  • MDP : 12345

Vous pouvez modifier la langue de l’interface.

On va déclarer notre domaine dans le menu « Domaines » sur la droite et cliquez sur « + Ajouter un domaine »

Renseignez le nom complet (nom+domaine) du serveur qui gère la messagerie dans la partie IMAP et SMTP. Les ports peuvent être laissés par défaut sur 143 pour IMAP et 25 pour SMTP.

Les 2 parties « Secure » doivent être définies sur « None » car nous n’avons pas abordé ce point. Et enfin, décochez toutes les cases éventuellement cochées.

Cliquez sur le bouton « i Test » pour vérifier la configuration. Si aucune erreur n’apparaît, cliquez sur « + Ajouter ». Le client webmail est prêt ! On le teste ? OK ! Allez à l’adresse suivante :

Votre_ip/rainloop/

Connectez-vous en utilisant l’adresse mail et le mot de passe d’un des 2 utilisateurs que vous avez créés dans Postfixadmin.

Une fois connecté, on retrouve dans la boîte de réception le mail envoyé tout à l’heure en ligne de commande. Allez, on va envoyer un mail à notre 2nd utilisateur créé avec Postfixadmin ! Cliquez sur nouveau en haut à gauche et envoyez le message souhaité au destinataire (ça, pas besoin de vous dire comment faire je suis sûre 😀  )

Et pour vérifier, et bien c’est simple, on se connecte sur la seconde boîte mail, c’est-à-dire celle du destinataire !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

+