PSR SE2a4 2022/2023 G5
TP SMTP 2022 - Spécifications techniques
Farid LAZOUACHE / William BECUE
GITHUB <b>
https://github.com/FaridLazouache/SMTP <pre> == Paramètres du TP == {| class="wikitable" ! Groupe !! Domaine !! Nom VM !! IPv4 virtuelle !! IPv4 routée !! VLAN privé !! Réseau local IPv4 !! Cisco 6509-E !! Cisco 9200 !! ISR4331 !! IPv6 |- | Groupe 5 | miserable.site | VMalex2 | 10.24.0.250 | 193.48.57.167/28 | 24 | 10.24.0.0/16 | 10.24.0.251 | 10.24.0.252 | 10.24.0.253 | 2001:660:4401:60A0:216:3eff:fe92:8ec5 |} == Machine virtuelle == * Connexion au serveur Capbreton : <pre>ssh root@capbreton.plil.info
→ Dossier de stockage des données de la VM : /usr/local/xen/domains/VMalex2
→ Fichier de configuration de la VM : /etc/xen/VMalex2.cfg
- Connexion à la VM :
ssh 193.48.57.167
Journal de bord
Séance 2
Nous avons découvert le projet, le contenu et la structure des pragrammes. Notamment nous avons examiner la gestion des SMTP rentrant et sortant, nous avons commencé notre analyse de la fonction in.c. La fonction qui gère la gestion des clients SMTP (les clients qui souhaitent se connecter de l'extérieur) puis la gestion des courriels (des demandes venant de l'extérieur) qui permet de récuper le noms des domaines et les MX. Ensuite, la fonction gestionCourriel permet à partir d'une boucle de gérer la connexion au serveur stocker dans ss (socket) Le contenu des messages va être stocker dans un fichier, celui-ci va être envoyé vers le serveur SMTP, qui lui va envoyer le message sur internet ou bien sur le disque Nous, nous sommes rendu compte, que le message de base envoyait une réponse à tous les MX. Cependant, il suffit d'un MX qui répondent à notre demande. De fait nous avons ajouté un else break ligne 66 dans le cas où nous avions deja eu un retour, pour stopper la boucle. Nous avons compris que gestion SMTP remplie struct courriel qui appel gestion courriel une fois rempli.
Ce qui a été fait:
- les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX
- pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications
- les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets
- les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées
- le routage des messages ne doit pas être implémenté
- les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25
- chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur
- les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ; => connexion et inittialisation serveur
- les deux serveurs 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 serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback
- ne doivent être stockés que les courriels à destination d’un utilisateur local
- le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia)
- chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination
- pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). => time
- Free mutexes
Liste reste à faire:
- un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ; => data gestion_dialog erreur temporaire mais pas definitive => courriel file d'attente et le renvoyer comme un script
- les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ; => serveur deux ports différents, un en claire et un directement chiffré
- il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ; => 4 caractères
- Faire une communication chiffré
- pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ; => envoyer un helo à la place => lancer la commande starTTLS => ehlo a partir de cette commande reponse plusieur lignes, si connait starttls reponse 250
- le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename