IMA5 2021/2022 P20 : Différence entre versions
(→Installation de l'annuaire LDAP) |
(→Installation de l'annuaire LDAP) |
||
Ligne 192 : | Ligne 192 : | ||
Chaque entrée peut contenir des attributs auxquels on assigne des valeurs. Chaque entrée appartient au moins à une classe d’objet qui définit les attributs de l’entrée. | Chaque entrée peut contenir des attributs auxquels on assigne des valeurs. Chaque entrée appartient au moins à une classe d’objet qui définit les attributs de l’entrée. | ||
Par exemple, la classe d’objet “Employés” pourrait définir qu’un “élément” appartenant à cette classe doit contenir les attributs obligatoires :<br> | Par exemple, la classe d’objet “Employés” pourrait définir qu’un “élément” appartenant à cette classe doit contenir les attributs obligatoires :<br> | ||
− | nom de famille<br> | + | • nom de famille<br> |
− | prénom<br> | + | • prénom<br> |
==Semaine 2== | ==Semaine 2== | ||
=Documents Rendus= | =Documents Rendus= |
Version du 5 octobre 2021 à 10:08
Présentation générale
- Nom du projet : SEMail: Système de messagerie global mais individualisé
- Réalisé par : Souleymane SOW
- Superviseur du projet : Xavier REDON
- Durée : 06 SEP 2021 - 24 JAN 2022
Objectif
L’objectif du projet sera de mettre en place un système de messagerie qui va gérer plusieurs utilisateurs et une boîte à lettres par utilisateur. Le système devra permettre à chaque utilisateur d’avoir un contrôle important sur sa messagerie grâce à un système de conteneur par utilisateur. Afin d’éviter des failles de sécurité, la solution à mettre en place devra assurer un contrôle facile sur ses différentes composantes et cela grâce à sa simplicité.
Description
Au niveau global, le système de messagerie se compose des éléments suivants :
• une machine virtuelle qui va contenir le système de messagerie ;
• un serveur DNS permettra de gérer les enregistrements MX liés aux adresses de courriels ;
• un serveur Web permettra de créer de nouvelles boites pour chaque utilisateur et d’en supprimer ;
• un serveur SMTP accessible d’Internet permet de stocker les messages reçus par les utilisateurs locaux dans les systèmes de fichiers liés aux utilisateurs ;
• un serveur SMTP accessible uniquement de la machine virtuelle permet d’envoyer les courriels vers Internet ;
• pour chaque utilisateur un conteneur Docker sera créé.
Au niveau individuel, chaque conteneur permet :
• un accès en lecture et écriture au système de fichiers dans lequel sont stockés les courriels pour cet utilisateur par le serveur SMTP entrant Storage;
• un accès SSH dans le conteneur en utilisant un rebond par la machine virtuelle VM SEMail ;
• un accès réseau au serveur SMTP sortant SendMail permettant d’envoyer des courriels ;
• la possibilité d’installer des logiciels comme des lecteurs de messagerie suivant le choix de l’utilisateur.
Dans un but de prévenir les failles, les deux serveurs SMTP sont écrits à partir de zéro en respectant les consignes suivantes :
• Respect de la RFC 5321 mais avec des simplifications (pas d’implantation des commandes VRFY et EXPN, pas de routage et avec un système optionnel de gestion des messages non transmis avec succès) ;
• écriture en langage C avec la bibliothèque des sockets ;
• utilisation de bibliothèques dynamiques pour la gestion des connexions, une méthode pour la connexion sans chiffrement (ports 25 et 587) et une méthode pour la connexion avec chiffrement (port 465), ne pas implanter la commande STARTTLS ;
• chaque connexion est gérée par un processus léger (Threads) ;
• utilisation de bibliothèques dynamiques pour la gestion des commandes SMTP, chaque commande est gérée par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;
• prévoir un système optionnel pour le serveur SMTP sortant permettant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;
• gérer les enregistrements MX ainsi qu’IPv4 et IPv6 pour contacter les serveurs SMTP cibles ;
• les deux types de serveurs SMTP ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;
Le stockage des courriels doit se faire ainsi que décrit ci-dessous :
• le format de stockage doit être le format « mbox » ;
• chaque message entrant est ajouté au dossier de réception INBOX mais aussi à un dossier dont le nom est constitué de l’adresse de destination de l’enveloppe et de l’adresse source de l’enveloppe ;
• les courriels sont stockés dans un système de fichiers propre à l’utilisateur destination, ces systèmes de fichiers peuvent être implantés via des fichiers images ou via LVM ;
• les systèmes de fichiers contenant les courriels sont montés dans les conteneurs ad hoc.
Lors de la création d’une boîte aux lettres, les éléments suivants sont mis en place :
• précisons que l’utilisateur doit être identifié pour avoir le droit de créer son unique boîte aux lettres, cela se fera par un serveur LDAP, par défaut le serveur LDAP de la machine virtuelle est utilisé mais il doit être possible d’en utiliser un autre sur Internet ;
• soit l’utilisateur précise un nom de domaine externe pour son adresse de courriel auquel cas il doit insérer l’enregistrement MX lui même, soit il choisit un sous-domaine libre du domaine géré par le système, auquel cas le champ MX est ajouté automatiquement ;
• c’est l’utilisateur qui précise un identifiant pour son adresse de courriel qui vient compléter l’adresse Internet, le serveur SMTP entrant ne laissera passer que les courriels à destination de « id@domaine » ;
• le système de fichiers de stockage des courriels est créé avec une taille par défaut spécifié par l’administrateur et automatiquement formaté et peuplé ;
• le conteneur lié à l’adresse de courriel est créé automatiquement et lancé en mode persistant.
Un client de messagerie de type SquirrelMail est installé sur la machine virtuelle et permet aux utilisateurs qui ne veulent pas se compliquer la vie avec leur conteneur de gérer leur boîte aux lettres.
Préparation du projet
Cahier des charges
Cahier des Spécifications
Choix techniques : matériel et logiciel
Liste des tâches à effectuer
• Installation de la machine virtuelle de type Xen: Système d’exploitation Debian ou Devuan et SqWebmail comme système de messagerie
• Mis en place du serveur LDAP: Installation et remplissage de l’annuaire qui va contenir les utilisateurs de la messagerie
• Mis en place du serveur Web: Authentification des utilisateurs pour leur permettre de créer une nouvelle boîte unique et leur attribuer un conteneur de type Docker
• Programmation des 2 serveurs SMTP: Réalisé en langage C et avec la bibliothèque des sockets
• Configuration du serveur DNS: On utilisera le serveur DNS du réseau 172.26.145.0 de la salle informatique
• Tests: Après chaque tâche effectuée, des tests seront réalisés à la fin pour pouvoir être validés et passés à la tâche suivante
Calendrier prévisionnel
Réalisation du Projet
Semaine 1
Systéme de messagerie
Un système de messagerie électronique est l'ensemble des éléments contribuant à transmettre un courriel de l'émetteur au récepteur. Il y a quatre éléments fondamentaux. Ce sont:
• le Mail Transfert Agent ou MTA
• le serveur du protocole entrant
• le Mail Delivery Agent ou MDA
• le Mail User Agent ou MUA
Les différents éléments du système de messagerie sont agencés selon une architecture logique, pour en assurer le fonctionnement.
Nous représentons cette architecture par le schéma suivant:
Ce schéma présente le transfert d'un courriel d'un expéditeur à un destinataire.
1 - L'expéditeur communique son courriel via le MUA.
2 - Le MUA transmet ce courriel au MTA (la plupart des MUA intègre des clients SMTP).
3 et 4- Le MTA du système de l'émetteur établit un canal de transmission avec le MTA du système du destinataire, par émissions successives de requêtes bidirectionnelles .
5 - Une fois le canal établit, le courriel est transmis d'un système à un autre par les MTA.
6 - Dans le système du destinataire, Le MTA transmet le courrier reçu au serveur IMAP ou POP3.
7, 8 et 9 - Le MDA récupère le courriel du serveur IMAP / POP 3, et le met à disposition du MDA.
10 - Le MDA dépose le courriel dans la boîtes aux lettres du destinataire qui pourra le consulter à tout moment, sur authentification.
- Mail Transfert Agent ou MTA
C'est un agent qui permet d'acheminer le courriel d'un serveur à un autre. Le MTA de l'émetteur route le mail sur le MTA du récepteur.
Il implémente un protocole sortant. Notons que les protocoles sortants permettent de gérer la transmission du courrier entre les systèmes de messagerie. Le protocole sortant généralement utilisé est le Simple Mail Transfert Protocol ou SMTP .
SMTP peut être traduit comme protocole simple de transfert de courriel . Il est de la famille des protocoles basés sur TCP/IP. Il utilise généralement le port 25.
Le mécanisme de fonctionnement de SMTP est qu'il commence d'abord par vérifier l'existence de l'expéditeur et du ou des destinataire (s), indiqués dans l'entête du message, puis il transmet le contenu.
La transmission s'effectue sur un canal de communication établi entre l'émetteur et le destinataire par émission bidirectionnelle de requêtes basées sur des commandes.
Il existe plusieurs serveurs MTA qui implémentent SMTP. Parmi les plus connus, il y a Postfix, Exim, Qmail et Sendmail.
Dans le cas de notre projet, on aura à coder en partant de zéro notre MTA qui sera un serveur SMTP en langage C en utilisant la bibliothéque des sockets.
- Serveur du protocole entrant
Les protocoles entrants permettent la réception et la distribution du courriel. Les plus généralement utilisés sont : Post Office Protocol version 3 (POP3) et Internet Message Access Protocol (IMAP), qui sont tous deux basées sur TCP/IP .
Dans son fonctionnement, POP3 va récupérer le courriel sur un serveur de messagerie.IMAP est une version améliorée de POP3.
Dans le cas de notre projet, notre serveur de protocole entrant sera un serveur SMTP qui va stocker les messages reçus au dossier de réception Maildir qui sera propre à chaque utilisateur.
- Mail Delivery Agent ou MDA
Il s'agit d'un agent qui est en charge de la gestion des boîtes aux lettres . Il est chargé de livrer le courriel dans la boîte à messages du destinataire. Pour cela, il est souvent considéré comme le point final d'un système de messagerie .
Dans le MDA , on peut filtrer les courriels; et même supprimer les spams par des anti-spams (comme spamassassin) et contrôler les virus par des antivirus.
Il existe plusieurs serveurs MDA, les plus courants sont procmail, maildrop et cyrus.
Ici notre serveur SMTP de réception va jouer le role du MDA
- Mail User Agent ou MUA
Le MUA est un logiciel client de messagerie qui fournit un environnement pour la gestion du courriel (envoi, saisie, réception, suppression, etc.). Il est très proche du MDA.
Tout comme les autres agents, il existe également plusieurs MUA . Un MUA avec une interface Web, est appelé Webmail.
On utilisera SqWebmail pour la gestion de courriels par les utilsateurs.
Installation de la machine virtuelle avec Xen
- Xen c'est quoi?
Xen est un logiciel de (para)virtualisation de type hyperviseur. Il permet donc de faire tourner plusieurs systèmes d'exploitation (OS) sur une même ressource matérielle (PC, Serveur,…).
Xen permet de faire fonctionner plusieurs systèmes d'exploitation virtuels (invités) sur une seule machine hôte. Les choses ont beaucoup changé puisque le kernel Linux, à partir de la version 3, intègre nativement Xen. Le principe de l'hyperviseur est de faire tourner les OS dans le noyau (kernel) même, et non-pas de les émuler, ce qui permet de conserver des performances proches des natives.
- Installation du paquet
On vérifie si les paquets Xen-Hypervisor et Xen-tools(Gestion des machines virtuelles) sont déja installés ou pas:
sudo apt -qq list xen-hypervisor-4.11-amd64 sudo apt -qq list xen-tools
On voit que nos packets ne sont pas encore installés donc on les installe avec la commande:
apt-get install xen-hypervisor-4.11-amd64 xen-tools
Pour configurer xen-tools, on édite /etc/xen-tools/xen-tools.conf qui contient les valeurs par défaut que le script xen-create-image utilisera. Pour donner un chemin différent où les images domU sont enregistrées et activer le mot de passe superutilisateur dans la construction initiale, nous allons éditer le fichier /etc/xen-tools/xen-tools.conf et décommenter ces lignes :
dir=/home/xen passwd = 1
Ensuite, on peut créer notre machines virtuelle avec la commande :
xen-create-image --hostname Webmail --bridge bridge --ip 172.26.145.230 --vcpus 2 --pygrub --dist buster
On a utilisé le bridge déja existant sur la machine hote pour l'accés réseau de notre machine virtuelle et on lui attribue une adresse ip appartenant au réseau de l'hote. Pour démarrer la VM créée, on exécute la commande :
xl create /etc/xen/Webmail.cfg
Pour se connecter sur la console de notre vm on lance la commande:
xen console Webmail
Configuration de la machine virtuelle
Pour avoir accés aux autres réseaux on rajoute une route par défaut pour notre machine virtuelle:
ip route add default via 172.26.145.254
Ensuite on fait une mis à jour de notre systéme:
apt-get update && apt-get upgrade
Installation de l'annuaire LDAP
LDAP signifie Lightweight Directory Access Protocol. C’est le standard de fait pour accéder à un annuaire. Un annuaire est une base de données qui va contenir des informations sur des personnes, des machines, des groupes ou toute autre catégorie. Un annuaire se distingue d’une base de données relationnelle par le fait qu’il a une structure hiérarchique et qu’il est très rapide pour chercher et lire des éléments mais plus lent pour les modifier. Les annuaires sont couramment employés pour stocker les données d’authentification (login et mot de passe) ou pour obtenir des informations sur des personnes (email, téléphone, etc.) ou des objets (localisation, marque, modèle, etc.). Toutes les applications de votre entreprise (site web, e-mail, comptes système des ordinateurs, etc.) peuvent par exemple utiliser ce service d’annuaire pour valider les identifiants de connexion.
- Comment ça fonctionne?
Tout d’abord, un annuaire LDAP est une organisation hiérarchique d’entrées. Cette organisation constitue un arbre appelé DIT (Directory Information Tree) dont une des entrées est la racine.
Chaque entrée peut contenir des attributs auxquels on assigne des valeurs. Chaque entrée appartient au moins à une classe d’objet qui définit les attributs de l’entrée.
Par exemple, la classe d’objet “Employés” pourrait définir qu’un “élément” appartenant à cette classe doit contenir les attributs obligatoires :
• nom de famille
• prénom