Les Réseaux Informatiques Serveurs Web Serveurs de courrier Questions sur les cours précédents ? Boukli HACENE Sofiane
Serveurs de courrier Assure le transfert de messages électroniques (email) Deux grandes parties : Transfert de données entre serveurs SMTP Transfert de données d’un serveur à un utilisateur POP IMAP NFS
Le protocole SMTP Simple Mail Transfer Protocol Basé sur couche transport Fiable Ordonné TCP principalement RFC 821 donne d’autres alternatives S’appuie sur les informations DNS Mail eXchange (MX) record Champ optionnel Indique l’IP du serveur SMTP d’un domaine DNS
Le protocole SMTP (2) 4 types de nœuds SMTP : « Originator » : la machine émettant le message « Delivery » : la machine recevant le message « Relay » : hôte intermédiaire ne modifie pas le message « Gateway » : hôte intermédiaire peut modifier le message Le rôle d’une machine change Selon l’émetteur du message Selon le récepteur du message
Le protocole SMTP (3) Connexion TCP, port 25 Une transaction : Echange de Commandes / Réponses Commandes : ASCII / NVT Par le client uniquement 3/4 lettres + arguments Réponses : Par le serveur uniquement Code à 3 chiffres + arguments / message
Codes de réponse (1) XYZ + paramètres / message RFC 2821, section 4.2 (pp40-46) X = Nature du message 1 : OK, pour le moment 2 : OK 3 : OK, continue 4 : Impossible pour le moment 5 : Impossible RFC 2881, Pages 40-46 PP 33 36 de l’impression
Codes de réponse (2) XYZ + paramètres / message Y = élément en cause 0 : Syntaxe 1 : Information 2 : Connexion réseau 3,4 : Non précisé 5 : Système de mail Z = description fine
Protocole SMTP (4) Protocole simple Avec des extensions Facultatives Gérées par l’IANA Registre des extension intéressantes 1 numéro & 1 mot-clé par extension + Non standard Mot-clé commençant par un X Accord entre le client et le serveur
Structure d’un courrier Enveloppe Destinataire Source Options éventuelles Message ASCII / NVT Entête Emetteur Destinataires(s) Sujet Route suivie par le message Options Texte brut, sans formatage
Gestion du multimédia Comment gérer Encodage MIME Les accents, la mise en forme ? Les images, les sons ? Encodage MIME Multipurpose Internet Mail Extensions RFC 1847, 2045, 2047, 2633 Avantages Plusieurs parties De types différents (texte, image, sons, …) Non limité à 7 bits par caractère Encodé sur 7 bits par caractère Inconvénient Volumineux
Déroulement d’un transfert Client ouvre la connexion TCP Serveur envoie message de bienvenue 220 bla bla bla <CRLF> C: EHLO + identification du client <CRLF> S: 250-bla bla bla <CRLF> 250-extension 1 <CRLF> … 250 extension n <CRLF> Échange de commandes/réponses C: QUIT <CRLF> S: 221 bla bla bla <CRLF> Le serveur ferme la connexion
Transactions SMTP (1) Envoi d’un courrier : C: MAIL FROM:<@émetteur> + options <CRLF> S: 250 OK <CRLF> C: RCPT TO:<@destinataire> + options <CRLF> C: DATA <CRLF> S: 354 bla bla bla <CRLF> C: message sur plusieurs lignes C: . <CRLF>
Transactions SMTP (2) Vérification d’une adresse C: VRFY nom <CRLF> S: 250 prénom nom <@électronique> <CRLF> Ou alors, si ambiguïté S: 553- bla bla bla <CRLF> 553- possibilitié 1 <@1> <CRLF> 553- possibilitié 2 <@2> <CRLF> … 553 possibilité n <@n> <CRLF>
Transactions SMTP (3) Résolution de listes C: EXPN nom de liste <CRLF> S: 250- prénom1 nom1 <@1> <CRLF> 250-prénom2 nom2 <@2> <CRLF> … 250 prénom n nom n <@n> <CRLF> Ou erreurs 550 Access Denied 550 Mailbox name not authorized Bien d’autres commandes (RFC2881, section 4)
Envoi de courrier SMTP IMAP POP
Le protocole POP (1) Post Office Protocol RFC 1939, 1957, 2449 (POP3) Protocole d’accès au courrier Connexion au serveur Y a t’il du courrier ? Lire le courrier n°47 Supprimer le courrier 47 Fin de connexion POP2 : RFC 937 POP1 : RFC 918
Le Protocole POP (2) Connexion TCP, port 110 Dialogue par commande / réponse ASCII / NVT 2 types de réponses : +OK bla bla bla <CRLF> -ERR bla bla bla <CRLF> Très peu de commandes reconnues
Les commandes POP3 USER nom PASS mot de passe STAT LIST [n°] RETR n° DELE n° RST QUIT
Accès IMAP Concurrent de POP3 Les mails restent sur le serveur Avantages Les mails sont disponibles partout Ils sont classés sur le serveur Inconvénient Réseau obligatoire pour toute opération
Accès NFS Chaque client « monte » son dossier de courrier. accès direct aux fichiers du serveur Avantages : Très rapide Très sûr (pas de mot de passe transmis) Inconvénient : Accès NFS + NIS obligatoire
Les serveurs Web Met à disposition des pages stockées localement Accès universel : Toute machine Tout système d’exploitation Toutes langues Service UDP / TCP Port 80
Les serveurs Web (2) Protocole de base : Nature des pages Web HTTP Hyper Text Transfer Protocol RFC 1945 Nature des pages Web HTML, XML, … Images, sons, … Encodage MIME
Le protocole HTTP Basé sur Commandes / Réponses Commandes : ASCII / NVT <méthode> <chemin> <version> [<option>: <valeur] <ligne_vide> Peu nombreuses GET, HEAD POST, PUT
Le protocole HTTP (2) Réponses du serveur : <version> <code XYZ> bla bla bla Content-Type: <type MIME> [<option>: <valeur>] <le document demandé> Codes : 2xx : Succès 3xx : Redirection 4xx : Erreur client 5xx : Erreur serveur
Évolutions de HTTP Version 1.1 RFC ????? Informations supplémentaires permet un cache plus efficace permet un contenu dynamique Choix de la langue Choix d’un format d’images … Hôtes virtuels simule des machines différentes
Fonctions du serveur Répondre aux requêtes HTTP Envoyer des documents Exécuter des programmes CGI ASP JSP SSI Négociation de contenu (HTTP1.1) …
La sécurité (1) Attention au choix des racines Racine Web Point de départ du site Web Racine utilisateur Point de départ des pages personnelles Racine CGI, … Point de départ des modules exécutables Tout fichier contenu dans ces arbres est accessible ! Limiter les dossiers accessibles au minimum nécessaire au site.
La sécurité (2) Attention aux modules résidents CGI, ASP, JSP, … Possibilité de trous de sécurité Évaluer soigneusement les risques Accorder les droits minimaux
Exemple de CGI (1) Script Finger, en perl Login Informations complètes Listing : #!/usr/local/bin/perl require "cgi-lib.pl"; print "Content-Type: text/plain \n\n"; if (&ReadParse) {system(“finger $in{addr}“);} Permet l’utilisation de toute commande UNIX avec les droits du serveur !
Exemple de CGI (2) Listing de finger.pl #!/usr/local/bin/perl require "cgi-lib.pl"; print "Content-Type: text/plain \n\n"; if (&ReadParse) {system(“finger $in{addr}“);} POST /cgi-bin/finger.pl HTTP/1.0 Content-type: application/x-www-form-urlencoded Content-length: 30 addr=pierre ; cat /etc/passwd $in{addr} est remplacé par pierre ; cat /etc/passwd
Exemple de CGI (3) Exécution de finger.pl?addr=pierre; cat /etc/passwd #!/usr/local/bin/perl require "cgi-lib.pl"; print "Content-Type: text/plain \n\n"; if (&ReadParse) {system(“finger pierre ; cat /etc/passwd“);} Exécution de deux commandes UNIX : finger pierre commande normale cat /etc/passwd commande pirate
La sécurité (2) Attention aux modules résidents CGI, ASP, JSP, … Possibilité de trous de sécurité Évaluer soigneusement les risques Accorder les droits minimaux Ne JAMAIS lancer le serveur comme processus ADMINISTRATEUR.