PSR SE2a4 2022/2023 G4

De Wiki d'activités IMA
Révision datée du 5 avril 2023 à 15:13 par Rmoussao (discussion | contributions) (Séance 5:)

Groupe Numéro 4 Rayane et Simon


À 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
  • Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465
  • Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS
  • 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 => Partiellement
  • Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée => SMTP dialogue à modifier => commande EHLO => permet de connaitre les fonctions du serveur
  • 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 => Partiellement fait, ajout du move dans la fonction gestionCourriel du fichier out.c


Séance 1:

  • Lecture du Sujet
  • On examine le code:- fonction in.c => fonction chercheMX (fct de résolution) => Permet d'obtenir le MX (nom d'un MTA) et donc le MTA (agent de transfert)
  • Compilation du code
  • Il faut determiner les tâches à effectuer


Prise en main de la VM (VMALAD):

  • Allumer la VM => capbreton.plil.info => xen create /etc/xen/VMALAD.cfg
  • Se connecter => ssh root@193.48.57.166 => mdp : glopglopglop
  • Utilisation de la commande SCP pour déplacer nos fichiers sur la VM

Modif code:

  • Changement dans gestionCourriel() -> in.c / changement pour éviter d'envoyer le message sur tout les mx mais sur celui qui marche


while(*p!=NULL){
 #ifdef DEVERMINE
   printf("Serveur : %s\n",*p);
 #endif
   int ss=connexionServeur(*p,SMTP_PORT_DEFAULT);
   FILE *dialogue=fdopen(ss,"a+");
   if(dialogue==NULL){
     perror("gestionCourriel.fdopen");
     exit(EXIT_FAILURE);
   }
   char erreur[MAX_ERREUR];
   int resultat=SMTP_dialogue(dialogue,donnees,erreur,MAX_ERREUR);
   fclose(dialogue);
   if(resultat<0) ecritureJournal(JOURNIV_DEVERMINE,JOURNAL_MXHS,*p);
   // Logguer l'erreur
   else { break; }
   p++;
    }
 }


Séance 2:

  • Explication du code en salle de cours (1h)



Modif code:

  • Dans Mutex.c => ajout d'un free(mutexes) | Car le threads est détruit mais pas l'allocation mémoire des mutexes
  • Dans out.c => fonction gestionCourriel => ajout d'un rename (move) du fichier TMP vers le fichier NEW
char new_fichier[MAX_CHEMIN];
sprintf(new_fichier, "%s/%s/%s/%ld_%010d_%010ld",dossier,id,MAILDIR_NEW,time_save,pid,messages);
rename(fichier, new_fichier);
}


Taches restantes:

En cours:

  • 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
  • Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465
  • Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS
  • 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 => Partiellement
  • Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée => SMTP dialogue à modifier => commande EHLO => permet de connaitre les fonctions du serveur


Terminé:

  • 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 => ajout du move dans la fonction gestionCourriel du fichier out.c


Séance 3:

  • Remise en forme du Wiki
  • Tester la communication de notre application et debuguer
  • Problème: SMTPin & SMTPout sur la même interface du port 25 ==> Il faut trouver un moyen de déplacer l'un des 2 sur une autre interface
  • Solution: Créer un argument a notre apllication pour pouvoir modifier l'interface, (précision de l'interface pour SMTPin & SMTPout)

Modif code:

  • Dans SMTPout ==> args.h => ajout d'une variable "interface" à la structure "stmp_config
struct smtp_config
 {
   char journal[CONFIG_MAX_JOURNAL];
   int niveau;
   char port[CONFIG_MAX_PORT];
   char dossier[CONFIG_MAX_CHEMIN];
   char carte[CONFIG_MAX_CHEMIN];
   unsigned char local;
   char interface[CONFIG_MAX_INTERFACE];
 };
  • Dans SMTPout ==> args.c => ajout d'un case i "interface" dans le switch


static struct option long_options[] = {
   {"local",no_argument,0,'l'},
   {"port",required_argument,0,'p'},
   {"journal",required_argument,0,'j'},
   {"niveau",required_argument,0,'n'},
   {"dossier",required_argument,0,'d'},
   {"utilisateurs",required_argument,0,'u'},
   {"interfaces", required_argument,0, 'i'},
   {0,0,0,0}
   };
 while(1){
   int c=getopt_long(argc,argv,"lp:j:n:d:u:i:",long_options,NULL);
   if(c<0) break;
   switch(c){
     case 'l':
       config->local=1;
       break;
     case 'i':
     strncpy(config->interface,optarg,sizeof(config->interface)-1);
     break;
     case 'p':
       strncpy(config->port,optarg,sizeof(config->port)-1);
       break;
     case 'j':
       strncpy(config->journal,optarg,sizeof(config->journal)-1);
       break;
     case 'd':
       strncpy(config->dossier,optarg,sizeof(config->dossier)-1);
       break;
     case 'u':
       strncpy(config->carte,optarg,sizeof(config->carte)-1);
       break;
     case 'n':
       config->niveau=atoi(optarg);
       break;
     default:
       afficheSyntaxe(argv[0]);
       break;
     }
   }


Test solution:

  • Commande pour lancer SMTPin sur la VM avec la séléction de l'interface local du port 25: root@VMALAD:~/SMTP/PSR-ReX-v6/src/SMTPin# ./SMTPin -l
  • Commande pour lancer SMTPin sur la VM avec la séléction de l'interface eth0 du port 25: root@VMALAD:~/SMTP/PSR-ReX-v6/src/SMTPout# ./SMTPout -i eth0
  • On utilise la commande suivante pour s'assurer que les 2 applications se trouvent sur les bons interfaces: root@VMALAD:~# ss -tlpn
2023 g4 commandess.png

Séance 4:

  • Test du serveur SMTP avec l'envoi de mail grâce à l'outil Telnet => le process d'envoi de mail fonctionne
  • A faire => relancer les applications en mode debug pour observer la sortie => Makedebug

Test:

  • On lance dans un premier temps les 2 process SMTPin & SMTPout sur la VM
  • Utilisation de Telnet, exemple:
2023 g4 telnet.png

Problèmes:

  • Problème lors de l'envoi de mail car l'outil Telnet a été utilisé sur un pc externe, or SMTPin est sur l'interface locale
  • Problème de MX lors de l'envoi du mail


A faire lors de la prochaine séance:

  • Refaire le test d'envoi de mail en utilisant Telnet directement sur la VM
  • Modification du code pour résoudre le problème de MX lors de l'envoi du mail


Séance 5:

  • Refaire le test d'envoi de mail en utilisant Telnet directement sur la VM
  • Modification du code pour résoudre le problème de MX lors de l'envoi du mail


Test d'envoi de mail:

  • Il n'y a plus d'erreur lorque l'on envoi un mail sur une adresse Polytech (1 seul MX), mais il n'y a pas de réception du message dans la boite mail.
  • Le problème persiste lorsqu'il y'a plusieurs MX (exemple avec Google)

Modif code (à completer):

A faire la prochaine fois:

  • Modifier le code SMTP.C de 250 à 220
  • Checker le multiMX


Séance 6:

Problèmes:

  • Nous avons essayé d'envoyer un mail de notre serveur SMTP vers un autre serveur (polytech), cependant les clées de notre domaine minable.site ont expirées, de nouvelles clés ont été créer mais nous devons attendre que ces changements soient pris en compte => Nous passons donc sur la réception de mail.