Enoncé du TP 7 Réseaux



Documents pareils
Enoncé du TP 7 Réseaux

Le service FTP. M.BOUABID, Page 1 sur 5

UE31 - M3102 : Services Réseaux

TP Sur SSH. I. Introduction à SSH. I.1. Putty

Serveurs de noms Protocoles HTTP et FTP

Manuel des logiciels de transferts de fichiers File Delivery Services

Couche application. La couche application est la plus élevée du modèle de référence.

Table des matières Hakim Benameurlaine 1

WEBMESTRE : CONCEPTION DE SITES ET ADMINISTRATION DE SERVEURS WEB

ftp & sftp : transférer des fichiers

2. MAQUETTAGE DES SOLUTIONS CONSTRUCTIVES. 2.2 Architecture fonctionnelle d un système communicant.

Plan. Le système de transfert de fichiers d'internet. Introduction aux systèmes de transfert de fichiers Le protocole FTP.

TCP/IP, NAT/PAT et Firewall

Cisco Certified Network Associate

Les commandes relatives aux réseaux

M1101a Cours 4. Réseaux IP, Travail à distance. Département Informatique IUT2, UPMF 2014/2015

SSH, le shell sécurisé

Atelier Le gestionnaire de fichier

Service FTP. Stéphane Gill. Introduction 2

Figure 1a. Réseau intranet avec pare feu et NAT.

Installation du transfert de fichier sécurisé sur le serveur orphanet

Logiciel de connexion sécurisée. M2Me_Secure. NOTICE D'UTILISATION Document référence :

Introduction. Adresses

Le routeur de la Freebox explications et configuration

Services Réseaux - Couche Application. TODARO Cédric

SSH et compagnie : sftp, scp et ssh-agent

L3 informatique TP n o 2 : Les applications réseau

Live box et Nas Synology

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

Linux LTE 2 - ISSBA. Année universitaire Linux Réseau et Archivage. Jean-Michel RICHER Faculté des Sciences, H206 1

Introduction au protocole FTP. Guy Labasse

Internets. Informatique de l Internet: le(s) Internet(s) Composantes de l internet R3LR RENATER

Les différentes méthodes pour se connecter

WINDOWS NT 2000: Travaux Pratiques. -Boîtier partage d'imprimante- Michel Cabaré Janvier 2002 ver 1.0

Quelques protocoles et outils réseaux

Administration Linux - FTP

Devoir Surveillé de Sécurité des Réseaux

TP : Introduction à TCP/IP sous UNIX

TP1 - Prise en main de l environnement Unix.

DHCP et NAT. Cyril Rabat Master 2 ASR - Info Architecture des réseaux d entreprise

Programmation Réseau. ! UFR Informatique ! Jean-Baptiste.Yunes@univ-paris-diderot.fr

TAGREROUT Seyf Allah TMRIM

FTPS AVEC UNE APPLIANCE FAST360 EN COUPURE. Table des matières

But de cette présentation

LAB : Schéma. Compagnie C / /24 NETASQ

Réseaux - Cours 4. Traduction d adresse (NAT/PAT) et Service de Nom de Domaine (DNS) Cyril Pain-Barre. IUT Informatique Aix-en-Provence

18 TCP Les protocoles de domaines d applications

L3 informatique Réseaux : Configuration d une interface réseau

Configurer le Serveur avec une adresse IP Statique (INTERFACE :FastEthernet) : et un masque

ECOLE POLYTECHNIQUE DSI. Utilisation des serveurs mandataires («proxy») avec les protocoles d usage courant

Utilisation des ressources informatiques de l N7 à distance

Administration de Parc Informatique TP02 : Utilisation du logiciel Marionnet

Tutorial Terminal Server sous

M2-RADIS Rezo TP13 : VPN

Installation et utilisation du client FirstClass 11

GRETA SISR1 TP Installation et mise en place d un serveur FTP sous Windows Server 2013

Réseaux. Moyens de sécurisation. Plan. Evolutions topologiques des réseaux locaux

LINUX - Sécurité. Déroulé de l'action. - 3 jours - Contenu de formation

Un peu de vocabulaire

Cours CCNA 1. Exercices

Procédure d utilisation et de paramétrage (filtrage) avec IPFIRE

Configuration du nouveau Bureau Virtuel (BV) collaboratif de Lyon I

Accès distant Freebox v6 Configuration

Réseaux CPL par la pratique

FTP. Table des matières

Contrôle de la DreamBox à travers un canal SSH

Bon ben voilà c est fait!

Sécurité des réseaux Les attaques

Configurer ma Livebox Pro pour utiliser un serveur VPN

Sécurité et Firewall

Guide de l utilisateur de Cisco Unified Communications Manager Assistant pour Cisco Unified Communications Manager 6.0

Sécurité des réseaux Firewalls

WinTask x64 Le Planificateur de tâches sous Windows 7 64 bits, Windows 8/ bits, Windows 2008 R2 et Windows bits

NiceLabel pour Services Microsoft Windows Terminal Serveur et Citrix MetaFrame

Sécurisation du réseau

TP Linux : Firewall. Conditions de réalisation : travail en binôme. Fonctionnement du parefeu Netfilter. I Qu est ce qu'un firewall?

VIDÉOSURVEILLANCE. Procédures de paramétrage des différentes box du marché

Manuel du logiciel PrestaTest.

TP4 : Firewall IPTABLES

Comment utiliser mon compte alumni?

Mise en place des TPs Réseau en machines virtuelles. Utilisation de VmPlayer

Windows Server 2008 Sécurité ADMINISTRATION ET CONFIGURATION DE LA SECURITE OLIVIER D.

Procédure pas à pas de découverte de l offre. Service Cloud Cloudwatt

Présentation Internet

TP 1 Prise en main de l environnement Unix

Manuel FDS File Delivery Services Transfert de fichiers SFTP et FTP

OUTIL DE CRYPTAGE ET DE COMPRESSION

Université Pierre Mendès France U.F.R. Sciences de l Homme et de la Société Master IC²A. TP réseau firewall

Services Réseau SSH. Michaël Hauspie. Licence Professionnelle Réseaux et Télécommunications

MISE EN PLACE DU FIREWALL SHOREWALL

Installation de GFI MailEssentials

Le filtrage de niveau IP

Configurez votre Neufbox Evolution

Plan Général Prévisionnel (1/2) Internet et Outils L1/IO François Armand. Plan Général Prévisionnel (2/2) Unix, Réseau: Plan

PROCÉDURE D AIDE AU PARAMÉTRAGE

Configuration d un Client VPN «TheGreenBow» 1) Création d un compte utilisateur dans la base LDAP Netasq

Protéger une machine réelle derrière une machine virtuelle avec pfsense

Réseaux et protocoles Damien Nouvel

Transcription:

Enoncé du TP 7 Réseaux Services réseaux, NAT/PAT, Filtrage C. Pain-Barre INFO - IUT Aix-en-Provence version du 9/4/2013 Table des matières 1 Préparation du TP 4 2 TELNET 4 2.I Client telnet pour le terminal virtuel................................. 4 Exercice 1 (Utilisation de telnet depuis Linux)............................ 5 Exercice 2 (Facultatif : utilisation de telnet depuis Windows).................... 6 2.II Telnet comme simple client TCP................................... 7 Exercice 3 (Utilisation de telnet en client TCP)........................... 7 3 Activités réseaux d un hôte 8 3.I Les services réseau et la sécurité................................... 8 3.II Lister l activité réseau avec netstat.................................. 8 Exercice 4 (netstat sur linux)..................................... 10 Exercice 5 (Facultatif : netstat sur windows)............................. 10 Exercice 6 (identification des services actifs)............................. 11 4 Autres outils du bricoleur réseau 11 4.I nmap : scanner un réseau....................................... 11 Exercice 7 (Utilisation de nmap sur Linux).............................. 11 4.II netcat : un client/serveur à tester................................... 12 Exercice 8 (Utilisation de netcat sur Linux)............................. 12 5 FTP 12 5.I Authentification FTP......................................... 13 5.II Commandes du client FTP...................................... 13 5.II.A Commandes relatives au transfert de fichiers........................ 14 5.II.B Commandes de déplacement et de manipulation de fichiers................. 16 5.II.C Commandes de gestion de la session............................. 17 5.III Limitations de FTP.......................................... 18 5.IV Clients FTP graphiques........................................ 18 5.V Exercices............................................... 18 Exercice 9 (Session FTP avec ftp.rfc-editor.org depuis Linux).................... 18 Exercice 10 (Dépot d un fichier sur un serveur FTP)......................... 19 Exercice 11 (Utilisation de gftp depuis Linux (allegro))....................... 19 5.VI Messages du protocole FTP...................................... 19 5.VII Exercices............................................... 22 Exercice 12 (Transfert manuel en mode actif)............................ 22 Exercice 13 (Transfert manuel en mode passif)........................... 22

Enoncé du TP 7 Réseaux Version du 9/4/2013 2/55 6 Simulateur : Nat/Pat et firewall 23 Exercice 14 (Simulation Nat/Pat et firewall)................................ 23 7 Introduction à SSH 26 7.I Notion de chiffrement........................................ 26 7.I.A Critique du chiffrement symétrique............................. 26 7.I.B Le chiffrement asymétrique................................. 27 7.I.B.1 Paires de clés et trousseau............................. 27 7.I.B.2 Cryptage/Décryptage par paire de clés...................... 28 7.I.B.3 Signature/vérification par paire de clés...................... 28 7.II Authentification d un serveur SSH.................................. 29 7.II.A Emplacement des clés d un serveur SSH........................... 30 7.II.B Procédure d authentification du serveur et cryptage de la connexion............ 30 7.II.C Authentification du serveur lors de la première connexion................. 30 7.II.D Enregistrement de la clé publique du serveur côté client................... 31 7.II.E Hashage des fichiers known_hosts.............................. 31 7.II.F Contrôler manuellement la clé publique du serveur..................... 32 7.II.G Supprimer manuellement la clé publique d un serveur................... 32 7.III Authentification de l utilisateur.................................... 32 7.III.A Authentification utilisateur par mot de passe......................... 32 7.III.B Authentification utilisateur par paire de clés......................... 33 7.IV Connexion à allegro avec mot de passe................................ 33 Exercice 15 (connexion SSH sur allegro)............................... 34 7.V Création d une paire de clés sous Linux............................... 34 Exercice 16 (Génération d une paire de clés avec ssh-keygen).................... 35 7.VI Déposer sa clé publique sur le serveur................................ 36 Exercice 17 (dépôt manuel de la clé publique sur allegro)...................... 36 7.VII Préparation à l utilisation de la paire de clés............................. 36 Exercice 18 (mise en conformité des droits)............................. 37 7.VIIIConnexion avec la paire de clés.................................... 37 Exercice 19 (Connexion sur allegro par paire de clés)........................ 37 7.IX Le fournisseur de passphrase ssh-agent................................ 37 Exercice 20 (utilisation de ssh-agent)................................. 38 8 Possibilités offertes par SSH 39 8.I Exécution de commandes à distance par ssh............................. 39 Exercice 21 (exécution de commandes distantes).......................... 40 8.II Copie de fichiers/répertoires par scp................................. 41 Exercice 22 (copie sécurisée par scp)................................. 42 8.III Transfert de fichiers par sftp..................................... 42 Exercice 23 (transfert de fichiers par sftp).............................. 43 8.IV Profils et options de ssh........................................ 43 9 SSH et la redirection de ports (tunneling) 46 9.I Principe du tunneling......................................... 46 9.II Mise en place de la redirection de port local avec ssh........................ 47 9.III Mise en place de la redirection de port distant avec ssh....................... 48 10 Et SSH sur Windows? 49 C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

3/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux 11 Le courrier électronique 50 11.I Clients de messagerie......................................... 50 Exercice 24 (Utilisation de Thunderbird)............................... 50 11.II Format d un message électronique.................................. 50 11.IIISMTP................................................. 52 11.III.AMessages du protocole SMTP................................ 52 11.III.BExercice............................................ 54 Exercice 25 (Envoi du message anonyme).......................... 54 11.IVÉtude de la RFC de POP3....................................... 55 Exercice 26 (récupération de messages avec POP3)......................... 55

Enoncé du TP 7 Réseaux Version du 9/4/2013 4/55 1 Préparation du TP Au cours de ce TP, nous aurons besoin d un certain environnement que nous allons mettre en place : 1. Sur une fenêtre terminal du PC, taper : $ ssh -X etxxxx@allegro afin de vous loger sur allegro. Nous utiliserons ce terminal plus tard dans la séance ; 2. Sur une autre fenêtre terminal du PC, taper : $ mkwxpnat.bash puis laisser la machine virtuelle XP démarrer (il faudra cliquer Ok lorsqu elle démarrera effectivement) ; 3. Sur une dernière fenêtre terminal du PC, télécharger le fichier tp7_services.mar en tapant : $ wget http://infodoc/~cpb/enseignement/reseaux/2012/tp/tp7/enonce/tp7_services.mar 2 TELNET TELNET (pour TErminaL NETwork) a été défini par la RFC 854, à laquelle s ajoutent de nombreuses autres RFC définissant des options ou extensions, à commencer par la RFC 855. Ce protocole a été élaboré dans le but de fournir un service de terminal virtuel, qui permet à un utilisateur de travailler à distance sur une station (comme avec SSH). Conçu à l origine sous Unix, TELNET gomme les différences entre les systèmes d exploitation : un utilisateur d un système quelconque peut se loger sur un serveur d un système quelconque. TELNET fonctionne en mode client/serveur et utilise une connexion TCP que le client établit avec le serveur. Dans cette section, sous allons principalement nous intéresser aux clients TELNET qui servent à : se loger à distance sur une station hébergeant un serveur TELNET ; dialoguer à distance avec un serveur quelconque, dont les messages sont formés de caractères ASCII. i Sous Unix et Windows, la commande telnet exécute un client TELNET. Ce n est pas la seule. Par exemple sous Windows, Putty et HyperTerminal en sont d autres, plus élaborés que la commande telnet par défaut du système. 2.I Client telnet pour le terminal virtuel Pour une utilisation de terminal virtuel, permettant de se loger sur un hôte distant hébergeant un serveur TELNET, on exécute la commande : $ telnet hôte où hôte est l adresse IP ou le nom du serveur. Cette commande exécute un client TELNET qui établit une connexion TCP avec le serveur TELNET qui doit être en écoute sur le port TCP 23 de l hôte hôte. C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

5/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Le terminal d où est exécuté le client telnet sert alors aux entrées-sorties avec un programme de login exécuté sur le serveur. L utilisateur est invité à entrer son nom et un mot de passe pour pourvoir exécuter un shell. Le serveur redirige les entrées-sorties du programme de login (et du shell) sur la connexion. TELNET fonctionne en transmettant du texte. La connexion TCP est utilisée pour transmettre les commandes à exécuter sur le shell, ainsi que leur résultat. Tout se passe comme si l utilisateur était installé devant une console de cet hôte. Outre ces données, la connexion sert aussi à transmettre des informations de contrôle. Notamment, le contrôle normalise les échanges de texte qui sont effectués car le client et le serveur peuvent avoir des codages de caractères différents. Le rôle du terminal virtuel (client et serveur) est de servir d interface entre un utilisateur et (un shell sur) un hôte distant, où ce que l utilisateur tape est envoyé au serveur et où ce que le serveur répond est affiché sur le terminal de l utilisateur, jusqu à ce que la connexion soit rompue. i Il est possible d exécuter des applications graphiques à distance lorsqu on est logé avec TELNET sur un hôte. Il faut pour cela exécuter en local un serveur X (afficheur de fenêtres) et paramétrer quelques variables et autorisations d accès. De nos jours, on préférera utiliser SSH plutôt que TELNET pour réaliser cette opération. Un certain nombre d options peuvent être négociées entre le client et le serveur. Le client telnet offre un mode commande pour son paramétrage et son contrôle, ce qui peut donner lieu à une négociation avec le serveur. Pour entrer dans ce mode, il faut taper la séquence de caractères d échappement.cette séquence est indiquée en début de session TELNET et consiste souvent à maintenir appuyée la touche Ctrl, suivie du caractère ] (crochet fermant que l on saisit à l aide de la touche AltGr ), ou parfois du $ (cas du client telnet de Windows). On entre alors dans le mode de commande du client telnet. On peut ensuite taper help pour avoir une liste de commandes disponibles, et il suffit de taper deux fois sur la touche Entrée pour revenir au terminal virtuel. Exercice 1 (Utilisation de telnet depuis Linux) Depuis un terminal sur votre PC : 1. utiliser telnet pour vous connecter à allegro ; 2. s authentifier ; 3. une fois logé sur allegro (vérifier le prompt), taper une commande quelconque, telle que ls -l ; 4. taper les 3 touches AltGr + Ctrl + ] suivies de Entrée afin de rentrer dans le mode de commandes du client (où le prompt telnet> est affiché) ; 5. taper help 6. taper deux fois sur Entrée (pour revenir à la session) 7. taper à nouveau une commande ; 8. terminer la connexion soit en tapant Ctrl + D, soit exit, soit en entrant dans le mode de commande et en tapant close ou quit. [Corrigé]

Enoncé du TP 7 Réseaux Version du 9/4/2013 6/55 TELNET est un service non sécurisé ni crypté. En particulier le nom de l utilisateur et son mot de passe sont transmis "en clair" (sans cryptage) sur le réseau. Par conséquent, le service TELNET est de moins en moins autorisé par les administrateurs réseaux qui le remplacent par SSH (secure shell). Notamment, il n est pas possible de se connecter sur une machine du Département Informatique par TELNET, à partir de l extérieur de l IUT. Cependant, TELNET est encore beaucoup utilisé pour administrer à distance certains (vieux) équipements réseaux, ou des équipements légers. Exercice 2 (Facultatif : utilisation de telnet depuis Windows) i Cet exercice est facultatif... Agrandir la fenêtre de la machine virtuelle Windows XP, puis ouvrir un invite de commandes MS-DOS (l interpréteur de commandes Windows) par le Menu Démarrer Exécuter puis taper cmd et Entrée. Sur ce terminal MS-DOS Windows : 1. pour élargir cette fenêtre terminal, effectuer un clic droit sur la barre du haut de la fenêtre et choisir Propriétés puis l onglet Configuration et mettre 150 comme largeur dans la zone Taille Fenêtre ; 2. exécuter telnet sans se connecter à un serveur. On peut remarquer que le caractère d échappement est CTRL-$ (indiqué au début). i Parfois, le client telnet sous Windows est graphique. Il ne dispose pas du mode commandes, mis à part les menus de la fenêtre qu il ouvre. Si c est le cas pour la version installée sur votre poste, explorer ces menus. 3. taper help 4. se connecter à allegro 5. s authentifier ; 6. taper quelques commandes (pwd, cd, ls,...) sur la session TELNET sur allegro 7. entrer dans le mode commandes de telnet 8. taper set? 9. utiliser set pour demander un echo local. 10. taper Entrée pour sortir du mode commandes de telnet 11. taper à nouveau quelques commandes (pwd, cd, ls,...), et observer. Les caractères tapés sont écrits 2 fois. i Cette option est utile lorsqu on contacte un serveur autre que TELNET en utilisant le programme telnet (voir ci-après) et que les caractères tapés n apparaissent pas à l écran. 12. quitter telnet [Corrigé] C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

7/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux 2.II Telnet comme simple client TCP Le programme client telnet peut être utilisé dans un autre but. En effet, il permet de communiquer avec des serveurs (pour peu qu on leur envoie des messages conformes aux protocoles qu ils implémentent) qui utilisent TCP comme protocole de transport. Ceci parce que telnet peut se comporter comme un client TCP ordinaire. Il suffit de lui indiquer après l hôte, le port utilisé par le serveur par la ligne de commande suivante : $ telnet hôte port où port est le numéro du port de l application à contacter, ou le nom (ou un alias) du service rendu par cette application tel qu il apparaît dans le fichier /etc/services sur Linux et C:\WINDOWS\system32\drivers\ etc\services (ou C:\WINNT\system32\drivers\etc\services) sur Windows. On en profite pour rappeler ici quelques ports TCP réservés : Num (décimal) Application 7 Serveur echo 13 Serveur daytime 20 Serveur FTP (données) 21 Serveur FTP (commandes) 22 Serveur SSH 23 Serveur TELNET 25 Serveur SMTP (transfert de mail) 53 Serveur DNS 80 Serveur HTTP (www) 119 Serveur NNTP (news) Le client telnet va alors établir une connexion TCP avec le serveur en écoute sur le port port de l hôte hôte. Tout ce que l utilisateur tapera sera transmis au serveur qui l interprétera généralement comme un requête. Tout ce que le serveur enverra sera alors affiché sur le terminal de l utilisateur et correspondra généralement à une réponse à une requête. De nombreux protocoles utilisent les caractères ASCII pour former leurs messages. Les serveurs de ces protocoles peuvent donc être contactés avec telnet. De plus, ces serveurs utilisent ou requièrent généralement que les fins de lignes soient exprimées par la séquence des deux caractères \r (Carriage Return ou CR) et \n (Line Feed ou LF), ce que fait justement telnet. i Pour ne citer que quelques protocoles majeurs qui utilisent des caractères ASCII dans leurs échanges, il y a : HTTP, FTP, SMTP, POP3. Exercice 3 (Utilisation de telnet en client TCP) Depuis un terminal du PC : 1. Utiliser less pour consulter le fichier /etc/services, en particulier le début ;

Enoncé du TP 7 Réseaux Version du 9/4/2013 8/55 2. Contacter le serveur daytime de infodoc en utilisant telnet. Celui-ci se contente de renvoyer la date et l heure qu il possède puis ferme la connexion ou reste muet. i Si le serveur ne ferme pas la connexion, entrer dans le mode commandes de telnet pour le faire. 3. Essayer ensuite de contacter le serveur daytime d allegro. En revanche, il y a très peu de chances de contacter avec succès un serveur situé à l extérieur de l IUT car ce genre de services est généralement désactivé (ou filtré). 4. Contacter le serveur echo de infodoc. Celui-ci renvoie les caractères qu il reçoit jusqu à ce que la connexion soit rompue. Taper quelques lignes puis terminer la connexion (en passant par le mode commandes de telnet). [Corrigé] 3 Activités réseaux d un hôte 3.I Les services réseau et la sécurité Les applications ou processus ouvrant un port TCP ou UDP sur un système, constituent le premier point d attaque accessible via un réseau TCP/IP (LAN et WAN). Le plus souvent ce sont des erreurs de configuration qui sont à l origine des failles de sécurité dans un réseau. Il est également courant que l administrateur a tout simplement oublié de désactiver un service réseau "sensible", comme par exemple le serveur TELNET installé par défaut par certaines distributions Linux (maintenant obsolètes) ou un serveur HTTP destiné à une utilisation exclusive en Intranet mais par erreur accessible via une adresse IP publique (i.e. à partir d Internet). Et bien sûr, la plupart des virus (vers et chevaux de Troie) communiquent via Internet avec d autres serveurs SMTP, HTTP ou FTP pour pouvoir se propager, pour télécharger des modules supplémentaires ou tout simplement pour déposer les informations qu ils ont pu extraire du système "infecté" sur un serveur distant (listes d adresses e-mail, codes d accès, numéro de cartes bancaires, etc.). 3.II Lister l activité réseau avec netstat Les processus utilisant le réseau peuvent être "débusqués" par l administrateur réseau en utilisant la commande netstat, disponible sur Unix et Windows. Elle donne des renseignements très complets sur les fonctionnalités réseau de la station, notamment sur l état des connexions TCP, des ports (TCP ou UDP) utilisés par les applications, et bien d autres choses. Elle admet de nombreuses options comme on peut le constater en consultant le manuel Linux. En particulier, netstat liste l ensemble des sockets TCP, UDP ou Unix ouvertes sur l hôte local : les sockets TCP et UDP sont les adresses des applications utilisant internet. On les appelle les sockets internet et sont identifiées par le triplet : (Adresse IP, Protocole, Port) Tout programme utilisant la pile IP pour communiquer avec Internet doit demander une socket TCP ou UDP pour obtenir une adresse d application ; les sockets unix correspondent à des fichier spéciaux (de type socket) et sont utilisées localement pour des communications entre processus de l hôte. Leur utilisation étant plus performante que les sockets internet, elles sont privilégiées pour les communications locales. C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

9/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Un processus dialoguant avec Internet reçoit ses données via une socket internet. Dans le cas de TCP, les serveurs sont en écoute sur une socket internet afin d accepter les connexions des clients. Lorsqu un client se connecte, le système fournit au serveur une socket internet supplémentaire représentant cette connexion. Lors de la demande de sa socket internet d écoute, le serveur indique à TCP par quelle adresse IP il veut être joignable. S il n a pas de préférence, il indique 0.0.0.0, voulant dire n importe quelle adresse (any). Un processus utilisant UDP fait de même pour indiquer par quelle adresse il souhaite recevoir des datagrammes. Pour un protocole de transport donné (TCP ou UDP), l adresse d une application est généralement affichée sous le format adresse-ip:port (voir exemple ci-dessous). Exemple 1 Supposons que sur un hôte on obtienne : $ netstat -an Connexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 0 0 127.0.0.1:7634 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN... tcp 0 0 139.124.187.34:40413 139.124.187.4:22 ESTABLISHED tcp 1 0 139.124.187.34:48549 91.197.138.30:80 CLOSE_WAIT... tcp6 0 0 :::22 :::* LISTEN... udp 0 0 0.0.0.0:68 0.0.0.0:* udp 0 0 0.0.0.0:69 0.0.0.0:*... raw 0 0 0.0.0.0:1 0.0.0.0:* 7... Sockets du domaine UNIX actives(serveurs et établies) Proto RefCnt Flags Type State I-Node Chemin unix 2 [ ACC ] STREAM LISTENING 677938 /var/run/avahi-daemon/socket... unix 2 [ ] DGRAM 2239 @/org/kernel/udev/udevd unix 3 [ ] STREAM CONNECTE 689563 @/tmp/.x11-unix/x0 alors dans l ordre, on peut en déduire qu il y a : un serveur en écoute (LISTEN) sur le port TCP 7634 mais qu il ne peut être contacté que par un processus local car il n écoute que sur l adresse 127.0.0.1 ; un serveur (SSH) en écoute (LISTEN) sur le port TCP 22, en écoute sur toutes ses adresses IP (0.0.0.0) ; une connexion TCP est en cours (ESTABLISHED) entre un client SSH local d adresse 139.124.187.34:40413 et le serveur SSH 139.124.187.4:22 ; le port TCP 22 étant celui des serveurs SSH ; une autre connexion TCP est en cours de terminaison (CLOSE_WAIT) entre un navigateur Web d adresse 139.124.187.34:48549 et le serveur HTTP 91.197.138.30:80 ; le serveur SSH accepte aussi IPv6 ; un client DHCP est actif et utilise l adresse 0.0.0.0:68 ;

Enoncé du TP 7 Réseaux Version du 9/4/2013 10/55 un serveur TFTP est en écoute sur l adresse 0 0.0.0.0:69 ; une socket internet en mode raw est active : il s agit d une socket utilisée par une exécution de la commande ping, reposant sur ICMP (mode raw) ; un serveur local est en écoute sur le fichier /var/run/avahi-daemon/socket pour accepter les connexions d autres processus locaux ; un processus utilise le fichier @/org/kernel/udev/udevd comme socket unix en mode non connecté (DGRAM) ; un processus local est connecté (avec un autre) via le fichier @/tmp/.x11-unix/x0. Exercice 4 (netstat sur linux) Sur un terminal du PC, consulter le manuel en ligne de netstat en tapant : $ man netstat pour étudier ses options -a, -r, -n, -t, -u et -p, puis répondre aux questions suivantes : 1. afficher toutes les sockets ouvertes ; 2. afficher la table de routage uniquement ; 3. afficher la table de routage uniquement mais en désactivant la résolution inverse (et voir les adresses IP et les numéros des ports plutôt que des noms d hôtes et de services) ; 4. l état des connexions TCP uniquement, sans résolution inverse ; 5. l état des sockets UDP 6. l état des sockets UDP avec des informations sur les processus qui les possèdent. En principe, cette dernière information n est disponible que pour root. [Corrigé] Exercice 5 (Facultatif : netstat sur windows) i Cet exercice est facultatif... Consulter l aide de netstat sous Windows en tapant : C:> netstat /? pour étudier ses options -a, -r, -p et -n, puis répondre aux questions suivantes : 1. afficher toutes les informations disponibles 2. afficher la table de routage uniquement 3. l état des connexions TCP uniquement, sans résolution inverse. [Corrigé] C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

11/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Exercice 6 (identification des services actifs) Sur le PC, lancer Marionnet et ouvrir le fichiertp7_services.mar téléchargé en début de TP. Cliquer ensuite sur Tout Démarrer. L administrateur a remarqué un ralentissement anormal sur son réseau et suspecte une infection de m2 par un processus utilisant Internet. Il pense qu un serveur a été activé à son insu et est à l origine des problèmes. Aidez l administrateur à se débarrasser de ce processus gênant. Pour cela, analyser sur m2 les sockets internet ouvertes. Essayer d utiliser telnet pour discuter avec les serveurs que vous trouverez. Quand vous avez trouvé le processus coupable, tuez le! i Sur m2 vous êtes root et vous pouvez vous servir avantageusement de l option -p de netstat... [Corrigé] 4 Autres outils du bricoleur réseau 4.I nmap : scanner un réseau Un des logiciels favoris des pirates ( ) est un scanner de ports. En effet, les pirates cherchent les services qui sont susceptibles de posséder une faille de sécurité afin de pénétrer un système. Pour cela, ils ont besoin d un bon scanner dans leur trousse à outil. Le plus célèbre est certainement nmap. Mais le scanner ne sert pas seulement aux pirates!! Il permet aux administrateurs réseaux ( ) de vérifier les ports ouverts sur leurs systèmes et s il n y a pas de service inutile actif ni de backdoor. i nmap est aussi disponible pour Windows.De plus, une interface graphique nommée zenmap est maintenant disponible. Exercice 7 (Utilisation de nmap sur Linux) La documentation de nmap (et le manuel en ligne) est très fournie car elle admet un très grand nombre d options dont certaines ne sont utilisables que par root. Nous nous limiterons à une utilisation des plus basiques, sans option simplement en tapant des commandes de la forme : nmap hôte 1. Depuis le PC, utiliser nmap pour vérifier les services ouverts. Comparer avec le résultat de netstat -atn exécuté sur le PC (l état d un serveur en écoute et donc actif est LISTEN ou LISTENING) ; 2. Depuis allegro, utiliser nmap pour vérifier les services ouverts sur votre PC. remarquer que les services locaux (en écoute sur 127.0.0.1) ne sont pas détectables ; 3. Depuis le PC, utiliser nmap pour vérifier ceux ouverts sur allegro ; 4. Depuis le PC, utiliser nmap pour vérifier ceux ouverts sur infodoc ; 5. Éventuellement, utiliser nmap pour vérifier ceux ouverts sur votre box (ou toute autre machine que vous connaissez à l extérieur) si vous connaissez votre adresse IP. [Corrigé]

Enoncé du TP 7 Réseaux Version du 9/4/2013 12/55 4.II netcat : un client/serveur à tester Il existe d autres logiciels que telnet pour contacter un serveur quelconque, notamment le logiciel netcat (et son évolution socat). Sous Linux, l exécutable se nomme nc et est généralement situé dans /usr/bin. Comparé par à telnet, l avantage de nc est qu il permet non seulement d envoyer des caractères ASCII sur une connexion mais aussi des données binaires. Il peut aussi servir de client UDP (alors que telnet n utilise que TCP). Enfin, il peut aussi servir de serveur, c est à dire qu il peut être "lié" à un port (TCP ou UDP selon le choix fait) et attendre que des clients lui envoient des données. i nc existe en plusieurs versions. Celle qui est installée sur les PC est la version BSD qui a plus de fonctionnalités que celle installée sur allegro, et qui s utilise un peu différemment. i Il existe aussi un portage de netcat sur Windows. Exercice 8 (Utilisation de netcat sur Linux) Sur un terminal du PC, consulter le manuel en ligne de nc en tapant : $ man nc pour étudier ses options -u et -l, puis répondre aux questions suivantes : 1. Utiliser nc pour contacter le serveur TCP daytime de infodoc ; 2. Utiliser nc pour contacter le serveur UDP echo d allegro ; 3. Utiliser nc pour lancer un serveur sur un port que vous choisirez (au dessus de 10000). Sur un autre terminal, par exemple depuis allegro, utiliser telnet pour vous connecter à ce serveur ; 4. Utiliser nc pour lancer un serveur UDP sur un port que vous choisirez (au dessus de 10000). Essayer d utiliser telnet pour le contacter (ça ne marchera pas). Le contacter en laçant un client nc (depuis allegro). [Corrigé] 5 FTP File Transfer Protocol (RFC 959) est un (vieux) protocole de la couche application de TCP/IP, permettant de transférer des fichiers entre des stations. Le programme ftp sur Linux et Windows est un client FTP permettant de contacter un serveur FTP. En tapant : $ ftp hôte où hôte est l adresse IP ou le nom d une station, le client tente d ouvrir une connexion TCP sur le port 21 de l hôte indiqué : C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

13/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Établissement de la connexion de contrôle client FTP connexion de contrôle 12345 21 serveur FTP Hôte local Hôte distant Si le serveur FTP est actif et répond favorablement, une connexion de contrôle est établie. Une "session" FTP vient alors de démarrer et le serveur attend généralement que l utilisateur s authentifie en fournissant un nom d utilisateur et un mot de passe. 5.I Authentification FTP Il y a deux possibilités d authentification : soit on dispose d un compte sur le serveur et l on veut transférer des fichiers depuis ou vers ce compte. Dans ce cas, on saisit son nom d utilisateur et son mot de passe ; soit on ne dispose d aucun compte sur le serveur mais on sait qu il met à disposition certains fichiers que l on peut télécharger ou un répertoire dans lequel on peut déposer (upload) des fichiers. Dans ce cas, il faut utiliser le nom d utilisateur "anonymous" (parfois "guest") et n importe quoi est souvent accepté comme mot de passe (parfois, il n est même pas demandé). i La règle de bonne conduite sur Internet veut cependant qu on indique son adresse e-mail comme mot de passe, en particulier si un message du serveur le précise lors de l authentification. Il n y a priori aucune raison de ne pas le faire... 5.II Commandes du client FTP Une fois le login accepté, de nombreuses commandes sont disponibles pour transférer des fichiers (mais pas des arborescences de répertoires). i Pour obtenir la liste des commandes disponibles proposées par le client ftp, if faut taper : ftp> help ou simplement : ftp>? Pour obtenir une description sur une commande en particulier, taper : ftp>? commande La suite de cette section passe en revue quelques unes des commandes disponibles à partir du client FTP.

Enoncé du TP 7 Réseaux Version du 9/4/2013 14/55 5.II.A Commandes relatives au transfert de fichiers binary et ascii : permettent de choisir une méthode de transfert selon la nature du fichier à transférer. ftp> binary ftp> ascii Avant de transférer un fichier, il faut en connaître le type : fichier texte ou fichier binaire. FTP ne fournit pas de commande permettant de connaître le type d un fichier avant de le transférer. Soit on sait quel est son type, soit on se base sur son extension ou sur son nom. Par exemple, les fichiers.h,.cxx,.txt,.uu,.ps,.java, readme devraient être des fichiers textes, alors que les fichiers.tar,.tgz,.z,.gz,.exe,.avi,.rar,.zip,.gif,.mp3,.deb,.rpm, devraient être des fichiers binaires. Pourquoi les distinguer? Parce que les fichiers textes doivent subir une modification pour adapter leur codage à celui du système qui les télécharge, alors que les fichiers binaires ne doivent pas être modifiés par le transfert. Ainsi, binary demande que le transfert qui suit soit binaire alors que ascii demande à ce qu il soit en mode texte. passive : permet de basculer du mode actif au mode passif, et inversement (voir get ci-après). ftp> passive Le client FTP sur Windows ne reconnaît pas cette commande. Ce client est donc généralement inutilisable sur un ordinateur qui se trouve derrière un firewall ou une Natbox. Voir explications ci-dessous sur les modes actif et passif. get : permet de demander le transfert d un fichier du serveur vers l hôte local. ftp> get fic-source [fic-destination] où fic-source est la référence du fichier à transférer et fic-destination est le nom qu il portera localement. Le transfert du fichier est opéré sur une connexion de données établie pour l occasion. Il y a deux possibilités pour l établissement de la connexion de données : en mode actif, le client choisit un port (ou se le fait attribuer par TCP) sur lequel il se place en écoute puis, par l intermédiaire de la connexion de contrôle, indique au serveur sur quel port il est joignable. Le serveur se connecte alors au client pour établir la connexion de données. Côté serveur, le port utilisé pour cette connexion est le port 20. Pour la connexion de données en mode actif, le client devient le serveur et le serveur devient le client. Établissement de la connexion de données (mode actif) client FTP connexion de données 34567 20 connexion de contrôle 12345 21 serveur FTP Hôte local Hôte distant C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

15/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Le mode actif est problématique lorsque le client se trouve derrière un NAT/PAT. En effet, il faudrait établir une règle de redirection pour le port écouté par le client. Bien souvent, cette solution n est pas envisageable. Derrière un routeur qui filtre les connexions entrantes (firewall), le problème est similaire. i Certaines Natbox évoluées règlent toutefois le problème du transfert actif en établissant d elles mêmes la règle de redirection nécessaire, lorsqu elles détectent une initiation de ce type de transfert. en mode passif, c est le client qui se connecte au serveur pour établir la connexion de données. Le port utilisé pour cette connexion par le serveur est communiqué au client par l intermédiaire de la connexion de contrôle. Établissement de la connexion de données (mode passif) connexion de données client FTP 23456 45678 connexion de contrôle 12345 21 serveur FTP Hôte local Hôte distant Chaque transfert de fichier doit se faire sur une connexion de données différente. Le mode passif est aussi problématique lorsque le serveur se trouve derrière un NAT/PAT ou un firewall. En effet, il faudrait établir une règle de redirection pour le port écouté par le serveur. i Là encore, certaines Natbox évoluées règlent toutefois le problème du transfert passif (côté serveur) en établissant d elles mêmes la règle de redirection nécessaire, lorsqu elles détectent une initiation de ce type de transfert. hash : activer/désactiver la visualisation de l activité de transfert ftp> hash a pour effet de faire afficher par le client un dièse (ou autre caractère selon le client) pour chaque bloc de fichier transféré. La taille du bloc est indiquée en réponse à hash. i les dièses ne sont pas transmis par le serveur ; c est le client qui les écrit en fonction de la quantité d information transférée.

Enoncé du TP 7 Réseaux Version du 9/4/2013 16/55 mget : permet de demander le transfert de plusieurs fichiers du serveur vers l hôte local. ftp> mget motif {motif} où motif est un motif de nom de fichier. Pour chaque fichier qui correspond au(x) motif(s), l utilisateur est invité à confirmer le transfert, à moins qu il ait demandé un mode sans invite (voir prompt ci-après). Encore une fois, chaque transfert de fichier doit se faire sur une connexion de données différente. prompt : permet de basculer du mode avec invite au mode sans invite. ftp> prompt put : permet de demander le transfert d un fichier de l hôte local vers le serveur. ftp> put fic-source [fic-destination] où fic-source est la référence du fichier à transférer et fic-destination est le nom qu il portera sur le serveur. Il faut bien évidemment avoir les autorisations nécessaires pour déposer un fichier sur le répertoire cible. Le transfert du fichier est opéré sur une connexion de données établie pour l occasion. 5.II.B mput : permet de demander le transfert de plusieurs fichiers de l hôte local vers le serveur. ftp> mput motif {motif} où motif est un motif de nom de fichier. Pour chaque fichier qui correspond au(x) motif(s), l utilisateur est invité à confirmer le transfert, à moins qu il ait demandé un mode sans invite. Commandes de déplacement et de manipulation de fichiers cd : permet de se placer dans un répertoire sur le serveur. Cette commande s utilise comme sur Unix. ftp> cd répertoire lcd : permet de se placer dans un répertoire sur l hôte local. Cette commande s utilise comme sur Unix. ftp> lcd répertoire ls ou dir : permettent d obtenir des informations sur un fichier ou le contenu d un répertoire. ftp> ls [-l] [référence] [fichier-sortie] ftp> dir [référence] [fichier-sortie] dir est équivalent à ls -l. référence est le fichier ou le répertoire sur lequel appliquer la commande et fichier-sortie est une référence d un fichier dans lequel on veut placer le résultat de la commande. Certains sites (comme ftp.inria.fr) conseillent fortement d utiliser ls -l ou dir plutôt qu un simple ls (j avoue ne pas savoir pourquoi, alors si vous le savez, dites-le moi en m envoyant un mail). Les informations fournies par ls (dir) le sont sur une connexion de données. chmod : permet de changer les permissions d un fichier (ou répertoire) sur le serveur ftp> chmod permissions référence C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

17/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux rename : permet de renommer un fichier sur le serveur ftp> rename ancien nouveau demande de renommer le fichier (ou répertoire) ancien en nouveau. On ne déplace pas un fichier avec cette commande. De plus, si le fichier nouveau existe déjà, il est écrasé. Si ancien et nouveau sont des répertoires (existants), alors nouveau sera écrasé s il est vide, sinon cela produit une erreur. 5.II.C delete : permet de supprimer un fichier sur le serveur ftp> delete référence Cette commande ne s applique pas aux répertoires. mdelete : permet de supprimer plusieurs fichiers sur le serveur ftp> mdelete motif {motif} À nouveau, cette commande ne s applique pas aux répertoires. mkdir : permet de créer un répertoire sur le serveur ftp> mkdir référence rmdir : permet de supprimer un répertoire sur le serveur ftp> rmdir référence où référence est un répertoire vide.! : permet d exécuter une commande localement. ftp>! [commande] La commande est exécutée dans un shell et son résultat est affiché sur la sortie standard. Cela permet par exemple de pouvoir visualiser un fichier sans quitter la session FTP, de créer localement un répertoire, renommer un fichier, etc. La syntaxe de commande est propre au shell du système du client. Si aucune commande n est fournie, le client FTP exécute un shell et lui cède la place. Lorsque le shell est terminé (par exemple, en tapant une commande shell de type exit), le client FTP reprend la main. Commandes de gestion de la session bye ou exit ou quit : terminer la session FTP et se déconnecter du serveur. ftp> bye ftp> exit ftp> quit close : permet de terminer la session FTP en cours. ftp> close Cette commande ne fait pas quitter du client FTP. open : permet d ouvrir une session FTP ftp> open serveur

Enoncé du TP 7 Réseaux Version du 9/4/2013 18/55 user : permet de commencer la phase d authentification ftp> user nom Peut s utiliser si l utilisateur ne s est pas encore logé (par exemple après un échec d authentification). Suite à cette commande, il faudra généralement fournir un mot de passe pour s authentifier en tant qu utilisateur nom. 5.III Limitations de FTP FTP n est pas conçu pour télécharger ou déposer une hiérarchie de répertoires (arborescence). Plus simplement, il n est pas possible de demander le transfert d un fichier répertoire (avec son contenu). Cela est très gênant. Pour contourner le problème, les arborescences doivent être archivées dans un fichier unique (et binaire) qui pourra être transféré. Sous Unix (et Linux), les archives sont créées avec l utilitaire tar (tape archiver) et portent généralement l extension.tar,.tgz (si compressée en même temps par gzip) ou.tgz,.taz (si compression par compress). Parfois, l archive est compressée après avoir été créée, et porte une extension de type.tar.gz ou.tar.z. Sous Windows, les archives sont le plus souvent créés (avec compression automatique) en utilisant les logiciels WinZip ou Winrar, et portent l extension.zip ou.rar. i Certains clients FTP (comme la plupart des clients graphiques) permettent de transférer des arborescences. Pour cela, ils parcourent eux-même récursivement l arborescence à télécharger, en faisant une requête LIST pour chaque répertoire rencontré. 5.IV Clients FTP graphiques Il existe pléthore de clients FTP graphiques plus ou moins ergonomiques, notamment en offrant une visualisation côte-à-côte du répertoire distant et du répertoire local et en permettant le drag and drop (glisser-déposer). De plus, ils permettent généralement de transférer des arborescences (ils se chargent de se déplacer dans l arborescence et d en transférer le contenu). Parmi ce genre d outils, on peut citer : WS-FTP sous Windows édité par ipswitch Filezilla sous Windows et Linux gftp sous Linux/Unix 5.V Exercices Exercice 9 (Session FTP avec ftp.rfc-editor.org depuis Linux) Depuis un terminal du PC, utiliser ftp pour se connecter en tant qu utilisateur anonyme au serveur FTP du site officiel des dépôts des RFC, d adresse ftp.rfc-editor.org (ou au serveur ftp.pasteur.fr). Aller dans le répertoire in-notes (sur le serveur pasteur.fr, ce répertoire est dans pub/computing/rfc) et récupérer le fichier rfc1939.txt en mode passif (transfert de fichier texte) avec visualisation de l activité de transfert. Lorsque le fichier a été transféré, fermer la connexion en quittant ftp en tapant quit (ou bye). [Corrigé] C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

19/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Exercice 10 (Dépot d un fichier sur un serveur FTP) Toujours depuis un terminal du PC, utiliser ftp pour se connecter au serveur FTP d allegro en utilisant votre vrai nom d utilisateur. Une fois fait, créer un répertoire rfc dans tp à partir de la session FTP et y déposer le fichier rfc1939.txt. Enfin quitter le client FTP et vérifier que le fichier est bien présent sur allegro. [Corrigé] Exercice 11 (Utilisation de gftp depuis Linux (allegro)) En utilisant gftp depuis le PC, récupérer la RFC 959 depuis le serveur ftp.rfc-editor.org. Cette RFC décrit le protocole FTP. Y jeter un coup d œil puis la mettre de côté. [Corrigé] i Les administrateurs réseaux ferment de plus en plus les services non sécurisés (cryptés) comme FTP. Dans ce cas, il faut utiliser de sous-modules de ssh (secure shell) offrant des services de type FTPcrypté. Les clients de ces sous-modules sont par exemple scp (secure copy), sftp (secure FTP) ou lftp sous Linux. Sous Windows, il existe un logiciel gratuit nomme PSFTP que l on trouve sur le site consacré à PUTTY (un client SSH pour Windows) : http://www.chiark.greenend.org. uk/~sgtatham/putty/. 5.VI Messages du protocole FTP Le protocole FTP fonctionnant en mode client/serveur, le client envoie un message (requête) au serveur via la connexion de contrôle et le serveur lui retourne une réponse sur cette même connexion. Selon la requête, cela produit l établissement d une connexion de données et un transfert d information (fichier, contenu d un répertoire). Voici ci-dessous quelques messages que le client peut envoyer ainsi que quelques réponses possibles du serveur, le tout étant précisé dans la RFC 959 que vous avez téléchargée : Tous les messages (requête ou réponse) se terminent par les deux caractères \r (Carriage Return ou CR) et \n (Line Feed ou LF). Cependant, les serveurs acceptent généralement les requêtes qui ne se terminent que par LF. USER nom pour indiquer un nom d utilisateur. Si le serveur a besoin d un mot de passe pour cet utilisateur, il enverra une réponse commençant par 331 comme : 331 User name okay, need password. sinon, il acceptera le login par un message commençant par 230 comme : 230 nom user logged in Les réponses des serveurs commencent toutes par un code à trois chiffres suivi d une explication. L explication est libre et est destinée aux humains. En revanche le code n est pas libre car est destiné à être traité par le processus client. Les réponses commencent toujours par un chiffre compris entre 1 et 5. S il vaut 4 ou 5, c est que le serveur indique une erreur, sinon il s agit d une réponse favorable.

Enoncé du TP 7 Réseaux Version du 9/4/2013 20/55 Parfois, la réponse du serveur tient en plusieurs lignes. Dans ce cas, toutes les lignes ont le même code suivi d un tiret -, sauf la dernière pour laquelle le code est suivi d un espace. PASS mot-de-passe pour indiquer le mot de passe pour cet utilisateur. En réponse, le serveur indique que l authentification est acceptée par un message commençant par 230 comme : 230 User nom logged in. Il indique une erreur d authentification par un message commençant par 530 comme : 530 Login incorrect. CWD répertoire pour changer de répertoire. En réponse, le serveur indique un succès par un message commençant par 250 comme : 250 CWD command successful et une erreur par un message commençant par 550 comme : 550 répertoire: No such file or directory PORT h 1,h 2,h 3,h 4,p 1,p 2 dans le mode actif, le client indique par cette commande sur quel couple adresse/port le serveur doit se connecter pour établir la connexion de données. Les valeurs h 1,h 2,h 3,h 4 indiquent l adresse IP h 1.h 2.h 3.h 4. Le port P en question est indiqué par p 1 et p 2, où P = (p 1 256) + p 2 (p 1 est la valeur de l octet de poids fort de P et p 2 celle de l octet de poids faible). Une réponse favorable du serveur commencera par 200 comme : 200 PORT command successful i L adresse ne correspond pas forcément à celle du client. Ce dernier peut demander au serveur de se connecter à une autre machine, pour peu qu il y ait un processus sur la machine ciblée, en écoute sur le port indiqué. Cependant, la plupart des serveurs refusent cette opération. PASV dans le mode passif, le client indique par cette commande qu il va demander un transfert, et qu il a besoin que le serveur lui indique un couple adresse/port pour se connecter. Une réponse positive commencera par 227 et contiendra le couple adresse/port comme : 227 Entering Passive Mode (82,3,4,5,151,37). Ici, le serveur indique qu il s est mis en attente sur le port 38693 (= 151 256 + 37) sur la machine d adresse 82.3.4.5. C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

21/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux TYPE type LIST pour spécifier un mode de transfert des données. Parmi les types reconnus, il y a A (ascii) et I (image binaire). Une réponse positive du serveur commencera par 200 comme : 200 Type set to type demande au serveur de transférer le contenu (avec détails) du répertoire de travail (sur le serveur). Ce transfert se fait en établissant une connexion de données. Pour cela, cette requête doit être précédée d un message PORT ou PASV. Si le serveur accepte, il enverra un message commençant par 150 comme : 150 Opening ASCII mode data connection for file list Lorsque le transfert est terminé, le serveur envoie un message commençant par 226 comme : 226 Transfer complete. RETR référence demande le transfert du fichier indiqué depuis le serveur vers le client. Ce transfert se fait dans les même conditions que pour LIST. Si le serveur accepte, il enverra un message commençant par 150 comme : 150 Opening ASCII mode data connection for référence (x bytes) Lorsque le transfert est terminé, le serveur envoie un message commençant par 226 comme : 226 Transfer complete. STOR référence QUIT pour indiquer au serveur que l on veut transférer des données, qu il faut sauver dans le fichier référence. Ce transfert se fait dans les même conditions que pour LIST. Si le serveur accepte, il enverra un message commençant par 150 comme : 150 Opening ASCII mode data connection for référence Lorsque le transfert est terminé, le serveur envoie un message commençant par 226 comme : 226 Transfer complete. pour terminer la session. La réponse du serveur commence par 221 comme : 221 Goodbye.

Enoncé du TP 7 Réseaux Version du 9/4/2013 22/55 5.VII Exercices Exercice 12 (Transfert manuel en mode actif) Depuis un terminal du PC : 1. utiliser telnet pour ouvrir une connexion de contrôle avec le serveur FTP de allegro 2. vous authentifier avec votre vrai nom d utilisateur et votre mot de passe. Attention, il est écrit en clair!! 3. sur un autre terminal du PC, utiliser nc pour se mettre en écoute sur un port que vous choisirez 4. sur la connexion de contrôle, indiquer au serveur sur quel port votre nc est en écoute 5. sur la connexion de contrôle, demander le contenu du répertoire de travail. Celui-ci doit être récupéré par votre "serveur" nc 6. quitter la session FTP. [Corrigé] Exercice 13 (Transfert manuel en mode passif) Depuis le PC, utiliser telnet pour ouvrir une connexion de contrôle avec le serveur FTP de ftp.rfc-editor.org (ou ftp.pasteur.fr) puis faites le nécessaire afin de récupérer en mode passif la RFC 821 (fichier rfc821.txt du répertoire in-notes). La mettre de côté. i Si vous parvenez à établir la connexion de données, le contenu du fichier sera transmis sur cette connexion et écrit sur la sortie standard de nc. Pour créer effectivement le fichier, il faut rediriger la sortie standard de nc... [Corrigé] C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

23/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux 6 Simulateur : Nat/Pat et firewall Soit l interconnexion de réseaux modélisée dans le simulateur de Pierre Loisel (CERTA) : formée par les 5 réseaux suivants (plus Internet et les FAI) : le réseau 192.168.2.0/24 constitué des stations st1 et st2 le réseau 192.168.0.0/24 constitué des stations st1, st3 et st4 le réseau 192.168.1.0/24 constitué des stations st5, st6, st7 et st8 le réseau 192.168.5.0/24 constitué des stations st9, st11 et st13 appartenant au vlan 5 Tous les vlans de l exercice sont de niveau 2, ce qui n a pas vraiment d importance pour le sujet traité. le réseau 192.168.6.0/24 constitué des stations st9, st10, st12 et st14 appartenant au vlan 6 Les stations st1, st5 et st9 ont toutes des cartes d accès distant les reliant à Internet et sont configurées pour servir de routeurs. Cependant les autres stations appartiennent à des réseaux privés et ne peuvent pas encore utiliser Internet. Exercice 14 (Simulation Nat/Pat et firewall) Depuis la machine virtuelle Windows : 1. Dans un navigateur, aller sur le site http://infodoc.iut.univ-aix.fr/~cpb et récupérer le fichier reseau_depart.xml, puis le charger dans le simulateur de Pierre Loisel 2. En mode Transport, activer le Nat/Pat sur st1, st5 et st9. Pour cela, effectuer un clic droit sur la station, choisir Configuration IP et cocher la case Nat/Pat puis sélectionner l interface publique ppp (qui les relie à Internet) :

Enoncé du TP 7 Réseaux Version du 9/4/2013 24/55 3. Mise en place de serveurs : (a) faire écouter par st2 son port UDP 69 (serveur TFTP). Pour cela, en mode Transport, faire un clic droit sur st2 puis choisir Tables Ports écoutés puis ajouter le port UDP 69 : (b) faire écouter par st3 son port TCP 22 (serveur SSH) (c) faire écouter par st8 son port TCP 21 (serveur FTP) (d) faire écouter par st12 son port TCP 80 (serveur HTTP) (e) faire écouter par st13 son port TCP 22 (serveur SSH) (f) faire écouter par st14 son port TCP 21 (serveur FTP) 4. Configuration des redirections de port (traductions statiques) sur st1, st5 et st9 : (a) configurer st1 pour que l accès aux serveurs de st2 et st3 soit possible depuis Internet. Pour cela, en mode Transport, faire un clic droit sur st1 puis choisir Tables Table Nat/Pat et ajouter les entrées pour les serveurs de st2 et st3. Pour chaque serveur, il faut remplir une ligne de la table : en spécifiant : le protocole de transport TCP ou UDP l adresse IP privée du serveur (ici de st2 ou st3) le port privé du serveur (celui sur lequel il est en écoute) l adresse IP publique (donc ici de st1) le port public (ici on peut prendre le même que le port du serveur) C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

25/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux (b) configurer st5 pour que l accès au serveur de st8 soit possible depuis Internet (c) configurer st9 pour que l accès aux serveurs de st12, st13 et st14 soit possible depuis Internet 5. Vérifier l accessibilité des serveurs depuis n importe quelle station (d un réseau différent) en émettant une requête destinée à ces serveurs et en les faisant répondre (en mode Transport, clic-droit sur une station puis envoyer une requête/répondre à une requête). Pendant la simulation, observer les traductions PAT (adresses et ports) lors de la traversée éventuelle des NATBox st1, st5 et st9. i On rappelle que l envoi de la requête doit se faire vers l IP publique et le port public du serveur ; pas vers les adresses privées... 6. Configuration d un firewall (règles de filtrage ou access lists). Les règles de filtrage sont entrées sur une station/routeur en mode Transport en effectuant un clic droit sur la station/routeur puis choisir Tables Règles de filtrage. Chaque règle dicte comment traiter un datagramme UDP ou segment TCP ou message ICMP reçu, et il faut remplir une ligne de la table : en spécifiant pour quels datagrammes elle doit être appliquée : sur quelle carte en entrée (* pour toutes) sur quelle carte en sortie (* pour toutes) pour quel protocole parmi UDP, TCP ou ICMP (* pour tous) pour quel bloc d adresses IP source, indiqué par une adresse et un préfixe (* pour toutes) pour quel port source (* pour tous) pour quel bloc d adresses IP destination, indiqué par une adresse et un préfixe (* pour toutes) pour quel port destination (* pour tous) que faire du datagramme qui correspond à ces critères : Accepter ou Bloquer. Pour un datagramme donné, la première règle qui correspond est celle appliquée. Configurer les règles de st9 pour que : (a) tout le monde puisse atteindre les serveurs de la DMZ (serveur Web sur st12 et serveur FTP sur st14) (b) seul st1 (ce qui inclut les stations st2, st3 et st4) puisse atteindre le serveur SSH (de st13) (c) laisser passer en entrée tout le trafic ICMP (d) bloquer tout autre type de trafic entrant (e) laisser le trafic sortant passer 7. Vérifier que ces règles fonctionnent en tentant d envoyer des requêtes à ces serveurs et en les faisant répondre lorsqu elles arrivent. [Corrigé]

Enoncé du TP 7 Réseaux Version du 9/4/2013 26/55 7 Introduction à SSH Le protocole SSH (pour Secure SHell) est le remplaçant de rsh (remote shell) qui correspond grosso-modo à TELNET. Comme nous le verrons, SSH permet bien plus de choses que TELNET. Il permet aussi de transférer des fichiers de façon sécurisée (fiable et cryptée) via les sous-modules SCP et SFTP. SSH existe en deux versions majeures 1 et 2 qui sont incompatibles. La version 2 est la plus sécurisée et à utiliser à chaque fois que c est possible. Une différence notable entre TELNET (ou rsh) et SSH est que ce dernier établit un canal de transmission full-duplex fiable et crypté entre le client et le serveur. Ainsi, alors que tout le trafic dans le protocole TELNET passe en clair sur le réseau (y compris le nom d utilisateur et son mot de passe), en SSH ce trafic est crypté. Il est donc beaucoup plus sécurisé. Avant d établir le canal crypté, SSH prévoit une authentification du serveur par le client. Puis, lorsque ce canal est établi, c est au serveur qu il incombe d authentifier l utilisateur qui souhaite se loger (ou utiliser ses fonctionnalités). SSH utilise le chiffrement asymétrique pour crypter certains échanges puis utilise un cryptage symétrique une fois les paramètres de la communication négociés. i Pour illustrer certaines notions de SSH, nous utiliserons dans un premier temps le client SSH le plus utilisé sur Linux : ssh. Le serveur SSH sous Linux est généralement sshd. 7.I Notion de chiffrement Il existe deux approches au chiffrement : le chiffrement symétrique et le chiffrement asymétrique. Avant de présenter le chiffrement asymétrique, on va d abord critiquer le chiffrement symétrique. 7.I.A Critique du chiffrement symétrique Pour le chiffrement symétrique, un fichier est crypté/décrypté à l aide d une unique clé. Ainsi, lorsqu on communique un fichier crypté à quelqu un, cette personne doit posséder la clé qui a permis le cryptage pour pouvoir décrypter le fichier. Le principe est illustré par le schéma suivant : clé partagée entre l émetteur et le récepteur abc efg ijk abc efg ijk émetteur 010 101 010 cryptage transmission décryptage 010 101 010 récepteur Le problème est que quiconque possède cette clé sera en mesure de décrypter les données confidentielles. Ainsi, si la personne à qui on a communiqué notre clé n est pas très prudente, on court le risque de perdre la C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

27/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux confidentialité de nos transmissions. D autre part, on peut très bien envoyer un fichier crypté à quelqu un mais souhaiter que cette personne ne puisse pas décrypter les autres fichiers que l on crypte. Dans ce cas, il faut utiliser une clé spécialement pour l échange avec cette personne. C est déjà pénible mais ce n est pas tout : comment transmettre une clé, en étant sûr que personne ne la récupère et puisse ainsi lire les données transmises? Les moyens de communication étant régulièrement "écoutés" par différentes "organisations" (si ce n était pas le cas, ce ne serait pas la peine de mettre en place un cryptage des données...), que reste-t-il? une communication en mains propres? Manifestement, cette méthode de chiffrement pose de nombreux problèmes et on comprend pourquoi elle est de moins en moins utilisée. 7.I.B Le chiffrement asymétrique Le chiffrement asymétrique est une méthode de chiffrement qui apporte une solution intéressante aux problèmes de gestion de clé que connaît le chiffrement symétrique. Il nécessite l emploi d une paire de clés : une clé privée qui, comme son nom l indique, doit demeurer privée et jamais communiquée. Néanmoins, elle doit être stockée sur l ordinateur qu utilise son créateur (possesseur). Celui-ci doit donc impérativement la protéger au mieux, notamment par l intermédiaire d une "passphrase" et en la rangeant dans un répertoire et un fichier inaccessibles aux autres. une clé publique qui, elle, peut être communiquée au reste du monde, sans aucun risque de dévoiler la clé privée. En effet, si les deux clés sont étroitement liées, il n est pas possible de fabriquer la clé privée à partir de la clé publique. En revanche, si la clé publique est perdue, il sera possible de la générer à partir de la clé privée. Le chiffrement asymétrique permet le cryptage mais aussi la signature numérique de documents, qui ont des objectifs différents : cryptage : il s agit de protéger un document en le cryptant. Seuls les détenteurs d une clé appropriée pourront le décrypter et le lire ; signature : il s agit d authentifier un document ainsi que son rédacteur. i Le terme chiffrement est souvent employé dans les documentations à la place de cryptage. Par la suite, nous l employons dans son sens large, recouvrant la signature. 7.I.B.1 Paires de clés et trousseau Différents utilitaires existent pour créer un paire de clés publique et privée. L outil que je préconiserais est gpg abbréviation de GnuPG (The GNU Privacy Guard), disponible à la fois pour Linux et Windows. En utilisant gpg, on crée un trousseau de clé comportant une clé privée et la clé publique associée. En outre, gpg gère aussi les clés publiques que nous ont communiquées les personnes avec lesquelles on désire crypter/signer les échanges. gpg pourra alors être utilisé pour crypter/décrypter et/ou signer/vérifier des documents. Nous n étudions ici que les principes du chiffrement et non la génération de clés ni les opérations de cryptage/décryptage ou signature/vérification avec gpg. Le lecteur intéressé pourra étudier le tutorial sur le chiffrement, bientôt accessible sur

Enoncé du TP 7 Réseaux Version du 9/4/2013 28/55 mon site (http://infodoc.iut.univ-aix.fr/~cpb/). On supposera par la suite que les personnes impliquées dans les échanges ont à leur disposition un tel outil. 7.I.B.2 Cryptage/Décryptage par paire de clés Pour envoyer un document crypté à quelqu un, l émetteur doit posséder la clé publique du récepteur. Des serveurs de clés (publiques) existent sur Internet afin de faciliter la distibution des clés publiques. la clé publique a été communiquée à l émetteur clé publique communiquée aux émetteurs potentiels de documents cryptés clé privée que seul le récepteur possède abc efg ijk abc efg ijk émetteur 010 101 010 cryptage (clé publique) décryptage (clé privée) 010 101 transmission 010 récepteur FIGURE 1 Cryptage asymétrique avec la clé publique du destinataire qui décryptera avec sa clé privée. La méthode de cryptage asymétrique est illustrée par le schéma de la figure 1. L émetteur crypte le document à l aide de la clé publique du récepteur. Seule la personne possédant la clé privée peut décrypter le document crypté. Ainsi, lorsque le récepteur reçoit le document crypté, il le décrypte à l aide de sa clé privée. 7.I.B.3 Signature/vérification par paire de clés La signature numérique de document a pour objectif de prouver au récepteur que le document a bien été envoyé par l émetteur annoncé, et qu il n a pas été modifié pendant son transport. D un autre côté, la signature numérique assure la non-répudiation : l émetteur ne peut nier avoir envoyé le document. Cette signature est généralement générée par l algorithme DSA (Digital Signature Algorithm). Le principe de son utilisation est le suivant, illustré par la figure 2 : 1. L émetteur calcule une empreinte (fingerprint) du document par une fonction de hashage. La fonction de hashage doit être telle qu une modification minime du document produit une empreinte différente et qu il est impossible de produire un document à partir d une empreinte. L algorithme de hashage généralement utilisé est SHA1. Il existe aussi MD5 réputé plus faible que SHA1 2. L émetteur crypte l empreinte avec sa clé privée par une méthode qui rend possible son décryptage par la clé publique associée 3. Le récepteur décrypte l empreinte avec la clé publique de l émetteur (authentification de l émetteur) 4. Le récepteur calcule l empreinte du message et la compare à celle obtenue à l étape précédente (vérification de la non modification du message) C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

29/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux clé publique communiquée aux récepteurs potentiels de documents signés clé privée que seul l émetteur possède la clé publique a été communiquée au récepteur abc efg ijk abc efg ijk émetteur abc efg ijk S signature (clé privée) vérification (clé publique) abc efg transmission ijk S récepteur FIGURE 2 Signature d un document avec la clé privée de l émetteur. Le récepteur vérifie avec la clé publique correspondante. 7.II Authentification d un serveur SSH Il s agit de s assurer que le client se connecte au bon serveur et non pas à une machine qui aurait usurpé l IP du serveur (mise en place par un attaquant pour voler les mots de passe, par exemple) ni à la machine d un attaquant située sur le trajet menant au serveur, qui servirait à intercepter ou modifier nos messages. Cette dernière attaque est de type man-in-the-middle et est illustrée par le schéma suivant : client attaquant serveur mowgli connexion SSH Le principe de cette attaque est le suivant : sherekhan connexion SSH Le client (sur mowgli) veut établir une connexion SSH sur bagheera bagheera Sur le chemin emprunté par les datagrammes IP se trouve la machine sherekhan de l attaquant qui intercepte la demande de connexion et répond à la place de bagheera L attaquant établit aussi une connexion SSH entre sherekhan et bagheera Lorsque le client s identifie (pensant avoir à faire à bagheera), il communique son nom d utilisateur et son mot de passe qui sont récupérés par l attaquant L attaquant utilise ces informations pour s identifier sur bagheera Deux connexions SSH sont alors établies, l une mowgli sherekhan et l autre sherekhan bagheera L attaquant fait transiter (automatiquement) les commandes du client vers le serveur, ainsi que les réponses du serveur vers le client, éventuellement en modifiant certaines choses. i Cette attaque ne peut en principe être possible que lors de la première connexion du client. Si elle réussit, elle peut être reproductible. Pour authentifier le serveur et initier la connexion, SSH utilise une paire de clés publique/clé privée et un mécanisme de chiffrement asymétrique. Lors de l installation du serveur SSH, une paire de clés est générée. Elle doit rester la même tant que l administrateur n a pas détecté un risque de vol de la clé privée. La clé publique est destinée à être transmise à tout client qui en fait la demande.

Enoncé du TP 7 Réseaux Version du 9/4/2013 30/55 7.II.A Emplacement des clés d un serveur SSH Les clés publiques et privées d un serveur SSH sous Linux sont situées dans le répertoire /etc/ssh et sont contenues dans les fichiers : ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub ssh_host_key ssh_host_key.pub Ces 6 fichiers définissent 3 paires de clés : les ssh_host_key* définissent les clés pour SSH version 1 (obsolète) les ssh_host_dsa_key* définissent les clés DSA pour SSH version 2 les ssh_host_rsa_key* définissent les clés RSA pour SSH version 2 : ce sont les clés les plus employées. Les clés publiques sont dans les fichiers d extension.pub et sont lisibles par tous. Les autres fichiers contiennent les clés privées et ne sont accessibles qu à root. 7.II.B Procédure d authentification du serveur et cryptage de la connexion Lors de la connexion du client, le serveur lui renvoie sa clé publique. Le client vérifie alors que cette clé correspond bien à celle du serveur qu il aura au préalable stocké dans un fichier de configuration (voir plus loin). Si c est le cas, le serveur est authentifié et sa clé publique sera utilisée par le client pour négocier avec le serveur les clés et les algorihtmes utilisés pour crypter les transmissions. En particulier, le client transmet au serveur une clé de session cryptée avec la clé publique du serveur (ainsi que l algorithme utilisé) qui sera utilisée ensuite dans les échanges par un chiffrement symétrique. Le serveur étant le seul à détenir la clé privée, il est le seul qui peut décrypter la clé de session. La clé de session et les algorithmes seront renégociés régulièrement au cours de la communication SSH. Notons qu il y normalement une clé de session par sens de transmission. La clé publique du serveur est très importante car elle permet d authentifier le serveur et de lui transmettre la clé de session. Si l on connaît la clé publique du serveur, cette méthode rend impossible l attaque de type man-in-the-middle. 7.II.C Authentification du serveur lors de la première connexion Lors de la première connexion du client, celui-ci ne connaît pas la clé publique du serveur et ne peut donc pas être sûr d avoir à faire au bon serveur. Selon la configuration du client SSH, celui-ci peut aller jusqu à refuser le dialogue avec un serveur inconnu. Dans la grande majorité des cas, le client SSH informe l utilisateur qu il ne peut assurer l authenticité du serveur et lui demande s il doit continuer comme dans l exemple suivant : $ ssh allegro.iut.univ-aix.fr The authenticity of host allegro.iut.univ-aix.fr (139.124.187.4) can t be established. RSA key fingerprint is 93:92:5c:40:21:e5:67:e0:9f:53:11:1f:ec:b1:36:52. Are you sure you want to continue connecting (yes/no)? Il revient donc à l utilisateur de s assurer que le serveur est le bon! L idéal serait que la clé publique du serveur soit communiquée au préalable à l utilisateur (par exemple sur une page Web) mais ce n est généralement pas le cas. C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

31/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux La plupart des utilisateurs n ayant aucun moyen de la vérifier, l acceptent sans autre vérification, ce qui les expose aux attaques de type man-in-the-middle. Une possibilité de contrôle de cette clé est présentée un peu plus loin. Cette acceptation se fait en répondant yes à la question posée précédemment comme sur l exemple suivant : Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added allegro.iut.univ-aix.fr,139.124.187.4 (RSA) to the list of known hosts. Suite à l acceptation de la clé publique, le serveur est considéré comme authentifié (il devra néanmoins être capable de décrypter les messages notamment la clé de session cryptée avec la clé publique annoncée). 7.II.D Enregistrement de la clé publique du serveur côté client La ligne Warning: qui suit l acceptation de l utilisateur indique que l "identité" du serveur (nom, adresse, clé publique) est enregistrée dans le fichier $HOME/.ssh/known_hosts (de l utilisateur). Pour les connexions futures, le serveur devrait être automatiquement reconnu grâce à ce fichier. Si le serveur est connu mais que la clé publique annoncée n est pas la même (elle peut avoir changé ou une attaque man-in-the-middle est en cours), l utilisateur en sera averti et selon la configuration du client SSH, celui-ci refusera de continuer (mais, le cas échéant, on pourra modifier le fichier $HOME/.ssh/known_hosts pour enlever la ligne concernant l ancienne clé du serveur puis recommencer la connexion). i Il est possible pour l administrateur système de renseigner le fichier /etc/ssh/ssh_known_hosts pour contenir les identités de serveurs auxquels les utilisateurs peuvent se connecter. Cela leur évite de les authentifier eux-mêmes... 7.II.E Hashage des fichiers known_hosts Selon l installation du client SSH, les fichiers known_hosts contiennent les clés publiques des serveurs plus ou moins en clair. Par exemple, la clé d allegro serait stockée ainsi (sur une ligne) : $ ssh-keygen -F allegro allegro,139.124.187.4 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAntyWXC9hVDfBxhXLQ933/ bwlxequalfiv65c0fnwb6eq1ww13ye1tbcub4lfgbkoatsglrld4/2olbw0gt37xmw2w95vzeqb66nr axorqadk+svyfggje5oj3dcizw0t7lek0sz9ilxpf9la1y+g9p2lczv+pgvkiug7lr4div6nktg8oze LxWA2QV/cEBOjuIxRo5CgXWFt1eEj43ARJEr0vqRaMLbUlsBJ9p9CPhbu+ZPnPffoHtlRWSobsd2Psu BcWDXHrACF7EZwr2Og/W8O4wIUqmxIlnGvdQcx0tx54uSL5g/VeN7+8AI1nypcP1Ib+260UttwrvYqN NdRgQ== Or, on voit que l adresse IP d allegro apparaît. Ce n est pas très sûr car les utilisateurs ont tendance à avoir le même mot de passe sur les ordinateurs qu ils utilisent. Si un attaquant a réussi à voler le mot de passe d un utilisateur, alors en consultant ce fichier, il sait que cet utilisateur a probablement le même mot de passe sur les serveurs qu il contient et peut tenter de s y introduire. C est pourquoi généralement les fichiers known_hosts sont hashés et il n est pas possible de retrouver les noms ou adresses des serveurs correspondants. En cas de hashage (comme sur une Debian récente), l identité d allegro est stockée par la ligne suivante :

Enoncé du TP 7 Réseaux Version du 9/4/2013 32/55 $ ssh-keygen -F allegro 1 pvsbqkvwgqnfknsm84dc6kz+pvq= tgobosbewga5wvj5lq659bas0yw= ssh-rsa AAAAB3NzaC 1yc2EAAAABIwAAAQEAntyWXC9hVDfBxhXLQ933/bWLxEQualfiv65C0FnWb6EQ1Ww13ye1tbCUb4lFg bkoatsglrld4/2olbw0gt37xmw2w95vzeqb66nraxorqadk+svyfggje5oj3dcizw0t7lek0sz9ilxp F9la1Y+g9P2LCzv+PGvkiuG7lr4dIv6NKTg8oZELxWA2QV/cEBOjuIxRo5CgXWFt1eEj43ARJEr0vqR amlbulsbj9p9cphbu+zpnpffohtlrwsobsd2psubcwdxhracf7ezwr2og/w8o4wiuqmxilngvdqcx0t x54usl5g/ven7+8ai1nypcp1ib+260uttwrvyqnndrgq== 7.II.F Contrôler manuellement la clé publique du serveur Lors d une première connexion où l on a dû accepter manuellement la clé du serveur, il est conseillé, une fois logé en SSH (après s être authentifié auprès du serveur), de vérifier l empreinte de cette clé, afin d être à peu près sûr qu on discute bien avec la machine qui nous a répondu. Cela se vérifie en tapant la commande suivante : $ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub 2048 93:92:5c:40:21:e5:67:e0:9f:53:11:1f:ec:b1:36:52 /etc/ssh/ssh_host_rsa_key.pub (RSA) où le fichier à utiliser doit correspondre au type de clé indiqué lors de la connexion. Ici, l empreinte correspond bien et l on peut être rassuré. i En cas d attaque man-in-the-middle, l attaquant doit intercepter cette commande et répondre par l empreinte de sa machine (celle communiquée au départ). S il le fait, là, on est mal... 7.II.G Supprimer manuellement la clé publique d un serveur Il arrive (malheureusement trop souvent) qu un serveur ait changé sa clé publique, généralement suite à une réinstallation alors que l administrateur n a pas pris soin de remettre l ancienne clé. Dans ce cas, lors d une nouvelle connexion, on a toutes les chances de voir notre client ssh refuser de continuer. Si l on est sûr que le changement de clé est normal et non dû à une attaque, il faut alors supprimer du fichier $HOME/.ssh/known_hosts la clé publique du serveur. Un moyen simple de faire ça (en particulier si le fichier est hashé) est d utiliser la commande suivante : $ ssh-keygen -R serveur 7.III Authentification de l utilisateur Sur le canal crypté établi précédemment, le serveur communique au client les différentes méthodes d authentification de l utilisateur qu il accepte. Il y en a plusieurs. Détaillons celle par mot de passe et celle par paire de clés publique/privée. 7.III.A Authentification utilisateur par mot de passe Le client communique le nom d utilisateur et un mot de passe que l utilisateur lui aura indiqués. Si le mot de passe est correct, le serveur réussit à ouvrir un shell avec l identité de l utilisateur, et celui-ci est alors authentifié. C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

33/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Cette méthode a l inconvénient majeur de faire transiter le mot de passe de l utilisateur. Si le serveur contacté n est pas le bon (rappelons-nous de la pertinence de l authentification du serveur), alors le mot de passe peut être facilement volé. D autre part, il est possible que le mot de passe soit volé simplement en regardant par dessus l épaule de l utilisateur pendant qu il le tape, ou même par un logiciel qui intercepte les frappes au clavier... 7.III.B Authentification utilisateur par paire de clés Dans ce contexte, le mot de passe utilisateur ne sera pas transmis au serveur (sauf lors de la première connexion). Pour cela, l utilisateur doit au préalable : générer une paire de clés publique/privée qui sera utilisée pour l authentification. La clé privée doit être protégée par une passphrase (sa taille peut être bien plus grande qu un mot de passe unix) déposer sa clé publique sur le serveur (cette étape nécessite généralement une identification par mot de passe) configurer le client pour utiliser sa clé privée. Cette étape n est pas nécessaire avec les clients SSH récents sous Linux. La méthode d authentification par paire de clés diffère entre SSH1 et SSH2 mais dans les deux cas le client SSH demandera à l utilisateur la passphrase qui protège sa clé privée pour l utiliser. En SSH2 (il faut éviter SSH1 qui est vulnérable à l attaque man-in-the-middle 1 ), le client va signer l identification de session SSH avec la clé privée de l utilisateur puis l envoyer au serveur. Le serveur consulte alors le fichier ~/.ssh/authorized_keys de l utilisateur à la recherche d une clé publique correspondante. S il en trouve une et que la signature de l identifiant de session est correcte, l utilisateur est authentifié. Bien qu en apparence plus lourde (car la passphrase est plus longue que le mot de passe), cette méthode n a que des avantages par rapport à la précédente et devrait être utilisée chaque fois que c est possible. En effet : 7.IV le mot de passe ne circulant pas (sauf la fois où l on dépose la clé publique), il ne peut être intercepté cette méthode d authentification (en SSH2) est immunisée contre les attaques man-in-the-middle car les identifiants de session font partie des informations signées. L attaquant ayant des identifiants pour les deux connexions ne peut pas utiliser ce qui vient d une connexion pour le rediriger sur l autre qui utilise un autre identifiant même si quelqu un nous observe quand on tape la passphrase, il y a peu de chances qu il puisse s en souvenir car elle doit être longue même si la passphrase est volée, il faut aussi voler la clé privée or elle est contenue dans un répertoire protégé de l utilisateur il est possible d utiliser un "agent" SSH dont le rôle est de débloquer la clé privée chaque fois que le client SSH en a besoin. Dans ce cas, on fournit une seule fois la passphrase à cet agent qui s en souviendra durant la session de l utilisateur pour toutes les connexions SSH qui suivent. Connexion à allegro avec mot de passe Nous commencerons par une connexion à allegro en utilisant l authentification par mot de passe. Pour cela, il faut utiliser ssh, le client SSH sous Linux. Celui-ci accepte de nombreuses options dont certaines seront étudiées au cours de ce TP. Pour une simple connexion à un serveur, 3 syntaxes sont utilisables. 1. Il existe des attaques man-in-the-middle qui réussissent en forçant le client et le serveur à utiliser SSH1...

Enoncé du TP 7 Réseaux Version du 9/4/2013 34/55 Synopsis ssh -l utilisateur {-o options-ssh} serveur ssh {-o options-ssh} utilisateur@serveur ssh {-o options-ssh} serveur Les deux premières formes sont équivalentes et doivent être utilisées pour préciser utilisateur comme nom d utilisateur si celui-ci diffère entre le client et le serveur. La dernière forme est utilisable si le nom d utilisateur est le même sur le serveur que sur le client, comme dans notre cas pour le PC et allegro. L option -o permet d indiquer des options en suivant la syntaxe du fichier de configuration de ssh. Nous y reviendrons quand nous présenterons ces fichiers. Exercice 15 (connexion SSH sur allegro) 1. Ouvrir un terminal sur le PC 2. Taper ls -a pour voir si le répertoire.ssh existe 3. Utiliser ssh pour se connecter à allegro 4. Répondre yes si l authentification de la clé publique d allegro vous est demandée (ce ne devrait pas être le cas si.ssh existe et que vous vous êtes connectés à allegro) 5. Entrer votre mot de passe quand cela est demandé 6. Une fois logé, vérifier que la clé annoncée est bien celle d allegro Laisser cette connexion active, on va s en servir plus tard. 7. Dans un autre terminal (du PC), vérifier qu un répertoire.ssh a bien été créé dans votre répertoire personnel 8. Consulter ce répertoire, il devrait y avoir le fichier known_hosts 9. Afficher ce fichier, il devrait être hashé [Corrigé] 7.V Création d une paire de clés sous Linux La création d une paire de clés se fait en utilisant ssh-keygen. Cette commande a différentes utilités. Pour la création de clés, son synopsis est le suivant. Synopsis ssh-keygen -b taille -t type -C commentaire -f fichier où : -b taille précise la taille en bits de la clé à créer. On prendra de préférence une clé de 2048 bits (les clés DSA sont limitées à 1024 bits) -t type précise le type de clé à créer où type peut être : rsa1 pour l utilisation de SSH1 (à éviter) C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

35/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux rsa pour une clé RSA en SSH2 (à préférer car plus rapide que DSA) dsa pour une clé DSA en SSH2 (inventé quand RSA était sous licence, rarement utilisé aujourd hui) on utilisera donc une clé de type rsa -C commentaire (où commentaire est un seul mot mais on peut éventuellement protéger les espaces) permettra d identifier la clé de manière à se rappeler pourquoi on l a créée (on peut créer différentes clés pour différents usages) -f fichier est la référence du fichier où placer la clé privée. La clé publique associée sera placée dans le fichier fichier.pub. Si l on ne précise pas cette option, le fichier par défaut est créé dans le répertoire $HOME/.ssh et porte un nom différent selon le type de clé : identity pour RSA de SSH1 id_rsa pour RSA de SSH2 id_dsa pour DSA de SSH2 Cette option n est utile que si l on crée plusieurs paires de clés pour des usages différents. i En principe, les clients SSH Linux récents utilisent par défaut les bons paramètres. Mais on utilisera tout de même dans ce qui suit les options -b, -t et -C. Exemple 2 Voici un exemple de création de clés avec ssh-keygen : $ ssh-keygen -b 2048 -t rsa -C "pour l iut" Generating public/private rsa key pair. Enter file in which to save the key (/home/cpb/.ssh/id_rsa): Enter passphrase (empty for no passphrase): la passphrase non affichée Enter same passphrase again: la passphrase non affichée Your identification has been saved in /home/cpb/.ssh/id_rsa. Your public key has been saved in /home/cpb/.ssh/id_rsa.pub. The key fingerprint is: 2b:2d:f0:79:55:27:6e:fb:8a:5b:f5:1a:7b:20:8f:25 pour l iut Comme on le voit, l utilisateur est invité à entrer une passphrase (et la confirmer) qui protègera (le fichier contenant) la clé privée. Elle peut être vide mais ce n est pas conseillé car la clé ne serait pas protégée. La passphrase devrait contenir au moins 16 caractères comprenant des caractères non alphabétiques. Elle ne devrait pas être une phrase d un livre ni d une chanson. Et l on doit être capable de s en souvenir! Il n y a aucun moyen de retrouver la passphrase si on l a oubliée. Les clés qui en dépendent peuvent alors être mises à la poubelle et il faut régénérer une paire de clés. Exercice 16 (Génération d une paire de clés avec ssh-keygen) Sur un terminal du PC : 1. Générer une clé RSA (SSH2) de 2048 bits avec ssh-keygen. Penser à entrer une passphrase. 2. Consulter le contenu du répertoire ~/.ssh. Il devrait y avoir les fichiers id_rsa (clé privée) et id_rsa.pub (clé publique) 3. Ces fichiers sont des fichiers texte. Les faire afficher. [Corrigé]

Enoncé du TP 7 Réseaux Version du 9/4/2013 36/55 7.VI Déposer sa clé publique sur le serveur Il s agit de déposer uniquement sa clé publique sur le serveur pour qu elle soit utilisée. Cette clé doit être placée dans le fichier $HOME/.ssh/authorized_keys de l utilisateur sur le serveur. i Ce fichier peut contenir plusieurs clés publiques, à raison d une par ligne, car l utilisateur peut disposer de plusieurs clés privées (réparties éventuellement sur des ordinateurs différents). Il y a plusieurs méthodes pour placer la clé publique dans ce fichier : manuelle : l utilisateur édite lui même le fichier et y copie-colle la clé semi-automatique : l utilisateur transfère le fichier contenant la clé publique et le renomme ou l ajoute au fichier authorized_keys automatique : l utilisateur utilise la commande ssh-copy-id qui se charge de tout Dans un premier temps, nous allons utiliser la méthode manuelle. Exercice 17 (dépôt manuel de la clé publique sur allegro) 1. Sur allegro (via la connexion SSH), créer le répertoire.ssh dans votre répertoire personnel 2. Créer le fichier authorized_keys dans.ssh à l aide d un éditeur ou en exécutant simplement : cat > ~/.ssh/authorized_keys 3. Sur le PC, afficher le fichier id_rsa.pub 4. Sélectionner le contenu du fichier qui a été affiché (ça le copie) 5. Coller ce contenu dans l éditeur (si vous utilisez vi, n oubliez pas de taper i d abord pour passer en mode insertion) ou directement sur le terminal si vous utilisez cat. Faire bien attention que le tout constitue bien une seule ligne et se termine par un retour à la ligne. 6. Sauver le fichier ou taper CTRL-D si vous utilisez cat 7. Afficher le fichier pour voir si tout est correct [Corrigé] 7.VII Préparation à l utilisation de la paire de clés Pour le moment, on ne peut probablement pas utiliser la paire de clés. En effet, SSH est très capricieux concernant les fichiers/répertoires des utilisateurs. En particulier, côtés client et serveur, il faut : que le répertoire personnel de l utilisateur soit inacessible en écriture aux membres du groupe et aux autres. Il faut s en assurer en exécutant chmod go-w ~ sur les deux machines que le répertoire.ssh soit complètement inaccessible pour les membres du groupe et les autres, et pleinement accessible pour l utilisateur. Il faut s en assurer en exécutant chmod 700 ~/.ssh sur les deux machines que les fichiers du répertoire.ssh soient totalement inaccessibles pour les membres du groupe et les autres. Il faut s en assurer en exécutant chmod go-rw ~/.ssh/* sur les deux machines. i En réalité, pour ce dernier point il faut surtout protéger la clé privée. Les autres fichiers peuvent être accessibles en lecture mais cela n a pas d intérêt (bien au contraire). C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

37/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Exercice 18 (mise en conformité des droits) Faire le nécessaire pour mettre en conformité les droits côtés client et serveur. [Corrigé] La commande ssh-copy-id est un script qui se charge de transférer la clé publique et de créer le répertoire.ssh s il n existe pas côté serveur, le tout avec les bonnes permissions. En revanche, il ne modifie pas les permissions de ce qui existe (notamment celles du répertoire personnel de l utilisateur) ni celles de la machine cliente. Son utilisation est quand même bien pratique. 7.VIII Connexion avec la paire de clés La version de ssh actuelle sous Linux est configurée pour tenter l authentification par paire de clés (RSA SSH2) avant celle par mot de passe. Dans le doute on peut préciser l option -o PreferredAuthentications= publickey. Une autre option intéressante est celle précisant (le fichier de) la clé privée à utiliser au cas où on en a plusieurs. Cette option est -i fichier-clé. Dans notre cas, nous ne devrions avoir besoin d aucune de ces options. Exercice 19 (Connexion sur allegro par paire de clés) 1. Sur le PC, sur le terminal où il n y a pas la connexion SSH avec allegro, tenter une connexion SSH avec allegro. Si l authentification par paire de clés échoue, c est que vous avez mal réalisé l une des étapes précédentes (copie de la clé publique et/ou mise en conformité des droits). Dans ce cas, faire ce qu il faut pour corriger le problème et retenter la connexion. 2. Terminer la connexion SSH sur allegro en tapant CTRL-D. [Corrigé] 7.IX Le fournisseur de passphrase ssh-agent Si l on est consciencieux, on a utilisé une longue passphrase qui est fastidieuse à taper. Or, si l on se connecte à nouveau au serveur en utilisant un autre terminal, la passphrase nous sera encore demandée pour débloquer la clé privée. C est là qu intervient l agent ssh-agent. C est un processus qui s exécute en tâche de fond et à qui on communique la passphrase. Ceci fait, chaque fois que ssh a besoin de débloquer la clé privée, c est ssh-agent qui lui fournit la passphrase. Ainsi, on ne la tape qu une fois par session (entendre par là session gnome, kde ou autre). Dans les distributions récentes, ssh-agent est lancé dès que l utilisateur ouvre une session. Il n a donc rien à faire pour l utiliser. Dans les distributions anciennes, c est un peu plus compliqué. Il faut :

Enoncé du TP 7 Réseaux Version du 9/4/2013 38/55 lancer manuellement ssh-agent par une méthode particulière. En bash, il faut exécuter : $ eval $(ssh-agent) Cette commande exécute ssh-agent et crée les variables d environnement SSH_AGENT_PID et SSH_AUTH_SOCK dont ssh a besoin pour contacter l agent Sur le terminal depuis lequel la commande précédente a été tapée, tout est configuré pour utiliser l agent Si l on exécute d autres terminaux depuis ce terminal, alors ils bénéficieront aussi de ces variables et l on pourra utiliser l agent En revanche, si on ouvre un autre terminal depuis le bureau, les variables précédentes ne seront pas connues. Il faudra alors les créer pour utiliser l agent. Pour cela, sur un terminal où ces variables sont connues, il faut les faire afficher, par exemple par : $ set grep ^SSH SSH_AGENT_PID=2307 SSH_AUTH_SOCK=/tmp/ssh-LhGscH2261/agent.2261 puis, sur le nouveau terminal, il faudra taper : $ export SSH_AGENT_PID=2307 $ export SSH_AUTH_SOCK=/tmp/ssh-LhGscH2261/agent.2261 i On comprend pourquoi dans les distributions récentes l agent est exécuté avant le bureau de manière à ce que les variables soient connues par tous les processus exécutés par l utilisateur.... L agent étant exécuté, il reste à lui communiquer la passphrase de la clé qu on veut utiliser. Pour cela, il faut utiliser la commande ssh-add. Bien qu admettant un certain nombre d options, l utilisation qu on en fait est des plus basiques. Synopsis ssh-add [fichier-clé] où fichier-clé est optionnel et est la référence du fichier contenant la clé privée qu on souhaite utiliser. Par défaut, le fichier utilisé est $HOME/.ssh/id_rsa (ça tombe bien, non?). L agent demande alors la passphrase servant à débloquer la clé correspondante. i Comme son nom ne l indique pas, ssh-add permet aussi de supprimer la gestion de certaines clés par l agent. Consulter le manuel de cette commande pour les options disponibles. Exercice 20 (utilisation de ssh-agent) 1. Sur le PC (sur le terminal où la connexion SSH est terminée), exécuter ssh-add 2. Communiquer la passphrase à l agent 3. Ouvrir un nouveau terminal à partir du bureau 4. Depuis ce terminal, se connecter à allegro par ssh. Aucune passphrase ne doit être demandée et la connexion doit réussir 5. Terminer la connexion sur allegro en tapant CTRL-D ou exit [Corrigé] C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

39/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux 8 Possibilités offertes par SSH Les utilisations possibles de SSH sont trop nombreuses pour être toutes énumérées ici. Se reporter au manuel de ssh pour avoir une liste plus détaillée. Pour une utilisation courante que nous étudierons ici, on peut ne retenir que : l exécution de commandes à distance la copie sécurisée de fichiers/répertoires par la commande scp un transfert de fichiers de type FTP mais sécurisé par la commande sftp la redirection de ports locaux ou distants par tunneling la redirection X11 (affichage de fenêtres graphiques) la définition de profils qui paramètrent le client ssh via le fichier $HOME/.ssh/config i À cela peut s ajouter la création de tunnels de type VPN mais cela nécessite les droits d administrateur côté client et serveur car les tunnels créent des interfaces réseau virtuelles et modifient les tables de routage. 8.I Exécution de commandes à distance par ssh La possibilité d exécuter des commandes à distance via le réseau, comme s il s agissait de commandes locales a été historiquement offerte sous Unix par la commande rsh et s apparente à l appel de procédure à distance (Remote Procedure Call). rsh est maintenant obsolète car n est pas sécurisée. ssh assure le même service que rsh mais à travers la connexion sécurisée. On complète alors le synopsis de ssh. Synopsis ssh {-o options-ssh} [-i fichier-clé] [-l utilisateur] [-C] [-t] [utilisateur@]serveur [commande] Ainsi, ce qui suit le serveur est la commande à exécuter sur le serveur, à la place d un login-shell. La commande peut être limitée à un seul mot (comme ls) ou prendre des options ou arguments (comme ls -l rep). Mais elle peut être aussi une succession de commandes (comme cd rep ; ls -l less) mais dans ce cas il faut protéger les caractères spéciaux. Le mieux est donc d encadrer commande par des guillemets ou des quotes. L entrée standard et les sorties de commande sont redirigées pour être celles de ssh. Les options -o, -i et -l sont celles vues précédemment. L option -C est introduite ici mais n est pas spécifique à l exécution d une commande à distance : elle demande une compression de ce qui est transféré. Elle est utile s il y a beaucoup de données qui circulent (dans un sens ou dans l autre). L option -t demande la création d un terminal et doit être utilisée si commande nécessite une interaction avec l utilisateur (comme ls -l less).

Enoncé du TP 7 Réseaux Version du 9/4/2013 40/55 Exemple 3 Pour ces exemples, ssh-agent est actif et connaît la passphrase : $ ssh cpb@allegro.iut.univ-aix.fr ls -l public/unix/a*.txt -rw-r--r-- 1 cpb prof 4840 Mar 16 16:44 public/unix/a_decouper.txt -rw-r--r-- 1 cpb prof 446 Sep 6 2005 public/unix/acrostiche.txt -rw-r--r-- 1 cpb prof 422 Sep 5 2002 public/unix/amphi.txt -rw-r--r-- 1 cpb prof 1168 Sep 5 2002 public/unix/amphigouri.txt affiche les informations détaillées des fichiers commençant par a et se terminant par.txt sur le répertoire public/unix d allegro $ ssh cpb@allegro.iut.univ-aix.fr ls -l public/unix/a*.txt > fichiers.txt même chose que précédemment mais place le résultat dans le fichier fichiers.txt $ ssh -t cpb@allegro.iut.univ-aix.fr ls -l public/unix less... affiche en paginant les informations détaillées du répertoire public/unix d allegro. Cela nécessite l emploi de l option -t $ cat fic ssh cpb@allegro.iut.univ-aix.fr cat > fic.sve && echo "ok" ok une façon de copier le fichier fic sur allegro... Exercice 21 (exécution de commandes distantes) Il s agit ici d utiliser l exécution de commandes à distance. Vous devez faire comme si le répertoire net-home n existait pas sur le PC... Sur le PC, depuis le terminal précédent (où la connexion avec allegro est terminée), utiliser l exécution de commandes à distance pour : 1. faire afficher votre fichier cigale.txt (de votre répertoire tpunix) d allegro 2. se déplacer dans tpunix sur allegro et créer le fichier toustxt contenant la concaténation de tous les fichiers d extension.txt de ce répertoire, puis de faire afficher les informations détaillées sur ce fichier 3. copier le fichier (contenant la clé publique) ~/.ssh/id_rsa.pub du PC dans un répertoire tpres d allegro (éventuellement créé pour l occasion), puis le faire afficher, et le supprimer. [Corrigé] C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

41/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux 8.II Copie de fichiers/répertoires par scp La copie de fichiers à distance via le réseau a été historiquement offerte sous Unix par la commande rcp (remote copy). rcp est obsolète car n est pas sécurisée et est maintenant supplantée par scp (secure copy). La commande scp est analogue à la commande cp et suit les mêmes principes concernant le traitement des sources et de la destination, sauf que ces fichiers/répertoires sont situés sur des ordinateurs (éventuellement) différents. Par cela, scp établit une connexion SSH afin de copier des fichiers ou répertoires d un ordinateur à l autre. scp utilisant ssh, les options -i et -C sont aussi reconnues par scp qui les lui communique. Certaines options sont néanmoins spécifiques à scp. Synopsis scp [-rp] {-o options-ssh} [-i fichier-clé] [-C] [[utilisateur@]serveur:]source {[[utilisateur@]serveur:]source} [[utilisateur@]serveur:]destination Les : qui suivent serveur sont obligatoires! Les options -o, -i et -C sont celles vues précédemment. L option -r demande une copie récursive et doit être utilisée si une source est un répertoire. L option -p demande que les fichiers obtenus par la copie aient les mêmes dates de modification et d accès, ainsi que les mêmes permissions que les fichiers d origine. Comme le laisse entendre le synopsis, scp peut même copier des fichiers entre deux ordinateurs différents de l ordinateur depuis lequel la commande est exécutée! Malheureusement, cette possibilité n est pas aussi simple que ça à mettre en œuvre car il faut que l authentification entre les hôtes distants soit automatique, ce qui nécessite : que la clé publique soit déjà déposée sur l hôte destination de la copie que la clé privée soit utilisable par l hôte source de la copie. Cela est rendu possible en utilisant l option ForwardAgent yes de ssh mais cette option ne peut pas être passée par l option -o de scp. Il faut utiliser un profil spécifique qui l active (voir section 8.IV, page 43) Il est possible d utiliser les motifs de noms de fichiers pour la copie. Cependant, ces motifs sont interprétés par le bash courant. Ce n est pas un problème si les sources sont locales mais si elles sont distantes, il faut protéger ces motifs pour qu ils soient interprétés par l hôte distant (voir exemples). Exemple 4 Pour ces exemples, ssh-agent est actif et connaît la passphrase : $ scp cpb@allegro.iut.univ-aix.fr:public/unix/cigale.txt. cigale.txt 100% 677 0.7KB/s 00:00 copie dans le répertoire de travail le fichier public/unix/cigale.txt d allegro

Enoncé du TP 7 Réseaux Version du 9/4/2013 42/55 $ ls *.txt bidule.txt cigale.txt truc.txt $ scp -C *.txt cpb@allegro:tmp bidule.txt 100% 6 0.0KB/s 00:00 cigale.txt 100% 677 0.7KB/s 00:00 truc.txt 100% 6 0.0KB/s 00:00 copie les fichiers du répertoire de travail se terminant par.txt dans le répertoire tmp d allegro. La compression des transferts est activée. $ mkdir textes $ scp -Cp cpb@allegro:public/unix/a*.txt textes a_decouper.txt 100% 4840 4.7KB/s 00:00 acrostiche.txt 100% 446 0.4KB/s 00:00 amphi.txt 100% 422 0.4KB/s 00:00 amphigouri.txt 100% 1168 1.1KB/s 00:00 copie (avec compression) les fichiers du répertoire public/unix de allegro commençant par a et se terminant par.txt dans le répertoire textes. Les fichiers obtenus ont les mêmes droits et les mêmes dates que les fichiers d origine. Le motif a*.txt est protégé car il doit être interprété sur allegro et non localement. Exercice 22 (copie sécurisée par scp) Il s agit ici d utiliser la copie sécurisée à distance. Vous devez faire comme si le répertoire net-home n existait pas sur le PC... Depuis le terminal précédent, utiliser scp pour : 1. copier dans votre répertoire de travail les fichiers commençant par c de votre répertoire tpunix d allegro 2. copier récursivement dans votre répertoire de travail votre répertoire tpunix d allegro en le nommant letpunix et en préservant les dates et les permissions des fichiers d origine. Vérifier son existence. [Corrigé] 8.III Transfert de fichiers par sftp La commande sftp (secure file transfer program) est une alternative sécurisée à l emploi de FTP qui ne l est pas. Comme scp, sftp utilise ssh pour ses transferts. Comme (la commande) ftp, sftp est par défaut interactif et propose des commandes internes similaires. sftp ne permet pas de transférer des répertoires. On peut utiliser sftp pour des objectifs différents, chacun ayant sa propre syntaxe. C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

43/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Synopsis sftp [-C] {-o options-ssh} [utilisateur@]serveur sftp [-C] {-o options-ssh} [utilisateur@]serveur:répertoire sftp [-C] {-o options-ssh} [utilisateur@]serveur:source [destination] sftp [-C] {-o options-ssh} -b fic-commandes [utilisateur@]serveur La première forme sert pour se connecter au serveur et travailler en mode interactif (à la manière de ftp). La deuxième forme est identique à la première mais on se place directement dans répertoire sur le serveur. La troisième forme est non interactive et permet simplement de copier le fichier source dans destination. C est donc une utilisation similaire à scp mais plus limitée. La quatrième forme est non interactive et demande à sftp d exécuter les commandes internes (sftp) contenues dans le fichier fic-commandes. Elle est pratique pour automatiser des transferts. Elle nécessite une authentification par paire de clés. Les options -C et -o sont celles vues précédemment. On remarque l absence d option -i mais il existe une option-ssh qui la remplace (voir plus loin). La liste des commandes internes sftp est trop longue pour être décrite ici, consulter le manuel en ligne pour les connaître. Une autre possibilité est de taper la commande interne help sur le prompt de sftp. Exercice 23 (transfert de fichiers par sftp) 1. Dans un nouveau terminal du PC, afficher les pages de manuel de sftp pour avoir la liste des commandes internes 2. Dans un autre terminal (du PC), utiliser sftp pour établir une connexion ssh/sftp sur allegro 3. Récupérer le fichier fruit.price qui devrait se trouver dans votre réperoite tp/tpunix, sinon il est dans mon répertoire public/unix 4. Quitter la session sftp. [Corrigé] i La commande gftp vue précédemment est aussi un client sftp (graphique). 8.IV Profils et options de ssh Lorsqu elle est utilisée, directement ou indirectement par scp ou sftp, ssh prend en compte les options qui lui sont communiquées, soit sur la ligne de commandes, soit par l intermédiaire de fichiers de configuration. Son traitement des options suit l ordre suivant : 1. les options de la ligne de commande : celles indiquées par l option -o option-ssh 2. les options du fichier de configuration utilisateur $HOME/.ssh/config 3. les options du fichier de configuration commun à tous les utilisateurs /etc/ssh/ssh_config

Enoncé du TP 7 Réseaux Version du 9/4/2013 44/55 Une option pouvant figurer aussi bien sur la ligne de commandes que dans les fichiers de configuration, la première trouvée est celle retenue. Les fichiers de configuration sont organisés en sections où chaque section débute par le mot clé Host suivi d un motif. Dans le synopsis des commandes précédentes (ssh, scp, sftp), si serveur correspond au motif, alors les options de la section correspondante s appliquent pour la connexion (sauf si elles sont redéfinies sur la ligne de commandes). Une section permet donc de définir des profils SSH, chacun avec ses propres options. Le motif peut prendre plusieurs formes : adresses IP ou chaînes (de type nom DNS). Il peut contenir * qui représente n importe quelle chaîne de caractères, ou? qui représente n importe quel caractère (ou chiffre dans une adresse IP). On peut donc définir un profil pour les connexions concernant n importe quel serveur se terminant par.univ-aix.fr en commençant une section par Host *.univ-aix.fr (aucune résolution DNS n est faite à ce stade, il s agit juste de comparer serveur et le motif). Une utilisation très courante de la définition d une section est la possibilité de définir différents profils pour des connexions vers un même ordinateur. Cela se fait en combinant le mot clé Host et le mot clé Hostname comme dans l exemple si-dessous. Exemple 5 Si $HOME/.ssh/config contient les lignes suivantes : Host iut1 Hostname allegro.iut.univ-aix.fr Options spécifiques au profil iut1 Host iut2 Hostname allegro.iut.univ-aix.fr Options spécifiques au profil iut2 Alors, en utilisant iut1 en lieu et place de serveur, on utilisera les options du profil iut1 pour se connecter à allegro, alors que si l on utilise iut2 on se connectera toujours à allegro mais en utilisant les options du profil iut2. Enfin, une section d ordre général peut être définie en utilisant Host *. Toutes les options de cette section s appliquent aux connexions, sauf les options ayant déjà été définies sur la ligne de commande ou définies par une section précédente qui correspondait. Cette section, si elle est utilisée, doit normalement être placée en fin des fichiers de configuration $HOME/.ssh/config et/ou /etc/ssh/ssh_config. Parmi les options possibles pouvant figurer dans les sections, certaines nous intéressent particulièrement : User suivi du nom d utilisateur sur le serveur. Cela évite d utiliser l option -l de ssh ou les spécifications de type utilisateur@ IdentityFile suivi du chemin absolu du fichier contenant la clé privée à utiliser (même rôle que l option -i de ssh et de scp) Port suivi du numéro de port du serveur SSH sur la machine distante. Par défaut, cette option vaut 22 C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

45/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Compression suivi de yes ou no selon que l on veut ou non activer la compression (même rôle que l option -C) ForwardAgent suivi de yes ou no selon que l on veut ou non que l agent ssh local puisse débloquer la clé privée pour un ssh exécuté à distance (via une connexion SSH). Cette option doit être activée pour pouvoir réaliser une copie entre hôtes distants par scp. Celles qui suivent ont généralement des valeurs par défaut adéquates mais on peut les spécifier au cas où : HashKnownHosts suivi de yes ou no selon que l on veut ou non que le fichier known_hosts soit hashé. Sur Debian, cette option est activée par défaut dans /etc/ssh/ssh_config PasswordAuthentication suivi de yes ou no selon que l on souhaite ou non utiliser l authentification par mot de passe. Cette option est active par défaut et vaut yes PreferredAuthentications permet d indiquer un ordre de préférence pour l authentification de l utilisateur. Nous n avons vu ici que les authentifications password et publickey. On peut définir l ordre publickey,password (qui est déjà celui par défaut) Protocol permet d indiquer un ordre de préférence sur la version de SSH à utiliser. Par défaut, vaut 2,1 (si SSH2 n est pas disponible, bascule en SSH1) mais on peut totalement désactiver l emploi du SSH1 en indiquant seulement 2 PubkeyAuthentication suivi de yes ou no selon que l on souhaite ou non utiliser l authentification par paire de clés. Le défaut est yes StrictHostKeyChecking suivi de yes, no ou ask. Si c est yes, ssh refusera de se connecter à un serveur dont la clé publique n existe pas dans les fichiers $HOME/.ssh/known_hosts et /etc/ssh/ssh_know Si c est no, ssh ajoutera la clé publique d un serveur inconnu dans le fichier $HOME/.ssh/known_hosts sans demander l autorisation à l utilisateur et si la clé du serveur a changé, l utilisateur en sera averti. Si c est ask, alors ssh demandera à l utilisateur s il doit ajouter la clé publique d un serveur inconnu ou pas, et refusera de se conecter à un serveur dont la clé a changé. Par défaut cette option vaut ask. i Quelle que soit la valeur de l option précédente, la clé publique du serveur sera toujours vérifiée. i Les options sont trop nombreuses pour être décrites dans ce document, exécuter man ssh_config pour afficher le manuel qui les décrit toutes. Nous en verrons celles qui concernent la redirection de port et de X11 dans la suite. L option -o de ssh, scp et sftp Cette option permet de spécifier une option ssh à l aide d un mot clé utilisé précédemment. Cependant dans ce cas, on ne sépare pas le mot clé de sa valeur par des blancs mais par le signe =. Pas toutes les options de ssh peuvent être modifiées avec l option -o. Par exemple, ForwardAgent n est pas activable par l option -o de scp et le seul moyen de l utiliser avec cette commande est de créer un profil qui l active. On pourra remarquer que c est le seul moyen de spécifier un fichier clé privée pour la commande sftp.

Enoncé du TP 7 Réseaux Version du 9/4/2013 46/55 9 SSH et la redirection de ports (tunneling) Ainsi que nous l avons vu par l intermédiaire de scp et de sftp, SSH est bien plus qu un TELNET sécurisé. Il propose de multiples autres utilisations dont une qui est particulièrement intéressante : la création de tunnels combinée à la redirection de port (Port forwarding). 9.I Principe du tunneling Supposons que depuis notre ordinateur mowgli l on ait accès à la machine bagheera qui héberge un serveur SSH, ainsi qu un serveur POP3. On démarre alors une session SSH distante depuis mowgli vers bagheera : mowgli #12345 connexion SSH #22 bagheera où, le client SSH utilise le port TCP 12345 sur mowgli. La connexion SSH est sécurisée : à part une attaque de type man-in-the-middle à l établissement de la connexion, le trafic sur cette connexion n est pas déchiffrable par une tierce personne. Laissons de côté un instant cette connexion. Si régulièrement on utilise son client de messagerie préféré pour rapatrier son courrier contenu sur bagheera depuis mowgli, alors on établit à chaque fois une connexion avec le serveur POP3 de bagheera : #54321 connexion POP3 #110 mowgli #12345 connexion SSH #22 bagheera où le client de messagerie utilise le port TCP 54321 sur mowgli. Ici, la connexion POP3 n est pas sécurisée : toute la discussion circule en clair. Cela comprend le nom d utilisateur et le mot de passe qui circulent en ASCII et peuvent être "observés" sur le réseau. Cependant on peut utiliser la connexion SSH établie afin de faire "passer" une ou plusieurs autres connexions. Cela est possible en créant un tunnel à travers la connexion SSH : #55555 tunnel pour connexion POP3 #110 mowgli #12345 connexion SSH #22 bagheera Sur la figure, le tunnel relie le port TCP 55555 de mowgli au port TCP 110 de bagheera. Tout se passe comme si un serveur POP3 était actif sur mowgli, en écoute sur le port 55555. i En général, ce serveur n accepte que des connexions locales (pas d une machine autre que mowgli) et utilise alors l adresse 127.0.0.1. On peut toutefois configurer le tunnel pour que le serveur accepte des connexions de machines distantes (il utiliserait alors son adresse IP). Pour le moment, on considère que le serveur n accepte que des connexions locales. C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

47/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Ci-dessous on voit un extrait du résultat de la commande netstat sur la machine mowgli (139.124.187.34) qui a établi une connexion SSH avec bagheera (139.124.187.4) et un tunnel à partir du port 55555. Le tunnel n est pas (encore) utilisé car aucune connexion n est établie avec ce serveur. On remarque que rien ici ne permet de savoir qu il y a un lien entre le serveur 127.0.0.1:55555 et le client SSH 139.124.187.34:12345 : mowgli$ netstat -tan Connexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 0 0 127.0.0.1:55555 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 139.124.187.34:12345 139.124.187.4:22 ESTABLISHED Si un client local à mowgli se connecte au port 55555 de mowgli, alors la connexion est redirigée à travers le tunnel vers le port 110 de bagheera. Tout le trafic sur la connexion SSH étant crypté, la connexion ainsi redirigée est elle aussi cryptée. Voici ci-dessous le résultat de la commande netstat lorsque la connexion entre un client de messagerie (139.124.187.34:55326) est établie avec le "serveur" 127.0.0.1:55555 sur mowgli : mowgli$ netstat -tan Connexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp 0 0 127.0.0.1:55555 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 139.124.187.34:12345 139.124.187.4:22 ESTABLISHED tcp 0 0 127.0.0.1:55555 127.0.0.1:55326 ESTABLISHED tcp 0 0 127.0.0.1:55326 127.0.0.1:55555 ESTABLISHED Sur bagheera, le serveur SSH qui se trouve à l autre bout du tunnel doit alors établir une connexion avec le serveur POP3. Voici le résultat de netstat sur bagheera : bagheera$ netstat -tn Connexions Internet actives (sans serveurs) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 139.124.187.4:110 139.124.187.4:46204 ESTABLISHED tcp 0 0 139.124.187.4:46204 139.124.187.4:110 ESTABLISHED tcp 0 0 139.124.187.4:22 139.124.187.34:12345 ESTABLISHED On voit bien que bagheera (139.124.187.4) a établi une connexion vers son port 110 à partir de son port 46204 (utilisé pour l occasion par le serveur SSH), ceci pour contacter le serveur POP3. Les échanges de cette connexion sont redirigés à travers la connexion SSH puis sur mowgli (139.124.187.34) entre le port 55555 (détenu par le client SSH) et le port 55326 (du client de messagerie). La précédente opération s appelle la redirection de port local (local port forwarding). Il existe aussi la redirection de port distant (remote port forwading) qui a un objectif similaire. 9.II Mise en place de la redirection de port local avec ssh Pour mettre en place la redirection de port local il faut utiliser l option -L de ssh sur la ligne de commandes. La syntaxe de cette option est la suivante : -L port local:machine distante:port distant Ainsi, dans l exemple précédent, la mise en place de la connexion SSH et de la redirection de port se fait sur mowgli par la ligne de commandes suivante :

Enoncé du TP 7 Réseaux Version du 9/4/2013 48/55 mowgli$ ssh -L 55555:bagheera:110 bagheera Redirection de port local et fichier de configuration À la liste des options figurant dans les sections des fichiers $HOME/.ssh/config et /etc/ssh/ ssh_config, on peut ajouter l option LocalForward demandant de réaliser la redirection de port local : Quelques remarques importantes : LocalForward port local:machine distante:port distant machine distante est interprété par le serveur SSH à l autre bout de la connexion. Dans l exemple, l autre bout de la connexion est bagheera qui devrait se connaître lui-même...on aurait tout aussi bien pu utiliser localhost à la place de bagheera. On peut aussi utiliser un nom long de type bagheera.jungle.org ou encore une adresse IP La destination n est pas forcément la même machine que celle sur laquelle est ouverte la session SSH. En effet, on peut créer un tunnel pour contacter un serveur sur une machine que l on ne pourrait pas atteindre directement. C est une possibilité particulièrement intéressante de SSH. Supposons que le serveur POP3 n est pas hébergé par bagheera mais par baloo et qu un firewall empêche mowgli d accéder à baloo (ou simplement à son port TCP 110). La solution consiste à établir une session SSH entre mowgli et bagheera et d utiliser cette session pour réaliser un port forwarding depuis (par exemple) le port 55555 de mowgli vers le port 110 de baloo (atteint via bagheera) : mowgli #54321 #5678 #110 tunnel pour connexion POP3 connexion normale non cryptée #12345 connexion SSH #22 bagheera baloo Pour cela, il suffit d indiquer en destination baloo:110 (ou le nom complet ou l adresse IP à la place de baloo). la connexion entre bagheera et baloo n est pas cryptée. Il est alors possible à quelqu un situé entre bagheera et baloo d espionner cette connexion. 9.III On peut mettre en place plusieurs tunnels sur une même connexion SSH. On peut mettre bout à bout les tunnels. Il est possible de mettre en place un tunnel sans que la session SSH n ouvre un terminal (exécute un login-shell). Mise en place de la redirection de port distant avec ssh Cette redirection est assez rarement utilisée. Elle produit l effet inverse, à savoir rediriger les connexions provenant d un port du serveur sur le port d un ordinateur (peut être celui du client). Elle est utile lorsque l on veut utiliser un client sur le serveur SSH mais qu un firewall empêche la connexion de ce client, alors qu elle est possible à partir du client SSH. Pour mettre en place la redirection de port distant il faut utiliser l option -R de ssh sur la ligne de commandes. Sa syntaxe est la suivante : C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

49/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux -R port serveur:machine:port Si un client sur le serveur SSH se connecte au port port serveur alors la connexion est redirigée sur la connexion SSH et le client SSH établit une connexion (non sécurisée) sur le port port de machine. machine est cette fois interprété par le client SSH et non par le serveur. Redirection de port distant et fichier de configuration À la liste des options figurant dans les sections des fichiers $HOME/.ssh/config et /etc/ssh/ ssh_config, on peut ajouter l option RemoteForward demandant de réaliser la redirection de port distant : RemoteForward port serveur:machine:port 10 Et SSH sur Windows? Des clients (et des serveurs) SSH existent sous Windows. On peut faire la même chose avec ces clients que ce que l on peut faire avec ssh. Le plus célèbre d entre eux est Putty. La suite Putty est composée de divers exécutables : plink : correspond à ssh pscp : correspond à scp psftp : correspond à sftp puttygen : correspond à ssh-keygen pageant : correspond à ssh-agent putty : un client ssh avec une interface graphique permettant de configurer des tunnels et des redirections X11, et sauver ces configurations dans des profils.

Enoncé du TP 7 Réseaux Version du 9/4/2013 50/55 11 Le courrier électronique 11.I Clients de messagerie Un client de messagerie classique est un logiciel permettant de télécharger du courrier électronique, d en composer et d en envoyer. Il n est pas à confondre avec un client hotmail ou caramail qui utilise les facilités d un browser (navigateur Web). Les clients graphiques de messagerie les plus connus sont Outlook (Express), Eudora, Thunderbird sous Windows, et Netscape Messenger, Evolution ou Thunderbird sous Linux. Pour fonctionner, ces client ont besoin d être paramétrés pour les deux protocoles qu ils utilisent, POP3 et SMTP : POP3 : le client a besoin de connaître le nom de la machine hébergeant le serveur POP3, et éventuellement le numéro du port qu il utilise (normalement 110). Il a aussi besoin de connaître le nom d utilisateur de la boîte aux lettres ainsi que son mot de passe. Avec ces informations, il est ensuite possible de télécharger tout le courrier disponible dans la boîte puis de le consulter hors-ligne ; SMTP : le client a besoin de connaître le nom de la machine hébergeant le serveur SMTP (qui peut être différente de celle hébergeant le serveur POP3) ainsi que le port (normalement 25). Le plus souvent, ce serveur doit être celui mis à disposition par le FAI. Les autres serveurs devraient refuser de relayer les messages à cause des spams (ces courriers publicitaires qui pourrissent la vie et appelés aussi "pourriels" au lieu de "courriels"). Il faut aussi indiquer son adresse e-mail afin qu elle soit indiquée dans les messages envoyés pour que le destinataire puisse répondre. Exercice 24 (Utilisation de Thunderbird) Si vous avez un fichier ~/.forward sur allegro, le renommer le temps du TP. Lancer Thunderbird (nommé icedove sous Debian) sous Linux. Le configurer en utilisant allegro comme serveurs POP3 et SMTP, puis s envoyer un ou deux messages. Ensuite les récupérer à nouveau avec Thunderbird. [Corrigé] 11.II Format d un message électronique Le format d un message électronique (transmis via SMTP) a d abord été défini dans la RFC 822 qui a été remplacée récemment par la RFC 2822. Un message électronique est composé de deux parties : un en-tête et un corps, séparées par une ligne vide. Le corps est libre, puisqu il contient le message de l utilisateur. Il doit cependant respecter la règle d au plus 1000 caractères par ligne, et ne doit contenir que des caractères ASCII. Pour envoyer des données binaires par email, il faut les encoder en ASCII. En revanche, l en-tête contient une succession de champs, dont certains sont obligatoires, d autres sont optionnels, et d autres encore sont ignorés. Un grand nombre de champs sont prévus par la RFC, parmi lesquels : Return-Path: <adresse-origine> identifie (l utilisateur à) l origine du message Received: informations de transfert est un champ ajouté par chaque serveur SMTP ou client de relève de courrier par lequel le message est passé From: adresse-expéditeur identifie l expéditeur du message. Ce champ peut éventuellement être différent de celui indiqué dans Return-Path: To: adresses-destinataires identifie les destinataires du message C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

51/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Cc: adresses-destinataires-cc indique des destinataires en copie carbone Reply-To: adresse-réponse indique une adresse électronique à laquelle une réponse à ce message doit être envoyée. Si ce champ est n est pas présent, c est le champ To: qui servira pour la réponse. Subject: sujet indique le sujet du message Message-Id: identificateur indique un numéro de message qui doit être unique pour celui qui le génère (normalement le client de messagerie électronique qui est à l origine du message) Date: date indique la date à laquelle la transmission du message a commencé Exemple 6 Voici un exemple d un message (très court) envoyé depuis la station d IP 139.124.208.98, passant par le serveur SMTP de l Université de la Méditerranée et à destination de ma boîte aux lettres sur allegro : Return-Path: <cyril.pain-barre@univmed.fr> X-Original-To: cpb@allegro.iut.univ-aix.fr Delivered-To: cpb@allegro.iut.univ-aix.fr Received: from univmed.fr (smtp.univmed.fr [139.124.132.120]) by allegro.iut.univ-aix.fr (Postfix) with ESMTP id 05C00FC0 for <cpb@allegro.iut.univ-aix.fr>; Wed, 28 Mar 2007 15:18:25 +0200 (CEST) Received: from localhost (localhost.localdomain [127.0.0.1]) by univmed.fr (Postfix) with ESMTP id 87D0A46A399 for <cpb@allegro.iut.univ-aix.fr>; Wed, 28 Mar 2007 15:18:23 +0200 (CEST) X-Virus-Scanned: by amavisd-new at univmed.fr Received: from univmed.fr ([127.0.0.1]) by localhost (smtp.univmed.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 3EYMcu2EpxsQ for <cpb@allegro.iut.univ-aix.fr>; Wed, 28 Mar 2007 15:18:23 +0200 (CEST) Received: from [139.124.208.98] (unknown [139.124.208.98]) by univmed.fr (Postfix) with ESMTP id 1E90D46A423 for <cpb@allegro.iut.univ-aix.fr>; Wed, 28 Mar 2007 15:18:23 +0200 (CEST) Message-ID: <460A6B1E.7030102@univmed.fr> Date: Wed, 28 Mar 2007 15:18:22 +0200 From: Cyril Pain-Barre <cyril.pain-barre@univmed.fr> User-Agent: Thunderbird 1.5.0.7 (X11/20060927) MIME-Version: 1.0 To: CPB <cpb@allegro.iut.univ-aix.fr> Subject: exemple de message X-Enigmail-Version: 0.94.2.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Le corps du message commence ici......et se termine là.

Enoncé du TP 7 Réseaux Version du 9/4/2013 52/55 11.III SMTP Simple Message Transfer Protocol (RFC 821) est un (vieux) protocole d application de TCP/IP dont la spécification remonte à 1982. Il a pour but de transférer des messages tels que le précédent depuis l expéditeur jusqu à la boîte aux lettres du (ou des) destinataire(s) du message. Étant donné un destinataire pour un mél comme cpb@allegro.iut.univ-aix.fr, il faut transmettre le mél au serveur qui est en charge de cette boîte aux lettres. Ce serveur est celui spécifié par le champ MX de l enregistrement DNS pour le domaine de l adresse (ici allegro.iut.univ-aix.fr qui n a pas d entrée MX associée donc le message est directement envoyé à allegro). Bien qu un client de messagerie puisse en théorie contacter directement le serveur SMTP qui est en charge de la boîte aux lettres destination, il se contente généralement de délivrer le mél au serveur SMTP qui lui a été indiqué dans sa configuration. Ce serveur va alors servir de relais et va contacter un (ou plusieurs) autre(s) serveur(s) SMTP pour lui(leur) remettre le mél. Dans ce cas, le serveur SMTP relais joue le rôle client SMTP : Transfert de courrier électronique par (relais) SMTP client serveur serveur serveur de messagerie SMTP (relais) SMTP (relais) SMTP (final) Ce protocole est relativement complexe (la RFC fait 68 pages) mais la remise d un message électronique à un serveur SMTP peut être réalisée très simplement. Pour cela, le client SMTP doit se connecter au serveur SMTP de l hôte cible, qui est normalement en écoute sur le port TCP 25. Si un serveur SMTP est effectivement actif sur l hôte cible, il réagit à l établissement de la connexion par l envoi d un message commençant par 220 comme : 220 hôte READY FOR MAIL Si le serveur refuse le client (par exemple un serveur SMTP d un FAI qui n accepte que la connexion d une machine ayant une IP attribuée par le FAI), il peut envoyer un message commençant par 554 comme : 554 <adresse client>: Client host rejected: Access denied À l instar de nombreux protocoles d application de TCP/IP (et notamment de FTP vu précédemment), le dialogue entre le client et le serveur se fait en mode requête/réponse : la requête du client commence par un mot clé suivi d un espace et d éventuels paramètres ; la réponse du serveur commence toujours par un code à 3 chiffres, suivi d un espace et d un texte destiné à être traité par les humains. Le premier chiffre du code est toujours compris entre 1 et 5 : s il vaut 4 ou 5, le serveur indique une erreur, sinon il s agit d une réponse positive. i À nouveau, les requêtes et les réponses doivent être terminées par la séquence \r\n, bien que de nombreux serveurs s accommodent d un simple \n. 11.III.A Messages du protocole SMTP Voici ci-dessous quelques messages que le client SMTP doit envoyer dans l ordre pour transmettre un message ainsi que quelques réponses possibles du serveur : C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

53/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux HELO hôte-client le client se présente au serveur en indiquant par hôte-client son nom d hôte officiel (enregistré au DNS), ou à défaut son adresse IP. Une réponse positive du serveur commence par 250 comme : 250 hôte serveur Certains serveurs refusent le dialogue avec un client qui ne possède par d enregistrement officiel au DNS ou dont le nom indiqué ne correspond pas à l adresse IP du client. MAIL FROM:<email-expéditeur > indique au serveur quel est l expéditeur du message (son adresse email). Si l en-tête du message (voir message DATA) ne contient pas de champ From:, cette adresse sera prise comme celle de l expéditeur. Une réponse favorable commencera par 250 comme : 250 OK Une erreur possible est la suivante, où l adresse de l expéditeur n est pas acceptée par le serveur (il n y a pas la suite comme @parici.fr) : 501 <toto>: sender address must contain a domain RCPT TO:<email-destinataire> indique un destinataire pour ce message. Il peut y avoir plusieurs destinataires pour un message et donc plusieurs messages RCPT. Une réponse favorable du serveur commencera par 250 comme : 250 OK Si l adresse du destinataire correspond à un domaine géré par le serveur (comme allegro.iut. univ-aix.fr), mais que le destinataire est inconnu, alors la réponse du serveur commencera par 550 comme : 550 No such user À cause des spams, de nombreux serveurs sont configurés pour ne pas accepter de servir de relais, c est à dire prendre en charge un message destiné à un utilisateur non local (il faudrait alors que le serveur SMTP devienne un client SMTP en contactant le serveur SMTP en charge du domaine 2 de cet utilisateur), si le client SMTP qui lui confie ce message n appartient pas au même réseau. Dans ce cas, la réponse du serveur commence par 554 comme : 554 <utilisateur@domaine.non.local.fr>: Relay access denied

Enoncé du TP 7 Réseaux Version du 9/4/2013 54/55 DATA le client indique au serveur qu il souhaite lui communiquer le message. Une réponse favorable du serveur commencera par 354 comme : 354 Enter message, ending with <CR><LF>.<CR><LF> Le client est alors invité à transmettre son message, conformément au format décrit précédemment. Ainsi qu il est précisé dans la réponse du serveur ci-dessus, la fin d un message doit être indiquée par la séquence "\r\n.\r\n", c est à dire un point seul sur une ligne. Pour éviter les ambiguïtés, le protocole veut que si une ligne du message commence par un point, alors il faut le doubler (caractère de transparence). Lorsque l indicateur de fin du message est reçu par le serveur, celui-ci envoie une réponse commençant par 250 comme : 250 OK QUIT indique au serveur que la transmission des messages est terminée, et que la connexion peut être rompue. Le serveur répond toujours favorablement par une réponse commençant par 221 comme : 221 hôte serveur Service closing connection 11.III.B Exercice Exercice 25 (Envoi du message anonyme) En s appuyant sur les messages possibles SMTP et la RFC 821 si besoin, envoyer un mail anonyme (en déclarant une fausse identité) à destination de votre nom d utilisateur sur allegro en discutant avec le serveur SMTP d allegro par telnet. Vous pouvez envoyer un message à d autres utilisateurs mais n utilisez comme destinataire(s) que les utilisateurs d allegro. L envoi de messages anonymes contredit totalement la charte du Département Informatique et de l Université et est répréhensible pénalement. NE VOUS AMUSEZ SURTOUT PAS À USURPER L IDENTITÉ DE QUELQU UN POUR ENVOYER UN MESSAGE, SINON VOUS VOUS EXPOSEREZ À DE GRAVES SANCTIONS VOIRE DES POURSUITES JUDICIAIRES! MAIL ANONYME NE VEUT PAS FORCÉMENT DIRE NON TRAÇABLE! Nous faisons cet exercice dans un but purement pédagogique qui a aussi pour objectif de vous faire prendre conscience qu on ne peut se baser simplement sur l émetteur annoncé d un message pour être sûr de son origine réelle. Pour cela, il faudra utiliser la signature numérique. 2. Rappellons que le serveur SMTP en charge d un domaine correspond au champ MX (Mail exchanger) de l enregistrement DNS de ce domaine. C. Pain-Barre, 2000-2013 INFO - IUT Aix-en-Provence

55/55 Version du 9/4/2013 Enoncé du TP 7 Réseaux Pour vérifier que le message a correctement été transmis, se loger sur allegro et exécuter mail qui affiche la liste des messages disponibles. Votre message devrait y figurer. Taper son numéro pour le consulter, puis x pour quitter mail. [Corrigé] 11.IV Étude de la RFC de POP3 Exercice 26 (récupération de messages avec POP3) En se basant sur la RFC de POP3 contenue dans le fichier rfc1939.txt téléchargé précédemment, contacter le serveur POP3 d allegro, récupérer (uniquement) le message que vous vous êtes envoyé, puis le supprimer du serveur. [Corrigé]