blog-image

Les Courriels (Emails) dans MytinyDC

  • dHENRY
  • 15/11/2018
  • (Durée de lecture : 10 mn)

Je vais aborder le sujet de la transmission des courriels dans le Datacenter. Pour expliquer les flux rien de mieux qu’un petit dessin :

Je dispose de 6 serveurs, dont un seul (Master) connecté à l’internet, qui reçoit et émet des courriels pour le domaine. Les 5 autres n’ont pas accès direct à l’internet et émettent mais ne reçoivent pas de courriels. Dès le départ un serveur qui dispose d’une tâche planifiée (job cron), exécute son processus vers les sorties “standard” et “erreur”. Si vous ne prenez pas soin de rediriger ces sorties vers un fichier, elle seront redirigée vers le courriel du compte utilisé pour l’exécution de la tâche. Les serveurs par défaut ne sont pas équipés pour envoyer les courriels et resteront dans une file d’attente située dans le fichier “/var/spool/mail/mail”. Pour équiper le serveur j’installe le MTA (Mail transfert agent) “exim4”. Beaucoup d’administrateurs utilisent Postfix, faîtes votre choix..

Résumons, j’ai 6 serveurs qui lancent des tâches d’administration, qui peuvent elles-mêmes générer des erreurs. En admettant que j’ai installé un MTA sur chacun d’entre eux, il est inconcevable d’aller scruter chaque serveur. Toutes les tâches planifiées sont généralement exécutées par l’utilisateur root. Dans ce cas je vais paramétrer chacun des serveurs afin de rediriger tous les courriels à destination de l’utilisateur root vers une seule et même adresse du serveur “Master”. Si vous créer des tâches planifiées exécutées par un autre utilisateur que root, vous devez rediriger les courriels de ce compte vers root, qui redirigera vers l’adresse unique du Datacenter. Il s’agit d’une chaîne de redistribution. Ceci se fait en paramétrant le fichier /etc/aliases

Installation du serveur principal (Master)

Le serveur Master, distribue et reçoit les courriels du domaine et devient relais principal pour le Datacenter. Le firewall d’entrées-sorties du Datacenter ne laisse passer que le serveur Master pour la distribution des courriels.

Installation du MTA - exim4

Installation du paquet : apt install exim4

Spécifications du réseau :

  • Domaine : “mtdc
  • Réseau interne du Datacenter : 172.28.0.0/24 (255.255.255.0)
  • Adresse d’écoute du serveur email (exim4) : 127.0.0.1 172.28.0.1
  • Nom du serveur d’email : master et qualifié : master.mtdc

Je remplace le contenu du fichier “/etc/exim4/update-exim4.conf.conf” par : (adaptez les valeurs à votre configuration)

dc_eximconfig_configtype='internet'  
dc_other_hostnames='master;master.mtdc'  
dc_local_interfaces='127.0.0.1 ;172.28.0.1'  
dc_readhost=''  
dc_relay_domains='mtdc'  
dc_minimaldns='false'  
dc_relay_nets='172.28.0.0/24'  
dc_smarthost=''  
CFILEMODE='644'  
dc_use_split_config='false'  
dc_hide_mailname=''  
dc_mailname_in_oh='true'  
dc_localdelivery='maildir_home'

Les paramètres de configuration pour exim4 sont fixés, je créé la configuration finale du service exim4 en exécutant la commande :

update-exim4.conf

Je redémarre le service exim4 en exécutant la commande :

service exim4 restart

A ce stade n’essayez même pas d’envoyer un email sur internet avec Master, cela ne marchera pas. Ce cas sera l’objet d’un autre article.

Création d’un compte courriel

L’objet de cet article reste de récupérer les courriels des serveurs secondaires. Pour émettre un courriel, vous devez disposer d’une adresse d’émetteur et d’une adresse de destinataire. Je vais donc créer un compte sur le serveur “master”, intitulé “infogerance”. Utilisez la commande : **adduser infogerance **et renseignez les informations nécessaires, prenez l’habitude d’utiliser des mots de passe fort. Pour générer des mots de passe fort, j’utilise le logiciel apg (apt install apg). L’adresse de destination de ce compte sera : infogerance@master.mtdc

Installation d’un serveur secondaire (ex: server1)

Les serveurs secondaires émettent mais ne reçoivent pas de courriels. L’émission de courriels passera pas le relais “master”. Les serveurs secondaires ne distribuent pas directement les courriels hors et dans le réseau.

Installation du MTA - exim4

apt install exim4

Spécifications du réseau :

  • Domaine : “mtdc” * Nom du serveur secondaire : **server1 **et qualifié : server1.mtdc
  • Nom du serveur d’email qualifié : master.mtdc

Je remplace le contenu du “/etc/exim4/update-exim4.conf.conf” par : (adaptez les valeurs à votre configuration)

dc_eximconfig_configtype='satellite'  
dc_other_hostnames='**server1;server1.mtdc**'  
dc_local_interfaces='127.0.0.1'  
dc_readhost=**'server1.mtdc**'  
dc_relay_domains=''  
dc_minimaldns='false'  
dc_relay_nets=''  
dc_smarthost='**master.mtdc**'  
CFILEMODE='644'  
dc_use_split_config='false'  
dc_hide_mailname='true'  
dc_mailname_in_oh='true'  
dc_localdelivery='maildir_home"

Les paramètres de configuration pour exim4 sont fixés, je créé la configuration finale du service exim4 en exécutant la commande :

update-exim4.conf

Je redémarre le service exim4 en exécutant la commande :

service exim4 restart

Test d’envoi d’un courriel

Connecté “root” à la console de server1, exécutez la commande :

tail -f /var/log/exim4/mainlog &

Cette commande permet l’affichage continue, et en arrière plan, du contenu du fichier de traces /var/log/exim4/mainlog.

Envoyez un courriel en utilisant la commande :

echo "test mail." | sendmail  infogerance@master.mtdc

La console affiche un message indiquant que le courriel a bien été distribué par “server1” (Completed)

2018-11-15 10:19:05 1gN9aT-0003Hd-SS <= root@server1 U=root P=local S=274root@server1:~# 2018-11-15 10:19:06 1gN9aT-0003Hd-SS => infogerance@master.mtdc R=smarthost T=remote_smtp_smarthost H=master.mtdc [172.28.0.1] C="250 OK id=1gN9aU-0001qf-6R"  
2018-11-15 10:19:06 1gN9aT-0003Hd-SS **Completed**

Tapez la commande :

fg
#puis** CTRL-C**

Ceci permet d’arrêter le processus de lecture continue du fichier de traces.

Connectez-vous maintenant au serveur “Master” avec l’utilisateur root, et tapez la commande :

ls /home/infogerance/Maildir/new/

Vous disposez d’un fichier. Lisez le contenu de ce fichier avec la commande :

cat /home/info/Maildir/new/[nom du fichier]

Vous obtenez ce type de contenu, dont la phrase “test mail.

Return-path: root@server1.mtdc  
Envelope-to: infogerance@master.mtdc  
Delivery-date: Thu, 15 Nov 2018 10:27:08 +0530  
Received: from server1.mtdc ([172.28.0.4] helo=server1)  
       by masterwith esmtp (Exim 4.89)  
       (envelope-from root@server1.mtdc)  
       id 1gN9iF-00020x-GA  
       for infogerance@master.mtdc; Thu, 15 Nov 2018 10:27:07 +0530  
Received: from root by server1 with local (Exim 4.89)  
       (envelope-from )  
       id 1gN9iF-0003Ni-61  
       for infogerance@master.mtdc; Thu, 15 Nov 2018 10:27:07 +0530  
Message-Id:   
From: root root@server1.mtdc  
Date: Thu, 15 Nov 2018 10:27:07 +0530
 
   
test mail.

Paramétrage des Alias de courriels

Je souhaite que tous les courriels destinés à root sur ce serveur (server1) soit envoyés à l’adresse infogerance@master.mtdc. J’ajoute une entrée au fichier /etc/aliases comme suit :

root: infogerance@_master_.mtdc

LE SYSTÈME FONCTIONNE.** Répétez cette opération d’installation sur les 4 autres serveurs.**

Lecture des courriels

Vous allez me dire, c’est super ton truc mais je ne vais pas aller exécuter une commande cat sur chaque courriel reçu, puis la commande rm pour les effacer…
Effectivement, c’est ingérable, nous allons donc utiliser un système de type “Webmail”. Un des plus connus est certainement Roundcube. Et c’est à partir d’ici que cela se complique. Debian dispose du paquet roundcube, qui nécessite une base de données de type MariaDB (clône de Mysql) ou bien Postgresql. Mon Datacenter dispose d’un serveur de base de données MariaDB, je vais donc l’utiliser pour stocker les informations de RoundCube. Pour lire les courriels d’un compte, RoundCube utilise la technologie IMAP. Pour implémenter cette technologie je choisi Dovecot qui sera installé sur le serveur mail “Master”. Un petit dessin pour détailler la topologie :

Installation de Dovecot

J’ai du faire un “mix” de toutes les informations trouvées sur internet et j’ai testé les connexions/lectures avec l’application “Thunderbird” (compte type IMAP)…
On y va, tout ce qui suit paraît complexe mais ce ne sont que des modifications à opérer dans les fichiers de configuration de Dovecot.

apt-get install dovecot-imapd
 
# modifiez le fichier /etc/dovecot/conf.d/10-mail.conf
#cherchez la ligne commençant par "mail_location"  
#Commentez cette ligne active en préfixant par #  
et ajouter la ligne : 
mail_location = maildir:~/Maildir

Générer les certificats SSL pour établir une connexion sécurisée de type TLS

openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -out /etc/ssl/certs/mailcert.pem
-keyout /etc/ssl/private/mail.key

Code pays : FR  
Etat : xxx  
Ville : xxx  
Organisation : xxxx  

**FQDN : **le nom qualifié du serveur de mails : **indiquez bien le nom qualifié qui sera appelé par roundcube**.  
Celui ci effectue des vérifications (DNS, nom qualifié,etc..)  

#Modifier comme suit le fichier /etc/dovecot/conf.d/10-ssl.conf**  
ssl = required  
ssl_cert = </etc/ssl/certs/mailcert.pem  
ssl_key = </etc/ssl/private/mail.key  
   
  
#Modifier comme suit le fichier /etc/dovecot/conf.d/10-master.conf**  
service imap-login {  
inet_listener imap {  
  #port = 143
}  
inet_listener imaps {  
 port = 993  
 ssl = yes
}  
service auth {  
...  
# Auth process is run as this user. 
user = $default_internal_user
  
# Modifier comme suit le fichier /etc/dovecot/conf.d/10-auth.conf**
# décommentez la ligne **_disable_plaintext_auth = yes_**
# et modifier la ligne auth_mechanisms comme suit
auth_mechanisms = plain login
   
# Modifier comme suit le fichier /etc/dovecot/dovecot.conf**  
# modifier la ligne listen  
listen = 0.0.0.0
 
# Ceci permet d'écouter sur toutes les interface, vous pouvez filtrer ensuite avec le firewall
 
# Redémarrer Dovecot : 
service dovecot restart

Firewall : ouvrir ensuite le port 993 sur les interfaces correspondantes aux adresses IP indiquées sur la ligne “listen” du fichier /etc/dovecot/dovecot.conf

Pour effectuer le test avec Thunderbird, indiquez les paramètres de votre environnement et la méthode authentification “mot de passe normal

Installation de RoundCube

Si le test avec Thunderbird ne fonctionnent pas, inutile d’aller plus loin…

Pour RoundCube et en utilisant le paquet Debian, l’installation a été dans la même lignée, d’autant que la base de données MariaDB est située sur un autre serveur que celui où est installé RoundCube.

Connexion au serveur Web qui dispose déjà de PHP, j’exécute la commande :

apt install roundcube

Choisir “ignore” pour terminer l’installation

L’installateur me demande le mot de passe pour l’accès à la base de données roundcube, et le mot de passe root du serveur MariaDB. Mais il ne me demande pas l’adresse du serveur. L’installation est faîte pour une configuration avec serveur MariaDB en local. La nouvelle base de données Roundcube ainsi que son schéma ne sont donc pas installés…

Création de la base de données MariaDB

Je crée une base sur le serveur “172.28.0.3”. Vous pouvez utilisez phpmyadmin si vous disposez de cette outil connecté au serveur de base MariaDB, ou bien la créer manuellement en vous connectant à la console du serveur MariaDB. La commande de création est :

#Connecté root à la console du serveur MariaDB, exécuter la commande : 
mysql

# puis tapez les commandes mysql suivantes  

CREATE DATABASE roundcube;GRANT ALL PRIVILEGES ON roundcube.* TO **username**@localhost IDENTIFIED BY '**password**';
`FLUSH PRIVILEGES;`
# où username est le login de connexion à la base et password le mot de passe utilisé pour l'authentification MariaDB que vous devez remplacer.  

Mais je n’ai toujours pas le schéma !!! En regardant le contenu du paquet Debian RoundCube, je vois que le schéma d’installation est situé dans le fichier “/usr/share/dbconfig-common/data/roundcube/install/mysql”. Ce dernier contient l’intégralité du script SQL pour initialiser la base de données RoundCube. Ce schéma est également disponible à l’adresse (https://github.com/roundcube/roundcubemail/blob/release-1.2/SQL/mysql.initial.sql). Je récupère son contenu, me connecte à la base via Phpmyadmin, colle l’intégralité du code SQL et l’exécute. Si vous passez en ligne de commande, copiez ce fichier sur le serveur de base de données, et exécutez la commande :_ mysql -u [username] -p [nom de la base] < [nom du fichier sql]_. La commande vous demandera le mot de passe d’accès à la base roundcube.

Paramétrage de RoundCube

Je cherche la configuration de la base RoundCube qui est située dans le fichier /var/lib/roundcube/config/debian-db.php (vous devez adapter les termes mis en gras)

$dbuser='**roundcube**';  
$dbpass='**password**';  
$basepath='';  
$dbname='**username**';  
$dbserver='**172.28.0.3**';  
$dbport='3306';  
$dbtype='mysql';

RoundCube utilise IMAP, j’indique l’adresse du serveur IMAP en modifiant le fichier /var/lib/roundcube/config/config.inc.php

$config['default_host'] = 'tls://master.mtdc';  
  
# 'defautl_host' doit correspondre au FQDN du certificat SSL créé dans le chapitre "Installation DOVECOT".
# L'hôte master.mtdc doit bien être résolu par le DNS du Datacenter.**_

et en ajoutant des paramètres supplémentaires pour la connexion SSL

$config['imap_conn_options'] = array(  
'ssl' => array(  
'verify_peer' => true,  
'allow_self_signed' => true,  
)  
);

Paramétrage du VirtualHost Apache

Sur le serveur où est installé RoundCube, j’ajoute le virtualHost “**/etc/apache2/sites-available/mail.mtdc.conf **” simpliste permettant d’isoler les erreurs pour le nom qualifié “mail.mtdc” et configuré comme suit :

<VirtualHost _default_:80>
 
   ServerName mail.mtdc                   
 
   ServerAdmin root@localhost            
 
   ErrorLog ${APACHE_LOG_DIR}/errormail.log           

</VirtualHost>

J’active ce VHosts :

a2ensite mail.mtdc

Et recharge la configuration apache :

service apache2 reload

Avec mon navigateur, je me connecte à l’url : _http://mail.mtdc/roundcube _Vous remarquerez que le Vhost ne présente pas du tout d’éléments de configuration lié aux répertoires utilisés par RoundCube. Le paquet Debian comprend déjà cette configuration et situé dans /etc/apache2/conf-available/roundcube.conf. On peut y avoir l’alias “/roundcube”.

Avec quel compte dois-je me connecter ? Tout simplement le compte infogerance créé sur le serveur “Master” au chapitre “Test d’envoi d’un courriel” et en utilisant le mot de passe que vous avez fourni lors de sa création. Voici le déroulement de la connexion :

  • Connexion à l’url RoundCube : http://mail.mtdc
  • Je fourni le compte/mot de passe : “infogerance/monmotdepasse”
  • RoundCube cherche la configuration du serveur IMAP
  • Il envoie la paire compte/mot de passe saisie précédemment
  • Si l’authentification réussi, RoundCube peut récupérer les courriels de ce compte et les présenter dans l’interface.

_ Toujours pareil n’essayez toujours pas d’envoyer un courriel avec RoundCube_ Ceci sera l’objet d’un autre article.

Aller Plus loin

  • Installer une connexion sécurisée entre l’utilisateur et RoundCube (HTTPS)
  • Installer une connexion sécurisée (SMTP encrypté TLS/SSL) entre les serveurs et le serveur mail (dans la configuration présentée ce n’est pas le cas utilisation du port 25 - SMTP non crypté)
  • Utiliser des comptes en indiquant le domaine (ex: infogerance@master.mtdc
  • Paramétrer le serveur mail pour envoyer des messages sur l’internet.

Licence de ce document : Creative Commons (CC BY-NC-ND 4.0)

CETTE DOCUMENTATION EST LIVRÉE “EN L’ÉTAT”, SANS GARANTIE D’AUCUNE SORTE ET DISTRIBUÉE DANS UN BUT ÉDUCATIF EXCLUSIVEMENT. L’AUTEUR, CONTRIBUTEURS DE CETTE DOCUMENTATION OU ©MYTINYDC.COM NE SAURAIENT EN AUCUN CAS ÊTRE TENUS RESPONSABLES DES DOMMAGES DIRECTS OU INDIRECTS POUVANT RÉSULTER DE L’APPLICATION DES PROCÉDURES MISES EN ŒUVRE DANS CETTE DOCUMENTATION, OU DE LA MAUVAISE INTERPRÉTATION DE CE DOCUMENT.