• en: Emails with MytinyDC ()
  • 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/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 = 172.28.0.1, 192.168.1.10
     
    # L'adresse 192.168.1.10 est l'adresse par laquelle je peux contacter le serveur Master de l'extérieur du Datacenter. Pour   
    # effectuer les tests avec Thunderbird, je dispose d'un PC Linux avec une interface graphique, qui est situé en dehors du
    # Datacenter.
     
    # 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.

    Poster un commentaire

    Désolé, la réponse à la question Captcha est incorrecte
    Merci. le message est dans le tuyau :)
    Désolé, il y a un problème dans le tuyau, veuillez réessayer plus tard :(
    Un champs est invalide

    Commentaires (non traduits)

    Pas de commentaires