\documentclass[11pt,a4paper]{article}
\setlength{\voffset}{-1.5cm}
\setlength{\hoffset}{-1.5cm}
\setlength{\textwidth}{16cm}	% Largeur de la zone de texte
\setlength{\oddsidemargin}{1.5cm}	% Marge gauche sur pages impaires
\setlength{\evensidemargin}{1.5cm}% Marge gauche sur pages paires
\setlength{\marginparwidth}{1cm}% Largeur de note dans la marge
\setlength{\textheight}{24cm}	% Hauteur de la zone de texte
\setlength{\topmargin}{0cm}	% Pas de marge en haut
\setlength{\headsep}{0.5cm}	% Entre le haut de page et le texte
\setlength{\headheight}{1cm}	% Haut de page
%\setlength{\footskip}{}
%EXTENSIONS
     	\usepackage[latin1]{inputenc}
	\usepackage[LGR,T1]{fontenc}
	\usepackage[greek,francais]{babel}
 	\usepackage[francais]{layout}
	\usepackage{fancyhdr}
	\usepackage{fancybox}
	\usepackage{url}
	\usepackage[cyr]{aeguill} %pour l'encodage des fonts et les guillemets
 	\usepackage{xspace} 	%pour de beaux espaces

\widowpenalty=10000 % empeche au maximum la coupure avant la derniere ligne
\clubpenalty=10000  % empeche au maximum la coupure apres la premiere ligne
\raggedbottom       % empeche l'etirement des ressorts verticaux
\lhead{}
\chead{\begin{LARGE}TP ResEl~102 : Réseau\end{LARGE}}
\rhead{}

\pagestyle{fancy}
\begin{document}

\section*{But du TP}
L'objectif de ce TP est de vous présenter les outils clés utilisés pour l'administration et la surveillance d'un réseau. Ce TP s'appuie sur le cours \emph{ResEl~102 : Présentation des notions de réseau utilisées au ResEl}.

\renewcommand{\contentsname}{Sommaire} %pour que la table des matières s'appelle Sommaire
\tableofcontents
\setlength{\parskip}{0.5\baselineskip} %pour l'espacement des paragraphes

\section{Présentation des principaux outils}
\subsection{Configuration d'une carte reseau: \texttt{ifconfig}}
Cette commande a pour objectif d'associer une adresse IP (ou plusieurs) a une carte réseau. Pour consulter la configuration de la machine que vous utilisez, il vous suffit d'exécuter la commande \texttt{/sbin/ifconfig} dans un terminal. 

Pour pouvoir modifier la configuration d'une carte réseau, les droits superutilisateur sont nécessaires.

\subsection{La table de routage: \texttt{route}}
Lorsque vous postez une lettre, le centre de tri de La Poste va l'envoyer vers votre correspondant en utilisant son adresse postale.

Ici, nous sommes dans le même cas : lorsque que vous envoyez des informations, elles sont encapsulées dans des paquets IP (les enveloppes du courrier). Votre système d'exploitation va envoyer ces derniers sur la bonne carte réseau en utilisant sa table de routage (correspondance entre les villes et les codes postaux).

La commande \texttt{/sbin/route} affiche la table de routage de votre machine.

\newpage
Voici un exemple de table de routage :
\begin{verbatim}
gateway:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Iface
192.168.0.0     172.16.19.1     255.255.255.0   UG
192.44.76.0     0.0.0.0         255.255.255.0   U     eth0
172.16.0.0      0.0.0.0         255.255.0.0     U     eth1
10.0.0.0        0.0.0.0         255.0.0.0       U     eth2
0.0.0.0         192.44.76.1     0.0.0.0         UG
\end{verbatim}

Donnez pour cet exemple le nom de l'interface réseau sur laquelle les paquets suivants seront envoyés :
\begin{itemize}
\item un paquet a destination de 10.0.0.42 :
\item un paquet a destination de 192.168.0.21 :
\item un paquet a destination de 192.168.66.6 :
\item un paquet a destination de \url{www.commentcamarche.net}\footnote{Si vous voulez connaître l'adresse IP associée a ce nom de domaine, utilisez la commande \texttt{dig}. Cette dernière va contacter le serveur DNS pour vous et vous renvoyer la réponse.} :
\end{itemize}

Vous devriez maintenant comprendre le resultat de l'exécution de la commande \texttt{/sbin/route} sur votre machine.

\subsection{Correspondance adresse IP et adresse MAC : ARP}

Exécutez la commande \texttt{/sbin/arp}, suivie de la commande \texttt{ping} vers la machine \texttt{pc-df-204.enst-bretagne.fr}, puis a nouveau la commande \texttt{arp}.

Que constatez vous de différent au niveau du résultat de la commande \texttt{arp} ?

Est-il possible de revenir a l'état précédent\footnote{Pour cela, aidez-vous de la page de manuel de arp : \texttt{man arp}} ? 

\section{Sniffing}
Dans cette partie nous allons créer une connexion entre un client (\texttt{telnet}) et un serveur (\texttt{netcat}) puis observer le traffic qui transite entre les 2 machines (acte de \emph{sniffing}).

\subsection{Préparation}
Pour réaliser l'opération, nous allons ouvrir 3 terminaux :
\begin{itemize}
\item un sur la machine \texttt{local.maisel.enst-bretagne.fr} ;
\item deux sur \texttt{sunshine.maisel.enst-bretagne.fr}.
\end{itemize}

Pour vous connecter sur \texttt{sunshine}, vous devez utiliser la commande \texttt{ssh}. Pour obtenir les droits superutilisateur, utilisez la commande \texttt{sudo}. Pour l'utilisation de ces deux commandes, reportez-vous au cours \emph{ResEl~101 : Cours sur les outils Linux}.

\subsection{Présentation de \texttt{tethereal}}
	
\texttt{tethereal} est un outil qui permet de lire les paquets qui sont recus et émis par les interfaces réseau. Pour avoir un résultat \emph{human-readable} des paquets, il vous suffit de lancer la commande suivante avec les droits superutilisateur : \texttt{tethereal -T text -V -x}.

\subsection{Création d'une communication entre un client telnet et un serveur netcat}

\texttt{netcat} est aussi appelé \og le couteau suisse des réseaux\fg . Lancez-le en écoute sur un port supérieur à 1024 depuis la machine sunshine (sur un de vos 2 terminaux).

Dans le terminal sur la machine local, à l'aide de la commande \texttt{telnet}\footnote{La syntaxe est : \texttt{telnet sunshine numéro\_de\_port}}, connectez-vous sur le port d'écoute de netcat que vous avez choisi précedament.

À partir de maintenant les caractères que vous écrivez dans le terminal \texttt{telnet} sur \texttt{local} sont envoyés sur votre serveur netcat de sunshine, et affiché dans le terminal de sunshine.

\subsection{Sniffing}
	
Maintenant exécutez la commande \texttt{tethereal} en mode superutilisateur (et avec le filtre que l'on vous a fourni) dans votre second terminal sur sunshine. Utilisez ensuite la communication que vous avez créé dans la section précédente.

Dans le terminal d'exécution de tethereal, vous voyez transiter les paquets entre telnet et netcat\ldots Vous devriez pouvoir retrouver l'information que vous avez envoyé !

\subsection{Utilisation de \texttt{netstat} et \texttt{lsof}}

Quels types d'informations apportent les commandes \texttt{netstat} et \texttt{lsof}, en général ?

Et dans notre cas ?

\section{Récuperation d'un mot de passe d'une connexion FTP}

Une machine se connecte de maniere périodique au serveur FTP de sunshine. À l'aide de l'outil \texttt{tcpdump}\footnote{\texttt{tcpdump} est un outil équivalent à \texttt{tethereal}.}, essayez de récuperer le mot de passe de sa session FTP ainsi que le nom de l'utilisateur. Si vous réussissez, connectez vous avec \texttt{lftp}, \texttt{gftp} ou \texttt{ftp} pour vérifier que vous avez bien récuperé un nom d'utilisateur et un mot de passe valide.

\newpage
\section{Présentation d'un échange de paquets IPv6}

Voici 2 paquets IPv6, expliquez leurs utilités d'après leurs champs spécifiques :

\begin{verbatim}
Ethernet II, Src: 00:05:5d:6c:0f:08, Dst: 33:33:00:00:00:01
    Destination: 33:33:00:00:00:01 (IPv6-Neighbor-Discovery_00:00:00:01)
    Source: 00:05:5d:6c:0f:08 (D-Link_6c:0f:08)
    Type: IPv6 (0x86dd)
Internet Protocol Version 6
    Version: 6
    Traffic class: 0x00
    Flowlabel: 0x00000
    Payload length: 56
    Next header: ICMPv6 (0x3a)
    Hop limit: 255
    Source address: fe80::205:5dff:fe6c:f08 (fe80::205:5dff:fe6c:f08)
    Destination address: ff02::1 (ff02::1)
Internet Control Message Protocol v6
    Type: 134 (Router advertisement)
    Code: 0
    Checksum: 0x7b59 (correct)
    Cur hop limit: 64
    Flags: 0x00
        0... .... = Not managed
        .0.. .... = Not other
        ..0. .... = Not Home Agent
        ...0 0... = Router preference: Medium
    Router lifetime: 1800
    Reachable time: 0
    Retrans time: 0
    ICMPv6 options
        Type: 3 (Prefix information)
        Length: 32 bytes (4)
        Prefix length: 64
        Flags: 0xe0
            1... .... = Onlink
            .1.. .... = Auto
            ..1. .... = Router Address
            ...0 .... = Not site prefix
        Valid lifetime: 0x000000f0
        Preferred lifetime: 0x00000078
        Prefix: 2001:660:7302:3::
    ICMPv6 options
        Type: 1 (Source link-layer address)
        Length: 8 bytes (1)
        Link-layer address: 00:05:5d:6c:0f:08

Ethernet II, Src: 00:0d:93:b2:52:74, Dst: 33:33:ff:b2:52:74
    Destination: 33:33:ff:b2:52:74 (IPv6-Neighbor-Discovery_ff:b2:52:74)
    Source: 00:0d:93:b2:52:74 (AppleCom_b2:52:74)
    Type: IPv6 (0x86dd)
Internet Protocol Version 6
    Version: 6
    Traffic class: 0x00
    Flowlabel: 0x00000
    Payload length: 24
    Next header: ICMPv6 (0x3a)
    Hop limit: 255
    Source address: :: (::)
    Destination address: ff02::1:ffb2:5274 (ff02::1:ffb2:5274)
Internet Control Message Protocol v6
    Type: 135 (Neighbor solicitation)
    Code: 0
    Checksum: 0xa6e7 (correct)
    Target: 2001:660:7302:3:20d:93ff:feb2:5274 (2001:660:7302:3:20d:93ff:feb2:5274)
\end{verbatim}

\section{Aller plus loin : \texttt{iptables}}

L'objectif est d'interdire à la machine de la partie 3 de se connecter sur sunshine via FTP, et de lui renvoyer par la même occasion un message d'erreur ICMP. Pour cela, il faut modifier le fichier de configuration du firewall (\texttt{iptables}) et relancer le firewall à l'aide de la  commande suivante: \texttt{/etc/init.d/iptables restart}.

Pour compléter ce \og script\fg , nous vous conseillons de regarder ces trois documents :
\begin{itemize}
\item \url{http://christian.caleca.free.fr/netfilter/iptables.htm} ;
\item \url{http://lea-linux.org/reseau/secu/iptables.html} ;
\item \url{http://www.siliconvalleyccie.com/linux-hn/iptables-intro.htm}.
\end{itemize}
\vspace{0.2cm}

Quels outils utiliseriez-vous pour garder en mémoire la tentative de connexion de la machine de la partie 3 ?

\end{document}

