Sie sind auf Seite 1von 905

Le cours Hardware 2: serveur, rseau et communication

1. Introduction

La premire partie du cours hardware reprenait les ordinateurs bureautiques, portables et
priphriques courants. Mme si nous en reparlerons un peu tout au long de cette partie, les
chapitres qui suivent sont plus centrs vers la maintenance et l'installation du matriel rseau et
autres solutions spcifiques rserves aux entreprises, bref du travail de technicien informatique
d'entreprise ou du moins sur site.

La formation / cours hardware 2 technicien PC / rseau reprend les rseaux (cblage, serveurs, hub
et switch, routeurs, Ethernet, scurit, ...), appareils de communication divers, technologies serveurs
(SCSI, RAID, ...).

Dans les autres cours Technicien PC / rseau, les rseaux sont analyss au niveau logiciel: gestion,
administration, protection, ... L'approche de ce cours rseau n'est pas logicielle, mais matrielle: que
le systme d'exploitation du serveur rseau ou du groupe de travail soit Windows, Linux ou Novell
n'intervient pas directement ici. Nous analyserons ici l'installation et le choix des appareils de
connexions. Mme si des solutions logicielles sont abordes pour comparaison, la finalit restera la
solution hardware. Notre travail dans ce cours se limite (c'est dj pas si mal) au choix,
l'installation, la maintenance, au dpannage et au paramtrage d'une installation rseau au niveau
matriel. Vous aurez besoin de toutes les comptences acquises dans les autres cours informatiques
pour les configurations logicielles, mme si des notions sont fournies dans ce cours.

La partie rseau informatique reprend les cartes rseaux, technologies, hub, switch, routeurs et
cblage Ethernet RJ45 mais aussi les normes de rseaux sans fils

La partie serveur reprend toutes les spcificits des serveurs: RAID, disques durs SCSI et SAS,
Sauvegarde, multi processeurs MP. Elle est complte par les stockages spcifiques rseaux (bandes,
NAS et SAN).

Connexions haute vitesse (ADSL, lignes loues, ATM, ...) reprend toutes les technologies de
connexion INTERNET. Elle est complte par les possibilits de connections distance (firewall,
scurit, VPN, ...). Cette partie vous permettra de comparer les diffrentes solutions (logicielles,
Linux et hardware) avec leurs dfauts et avantages. Une solution n'est jamais parfaite. Une partie de
ce cours utilise la formation INTERNET comme base.

Protections lectriques reprend les appareils de protections contre toutes les perturbations du
rseau lectrique (onduleur, ...).

D'autres chapitres traitent de technologies futures ou spcifiques, notamment les configurations
spcifiques pour magasins de dtails (terminaux de vente, scanner code barre, tiroir et afficheur
client.

Vous le voyez, si la premire partie reprenait des techniques plutt atelier, on entre dans les
matriels installs sur sites, l'installation mais aussi rgler des problmes plus spcifiques de
dpannage: un travail de technicien de maintenance qui travaille en coopration avec d'autres
spcialistes informatiques plus habitus aux logiciels. Un bon technicien de maintenance doit se
promener dans l'usine. Celui qui court tout le temps n'a juste pas prpar son boulot, un cble qui
pend doit tre fix si on ne veut pas qu'il soit accroch un jour en passant, les cbles doivent tre
clairement tiquets, ... C'est juste une mthode de travail un peu diffrente mais nettement plus
efficace long terme..
2. Introduction aux rseaux informatiques
1. Introduction - 2. Modle OSI - 3. Modle TCP/IP - 4. Types d'ordinateurs connects - 5. Types de
serveurs - 6. Caractristique d'un rseau - 7. Scurit et administration
Avant de nous attaquer aux infrastructures rseaux, reprenons quelques notions thoriques de base
sur les rseaux informatiques en gnral. Un rseau permet de partager des ressources entre des
ordinateurs: donnes ou priphriques (imprimante, connexion Internet, sauvegarde sur bandes,
scanner, ...). Comme ce cours est typiquement hardware, je n'aborde que l'aspect matriel. Les
autres parties d'un rseau sont repris dans les autres cours, notamment "Bases rseaux", "Initiation
aux systmes LINUX & UNIX", "Logiciels rseaux", ...
La transfert d'information entre deux logiciels informatiques sur 2 quipements rseaux diffrents
se base sur deux modles thoriques: le modle OSI ou le modle TCP/IP. Ces deux modles sont
plus thoriques que pratiques. Chacun inclut plusieurs couches et chaque couche doit envoyer
(recevoir pour l'autre ordinateur) un message comprhensible par les deux parties. Le chapitre
suivant (base de transmission rseau) traitera en dtail de la communication.
2.2. Le modle OSI
Le modle OSI (Open System Interconnection Model) dfini en 1977 rgit la communication entre 2
systmes informatiques selon 7 niveaux. A chaque niveau, les deux systmes doivent communiquer
"compatibles". En matriel rseau, nous n'utilisons que les couches infrieures, jusqu'au niveau 3.
Ces niveaux sont galement appels couches.
L'OSI est un modle de base normalis par l'International Standard Organisation (ISO).
Application
Couche Application 7 Couche Application

Couche Prsentation 6 Couche Prsentation

Couche Session 5 Couche Session

Transport
des
donnes
Couche Transport 4 Couche Transport


Couche Rseau
(Network)
3
Couche Rseau
(Network)
Paquet

Couche liaison de
donnes (Data Link)
2
Couche liaison de
donnes (Data Link)
Trames
Physique (Physical) 1
Couche Physique
(Physical)
BIT

Support de communication

Niveau 7 (application): gre le format des donnes entre logiciels.
Niveau 6 (prsentation): met les donnes en forme, ventuellement de l'encryptage et de la
compression, par exemple mise en forme des textes, images et vido.
Niveau 5 (session): gre l'tablissement, la gestion et coordination des communications
Niveau 4 (transport): s'occupe de la gestion des erreurs, notamment avec les protocoles UDP
et TCP/IP
Niveau 3 (rseau): slectionne les routes de transport (routage) et s'occupe du traitement et
du transfert des messages: gre par exemple les protocoles IP (adresse et le masque de sous-
rseau) et ICMP. Utilis par les routeurs et les switchs manageables.
Niveau 2 (liaison de donnes): utilise les adresses MAC. Le message Ethernet ce stade est
la trame, il est constitu d'un en-tte et des informations. L'en-tte reprend l'adresse MAC
de dpart, celle d'arrive + une indication du protocole suprieur.
Niveau 1 (physique): gre les connections matrielles et la transmission, dfinit la faon dont
les donnes sont converties en signaux numriques: a peut-tre un cble coaxial, paires sur
RJ45, onde radio, fibre optique, ...
A chacun de ces niveaux du modle OSI, on encapsule un en-tte et une fin de trame (message) qui
comporte les informations ncessaires en suivant les rgles dfinies par le protocole rseau employ.
Le protocole est le langage de communication (la mise en forme) utilis pour le transfert des
donnes (actuellement TCP/IP mais d'autres ont t utiliss comme NetBeui (antrieur Windows
98), Novell IPX, ...). Sur le graphique ci-dessous, la partie qui est rajoute chaque couche est sur
fond blanc. La partie en grise est celle obtenue aprs encapsulation (intgration) du niveau
prcdent. La dernire trame, celle qu'on obtient aprs avoir encapsul la couche physique, est celle
qui sera envoye sur le rseau.
Dans ce cours, seules les trois premiers niveaux du modle OSI (jusqu'aux routeurs et switch de haut
de gamme) sont utiliss, ventuellement jusqu'au niveau 4 pour certains switchs manageables et
firewall. Les couches suprieures sont rserves aux autres cours de la formations technicien PC/
Rseaux, notamment base rseau et protocole TCP/IP.
2.3. Le modle TCP/IP
Le modle TCP/IP s'inspire du modle OSI auquel il reprend l'approche modulaire mais rduit le
nombre quatre. Les trois couches suprieures du modle OSI sont souvent utilises par une mme
application. Ce n'est pas le cas du modle TCP/IP. C'est actuellement le modle thorique le plus
utilis.
Protocoles utiliss Modle TCP/IP correspondance en OSI
Couche application
Application
Prsentation
Session
TCP / UDP, gestion des erreurs Couche Transport Transport
IP / ARP et RARP /ICMP / IGMP Couche Internet Rseau
Couche Accs rseau
Liaison de donne
Physique
De nouveau, on ajoute chaque niveau une en-tte, les dnominations des paquets de donnes
changent chaque fois:
Le paquet de donnes est appel message au niveau de la couche application
Le message est ensuite encapsul sous forme de segment dans la couche transport. Le
message est donc dcoup en morceau avant envoi pour respecter une taille maximum
suivant le MTU.
Le segment une fois encapsul dans la couche Internet prend le nom de datagramme
Enfin, on parle de trame envoye sur le rseau au niveau de la couche accs rseau
Les couches du modle TCP/IP sont plus gnrales que celles du modle OSI.
2.3.1. Couche application
La Couche Application reprend les applications standards en rseau informatique et Internet:
SMTP: "Simple Mail Transport protocol" gre le transfert de mails entre serveurs (pour
renseignements supplmentaires, voire Exchange et IIS dans le cours YBET sur les systmes
d'exploitation)
POP: gre le transfert des mails entre un serveur de messagerie et un ordinateur client
TELNET: connexion sur une machine distante (serveur) en tant qu'utilisateur
FTP (File Transfert Protocol), transfert des fichiers via Internet
et beaucoup d'autres.
2.3.2. Couche transport
La Couche transport permet le transfert des donnes et les contrles qui permettent de vrifier
l'tat de la transmission
Les protocoles des couches suivantes permettent d'envoyer des donnes issues de la couche
application. On ne dfinit pas rellement les logiciels qui communiquent, mais des numros de ports
associs au type d'application (numro variant de 0 65535, 2
16
). Par exemple, la navigation Internet
utilise le port TCP 80, l'https, le 443, le FTP utilise le 21, ...
La couche transport gre 2 protocoles de transport des informations, indpendamment du type de
rseau utilis:
TCP est orient connexion (il vrifie la bonne transmission de donnes par des signaux
d'accuss de rception -acknowledge - du destinataire), il assure ainsi le contrle des
donnes
UDP, archaque et non orient connexion, n'assure aucun contrle de transmission des
donnes, par exemple utilis en streaming.
Ces 2 types (orient connexion ou pas) sont une notion utilise pour les firewall. Si vous fermez un
port en TCP, l'envoi d'un message ne renvoie pas de signal de retour (acknowledge), faisant croire
que l'adresse IP est libre, non utilise. En UDP au contraire, un port ferm ne renvoit pas
d'informations, faisant croire une adresse IP utilise. Le protocole UDP renvoie uniquement un
message si le port est en erreur (ne rpond pas)
2.3.3. Couche INTERNET
La couche INTERNET est charge de fournir le paquet des donnes. Elle dfinit les datagrammes et
gre la dcomposition / recomposition des segments.
La couche Internet utilise 5 protocoles, seuls les 3 premiers sont importants:
1. Le protocole IP: gre les destinations des messages, adresse du destinataire
2. Le protocole ARP (Adresse Resolution Protocol): gre les adresses des cartes rseaux et la
correspondance avec l'adresse IP. Chaque carte a sa propre adresse MAC d'identification
code sur 48 bits.
3. Le protocole ICMP (Internet Control Message Protocol) gre les informations relatives aux
erreurs de transmission. ICMP ne les corrige pas, il signale uniquement que le message
contient des erreurs, utilis par exemple par la commande DOS Ping.
4. Le protocole RARP (Reverse Address Resolution Protocol) gre l'adresse IP pour les
quipements rseaux qui ne peuvent en rcuprer une automatiquement par lecture
d'information dans un fichier de configuration ou via un serveur DHCP. Lorsqu'un
quipement rseau dmarre, le gestionnaire rseau lit l'adresse IP utiliser, ce qui est
impossible pour certains quipements qui ne possdent pas de disques durs (principalement
les terminaux)
5. Le protocole IGMP (Internet Group Management Protocol) permet d'envoyer le mme
message des ordinateurs qui font partie d'un groupe. Il permet aussi ces machines de
s'abonner et se dsabonner d'un groupe. La principale application HARDWARE de l'IGMP se
retrouve dans les SWITCH manageables. Ce protocole permet de regrouper des stations.
2.3.4. Couche Accs rseau
La couche Accs rseau spcifie la forme sous laquelle les donnes doivent tre transmises. Elle
prend en charge les notions suivantes:
type de rseaux (Ethernet, Token Ring, ...), y compris les cartes rseaux
transfert des donnes
Synchronisation de la transmission de donnes
Mise en forme (format) des donnes
Conversion analogique/numrique pour les modems tlphoniques
Contrle des erreurs
2.4. Les types d'ordinateurs connects, types de rseaux
Un rseau permet de connecter des ordinateurs entre-eux de tous types (PC, Mac, Main Frames,
...) pour partager des ressources.
Deux types d'ordinateurs sont utiliss sur un rseau: les serveurs rseaux et les clients. Les serveurs
partagent leurs ressources (fichiers, priphriques de stockage, priphriques d'impression, ...). Les
clients utilisent ces ressources.
Trois types de rseaux sont utiliss:
1. les "Peer to Peer" ou rseau points points. Chaque ordinateur connect est la fois client
et serveur. C'est la mthode de partage la plus simple pour les versions de Windows
standards (partage en Workgroup) Ce terme est aussi utilis par extension pour le partage de
musiques et fichiers divers entre ordinateurs via INTERNET.
2. Les rseaux lourds utilisent un (ou plusieurs) ordinateur central (appel serveur). Les droits
d'accs des utilisateurs se connectant partir d'ordinateurs clients permettent de scuriser
les donnes. Diffrents priphriques augmentent encore cette scurit (bandes de backup,
onduleur, ...). Le gestionnaire rseau (un systme d'exploitation ddi) peut tre Linux,
Windows NT serveur, Windows 2000 - 2003 - 2008 serveur ou Novell Netware.
3. Les rseaux Wan (World Area Network) sont des rseaux internationaux permettant
d'interconnecter des rseaux et serveurs entre eux. Internet est un rseau de ce type.
Les cots et difficults de mise en oeuvre, la scurit et la gestion sont proportionnels. Nous ne
voyons que les quipements, les considrations Peer To Peer, serveurs ou Wan sont dtermines par
le systme d'exploitation et l'utilisation, pas par le matriel rseau.
2.5. Les types de serveurs.
Dans le chapitre prcdant, nous avons parl de serveurs au sens large. Dans l'informatique, on
distingue trois types de serveurs:
Un serveur de fichier enregistre et distribue les documents et fichiers partags par les
utilisateurs. Les configurations ne sont gnralement trs grosses.
Un serveur d'application permet d'utiliser un programme sur un serveur partir de tous les
postes clients simultanment, principalement des applications qui utilisent des bases de
donnes (gestion de fabrication, commerciale, comptabilit, stock, ...). Ces applications
doivent tre tre programme pour grer les partages. La configuration de ces serveurs sont
gnralement plus importantes (par exemple des multi-processeurs). Dans tous les cas, un
fichier n'est pas sauvegard lors d'un backup si un utilisateur l'accde.
Un serveur d'impression partage des imprimantes. Actuellement, diffrents modles sont
directement connects un rseau Ethernet, des botiers spcifiques sont galement
commercialiss.
En pratique, un serveur reprend souvent les trois applications.
2.6. Caractristique dun rseau.
Les rseaux locaux sont des infrastructures complexes et pas seulement des cbles entre stations de
travail. Si l'on numre la liste des composants d'un rseau local, on sera surpris d'en trouver une
quantit plus grande que prvue:
1. Le cblage constitue l'infrastructure physique, avec le choix entre paires tlphoniques,
cble coaxial ou fibre optique. Il dtermine le type de concentrateurs (switch, HUB, point
d'accs Wifi, ...) utilis. Ces quipements constituent les nuds dans le cas de rseaux en
toile.
2. La mthode d'accs dcrit la faon dont le rseau arbitre les communications des diffrentes
stations sur le cble: ordre, temps de parole, organisation des messages. Elle dpend
troitement de la topologie et donc de l'organisation spatiale des stations les unes par
rapport aux autres. La mthode d'accs est essentiellement matrialise dans les cartes
d'interfaces, qui connectent les stations au cble.
3. Les protocoles de rseaux sont des logiciels qui "tournent" la fois sur les diffrentes
stations et leurs cartes d'interfaces rseaux. C'est le langage de communication. Pour que
deux structures connectes sur le rseau, ils doivent "parler" le mme protocole.
4. Le systme d'exploitation du serveur rseau, souvent nomm gestionnaire du rseau, est
install sur le ou les serveurs. Il gre les partages, droits d'accs, ... Pour Microsoft, on
retrouve Windows NT serveur, Windows 2000 serveur, Windows 2003, 2008. Ce sont des
versions spcifiques. Linux est utilis sous diffrentes versions serveurs. Novell Netware est
un systme ddi principalement efficace comme serveur de fichier.
5. Le systme de sauvegarde est un lment indispensable qui fonctionne de diverses manires
soit en recopiant systmatiquement tous les fichiers du ou des serveurs, soit en faisant des
sauvegardes rgulires, ventuellement automatises.
6. Un pont, un routeur ou passerelle constituent les moyens de communication qui permettent
un de ses utilisateurs de "sortir" du rseau local pour atteindre d'autres rseaux locaux ou
des serveurs distants, Internet ou autres..
7. Le systme de gestion et d'administration du rseau envoie les alarmes en cas d'incidents,
comptabilise le trafic, mmorise l'activit du rseau et aide le superviseur prvoir
l'volution de son rseau. Cette partie est typiquement software.
2.7. Scurit et administration.
Un des aspect important d'un rseau informatique local est la centralisation de l'administration des
donnes. Ceci permet de sauvegarder et scuriser les donnes sur une seule machine. La scurit
reprend un ensemble de mesures contre les intrusions et virus, la gestion des privilges et droits
d'accs, la sauvegarde quotidienne des donnes, des quipements redondants en cas de panne, ...
Il n'y a pas de solutions idales pour la scurit des rseaux (et pour la scurit informatique en
gnrale). Trois solutions sont envisageable: les solutions matrielles que nous verrons, des solutions
bases sur Linux et des solutions bases sur Windows ou des programmes rajouts sur ces stations
Windows. Le mlange de plusieurs solutions est possible dans certains cas. Certaines solutions sont
d'ailleurs complmentaires. Sur un gros rseau "sensible", mettre un VPN hardware n'est pas
suffisant. Une scurit logicielle complmentaire incluant des contrles d'accs au niveau
administration serveur (serveur, dossier, droits d'accs) et logiciels de scurits vrifiant le trafic sur
le rseau interne n'est pas superflu.
Les routeurs peuvent tre remplacs par une solution base sur un serveur 2003 ou 2008,
par un logiciel proxy comme WinGate ou par un ordinateur configur spcifiquement en
Linux
Un serveur proxy est parfois intgr dans les routeurs (mais gnralement sous Windows ou
Linux)
Les firewall sont intgrs dans certains routeurs mais des logiciels assurent (presque) des
fonctions quivalentes, souvent intgrs dans l'anti-virus (ex.:Symantec, ZoneAlarm, Mcafee
au niveau des stations)
Les rseaux privs intgrs (VPN) sont intgrs dans certains systmes d'exploitation
serveurs mais peuvent galement tre des quipements spcifiques.
Les anti-virus sont le plus souvent des logiciels, mais peuvent tre implants dans des
routeurs qui vrifient tout le trafic extrieur.
Selon l'application, le niveau de scurit souhait, le nombre d'utilisateurs, ... et les budgets, la
conception du rseau utilisera une solution logicielle ou hardware ou une combinaison de ces
solutions. D'autres programmes de gestion rseaux (logiciels) permettent de grer les trafics, les
utilisateurs, ... En clair, par hardware, vous pouvez bloquer l'accs complet un serveur, par
software, autoriser seulement une partie des ressources d'un serveur. Les solutions des droits
d'accs intgrent le plus souvent les deux.

3. Base de transmission rseau
1. Introduction - 2. Cblage Ethernet - 3. Liaison physique - 4. Topologie en bus - 5. Topologie en
anneau 6. Topologie en toile - 7. Topologie mixte - 8. Topologie Maille - 9. Mthode d'accs
Pour transfrer des informations entre ordinateurs et priphriques informatiques dans un rseau
local, diffrents concepts sont ncessaires. Avant de dbuter les liaisons rseaux, commenons par
une simple communication entre un PC et une imprimante.
Dans une connexion en parallle, les 8 bits de chaque octet (byte) sont transfrs sur des fils en
parallle en mme temps. Le cble utilise 8 fils pour les donnes, des fils de masse, complts par
des signaux de contrle. Voyons les donnes. Pour faire passer un byte du PC vers l'imprimante, nous
envoyons une tension ou non sur chacun de ces 8 fils, l'imprimante ne fait que vrifier si une tension
est prsente ou non. En thorie, les signaux de contrles ne sont pas ncessaires.
Les connexions parallles sont maintenant remplaces par les connexions sries, li notamment au
prix et l'encombrement des fils mais aussi des difficults de synchroniser les signaux sur toutes les
lignes de donnes lorsque la vitesse augmente. Dans une connexion srie, le cblage le plus simple
ne reprend qu'un fil de communication (deux en mode bidirectionnel) et une masse commune, les 8
bits de donnes vont passer tour de rle sur un seul fils. Ceci explique que les connexions sries
sont rputes lentes.
Les donnes doivent tre contrles. Une solution serait de renvoyer chaque fois les donnes reues
pour vrification. L'importance des vitesse de transfert rend ce principe impossible. Dans la pratique,
on utilise un contrle de parit qui compte le nombre de bits 1. S'il est pair, la parit est de 0, et 1
pour une parit impaire dans le cas d'une parit paire, EVEN (l'inverse en parit impaire - ODD). Le
bit de parit est envoy la suite des 8 bits de donnes. Cette mthode de contrle n'est pas
totalement fiable, notamment si deux bits sont faux (et donc le message), la parit est juste. On peut
modifier le nombre de bit de parit en passant sur une base 4 (2 bits), ... mais le ralentissement
devient important. Cette solution n'est utilise pour pour des liaisons spatiales, satellites, ... Cette
solution n'est pas non plus utilise telle qu'elle dans les rseaux. Ceci a dj t tudi en premire
anne.
Dans notre liaison classique, seulement deux installations sont connectes entre-elles. Cette
connexion n'est pas trs raliste pour un rseau constitu d'ordinateurs. La connexion physique (les
fils) doivent relier tous les ordinateurs entre-eux. Chacun doit galement prendre la parole son tour
pour viter que plusieurs signaux ne soient prsents en mme temps. Ceci est rgit par le type de
rseau local.
En rseau, la suite de signaux 0 et 1 envoy s'appelle une trame. Elle est constitue des donnes et
des enttes et fin de messages ajoute par les diffrentes couches du modle OSI ou Internet.
L'organisation de ces trames dpendant du protocole utilis. La parit est directement gre par le
protocole.
Un protocole gre la mthode d'envoi des informations vers le destinataire. Comme dans un langage
humain, les deux interlocuteurs doivent utiliser le mme langage (protocole). Dans le cours hardware
( part en TCP/IP pour le routage et les firewall hardwares), nous n'utilisons finalement que les trois
premires couches du modle OSI du chapitre 2.
3.2. Le cblage Ethernet
Trois types de connexions physiques sont utiliss dans les rseaux locaux actuels: la paire torsade, le
cble coaxial (presque disparu) et la fibre optique.
3.2.1. La paire torsade tlphonique
Bon march et facile installer, c'est aujourd'hui le support le plus utilis en rseau local en rseau
Ethernet (cble RJ45)
La catgorie de cble utilis dtermine la vitesse maximale de transmission rseau. En paire
torsade, on utilise du cble tlphonique. Nanmoins, ces cbles sont repris suivant leurs
caractristiques physiques (diamtre, isolant, longueur des torsades) dans diffrentes catgories ci-
dessous:
Type de cble Vitesse supporte Type de rseau
Catgorie 1 Tlphonie Tlphone
Catgorie 2 1 Mbps Token-ring et tlphone
Catgorie 3 16 Mbps Token-Ring et 10 base T
Catgorie 4 20 Mbps en full duplex 10 Base T
Catgorie 5 100 Mbps 10BaseT et 100 Base TX
Catgorie 5e (catgorie 6) 1 Gbps Giga Ethernet
Deux familles de cbles paires torsades sont utilises: les cbles blinds (STP: Shilded Twisted Pair)
entours d'une feuille d'aluminium comme cran lectrostatique et, plus souvent utiliss, les UTP
(Unshielded twisted Pair) n'en utilisent pas.
3.2.2. Le cble coaxial
Nettement plus cher, le coaxial tait utilis dans les premiers rseaux locaux qui utilisaient une
bande passante large dcoupe en plages de frquence, chacune utilise par un canal. Actuellement,
la majorit des rseaux locaux fonctionnent en une seule bande de base (toutes les stations utilisent
un mme canal qui occupe la totalit de la bande passante). Le cble coaxial n'est plus utilis que
dans des endroits avec de fortes perturbations lectromagntiques, prsence de moteurs lectriques
par exemple).
La gaine protge le cble de l'environnement extrieur. Elle est gnralement en caoutchouc
(parfois en PVC (Chlorure de polyvinyle) ou tflon)
Le blindage (enveloppe mtallique) entoure les cbles et protge les donnes des parasites
(souvent appel bruit) qui provoquent une distorsion du signal. C'est le fil de masse.
Un isolant entoure la partie centrale. C'est un matriel dilectrique qui vite tout contact
entre le blindage et l'me.
L'me est le chemin de transmission des donnes. Elle est constitue dun seul brin en cuivre
ou de plusieurs torsads.
3.2.3. La fibre optique
Nettement plus chre, la fibre optique permet des dbits levs. Utilisant un signal lumineux, elle est
insensible aux parasites lectromagntiques. Elle est principalement utilise pour interconnecter des
rseaux locaux ou sur de longues distances. Ce support est fragile, difficile installer et casse
facilement sous un effet de torsion.
La fibre optique possde nanmoins de plusieurs avantages :
Lgre
Parfaite immunit aux signaux parasites lectromagntiques
Faible attnuation du signal avec la distance
Accepte des dbits suprieurs 10 Gb/s
Largeur de bande leve, de quelques dizaines de MHz plusieurs Ghz (en fibre monomode).
La cblage optique est souvent utilise pour les connexions entre plusieurs btiments (appel
backbone) et longues distances (de quelques kilomtres 60 km pour la fibre monomode). Ce type
de cble ne permet pas non plus d'couter sur le cble, il n'met aucun signal lectromagntique lors
d'un transfert de donnes. Deux types de fibres optiques sont utilises:
Le monomode (SMF) utilise un seul canal de transfert l'intrieur du conducteur et permet
des transferts jusque 100 Gb/s par kilomtre. Le chemin est parfaitement linaire, il n'y a
aucune dispersion du signal. Par contre, la source d'mission est une diode laser, plus chre
et plus difficile mettre en oeuvre.
Le multimode (MMF) utilise une simple diode LED moins chre mais avec un signal non
rectiligne. Les rayons utilisent diffrents trajet suivant les angles de rfraction et donc
diffrents temps de propagations: le signal doit tre reconstruit l'arrive. Principalement
utilises pour les rseaux internes, les performances sont de l'ordre du Gb/s.
Le site materiel-informatique.be reprend les diffrents connecteurs et types utilises.
3.3. Les topologies rseau.
En liaison srie ou parallle standard, la communication se fait uniquement entre 2 priphriques
alors que le nombre en rseau n'est pas limit. Dans un rseau local, les quipements sont connects
entre-eux suivant diffrents types de raccordement appels topologie. (nous verrons aussi les
connexions infrarouge et hertzienne).

3.4. Topologie rseau en bus
Le bus est cble central o circulent les donnes sur lequel se connectent les serveurs, stations et
priphriques rseaux. Il stend sur toute la longueur du rseau. Lorsquune station met, les
donnes circulent sur l'ensemble du bus, pour tre rcupre par le destinataire. Une seule station
peut mettre la fois. Au deux extrmits du bus, un "bouchon" supprime dfinitivement les
informations, supprimant la rverbration des donnes (renvoi en sens inverse).
Dans cette topologie, une station en panne ne perturbe pas le reste du rseau. Elle est trs facile
mettre en place. Par contre, en cas de rupture du cble, le rseau est inutilisable. Le signal nest
jamais rgnr, ce qui limite la longueur de connexion.
Cette topologie est utilise dans les anciens rseaux Ethernet 10 Base 2 et 10 Base 5.
3.5. Topologie en anneau
Cette architecture est utilise par les rseaux Token Ring dvelopps par IBM jusqu'au dbut 2000 et
FDI. Elle utilise la mthode daccs "jeton". Les donnes transitent de stations en stations en
suivant lanneau qui chaque fois rgnrent le signal. Le jeton dtermine quelle station peut
mettre, il est transfr tour de rle vers la station suivante. Lorsque la station qui a envoy les
donnes les rcupre, elle les limine du rseau et passe le jeton au suivant, et ainsi de suite
Le gros avantage est un taux d'utilisation de la bande passante proche de 90%. Par contre, une
station en panne bloque toute la communication du rseau. Autre dfaut, linterconnexion de
plusieurs anneaux est complexe. Elle est utilise dans les rseaux Token Ring et FDDI
Remarque: Cette architecture est brevete pour les rseaux Token Ring par IBM qui ne dveloppe
plus de circuits de ce type depuis 2000.
3.6. Topologie en toile.
Notamment utilise par les rseaux Ethernet actuels en RJ45 (10 et 100 base T, Giga 1000T, ...), cest
la plus courante. Toutes les stations sont conectes un concentrateur, un point central. Les stations
mettent vers ce concentrateur qui renvoie les donnes vers tous les autres ports rseaux (hub) ou
uniquement au destinataire (switch).
Facile connecter, une station en panne ne perturbe pas lensemble du rseau, celle du
concentrateur oui. Par contre, cette topologie ncessite plus de longueurs de cbles que pour les
autres. Le dbit pratique est aussi moins bon que pour les autres topologies.
3.7. Topologie mixte.
Dans le cas d'un rel rseau, ces trois topologies sont difficiles mettre en oeuvre. Une topologie en
toile est facile utiliser pour un rseau limit gographiquement, pas pour un rseau mondial. La
technique est de relier des rseaux en toile locaux via des liaisons en bus (fibre optique par
exemple).
3.8. Topologie maille.
Utilise principalement par Internet, les rseaux maills utilisent plusieurs chemins de transferts
entre les diffrents noeuds. Ce sont des routeurs intelligents (appels switch) qui intgrent des tables
de routages et dterminent dynamiquement la meilleure voie parmi toutes celles possibles. Cette
mthode garantit le transfert des donnes en cas de panne d'un noeud. Elle est complexe mettre
en oeuvre et ne peut pas tre utilise dans les rseaux locaux.
3.9. Mthode d'accs
La mthode d'accs se base sur la couche physique du modle OSI (niveau 1) dtermine comment les
stations peuvent mettre sur le cble. Deux mthodes principales sont utilises: la contention et le
jeton. Les rseaux Ethernet utilise la contention et CSMA/CD (Carrier Sense Multiple Acces With
collision Detection), le token Ring utilise le jeton, chacun a le droit de communiquer son tour. Les
deux mthodes sont normalises par l'IEEE (comit 802): 802.3 pour Ethernet et 802.5 pour l'anneau
jeton
Dans la mthode Ethernet, utilisant la contention, chaque ordinateur envoie son message sans
regarder ce qui se transite sur le cble. Si une station met pendant qu'une autre est en train
d'mettre, ceci provoque une collision. La deuxime station mettrice stoppe la transmission pour
recommencer plus tard. Dans le cas du Giga Ethernet, les stations n'envoie plus le message, mais un
signal de dpart pour vrifier si la voie est libre. Le CSMA/CD (Carrier Sense Multiple Acces with
Collision Detection) se charge de la dtection des collisions.
Dans la mthode jeton, chaque station peut communiquer son tour. Si 3 stations sont connectes
en anneau, la station 1 prend la parole, ensuite la 2, puis la 3. La station 1 peut de nouveau prendre
la parole, et ainsi de suite.
4. Les rseaux Ethernet.
4.1. Introduction - 4.2. Ethernet coaxial, IEEE 803.3 10 base 5 et 10 base 2 - 4.3. Ethernet, IEEE 802.3
10 Base T RJ45 - 4.4. Ethernet 100 base T RJ45, fast Ethernet - 4.5. Le Giga Ethernet - 4.6. Carte
rseau - 4.7.Half Duplex et Full Duplex - 4.8. Connexion RJ45 - 4.9. Rseaux RJ45, problmes de
connexion, appareils de tests - 4.10. Adresse Mac
La connexion entre ordinateurs ncessite une carte rseau implante dans chaque PC (aussi appeles
NIC, Network Interface Card). Les cartes rseaux locaux les plus courantes sont de type Ethernet. Ce
chapitre reprend toutes connexions Ethernet et le cblage (fabrication, prcaution, ...). Le suivant
reprend les concentrateurs Ethernet (hub, switch, routeur, ...)
Le rseau local Ethernet date de la fin des annes 70, il dcoule des tudes de DEC, Intel et Xerox,
avant la normalisation. Ceci explique que les couches suprieures du modle OSI ne sont pas
spcifies. Tous les PC peuvent communiquer sur le cble rseau informatique simultanment. Pour
viter que deux stations communiquent au mme moment, ont utilise la contention. La mthode
principale dans un rseau local (LAN) est le CSMA/CD (Carrier Sense Multiple Access), avec une
dtection des collisions. C'est celle utilise par les rseaux Ethernet. Lorsqu'une station met, elle
coute si un autre quipement n'est pas aussi en train d'mettre. En cas de deux missions
simultanes (une collision), la station cesse d'mettre, avant de rmettre son message aprs un
dlai fixe. Cette technique est alatoire, on ne peut prvoir le temps utilis pour mettre un
message, en transmission comme en rception.
4.2. Ethernet, IEEE 802.3 10 Base 5 et 802.3 10 Base 2
10 Base 5 est la version d'origine d'Ethernet. Elle permet une vitesse de 10 Mb/s sur un cble coaxial
de 500 mtres par segments (donc une topologie en bus).

Chaque quipement utilise une carte Ethernet qui effectue l'adaptation physique des donnes et
gre l'algorithme CSMA/CD. Comme pour toutes connexions utilisant un cblage coaxial, les 2
extrmits sont termines par un bouchon (une rsistance de terminaison) qui attnue les
rverbration des donnes et rduit les collisions. L'pais cble coaxial est de couleur jaune d'un
demi-pouce de diamtre (type BELDEN 9580). La longueur maximale du rseau est de 2,5 kilomtres
et 100 quipements connects. Un drop cble (paires torsades) relie les quipement au cble
coaxial avec une longueur maximale de 50 mtres. Les rseaux 10 base 5 ne sont plus utiliss,
remplacs par la fibre optique.
Une version IEEE 802.3 10 base 2 est plus connue. Elle utilise un cble coaxial fin (Thin Ethernet) avec
une longueur maximum de 185 mtres pour 30 stations maximum. Chaque station est raccorde au
coaxial via un T de type BNC, 50 centimtres minimum doivent sparer deux stations. De nouveau,
on utilise une rsistance de terminaison (bouchon) de 50 ohms.
Ce connexion est utilisable pour 2 ou 3 PC, gure plus.
4.3. Rseau Ethernet, IEEE 802.3 10 Base T
Une premire version (802.3 1 base 5 ou Starlan) utilise le cblage prcabl pour le tlphone dans
les immeubles. Elle se base sur une topologie en toile via des hub avec une distance maximum de
250 mtres. La version suivante ( Ethernet 802.3 10 base T) se base sur cette norme mais avec une
vitesse suprieure (10 Mb/s) sur une distance maximum de 100 mtres.
La norme 10 base T utilise deux paires tlphoniques (4 fils) avec une vitesse maximum de 10 Mb/s
avec de nouveau une topologie toile. Les noeuds sont constitus de concentrateurs (hub, switch,
routeur).
Le cblage sous RJ45 en 10 Base-T utilise 4 fils (pour 8 accessibles dans le connecteur). Le fils de
connexion peut-tre achet dans le commerce, mais peut facilement tre fabriqu. Gnralement,
les 8 fils sont connects en RJ45 mais le 10 base T et en 100 base T n'en utilisent que 4 (en Giga
Ethernet, oui). Deux connexions sont proposes, droit ou croiss. Sans concentrateur (connexion de
2 ordinateurs) ou entre deux concentrateurs, les fils doivent tre un cble croiss comme ci-dessous.
Les polarits et les paires doivent tre apparies.
Cble RJ45 droit en 10 Base T et 100 base T, entre
un concentrateur et une station)
Cble Rj45 crois, entre deux PC ou deux
concentrateurs (switch, Hub, routeur, ...)

Pourquoi respecter le cblage RJ45 par paires?
Un courant lectrique induit automatiquement un champ magntique dans le voisinage qui son
tour provoque une circulation de courant. Ceci entrane des parasites sur le cblage rseau.
Au dpart, le signal de la carte rseau est envoy sur la forme T+ et T- (signal invers). Si un parasite
est induit sur le cblage lors de la transmission. Comme les paires sont torsades, les perturbations
lectriques provoques par des courants induits seront gnralement identiques sur une mme paire
mais diffrents d'une paire l'autre.
Inversons T(-). Le signal utile et le parasite sont inverss. En additionnant T(+) et T(-) invers, le signal
est doubl mais le parasite est supprim (ou du moins nettement rduit).
Matriel ncessaire pour un cblage RJ45:
Du cble 4 paires catgorie 5 (5e) torsads
Des connecteurs RJ45 sertir.
Des manchons caoutchouc, pour viter le sectionnement du cble.
Une pince sertir avec une partie coupante et dnuder
Procdure suivre :
Enfiler le manchon sur le cble.
Dnuder la gaine de protection sur 15 mm environ
Insrer les fils de chaque paire dans le connecteur suivant les schmas ci-dessus (droit ou
crois suivant l'utilisation).
Retirez les en maintenant les fils en place et les couper en ligne (pas en arc de cercle). Il doit
rester peu prt 13mm de fils hors gaine.
Replacer les fils dans le connecteur en appuyant sur l'ensemble du cble pour que les fils
rentrent jusqu'au fond du connecteur.
Sertir le connecteur avec la pince.
Enficher le manchon de protection.
Par transparence, vrifiez si les fils arrivent bien fond dans le connecteur.
4.4. Ethernet 100 Base TX et 100 Base T4, Fast Ethernet
Sorti en 1992, la norme 100 base T (Fast Eternet) a un dbit thorique est de 100 Mb/s (toujours 100
mtres maximum). Elle utilise la mme topologie.
On retrouve 2 normes de 100 Base T: le 100 Base T4 (obsolte) et le 100 Base TX. Le 100 Base TX
utilise le mme cblage que le 10 Base T, le 100 Base T4 utilisait les 4 paires (dcoupage de la bande
passante en 4 pour l'mission comme pour la rception (il n'est donc pas Full Duplex, incompatible
avec une communication bidirectionnelle simultane). Le 100 T4 utilise du cble de catgorie 3, 4 ou
5.
En 100 base TX, le cblage est identique en droit et en crois l'Ethernet base 10 mais avec un cble
de catgorie 5. Comme le 100 base TX n'utilise que 4 fils, un cblage giga peut tre utilis sans
problmes, l'inverse en crois non (en droit forcment oui, ils sont identiques).
Cble normal et crois 100 Base TX

Cble normal et crois 100 Base ou Giga Ethernet.

4.5. Gigabit Ethernet.
Les premires connexions gigabit utilisaient la fibre optique. Elles utilisent les paires torsades de
type RJ45 de classe 5e (toujours sur une distance maximum de 100 mtres). Le gigabit est une
extension des deux normes prcdentes, mme format de trames et mme technique anticollision
(CSMA-CD).
Tableau comparatif des vitesses. Le 1000 base T est le plus courant
Type Vitesse Distance Media
10BASE-T 10 Mb / s 100m Cuivre
100BASE-TX 100 Mb /s 100m Cuivre
100BASE-FX 100 Mb / s 412 m half Duplex Multi-mode Fibre optique
2 Km Full Duplex multi-mode Fibre optique
1000 Base LX 1000 Mb / s
1000 Mb / s
3 Km
550m
Single-mode Fibre optique (SMF)
Multi-mode Fibre optique (MMF)
1000 Base SX 1000 Mb / s
1000 Mb / s
550m
275m
Multi-mode Fibre optique (50u)
Multi-mode Fibre optique (62.5 u)
1000 Base C
(pas supporte par les
applications industrielles
standards)
1000 Mb / s 25m Cuivre, 4 paires UTP5
1000 Base T - 1000 Base TX IEEE
802.3 ab ratifi le 26 juin 1999,
1000 Mb / s 100m Cuivre, cble catgorie 5e, transmission
sur 4 paires (250 Mbits/paire)
1000 BASE LH 1000 Mb / s 70 km Fibre optique
Le cblage des fils dans le connecteur RJ45 des 1000 C et 1000 TX est le mme qu'en 100 Base T4, y
compris pour les cbles Ethernet croiss. Actuellement, tous les switch intgrent le MDI/MDIX qui
permet d'utiliser des cbles droits.
4.6. Carte rseau Ethernet
Les PC utilisent trois types suivant les vitesses: 10, 100 et Giga Ethernet. Toutes les cartes intgrent
un connecteur RJ45 sauf les premires base T de 3Com qui n'acceptaient que le coaxial + un
connecteur propritaire. Les cartes 10 MB intgrent en plus un connecteur coaxial. Les
concentrateurs 100 base TX permettent les liaisons 100 Mb et 10 Mb, les Giga acceptent
rarement les 10.
Les cartes rseaux sont connectes dans un bus interne: ISA, PCI, PCI-Express ou PCI-X pour les
serveurs. Il y a des parfois incompatibilits entre les cartes PCI 3.3V et carte mre en 5V (anciens
Pentium). Certaines cartes intgrent un socket pour une Eprom. ceci permet de dmarrer le PC via le
rseau (sans disque dur).
Chaque carte rseau Ethernet en RJ45 inclut 2 LED. La premire, gnralement verte, signale que la
carte est connecte sur un concentrateur via un cble. La deuxime, orange ou verte, signale la
transmission / rception de donnes. Les cartes rseau actuelles commutent automatiquement sur
chaque vitesse Ethernet (10 ou 100).
A de trs rares exceptions (hub et switch de bas de gamme), avec une carte en connecte en RJ45
sur un concentrateur, la (les) LED doit s'allumer sur la carte rseau et sur le HUB, Switch, Routeur.
En hardware, cela signifie que c'est l'accs rseau qui est mal paramtr.
4.7. Half Duplex et Full Duplex.
Une carte rseau Ethernet peut tre de type Half Duplex (envoi ou rception) et Full duplex (envoi et
rception simultanment). Toutes les cartes actuelles sont Full Duplex, ce qui double le taux de
transfert maximum. Cette solution doit utiliser un Switch (les Hub sont d'office half Duplex).
Pour des problmes de cblage, on doit parfois passer en mode Half Duplex sur la carte rseau. La
configuration se paramtre dans les proprits de la carte rseau sous l'onglet avanc.

4.8. Cblage RJ45 Ethernet, rgles, problmes de liaisons et appareils de tests
Dans les cblages professionnels, les cbles sont insrs dans des goulottes, passent travers des
murs, ... La solution consiste acheter une pince, les connecteurs (avec les protections), le cble et
de respecter strictement les couleurs de cblage RJ45 ci-dessus.
Connecter deux structures entre elles par des cbles amne toujours diffrents problmes.
La premire est de respecter les distances maximales (100 mtres pour les connexions sur cuivre),
mme si on est souvent tent de mettre quelques mtres en plus. Premire erreur, 100 mtres
maximum.
Si le cble est achet, la connexion est gnralement bonne. Si vous raccordez les connecteurs RJ45
vous mme, mieux vaut cbler correctement d'avance. Ca vitera des problmes futurs.
Le nombre de HUBS en cascade est limit (pas avec des switchs normalement). En 10 base T, le
nombre maximum entre 2 concentrateurs ou ordinateur - concentrateur est de 4. Par contre, il est
de 2 en 100 base T. Ceci est li aux temps de propagation du signal sur le cble.
En dernier, le cble RJ45 doit tre correctement pos. Parmi les problmes rencontrs:
cble rseau coup, pli, endommag, ...
passage du cble proximit de cbles lectriques, tubes fluorescents ou non (minimum 50
cm), moteurs lectriques de fortes puissances, ... qui induisent des champs
lectromagntiques parasites. Le tableau reprend les distances minimum entre les cbles
rseaux et lectriques suivant la distance.
Ecartement entre les cbles courant fort (rseau lectrique, non) et courant faible (rseau
Ethernet)
Ecartement
en cm

30 cm

20 cm

10 cm
5 cm

10 m 20 m 30 m 80 m
Cheminement parallle en mtres
L'utilisation des mmes goulottes pour le rseau lectrique et rseau Ethernet provoque dj des
problmes, mme sur une petite longueur. De plus les normes de scurit lectriques l'interdise
(Vincotte en Belgique). C'est identique pour les fils tlphoniques.
On trouve sur le march diffrents types d'appareils de tests des cbles rseaux.
Les premiers (voire ci-contre) fonctionnent comme un ohmmtre sur 8 fils. Une partie se met d'un
cot du fils, le testeur de l'autre. Ces appareils dtectent gnralement les cbles droits et les cbles
croiss ainsi que d'autres connecteurs (RJ11, RJ45, USB, ...). Ils vrifient uniquement si la connexion
est bonne, pas si la liaison est correcte. Si l'appareil dtecte une erreur de cblage, le fils est mauvais.
Par contre, un affichage correct ne signifie pas forcment que le cble est bon. Un mauvais contact
sera souvent considr comme bon par le testeur, mais pas de connexion rseau.
La partie gauche reprend le module de test, la partie droite, la terminaison dtachable. Les 8 Led
indiquent si les fils individuellement sont corrects. La partie gauche regroupe des indications: Short
(mauvaise connexion sur au moins un fils, absence de connexion sur au moins un fils, ...),
CONNECTED pour un cble droit et No-Parrallel pour un cble crois. NO CONNECTION que le cble
n'est pas insr. Le prix varie de 100 150 .
Le deuxime type fonctionne la manire d'une carte rseau. Ces appareils testent la ligne (et pas
uniquement les fils). L'appareil se connecte au bout d'un cble et teste la liaison sur un HUB ou un
switch. Dans ce sens, ils sont plus efficaces. Ils sont un peu plus onreux.
Le troisime type de testeur rseau permet en plus que ceux du premier type:
tests effectifs des faux contacts ou des coupures sur chaque cble.
longueur du cble
en cas de coupure sur un fils (ou de plusieurs), la distance la quelle il est coup.
diverses perturbations lectromagntiques qui transitent en fonction de la distance.
Le prix avoisine facilement 10.000 .
4.9. Adresse MAC
Chaque carte rseau se distingue par une adresse MAC. Cette adresse est unique pour toutes les
cartes et quipements rseaux. Elle est constitu de 6 octets de type X.X.X.X.X.X ou chaque X varie de
0 255 mais plus souvent donn en hexadcimal (exemple 4D.EE.52.A4.F6.69.
Dans Dmarrer -> excuter, tapez la commande WINIPCFG (prsent dans le rpertoire windows sous
windows 98) ou ipconfig / all dans une fentre DOS (Windows 2000, XP, 2003, Vista, ...).

L'adresse Mac FF.FF.FF.FF.FF.FF est particulire, c'est l'adresse de Broadcast utilise pour dtermine
o est un priphrique sur l'ensemble du rseau.
L'adresse IP est dtermine par l'adresse MAC par l'ARP (Adresse Resolution Protocol). Lorsqu'une
communication rseau a t tablie sous Ethernet, la commande DOS arp -a permet de retrouver
l'adresse MAC des autres PC du rseau. Le protocole Ethernet utilise cette adresse MAC pour faire
communiquer des quipement entre eux via un rseau. Quand une machine veut parler une autre,
elle envoie un paquet sur le rseau en TPC, utilisant le contenu de sa table ARP locale pour
dterminer l'adresse IP. Le message contient galement la longueur du packet, les donnes et le CRC
(Cyclic Redundancy Checking), un contrle d'erreur, ...

5. Hub, switch, routeur rseaux, ... Ethernet
5.1. Introduction - 5.2. Hub (rptiteur) - 5.3. Switch (commutateur) - 5.4. Diffrence entre un
hub et un switch - 5.5. Routeur - 5.6. Rpteur - 5.7. Passage des adresses IP aux adresses
MAC - 5.8. Connexion Ethernet
Le chapitre prcdant nous a permis d'tudier les types de rseaux Ethernet. Ce
chapitre va analyser le fonctionnement des concentrateurs Ethernet dans les topologies en
toiles (hub, les switch, routeurs, ...) en T Base 10, T base 100, gigahertz, ... (pas les cblages
coaxial qui utilise une topologie en ligne). Le choix du type de concentrateur varie suivant
limportance du rseau, lemplacement du concentrateur dans la conception et l'inter-
connexion de rseaux. Les hub's sont obsoltes.
5.2. Hub (rptiteur)
Un Hub sont est un simple rptiteur (son nom en Franais). Il ne fait qu'amplifier le
signal pour le retransmettre sur tous ses ports. Il est utilis en Ethernet base 10 et base 100. Le
rel problme de ce type de concentrateur, c'est justement le renvoi des donnes vers tous les
quipements. Ds que le nombre d'ordinateurs connects augmente, le taux de collision
augmente en proportion, rduisant la vitesse effective du rseau. Les Hub sont tous Half
Duplex (pas d'mission / rception en mme temps).
Les HUB sont caractriss par un nombre de connexion: 4, 5, 8, 10, 16, 24, ... Ils sont
remplacs par les switchs dans tous les rseaux actuels.
Suivant le type et le modle, ils
intgrent quelques particularits de
connexion spcifiques (il n'y a pas de
versions Gigabits).
Hubs base 10:
nombre de ports suivant le
modle, port ddoubl avec 1
connecteur inverseur
(connexion de deux
concentrateurs sans cble
crois), un port Ethernet
coaxial 10 Base2. Par port
rseau, on retrouve une LED
de connexion et une led de
collision (ventuellement une pour tous les ports).
Hubs base 100: nombre de ports suivant le modle, port inverseur, plus
de connexion coaxial. Les Led sont identiques aux modles 10 base T, avec en plus
deux LED pour chaque canal pour signaler la vitesse (base 10 et base 100).
Selon la vitesse, le nombre maximum de HUB en cascade (raccords port port) est
limit 4 entre 2 stations pour le 10 base T et 2 pour le 100 base T. Ceci est li au temps
maximum de propagation d'un signal ETHERNET avant sa disparition et au temps de
dtection des collisions sur le cble. Il se pourrait que la collision ne soit pas dtecte temps
et que la deuxime station mettrice envoie le message en pensant que la communication est
libre. Cette limitation n'existe pas pour les switch qui enregistrent les trames avant de les
envoyer.
5.3. Switch (commutateur).
5.3.1. Introduction
En recevant une information, un switch dcode l'entte de trame pour ne l'envoyer que
vers le port Ethernet associ, ce qui rduit le trafic sur l'ensemble du cblage rseau par
rapport un HUB qui renvoie les donnes sur tous les ports, rduisant la bande passante en
provoquant plus de collisions. Chaque switch utilise une table de correspondance adresse
MAC - numro de connexion et pas d'adresse IP comme on pourrait le penser. Les
ordinateurs utilisent une table de correspondance ARP, comme nous vu avec la commande
DOS ARP en systmes d'exploitation qui reprend la correspondance MAC- IP. Reste voire
comment a va fonctionner dans la pratique.
Pour compliquer ... je propose un petit vocabulaire. Un port Ethernet est une des ports
de communication du switch (un connecteur). Un port TCP ou UDP est un numro entre 0 et
65535 qui est spcifique suivant l'application.
Les switches travaillent suivant les modles sur les:
niveau 1 (comme les hubs) mais surtout sur le niveau 2 du modle OSI. Dans ce cas,
ils utilisent une table de correspondance Adresse MAC - port Ethernet qui reprend les
adresses Mac des cartes rseaux connectes directement ou par l'intermdiaire d'autres
concentrateurs (y compris HUB) ... donc pas d'adresses IP connues.
Niveau 3 (appels switch de niveau 3 justement) dcodent les trames de niveau 2 et
donc les adresses IP contenues dedans. Ceci permet d'implanter des services de
qualits en fonctions de plages d'adresses IP comme nous le verrons avec un petit labo
sur les switch manageables comme par exemple allouer des priorits des adresses IP
pour le transfert de donnes, mais aussi de vrifier les collisions sur diffrents noeuds
du rseau ou de bloquer des communications entre diffrents ports de sortie. Les
transmissions se font toujours avec une table de correspondance reprenant des adresses
MAC. Par contre, ils ne font pas de transitions entre classes d'adresses comme les
routeurs.
Les switch de niveau 4 sont encore plus forts. La diffrence avec les layers 3, c'est
qu'ils analysent aussi la couche 3 (transport) lie TCP et UDP qui reprennent des
ports lis aux diffrentes applications. Ils sont capables de bloquer des ports et donc
certaines applications entre leurs diffrents ports rseaux (y compris en les
regroupant).
... mais tous utilisent une correspondance MAC - port Ethernet, les 3 et 4 ne donnent
donc que des possibilits de configurations supplmentaires. D'ailleurs, ces deux types sont
manageables (configurables).
A la diffrence des hubs, la majorit des switches peuvent utiliser le mode Full
duplex. La communication est alors bi-directionnelle, doublant le taux de transfert maximum.
Un Switch vrifie automatiquement si le priphrique connect est compatible full ou half
duplex. Cette fonction est souvent reprise sous le terme "Auto Negociation".
Les modles actuels sont Auto MDI/MDIX. Ceci signifie que le port va dtecter
automatiquement le croisement des cbles pour la connexion Ethernet. Dans le cas des HUB,
un port muni d'un bouton poussoir, reprend la fonction manuellement. Vous pouvez
nanmoins utiliser des cbles croiss pour relier des concentrateurs entre eux.
L'utilisation des switch permet de rduire les collisions sur le cblage rseau.
Lorsqu'un priphrique souhaite communiquer, il envoie un message sur le cblage. Si un
autre priphrique communique dj, deux messages se retrouvent en mme temps sur le
rseau provoquant une collision. Le premier reprend son message au dbut et le deuxime
attend pour ressayer quelques millisecondes plus tard. Il n'y a (en thorie) pas de limitations
du nombre de switches en cascade sur un rseau.
5.3.2. Fonctionnement d'un switch.
Au dmarrage, un switch (Layer 2 mais aussi les autres) va construire une table de
correspondance adresse MAC - (numro de) port Ethernet. Cette table est enregistre dans
une mmoire interne (en RAM). Par exemple pour un D-link DSS-16+ (16 ports), elle est de
8000 entres (stations). Par contre, pour un modle de gamme infrieure (D-Link DES -
1024D de 24 ports) elle est galement de 8000 entres, pour la majorit des switchs 5 ports,
elle varie de 512 1000 entres. Ceci ne pose pas de problmes pour un petit rseau interne
mais bien pour de gros rseaux. J'ai dj eut le problme dans un rseau de 30 PC. Ds que
l'usine dmarrait, les vitesses de communications du rseau s'effondraient. De toute faon, le
nombre de PC maximum connects est limit par la classe d'adresse IP utilise par les
ordinateurs. Lorsqu'une nouvelle carte rseau est connecte sur un de ses ports, il va adapter
sa table de correspondance.
Voyons maintenant ce qui se passe lorsqu'un ordinateur (PC1) communique vers un
autre PC (PC2) connect sur le mme switch. Le message de dpart incluant l'adresse de
destination, le switch va retrouver directement dans sa table l'adresse du PC2 et va rediriger le
message sur le port adquat. Seul le cblage des 2 ports (PC1 et PC2) vont tre utiliser.
D'autres PC pourront communiquer en mme temps sur les autres ports.
Dans le cas ou le rseau utilise 2 switches. Le PC1 envoie le message avec l'adresse de
destination sur le switch1 sur lequel il est raccord. Celui-ci va vrifier dans sa table si
l'adresse de destination est physiquement raccord sur un de ses ports. Dans notre cas ce n'est
pas le cas. Le switch va donc envoyer un broadcast (une adresse MAC FF.FF.FF.FF.FF.FF)
sur tous ses ports pour dterminer sur quel port se trouve l'ordinateur de destination. Ce
broadcast passe gnralement sur tout le rseau. En recevant le broadcast, le switch 2 va
vrifier dans sa table si l'adresse de destination est dans sa table. Dans notre cas, elle est
prsente. Il va donc renvoyer un message au switch 1 signifiant que le message est pour lui.
Le switch 1 va alors diriger le message vers le port connect au switch numro 2. Le switch 1
va mmoriser dans sa table l'adresse du PC2 et le port Ethernet associ. Ceci ne pose pas trop
de problmes tant que la capacit de la table mmoire du premier switch est suffisante.
Voyons maintenant quelques cas plus complexes. Lorsqu'une adresse MAC non
connecte en direct est place dans la table, le switch va la garder pendant un certains temps.
Si une nouvelle demande vers cette adresse est reue, le port de destination est retrouv dans
la table. Par contre, si le dlai entre les demandes est trop long (gnralement 300 secondes),
l'entre de la table est efface et le processus de broadcast est de nouveau activ. Si la table
est trop petite (cas des Switch avec un faible nombre de ports sur un rseau trs important),
l'entre MAC dans la table peut-tre efface prmaturment.
5.3.3. Types de switches
La technologie d'un switch est troitement lie au type de donne, la topologie du
rseau et aux performances dsires.
Store and Forward: le plus courant, stocke toutes les trames avant de les envoyer sur
le port Ethernet adquat. Avant de stocker l'information, le switch excute diverses
oprations, allant de la dtection d'erreur (de type RUNT) ou construction de la table
d'adresses jusqu'aux fonctions applicables au niveau 3 du modle OSI, tel que le
filtrage au sein d'un protocole. Ce mode convient bien au mode client/serveur car il ne
propage pas d'erreur et accepte le mlange de diverses mdias de liaison
(environnements mixtes cuivre / fibre par exemple) ou encore dans le mlange de
dbits. La capacit de la mmoire tampon varie de 256 KB plus de 8 MB pour les
plus gros modles. Les petits switch de ce type partagent souvent la capacit de
mmoire par groupes de ports (par exemple par 8 ports). Par contre, les modles de
haute gamme utilisent une mmoire ddie pour chaque port rseau. Le temps
d'attente entre la rception et l'envoi d'un message dpend de la taille des donnes.
Ceci ralentit le transfert des gros fichiers.
Le mode Cut Through analyse uniquement l'adresse Mac de destination (place en
en-tte de chaque trame, code sur 48 bits et spcifique chaque carte rseau) puis
redirige le flot de donnes sans aucune vrification sur le message proprement dit.
Dans le principe, l'adresse de destination doit tre pralablement stocke dans la table,
sinon on retrouve un mcanisme de broadcast. Ces switch sont uniquement utilises
dans des environnements composs de liaisons point point (clients - serveur). On
exclus toutes applications mixtes de type peer to peer.
Le mode Cut Through Runt Free (galement appel Fragment Free chez CISCO)
est driv du Cut Through. Lorsqu'une collision se produit sur le rseau, une trame
incomplte (moins de 64 octets) appele Runt est rceptionne par le switch. Dans ce
mode, le commutateur analyse les 64 premiers bytes de trames avant de les envoyer au
destinataire. Si la trame est assez longue, elle est envoye. Dans le cas contraire, elle
est ignore. Les temps de latence sont trs bas.
Le mode Adaptive Cut Through se distingue surtout au niveau de la correction des
erreurs. Ces commutateurs gardent la trace des trames comportant des erreurs. Lorsque
le nombre d'erreur dpasse un certain seuil, le commutateur passe automatiquement en
mode Store and Forward. Ce mcanisme vite la propagation des erreurs sur le rseau
en isolant certains segments du rseau. Lorsque le taux d'erreur redevient normal, le
commutateur revient au mode Cut Through.
5.3.4. Particularits supplmentaires
Un Switch peut tre stackable (empilable): un connecteur spcial permet de relier
plusieurs switch de mme marque entre-eux. Le nombre de commutateurs empils (du mme
modle) est limit. L'ensemble du groupe est vu comme un seul appareil avec une seule table
commune, c'est ce qu'on appelle le Meshing. Ceci permet d'augmenter le nombre de ports et
de reprendre une table commune plus importante.
Certains switch sont manageables (administrable). Par une interface de type WEB
relie l'adresse IP ou par RS232 et l'utilisation de Telnet, vous pouvez bloquer certains
lignes, empchant par exemple, un partie de PC de se connecter vers un autre bloc de PC ou
de dterminer physiquement quel PC a accs quel serveur. Ceci permet galement de
dterminer des plages d'adresses sur des ports (cas o plusieurs switch - Hub sont chans) et
ainsi d'augmenter la vitesse. Certains modles permettent nanmoins de crer des groupes
d'utilisateurs en utilisant le protocole IGMP. Ils sont dits de niveau 2 (layer 2 du modle OSI)
s'ils permettent de dterminer les adresses et de niveau 3 (layer 3 du modle OSI) s'ils
permettent en plus de bloquer par ports (TCP ou UDP). L'utilisation d'un routeur - firewall
hardware est nanmoins prfrable si c'est pour bloquer les accs. Certains modle sont
appels niveau 4 (terme publicitaire) lorsqu'ils permettent de bloquer l'utilisation du rseau
pour des logiciels dtermins en dcodant le message.
Via l'interface IP ou Telnet, un switch administrable permet galement de vrifier
distance les connexions sur le switch (affichage de la face avant), sauvegarder ou restaurer la
configuration, mise jour du firmware, paramtrer la dure de vie des adresses MAC dans la
table, ...
Le Port Trunking permet de rserver un certain nombre de ports pour des liaisons
entre 2 commutateurs (jusque 4). Cette fonction partage les communications inter-switchs via
ces ports. C'est le seul cas o deux points du rseau peuvent tre relis par plus d'une
connexion physique.
5.4. Diffrence entre un HUB et un Switch
HUB SWITCH
Les donnes envoyes sont envoys sur tous
les ports aux priphriques qui dcodent la
trame d'en-tte pour savoir si elles leurs sont
destines.
Les donnes envoyes d'un ordinateur vers un
autre sont uniquement reues par destinataire.
Si un autre ordinateur envoie des donnes vers
l'imprimante, elles sont totalement dissocies,
les deux communications peuvent se faire
simultanment.

La bande passante totale est limite la
vitesse du hub. Un hub 100 base-T offre 100
Mbps de bande passante partage entre tous
les PC, quelque soit le nombre de ports
La bande passante est dtermine par le
nombre de ports. i.e. Un Switch 100 Mbps 8
ports peut grer jusqu' 800 Mbps en half
duplex, le double en full duplex.
Pas compatible "half-duplex". Un port 100
Mbps permet juste une liaison a 100 Mbps.
Ils sont compatibles "full-duplex", doublant la
vitesse de chaque port, de 100 Mb/s 200
Mb/s pour un Ethernet 100 Base T.
Le prix par port rseau est quivalent actuellement, les Hub's ne sont pratiquement plus
commercialiss.
5.5. Routeur.
Les hubs et switchs ne grent que les transfert entre quipements dans la mme classe
d'adresse IP d'un mme sous-rseau. Chaque quipement du LAN reoit une adresse unique
de type X.X.X.X, par exemple 192.168.1.1. Les valeurs X varient de 0 255. L'adresse IPV4
est constitue de 32 bits et d'un masque galement cod sur 32 bits. Un routeur analyse les
trames pour rcuprer l'enttes (adresses de destination et de dpart) et permet de transfrer
les donnes entre des rseaux de classes d'adresses diffrentes. Il dtermine galement des
routes (le routage) pour communiquer avec d'autres routeurs qui ne sont pas directement
connects dessus.
Il travaille sur la couche rseau (couche 3 du modle OSI) et dissocie deux rseaux
entre deux en filtrant les informations pour ne transmettre que ce qui est effectivement
destiner au rseau suivant. Les donnes transitant sur le rseau local (pas Internet) restent
l'intrieur du LAN.
Comme les adresses des sites INTERNET sont dans des classes diffrentes de votre
ordinateur en rseau local, la connexion d'un rseau LAN INTERNET utilise
obligatoirement un routeur.
De plus, les routeurs permettent en partie de masquer les ordinateurs du rseau interne
en ne reprenant pour l'extrieur d'un seul quipement. Pour cela, il utilise le NAT (Network
adress translation). Ce mcanisme utilise une table mmoire interne qui mmorise l'adresse de
dpart (l'ordinateur) et l'adresse de destination (typiquement, l'adresse d'un site Internet). Le
site ne revoit le rsultat de la recherche que vers l'adresse externe du routeur. Le NAT va
retransmettre les donnes au vritable destinataire. Le PAT (Port Adresse Translation) permet
de redirectionner les donnes au niveau des ports UDP et TCP/IP.
Les routeurs intgrent parfois un firewall hardware paramtrable et permettent
notamment de bloquer certaines connexions Ethernet au niveau des ports TCP ou UDP. Ils
sont utiliss pour interfacer diffrents groupes de PC (par exemple les dpartements) en
assurant un semblant de scurit. Certains switch manageables peuvent en partie tre utiliser
pour le blocage d'adresses IP dans une mme classe d'adresse. La principale utilisation est le
partage de connexion Internet. D'autres informations sur les mthodes de partage de
connexion Internet sont reprises dans diffrents chapitres du cours INTERNET (par
Windows, routeurs) mais aussi en utilisant des serveurs Windows 2003 - 2008 (cours sur les
systmes d'exploitation).
Les routeurs peuvent galement servir de pont (Bridge en anglais) pour interconnecter
deux rseaux locaux dans des classes d'adresses diffrentes.
Il n'est pas possible de relier directement 2 rseaux en branchant 2 cartes rseaux dans
un PC central, sauf en utilisant un logiciel de liaison proxy (passerelle) de type Wingate ou les
fonctions RRAS (Routing and Remote Access Services) implantes dans Windows serveur
2000 mais surtout en standard en Windows 2003 et 2008..
Un serveur DHCP (Dynamic Host Configuration Protocol) peut tre implant de
manire software (serveurs Windows par exemple) ou dans un routeur. Cette possibilit
permet d'attribuer automatiquement les adresses IP chaque station dans une plage d'adresse
dtermine (dans la mme classe d'adresse).
5.6. Rpteurs
Le rpteur permet de dpasser la longueur maximale de la
norme d'un rseau en amplifiant et en rgnrant le signal lectrique.
Sa principale utilisation actuelle est le passage d'un mdia l'autre
(par exemple de connexion en cuivre vers la fibre optique) ou
d'interconnecter deux cbles en fibre optique en regnrant le signal.
5.7. Passage des adresses IP aux adresses MAC
Nous savons dj que les communications se font par les adresses MAC et pas
directement par les adresses IP.
Pour une communication, le PC metteur vrifie si le PC est dans la mme classe
d'adresse IP. Si c'est le cas, il va envoyer un ARP pour dterminer l'adresse MAC de
destination et envoie directement le packet de donnes et les en-ttes sur le rseau. Les HUBS
laissent le paquet tel quel puisqu'ils sont de simples amplificateurs. Par contre, si le rseau est
reli par des switchs, chaque switch va vrifier l'adresse MAC dans sa table, ventuellement
envoyer un broadcast.
Par contre, si le PC de destination n'est pas dans la mme classe d'adresse, il envoie le
paquet au routeur (dont l'adresse MAC est connue) avec l'adresse IP de destination. Le routeur
va vrifier s'il est connect au sous-rseau (classe IP) de destination. S'il est directement
connect, il envoie les informations au destinataire via un ARP. Dans le cas contraire, il va
envoyer le paquet au routeur suivant, et ainsi de suite.
5.8. Connexion d'un rseau Ethernet.
Par le chapitre sur les diffrentes normes Ethernet, nous savons que:
1. Connecter entre-eux 2 hubs (switch) utilise un cble crois ou utiliser un port crois de
l'quipement (certains modles intgrent un petit interrupteur poussoir sur un port
spcifique). Les switch actuels dtectent automatiquement le croisement
(MDI/MDIX).
2. En Ethernet 10 Base T, plus de quatre Hubs en cascade posent un problme au niveau
des vitesses de connexion.
3. En Ethernet 100 Base T, plus deux HUBS en cascade provoquent galement des
erreurs dans les flux de donnes, les trames se superposent, dpassant la taille du
MTU.
4. Les distances maximales respecter sont de 100 mtres maximum en cuivre. L aussi,
les trames peuvent se superposer en cas de dpassement.
5. Le cblage doit tre stricte: connecteur, proximits des cbles du rseau lectrique, ...
Quels choix pour un rseau local Ethernet? Les dpartements entre-eux doivent tre
relis par des switchs, si possible administrables pour bloquer certaines liaisons. Toute
connexion extrieure (Internet et liaison inter-rseau) ncessite un routeur. Le partage Internet
par Windows est viter pour les entreprises (scurit) et remplac par un routeur incluant le
NAT qui permet masquer les diffrentes adresses du rseau interne et incluent souvent des
firewall hardware mme si en standard ces quipements sont plutt amateurs.

6. Liaisons Internet haute vitesse, haut dbit, ADSL, ATM.
6.1. Introduction - 6.2. Technologies xDSL (ADSL, SDSL, VDSL, ...) - 6.3. DSL symtrique - 6.4. DSL
asymtrique - 6.5. Lignes loues - 6.6. Connexion par satellite - 6.7. Le cble - 6.8 Connexions 3 G et 3
G+ - 6.9. Liaisons ATM
Ce chapitre du cours hardware YBET rseaux et communications traite des liaisons haut dbit pour
la connexion des sites INTERNET et la connexion haute vitesse entre l'utilisateur et INTERNET:
connexion xDSL, ATM, lignes loues, cble de tldistribution, liaison satellite, ... Toutes ces solutions
ncessitent un abonnement spcial chez votre fournisseur d'accs.
6.2. Les technologies DSL
Le DSL regroupent tout ce qui permet de faire passer des flots de donnes haute vitesse sur de
simples lignes tlphoniques torsades. Il existe diffrentes variantes :
HDSL: High bit rate DSL
SDSL: Single pair, ou symmetric DSL
ADSL: Asymmetric DSL
RADSL: Rate adaptative DSL
VDSL: Very high DSL
Les diffrences essentielles entre ces diffrentes technologies sont:
la vitesse de transmission
distance maximale entre l'utilisateur et le point d'accs
variation de dbit (vitesse) entre le flux montant (utilisateur vers le rseau Internet) et flux
descendant (rseau Internet vers l'utilisateur)
Les technologies xDSL sont divises en deux familles, celles utilisant une transmission symtrique et
celle utilisant une connexion asymtrique.
L'ide de dpart est de dcouper une gamme de frquence en canaux. Chaque canal correspond
une frquence distincte. L'metteur / rcepteur utilisent le FDM (signifiant Frequence division
multiplexage) pour envoyer et rceptionner les donnes sur les diffrents canaux. Une zone de
frquence est ddie l'envoi et l'autre la rception. Dans les technologies les plus courantes, la
bande passante est divise en 3 zones: une pour la transmission de la voix (les basses frquences
jusque 4 Khz en sachant que l'oreille humaine adulte va justement jusque ... 20 Khz) et deux zones
pour l'mission et la rception. Sachant , ne vous attendez pas couter en Hifi un morceau de
musique via le tlphone: c'est pas non plus le but.
Voyons comment a se passe:

Les frquences et canaux sont valables pour l'ADSL standard mais le principe est le mme pour
toutes les liaisons DSL. La gamme de frquence est dcoupe en canaux, dans le cas de l'ADSL 1, la
gamme de frquence de 0 1,1 Mhz est dcoupe en 256 canaux not de 0 255. Les premiers
canaux ne sont pas utiliss pour la transmission de donnes. La partie suivante est dcoupe en 17
canaux pour le transfert utilisateur vers la borne de l'oprateur relie Internet (appele DSLAM), la
suivante est utilise pour le transfert DSLAM vers utilisateur et prend 225 canaux. Dans ce cas, le
nombre de canaux "download" est nettement suprieur celui d'upload: le dbit est nettement plus
important. Le petit problme est la dgradation du signal en fonction des parasites sur la ligne (qui
augmentent avec la distance) qui est nettement plus importante mesure qu'on monte en
frquence: plus on s'loigne du point d'accs, plus la vitesse de download diminue.
Dans le cas d'une solution symtrique, le nombre de canaux d'envoi et de rception est le mme,
dans le cas d'une solution asymtrique, le nombre de canaux d'envoi est infrieur celui de
rception.
Pour augmenter les dbits, on a la solution d'augmenter la gamme de frquence mais de fait, la
porte va diminuer, ou plutt, la vitesse va ralentir plus vite mesure que la distance augmente. On
le voit ici avec la comparaison des dbits entre les 3 types d'ADSL. L'adsl et l'adsl2 utilisent la mme
plage de frquence, seule la mthode de transfert a t modifie. Par contre, l'ADSL2+ utilise plus de
canaux avec une plage de frquence qui va jusqu' 2,2 Mhz. Dans tous les cas, le taux de transfert
reste constant pour de petites distances plus diminue trs vite ensuite. A partir de 2,5 KM (10.000
pieds), la vitesse des trois technologies est identiques.
Une autre mthode pour augmenter le dbit est d'utiliser les canaux montants et descendants pour
le transfert DSLAM vers utilisateur (download). Pourtant, en thorie, aucune chance que cette
technique fonctionne puisque deux signaux vont tre prsent sur la plage de frquence basse. En
fait, on va utiliser l'annulation d'cho. Chaque cot en recevant le signal va soustraire ce qu'il envoie
sur ces mmes canaux, permettant le transfert bidirectionnel sur cette plage de frquence.
Et la dernire mthode est de jouer sur le type de modulation - codage des donnes. Celle utilise
pour l'ADSL est le DMT (Discrete Multi Tone) qui permet 8 Mb/s en descendant et 640 Kb/s en
montant.
Ces vitesses sont thoriques et maximum. En effet, elles vont dpendre de l'tat de la ligne
tlphonique plus ou moins bonne mais aussi de la section du fil. A la premire connexion, mais aussi
en cours de transfert, la vitesse va tre vrifie canal par canal, les canaux (frquences) les moins
fiables (gnralement les plus hauts mme si d'autres frquences peuvent tre perturbes) ne seront
pas utilises.
6.3. Solutions symtriques
Une solution xDSL symtrique a la mme vitesse de transfert en download (Internet vers utilisateur)
qu'en upload (utilisateur vers Internet), contrairement aux liaisons asymtriques (Adsl par exemple).
Ceci est primordial pour l'hbergement d'un site au sein de l'entreprise. Les connexions symtriques
sont surtout utilises pour remplacer les lignes loues trop chres.
6.3.1 HDSL et HDSL2 :
L'HDSL date du dbut des annes 90. Elle utilise les lignes loues mais en utilisant pas tous les fils.
Deux versions sont utilises, soit avec 2 paires (vitesse maximale de 1,5 Mb/s), soit 3 paires de fils
(vitesse maximale de 2 Mb/s). Ces vitesses peuvent tre moindre en fonction de la qualit de la ligne.
La distance maximale avec le central est de 4,5 KM.
La version suivante, l'HDSL2, en dcoule mais n'utilise plus qu'une seule paire tlphonique, soit 1,5
Mb/s pour les Etats-Unis et 2 Mb /s pour l'Europe. Seul dfaut, la distance diminue pour ne plus
atteindre que 2500 mtres.
Cette solution ne permet pas de tlphoner en mme temps.
6.3.2. SDSL (Symmetric Digital Subscriber Line):
Comme HDSL, le SDSL utilise les lignes loues mais avec seulement 1 paire de fils avec un dbit
maximum de 2 Mb / s, mme si on peut coupler atteindre les 8 Mb/s en utilisant deux lignes
simultanes et mme 20 Mb/s en utilisant 4 paires tlphoniques. La vitesse varie avec la distance au
central:
< 1Mb/s disponible jusqu 5,6 km
1Mb/s disponible jusqu 5 km
2Mb/s disponibles jusqu 2,3 km
L'utilisation simultan de la connexion Internet avec un appel tlphonique est impossible. Les
modems sont spcifiques suivant le nombre de paires raccordes.
6.3.3. SHDSL:
Le SHDSL (Single-pair High-speed DSL) date de 2002 et rassemble les techniques HDSL (2) et SDSL. La
distance maximum est de 5 kilomtres. Les taux de transfert varient suivant l'abonnement de:
192 Kb / seconde 2,3 Mb sur une paire tlphonique.
384 Kb / seconde 4.6 Mb sur deux paires tlphoniques.
Plutt base sur les lignes tlphoniques que sur les lignes loues, elle permet le transport de
donnes travers les centraux tlphoniques.
Au dpart, le dbit est configur une vitesse fixe suivant l'abonnement. Les premires versions
bloquaient la transmission si la vitesse n'tait pas suffisante. Actuellement, les modems utilisent une
auto dtection et se synchronisent sur la vitesse la plus leve possible autorise.
6.4. Solutions asymtriques: ADSL, RADSL et VDSL
On va parler de diaphonie. Par quelques bases en lectricit, on sait qu'un courant dans un fils
lectrique induit un champ magntique qui ( forte dose) va parasiter les fils adjacents. Hors dans
une installation standard, les fils de connexion Internet vont de tous les utilisateurs pour se
regrouper vers le central. Du coup, les signaux sont nettement plus parasits au niveau du central
qu'au niveau utilisateur. En suivant l'ide, plus un signal est fort, moins il est parasit. Par contre,
plus la vitesse (en fait la frquence du signal) est rapide, plus il a de chance d'tre parasit (mais
surtout l'inverse).
Ben voil l'ide. Le signal envoy par l'utilisateur est plus faible au niveau du central que celui envoy
par le central, on va partager la bande passante asymtriquement, la vitesse utilisateur vers le
central sera plus faible (donc moins parasite malgr un signal plus faible), tandis que la vitesse de
transfert partir du central sera plus leve (moins perturbe par la diaphonie au niveau du central
car plus fort). C'est la base des connexions asymtrique, augmenter la vitesse de transfert dans une
direction au dtriment de l'autre pour une mme bande passante globale. Ca tombe bien,
l'internaute prfre tlcharger plus vite ...
Ces solutions asymtriques ne sont pas utiliser pour l'hbergement d'un site Internet, sauf pour de
petites applications utilisant par exemple DynDNS.
6.4.1. ADSL et ADSL2 (Asymetric Digital Subscriber Line):
L'ADSL utilise trois plages de frquences:
un plage Internet vers utilisateur haut dbit
une plage bi-directionnelle moyen dbit (utilis en upload et en download).
une plage utilise par la tlphonie (voix normales)
Chaque plage numrique est elle-mme divise en petites bandes permettant le transfert de signaux
simultanment dans la mme direction. Le signal global doit tre filtr pour les communications
tlphoniques, comme expliqu dans la partie installation du filtre ADSL.
Deux types de modem - routeur sont utiliss, l'annexe A pour les lignes tlphoniques classiques et
l'annexe B pour les lignes ISDN / RNIS. Ils ne sont pas compatibles entre-eux, les annexe B ncessite
un filtrage global. Deuxime problmes avec ces modems, ils sont souvent fournis avec un
connecteur RJ45 pour le tlphone alors que le connecteur du filtre est de type RJ11 comme pour
une ligne standard mais les connecteurs RJ11 entrent dans un connecteur RJ45.
L'ADSL permet, pour une distance maximale de 5,6 km, des dbits de :
de 1,5 8 Mb / seconde en download
de 16 kb/s 640 kb/s en upload
La distance maximale dpend de la qualit du cble tlphonique. Au del de 5,5 km et jusqu' 6,5
km, la vitesse doit tre rduite 1 Mb/s en download.
Ces vitesses de transfert transforment le rseau public tlphonique existant (limit la voix, au
texte et aux graphismes basse rsolution) en un systme puissant capable de supporter le
multimdia, y compris la vido temps rel. En transmettant des films, des programmes de tlvision,
des donnes de rseaux locaux d'entreprises, et surtout en introduisant l'Internet dans les maisons,
ADSL rend les marchs viables et rentables pour les compagnies de tlphone et les fournisseurs
d'applications.
L'ADSL Lite, normalise en dcembre 1998, fonctionne des dbits infrieurs puisque la vitesse
maximum de download est de 1.5 Mbit/s pour 512 kbit/s pour le transfert ordinateur vers Internet et
n'utilise pas de filtre ADSL. Pourtant elle n'a jamais t rellement commercialise. Les versions Lite
des fournisseurs d'accs sont des connexions ADSL standard brides en vitesse sur le central, les
modems sont donc tout fait compatibles, l'utilisation de filtres dans ce cas est galement
obligatoire.
L'ADSL 2 augmente la vitesse maximum 12 Mb/s en dowload en modifiant la modulation de
frquence, les modems et routeurs restent compatibles.
L'ADSL 2+ permet une vitesse de download jusqu' 24 MB/s avec une limitation de distance. Les
vitesses de ces deux normes sont identiques l'ADSL standard pour des distances suprieures 3
KM. Cette technologie haute vitesse est utilise principalement pour la tlvision numrique. La
vitesse en upload est limite 1 Mb/s (pour 640 Kb/s en standard), avec une distance maximum de 5
KM.
6.4.2. RADSL, Rate Adaptive DSL
En RADSL, le modem adapte la vitesse en fonction de la qualit de la ligne (en upload et en download
indpendamment). Ceci donne un dbit constant ncessaire dans les applications vido et vido-
confrence. C'est une simple variante de l'ADSL quasiment jamais implante, elle utilise les mmes
modulations et les mme caractristiques de vitesses et distances.
6.4.3. ReADSL (Reach Extended ADSL)
Cette technologie est une adaptation de l'ADSL 2. En gros, elle a abaiss le signal de 70 db (ADSL) en
78 db, permettant une distance de connexion suprieure puisqu'elle atteint 8 Km maximum mais au
dtriment de la vitesse qui descend 128 kb en mission et 512 kb en rception, soit des vitesses
comparables l'ADSL Lite. Le Readsl est commercialis en Europe depuis 2005.
6.4.4. VDSL et VDSL2
Ces technologies peuvent travailler en mode asymtrique ou symtrique (jusque 34 Mb/s une
distance maximale de 300 mtre). Dans le mode asymtrique, la vitesse de transfert peut atteindre
52 Mb/s en download et jusqu' 16 Mbs en upload. Seule la version asymtrique est rellement
utilise.
C'est la plus rapide des liaisons DSL. Sur une seule paire tlphonique torsade, elle autorise:
dbit descendant de 13 52 Mb par seconde
dbit ascendants de 1,5 2,3 Mb par seconde
En revanche, la longueur maximale de la connexion est limite 1,5 km pour des vitesses correctes
(5 Km maximum mais avec des dbits nettement rduits).
Le VDSL2 en cours d'instalation dans quasiment toute l'Europe et permet le transfert de la TV haute
dfinition. Elle permet des taux de transferts de 250 Mb/s maximum au central mais avec des
performances nettement rduite avec la distance (plus que 100 Mb par seconde 500 mtres et 50
Mb 1 KM du central en asymtrique. Au de l de 1,6 Km, les vitesses en mode asymtrique sont
identiques celles de l'ADSL 2.
Fin 2012, Belgacom dbute l'implantation de VDSL 2 avec une vitesse de 50 Mb/s: en changeant les
centraux mais aussi en ajoutant des bornes de proximit.
6.2.5. Tableau rcapitulatif des technologies DSL
Abrviation Dfinition Mode
Dbit Internet
-> PC
Dbit PC ->
Internet
Distance
maximum
Nombre
de
paires
HDSL
High data
rate DSL
symtrique
1.544 Mb/s
2.048 Mb/s
1.544 Mb/s
2.048 Mb/s
3,6 km
2 ou 3
suivant
le dbit
souhait
HDSL 2
High data
rate DSL 2
1.544 Mb/s
(USA) - 2 Mb/s
1.544 Mb/s
(USA) - 2 Mb/s
2,5 km 1
(Europe)
SDSL
Single line
DSL
128 Kb/s 2
Mb
768 Kb/s 3,6 km 1
SHDSL
Single-Pair
High-Speed
DSL
- 192 Kb/s
2,3 Mb/s (une
paire),
- 384 Kb/s to
4.6 Mb/s
(deux paires)
- 192 Kb/s
2,3 Mb/s (une
paire),
- 384 Kb/s to
4.6 Mb/s
(deux paires)
5 km
1 ou 2
suivant
le dbit
souhait
ADSL
Asymmetric
DSL
Asymtrique
128 Kb/s 8
Mb/s
16 640 Kb/s
5,4 km (6,5 en
rduisant la
vitesse)
1 ADSL 2 128 12 Mb/s
ADSL 2+ 128 24 Mb/s
16 Kb/s 1
Mb/s
5,4 Km
RADSL
Rate
Adaptive DSL
0.6- 8 Mb/s
128 kb/s-1
Mb/s
5,4 km 1
VDSL
Very high
data DSL
15-53 Mb/s
1.544-2.3
Mb/s
1,3 km 1
ReADSL
Reach
Extended
ADSL
512kb/s 128 kb/s 8 km 1
6.5. Ligne loue
Les lignes loues sont le mode de transfert le plus rapide mais en utilisant un nombre de paires
leves (maintenant remplaces par de la fibre optique). Trois normes distinctes sont utilises
suivant le pays (E pour Europe, T pour Etats-Unis et Japon).
Elles prsentent actuellement le dbit le plus lev mais le nombre de paires est nettement plus
leve (24 paires pour T1 et 32 paires pour E1 par exemple). Ces lignes connectent directement deux
points, sans passage sur des lignes partages d'o une plus grande scurit des transactions. Elles
peuvent galement tre utilise comme lignes tlphoniques via des terminaux tlphoniques
spciaux.
Dans le cas des fournisseurs d'accs europens, les types actuels sont:
E1 (2 Mb par seconde, distance de 50 km maximum)
E2 (8Mb / s)
E3 (34 Mb /s)
E4 (140 Mb /s)
Dans le cas du rseau amricain:
T1 1,544 Mb/s
T2 = 4 X T1 (6,312 Mb/s)
T3 = 7 X ligne T2 (44,736 Mb/s)
Pour le Japon, les deux premiers types sont identiques aux normes amricaines:
T1, identique la version amricaine
T2, identique la version amricaine: 6,312 Mb / seconde
T3 = 5 X T2 (32,064 Mb/s)
T4 = 3 X T3, soit une vitesse de 97,728 Mb/s.
6.6. Connexion INTERNET par satellite
La connexion INTERNET par satellite permet de se connecter quasiment partout, y compris loin
d'installations tlphoniques et mme en dplacement ( condition de repositionner la parabole vers
le satellite chaque fois).
Les premires connexions utilisaient un systme hybride: rception par la parabole, mission par
modem classique. Ceci permet d'utiliser des antennes standards mais n'est pas trs performant.
Les paraboles actuelles intgrent un module d'mission. En envoi, la vitesse varie de 128 kb/s 1024
kb/s pour 512 kb/s 8 Mb/s en rception (avec une limite thorique de 155 Mb/s). Pourtant, le
systme utilise des satellites gostationnaires, soit une distance de 35.786 km de la terre. Lors de
l'mission (ou de la rception), le signal parcourt d'abord cette distance vers le satellite puis est
renvoy vers la base de rception (soit un petit dplacement de plus de 70.000 kilomtres. L'cart
entre l'mission et la rception est de l'ordre de 700 millisecondes (temps de latence), peu pratique
pour le Voice Over Ip ou le jeu en ligne.
Le prix de l'installation est aussi nettement plus chre que les autres mthodes. Suivant les pays, les
abonnements sont finalement quivalents aux autres technologies, du moins pour les faibles
vitesses. En Europe, mieux vaut utiliser le systme 3 G (ou mme le 4G) pour la mobilit.
6.7. Cble TV.
Utilisant le rseau de tldistribution, le cble TV utilise toute la bande de frquence de 10 850
Mhz (sauf certaines utilises par les radio). Une grosse partie est utilise par les tlvisions en
regroupant les TV numriques par 8 avec une plage utilise de 8 Mhz chaque fois et les TV
analogiques qui utilisent elles aussi 8 Mhz mais chaque fois.
Deux plages sont rserves pour la connexion INTERNET:
Une plage montante large de 30 Mhz qui permet des dbits de 128 512 Kb/s
Une plage descendante avec une vitesse de download de 512 12.000 Kb/s, quivalent
l'ADSL2
Par contre, la bande passante Internet est partage entre plusieurs internautes mais avec moins de
connexion sur le central. Les performances sont quasiment identiques celles de l'ADSL2.
6.8. Connexion 3G et 3G+
Le 3G et son volution le 3G+ dcoulent au dpart de la tlphonie pour GSM, c'est leur principale
utilisation, mais permettent de transfrer des vidos lors des conversations tlphoniques ou mme
des donnes. Cette solution permet une vitesse de transfert thorique de 14,4 Mb/s d'une antenne
vers un rcepteur et de 5,8 mb/s dans l'autre sens.
La porte est limite quelques kilomtres. Le rseau belge actuel autorise des vitesses jusque 3,6
Mb/s sur les principales viles et centres industriels. Quelques rgions plus recules utilisent une
vitesse de 160 kb/s ou sont hors de porte. Cette solution peut tre implant sur un PC ordinateur
standard via carte USB ou PCMCIA.
6.8. Liaison ATM.
L'ATM (Asynchronus Transfer Mode) est un standard orient connexion (vrification des donnes
mises) depuis la fin des annes 80 pour le transfert haut dbit. C'est un protocole plus qu'une
connexion matrielle, utilisant des paquets de donnes de taille plus petite et fixe (appeles cellule)
de 5 octets (bytes) d'en-tte et 48 de donnes.
Le Flux est constant et l'utilisation de la bande passante optimale. Les liaisons ATM utilisent le QOS
(Quality Of Service) pour dterminer des priorits sur les messages envoyer. En absence de
donnes prioritaires transmettre, le protocole va intercaler des donnes moins prioritaires. Le
message n'est mis qu'une seule fois, la transmission des donnes tant considre comme sans
erreurs. En pratique, seule des connexions en fibre optique le permettent (mme si ce protocole
peut galement fonctionner sur d'autres supports rseaux en thorie)..
Le routage des cellule (messages) est implant en hardware, la diffrence d'un routage suivant le
protocole IP. Ceci explique que les routeurs ATM sont dsigns par le terme Switch. Ils sont la base
des backbones Internet.

7. Un Serveur rseau informatique.
7.1. Introduction aux serveurs - 7.2. Caractristiques externes - 7.3. Caractristiques internes - 7.4.
Configuration de base d'un serveur - 7.5. Mmoires Ram des serveurs - 7.6. Les ports internes - 7.7.
Les processeurs - 7.8. Les techniques multi-processeurs
L'utilisation d'un rseau local lourd informatique de type Windows 2000 / 2003 / 2008 / 2012, Linux
ou Novell Netware impose l'utilisation d'un ou plusieurs ordinateur(s) central (aux) appel serveur
rseau. Ils peuvent tre de tous types, y compris mainframe. Nous ne voyons ici que les serveurs PC
X86 compatibles, bass sur des processeurs Opteron, Xeon ou itanium. Mme si un serveur
informatique peut-tre un ordinateur standard (petit rseau de PME) et un serveur peut tre utilis
comme PC bureautique de haut de gamme, ces serveurs sont en majorit des ordinateurs spcifiques
reprenant diverses spcificits lies la vitesse, scurit des donnes et des applications installes.
La puissance doit tre suffisante pour l'application. Un serveur ne doit pas fonctionner plus de 10
% de charge en moyenne, sous peine de ralentir les utilisateurs et l'application. Selon l'utilisation, le
nombre d'utilisateur, la fonction du serveur (programme, fichier ou imprimante), la configuration
doit tre choisie en consquence, ni trop grosse (prix), ni trop petite.
Avec l'volution de l'informatique dans l'entreprise, l'ordinateur central et l'installation rseau
devient primordial, le moindre arrt de l'informatique provoque immdiatement l'arrt de l'usine
avec les consquences que l'on peut imaginer. Que cet arrt soit caus par un problme logiciel, une
panne hardware d'un serveur ou d'un concentrateur n'a pas d'importance au dpart. Le rsultat est
le mme pour l'entreprise: perte de production, de donnes, ... Un rseau informatique ne doit pas
s'arrter. S'il a prpar des solutions pour la majorit des causes de pannes, un bon technicien de
maintenance doit "se promener" dans l'usine. Un arrt, surtout s'il dure, se paye cash, autant
minimiser les dures.
7.2. Caractristiques externes
Diffrentes solutions externes peuvent tre utiliss sur les serveurs de haut de gamme:
Protection par cls des boutons d'allumage, reset, accs au lecteur CD et disquette, ... pour
viter des interventions non autorises.
Utilisation de rack 19", ce qui rduit l'encombrement mais permet galement des chemins
d'accs de cbles cachs et fixs, .. Les cbles doivent tre clairement tiquets.
Lame (Blade): carte globale sur laquelle s'enfichent des cartes reprenant un ordinateur
complet, ce qui rduit l'encombrement.
La partie externe est lie au botier et la fixation mcanique et ... aux techniciens, administrateurs
rseaux pour l'aspect cblage: pas de cble installs en vitesse dans les passages. Les salles
informatiques pour serveurs sont gnralement construites avec un faux plancher pour le passage
des cbles. Le systme anti-feux utilisait du halon, un gaz inerte mais toxique pour l'homme, interdit
en 2004 et remplac par l'Inergen, aussi un gaz, constitu de 52% dazote, 40% dargon et 8% de
dioxyde de carbone qui donne le mme effet mais n'est pas toxique. Ces salles sont gnralement
sous temprature contrle de 18.
Le raccordement lectrique passe par un UPS, alimentation ininteruptible (onduleur) qui assure une
autonomie en cas de coupure de courant mais protge galement contre divers problmes lis au
rseau. L'onduleur peut galement teindre proprement le serveur avec un logiciel ddi. Les plus
gros centres utilisent galement de gros groupes lectrognes en cas de panne prolonge ( partir de
5 minutes gnralement). Les concentrateurs (hubs, switch, ...) peuvent galement tre protgs.
7.3. Caractristiques internes
disques durs rapides, si possible multi-sessions: connexions SCSI et SAS pour les plus gros, S-
ATA pour les plus petits. La majorit des serveurs sont vendus par les grossistes et fabricants
SANS disques.
scurit des donnes en cas de "crash disk": ddoublement des disques durs par systmes
RAID
protection en cas de panne d'alimentation lectrique ou de baisse de tension: UPS
scurit des donnes en cas de panne complte du serveur ou perte de fichiers (sauvegarde
quotidienne)
Disques durs, cartes priphriques, alimentations, ... connectables / dconnectables "
chaud" (hot plug) et redondants en option. Ceci signifie que le priphrique peut tre
remplac alors que le PC continue de fonctionner.
Carte graphique intgre et pas de carte audio
Les disques durs sont gnralement de type SCSI ou SAS (ventuellement S-ATA). Gure plus
performants en stations que les disques durs E-IDE, part en temps d'accs, les connexions SCSI sont
plus performantes en multi-read (plusieurs demandes simultanes). Ils peuvent galement tre
redondant (RAID 1): les donnes sont crites sur plusieurs disques simultanment, la lecture ne se
fait que sur un seul. En cas de crash, on continue sur les autres disques. En cas de crash complte
d'un serveur, on peut coupler en permanence 2 serveurs de la mme manire. Tous ces systmes
sont dits RAID.
Ci-contre, l'intrieur d'un vieux modle Compaq base de Pentium 1, carte fille reprenant le
processeur, la mmoire et le chipset. Elle se connecte via un bus spcifique sur la carte mre qui
reprend un contrleur SCSI.
Pour les alimentations, on peut utiliser 2 alimentations redondantes (deddoubles). Chacune peut
alimenter l'ensemble de manire autonome. Pour les cartes internes, le PCI-X 64 autorise de retirer
ou d'insrer une carte sans couper la machine ( chaud) avec un systme d'exploitation compatible
(en pratique, tous les gestionnaires rseaux, par exemple Windows 2003). Le ddoublement d'une
installation informatique garantit la continuit de l'installation en cas de panne d'un composant, cela
s'appelle en informatique la redondance.
Au niveau des priphriques, les bandes de sauvegarde sont toujours le plus souvent employes avec
des vitesses de transfert bases sur le SCSI. D'autres solutions comme les NAS sont galement
utilises.
7.4. Configuration de base d'un serveur.
Par dfinition, un serveur n'est pas une machine ddie aux jeux ou aux traitement graphique: la
carte graphique et le lecteur CD / DVD ne sont pas des composants primordiaux pour les
performances. L'cran n'est pas non plus un modle multimdia de grande taille. C'est gnralement
un 15" qui tourne " vide". L'affichage et le lecteur CD sont rarement utiliss: installation, panne
critique, ... Selon le systme d'exploitation, le serveur peut (ou doit) tre configur via une station.
La mmoire doit tre suffisante (limite 4 GB maximum pour les systmes d'exploitation 32 bits),
les disques de capacits doubles, voire triples par rapport la capacit maximum effective que vous
utiliserez sur cette machine.
7.5. Mmoire serveur.
Par rapport aux mmoires traditionnelles, les barrettes de RAM des serveurs utilisent les mmes
technologies (DDR par exemple) mais avec des corrections d'erreur. Les serveurs actuels utilisent des
RAM ECC (Error Checking and Correcting ou Error Correction Code) qui utilisent plusieurs bits de
contrle de parit pour vrifier les donnes. Elles sont en plus auto-correctives. Une ECC dtecte 4
erreurs et corrige une sans arrter le systme. Les mmoires Ram AECC (Advanced Error Correcting
Code) peuvent dtecter et corriger 4 erreurs mais sont trs rarement utilises.
7.6. Bus internes.
Dans un PC traditionnel, les ports sont PCI 32 bits, AGP et PCI-Express.
Premire limitation, ils ne sont pas dconnectables chaud (Hot plug): pour remplacer ou installer
une carte, il faut teindre l'ordinateur. Ca ne pose pas de problme pour les petits serveurs sans
redondance puisque l'application ne peut pas fonctionner. Pour les serveurs de haut de gamme, les
cartes principales (rseaux par exemple) sont redondantes. En cas de panne, la fonction continue sur
une deuxime quivalente. Le Hot Plug permet la rparation sans arrts.
Deuxime limitation, le taux de transfert maximum sur un bus PCI est limit 132 MB/s sur
l'ensemble des connecteurs. Prenons une carte rseau Giga Ethernet (1000 Gb/s). Divisons par 10,
une valeur moyenne pour le taux de transfert en octets, a donne dj 100 MB/s rien que pour une
seule carte. La connexion des disques durs sur le mme port est finalement impossible, un SCSI 160
va lui tout seul utiliser ... 160 MB/s, soit plus que le bus ne peut transfrer. Ce bus est utilis pour
les cartes rseaux en fibre optique (2 canaux pour le bidirectionnel), Giga Ethernet sur cuivre (jusque
4 canaux sur la mme carte), et version SCSI 160 et 320.
Dvelopp conjointement par les principaux fabricants de serveurs rseaux (IBM, Compac, HP et
Intel), ces ordinateurs utilisent des bus PCI-X sur 32 ou 64 bits. C'est une volution du PCI standard
mais avec des vitesses d'horloge allant de 66 533 Mhz suivant les versions en 32 ou 64 bits (33 Mhz
32 bit pour la version standard).
La version PCI-X 1.0 (1999) est dveloppe en 6 versions.
Frquence du bus PCI-X
1.0
Tension
largeur du bus de
donnes
bande passante
66 Mhz
3,3 V
3,3 V
32 bits 264 MB/s
64 bits 528 MB/s
100 Mhz 3,3 V
32 bits 400 MB/s
64 bits 800 MB/s
133 Mhz 3,3 V
32 bits 532 MB/s
64 bits 1064 Mb/s
La version PCX-2.0, sortie en 2002, peut galement tre alimente en 1,5 V suivant les versions.
Frquence du bus Tension
largeur du bus de
donnes
bande passante
66 Mhz 3,3 V
32 bits 264 MB/s
64 bits 528 MB/s
100 Mhz 3,3 V
32 bits 400 MB/s
64 bits 800 MB/s
133 Mhz 3,3 V
32 bits 532 MB/s
64 bits 1064 MB/s
266 Mhz 3,3 V / 1,5 V
32 bits 1064 MB/s
64 bits 2128 MB/s
533 Mhz 3,3 V / 1,5 V
32 bits 2128 MB/s
64 bits 4256 MB/s
Les cartes PCI-X 32 bits peuvent tre insres dans un bus 64 bits (forcment pas l'inverse). Les bus
PCI-X sont directement connects sur le Northbridge du chipset, ce qui ncessite des cartes mres
(chipset) spcifiques.
Les ports PCI-X vont jusqu' 533 MHz. Ceci nous donne un taux de transfert de 533 * 8 (64 bits) =
4256 MB/s pour l'ensemble du bus. Gnralement, un serveur accepte galement 1 ou 2 port PCI 32
bits pour des cartes standards.
Avec les ports PCI-X, nous retrouvons les caractristiques attendues: rapidit et Hot plug (si le pilote
de la carte le permet). Une dernire prcision, ces cartes et l'implantation de ces bus sont chres et
complexes. Chaque serveur n'inclue pas d'office un PCI-X 533 Mhz (la majorit n'en implantent
mme plus depuis l'arrive du PCI-E 2.0). Il existe des cartes 33, 66, 100 et 133 Mhz. En plus, les
gros serveurs n'incluent pas un, mais 2 ou trois ports PCI-X spars. Ceci permet galement de
supprimer les goulots.
7.7. Microprocesseur serveur.
Pour les caractristiques effectives des processeurs ddis aux serveurs rseaux, vous pouvez vous
rfrer la page microprocesseur serveur ou aux Dual Core. Cette partie ne reprend que les cas
gnraux.
7.7.1. Introduction
Le processeur d'un serveur n'est pas d'office une bte de comptition. Sauf pour les serveurs de
programmes, les processeurs sont gnralement "faibles". Un serveur de Web peut utiliser un
Pentium IV ou mme un CELERON. Par contre, pour les serveurs d'application, les fabricants de
processeurs utilisent deux solutions: processeurs spcialiss et multiprocesseurs. Les deux sont en
partie lis.
Les processeurs actuels sont soit 32 bits (Intel Core Duo), soit 64 bits (Itanium), soit acceptent les
deux modes de fonctionnement (Xeon, Athlon 64 et Opteron). Pour augmenter les performances, les
processeurs 64 bits utilisent des jeux d'instruction diffrents. L'Itanium D'intel, full 64 bits,
n'acceptent que des systmes d'exploitation 64 bits spcifique acceptant l'assembleur IA-64. Ce sont
les versions Data Center de Windows 2003 et 2008. Les processeurs 64 bits d'AMD et le XEON sont
compatibles 32 et 64 bits suivant le systme d'exploitation utilis. Les registres internes ont t
allongs pour augmenter l'adressage mmoire maximum, quelques instructions spcifiques sont
galement utilises.
Une dernire chose, l'utilisation en bi-processeur ou plus ncessite un systme d'exploitation rseau
spcifique. Windows NT, 2000 et XP Pro acceptent deux processeurs. Seuls des versions spcifiques
des systmes d'exploitation ddis acceptent un nombre suprieur. Novell oblige une option
supplmentaire. UNIX - Linux est nativement multi-processeurs, si la fonction est implante en
fonction de la carte mre / OS. Les versions "home" des systmes d'exploitation Microsoft ne grent
pas le multi-processeur. Pour utiliser deux (ou plus) processeurs simultanment (avec une carte mre
qui l'accepte), les processeurs doivent tre de mme type et mme frquence et (en pratique) de
mme srie de fabrication: une limitation de taille pour des upgrades.
7.7.2. INTEL
Le processeur ddi serveur d'Intel est le XEON 32/64 bits. Par rapport aux Intel Dual-Core ou mme
I7, INTEL insre gnralement des caches L1 et L2 plus importants. Le socket et les chipsets sont
diffrents.
Les Itanium et Itanium II sont full 64 bits et ncessitent des systmes d'exploitation spcifiques.
Une dernire remarque, avec les Pentium IV 3.06 Ghz, INTEL inclue dsormais, lhypertreading (pas
sur les Intel Core mais rintroduit avec les I7). Cette technique permet dmuler deux processeurs
logiciels dans un seul processeur. Lavantage est li la vitesse mme si les diffrents tests sont assez
mitigs, notamment parce que lapplication doit tre ddie ce processus dans le cas de stations de
travail. Par contre, cette fonction est largement implante dans les ITANIUM et XEON.
L'arrive des processeurs Dual-core en 2005 et des premiers Xeon quadri-core en novembre 2006 et
mme 6 coeurs en octobre 2007 modifie encore un peu la donne, surtout que les Xeon grent
directement les bus PCI-E (comme les I7).
7.7.3. AMD
Depuis septembre 2001, AMD fabrique des Athlon capables de travailler en bi-processeurs (Athlon
MP), avec un chipset lui aussi spcifique. L'opteron utilise la mme architecture interne que les
Athlon 64 mais permet de connecter jusqu' 8 processeurs
simultanment.
L'Opteron, sorti en avril 2003, est la version serveur station
informatique de haute gamme. La diffrence par rapport aux
Athlon bureautiques est li au nombre de bus hypertransport que
ces processeurs sont capables de grer (1, 2 ou 3). La srie 100
utilise un bus et n'est pas multi-processeur. Les versions 2 bus
(srie 200) acceptent le bi-processeur, les versions 3 bus (srie
300) permettent nativement jusque 4 processeurs simultans,
jusque 8 avec un circuit spcifique. Les chipsets actuels acceptent les bus PCI-X, PCI-Express ou l'AGP
directement sur le northbridge (ces processeurs grent directement la mmoire, sans passer par le
chipset)..
D'abord dvelopp avec un socket spcifique de type 940, certaines versions utilisent l'AM2 (comme
les versions bureautiques). Les multi-processeurs prvus pour fin 2008 utiliseront un nouveau socket,
le type F.
7.8. Les techniques multiprocesseurs.
Distinguons d'abord le Dual-core du multiprocesseur. Dans le premier cas, deux processeurs sont
insrs dans le mme botier. Dans le deuxime cas, deux processeurs distincts (ou plus) sont insrs
sur la mme carte mre. Dans ce cas, les processeurs peuvent galement tre Dual-core ou plus.
C'est la deuxime mthode qui nous intresse. Travailler avec plusieurs processeurs simultanment
(dans la mme machine) ncessite forcment une carte mre compatible. Le principe doit permettre
de partager la mmoire, les accs disques et en rgle gnrale tous les bus internes.
L'utilisation de 2 processeurs simultanment est un peu plus rapide par rapport un dual-coeur
(quelques %), mais les prix sont nettement plus chres.
Deux techniques sont utilises: le SMP bus commut (Symetric multiprocessing) et le multi-
processing Numa. La diffrence entre les deux se rduit avec l'volution, les fabricants commencent
mlanger les deux.
Le SMP est surtout utilis dans un serveur pour un petit nombre de processeurs, le Numa s'adapte
mieux un grand nombre de processeurs.
7.8.1. SMP, type UMA (Uniform Memory Access)
L'architecture SMP consiste utiliser plusieurs processeurs partageant la mme mmoire et les
mmes priphriques internes. Un seul systme d'exploitation fait tourner l'ensembles des
processeurs. Un bus commun partag permet les accs la mmoire et aux priphriques.

Architecture SMP type UMA
Le bus systme est le point faible du SMP puisqu'il est utilis conjointement par tous les processeurs,
mme en augmentant la frquence de l'horloge. L'augmentation de la mmoire cache permet en
partie de limiter son utilisation.
Pour concevoir des plates-formes volutives (ajout de processeurs selon les besoins), les fabricants
de processeurs et serveurs rseaux ont travaill sur des architectures bus commuts, crant des
infrastructures d'interconnexion dont la bande passante peut tre augmente par paliers, grce
des commutateurs supplmentaires. Les composants lmentaires sont des cartes filles bi ou quadri
processeurs insres dans des connecteurs sur une carte centrale de fond. Sun a utilis cette
technique le premier avec un ordinateur utilisant 64 microprocesseurs simultanment. La carte
accueillant les cartes filles permet un dbit de 12,8 GB/s et permet d'enficher jusque 16 cartes
quadri-processeurs. Chaque ajout de cartes quadri-processeur voit l'ouverture de canaux
d'interconnexion supplmentaire et donc une augmentation de la bande passante. Dans le systme
SUN, la mmoire est localise sur chaque carte fille. Elle apparat donc comme rserve par carte
quadri-processeurs. En fait, tous les accs mmoire se font par le bus central, sur la mme carte fille
comme sur une autre. Par ce principe, la technique SUN ressemble une technique SMP. D'autres
constructeurs utilisent des techniques quivalentes.
7.8.2. Multi-processeurs Numa (No Uniform memory access)

Architecture NUMA
La technologie NUMA permet de regrouper des groupes de processeurs avec leur propre mmoire
ddie et de les relier entre-eux par des bus capable de dlivrer plusieurs giga bytes par seconde.
L'accs la mmoire n'est pas uniforme, un processeur n'accdera pas la mme vitesse sa
mmoire locale qu' celle ddie un autre processeur. Cette diffrence de dlais diminue,
regroupant ainsi les architectures UMA et NUMA. La mmoire est partage par l'ensemble des
processeurs. Ceci implique que le systme NUMA exploite une gestion des cohrences de la mmoire
cache capable de prendre en compte l'ensemble des processeurs attachs la plate-forme.
Le multi-processeur n'est pas uniquement lie la mthode utilise pour grer les bus de connexions
mais surtout la mthode pour optimaliser les transferts mmoire - processeurs.
Une dernire remarque, et de taille, en architecture NUMA, chaque processeur utilise son propre
systme d'exploitation, alors que dans le cas SMP, un seul systme d'exploitation tourne pour
l'ensemble des processeurs du serveur. Ceci ddie donc NUMA pour des systmes multi-
processeurs UNIX ou propritaires et SMP pour le monde des serveurs INTEL - Windows, mme si
l'Opteron utilise le NUMA de par son architecture interne reprenant le contrleur mmoire.


8. Disque dur SCSI, technologie RAID
8.1. Introduction - 8.2. Technologie SCSI - 8.3 Connexion de priphriques SCSI - 8.4. SAS (Serial
SSCI) - 8.5. RAID (Redundant Array of Independant Disk)- 8.6. Raid Hardware et software - 8.7.
Solutions RAID hardware
Les donnes (et son support principal, le disque dur) sont primordiales dans toute application
informatique. Dans le cas d'un serveur rseau, deux directions sont utilises pour augmenter la
vitesse et garantir la fiabilit en cas de panne d'un disque dur: l'utilisation de solutions SCSI pour le
stockage (plus performantes) et l'implantation du RAID. Les deux sont gnralement implants en
mme temps.
8.2. Technologie SCSI.
En premire anne, nous n'avons vus que le disque dur IDE et SATA. Cette anne, avec les serveurs,
nous nous intresserons aux disques durs et priphriques de type SCSI (Small Computer System
Interface). Par rapport aux priphriques IDE, elles ont plusieurs avantages.
1. Le nombre de priphriques connects sur la mme nappe est suprieur: jusque 15.
L'adresse se fait par pontage ou slecteur rotatif
2. multi-session. En clair, le disque peut excuter plusieurs applications en mme temps (ou
presque) et l'criture (ou la lecture) d'un fichier ne doit pas attendre la fin de l'opration
prcdente. Ceci est le cas par exemple lorsque l'on crit un gros fichier sur le disque dur, la
lecture suivante ne doit pas attendre pour dmarrer. SCSI est capable de grer
simultanment plusieurs requtes de lecture /criture en parallle (jusque 255), l'IDE qui ne
peut effectuer qu'une opration (compltement) la fois. Ceci ne fonctionne qu'avec un
systme d'exploitation compatible (Win 2000 ou XP Pro, Vista et Seven Pro (+ les versions
serveurs), Novell), l'exclusion des versions home et familiales de XP, Vista ou Seven.
3. Les connexions SCSI peuvent tre internes ou externes, les connecteurs actuels sont
d'ailleurs les mmes. Le transfert de donnes entre deux priphriques se fait directement
par DMA.
4. Ce mode de connexion inclut automatiquement un contrle d'erreur.
Tout ceci explique que les vitesses te transfert soient plus leves qu'en IDE (mme taux de
transfert thorique quivalent), avec des prix qui varient en mme temps.
Les normes ont volu, mais on rencontre encore quasiment toutes. NARROW se rfre un bus 8
bits, WIDE se rfre un bus 16 bits.
Normes SCSI
Taux
transfert
MB/s
maximum
Largeur bus
(en bits)
Longueur maximum cble SCSI
Nombre
conducteurs
Nb. max. connexion
(non compris la carte
contrleur) SE LVD HVD
ARROW SCSI 1 5 8 6 m - - 25 7
FAST NARROW
SCSI
10 8 3 m - - 50 7
Fast Wide SCSI
SCSI 2
20 16 3 m 12 m 25 m 68 ou 80 15
Ultra SCSI Narrow 20 8 3 m - - 50 3
Ultra SCSI Narrow 20 8 1,5 m - - 50 7
Wide Ultra SCSI 3 40 16 bits 3 m - - 68 ou 80 3
Wide Ultra SCSI 40 16 bits 1,50 - - 68 ou 80 7
Wide Ultra SCSI
SCSI 3
DIFFERENTIEL
40 16 bits - 12 m 25 m 68 ou 80 15
Ultra 2 SCSI
(Narrow)
40 8 bits 6 m - - 50 7
Wide
Ultra 2 SCSI
80 16 bits - 12 m 25 m 68 ou 80 15
Wide Ultra 160
Ultra 3 SCSI ou
SCSI 5
160 16 bits - 12 m - 68 ou 80 15
Wide Ultra 320
SCSI
320 16 bits - 12 m - 68 ou 80 15
Par comparaison
E-IDE ATA 133 133 16 bits -
80 fils
(connecteur
40)
2
Le taux de transfert, la longueur des cordons, le nombre de fils et de priphriques diffrent selon la
norme.
Ce qu'il est important de connatre pour commander un cordon ou un terminateur :
1. Le nombre de fils et le modle des connecteurs.
2. La norme SE, LVD ou HVD.
Tous les autres renseignements sont superflus sur le plan des connecteurs.
SCSI 1 (NARROW SCSI): Il est cod sur 8 bits seulement
SCSI 2 (WIDE SCSI) : Cod sur 16 bits il autorise un taux de transfert jusqu' 20 MB/s

Carte SCSI 2 Adaptec AH 3940. Cette carte est
identique une 2940 mais possde 2 canaux
internes distincts (RAID)
Connecteur SCSI2 interne
SCSI 3 (ULTRAWIDE SCSI) : permet des taux de transfert de 40 MB/s
SCSI 3 DIFFERENTIEL : utilise du cble de trs bonne qualit appair, le signal est transfr en
deux signal par paire (+ et invers). Deux types de chanes diffrentielles sont utilises:
le HVD (High Voltage Differential) qui utilise une tension de 5 volts permet datteindre des
longueurs de 25 mtres pour seulement 6 mtres en UltraWide.
le LVD (Low Voltage Differential) qui utilise une tension de 3,3 volts accepte des longueurs
de cbles entre priphriques jusqu' 12 m. avec des nappes, cordons, terminateurs internes
comme externes spcifiques.
Le connecteur est spcifique chacune des 3 normes Ultra Wide, HVD et LVD:l'impdance des
cordons et les nappes internes sont galement diffrentes. Les rsistances de terminaison aussi sont
diffrentes. Le mlange des cordons et terminateurs sont dconseills (principalement en HVD). Par
contre, la norme LVD accepte la connexion de priphriques non LVD sur la carte contrleur mais
aussi de connecter des priphriques LVD sur une carte contrleur non LVD mais avec un dbit plus
faible.
L'Ultra 2 SCSI LVD est une extension du SCSI 3. De nouveau, cette norme utilise deux fils pour
transmettre le signal en diffrentiel Cette mthode est galement utilise en liaison Ethernet (entre
autre). Les cordons LVD doivent de haute qualit et la bonne impdance. La vitesse maximum
thorique est de 80 MB/s.
La norme Ultra 3 SCSI ou Ultra 160/m ou SCSI 5 (SCSI PARALLEL INTERFACE SPI-3):
LUltra 160/m est une implantation spcifique de la norme Ultra 3 SCSI et ne retient que 3
caractristiques:
1. Taux de transfert de 160 MB/s au lieu de 80 par rapport lUltra 2 SCSI.
2. Au dmarrage, test du bus par le contrleur qui permet de dterminer la vitesse de transfert
en fonction des diffrents priphriques connects sur la chane. Ici aussi, la qualit des
cordons et terminateurs est dterminante pour les vitesses de transferts.
3. Contrle de redondance cyclique (CRC) pour le contrle derreurs de transmission. Le
"160/m" indique que la norme est manageable - administrable (test physique et CRC).
LUltra 3 SCSI est uniquement LVD et utilise les mmes connecteurs, cordons et rsistances de
terminaisons que l'Ultra 2 mais de meilleure qualit pour permettre une vitesse suprieure.
Manageable, l'Ultra 160/m permet la gestion de priphriques de vitesse infrieures mlangs, par
exemple des priphriques 80 MB/s pour lUltra 2 SCSI et 160 MB/s pour le 160/m, le bus adaptant
sa vitesse en fonction du priphrique de transfert. Un contrleur Ultra 2 SCSI accepte galement un
mlange de priphriques des deux normes mais la transmission est uniquement de 80 MB/s. Ces
deux normes sont donc compatibles.
La norme Ultra 320 SCSI (SCSI PARALLEL INTERFACE SPI-4) :
Gardant les spcifications de l'Ultra 160/m, elle permet en plus:
Transfert dunits dinformation et plus d'un bloc une vitesse de 320 MB/s
Meilleur gestion des temps d'inertie en multiplexant les tches dentres/sorties,
notamment au niveau du BUS FREE (libre). Cette mthode exploite mieux les canaux
disponibles et simplifie les transferts.
Le signal est rectifi par rapport au signal dhorloge en compensant les diffrence de dlais
de transmission sur les diffrents fils de la nappe (skew compensation).
DB 25
Centronix 50 mle externe (plus de pin que le connecteur centronix imprimante standard)


SUB 50 mle

Connecteur DB68HD
8.3. Connexion de priphriques SCSI
Les types de priphriques qui sont connects en SCSI sont
Disque dur (interne ou externe)
Sauvegarde sur bandes (DAT, DLT, ...) en interne ou externe
Scanner (externe)
Le choix du numro de priphrique se fait soit par pontage, soit par un slecteur rotatif. L'adresse
doit tre unique sur un mme cble ou plutt sur un mme contrleur. En effet, les priphriques
internes et externes partagent gnralement le mme contrleur.
La fin de la liaison des priphriques externes doit se terminer par une rsistance de terminaison
spcifique au type de connexion SCSI. En effet, pour les priphriques externes, la connexion est
chanes. On dbute du contrleur vers le priphrique. Le cble suivant passe du priphrique au
priphrique suivant. Dans certains priphriques, la terminaison est inclue dans le priphriques
(pontage insrer pour l'activer).
Les cbles standards internes reprennent gnralement seulement 3 connecteurs mais des modles
reprenant plus de priphriques se trouvent dans le commerce.
Gnralement, on ne mlange pas les priphriques SCSI de diffrents types, nanmoins des
terminaisons spciales permettent de chaner des priphriques NARROW (50 pin) avec des ULTRA
WIDE (68 pin), tant en interne qu'en externe.
8.4. SAS (SERIAL SCSI)
Cette solution d'interface de disque dur et
priphriques de sauvegarde rseau date de 2004.
C'est l'implantation d'une connexion srie pour les
disques durs SCSI. Premire chose, un contrleur
SAS peut grer des priphriques SAS et SATA via
le connecteur ci contre. En revanche, un
contrleur SATA implant dans les ordinateurs
standards ne peut pas utiliser de priphriques
SAS puisqu'ils ne grent pas le protocole SCSI (les
connecteurs sont aussi diffrents.
De nouveau, on retrouve les caractristiques SCSI avec
des possibilits de connexions internes et externes et
des possibilits de contrle suprieures. Ca s'arrte l
puisque le nouveau standard ne relie plus jusque 15
priphriques sur la mme nappe mais bien une
nappe par priphrique. Avec une transmission srie,
le nombre de fils a aussi diminu mais quelques
surprises puisque les contrleurs permettent de
dbuter avec 1 cble 4 canaux pour connecter 2, 4 ou
plus disques durs. Certains disques acceptent
galement d'tre commands par deux contrleurs simultanment (mais ce n'est pas le plus courant)
via des cartes additionnelles installes dans des rack et via un numro SID (comme pour les anciens
SCSI). La majorit de ces disques sont livrs dans des racks permettant de les dconnecter
directement d'une armoire. En effet, comme pour les SATA, ils sont hot-plug (dconnectables
chaud).
La vitesse de transfert est de 300 MB/s
actuellement (comme le SATA) mais pourrait
sembler infrieure celle des Ultra SCSI (320
MB/s), pourtant, dans cette technologie, la bande
passante est rserve un seul priphrique et
non plus un groupe (15 maximum pour les
anciens standards). Elles devraient suivre les
volutions du SATA pour passer 600 MB/s
(mme si les disques durs ne suivent pas ces
vitesses de transfert. De nouveau, les vitesses de rotations sont quivalentes celles des
quipements professionnels puisqu'elles varient de 10.000 15.000 tours par minutes (contre 5400
pour les PC portables de bas de gamme en 2,5" et 7200 en standards pour les disques durs utiliss
dans les tours standards). En externe, la longueur du cble est de 5 mtres, 2 mtres en interne. La
dernire norme en cours de finalisation permet des transferts 600 Mb/s mais augmente aussi la
distance (jusqu' 20 mtres avec des fils de cuivre mais aussi 100 mtres en fibre optique).
D'autres quipements acceptent galement cette interface comme les sauvegardes sur bande,
remplaant les anciennes interfaces.
8.5. RAID (Redundant Array of Independant Disk).
Le RAID permet de regrouper plusieurs de disques durs de mme type ensemble. En cas de panne
d'un disque, Le RAID (sauf le 0) permet de reconstruire les donnes en utilisant les informations des
autres disques. La solution peut tre hardware ou software, ventuellement un mlange des deux.
Le RAID utilise un contrleur de disque dur particulier et un systme d'exploitation compatible (ce
qui en pratique est le cas via un pilote pour tous les systmes d'exploitation actuels). Cette technique
est majoritairement implante en SATA sur les cartes mres actuelles mais avec des contrleurs
spcifiques pour le SCSI et SAS. Les systmes d'exploitation rseau grent galement un RAID logiciel
qui utilise le processeur pour simuler le Raid, donc plus lent.
Avant de dbuter, le RAID n'est pas une sauvegarde de donnes, c'est ( part le 1) une scurit si un
disque dur tombe subitement en panne.
8.5.1. RAID 0 (striping)
Le RAID 0 couple deux disques durs (ou plus) en ligne le schma ci-dessous e reprend 4, mais ce n'est
pas la solution la plus courante. Les donnes sont dcoupes la suite les unes des autres pour tre
inscrite sur les disques la suite des autres sont crites. L'avantage est le taux de transfert amlior.
Par contre, la panne d'un seul disque dur entrane la pertes de toutes les donnes
Le transfert est rparti sur tous les disques, ce qui permet d'additionner les dbits de chacun. Chaque
accs en lecture ou en criture s'effectue en parallle. Cette solution est aussi utilise pour les
mmoires Ram en Dual Chanel
La capacit globale est gale la somme de celles de tous les disques durs (la capacit de chacun doit
tre gale).

8.5.2. RAID 1 (Mirroring)
En criture, les donnes sont copies intgralement sur deux disques durs. Les donnes sont donc
parfaitement identiques. En lecture, seul un disque est utilis. C'est la mthode la plus scurise amis
au prix d'une perte de capacit de stockage. Il correspond au Mode logiciel "Miroir" de Windows
2000/2003/2008 Server.

Ecriture Lecture

8.5.3. RAID 2
RAID 2 repose sur une grappe avec plusieurs disques de parit et une synchronisation des accs.
Cette technologie complexe est peu utilise. C'est finalement un RAID 0 avec un contrle des
donnes intgr (technique ECC) sur des disques durs supplmentaires (gnralement trois disques
de contrle pour quatre disques de donnes). Cette technologie n'as pas t rellement
commercialise.

8.5.4. RAID 3
Le RAID 3 est identique un RAID 0 mais avec un disque qui sauve la parit. En cas de panne du
disque de parit, l'ensemble est strictement un mode 0. Par contre, en cas de panne d'un autre
disque, les donnes sont reconstruites, le disque parit reprenant la place du dfectueux.
Dsavantage, le disque de parit est deux fois plus sollicit que les autres.

8.5.5. Le RAID 4
RAID 4 est similaire au RAID 3 mais gre la parit diffremment, par blocs de donnes. De nouveau,
c'est le disque de partit qui travaille le plus.

En criture, les donnes sont dcoupes en petits blocs et rpartis sur les diffrents disques de
donnes. Simultanment, le contrle de parit est inscrit sur le disque spcifiques
Ecriture Lecture :

Avantages : Inconvnients :
Bonne tolrance de panne.
Rapport capacit/ performance/ prix
intressant.
En lecture, les performances sont
similaires au RAID 0
Dgradation des performances lors de la
mise jour des donnes de parit, qui est
moindre en Raid 5
8.5.6. Le RAID 5
RAID 5 est similaire au RAID 4, sauf que la parit est distribu sur l'ensemble des disques, supprimant
ainsi la perte de performante lie l'criture continuelle sur un mme disque dur. Ce mode est
quivalent l'agrgat par bandes avec parit sous Windows 2000 ou 2003 Server. Lors d'un change
chaud (hot plug) ou d'une panne d'un disque dur, les donnes sont recres partir des autres
disques durs.

Avantages: Inconvnients:
o Bonne tolrance aux erreurs
o Enormment d'implantations
commerciales
o Hot-spare
o Hot-plug
o 3 disques au minimum
o En cas de problme, remise en ordre
assez lente
o En cas de panne d'un disque dur, on
revient en mode 0.
Applications:
Les applications qui utilisent des donnes alatoirement sur de petits disques, les bases de
donnes par exemple
Le RAID 5, la solution idale? Oui et non. D'abord, si un disque dur tombe en panne, le systme va
reconstruire les donnes mais ce n'est pas immdiat. Il va commencer par les parties demandes via
le rseau ou l'ordinateur. Ceci va fortement rduire les performances du serveur pour les utilisateurs
puis le serveur va durant son "temps libre" reconstruire le reste des donnes. Ca peut prendre
suivant les capacits de disques durs et les performances du processeur des heures. De toute faon,
la perte d'un disque dur entrane automatiquement le systme en MODE 0. Pensez changer le
disque dfectueux le plus tt possible.
8.5.7. Orthogonal RAID 5
L'Orthogonal RAID 5, dvelopp par IBM, est similaire au prcdant mais utilise un contrleur par
disque. Il est gnralement assimil au RAID 5.
8.5.8. Les autres RAID
Les autres systme RAID ne sont que des volutions du RAID 5 et sont peu utiliss: cots levs et
difficile implanter:
RAID 6 utilise une double parit. Ce systme accepte deux disques durs en panne, mais avec
des performances moindres.
RAID 7 (dpos par Storage Computer Corporation) utilise plusieurs disques durs pour les
donnes coupls avec 1 ou plusieurs disques de parit. Dans ce mode, c'est un
microcontrleur qui effectue les calculs de parit et la rpartition des donnes. L'volution
des performances est de 50 % par rapport au 5.
RAID 10 intgre le striping (RAID 0) avec le Mirroring (RAID 1), en gros la vitesse du Raid 0
avec la scurit du Raid 1.
8.6. RAID hardware et software.
Les systmes d'exploitation "professionnels" de Microsoft grent le RAID logiciel: Windows NT, 2000,
2003 et 2008 en version serveur grent le RAID 0, 1, 5
Netware gre en mode natif le RAID 1
Linux gre les RAID 0, 1, 4 et 5
Les sries "amateurs" (DOS, WIN95/98/Me et XP Home) ne grent pas le RAID.
Cette mthode permet au systme d'exploitation de grer le RAID sans contrleur ddi, mais la
partition d'installation de OS est d'office seule (pas couple), ce qui fait perdre de l'espace mais
oblige en plus travailler avec des partitions.
8.7. Solutions RAID hardware.
Diverses cartes sont proposes sur le march de solutions RAID pour disques durs SCSI et SAS
(notamment ADAPTEC). Actuellement les cartes mres standards incluent directement des solutions
RAID en IDE ou S-ATA. Cette dernire possibilit permet d'installer les RAID 0 et RAID 1,
ventuellement du 5.

9. Sauvegarde sur bande et stockage rseau

1. Types de lecteurs de bande magntique - 2. Sauvegarde DAT - 3. AIT et SAIT - 4. Cartouches 8 mm
- 5. DLT - 6. S-DLT - 7. LTO et Ultrinium - 8. Librairies de bandes - 9. REV Iomega - 10. Sauvegarde sur
disque dur (NAS - SAN et iSCSI) - 11. Cloud computing - 12. Stratgie de backup

Aprs avoir tudi en premire les mthodes de sauvegarde standard, voyons les mthodes de
sauvegarde des donnes (backup) des serveurs informatiques. Pas utiliss pour les PC personnels, les
lecteurs de bande sont la principale mthode de sauvegarde des serveurs informatiques. Les
technologies permettent des vitesses de transfert jusqu' 540 MB/s (LTO) avec des capacits
dpassant plusieurs Tetra (1000 GB).

Les disques durs serveurs en RAID donnent un semblant de sauvegarde, ou plutt un faux sentiment
de scurit: les donnes en cas d'un crash de disque disque peuvent tre rcuprs sous certaines
conditions (RAID 1, RAID 5) mais pas en cas de corruptions de donnes, effacement de fichiers
accidentel (ou non), .... Si la scurit des donne est importante sur une station professionnelle, le
problme est nettement plus important dans le cas de serveurs rseaux. Premirement, les
utilisateurs font entire confiance au rseau (et surtout son administrateur) pour les donnes: les
sauvegardes sont normalement quotidiennes sur les serveurs. Deuximement, les applications
rseaux sont souvent trop grosses pour tre sauvegardes individuellement (place, droits d'accs et
privilges, ...)

Les utilisateurs doivent se dconnecter du rseau lorsqu'ils quittent le travail. Si un fichier est utilis
par une application, il ne sera pas enregistr par le backup. Avec le RAID 1, nous pouvons par
exemple dconnecter un disques dur des utilisateurs (mme si cette possibilit n'est rellement
accessible que sur les serveurs rseaux de haut de gamme). Un disque est donc accessible en pour
les utilisateurs tandis que le deuxime est rserv au backup. Lorsque la sauvegarde est termine, les
2 disques Raid sont resynchroniss pour reprendre le fonctionnement normal.
1. Type de lecteurs sur bandes magntiques.

En premire anne, nous avons dj vu la sauvegarde sur bande pour les stations de travail. Dans le
cas d'une station, les choix sont multiples: disquettes (?), graveurs, DVD-Rom, Zip, ... et les bandes
sont ... peu utilises. Par contre, les lecteurs de bandes permettent de faire les sauvegardes sans
interventions de l'utilisateur des jours et heures bien prcis. Cette possibilit, complte par le prix
de revient d'une bande au MB, la rend pratiquement incontournable comme solution pour les
serveurs. En couplant des bandes dans des "chargeurs" appels librairies, on augmente encore la
capacit. La connexion est systmatiquement en SCSI ou SAS, soit avec des appareils externes, soit
internes (les vitesses sont identiques).

Diffrentes technologies de lecteurs ne sont plus utilises (obsoltes) comme les srie AIT et SAIT et
8 mm. Les dveloppements futurs penchent plutt vers des applications hberges sur Internet, ce
qui va encore rduire les types utiliss.
2. Sauvegarde DAT

Le DAT est dpart dvelopp pour remplacer les cassettes audio analogiques par un standard audio
digital, avec une qualit audio CD. Avec le standard DDS (Digital Data Storage), Hewlett Packard et
Sony le transpose en technologie informatique en 1989. Le DAT utilise des cassettes de 4 mm de
large. L'criture / lecture se fait de manire elliptique (l'criture n'est pas perpendiculaire la bande
mais dcale comme pour les cassettes vido). Cette mthode est plus lente que le modle linaire
mais permet d'augmenter la capacits de donnes.

L'criture se fait par groupes de 128 KB, correction d'erreur comprise. Lors de la lecture, la bande
rcupre l'entiret des donnes groupe (correction comprise) avant de restaurer les donnes sur le
disque dur.

En DAT, deux mthodes d'inscriptions sont utilises, le DDS (le plus courant) et le DataDAT (obsolte
et plutt rserv au multimdia). Le mcanisme des lecteurs est identiques mais pas l'encodage des
donnes. Les deux sont incompatibles.
Standard Anne Capacit Taux de transfert max.
DDS-1 1989 2 / 4 GB 0,55 / 1,1 MB/s
DDS-2 1993 4 / 8 GB 0,55 / 1,1 MB/s
DDS-3 1996 12 / 24 GB 1,1 / 2,2 MB/s
DDS-4 1999 20 / 40 GB 1,1 / 2,2 MB/s
DDS-5 2003 36/72 GB 1,5 / 3 MB/s
DDS-6 2007 80/160 3,5 / 6,9 MB/s
DDS320 Fin 2009 160/320

DDS5 (aussi appel DAT72) peut utiliser les bandes DdS3 et DDS4. Les dernires technologies sont
principalement dveloppes par Hewlett PAckard.
3. AIT et SAIT

Dvelopps par Sony depuis 1996, les capacits des lecteurs de bandes AIT varient de 35, 50, 100,
150, 200 GB ou 400 GB en mode non-compress. Une version 800 GB (non compress) est en cours
de dveloppement (2007). Pour le petit modle, il est directement en concurrence avec le DAT (plus
lents) ou les DLT. En 2008, Sony a stopp tout dveloppements de ces deux technologie pour se
consacrer au DAT en collaboration avec HP.

Ces appareils de sauvegarde peuvent tre interfacs suivant les versions en USB, Firewire et SCSI
pour les modles externes, Srial ATA, Parallle ATA, SCSI pour les modles internes.

Six modles sont dvelopps suivant la capacit de sauvegarde et la vitesse de transfert. Chaque
modle peut tre fourni en mode standard ou en mode turbo (augmentation de la vitesse de
transfert).

Ces lecteurs de bandes sont reconnus par la majorits des logiciels de back-up sur le march. Les AIT
une une compatibilit ascendante. Chacun peut lire utiliser (lecture / criture) les modles infrieurs.
A partir de la version 4, ils sont compatible avec la mthode WORM (Write Only / read Many) qui
permet une seule criture, utilise dans la conservation des documents officiels en industrie.

La technologie SAIT dcoule du AIT avec une plus grande capacit, mais ne permet pas d'utiliser les
bandes AIT.
Norme Capacit standard / compress (*) Taux transfert normal, compress (*) Format type
de bandes MTBF
AIT1 35 / 90 GB 4 MB /s (10) 3"5 8 mm AME 300.000
AIT2 50 / 130 GB 6 MB / s (12) 3"5 8 mm AME 300.000
AIT3 100 / 260 GB 12 MB / s (31) 3"5 8 mm AME 400.000
AIT-3Ex 150 / 390 GB 18 Mo/s (46) 3"5 8 mm AME 400.000
AIT4 200 / 520 GB 24 Mo/s (62) 3"5 8 mm AME 400 000
AIT5 400 / 1024 GB 24 Mo/s (62) 3"5 8 mm AME 400 000
SAIT1-500 500 GB / 1,3 TB 30 MB /s (78) 5"25 1/2 AME 500.000
SAIT2-800 800 GB / 2 TB 45 MB /s (117) 5"25 1/2 AME 500.000

(*) le taux de compression utilis est 2,6:1, les appareils concurrents annoncent gnralement une
compression 2:1 plus raliste.
4. Cartouches 8 mm.

Les cartouches 8 mm ont t dveloppes au dbut pour les vidos: transfert d'images en haute
qualit couleur sur bande pour sauvegarde. Similaire au DAT, mais gnralement de plus grosse
capacit, les 8mm utilise galement la technologie hlicodale.

Deux standards sont utiliss suivant le systme de compression: Exabyte Corporation et son standard
8 mm et le mammoth dvelopp par Exabyte et Sony. Ces modles ne sont plus livrs (2007).

Standard Date commercialisation Capacit (non compress / compress) Interface
Taux de transfert max.
Standard 8 mm 3,5 / 7 GB SCSI 32 MB /min.
Standard 8 mm 5 / 10 GB 60 MB /min.
Standard 8 mm 7 / 14 GB 60 MB /min.
Standard 8 mm 7 / 14 GB 120 MB /min.
Mammoth 1996 14 / 28 GB
Mammoth-LT 1999 20 / 40 GB 360 MB /min.
Mammoth-2 2000 50/100 GB 1,8 GB/min.

Pour rappel, le MTBF est le Mean Times between Fealures, le temps moyen entre deux pannes.
5. Le DLT

Dvelopp dans les annes 1980 par DEC (Digital, rachet par Compaq) pour ses micro-ordinateurs
VAX, la technologie DLT est rellement apparue en 1989. Cette technologie a t rachete en 1994
par Quantum. D'autres fabricants utilisent cette technologie en OEM.

Les lecteurs DLT utilisent une cartouche plus petite que les bandes 8 mm. La bande est dcoupe en
pistes parallles sur toute la longueur. Chaque criture utilise deux pistes (donnes et correction).
Lorsque la fin de la piste est rencontre (fin de la bande), les ttes sont repositionnes sur une
nouvelle paire de pistes et la sauvegarde continue en revenant par l'arrire) jusqu' ce que la bande
soit complte (par aller - retour). Les bandes courantes incluent 128 ou 208 pistes.

La technologie DLT est unique dans l'implantation des ttes. L'implantation des 6 guides assure un
droulement de la bande hlicodal (au mme titre que les technologies ci-dessus), assure un
excellent contact bande / tte. Ceci est associ 2 guides qui ne font que le nettoyage de la bande et
ne sont pas motoriss. Ceci assure une dure de vie des ttes de 30.000 heures, pour 2000 dans le
cas des DAT
Dnomination Capacit GB (compress) cartouches Connection Taux de transfert
max. compress (MB/s)
DLT 2000 15 (30) - SCSI 2,5
DLT 4000 20 (40) 3
DLT 7000 35 (70) 20
DLT-4 (VS-80) 40 (80) DLTtape IV Wide Ultra SCSI-2 6
DLT-4 (VS-160) 80 (160) DLTtape VS1 16
DLT-V4 160 (320) DLTtape VS1 20
DLT-S4 800 (1600) DLT-S4 Ultra-SCSI 320 120

Seuls les 4 derniers sont encore commercialiss (2006).
6. Super DLT

Les tapes Super DLT sont galement fournies par Quantum, d'autres fabricant les fabriquent sous
licence. Ces bandes augmentent la capacit des bandes DLT. Dans ce cas, les ttes de lecture
/criture sont contrles par faisceau laser (Technologie LGMR - Laser Guided Magnetic Recording).
En lecture, ces bandes de sauvegardes acceptent gnralement les mdia infrieurs. SDLT 600 est
compatible WORM.
SLDT 220 SLDT 320 SLDT 600
Capacit de base 110 GB 160 GB 300 GB
Capacit compresse
(2:1 de compression) 220 GB 320 GB 600 GB
Taux de transfert (DTR) 11 MB /s 16 MB /s 36 MB/s
DTR compress 22 MB /s 32 MB /s 72 MB /s
MEDIA SDLT I SDLT I SDLT II
INTERFACE Ultra2 SCSI LVD
HVD Ultra2 SCSI
Ultra 160 SCSI Ultra 320 SCSI
DATE 2001 (Plus fabriqu) TR1 2002 TR3 2003
7. LTO (Linear Tape Open), Ultrium

La technologie LTO a t dveloppe conjointement par IBM, HP et Quantum. L'implantation de
cette norme est appele Ultrium. Les diffrentes normes sont grs par un groupement, le LTO-
Technology qui s'occupe de la normalisation et de l'octroie des licences. Six gnration sont
dveloppes, mme si la 5 et la 6 sont plus l'tat de projet qu'en cours de normalisation.

C'est actuellement la technologie de sauvegarde la plus performante, tant en capacit qu'en vitesse
de transfert.

La bande est divise en 4 zone sur l'ensemble de sa longueur, numrotes de 0 3. Chaque piste est
entoure de deux bandes servozones permettant d'aligner la tte, y compris en cas de lgre usure
de la bande. L'criture utilise d'abord la piste 0 sur l'ensemble de la bande. Une fois arrive la fin,
elle reprend en sens inverse sur la piste 1, et ainsi de suite.
Norme LTO-1 LTO-2 LTO-3 LTO-4 LTO-5 LTO-6
Capacit non compresse 100 GB 200 GB 400 GO 800 GB 1,5 TB 2,5 TB TB
Capacit compresse 2:1 200 GB 400 GB 800 GO 1,6 TB 3 TB 5 TB
Vitesse de transfert non compress 20 MB/s 40 MB/s 80 MB/s 120 MB/s
140 MB/s 160 MB/s
Vitesse en mode compression 40 MB/s 80 MB/s 160 MO/s 240 MB/s 280
MB/s 400 MB/s
Interface SAS SAS
Date de sortie 1998 2002 2004 2007 2010 2012

La version LTO-4 peut lire et crire sur les bandes LTO-3, seulement lire les LTO-2.
9.8. Chargeurs de bandes

Les librairies sont des regroupements de lecteurs qui permettent d'utiliser plusieurs bandes
simultanment dans un chargeur externe.

S'ils peuvent tre utiliss comme solution standard, la principale utilisation est de conserver des
donnes qui ne sont pas trop (ou pas souvent) utilises mais doivent rester accessibles aux
utilisateurs. Les fichiers sont reconnu comme sur un disque dur mais sont physiquement enregistrs
sur des bandes. A la demande, le fichier est retransfr sur le disque dur. Le programme d'auto
archivage transfre priodiquement tous les fichiers qui ne sont plus utiliss depuis un certain
(gnralement, l'auto archivage se fait tous les jours).
9.9. REV Iomega (obsolte)

Destin concurrencer les bandes de sauvegarde DAT et remplaant les lecteurs Jazz, le REV
d'Iomega a de nombreux avantages. Le lecteur REV utilise des cartouches amovibles de 35 GB (90 B
en compress), soit la capacit des plus gros lecteurs DAT. Internes, ils sont interfacs en IDE, SATA,
SCSI. Dans tous les cas, la vitesse de transfert est maximum de 25 MB / seconde. Les REV sont
galement disponibles en version externe (interface SCSI, Firewire (Mac) ou USB). Le logiciel de
sauvegarde associ permet une utilisation tout fait identique aux bandes de backup.

Le gros avantage vient du prix de l'appareil, dans les 400 pour prs du double pour un lecteur DAT,
mme si interfacs en SCSI 160, ceux-ci sont thoriquement plus rapides. C'est la solution idale
actuelle pour le backup de petits serveurs de fichiers, mme si le prix des cartouches (50 environ)
sont plus chres que le prix d'une simple bande DAT. Comme le SATA et l'IDE sont implants en
standard dans les PC courants, cette solution peut galement tre utilise dans les stations de travail.
9.10. San, NAS et iSCSI

Le stockage des fichiers sur le disque dur d'un serveur ne fait finalement que de la distribution de
fichiers mais implique des licences utilisateurs Windows plutt chres. Les deux solutions suivantes
vont annuler ces licences.
9.10.1. NAS (Network Attached Storage).

Schmas de fonctionnement d'un NASUn NAS est constitu d'un ou plusieurs disque(s) dur(s) en
Sata, PATA ou plus rarement en SCSI (RAID ou non), d'une connexion Ethernet, d'un microcontrleur
et d'un systme d'exploitation Linux (pas de licences utilisateurs). L'administration se fait
directement via une interface Web et se rduit aux droits d'accs des utilisateurs, au paramtrage
TCP/IP de la carte rseau, ventuellement du serveur DHCP. C'est point fort de ces quipements, la
facilit de mise en route le prix (pas de licence Windows).

En option pour les appareils de haut de gamme, disques durs Hot Plug (extractibles chaud), RAID,
synchronisation des droits d'accs avec les privilges utilisateurs du serveur Windows, ... Un exemple
de configuration NAS.
9.10.2. SAN (Storage attached Network).

Schma de fonctionnement d'un SANSi un NAS est directement attach au rseau, le SAN se
positionne comme mmoire de masse supplmentaire pour un ou plusieurs serveurs. Dans cette
configuration, disques et bibliothques de bande sont directement connects ces serveurs par une
connexion en Fibre optique. Normalement, tous les disques et bibliothques de bande sont visibles
par tous les processeurs. La fonctionnalit de Zoning permet d'isoler des ensembles de disques et
bibliothques des autres ensembles. Les disques sont donc accessibles depuis plusieurs serveurs
simultanment.

Le protocole de communication entre les serveurs et le SAN utilise le fibre Channel, c'est un
protocole de communication qui permet d'envoyer des commandes des disques SCSI encapsules
dans un protocole rseau. Cette mthode permet des transferts rapides. Pourtant, la difficult
mettre en place ce type de stockage le rserve uniquement aux grandes entreprises.

La diffrence entre un NAS et un SAN est juste au niveau des accs, directement via le rseau pour
un NAS, par l'intermdiaire des serveurs (y compris privilges utilisateurs pour un SAN.
9.10.3. ISCSI

La mise en place de SAN bass sur le Fibre Channel est complexe et demande des comptences
spcifiques. IBM et Cisco ont dvelopp une autre approche du stockage rseau en utilisant le TCP/IP
comme protocole rseau et en encapsulant des commandes SCSI dessus. Cette mthode est
normalise depuis 2004. L'avantage est principalement li aux cots, dj l'implantation mais aussi
l'utilisation de disques durs SATA moins chres que les SCSI.

Ces baies de stockages se connectent simplement sur le rseau de l'entreprise comme un simple NAS
dans les cas les plus simples (mais dconseill)) ou via un rseau Ethernet spar. Comme un NAS,
l'ISCSI permet de stocker de simples documents mais permet galement le partage de bases de
donnes(SQL, Exchange, ...), toujours en permettant le partage entre diffrents serveurs. C'est donc
un mlange de NAS et de SAN.

La majorit des constructeurs utilisent Windows Storage Server de Microsoft, une version
particulire de Windows server 2003 comme gestionnaire de NAS. Au niveau des serveurs, Windows
2003 (pas SBS) et 2008 intgrent directement le pilote (iSCSI Software Target), installer dans les
outils d'administration si ce n'est pas fait par dfaut, il est galement disponible sous Linux.

Si des cartes rseaux spcifiques ISCSI sont dveloppes, les cartes Ethernet Giga actuelles
implantes sur les serveurs sont toutes compatibles TOE (TCP/IP Offload Engine). Qu'est que le TOE?

Une carte rseau standard ne fait que de vrifier le checksum et rassembler les donnes, c'est le
processeur qui fait tout le reste du travail. Une carte TOS va galement rcuprer les informations du
protocole rseau TCP et IP (donc jusqu'au niveau 4 du modle OSI). Ceci rduit nettement la charge
du processeur qui ne reoit plus que les donnes.

Diffrents routeurs spcifiques sont galement fabriqus.
9.11. Cloud computing

Le cloud computing rassemble tout et rien (encore une ide marketing): de la sauvegarde de donne
automatique, au partage de documents en passant par des applications (programmes ddies). Le
seul rel point commun est que tout est hberg sur Internet, permettant l'accs distance de
finalement n'importe o. Toutes ces solutions passent par un abonnement.
9.11.1. Sauvegarde automatique.

Dvelopp depuis le dbut des annes 2000, cette technique utilise un logiciel sur l'ordinateur
protger qui va simplement copier les donnes sur un site Internet avec un cryptage (en temps rel
ou une heure dtermine). C'est le mme principe que les logiciels fournis avec les disques durs
externes sauf que les donnes ne sont pas dans le btiment mais bien externe. Comme tous
transferts Internet, la sauvegarde (envoi) est plutt lente mais la rcupration plutt rapide. Cette
solution ne permet pas un partage de documents (ce n'est pas son but).
9.11.2. Le partage de documents.

Deuxime solution adopte par beaucoup d'entreprises, la mise en ligne de documents avec un
accs scuriss. Ce systme cloud est finalement un serveur de fichier hberg sur Internet. Le
premier avantage est que l'entreprise n'a plus faire ses propres sauvegardes, ces solutions
recopient les donnes sur plusieurs serveurs Internet. Le deuxime est finalement l'accs distance
et le partage avec des droits d'accs tout fait identiques ceux des serveurs rseaux internes.
9.11.3. Les applications distribues.

Cette solution est un peu identique au partage de documents puisqu'elle reprend galement la
sauvegarde mais reprend en plus des applications bureautiques, calendriers, logiciels de mail, ...
Deux gros acteurs sont actuellement sur le march:

Google Documents reprend un traitement de texte, tableur, prsentation, dessin, ... Toutes ces
solutions sont collaboratives, les documents peuvent tre modifis en mme temps par plusieurs
utilisateurs. L'utilisation est gratuite mais l'espace de sauvegarde est limit sans un abonnement.
Microsoft et Office 365 (2012) est simplement le passage de la suite bureautique directement
accessible sur Internet. La suite standard 2010 est conserve. Cette solution ncessite pour toutes les
versions un abonnement par utilisateurs.

9.11.4. Applications distance.

Cette solution est diffrente puisque cette fois une application tourne directement sur un serveur
Internet avec un accs distance. L'avantage est principalement li la charge, en cas de forte
demande de puissance de calcul, plusieurs serveurs peuvent tre utiliss en temps rel (c'est la
solution propose par Amazon). L'autre solution, propose par exemple par Microsoft Azure (2012)
est la virtualisation de serveur qui permet de faire tourner plusieurs systmes d'exploitation en
mme temps (identique un serveur virtuel local mais hberg distance).

Quelles applications peuvent utiliser cette mthode? Quasiment toutes tant que les transferts ne
sont pas trop importants vers les PC utilisateurs. Quasiment toutes les bases de donnes en mode
client / serveur peuvent tre utilises, y compris les applications de gestion. C'est probablement
l'avenir de l'informatique moyen terme.
10.11. Stratgies de backup.

Pourquoi sauvegarder les donnes, mme avec le RAID?

virus ou intrusion sur le rseau par Internet (hacker)
modification de la configuration logicielle directement sur le serveur en production (largement
utilise dans la pratique) pour ajouter des fonctionnalits, modification de paramtres de logiciels et
... mauvais fonctionnement. En pratique, obligez les programmeurs faire une copie complte du
dossier de l'application et de la base de donne sur un disque dur. Cette solution est plus rapide pour
la rcupration.
effacement accidentel ou autre de fichiers et dossiers, erreur dans la table des matires du disque
dur (FAT et NTFS), fichier corrompu, ...

10.11.1. En premire, nous avions vu les trois types de sauvegarde:

Backup complet : sauve tous les dossiers et fichiers du disque dur. C'est la mthode la plus sre, mais
la longue puisqu'elle permet de reprendre tous le contenu des dossiers en une seule fois. De toute
faon, en cas de crash disque complet, vous devrez d'abord rinstaller Windows avant de rcuprer
les donnes.

Backup incrmental: uniquement les fichiers modifis depuis la dernire sauvegarde. Pour une
restauration complte d'un dossier, vous devez d'abord utiliser une restauration complte, ensuite
reprendre la suite des autres toutes les sauvegardes incrmentales. C'est la plus rapide en
sauvegarde mais aussi la plus longue en rcupration.

Backup diffrentiel: copie tous les fichiers depuis le dernier backup complet ou incrmental mais ne
modifie pas le bit darchive des fichiers comme dans les deux autres techniques. Le dfaut est li aux
temps de sauvegarde puisqu'il reprend des fichiers et dossiers dj sauvs les jours prcdents
(mme non modifis depuis). Une sauvegarde complte ou incrmentale est ncessaire avant.

Chaque technique a ses qualits et ses dfauts. Une bonne stratgie doit tenir compte du temps
d'criture et du temps de rcupration en cas de panne.
Complte incrmentale diffrentielle
SAUVEGARDE
modification du bit de sauvegarde OUI OUI NON
dure Longue courte longue - courte
dconnections des utilisateurs Oui OUI / NON NON/ OUI
Dfaut problme sur une bande problme sur une bande, changement obligatoire des bandes
chaque fois Changement obligatoire des bandes chaque fois, dure qui augmente
Rcupration des donnes
type Tout d'un coup Chaque sauvegarde jusque la dernire complte Une sauvegarde
jusque la dernire complte
Risques fichier manquant Une sauvegarde dans l'ensemble dfectueuse

Mlangeons les mthodes de sauvegardes avec l'utilisation des donnes sur le serveur.

Une stratgie intressante utilise une sauvegarde complte rgulire suivie d'une sauvegarde
diffrentielle journalire. Le problme est la priodicit d'une sauvegarde complte. Plus le dlai
entre deux est long, plus le diffrentiel prendra du temps.

Une deuxime mthode consiste faire un backup complet par mois, suivi d'un backup incrmental
par semaine et un diffrentiel par semaine. Cette stratgie est souple, mais ncessite l'emploi de
beaucoup de jeux de bandes diffrentes.

Une dernire chose concernant l'utilisation des bandes, elles doivent tre changes tous les jours et
ddoubles en sries paires et impaires: si une bande de lundi est dfectueuse, celle du prcdant
lundi ne le sera pas. Le jeux de bandes ne doit pas se trouver dans la mme pice (et si possible dans
un btiment diffrent) que le serveur. Pensez aux risques d'incendie ou de vol.
10.11.2. Exemple de stratgie de sauvegarde bureautique

Voici un exemple de stratgie de backup dans un systme bureautique, sans utilisateurs de nuit.
Lundi Mardi Mercredi Jeudi vendredi samedi dim. Lundi Mardi
Mercredi Jeudi vendredi samedi dim.
Type Diff. Diff. Diff. Diff. Diff. Compl. Diff. Diff. Diff. Diff. Diff.
Compl.
horaires 21h 21h 21h 21h 21h 20h 21h 21h 21h 21h
21h 20h
bande Lu1 Ma1 Me1 Je1 Ve1 Com1 Lu2 Ma2 Me2 Je2 Ve2
Com2

Ici, le backup du vendredi est un diffrentiel. Il peut remplacer celui du samedi s'il n'y a pas
d'activits le samedi. Ceci vite un dplacement du personnel pour ... changer les bandes.
10.11.3. Exemple de stratgie backup industriel

Si l'application ne s'arrte pas, juste un ralentissement dimanche matin par exemple (maintenance
des machines). Le problme dans ce cas reste les utilisateurs.

Le deuxime problme dans ce cas est la charge sur le serveur durant le backup. En sauvegardant,
vous ralentissez le serveur. L'heure des sauvegardes doit tre choisie avec le moins d'utilisateurs
possibles, pas 8 heures du matin quand les bureaux dmarrent. La stratgie se fait sur 4 semaines,
une sauvegarde complte du systme par mois (4 semaines), tous dossiers confondus.
Lundi Mardi Mercredi Jeudi vendredi samedi dim. Lundi Mardi
Mercredi Jeudi vendredi samedi dim.
Type Diff. Diff. Diff. Diff. Diff. Diff. Comp Diff. Diff. Diff. Diff. Diff.
Diff. Compl/inc
horaires 21h 21h 21h 21h 21h 14h 8h 21h 21h 21h 21h
21h 21h 8h
RAID? O/N O/N O/N O/N O/N O/N O/N O/N O/N O/N O/N
O/N Oui
bande Lu1 Ma1 Me1 Je1 Ve1 Sa1 Mensuel 1/2 Lu2 Ma2 Me2 Je2
Ve2 Sa2 Inc1
Lundi Mardi Mercredi Jeudi vendredi samedi dim. Lundi Mardi
Mercredi Jeudi vendredi samedi dim.
Type Diff. Diff. Diff. Diff. Diff. Diff. Compl/inc Diff. Diff. Diff. Diff.
Diff. Diff.
Compl/inc
horaires 21h 21h 21h 21h 21h 14h 8h 21h 21h 21h 21h
21h 14h 8h
RAID? O/N O/N O/N O/N O/N O/N Oui O/N O/N O/N O/N O/N
O/N Oui
bande Lu3 Ma3 Me3 Je3 Ve3 Sa3 Inc2 Lu4 Ma4 Me4 Je4 Ve4
Sa4 Inc3

La stratgie ressemble celle bureautique. Le dimanche reprend soit une sauvegarde complte, soit
une incrmentale. Ceci dpend galement de l'incidence du backup sur le fonctionnement de
l'entreprise. Par contre, le premier dimanche du mois est une sauvegarde complte sur 2 jeux de
bandes part.


10. Connexion distance par INTERNET, scurit et communications
10.1. Risques (virus, intrusion, ...) - 10.2. Connexion INTERNET de base - 10.3. Diffrents points d'une
connexion professionnelle - 10.4. Les firewall - 10.5. L'accs distance - 10.6. Sauvegarde via
INTERNET
Ce chapitre traite de la communication et scurit entre les ordinateurs. Le plus courant concerne la
connexion vers INTERNET (Firewall, VPN) mais galement des prise de contrle distance de PC ou
de rseau partir d'un ordinateur connect une ligne tlphonique ou via INTERNET (partage de
donnes), travail distance, ... Toutes ces connexions peuvent tre traites en hardware ou en
software, les 2 possibilits existent systmatiquement. Nous verrons en dtail les possibilits
hardware. Ceci nous prparera la suite du cours: architecture d'un rseau.
10.1. Les risques
Un bref rappel sur les risques de scurit (virus, hacking, ...). Une explication plus complte sur les
virus, adware, spyware, ... est reprise dans le cours Scurit sur INTERNET
Au niveau anti-virus Hardware, certains routeurs et VPN incluent un anti-virus interne. D'autres
appareils sont spcialiss: PANDA fabrique un modle de ce type. L'avantage vient des mises jour
quotidiennes automatiques sur un seul noeud: le routeur d'entre / sortie de la connexion Internet
vers le rseau interne. Lorsqu'un virus est dtect dans un mail (quelque soit le type), le mail est
directement renvoy l'expditeur sans mme passer sur le rseau interne ou le PC du destinataire.
Le dfaut reste les autres points d'entre: disquettes, CD pirats, connexions Internet via d'autres
points (modem du portable par exemple). Les spyware, adware, dealer, ... utilisant le port 80
(navigation), ils ne sont pas dtects par les firewall hardware, mais bien par les anti-virus hardware.
10.1.1 Les intrusions, scurit des PC
Les risques d'intrusions sont un sujet la mode. Diffrentes mthodes d'intrusions vont tre
examines.
La premire mthode consiste injecter un programme dans votre PC (via un mail par exemple). Ce
programme serveur va ragir toute demande d'un client (le programme de celui qui essaye
l'intrusion) via un port TCP ou UDP. Les ports sont spcifiques chaque trojan (aussi appel cheval de
Troie ou backdoor). Comme ces programmes sont facilement tlchargeables sur Internet, n'importe
quel gamin est capable de les utiliser. Par contre, elle ncessite qu'un programme soit implant dans
votre ordinateur ou un PC du rseau: si le logiciel client n'est pas implant dans le systme, pas de
risque.
La deuxime mthode utilise des failles de scurit dans le fourbi Microsoft, que ce soit dans le
systme d'exploitation Windows, dans Internet Explorer, Outlook ou Office (toutes versions
confondues). Cette solution est plus rserve aux professionnels. Ceci a permis un site de tests de
firewall d'ouvrir mon lecteur CD-ROM distance. Avec un firewall software sur la station et le rseau
protg par un firewall hardware, je me sentait pourtant plutt en scurit. La solution consiste
suivre les SERVICE PACK de scurit de Microsoft.
En troisime, de loin la plus sournoise, la mthode consiste modifier des informations dans la
trame TCP/IP d'un message correct pour que le PC (ou le routeur) attaqu croit que les informations
proviennent effectivement du site demand comme dans le schmas ci-dessous. Cette technique est
appele le spoofing. Pour parer ces attaques, il faut imprativement que les trames soit toutes
analyses avant la lecture par le navigateur.
Les buts sont multiples: vols d'informations et dans de nombreux cas, utilis cet ordinateur comme
relais pour d'autres attaques. La cible dtecte alors l'attaque comme provenant du PC "hack".
10.1.2. Les attaques par Dni de service distribu (Denial of Service -dDOS)
Encore un problme relevant de la scurit sur INTERNET. Ce type d'attaque consiste envoyer un
maximum de requte sur un serveur web ou un routeur en un minimum de temps. L'appareil ne
sachant plus suivre craque littralement.
La mthode consiste envoyer des multitudes de paquets ICMP echo-requets en modifiant l'adresse
source de chaque paquet. Les commandes envoyes sont des multiples petits paquets de 64 Kb ou
infrieur (souvenez-vous les paramtres de la commande PING). La cible ne peut plus rpondre aux
demandes de connexions car l'ensemble de la bande passante est limite.
Ceci est la mthode du gamin gt qui ne parvient pas s'introduire dans un serveur, alors, il le
plante. Par contre, c'est aussi une mthode beaucoup plus professionnelle pour stopper des serveurs
Internet avec un maximum de commandes en mme temps, le mieux reste d'utiliser un maximum
d'ordinateurs pour l'attaque en utilisant ceux infects par un trojan.
10.1.3 Dni de service station (tear drop, new tear, boink, ...)
Les attaques de type Teardrop, Newtear, Boink, ... sont quasiment identiques au dni de service ci-
dessus sauf qu'elle ne s'attaque qu'aux ordinateurs (serveurs inclus) directement connects ou
mme via un routeur. Ce type d'attaque vise les systme Windows 32 bits (Win 95, 98, Me, XP (Pro),
NT et 2000) mais galement les systmes d'exploitation Linux infrieur 2.0.32. Apparemment, les
Mac et systmes Unix peuvent aussi tre altrs par ces attaques. A part Windows 3.11 et DOS (mais
comment aller sur INTERNET en DOS?), tous sont donc viss. L'attaque ne se fait plus sur un serveur,
mais sur les stations connectes. Ce type d'attaque consiste envoyer des packets TCP/IP qui se
recouvrent appel OOB = Out Of Band). L'ordinateur cible tente de reconstruire les informations et
finalement, n'y arrivant pas, ceci provoque un plantage de la machine. En Windows, vous vous
retrouvez avec une belle fentre bleue et vous n'avez d'autres choix que de redmarrer la machine.
10.1.4. Quelques prcisions.
Anonyme sur Internet, pas si sr. Dterminer votre adresse IP fournie par le fournisseur d'accs reste
un jeu d'enfant. Un routeur protge votre adresse TCP/IP locale sur le rseau en n'indiquant que
l'adresse extrieure. Dans le cas d'un partage de connexion via les programmes fourni avec les
systmes d'exploitation Microsoft, ce sont les adresses internes du rseau qui sont directement
dtectes. Pour le paramtrage des partages INTERNET. Toute intrusion, attaques de tout type
demande d'abord au "hacker" de connatre l'adresse TCP/IP de la cible vis vis d'INTERNET. Le sport
pour lui est ensuite de connatre les adresses internes des stations PC ou autres du rseau. Tant que
l'adresse Wan (Internet) est invisible, il ne peut rien. Forcment, elle est plus facile a dtecter lorsque
le rseau local est raccord par adresse TCP/IP fixe sur INTERNET.
Dans le mme ordre d'ides, votre systme d'exploitation et votre navigateur Internet sont
automatiquement envoys par votre navigateur au site, idem pour la rsolution de votre cran
(dimension et nombre de couleurs)
Les serveurs Proxy sont des mmoires cache qui permettent d'acclrer les connexions. Le
mcanisme est simple, lorsqu'une page vient d'tre lue, le proxy la garde en mmoire. Si une
demande sur cette page intervient rapidement, le proxy ne la tlcharge pas d'INTERNET mais
directement de sa mmoire. En plus, il est plus difficile de vous suivre la trace puisque vous n'tes
pas toujours directement en contact avec les sites. Ces proxy peuvent tre des botiers externes,
inclus dans un PC ddi du rseau local (sous Linux par exemple) ou directement chez le fournisseur
d'accs ( condition d'tre configur spcifiquement suivant les adresses fournies par votre
provider). Diffrents sites (ou mme entreprises) permettent d'utiliser leur site comme proxy,
masquant la relle adresse IP du visiteur: qu'ils soient gratuits ou payant, 99% % des visites sur un
site est essentiellement pour provoquer des nuisances: fausses annonces, faux posts sur les forums,
tentatives de hacking, vol du contenu, ... Ils sont systmatiquement bloqus sur nos sites.
Les coockies sont de petits fichiers textes chargs sur votre PC. Ces cookies enregistrent vos
prfrences. Ceci permet par exemple d'arriver directement sur la version franaise de Google.be.
Pas bien dangereux, mais ces cookies incluent souvent des informations tels que mots de passe
(mme s'ils sont souvent crypts) ou la date de votre dernire visite sur un site. Quelques cookies
permettent de vous suivre la trace sur divers sites.
Le NAT (Network Adress Translation) sert de translation entre l'extrieur du rseau local (Internet) et
les stations. Le routeur construit une table de correspondance d'adresses IP. De cette manire,
l'extrieur ne sait pas dterminer l'adresse interne d'une station. A la rception de donnes par le
routeur, celui-ci transfre les informations vers le vritable destinataire grce sa table.
10.2. Connexions INTERNET de base.
Le partage d'une connexion INTERNET permet de connecter plusieurs ordinateurs relis en rseau
TCP/IP simultanment avec un seul modem. Le partage professionnel se fait via un routeur, mais des
partages plus simples utilisent directement un modem reli sur un PC. Le modem peut tre normal,
ISDN ou ADSL. De mme, le type de modem peut tre interne, externe srie, externe USB ou mme
dans certains modem ADSL, reli via une carte rseau. Dans les trois premiers cas, le partage peut
se faire directement par le systme d'exploitation ( partir de Windows 98 seconde dition). Dans le
cas d'une liaison via carte rseau, le partage peut se faire via un routeur, via un logiciel de type
WinGates. Cette solution est directement implante dans les serveurs 2003 et 2008. Ces logiciels
assurent galement la scurit des connexions. Dans ce dernier cas, le PC assurant le partage reoit 2
cartes rseau.
Dans le cas d'un partage simple via Windows, chaque ordinateur peut demander la connexion
Internet, mais elle ne peut tre coupe que sur le PC connect Internet. Ceci ne pose pas de
problmes en ADSL, mais attention aux communications tlphoniques en RTC ou ISDN (RNIS). Vous
pouvez demander de couper la connexion INTERNET aprs un certain laps de temps d'inactivit par la
commande option Internet dans. Slectionnez la connexion (Ma connexion ci-dessous) et cliquez sur
le bouton paramtres. Dans la fentre suivante, slectionnez le bouton "avanc". Cochez la case
Dconnecter si inactif pendant et tapez le nombre de minutes souhaite.

Diffrents logiciels ou matriels vont nanmoins se connecter entre le rseau et INTERNET, soit pour
assurer la scurit, soit pour assurer la vitesse de connexion. Ces appareils (logiciels) assurent
diffrentes fonctions de connexion.
10.3. Les diffrents points d'une connexion / partage INTERNET professionnel.
10.3.1. Partage de base
Avant de parler des appareils et solutions mettre en oeuvre pour des connexions Internet
professionnelles, analysons les diffrents problmes possibles. Ceci nous permettra terme de
dessiner notre connexion plus facilement.
Dans le cas d'une connexion vers INTERNET, la premire tche est le partage. Ceci va permettre
plusieurs utilisateurs de se connecter sur Internet en mme temps (navigation, mail, news, ...). Ceci
passe ncessairement par une installation rseau. Dans ce cas, un ordinateur ou un appareil
(gnralement un simple PC sur lequel est connect le modem doivent servir de liaison.

Selon le schmas ci-dessus, chaque station possde sa propre adresse TCP/IP (X.X.X.X.@station1 et
X.X.X.X@station2). De mme, le fournisseur d'accs fournit automatiquement une adresse TCP/IP
la connexion. Lors d'une demande d'affichage d'un site, rfrenc par une adresse TCP/IP propre, par
exemple 238.128.128.128 que nous dnommerons par X.X.X.X@site. Lors de la demande d'affichage,
la station 1 envoie l'appareil de liaison son adresse propre (pour la rponse) et l'adresse du site
qu'elle veut afficher (X.X.X.X@site). Le fournisseur d'accs et tous les composants du rseau Internet
vont se dbrouiller pour que les informations du site soit renvoys l'adresse TCP/IP Internet fournis
par le fournisseur d'accs (X.X.X.X.@ISP) qui les renvoie l'appareil de liaison. Celui-ci fera le
transfert de sa propre adresse Internet vers l'adresse prive de la station 1.
Le fonctionnement, quoique complexe de manire interne, n'est pas trop difficile mettre en oeuvre
avec les logiciels actuels. Cette mthode est utilise par le partage de connexion Internet implante
dans Windows 98 SE et versions ultrieures. Cette solution n'est pas trs scurise. Chaque adresse
des PC connects est visible d'INTERNET. Cette pratique est utilise pour de petits partages de
connexions INTERNET familiales en modem RTC ou en ADSL avec modem USB.
Cette solution est analyse en pratique dans la formation INTERNET
10.3.2. Partage via un logiciel spcialis.
Cette solution de partage INTERNET utilise un PC relais entre le rseau et INTERNET. Le PC utilise 2
cartes rseaux. Une carte rseau est connecte vers le rseau interne, la deuxime carte rseau est
connecte un modem Ethernet RJ45. Le logiciel peut tre Wingate, quelques solutions
professionnelles (Symantec par exemple) ou une solution base de Linux. Le PC relais doit rester
connect pour que la connexion INTERNET fonctionne.
Le logiciel assure diffrentes fonctions: NAT (Network Adress Translation), proxy (cache) et mme
pare-feu. Le firewall s'il est directement implant (Linux) est de fonctionnalit identique un firewall
hardware. Vous pouvez galement installer sur ce PC relais un firewall software.

Cette solution de partage logicielle fait partie des autres cours de deuxime anne, notamment
Linux.
10.3.3. Partage via un routeur simple.

L'utilisation d'Internet est tout fait transparente pour le rseau. Le routeur reste connect en
permanence. Ceci cache le rseau interne (adresse des PC et priphriques) pour l'extrieur, mais
n'empche pas les risques d'intrusion. En effet, part les adresses caches (NAT), les stations sont
directement connectes sur INTERNET. Un trojan sur une station communiquera travers le rseau
de manire compltement transparente. Il est mme probable que le hacker ne s'apercevra qu'il est
dans un rseau qu'au moment de la prise de contrle du PC lorsqu'il aura accs tous les partages de
dossiers et priphriques.
Ceci donne un semblant de scurit, gure plus. Cette solution est vue en pratique dans le cours
partage Internet par routeur
10.3.4. Partage via routeur et firewall hardware.

Ce schma reprsente presque la solution de scurit idale (le presque m'inquite). Le routeur et le
firewall peuvent tre inclus dans le mme botier. Le modem peut tre intgr dans le routeur ou
connect entre celui-ci et INTERNET. Cette solution sera examine dans un exercice du chapitre 17.
Partage et connexion Internet via un routeur - firewall mode ADSL RJ45 Ethernet.
La scurit ne repose pas sur le montage mais sur la manire de paramtrer le firewall. Ceci est
valable pour toutes les solutions de scurit firewall.
10.3.5. Le DMZ (DeMilitarized Zone).
Ceci est une utilisation particulire des firewall. Elle est utilise avec un hbergement sur un serveur
propre l'entreprise ou en cas de leurre pour diffrentes attaques. Dans ce dernier cas on par le PC
bastion. Son utilisation comme serveur proxy ou serveur de messagerie est galement utilise.

Le firewall en contact avec Internet va laisser passer les informations sur le port TCP 80
(ventuellement 443) provenant de l'extrieur du site, ainsi que les informations provenant du site
interne vers Internet. Dans le cas d'un serveur Web, le premier firewall vite les attaques extrieur.
Les ports 20 et 21 par exemple pourront tre ferms. Par contre, les informations provenant de
l'extrieur passerons soit par le firewall extrieur, puis par le server DMZ (cas d'un PC bastion) puis
par le deuxime firewall.
Ce n'est pas le niveau maximal de scurit, mais le hacker se retrouve avec 2 voir 3 barrires ouvrir.
10.4. Les Firewall (pare feu)
Les firewall protgent les installations informatiques des intrusions. Un firewall surveille les
communications d'un PC vers Internet et vis versa. Pour cela, il analyse, bloque ou autorise les
communications via les ports UDP et TCP. Ceci est valable pour les connexions Internet, mais
galement entre diffrentes parties d'un rseau interne. Une large partie des "intrusions" sont
orchestres de l'intrieur de l'entreprise. Pensez par exemple l'employ qui vient de recevoir son
pravis, ...On retrouve 2 types de firewall: les firewall logiciels et les firewall hardware.
Le paramtrage des firewall logiciels ne fait pas partie de ce cours hardware, je ne m'y attarderai pas.
Dans les applications INTERNET, pour faciliter les communications entre applications identiques, on
utilise des ports tant en TCP qu'en UDP. Chaque port est spcifique un type d'application. La
navigation se fait par le port 80 et les news par le port 119 par exemple. Le paramtrage consiste
ouvrir des portes (ports) ncessaires aux applications normales en fonction des adresses de
destination IP (en sortie) ou d'mission (adresses des sites). Ds ce moment, il me semble clair que
toutes les autres doivent tre fermes. Par dfinition, l'intrusion se fait toujours par l'entre la plus
faible de la protection du rseau. Ceci est similaire la scurit d'un btiment. Cela ne sert rien de
mettre des portes blindes partout, si la fentre de derrire reste ouverte en permanence. Pour la
liste des ports ouvrir, rfrez-vous au cours INTERNET: Classes d'adresse, ports TCP et UDP
10.4.1. Diffrence entre un firewall logiciel et hardware
Et non, les deux ne font pas exactement le mme boulot. Dans un sens, ils sont complmentaires.
Pour rappel, installer 2 firewall logiciels est dangereux et peut rendre chaque logiciel inefficace.
Un firewall logiciel vrifie et indique sur quels ports les programmes qui accdent INTERNET depuis
votre PC (en TCP/IP et en UDP). De mme, ils annoncent les ports sur lesquels rentrent (ou tentent
de rentrer) des applications sur votre PC. Dans ce sens, sauf mauvaise configuration, ils sont
efficaces. Par contre, ils n'analysent pas du tout les programmes courants (modifications des trames,
...), ni n'analysent encore moins les dfaut de scurit du systme d'exploitation (diffrentes failles
de scurit Microsoft sur les systmes d'exploitation, Internet Explorer, Outlook et mme office). En
vrifiant les programmes qui tentent des connexions Internet, ces programmes bloquent les spyware
et les adware. Malheureusement, cette solution bloque gnralement galement la connexion
INTERNET. La solution logicielle pour les enlever reste lavasoft par exemple. Un firewall software
s'installe sur chaque PC (d'o un lourd travail d'administration), sur le serveur ou sur des PC ddis.
En plus, ces logiciels reconnaissent rarement les adresses extrieures (Internet) des adresses
internes. Ces logiciels sont parfait pour la dtection des trojans. S'ils les dtectent, ils ne les
suppriment pas. Ce rle est dvolu aux anti-virus, mme si les anti-virus ne considrent pas les
adware et spyware comme nuisible (ce sont des programmes commerciaux).
Un firewall hardware est plac entre INTERNET et le rseau. Dans ce sens, les intrusions (ou
tentatives) l'intrieur du rseau ne sont jamais analyses. Mme si un firewall hardware n'est pas
li Microsoft, ils ne protgent pas non plus des failles de scurit des programmes et systme
d'exploitation. En analysant les trames de donnes, ils rejtent galement les intrusions par bricolage
des adresses. Par contre, mme si tous les ports non utiliss sont ferms, les programmes qui
utilisent les ports standards peuvent travailler sans problmes. Un vers (trojan) qui utiliserait le port
80 ne sera en aucun cas bloqu, il est considr comme une application tout fait standard. Les
spyware et adware utilisant le port 80 ne sont donc en aucun cas pris en compte par un firewall
hardware.
Les 2 protections ci-dessous sont gnralement intgres dans les firewall matriel:
Statefull Packet Inspection:
Permet au firewall de comparer un paquet de donnes entrant avec les paquets ayant
prcdemment t considrs comme "sains".
Content Filtering :
Permet notamment de contrler les accs au Web par des filtres (bass sur des listes d'adresses
Internet, des mots cls ou des plages horaires de connexion).
Une scurit optimale serait donc un firewall hardware entre le rseau et Internet et un firewall
logiciel sur chaque station. Nanmoins, les firewall interne dans le cas de rseaux lourds pose des
problmes au niveau utilisateur. A la moindre alerte (mme inutile de type DHCP sur le port UDP 68),
l'administrateur sera appel (ou non ...) par l'utilisateur.
Actuellement diffrentes firmes fabriquent des cartes rseaux qui incluent un firewall hardware
(Nvidia notamment) mais qui posent plus de problmes qu'autre chose.
10.4.2. Les ports ouvrir en TCP et en UDP, les plages d'adresses.
Chaque application est caractrise par un port TCP et / ou UDP utilis. Il est spcifique au type
d'application Ceci facilite les communications puisqu'une application de type navigation utilisera
d'office le port 80, que ce soit Microsoft Explorer, Netscape ou un autre. Les numros de ports (tant
en TCP qu'en UDP) varient de 0 65535 (216). IP dtermine l'adresse du site ou du PC en
communication. La combinaison port TCP/IP dtermine donc le site et l'application.
Les principaux ports et services TCP ouvrir sont repris dans les annexes de la formation INTERNET:
Classes d'adresses, ports TCP et UDP
10.4.3. Mthode de dtection d'un firewall hardware et fonctionnalits
Les firewall (pare feu) analysent les trames, tandis que les firewall software analysent les
applications. Cette analyse hardware est effectue par un logiciel interne. La premire partie filtre les
combinaisons TCP IP pour envoyer ou non les informations vers le PC client du rseau. La deuxime
partie va vrifier si l'information est effectivement demande par une station cliente en analysant
les connexions PC - site Internet.
La troisime application est appele Statefull inspection. Ce terme est brevet par Checkpoint (un
des leaders de la scurit Internet) qui fabrique des firewall software mais dont la technologie est
implante dans divers firewall hardware. Le "State Full Inspection" est aussi appel Firewall-1 ou
technologie de filtrage dynamique. Le firewall dtermine si le client est bien connect (active) sur
INTERNET au moment de la rception du message. Pour cela, le firewall garde dans des tables de
connexion les sessions actives. Dans le cas contraire, le message est purement bloqu.
Les firewall peuvent inclure galement diffrentes options tel que le proxy. Un proxy est un espace
disque dur sur lequel les pages couramment demandes sont stockes. Chaque fournisseur d'accs
(FAI) utilise un proxy pour les connexions. Lors d'une demande, le proxy vrifie si la page n'est pas en
mmoire. Dans le cas positif, la page est renvoye la demande sans tlchargement partir du site.
Ceci permet de gagner du temps lors des tlchargements. Cette solution est galement utilise dans
quelques firewall ou routeur. Si l'utilisateur n'est pas en contact direct avec le site, son adresse IP ne
pourra pas tre analyse. Quoiqu'en disent certains sites, ce n'est pas vraiment une scurit puisque
les adresses hacker sont souvent dtermines par un scannage des adresses sur INTERNET. Par
contre, dans le cas des firewall qui ne renvoient pas les commandes PING, ceci permet l'attaquant
de dterminer que l'adresse est effectivement utilise si le proxy n'est pas en fonction. Remarquez
que l'utilisation ICQ ou MSN Messenger permet galement de dterminer votre adresse TCP/IP
encore plus facilement, la liste apparat sur le site.
Le filtrage de sites est implant dans la majorit des firewall hardware. Ceci permet de bloquer les
accs sortant des adresses de sites ou mme des adresses contenant un mot. Vous pouvez par
exemple bloquer les sites dont le nom inclus sex, rencontre ou KAZAA.
10.5. L'accs distance un rseau
Cette application permet de se connecter un rseau interne via une liaison tlphonique ou par
INTERNET.
10.5.1. Prise de contrle distance et transferts de fichiers.
Dans le chapitre prcdant, nous avons vu que les trojans de type Netburst permettent de prendre le
contrle distance (entre autre) d'un PC via Internet. Cette solution semble facile mais permet
d'autres de prendre le contrle aussi. Cette solution est donc tout fait proscrire.
La solution la plus communment utilise fait appel des logiciels de type PC Anywhere qui
permettent de prendre la commande de PC via des modems analogiques ou ISDN, ou mme l'ADSL
(Internet). Cette solution est souvent utilise pour de petites infrastructures de type indpendants,
ou pour le dpannage des utilisateurs distance dans le rseaux internes. De nombreuses tentatives
d'attaques par INTERNET viennent de ce logiciel. Le paramtrage de PC Anywhere permet de changer
le numro de port pour l'accs distance. Ce n'est pas la solution parfaite. En effet, pour une prise
de contrle distance, il faut le numro de port et le programme client. En changeant le numro de
port, l'administrateur suppose que le pirateur ne pourra prendre le contrle. De l'autre ct, le
pirateur par scannage d'adresses sur tous les ports, reoit les logiciels qui rpondent (mme mal) sur
un port. Il n'a plus qu' essayer tous les programmes possibles sur ce port. La prise de contrle se fait
galement par mot de passe (nettement conseill).
Une autre solutions qui n'est utilise que par certains programmes permettent de mettre en
commun des ressources via l'accs rseau distance.
Cette fonction ncessite l'installation d'un composant additionnel de Windows serveur: serveur
d'accs rseau distance et permet l'utilisation de fichiers sur des disques partags. La connexion
pour permettre l'entre se fait galement via un mot de passe et le dmarrage de ce serveur d'accs
distance via la partie accs rseau distance.
Certains programmes bureautiques (notamment Works de Microsoft) incluent galement des
fonctions de transferts de fichiers. Windows XP a galement implant une fonction de prise de
commande distance, en esprant qu'ici aussi il n'y ait pas de failles de scurit.
10.5.2. Virtual Private Networks (VPN)
Les solutions ci-dessus ne permettent pas directement de se "connecter un serveur rseau", mais
de prendre le contrle d'un PC qui lui se connecte au rseau. Ce sont des solutions logicielles.
Les VPN (pour Virtual Private Networks) sont des appareils qui se connectent physiquement sur
INTERNET ou entre le rseau et le routeur suivant les modles. Les dernires versions des systmes
d'exploitation serveurs de Microsoft implantent des fonctionnalits quivalentes.
Les VPN crent entre un ordinateur et le rseau interne une liaison scurise et crypte pour assurer
le transfert des informations: appel communment un tunnel. Lorsque la station demande via
Internet une connexion sur le rseau interne, les 2 appareils se communiquent une cl logicielle qui
servira au cryptage des informations. Le VPN cre alors une sorte de tunnel scuris sur Internet qui
empche toute forme de piratage. Cette solution est la seule utilisable pour une connexion via ADSL
La connexion ncessite 3 choses:
1. Un logiciel particulier sur le client (Rseau priv virtuel install comme composant de
Windows ou programme spcifique)
2. Un matriel hardware de type VPN reli entre Internet et le rseau d'entreprise
(ventuellement Windows 2000 ou XP)
3. Une adresse INTERNET TCP/IP fixe ou du moins connue au moment de la connexion.
Les deux premires contraintes semblent faciles. Nous reparlerons de l'appareil. La troisime
ncessite, soit un site INTERNET et donc un serveur propre reli sur INTERNET, mme si la connexion
doit se faire sur un autre serveur ou un abonnement spcifique permettant d'avoir une adresse
INTERNET TCP/IP fixe. Dans le cas d'un abonnement ADSL normal, l'adresse change chaque
connexion et au maximum aprs quelques dizaines d'heures suivant le fournisseur d'accs. Les
amateurs pourront nanmoins utiliser quelques solutions pour connatre l'adresse TCP/IP de la
connexion un moment donn sur des sites spcifiques par exemple et la communiquer via
tlphone ou mail. Cette solution est peu envisageable pour une connexion 24h/24h.
On distingue plusieurs modles de VPN. La majorit des modles hardware permettent uniquement
un tunnel entre 2 installation rseau fixes. Ils ne permettent donc pas le travail domicile (quoique
sous-entendent les publicits). Les modles plus chres permettent galement le travail distance.
Le mode de cryptage peut tre MPLS ou IP-Sec (IP Security). Le cryptage se fait uniquement entre les
deux VPN. Certaines mthodes de tunnel, notamment Over Ip ( la diffrence de tunnel IP)
permettent de faire transiter d'autres protocoles tel que IPX dans le tunnel.
Dans le cas de l'utilisation d'un VPN, vous ne pouvez pas scuriser votre rseau en empchant le
partage des ressources via TCP/IP. Le VPN permet d'utiliser distances toutes les ressources du
rseau (fichiers, applications et priphriques de type imprimante) comme si vous tiez directement
connects sur le rseau.
Selon l'appareil (des solutions logicielles existent, notamment dans Win2003 serveur), le VPN va
effectuer plusieurs tches comme la dtection d'intrusions, la fonction firewall ou le scan de virus.
Une passerelle (gateway) vers INTERNET (fonction de routeur INTERNET), une fonction de firewall
pour bloquer les intrusions, un anti-virus intgr et la fonction VPN pour crer le tunnel Internet via,
gnralement le fonctionnement est conforme aux spcifications de cryptage IPsec des stations
clientes.
Le VPN va fournir une adresse locale un PC connect sur INTERNET. celui-ci va alors
automatiquement s'intgrer dans le rseau. Attention, le paramtrage de ce type d'appareil au
niveau VPN est gnralement plus pointu puisqu'il permet par exemple d'accepter les donnes
rentrantes sur une adresse mais de refuser les entres sortantes.
Lorsque tous les niveaux sont rsolus, vous pouvez directement relier deux rseaux internes via
Internet. C'est actuellement la seule solution viable (sans lignes totalement ddies et loues) pour
ce genre d'applications. C'est galement, du moins en Belgique dans les zones connectes l'ADSL, la
meilleure solution pour le tl-travail (le travail partir de son domicile).
10.6. Sauvegarde scurise via Internet.
Cette mthode de backup pourrait tre insre dans la partie stockage et sauvegarde rseau, mais
utilise les techniques de connexions distance. Le principe est de crer un tunnel Internet entre
votre serveur interne et un rseau distant constitu de serveurs, NAS ou de sauvegardes sur bandes
pour sauver vos donnes. Le principal avantage: vous ne vous proccupez plus de vos bandes, elles
sont en principe en scurit l'extrieur de votre entreprise (un autre avantage). Le programme de
gestion sauve automatiquement les donnes importantes en les compressant et les cryptant au
pralable.
Diffrentes variantes de cette technique sont proposes. La premire consiste transfrer
systmatiquement le contenu du disque dur sur la sauvegarde Internet. Malheureusement, les
liaisons ADSL les plus rapides tournent 12 Mb/s (divisez par 10 pour retrouvez une notation en byte
ou octet). Pour sauver un disque dur de 20 GB de donnes, il faut donc 20.000.000 / 800 = 25.000
secondes, soit prs de 7 heures. Le retour se fait encore plus lentement, 512 kb/s maximum pour
l'ADSL, soit 16 X plus lent. Pas trs efficace.
La deuxime solution consiste sauver sur diffrents supports les donnes de dpart (CD, DVD,
bandes) et ne sauvegarder que les dossiers importants ou que les fichiers modifis via le tunneling
Internet. Cette mthode revient une sauvegarde incrmentale ou diffrentielle avec leurs dfauts
respectifs. En cas de problme, on rapatrie par vhicule la sauvegarde de base et on rcupre les
fichiers sauvegards plus tard. Ces systmes peuvent sauver les donnes chaque jour dans des
dossiers diffrents ou dans le mme dossier (en crasant les dossiers les plus anciens. La sauvegarde
des donnes est compresse et crypte au minimum 128 bits, donc scurise et pratiquement
impossible rcuprer sans les diffrentes clefs. Au niveau SECURITE, cette solution semble donc
bonne.
Les dfauts font nanmoins importants. La premire vient de la scurit des donnes (mme si elles
sont cryptes) puisque les donnes sont sur un site Internet qui ne vous appartient pas. Le deuxime
problme vient du dbit de transfert des donnes en mission (mme compresses) et encore plus
en rception. Comme le tunnelling ncessite un matriel ou un logiciel spcifique, vrifiez le cot
effectif de cette solution de sauvegarde peu orthodoxe. Ce principe ne fonctionne qu'avec des
serveurs rseaux travaillant en TCP/IP. Ce n'est pas forcment une solution intelligente pour la
sauvegarde d'un serveur complet mais une manire de ne plus s'encombrer de la tche sauvegarde
pour de petites capacits.
Cette solution pourrait tre galement installe entre deux serveurs rseaux de la mme entreprise
mais distants en utilisant une liaison VPN. Ceci rduit le cot du prestataire mais demandes des
connexions Internet par IP fixes et n'est envisageable que pour les grosses entreprises.

11. Rseau sans fils
11.1. Bluetooth - 11.2. IEEE 802.11 - 11.3. IEEE 802.11 a - 11.4. IEEE 802.11 b - Wifi - 11.5. IEEE 802.11
B+ - 11.6. Rseau sans fils 802.11 G - 11.7. Connexion 802.11G+ - 11.8. 802.11N - 11.9. Wimax -
11.10. Connexion Infrarouge - 11.11. Scurit des communications
Cette partie pourrait tre repris dans les rseaux Ethernet. Nanmoins, comme les connexions sans
fils (Wireless) sont spcifiques, je rassemble ici: rseaux sans fils (WIFI), Wimax (y compris 4G
puisqu'il en fait partie, communications infra-rouges, ...

Les connexions sans fils permettent de connecter diffrents appareils ... sans cble. La liaison peut-
tre soit de type hertzienne, soit par lumire infra-rouge. Pour les liaisons infra rouge, l'metteur et
le rcepteur doivent tre face face. Ces connexions taient utilises (sans grand succs) pour le
claviers et les souris et dans certaines imprimantes. Les connexion Internet par satellite sont vues
dans un autre chapitre.
En utilisant les transmission hertziennes, les liaisons sans fils permettent la connexion simultane de
plusieurs appareils entre eux: PC en rseaux (Wlan - Wireless Lan), imprimantes (principalement la
technologie AirPrint d'Apple), GSM et priphriques divers ou mme de rseaux (appels ). La
difficult de mise en oeuvre tient de la zone de rception, lie la puissance de l'metteur, la
dtection du rcepteur (d'o un protocole dfinissant clairement celui-ci) et de la scurit des
donnes transmises (cryptage des informations). Rien ne sert de scuriser un rseau cbl si un
simple rcepteur hertzien pourraient pomper toutes les donnes circulant sur le rseau.
Les solutions hertzienne posent des problmes d'environnement que peu de constructeurs signalent.
Il n'y a qu' se promener dans un btiment industriel (en tle) pour se rendre compte que
l'environnement pose quels problmes de liaisons GSM par exemple. Les distances maximales
fournies par les constructeurs parlent de terrains dcouverts, ce qui est rarement le cas dans les
habitations ou entreprises, mme s'il est possible d'installer des antennes externes dans de
nombreux cas. Les environnements perturbs par des champs lectromagntiques (machines
lectriques de fortes puissances) posent les mmes problmes que dans les cblages rseaux
classiques. Souvent, il faudra mlanger des solutions avec cblage rseau et liaison hertzienne.
11.1. Bluetooth
Ce type de liaison sans fils permet de reli deux appareils via une liaison hertzienne. Ces appareils
peuvent tre des appareils photo numriques, des PDA, imprimantes, .. Bluetooth exploite la gamme
de frquence des 2,45 Ghz ISM (Industrial, Scientific & Medical) qui est normalement libre de droit
pour la majorit des pays. Le nombre de frquences distinctes utilises est de 79. Vous pourriez donc
utiliser 79 rseaux diffrents dans la mme pice. Le dbit de la connexion est de maximum 1 Mb/s
pour des priphriques distants de maximum 4 mtres et 75 kb/s pour des distances suprieures. La
distance maximum est de 10 mtres, mais peut atteindre dans certains cas 100 mtres. En effet, la
technologie Bluetooth dfinit 2 catgories de puissances radio-frquence pour les rseaux
personnels, la plage courte (0 dBm) qui autorise des distances jusqu' 10 mtres et la plage moyenne
(+ 20 dBm) qui porte jusqu' 100 mtres. La liaison radio soutient la fois la transmission de donnes
et vocale avec une vitesse maximum de donnes de 72 kb/s, ce qui est en pratique le taux maximum.
Scurise, cette connexion est transparente uniquement si les deux appareils se connaissent. Chaque
priphrique est reoit un code la fabrication sur six octets: les trois premiers dsignant le
constructeur et les trois autres la machine. En effet, chaque appareil bluetooth peut tre dsactiv
pour une connexion automatique ou activ pour seulement certains appareils. Les priphriques
utilisent donc des systmes de protection vitant le transfert de donnes non autorises.
Nanmoins, la scurit est souvent dsactive par dfaut et le piratage est donc possible pour
rcuprer par exemple les donnes du carnet d'adresse d'un GSM ou d'un PDA partir d'un autre
appareil ou utiliser le GSM du voisin pour une connexion INTERNET.
Au sein d'un rseau bluetooth, un appareil sert de matre et jusque 7 priphriques esclaves qui se
partagent la bande passante. Il est possible en thorie de faire communiquer jusque 10 groupes
d'appareils, soit 80 appareils.
Au contraire des liaisons IEEE 802.11, ce type de connexion n'est pas ddi pour les liaisons
rseaux (mme si c'est possible). Il permet par exemple de connecter un PDA ou un GSB directement
un Notebook ou un ordinateur portable.
11.2. IEEE 802.11
Liaison hertzienne utilisant galement la bande de frquence des 2,45 Ghz (ISM). Le dbit maximal
est de 2 Mb/s sur une distance maximum de 100 mtres. Les spcificits un peu vieillottes de ce
standard de rseaux sans fils datent de 1997. Elle n'est plus utilise actuellement.
11.3. IEEE 802.11a
Cette norme opre dans la bande de frquence 5-6 Ghz. Le schma de modulation utilis est le
"orthogonal frequency-division multiplexing" (OFDM). Dans ce type de modulation, le signal est
dcoup et envoy sur plusieurs de frquences diffrentes. Ceci limite les interfrences et rend
possible des vitesses de transmission de donnes allant jusqu' 54 Mb/s (soit environ 6 MB/s), mais
plus gnralement les communications se passent 6 Mb/s, 12 Mb/s ou 24 Mb/s.
La distance maximale entre le point central (qui fonctionne comme un Hub) et les stations est de 366
m 6 Mbps en extrieur et de 91 m 6 Mbps en intrieur. Pour de faibles distances, il est plus rapide
que le 802.11B Wifi.
Cette norme est parfois appele Wifi5. Elle est peu utilise en Europe mais trs implante aux Etats-
Unis.
11.4. IEEE 802.11b - Wifi - IEEE 802.11 HR
Driv du IEEE 802.11 (1999), cette liaison hertzienne utilise la bande de frquence des 2,4 Ghz. Elle
est utilise comme connexion rseau via des cartes rseaux spcifiques et un appareil central appel
point d'accs (Access Point) fonctionnant comme un hub (la bande passante totale est donc partage
entre les diffrents PC. Cette connexion permet un dbit maximum de 11 Mb/s sur un rayon d'une
centaine de mtres mais la porte dpend fortement de l'environnement (murs ou cloisons, ...). Le
nombre de priphrique est limit 10 par stations.
La connexion utilise les 2 couches basses du modle OSI qui servent au transport. Chaque PC,
portable et priphrique inclus une carte rseau de type WIFI avec une antenne. Un concentrateur
(HUB, switch ou mme routeur) sert de point central pour le partage ou ventuellement pour une
connexion vers un concentrateur classique.
La mthode de prise de ligne est de type CSMA/CA, identique aux rseaux Ethernet. Lorsqu'une
station met sur un cble, elle est l'coute de toutes les stations sur le cble, ce qui pourrait ne pas
tre le cas dans une liaison hertzienne. En effet, le fait que 2 stations puissent se raccorder sur le
noeud central n'inclut pas que les stations puissent communiquer directement entre elles si la
distance est trop importante. Pour cela, on utilise le mcanisme de "Virtual Carrier Sense". Une
station voulant mettre transmet un petit paquet appel RTS (Request To Send), qui indique la
source, la destination et la dure de la transmission. La station rpond, si elle est libre, par un paquet
de contrle appel CTS (Clear To Send) qui inclue les mmes informations de dure. Toute les
stations qui reoivent un RTS ou un CTS dclenchent un indicateur de Virtual Carrier Sense (appel
NAV - Network Allocation Vector) pour une certaine dure.
La distance maximale est de 503 mtres 1 Mbps en extrieur et de 152 m en intrieur dans un
mode particulier. Peu de cartes ou de points d'accs sont compatibles avec cette fonctionalit.
Un routeur WIFI peut servir de routeur ou de pont. Il utilise gnralement 2 antennes directionnelles.
Les cartes rseaux sont spcifiques, avec une antenne extrieure.
11.5. IEEE 802.11B+
Le 802.11 B+ est driv du 802.11 B. Il utilise la mme gamme de frquence mais avec des
particularits d'en cryptage spcifiques puisque celui-ci se fait sur 64, 128 ou mme 256 bits. Pour
rappel, les versions actuelles d'Internet Explorer ne cryptent que sur 128 bits. Ce systme permet des
dbits de 22 Mbps, soit le double de 802.11b, en compressantles donnes.
Il est tout fait compatible descendant avec le 802.11B standard. Un priphrique 802.11B+
acceptera donc la connexion avec les priphriques 802.11B. Par contre, ce standard n'a jamais t
rellement normalis. Des appareils 802.11B+ de fabricants diffrents peuvent ne pas tre
compatibles.
11.6. Rseau sans fils 802.11 G
Mme si la normalisation date de mai 2003, quelques appareils sont sortis avant. Les premiers
appareils rellement la norme sont sortis dbut juillet 2003. Cette norme wireless permet des
liaisons 54 Mbps en utilisant la gamme de frquence des 2,4 Ghz (idem que le 802.11 b). Cette
utilisation de la mme zone de frquence devrait permettre de mlanger des points d'accs 802.11 B
et 802.11 B+ (dans la mme marque). Le point central adapte sa vitesse en fonction du priphrique
connect, permettant des clients 802.11 B de se connecter.
La srie How to reprend la configuration d'un routeur 802.11G DI-624
11.7. Wifi 802.11G+
Cette amlioration du 802.11G est sorti dbut 2004 et double la vitesse de connexion des 802.11G
pour atteindre 108 Mb/s en compressant les donnes. Cette vitesse est donc plus thorique que
pratique. Un exemple de configuration d'un pont D-link DWL-2100AP
11.8. IEEE 802.11N
En cours d'laboration en 2006 (version draft), ce norme est seulement normalise depuis 2009. La
vitesse maximum thorique est de 150 (version N-150) 300 Mb/s (version N-300) pour 54 Mb/s en
802.11G. Cette vitesse est celle de transport et ne tient pas compte des codes de contrles, cryptage,
... inclus dans le message. En pratique, le dbit effectif est compris entre 100 et 200 Mb/s.
Le 802.11N utilise le MIMO (Multiple Input Multiple Output) qui permet d'envoie et rceptionne en
utilisant trois antennes simultanment. En modifiant le positionnement des 3 antennes du point
d'accs comme de la carte rseau, on augmente la distance maximum (mais toujours sous les 100
mtres). Cette solution ne permet pas non plus de "passer les murs" mais permet dans certains cas
de les contourner.
Le 802.11N utilise en mme temps la bande de frquences 2,45 Ghz - ISM et la bande des 5 Ghz
(utilise par le 802.11a). 8 canaux peuvent tre utiliss (23 ou 3 est le nombre d'antennes) pour un
seul dans les autres connexions.
11.9. Wimax
Le Wimax (Worldwide Interoperability for Microwave Access) est une connexion sans fils haut dbit
et longue distance. Elle autorise un dbit de 70 Mb/s sur maximum 50 km. C'est une liaison point
point. Cette solution est en cours d'implantation en Belgique (2008) et en France depuis fin 2006,
mais peu suivie car en concurrence avec le rseau 3G bas sur les transmissions GSM.
Ce n'est pas un WIFI, il n'utilise pas la gamme de frquence ISM (libre d'utilisation) et une
autorisation pralable est obligatoire. Diffrentes versions sont utilises:
La version 802.16a permet une distance de 20 Km maximum avec un dbit maximum de 12
mb/s. La bande de frquence utilise se situe entre 2 et 11 Ghz. Elle est obsolte.
Sortie en 2004, la norme 802.16d atteint les distances de 50 km. C'est cette norme qui est
actuellement commercialise pour les connexions Internet.
La version 802.16e sortie en 2005 transpose le Wimax pour la tlphonie mobile avec un taux
de transfert de 30 Mb/s pour une distance de 3 km maximum. C'est un des deux systmes 4G avec
LTE. Cette solution commence remplacer les connexions 3G actuelles (dbit de 400 700 Kb/s) fin
2012. La plage de frquence se situe entre 2 et 6 Ghz.
La version 802.16f permet des accs partir de plusieurs points diffrents (topologie
maille).
802.m est en cours d'laboration avec des vitesses 100 Mb/s.
Le Wimax utilise le multiplexage OFDM (Orthogonal Frequency Division Multiplexage) qui utilise
plusieurs plages de frquence diffrentes en mme temps, sparant les applications.
11.10. Connexion infra-rouge.
Ce type de connexion va disparatre et remplac par des connexions hertzienne vues plus haut. Le
premier problme de ce type de connexion vient de son mode de fonctionnement, la lumire. Les
appareils connects doivent tre parfaitement en face l'un de l'autre, ce qui n'est pas toujours aiss.
De plus, de nombreuses solutions ont t proposes. Mme si la liaison IrDA (install dans les
imprimantes HP990CXi par exemple) a pris plus d'ampleur que les autres liaisons, cette multitude de
systme fortement rduit le champs d'activit.
La liaison infra-rouge IrDA permet une connexion de 1 mtres pour une vitesse maximum de 16 Mb/s
11.11. Scurit des rseaux sans fils.
Et oui, si vous pouvez vous connecter sur votre rseau sans connexion physique jusque une certaine
distance, d'autres le peuvent aussi. Pour viter que d'autres ne mettent leur nez dans votre rseau
ou utilisent votre bande passante pour tlcharger de la musique ou autres exploits de hackers en
herbe, votre connexion sans fils doit tre scuris.
Le premier protocole de scurisation utilis est le WEP (Wired Equivalent Privacy). Il date de 1999 et
ses caractristiques sont relativement faibles. WEP est implant par dfaut dans les anciens routeurs
ADSL mais facilement dcodable par de petits outils logiciels. Il utilise une cl connue des deux points
de connexion de longueur fixe sur:
64 bits (WEP64). 24 bits utiliss par le cryptage suivis de 40 bits pour la cl (10 chiffres en
hexadcimal).
128 bits (WEP128). 24 bits pour le cryptage, les 104 bits suivants pour la cl (26 chiffres en
hexadcimaux)
256 bits (WEP256), 24 pour le cryptage et 232 bits pour la cl (58 en hexadcimal), rarement
utilis, remplac par WAP ci-dessous
La solution suivant en 2003 passe par le protocole de scurit 802.11i. Les retards pris par
l'laboration de la norme ont conduit l'utilisation du WPA (Wi-Fi Protected Access), une version
allge avec un cryptage de 128 bits. Dans ce cas la cl n'est plus fixe mais peut tre directement une
phrase.
Deux mthodes sont utilises:
dans la version standard implante dans les points d'accs du commerce, une cl est connue
de tous les quipements devant rentrer en communication. On parle WPA-PSK (Pre-Shared Key). Plus
scurise que le WEP, elle est aussi dcryptable via des logiciels gratuits.
Le mode TKIP (Tempory Key Integrity Protocol) utilise un protocole supplmentaire associ
un serveur (gnralement utilisant Radius), qui utilise une cl alatoire combine une phrase
connue des deux quipements. Lors de la premire communication (si la cl utilisateur est correcte),
la cl alatoire est envoye en clair. Dans les communications suivantes, cette deuxime cl sur 48
bits (on parle de vecteur d'initialisation) va tre non seulement chiffre mais galement modifie
jusque plusieurs fois par seconde. C'est la version WPA entreprise.
La norme 802.11i est associe au protocole WPA2 mais est peu installe dans les quipements sans
fils standards. Ici aussi, les deux modes existent. Comme diffrence par rapport la premire version,
le cryptage est pass sur 256 bits et la mthode de chiffrement a t compltement modifie. Cette
solution pose encore de nombreux problmes d'interconnexion entre quipements en absence de
normalisation complte du WPA-2.
Deux autres mthodes sont utilises. La premire est de cacher le SSID du rseau. Comme le point
d'accs n'met pas de nom, celui-ci doit donc tre connu de l'ordinateur pour pouvoir se connecter.
Intressant puisque les personnes extrieures ne dtectent mme pas un rseau sans fils, mais peut
tre dtect par diffrents logiciels ou mme Seven et Vista mais sans connatre le nom utiliser.
La dernire mthode passe par un filtrage par adresse MAC des cartes rseaux. Seules les cartes
rseaux (et donc les ordinateurs) dont l'adresse MAC est reprise dans la liste sont autorises se
connecter. C'est la solution de scurit la plus sre actuellement, surtout lorsqu'elle est utilise en
mme temps que les autres mthodes ci-dessus.


12. Protection lectrique, onduleur, ...
12.1. Introduction - 12.2. Fonctionnement d'une alimentation dcoupage - 12.3. Perturbations du
rseau lectrique 12.4. Les disjoncteurs - 12.5. Onduleur - UPS (Uninterruptible Power Supply)
Le rseau lectrique europen est aliment en 230 V alternatif (ventuellement comme nous l'avons
vu en premire du 230 ou 380 V triphas). Par contre, les appareils informatiques sont aliments en
basses tensions continues (gnralement compris entre + 12 et -12V). Pour transformer la tension
d'alimentation du rseau lectrique en tension acceptable par les appareils lectroniques, on utilise
une alimentation.
En premire dans le chapitre sur les bases d'lectricit et lectronique, nous avons vu un montage
alimentation par pont redresseur. Les alimentations utilises en informatique utilisent la technologie
"A dcoupage". Ce principe est non seulement adapt aux alimentations, mais galement aux UPS
(onduleur en Franais). Les alimentations conventionnelles ont gnralement un rendement proche
de 50 % pour jusque 80 % pour les alimentations dcoupage. Le rendement (le rapport entre la
puissance consomme et la puissance rendue en continu) de ces alimentations par pont redresseur
(4 diodes) aprs passage par un transformateur est trop faible.

12.2. Fonctionnement d'une alimentation dcoupage.
Avant de commencer, deux remarques s'imposent:
1. Au prix d'une alimentation PC, la rparation n'est rentable (aussi en temps)
2. Les pices sont difficiles trouver. La technique de rparation est plus spcifiques aux vrais
lectroniciens qu'aux techniciens informatiques. De ce fait, les rparations ventuelles sont difficiles
raliser (sinon impossibles). En plus, les prcautions en ouvrant ces appareils sont de types "si tu
met le doigt l, c'est du 230 V alternatif, l c'est du 380 continu, ..." Bref, si vous n'avez pas de
connaissances srieuses en lectronique analogique (transistors, haute tension). ATTENTION!
Prenons le schma suivant.

La tension de dpart est alternative en 230 V, elle est redresse directement par un pont de diodes
dit de Pont de Graetz sans transformateur intermdiaire, coupl avec un condensateur (230 V en
continu, 330 V en pointe sans le condensateur). Le composant suivant est un transformateur: un
transformateur parcouru par un courant continu au primaire ne produit aucun signal au secondaire.
Par contre, si vous faites passer une tension alternative au primaire d'un transformateur, il en ressort
au secondaire une tension de mme forme mais de valeur diffrente (une division suivant le rapport
nombre de bobines entres / sorties). A quoi peut donc bien servir ce transformateur?
En srie avec le transformateur, on insre un transistor qui va dcouper la tension, permettant une
tension discontinue au primaire du transformateur. La base du transistor (la gchette en technologie
CMOS) est relie au secondaire du transformateur via un circuit de commande, pour la majorit des
modles via un autre transformateur (sparation galvanique servant de protection). Ceci vite des
problmes en cas de sur-tensions sur le rseau lectrique.
A l'allumage, le rseau lectrique n'est pas continue (le temps de charger le condensateur mais aussi
les imperfections de l'interrupteur). Cette tension va d'abord alimenter le circuit de commande qui
va commencer faire hacher la tension continue aux bornes du transformateur.

Plus la proportion de hachage va tre grande sur la gchette du transistor (ou base dans le cas d'un
transistor bi-polaire), plus la tension en sortie va tre grande. Le circuit de commande va faire varier
ce dcoupage en fonction de la tension de sortie de l'alimentation et ainsi rguler cette tension.
Comme le pont est directement sur le 230 V alternatif, considrez que la moiti du montage est sous
230 V. Le signal d'entre est une tension redresse (continue), ce montage lectronique permet
galement de dmarrer directement d'une tension continue (batteries, panneaux voltaques, ...).
12.3. Perturbations du rseau lectrique.
Reprenons notre signal alternatif de base.
1. Coupure complte du courant provoque gnralement par un problme de rseau
lectrique ou d'un disjoncteur.
2. Surtension, la tension du rseau est suprieure la tension pour laquelle les alimentations
sont conues (pensez aux diodes d'entres). Ceci est spcifiques aux installations proches des cabines
lectriques "haute tension". Mme si une surtension n'est par forcment dangereuse pour les
installations informatiques (dans des valeurs raisonnables), cette perturbation provoque des
contraintes des composants de l'alimentation qui, terme, provoquent les pannes.
3. Sous-tension, la tension est infrieure celle pour laquelle les alimentations sont conues et
l'alimentation ne sait plus fournir une tension suffisante en sortie. Dans le cas des alimentations pour
PC, elle descendent au moins jusque 180 V. Une sous-tensions est gnralement provoqu par une
augmentation soudaine de le consommation lectrique sur le rseau par le dmarrage de dispositifs
lectriques lourds: moteurs, compresseurs, ascenseurs, ... mais galement par une distance trop
importante par rapport la cabine haute tension. Ce problme lectrique peut provoquer des
blocages et crash inattendus. Elles rduisent galement la dure de vie de l'ordinateur.
4. Transitoires. Signaux parasites de haute frquence qui se superposent sur le signal
lectrique, elles peuvent aller jusqu' 4000 Volts, mais sont plus faibles gnralement.
5. Micro coupures. De faibles coupures du signal lectrique durant quelques millisecondes.
6. Pics de tensions: surtensions de dure trs faible (infrieure 1/120 seconde), mais de forte
intensit (suprieure 4000 V), gnralement dus l'arrt de machines lectriques de fortes
puissances (moteurs, climatiseurs, quipements industriels, ...) qui dissipent la tension excdentaire
sur le rseau. Ici aussi, on assiste une usure des composants.
7. Foudre, aussi une surtension. La foudre vient de phnomnes mtorologiques (orages) qui
transfre de fortes tensions sur le rseau lectrique mais aussi tlphonique. Une forme de foudre
remonte de la terre, lie la gologie du sol et donc une zone gographique limite, sans relles
solutions de protections, mme si la proportion est faible, moins de 1% des cas.
Comment va se comporter notre alimentation dcoupage dans ces cas:
En cas de panne complte du rseau, plus d'alimentation.
En cas surtension (jusqu' 280 Volts), l'alimentation dcoupage va rguler la sortie mais
avec des contraintes pour les composants lectroniques.
En cas de transitoires, le redressement au primaire va rduire les effets, mais le
transformateur ne servira pas de tampon, il va juste rduire la tension. Le condensateur et la self de
lissage au secondaire vont juste les attnuer. Elles provoquent gnralement des blocages de cartes
mres avec les alimentations ATX actuelles. C'est identique pour les pics de tensions.
En cas de micro-coupures, les diffrents condensateurs vont servir en partie de rserves
d'nergies.
En cas de foudre, l'alimentation tombe gnralement en panne mais peux aussi dtruire
d'autres composants de l'ordinateurs.
Ces diffrentes perturbations lectriques ne sont analysable que par des appareils professionnels
que l'on appelle perturbographes.
12.4. Le disjoncteur
Ces appareils protgent uniquement des surtensions (y compris la foudre). En cas de surtensions, ils
dconnectent les appareils du rseau lectrique. Les moins chres doivent tre remplacs aprs une
seule surtension importante, les autres permettent une remise zro.
Bref, ce n'est pas forcment la solution pour des installations professionnelles, juste un premier
niveau de protection.
12.5. UPS - onduleur
Un UPS (Uninteruptible Power Supply, onduleur en Franais) inclut des batteries qui alimentent les
appareils connects lors d'une coupure de courant, dconnectent les appareils du rseau en cas de
sur-tension / foudre et rgularisent la tension du rseau. Trois schmas sont utiliss:
On-line
Line-interactive
Off-line.
Les UPS actuels se connectent avec un logiciel l'ordinateur via un port USB (srie pour d'anciens
modles), ce qui permet d'teindre le PC proprement (y compris sauvegarde de donnes) en cas de
coupure prolonge. Les onduleurs permettent typiquement une alimentation de 10 minutes, le
logiciels coupe l'ordinateur au minimum avec une scurit de 5 minutes mais c'est paramtrable.
Certains BIOS permettent de redmarrer le PC lorsque la tension est rtablie.
La puissance d'un UPS est donne en VA (Volts - ampres). L'quivalence pratique avec la puissance
en Watts est de 1,6. Par exemple, une consommation de 350 Watts ncessite un onduleur de 350 X
1,6 = 560 VA. Une station standard consomme dans les 300 Watts. Ceci conditionne le choix de la
puissance. En cas de sous puissance de l'appareil de protection, il sera endommag ou disjonctera en
cas de coupure. Les imprimantes laser ne doivent pas tre protges, cause de la brusque
consommation de courant lors du dbut d'impression.
Reste les batteries- accumulateurs. Elle sont gnralement au plomb avec une tension de service de
12 Volts continu, parfois connectes en srie pour atteindre 24 Volts et en parallle pour augmenter
la dure d'alimentation (charge plus importante). Ces batteries doivent tre compltement
dcharges rgulirement, ceci pour viter l'effet mmoire de recharge, tous les 6 mois en moyenne.
C'est identique pour les ordinateurs portables, GSM, ...
Certains UPS incluent des protections pour les cbles Ethernet et lignes tlphoniques.
12.5.1 Onduleur Off-line

Rgulation de tension
Schmas de fonctionnement d'un onduleur Off-line En noir, l'volution du rseau lectrique, en
vert la tension de sortie du l'onduleur.
Les modles Off-line sont les plus courants et utiliss pour les ordinateurs individuels, les puissances
varient de 420 800 VA. Le rseau lectrique est spar de l'appareil par un relais qui s'ouvre en cas
de sur ou sous tension. En fonctionnement normal, le signal d'entre est filtr pour liminer une
partie des parasites et le convertisseur charge les batteries.
En cas de coupure du rseau lectrique ou si la tension est infrieure 176 Volts ou dpasse les 280
Volts, le relais s'ouvre, dissociant le montage du rseau lectrique. Le convertisseur recre la tension
de sortie partir de l'nergie des batteries. Le temps de raction du relais est relativement lev
(quelques millisecondes) et cette technique ne corrige pas les micro-coupures.
12.5.2. Onduleur Line Interactive.
Similaires aux off-line, ces onduleurs intgrent en plus un booster qui permet d'injecter une tension
supplmentaire en cas de variations de tensions, mais surtout de baisses prolonges. Le circuit de
compensation va juste "booster" la tension de sortie pour des tensions d'entres entre 176 Volts (le
minimum) et 205 Volts , diminuant les contraintes de l'alimentation des quipements protgs. Pour
des tensions d'entres infrieures 176 Volts ou suprieur 280 volts, le fonctionnement est
identique aux modles off line.

Schmas d'un line-Interactive Rgulation de tension

12.5.3. Onduleur On-Line

Le fonctionnement d'un onduleur On-Line est nettement diffrent. La tension d'entre est
systmatiquement redresse et alimente en permanence les batteries: la tension est donc stable.
Cette tension de 12 ou 24 Volts est ensuite retransforme en tension alternative de 230 Volts en
sortie.
Lors d'une coupure de tension du rseau lectrique, les accumulateurs vont assurer l'alimentation
lectrique des quipements connects via le convertisseur continu / alternatif. Si l'alimentation du
rseau passe en sous tension ou en cas d'une courte baisse de tension, la source d'alimentation
utilise va tre le rseau lectrique aid par la charge des batteries, les deux sont donc utilises
simultanment, augmentant la dure de la protection, la diffrence des autres types d'UPS). Seul
problme, les accumulateurs au plomb sont pratiquement utiliss en permanence, et finalement
remplacer plus souvent (les batteries reprsentent quasiment 2/3 d'un prix d'un onduleur).
Gnralement, ces modles utilisent deux circuits de by-pass. Le premier permet d'alimenter les
ordinateurs sans passer par l'lectronique de l'onduleur, utilis lors du remplacement des batteries
ou lors d'une rparation de l'onduleur. Le deuxime by-pass est similaire aux off-Line et augmente la
dure de vie des batteries.
12.5.. Comparaison des protections
Les couleurs utilises dterminent les risques en fonction des problmes du rseau lectrique.
Tension d'entre Disjoncteur Off-line Line Interactive On-line
<180V plus d'alimentation relais ouvert, alimentation uniquement par les batteries
Alimentations par les batteries et le rseau
180 - 220 V Fonctionnement normal fonctionnement via le rseau lectrique
Alimentation via le rseau lectrique, aid par le booster pour des tensions comprises entre
176 et 205 volts. Alimentation par le rseau et les batteries si ncessaires
220 - 240 V Fonctionnement normal
240 - 280 V Fonctionnement normal Alimentation via le rseau. Alimentation par le
rseau
>280 V Coupure brusque Fonctionnement par batterie.
Haute tension, foudre Coupure brusque Fonctionnement par batteries, attention au dlais
d'ouverture du relais. Alimentation par batteries et coupure du disjoncteur (remise zro
obligatoire)
Pic de courte dure Aucune dtection Protection partielle totalement protg
Micro-coupures
La protection lectrique reste un compromis entre le prix des appareils de protection et l'importance
du matriel protger. La scurit d'un serveur informatique d'entreprise ncessite au minimum un
onduleur online, alors qu'un ordinateur personnel se contentera probablement d'un disjoncteur.
L'arrt d'une heure de production revient nettement plus chre que le prix d'un UPS. Attention, Vous
ne pouvez pas mettre d'onduleur pour protger une imprimante laser. Dans ce cas, la seule
possibilit de protection lectrique est le disjoncteur.


14. Technologies alternatives rseaux informatiques
14.1. Introduction - 14.2. Technologie IPP - 14.3. Connexion Ethernet par rseau lectrique - 14.4.
Voice over IP
Sont rassembles ici un ensemble de technologies hardwares qui sont plus ou moins en cours de
conceptions et d'autres technologies difficilement classables dans les autres chapitres.
14.2. Technologie IPP
Cette technologie permettra d'imprimer via Internet. Elle est dveloppe depuis 1996 conjointement
entre diffrents fournisseurs d'imprimantes (HP, Novell, Microsoft, Xerox, Lexmark). Elle utilisera
selon les derniers dveloppements le port NetBios 631 au lieu du port tcp 80 utilis par HTTP.
Les dveloppements actuels penchent galement sur une adresse imprimante de type "ipp://... au
lieu de http://www.... cette technologie permettra non seulement d'imprimer distance via Internet,
mais galement d'assurer certaines tches administratives sur ces imprimantes ou mme d'imprimer
distance un site Web.
14.3. Connexion Ethernet par courant porteur de ligne (CPL).
Le rseau le plus courant est le rseau lectrique en 230 V. Plusieurs tentatives ont ou sont en cours
de dveloppement pour faire passer les informations digitales (rseau informatique) via ce lignes,
notamment les connexions INTERNET avec plus ou moins de succs. Par contre, diffrents fabricants
proposent depuis dbut 2003 des solutions de rseau interne via le rseau lectrique (en
concurrence avec les rseaux sans fils).
Avec le chapitre 12 du cours hardware 2, nous avons fait un tour du rseau lectrique. Avant
d'tudier quelques possibilits, voyons quelques contraintes du rseau de distribution lectrique.
Quelques rappels:
Le rseau domestique dans une habitation est en 230 V monophas en Europe. Par contre, le rseau
lectrique extrieur est en triphas (3 phases ou 3 phases + neutre). En prenant 2 fils, on obtient le
rseau monophas. Pour que le signal soit propag d'un point l'autre, il faut que les 2 points soient
sur la mme phase. Vous pourriez donc communiquer avec une maison plus de 100 mtres et ne
pas pouvoir atteindre une autre pice chez vous si elle est sur une autre phase lectrique. C'est le
mme problme avec les appareils pour surveiller les enfants en bas ge de type "baby phone".
Pour transporter le courant lectrique sur de longue distance, la tension lectrique est augmente
pour rduire les pertes d'nergie. C'est ce qu'on appelle les lignes haute tension qui dpassent les
5000 V. Pour passer de la tension 230 V la haute tension, et vis et versa, on utilise un
transformateur. Ces transformateurs rduisent (ou augmentent) les signaux parasites et les signaux
digitaux en mme temps que la tension du rseau. En plus, de par l'effet de self d'un transfo, la
forme des signaux est modifie. Ceci explique les problmes des liaisons Internet par rseau
lectrique rencontrs actuellement en dveloppement chez EDF en France.
Avec le chapitre sur les protections rseaux lectriques, nous savons galement que celui-ci est
parcouru par de nombreux parasites. Dans les milieux "usine", cette solution risque de poser de
srieux problmes.
14.3.2. Connexion Internet.
EDF en France notamment dveloppent un accs large bande INTERNET via le rseau lectrique. Le
problme majeur qu'ils tentent de rsoudre vient de la modification (perte) du signal lors du passage
travers les transformateurs dans les cabines "haute tension". Cette solution est limite pour un
village ou un immeuble.
14.3.3. Ethernet via rseau lectrique (CPL).
Cette solution existe dj en Belgique depuis 2003. De la mme manire que la modulation des
modems, le signal est modul sur la frquence du rseau lectrique. Les contraintes lies au
transformateurs sont galement de mise. Le problmes des phases du rseau est le deuxime
problme. Par contre, cette solution est la plus facile pour relier deux pices d'un mme btiment ou
mme entre deux btiments pas trop loigns: surtout lorsque les rseaux Wifi ne sont pas possibles
(tolles mtalliques, dalle de bton avec treillis mtalliques, murs pais, ...). Cette solution engendrent
nanmoins de fortes perturbations lectromagntiques dans les ondes courtes et peut provoquer
des perturbations sur d'autres quipements lectriques.

La liaison Ethernet travers le rseau lectrique (Ethernet Over Power Line) utilise des appareils
spcifiques que se chargent du transfert des signaux via la ligne lectrique. De l'autre ct, l'appareil
est muni d'une liaison Ethernet classique 10/100 qui se connectent sur les carte rseaux des PC,
Hubs, switch, ...
Le dbit maximum de ce type d'installation est de 14 Mbps pour les versions courantes, soit un peu
plus que le Wifi 802.11B 10 Mps, 200 Mbs et jusqu' 500 Mps pour les plus rapides, ce qui permet
de raccorder des cartes Ethernet Gigabit pour le VOIP ou les signaux TV. La distance maximum est
actuellement limite 200 mtres.
La mthode de communication utilise une modulation de type OFDM (Orthogonal Frequency Division
Multiplexing) dj utilise dans la norme 802.11a. Cette technologie intgre de nombreuses
fonctions, comme la gestion de la QoS (classes de priorit, contrle de la latence, et adaptation des
taux de transmission au temps de propagation d'un paquet).
Cette solution permet via d'autres appareils de relier directement via le port USB des PC ou via une
carte Ethernet standard.
La scurisation de la connexion se fait par programmation logicielle et / ou par un bouton poussoir
sur chaque adaptateur
14.4. VoIP, Voice Over IP
Au dbut des rseaux, les liaisons ont utiliss les fils tlphoniques. Juste retour des choses, les
liaisons rseaux vont accepter les liaisons tlphoniques et, en gnral, la voie sur des rseaux
TCP/IP.
Une distinction avant de commencer. Il faut imprativement dissocier le VoIP et ToIP. Dans le
premier cas, le rseau Ethernet permet de faire transiter la parole. Dans le deuxime cas, des
logiciels permettent de "tlphoner" via le rseau INTERNET. Le ToIP est donc plus li aux logiciels
qu' l'infrastructure rseau.
L'avantage est surtout li aux communications grande distance (via Internet). Nanmoins, cette
solution fonctionne galement sur le cble rseau interne de l'entreprise avec une communication
vers des oprateurs utilisant un central tlphonique particulier sur le site de l'entreprise
(permettant de connecter des tlphones au sein de l'entreprise), faisant transiter le signal TCP/IP
voice sur le rseau Internet pour le rinjecter sur soit une autre connexion Voice / Over IP, soit
comme une communication tlphonique normale. Le VOiP utilise des tlphones (et des centraux
tlphoniques) particuliers.
La technologie volue actuellement avec des corrections, notamment au niveau des pertes de
paquets, problmes d'cho, temps de transfert de la voix ou mme des variations de dlais entre les
diffrentes parties du signal sonore, ce qui rendait parfois le message incomprhensible.
Plusieurs protocoles sont actuellement utiliss:
H 323: le standard actuellement le plus rpandu mais ne garanti pas une qualit du service.
Cette technologie (hardware et software) est notamment utilise par Netmeeting de Microsoft.
SIP (session Initiation Protocol): nouveau standard plus proche du monde informatique que
de la tlphonie, les messages sont de format similaire une application texte (comme la navigation
HTTP). Ceci garantit une meilleure qualit de rception du signal. Ce protocole permet galement
une meilleure implantation dans les programmes.
SIP est constitu de 8 routines: Invite, Register, Bye, ack, cancel, options, subscribe et notify. Coupl
XML, il mne un sous-potocole IPTML (IP Terminal Markup Language). L'ensemble des 2 devrait
permettre de rassembler des textes, sons, vidos dans un mme transfert de donnes.

Le lecteur ne doit donc pas trop penser en terme de communication Internet, mais bien en terme de
connexion tlphonique transitant sur Internet.

16. Switch Manageable DGS 1216T

Donn titre d'exercice, ce chapitre va nous permettre d'tudier d'un peu plus prt les switchs
manageables (administrable) de layer 2, 3 ou 4 (le type 4 est plutt une dnomination commerciale
des switchs qu'une similitude avec le modle OSI).

La configuration se fait via une interface de type Web, les anciens modles utilisaient galement une
connexion RS232-Telnet. La fentre Internet permet l'administration, la sauvegarde ou la
restauration des paramtres, ... Toutes ces possibilits permettent finalement d'ajuster les
performances et la scurit du rseau.

Les possibilits de ces switch permettent notamment:

grer les communications sur chaque port. Par exemple, ils peuvent interdire les communications
entre un groupe de ports et un autre groupe. Ceci permet notamment d'interdire une partie des
ports Ethernet (et donc des quipements) vers un port spcifique pour interdire l'accs Internet en
interdisant la communication vers le routeur ADSL.

Interdire les communications entres certaines adresses IP.

Crer des groupes d'utilisateurs via le protocole IGMP.

Grer la qualit du cblage rseau en affichant les statistiques de collisions sur chaque port.

Ils sont dits de layer 2 (niveau) s'ils permettent de dterminer les adresses IP, de niveau 3 s'ils
permettent de bloquer les ports TCP et / ou UDP). Les Layer 4 utilisent la couche 4 du modle OSI
(mme s'il ne la suivent pas correctement et permettent de bloquer certaines applications en
analysant les trames). C'est la mthode hardware pour bloquer les applications.

Avant de configurer et d'analyser un appareil de layer 2, quelques petites remarques concernant
trois types d'quipements:

un firewall hardware et un switch administrable de layer 3 permettent de bloquer des applications
via des ports. Si le programme essaye de passer par un port bloqu, il n'y aura pas de
communications.

par contre, un firewall hardware va dtecter les modifications de trames (content Filtering).

un routeur va permettre de transmettre les communications entre des rseaux de classes
d'adresses diffrentes en utilisant le NAT ou le PAT, pas un administrable.

16.1. D-Link DGS-1216T

L'appareil que nous allons utiliser est un DGS 1216T de marque D-Link. Il est de layer 2 (soit la plus
faible) et intgre 16 ports Gigabit, 2 ports combo SFP (mini GBIC) pour extensions ventuelles, l'auto
MDI/MDIX et diffrentes fonctions spcifiques comme le Ports trunking pour relier des switchs entre
eux. Il est bien sr montable en rack 19". C'est un quipement plutt utilis dans les PME que dans
les gros rseaux, mme s'il intgre de nombreuses possibilits.

La configuration se fait via une interface Web. Un programme d'installation est galement fourni
avec, notamment pour dtecter son adresse IP ncessaire sa configuration.

L'installation du logiciel va d'abord permettre de dterminer son adresse IP. Une fois l'quipement
dtect, la fentre va nous permettre via la commande configuration Setting de modifier les
paramtres IP. L'adresse IP choisie doit tre dans la mme plage que l'ensemble du rseau, ou au
moins que le PC connect si vous travaillez en adresses IP fixe.

Une fois cette configuration effectue, vous pouvez accder la configuration du switch manageable
DGS-1216T via votre navigateur prfr ou en utilisant le bouton Web Access dans la fentre de
configuration. L'affichage de dpart donne un rsum de la configuration de l'quipement.

Un rapide aperu des menus nous donne:

Ports, permet de configurer la vitesse des diffrents ports, ainsi que le Flow Control (enabled
permet de rduire les pertes de donnes) ou la priorit du port par rapport aux autres (QOS)
802.1Q VLAN qui permet d'associer des groupes de machines. Les connexions dans le mme
groupe ont accs entre eux, pas les autres. Ceci permet de totalement dissocier deux rseaux Lan.
le trunking qui permet de crer un regroupement de plusieurs switch, notamment les tables de
correspondance port / adresse IP connecte.
mirror setting permet de renvoyer une copie de toutes les donnes transmises vers un port vers un
autre port, notamment utilis lorsque l'on utilise un analyseur.
Le spanning tree protocol (aussi appel STP) est un protocole rseau (norme 802.1d) permettant
de dfinir un chemin de remplacement si la connexion principale est coupe. La connexion
configure ne se met en fonction que si il y a une panne sur la premire route, vitant les connexions
de boucles (plusieurs chemins possibles).
SNMP, permet la gestion simple d'un rseau
Jumbo Frame permet d'accepter ou non les trames Ethernet avec un MTU suprieur 1500 bytes
(octets), taille maximum en Ethernet 10/100 mais qui peuvent tre dpasss dans le Gigabit (9000
maximum).
QoS est li aux niveaux de priorit des ports vus plus hauts.
Status affiche la configuration de dpart comme lors de la connexion.
Statistic permet d'afficher les erreurs de transmissions par ports.


17. Exercice: connexion routeur - firewall hardware avec un modem ADSL RJ45.
17.1. Modem ADSL Tornado Copperjet 812 - 17.2. Routeur - Firewall Hardware - Switch - 17.3.
Paramtrage rseau et INTERNET des PC connects - 17.4. Quelques exemples de tentatives
d'intrusions et autres.
Sans la pratique, la thorie ne sert pas grand chose (et sans thorie, la pratique devient rapidement
incomprhensible). Cet exercice de partage de connexion reprend la connexion et le paramtrage
d'un routeur - firewall matriel avec un modem ADSL RJ45 (un routeur utilis comme pont, simple
modem ADSL), le tout connect un rseau Ethernet. Cette installation professionnelle scurise est
rserve aux entreprises. La formation INTERNET reprend plusieurs chapitres sur le partage de
connexion INTERNET (mthodes, modem USB, routeur / modem).
Si vous achetez un modem directement votre fournisseur d'accs, pas de problme, il est configur
grce un fichier spcifique. Par contre, si vous achetez un appareil l'extrieur, vous devez
pratiquement rinventer la roue, sans support technique. Les trucs donns ici serviront (je l'espre)
faciliter la vie pour d'autres connexions ADSL. Les paramtres Internet donns ci-dessous sont
spcifiques au fournisseur d'accs SKYNET (belgique), Paramtres de connexion reprend ces
paramtres pour divers fournisseurs d'accs
17.1. Le modem - routeur ADSL
Le modem ADSL RJ45 utilis ici intgre un routeur. Deux modles de connexion sont proposs: en
rseau Ethernet.
Soit connexion rseau avec un HUB (ou un switch). L'appareil est alors utilis comme routeur
ADSL et permet directement le partage de la connexion Internet.

Soit, connexion directement sur un PC munis d'une carte rseau Ethernet 10 (ou 100). Dans
ce cas, l'appareil est utilis comme modem ADSL.

Nous utiliserons une connexion similaire la deuxime solution. Le deuxime appareil (un firewall -
routeur Hardware) ci-dessous servira lui de routeur et le routeur Tornado sera utilis en "mode Pont"
(finalement comme simple modem). Remarquez la diffrence de connexion au niveau du cble RJ45.
Dans le cas d'un PC, on utilise un cble crois RJ45. Dans notre cas, comme il s'agit d'un router et non
d'un HUB, nous utiliserons galement un cble crois.
Les modems TORNADO sont solides mais ont systmatiquement une documentation complexe et ...
une configuration l'aide d'un logiciel spcifique. Ceci pose souvent des problmes avec les
nouveaux systmes d'exploitation (programmes incompatibles). Le modem ADSL doit tre
directement connect sur une carte rseau pour tre configur. L'installation du programme est la
porte de n'importe quel amateur informatique. Aprs l'installation, on retrouve 2 logiciels: un de
configuration et un moniteur. Vous pouvez vrifier par le moniteur la version dur firmware.
Comme se modle ne peut tre paramtr qu'en connexion directe, commenons par celui-ci.

L'utilisation de ce modem ncessite le chargement d'un profile (un fichier spcifique). Cliquons sur
Edit/new profile pour crer un tel profile. Une fois le fichier enregistr, la fentre suivante apparat.
Voici tous les modes d'utilisation de ce modem. Nous les verrons tour de rle, avec chaque fois
l'utilisation et les configurations.
17.1.1. mode bridged (pont)
Ce mode pont permet la connexion du modem comme passerelle. Dans ce mode, nous n'utilisons
que la partie modem du routeur, toutes les autres fonctions sont deseabled (login et mot de passe,
NAT, firewall ventuel, ...). Dans la fentre, nous rentrons:
1. l'adresse IP Lan: dfinie par l'utilisateur dans la classe 3 des adresses IP, soit de 192.168.0.0.
192.168.255.255. Ceci correspond la plage des adresses rseau internes. Dcidons par exemple
192.168.1.2.Nous reprendrons cette adresse dans tous les cas suivants.
2. Subnet mask: masque de sous-rseau. Dans la majorit des cas, ce masque est 255.255.255.0
3. L'adresse gateway, est l'adresse de la passerelle, typiquement celle du routeur: Prenons
192.168.1.1.
4. VPI / VCI. Premier problme, ces donnes sont rarement fournies: paramtres de connexion.
5. PCR (Peek Cell Rate). Ce nombre doit tre compris ici entre 0 et 500.000. Ceci reprsente la vitesse
maximale, je tape 500000. Remarquez que dans un autre routeur, la valeur par dfaut tait 864000.
6. Packet Filter: filtrage des donnes, soit aucun (par dfaut), soit laisse passer uniquement les
packets PPP (Forward), soit uniquement les IP. Laissez par dfaut dans la majorit des cas.
Laissez les autres paramtres par dfaut.
7. DNS relay doit tre l'adresse TCP/IP du modem en cas de bridged., mais elle n'est pas ncessaire
dans ce mode
17.1.2. mode Routed, modem install sur un HUB.
Ce mode permet de faire un pont entre un rseau local et un rseau WAN adresse IP fixe.
Les paramtres sont pratiquement identiques, sauf que:
Vous devez spcifier l'adresse Wan (Internet). Dans le cas d'une liaison ADSL avec adresse TCP/IP
fixe, c'est le mode de travail.
Vous pouvez galement utiliser dans ce cas le modem en serveur DHCP (configuration adresses
TCP/IP automatiques). Les donnes sont identiques au mode bridged pour le reste.
17.1.3. Mode PPPoA.
Ce mode PPPoA et le suivant PPPoE servent une connexion Internet directe (cas o le modem est
directement connect sur une carte rseau. En Europe, le mode PPPoE et le mode PPoA peuvent
tous deux tres employs. Ceci dpend du fournisseur d'accs. En thorie, le mode PPPoE est utilis
par les modems RJ45, les PPPoA pour les modem USB.
Une grosse diffrence par rapport aux modes prcdents, vous devez ici taper le login et le mot de
passe fournis par le fournisseur d'accs. Pour rappel, le login est loginfourni@FOURNISSEUR
Dans le cas de skynet, ce sera du type gv52222@SKYNET.
Le mot de passe est celui fourni par le fournisseur d'accs (provider).
Le protocol PAP / CHAP est essayer pour chaque fournisseur.
VPI/VCI est spcifique aux fournisseur: paramtres de connexion INTERNET
NAT (translation d'adresse) doit tre coch quand votre adresse LAN diffre de votre adresse
WAN, ce qui est dans la grosse majorit des cas le cas.
Le programme demande ici le type de connexion. Dans notre cas, elle est Ethernet et nous
tapons l'adresse et le masque habituel: 198.162.1.2 - 255.255.255.0. Cette adresse est ncessaire
pour configuration ultrieure (cas d'un raccordement direct). Tapez l'adresse DNS relay. Celle-ci doit
tre l'adresse fournie en DNS dans le rseau local (sur chaque station), mais ce n'est pas obligatoire
d'en taper une, notamment dans les systmes d'exploitation 2000, XP et suprieurs qui l'incluent
automatiquement. Nous verrons DHCP server plus tard.
17.1.4. Mode PPPoE (Point To Point Protocol Over Ethernet), le mode par dfaut en Europe pour une
connexion directe.
La configuration est identique celle PPPoA, except que le NAT est d'office coch et que le
protocole PAP / CHAP n'existe pas, ce qui est logique.
1. Username, par exemple gv52222@SKYNET
2. Password fourni par le provider ou fournisseur d'accs
3. VPI/VCI: 8/35, suivant le fournisseur d'accs (plus souvent le pays).
4. NAT cocher.
5. Ethernet dans notre cas, toujours l'adresse 198.162.1.2. et le sous masque 255.255.255.0
6. DNS relay. Celle-ci doit tre l'adresse fournie en DNS dans le rseau local (sur chaque station), mais
ce n'est pas obligatoire d'en taper une, notamment dans les systmes d'exploitation 2000, XP et
suprieurs qui l'incluent automatiquement.
17.1.5. Les autres modes: PPTP et IPoA
Ce sont des modes hybrides que je ne vois pas.
17.1.6. Au final.
Dans le cas d'une liaison par routeur, le mode utilis est bridged, dans le cas d'une liaison par HUB ou
en direct, le mode de connexion est PPPoE. La seule diffrence entre une connexion directe et une
connexion HUB est lie la passerelle qui peut tre renseigne dans la configuration du PC (ce n'est
pas toujours ncessaire). Dans paramtres, slectionner TCP/IP sur carte rseau et taper l'adresse
TCP/IP de la passerelle, dans notre cas 200.1.1.1. (n'oubliez pas de cliquer sur ajouter).
Et voil pour le modem. Cette partie suffira pour toutes les connexions modems ADSL. Pour les petits
modems, retenez au moins les paramtres VPI/VCI.
17.1.7. Configuration DHCP serveur
Ce mode permet d'attribuer automatiquement des adresses TCP/IP aux stations par le modem
(attention aux OS 2000, XP et suprieur). Pour les cas les plus courants, ceci n'est pas ncessaire.

On retrouve l'adresse DHCP serveur, terminant par 0 avec toujours le sous masque 255.255.255.0.
L'adresse Serveur est donc 198.162.1.0. Pour rappel, le DHCP permet un appareil de fournir tous
les appareils connects sur le rseau une adresse IP.
Range dtermine la plage d'adresse qui sera attribu aux stations. Dans notre cas, 198.162.1.10
198.162.1.30
L'adresse Routeur est obligatoirement celle donne au modem, soit 198.162.1.2 dans notre cas
17.2. Routeur - firewall Hardware - Switch 4 ports.
Le routeur - firewall est fourni par la firme Zero One Technology. Ce modle est quip d'un Switch
4 ports, d'une connexion vers modem ADSL RJ45 (d'o l'utilisation ci-dessus du Copperjet 812), d'un
routeur et d'un firewall hardware intgr.
Plusieurs appareils de ce type existent dans pratiquement toutes les marques. Certains avec modem
intgr, d'autres sans, ... le choix est suffisamment large.
Ces appareils se configurent par TELNET ou une interface web, directement en tapant l'adresse de
l'appareil dans la barre d'adresse d'Internet Explorer. Dans l'appareil ci-dessus, vous devez configurer
votre connexion TCP/IP PC pour obtenir une adresse TCP/IP automatique ou du moins faire partie du
mme groupe soit 192.168.1.X en sachant que par dfaut l'adresse du routeur est 192.168.1.1. Dans
les paramtres de connexions INTERNET Explorer, n'utilisez pas de proxy ce stade, sinon, vous
n'aurez pas d'accs au routeur (ou sinon, utilisez "Pas pour les adresses locales" avec l'adresse du
routeur en option).
Aprs avoir tap l'adresse de l'appareil dans la barre, la connexion se fait, avec un login et un mot de
passe spcifique l'appareil.
17.2.1. Configuration ADSL
Commenons par configurer la connexion ADSL.

Use PPPoE Yes (forcment).
Username et mot de passe sont fournis par le fournisseur d'accs.
Le Service Name est parfois fourni par le fournisseur d'accs, sinon, ne mettez rien.
"Connect on demand" permet de couper la connexion (et de se reconnecter) aprs 120
minutes, mais moins est nettement conseill.
Si l'abonnement ADSL prvoit une adresse TCP/IP Internet fixe, elle doit tre rentre en
"Fixed Adress".
Cette deuxime partie permet de configurer le TCP/IP.
Soit votre adresse TCP/IP Internet est fournie automatiquement par le fournisseur d'accs (Obtain IP
adresss Automatically), soit elle est fixe et fournie par celui-ci.
Les paramtres DNS primaires et secondaires sont fournis par votre fournisseur d'accs. Ceux ci-
dessus sont ceux de Skynet.


17.2.2. Configuration IP / Lan
Cette partie permet de configurer le routeur sur le rseau interne. Nous lui fournissons une adresse
(ici 192.180.1.1.) et un masque de sous-rseau (255.255.255.0)
L'adresse "Dfaut gateway" est gnralement celle du routeur (Lan IP adress) et doit tre renseigne
dans la configuration rseau de chaque PC

NAT doit toujours tre activ.
D'autres configuration permettent de modifier les mots de passe et l'heure interne du routeur. Cette
dernire option est utilise par la fonction firewall.
17.2.3. Autres paramtrages
D'autres paramtrages permettent d'utiliser le routeur en serveur DHCP (cf. modem), configurer le
routeur en DMZ (zone dmilitarise avec 2 routeurs), .....
17.2.4. Firewall hardware intgr.
Je ne rentrerai pas trop dans les dtails puisque celui-ci est spcifique cet appareil, seulement les
configurations de base.

Forcment, vous autorisez la protection firewall. Par dfaut, vous laissez (forward) les connexions du
LAN (rseau interne) au Wan (Internet). Dans le cas contraire, il est difficile en cas de blocage quel
port est bloqu.
Le paramtrage suivant permet de bloquer les connexions TCP/IP incompltes partir d'un certain
nombre par minutes (on est jamais trop prudent).
Les attaques DoS (Denied of Service) sont des attaques massives de trames incompltes sur une
adresse Internet donne. La cible tente de reconstruire les messages infrieurs 64 bits et
finalement "s'croule" sous la charge de travail.
Le port 139 est utilis en NetBios par le partage des ressources en rseaux Windows (avec 137 et
138). Pour viter le partage de ressources (disque dur et rpertoires via Internet): Non.
Enable remote management ... permet de configurer le routeur via INTERNET, peu recommandable,
seulement dans des dures limites.
La dernire commande permet de ne pas rpondre aux commandes de type Ping provenant
d'Internet (scannage des adresses, commande DOS Ping).
D'autres commandes permettent d'interdire des plages d'adresses ou des ports du Lan vers Internet
et vis versa.
La partie suivante permet d'envoyer un mail une adresse donne s'il y a une attaque ou mme dans
le cas plus bas pour envoyer par mail le fichier LOG.
17.2.5. Les ports TCP et UDP ouvrir sur le firewall
Dans le paramtrage de ce type de firewall, vous pouvez bloquer tous les ports TCP et UDP et n'en
ouvrir que quelques uns. La liste des ports a Ouvrir (ou a absolument fermer) est reprise dans la
formation INTERNET: Classes d'adresses, ports TCP et UDP
17.3. Le paramtrage sur le PC.
Une fois le paramtrage effectu sur les diffrents appareils, reste connecter l'installation.
L'installation se fait en deux parties, le paramtrage de la connexion rseau interne et le
paramtrage de la connexion INTERNET . Pour la majorit des firewall - routeurs actuels, tous les
paramtres sont automatiquement renvoys au PC, principalement en Windows XP et Vista. Ces
configurations ne sont faire que quand a ... fonctionne pas. En plus, par dfaut, ces systmes
d'exploitation se connectent via le rseau RJ45 s'ils dtectent une connexion existante.
17.3.1. Le paramtrage rseau et connexion INTERNET.
Comme pour toutes les connexions INTERNET, le protocole TCP/IP doit tre implant sur votre carte
rseau. Reprenons les paramtres de configurations de chaque PC et slectionnons la carte rseau
qui va se connecter (mme via des switch ou HUB) sur le routeur.

En affichant les proprits TCP/IP de cette carte rseau, on obtient la fentre suivante

L'onglet Adresse IP permet soit de laisser l'adresse automatique (par DHCP), soit de la spcifier. Dans
le cas d'une adresse automatique, la configuration IP des stations est automatise. Par contre, la
spcification d'une adresse a plusieurs avantages. Premirement, ceci permet de retrouver via son
adresse unique quel PC tente des connexions indlicates. Deuximement, en jouant sur le firewall,
on peut utiliser le TCP/IP et refuser que certains PC (via leur adresse IP) se connectent sur INTERNET.
Par exemple, on peut autoriser les adresses 192.168.1.1 192.168.1.100 se connecter, mais pas les
adresses 192.168.1.101 192.168.1.255. Le masque de sous-rseau doit tre toujours paramtrer en
255.255.255.0. Dans le cas de partage avec un PC sous Microsoft Windows XP, c'est quasiment la
seule mthode de connexion possible.
L'onglet Configuration Wins est sans importance ici. Intressons nous la passerelle. Elle doit tre
renseigne comme celle du routeur, soit dans notre cas: 192.168.1.1. La connexion marche
gnralement sans mais ceci facilite la connexion.
La configuration DNS n'est pas obligatoire mais de nombreuses connexions ne fonctionnent pas sans.
Par habitude, je l'insre. Elle doit tre identique celle implante dans le routeur (sinon Internet
Explorer ne fonctionne pas). Le nom d'hte et de domaine est sans importance mais doit tre
renseigne sous Windows 98. Les paramtres ci-dessous sont ceux de Skynet: rentrez d'abord le DNS
primaire et ensuite le DNS secondaire. D'autres paramtres de connexion FAI

Aprs avoir redmarrer le PC (du moins en Windows 98), il ne reste plus qu' paramtrer la
connexion INTERNET pour ce partage de connexion ADSL par routeur.
17.3.2. Paramtrage de la connexion INTERNET.
Dmarrer Internet Explorer. S'il ne dtecte pas de connexion, arrter la tentative. Dans le menu
Outils, slectionnez "Options Internet". Dans l'onglet Connexions, cliquez sur le bouton Configurer.

Cochez la case "Je veux configurer ma connexion manuellement ou en utilisant un rseau local
"LAN". Ensuite "En utilisant un rseau local. Laissez ce stade le proxy en automatique. Si votre
messagerie est dj configure, vous n'avez plus besoin de la configurer.
Dans le mme onglet, cliquez sur le bouton "Paramtres Lan".

Pour utiliser le proxy de votre fournisseur d'accs (ici Skynet), cochez la case correspondante et tapez
l'adresse fournie par le FAI. Dans ce cas, si vous utilisez des connexions spcifiques (le logiciel
bancaire ISABEL par exemple) ou souhaitez avoir accs la configuration du routeur partir de ce PC,
vous devez cocher la case "Ne pas utiliser de serveur proxy pour les adresses locales et cliquez sur le
bouton "Avancs".
Dans les exceptions, tapez l'adresse IP du routeur et les diffrentes exceptions souhaites. Une fois
ces modifications acceptes, votre connexion fonctionne en automatique.
Quelques prcautions nanmoins, dcochez la case "Vrifiez les messages toutes les 30 minutes"
dans les paramtres de votre messagerie. En effet, comme la communication vers INTERNET est
transparente, n'importe quel programme peut se connecter sur INTERNET quand il veut. Avec cette
option, la connexion reste ouverte en permanence ce qui peut provoquer des risques de scurit
(mme si le firewall protge une large partie des communications, mieux vaut rester prudent).
17.4. Quelques exemple de la vie d'une connexion INTERNET
Voici quelques exemples de fichier LOG du firewall hardware (avec adresse Wan TCP/IP non
permanente), un condens de systmes protgs diffrents.
La dernire adresse correspond l'adresse du PC du rseau interne au moment de la connexion.
Toutes les lignes ne sont pas forcment des tentatives d'intrusion via Internet, on trouve des ports
officiels IANA (mais rien ne dit qu'il ne s'agit pas d'une autre application, des ports typiques un
trojan, des ports utiliss mais ferms (de type ICQ, MSN messenger, ...), ICMP attack sans importance
(un ping), ... Certaines commandes essayent sur le routeur, d'autres directement sur les PC (les
adresses de type 192.168.X.X). Les messages proviennent autant en TCP qu'en UDP
________________________________________
fc-cli 1371 tcp Fujitsu Config Protocol IANA port officiel ou ?
Tue May 07 07:58:44 2002 - policy rule - tcp [wan,213.36.127.59,192.168.1.152:1371] - [discard]

________________________________________
Un ping, il y en a qui s'amuse.

Tue May 07 10:37:42 2002 - icmp attack - icmp [wan,213.36.100.179,217.136.190.170:0] - [discard]
________________________________________
A partir d'un PC, toujours le mme. Comme les tentatives de sortie ne se sont plus produites, plutt
une application qu'un trojan (faut pas tre paranoaque mais lucide)
6667 tcp Trinity trojan
6667 tcp WinSatan trojan
6667 tcp Schedule Agent trojan
ircd 6667 tcp Internet Relay Chat IANA
ircd 6667 udp Internet Relay Chat IANA
ircu 6667 tcp IRCU IANA
ircu 6667 udp IRCU IANA

Tue Dec 17 18:27:40 2002 - policy rule - tcp [lan,192.168.1.97,213.177.65.17:6667] - [discard]
...
________________________________________
Jeux provenant de l'extrieur
Tue Dec 17 18:08:08 2002 - policy rule - udp [wan,80.200.150.123,217.136.155.190:27015]-[discard]
________________________________________
Pourquoi pas essayer avec PC anywhere
pcanywherestat 5632 tcp pcANYWHEREstat IANA

Tue Dec 17 23:11:02 2002 - policy rule - udp [wan,217.136.191.74,217.136.155.190:5632] - [discard]
________________________________________
Inconnu mais justement, pas officiels.

Wed Dec 18 13:44:57 2002 - policy rule - tcp [wan,193.201.103.100,192.168.1.27:2193] - [discard]
Wed Dec 18 20:42:37 2002 - policy rule - tcp [wan,80.200.248.200,192.168.1.7:1223] - [discard]
Fri Dec 20 15:42:00 2002 - policy rule - tcp [wan,193.201.103.91,192.168.1.152:3524] - [discard]
________________________________________
Officiel IANA
Wed Dec 18 14:06:11 2002 - policy rule - tcp [wan,80.200.248.200,192.168.1.4:2845] - [discard]
Wed Dec 18 14:36:18 2002 - policy rule - tcp [wan,80.200.248.200,192.168.1.4:2848] - [discard]
Wed Dec 18 15:06:29 2002 - policy rule - tcp [wan,80.200.248.200,192.168.1.4:2851] - [discard]
________________________________________
Officiel IANA pour un logiciel de contrle distance de serveur http://www.folio.com (pas sr que ce
soit logique) et toujours sur le mme PC
Fri Dec 20 16:13:48 2002 - policy rule - tcp [wan,80.200.248.200,192.168.1.27:2242] - [discard]
Fri Dec 20 16:28:48 2002 - policy rule - tcp [wan,80.200.248.200,192.168.1.27:2242] - [discard]
________________________________________
31789 udp HackaTack trojan
Wed Dec 18 14:40:20 2002 - policy rule - udp [wan,217.136.26.127,217.136.155.190:31789] -
[discard]

________________________________________
http://www.phonefree.com (un employ qui s'amuse ?)

Fri Dec 20 16:20:53 2002 - policy rule - tcp [wan,207.46.106.183,192.168.1.119:1035] - [discard]
________________________________________
1812, officiellement un port officiel ou CuSeeMe (un logiciel de video confrence) mais qui travaille
alors que personne n'est dans l'entreprise et provenant d'adresses sources (Wan) diffrents ...

Sat Dec 21 01:51:00 2002 - policy rule - udp [wan,195.250.78.242,217.136.154.118:1812] - [discard]
Sat Dec 21 01:55:26 2002 - policy rule - udp [wan,218.1.36.50,217.136.154.118:1812] - [discard]
________________________________________
Une attaque informatique nettement plus grave
Sat Dec 21 20:12:49 2002 - tear drop attack - any [wan,192.9.200.32,217.136.155.185:0] - [discard]
Un TEAR DROP consiste envoyer des informations (appel OOB = Out Of Band ) sur des ports de
windows (toutes versions 32 bits). Les informations envoyes sont des packets TCP qui se recouvrent.
Lorsque l'ordinateur victime reoit ces packets, il tente de les reconstruire. N'y arrivant pas, cela
provoque un plantage, un cran bleu causant une erreur de protection gnrale et vous n'avez
d'autre choix que de redmarrer l'ordinateur. Le tear drop, le new tear et le boink (des attaques
similaires) peuvent aussi affecter les systmes Linux (infrieur 2.0.32), mac et unix. Un article plus
complet sur la scurit, le chapitre 17 du cours INTERNET (scurit) reprend ces problmes en
dtails.
Pour retrouv un semblant de localisation du PC qui tente l'intrusion, utilisez la commande DOS
tracert.
Une dernire remarque, les adresses rseau LINKLOCAL (APIPA) commencent toujours par 169.254
et ont le format suivant: 169.254.X.X Les adresses rseau LINKLOCAL sont rserves aux adresses
prives et internes et ne peuvent pas tre utilises sur les ordinateurs relis par le Partage de
connexion Internet.



Dfinitions - Glossaire
Le dictionnaire informatique technique du cours hardware 2 (rseaux, serveurs, technologies
spciales), se dpanner et formation Internet. Le dictionnaire du cours hardware 1 (PC et
priphriques) est repris dans la page dictionnaire informatique 1. Le lien de la dfinition renvoie
vers les explications plus compltes du cours hardware. Dans la majorit des cas, je reprend le mot
en franais, en anglais s'il est utilis et abrviations.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 base 5
Norme IEEE de connexion rseau Ethernet 1 Mbps par paire tlphonique
invente par A&T, aussi appele starlan
10 base 2 Norme IEEE de connexion Ethernet par cble coaxial fin (Twin Ethernet)
10 base 5 Norme de connexion Ethernet par cble coaxial pais
10 base T Connexion Ethernet en toile par paire tlphonique 10 Mbps
100 base T
Norme de connexion Ethernet en toile par paire tlphonique 100 Mbps,
aussi appel Fast Ethernet
100 base FX Norme Ethernet 100 Mbps sur fibre optique
100 base T4
Variante de l'Ethernet 100 base T en toile par paire tlphonique 100 Mbps
utilisant 4 paires
100 base TX
Variante la plus courante de la norme 100 base T en toile par paire
tlphonique 100 Mbps utilisant 2 paires
1000 Base C Ethernet 1 Gbit/s sur cuivre, maximum 25 m
1000 Base CX Ethernet 1 Gbit/s sur cuivre, maximum 25 m, non standardise
1000 Base LH Ethernet 1 Gbit/s sur fibre, maximum 70 km
1000 Base LX Ethernet 1 Gbit/s sur fibre optique monomode, maximum 3000 m
1000 Base SX Ethernet 1 Gbit/s sur fibre optique multimode, maximum 500 m
1000 Base TX Ethernet 1 Gbit/s sur cuivre, maximum 100 mtres
8 mm Appareils de sauvegarde similaire au DAT
802.11 (IEEE) Rseau sans fils permettant des transferts jusqu' 2 Mb/s
802.11 a
Rseau sans fils avec un dbit maximum de 54 Mb/s utilisant la bande de
frquence 5-6 Ghz en utilisant la mthode de modulation OFDM.
802.11 B
Rseau sans fils driv du 802.11, vitesse maximale de 11 Mb/s, aussi appel
WIFI ou 802.11 HR
802.11 B+ Rseau sans fils driv du 802.11B, vitesse maximale de 22 Mb/s
802.11G Rseau sans fils driv du 802.11, vitesse maximale de 54 Mb/s
802.11G+ Rseau sans fils driv du 802.11G, vitesse maximale de 108 Mb/s
802.11 HR Autre nom du 802.11 B
802.11I
Protocole de scurit des connexions sans fils qui permet un changement
priodique des cls de chiffrement; approuv 07/2004. Le 802.11X devrait
encore amliorer la scurit
802.11X
Protocole d'identification des connexions utilisateurs sur un rseau sans fils en
cours d'laboration (mi-2004) utilisant le protocole EAP. Cette nouvelle norme
ne serait normalement pas compatible avec les matriels existants.
802.3
Norme IEEE pour les connexions rseau de la mthode d'accs Ethernet
CSMA/CD
802.3 1 base 5
Connexion Ethernet 1 Mbps par paire tlphonique invente par A&T, aussi
appele starlan
802.3 10 base 2 Connexion Ethernet par cble coaxial fin (Twin Ethernet)
802.3 10 base 5 Connexion Ethernet par cble coaxial pais
802.3 10 10 base T
802.3 ab Norme de connexion Ethernet sur cuivre 1000 Base TX
802.5 Norme IEEE pour les connexions rseau de la mthode anneau jeton
8139D (RTL) Circuit lectronique pour carte rseau 10/100 base T de Realtek
940 Socket utilis par le processeur serveur 64 bits Opteron d'AMD
9580 Belden Belden
Dfinition commenant par A
Accs rseau
(TCP/IP)
Couche du modle TCP/IP qui spcifie la forme sous laquelle les donnes
doivent tre achemines indpendamment du type de rseau
Accs (mthode) Manire dont une station connecte un rseau prend la parole
Acknowledge
Mcanisme de correction de transfert de donne: le rceptionneur signale la
rception en renvoyant un signal d'accus de rception
Adaptive Cut
Through
Technologie des Switch qui passe du mode Store and Forward au mode Cut
through en fonction des erreurs de signaux
ADSL Asymetric Digital Subscriber Line, type de liaison haute vitesse
Ad-aware
Programme de lavasoft permettant de dtecter et supprimer les spyware et
adware.
Adware Programme servant envoyer des publicits via INTERNET. Voir Ad-aware.
AECC
(Advanced Error Correcting Code) mmoire utilise dans les serveurs pour
contrler et corriger automatiquement les donnes
AIT Type de bande de sauvegarde dvelopp par Sony
Anneau
(topologie)
Mthode de connexion physique des rseau o les stations sont raccordes sur
un cble circulaire.
Antivirus Programme permettant de dtecter et de supprimer les virus informatiques
Application (OSI) Couche 7 du modle OSI
Application
(TCI/IP)
Couche du modle TCP/IP, communication des informations entre 2 mmes
applications
Application
(serveur)
PC ddi permettant l'utilisation d'une mme application (typiquement une
base de donne) partir de plusieurs clients.
ARP
"Adresse Resolution Protocol", gre les adresses des cartes rseaux pour la
transmission de donnes. Chaque carte a sa propre identification MAC code sur
48 bits.
Athlon MP Processeur AMD spcifique serveur
ATM
(Asynchronus Transfer Mode) mthode de transfert utilis pour les connexions
INTERNET haute vitesse
Auto
NEGOTIATION
Caractristique d'un switch qui adapte la vitesse des ports en Full ou Half Duplex
Dfinition commenant par B
Belden 9580
Cble coaxial pais de couleur jaune d'un demi-pouce de diamtre utilis pour
les rseau Ethernet 10 base 5
Bluetooth
Liaison hertzienne sans fils permettant de connecter de petits priphriques
entre eux.
Boink Attaque de type Denial of Service
Bouchon
Rsistance place aux 2 extrmits d'un cble coaxial rseau pour attnuer les
rverbrations, aussi appel Terminaison
Broadcast
Adresse Mac particulire FF.FF.FF.FF.FF.FF permettant d'envoyer un message
l'ensemble du rseau.
Bus (topologie)
Mthode de raccordement physique des rseaux, stations raccordes sur une
mme ligne de communication
Dfinition commenant par C
Cble Mthode de connexion INTERNET utilisant le cble de tldistribution
Chaud
(dconnectable )
Hot Plug, Priphrique (disque dur, carte lectronique) qui peut tre remplace
alors que le PC (serveur) est en fonctionnement.
Cheval de Troie voire Trojan
Classe Plages d'adresses IP utilis pour dlimiter les rseaux
Client Ordinateur utilisant les ressources partages d'un serveur
Cloud Computing Partage de donnes et ressources sur Internet
Coaxial Type de cble utilis en informatique rseau
Collision
Problme des rseaux Ethernet lorsqu'une station met un signal sur le cble
alors qu'une autre communique dj.
Content Filtering Mcanisme de blocage d'accs Internet par analyse des noms de site
Contention Mthode de prise d'accs d'un PC lors d'une communication rseau
Cookies Fichier texte transfr via INTERNET
Commutateur Switch, type de concentrateur
Concentrateur Noeud d'un cblage rseau rassemblant les hub, switch et routeur
Coupure rseau
lectrique
Perte complte du rseau lectrique
Crash Disk
Panne complte d'un disque dur ncessitant son remplacement (perte des
donnes)
Crois cble Cble Ethernet RJ45 pour relier 2 ordinateurs ou deux concentrateurs entre eux
CSMA/CD
"Carrier Sense Multiple Acces with Collision Detection", mthode de dtection
des collisions dans un rseau o la mthode d'accs est la contention (eg.
Ethernet)
Cut Through Type de Switch Ethernet utilisant l'adresse MAC de destination
Cut Through Runt
Free
Technologie drive du Cut Through qui analyse les trames incomplte de type
RUNT
Dfinition commenant par D
DAT (backup) Appareil de sauvegarde sur bande allant jusqu' 40 GB
DataDAT Type de bande utilise par les appareils de sauvegarde DAT
Datagramme
Nom des segments de donnes en capsules dans la couche Internet du modle
TCP/IP
DDS Type de bande utilise par les appareils de sauvegarde DAT
Dcoupage
alimentation
Type d'alimentation utilise dans les PC et priphriques informatiques
Dni de Service

Denial of Service
distribu
(Dni de service - dDOS): type d'attaque consistant envoyer des paquets de
trames incompltes pour stopper le fonctionnement d'un appareil
DHCP
(Dynamic Host Configuration Protocol) Mcanisme implant dans un appareil
rseau ou 1 serveur qui attribue automatiquement une adresse IP tous les PC
dans une plage donne.
Diffrentielle
(sauvegarde)
Sauvegarde de tous les fichiers non sauvs, ne met pas le bit de backup des
fichiers comme sauvegard.
Disjoncteurs
Appareils de protection lectrique qui coupe le rseau des appareils protgs en
cas de sur-tension
DLP ((Digital Light Processing) technologie de projecteurs vidos
DLT Technologie de sauvegarde dveloppe par Quantum
DLT2000 Bandes DLT de 15 / 30 GB
DLT4000 Bandes DLT de 20 / 40 GB
DLT7000 Bandes DLT de 35 / 70 GB
DMD
(Digital MicroMirror Device), technologie de micro miroirs utiliss par les
projecteurs vidos DLP
DMZ Demilitarised zone: scurisation d'un rseau via deux firewall.
DNS
Domaine Name of Service: serveur faisant la liaison entre le nom d'un site
Internet et son adresse IP.
DOS Denial Of Service
Download
Vitesse de chargement Internet vers utilisateur dans une connexion INTERNET
(voir UPLOAD)
DTR (Data Transfert Rate): taux de transfert de donnes
Dual-Core Technologie o 2 processeurs sont implants dans le mme botier
Dfinition commenant par E
E1 Ligne INTERNET loue avec un dbit de 1,544 Mb/s (Europe)
E2 Ligne INTERNET loue avec un dbit de 8 Mb/s
E3 Ligne INTERNET loue avec un dbit de 34 Mb/s
E4 Ligne INTERNET loue avec un dbit de 140 Mb/s
EAP
Extensible Authentification Protocole, authentification des connexions
utilisateurs sur les rseaux sans fils 802.11 suivant la norme 802.11X
Ethernet Mthode d'accs normalise un rseau
Etoile (topologie)
Mthode de raccordement physique des rseaux o chaque station se raccorde
un noeud central
Dfinition commenant par F
FAI Abrviation de Fournisseur d'Accs Internet
Fast Ethernet
Normalisation IEEE de connexion Ethernet en toile par paire tlphonique
100 Mbps, aussi appel 100 base T
Fast Narrow SCSI Norma SCSI sur 8 bits avec un taux de transfert de 10 MB/s maximum
Fast Wide SCSI SCSI 2, norme SCSI sur 16 bits avec un taux de transfert de 20 MB/s maximum
Fichier (serveur) Ordinateur ddi servant partager l'accs des fichiers
Filtre ADSL
(Splitter en anglais) Filtre qui dissocie le signal analogique tlphonique du
signal numrique ADSL
Firewall
Appareil ou logiciel qui analyse et bloque les communications sur les ports TCP
et UDP: firewall software et hardware
Foudre
Sur-tension de forte puissance provoque par des phnomnes
mtorologiques
Fragment Free
Gnralement appel Early Cut Through, technologie des switch drivs du
mode Cut Through
Frame relay Mthode de connexion haute vitesse, anctre de l'ATM
FTP
"File Transfert Protocol", protocole permettant d'changer des fichiers via
Internet
Full Duplex
Caractristique des cartes rseaux et concentrateurs permettant l'mission et la
rception simultane de donnes
Dfinition commenant par G
Giga Bit Ehternet Norme de liaison rseau 1 Gbps
Dfinition commenant par H
Half Duplex
Caractristique d'une carte rseau (ou concentrateur) ne permettant pas
d'mettre et de recevoir en mme temps (oppos: Full Duplex)
HDSL
Technologie xDSL symtrique avec un dbit maximum de 2 Mbps sur une
longueur maximum de 4,5 KM
HDSL2
Technologie xDSL symtrique drive de HDSL mais sur une seule paire de cuivre
en cours de test
Hot Plug
Dconnectable chaud, priphrique (disque dur, carte lectronique) qui peut
tre remplace alors que le PC (serveur) fonctionne.
HUB Type de concentrateur servant de Noeud d'un rseau Ethernet RJ45
HVD
High Voltage Differential, norme de connectique SCSI sous 5 V avec des
longueurs de chane de 25 m
Dfinition commenant par I
ICMP
"Internet Control Message Protocol" gre les informations relatives aux erreurs
de transmission.
IGMP
"Internet Group Management Protocol", protocole permettant d'envoyer le
mme message des machine faisant partie d'un groupe.
Imprimante
(serveur)
Serveur ddi permettant de partager une imprimante
Incrmentale
(sauvegarde)
Sauvegarde des fichiers dont le bit de sauvegarde n'est pas activ
Infra rouge Type de liaison sans fils utilisant la lumire infrarouge
IP
Protocole INTERNET du modle TCP/IP grant les destinations des messages en
rseau
IPsec Mthode de cryptage des donnes sur Internet
IrDA Liaisons sans fils utilisant la lumire infra rouge
ISCSI Technologie - protocole de stockage externe de serveurs.
ISM
Gamme de frquence hertzienne 2,45 Ghz utilise par les communications
Industrielles, Scientifiques et Mdicales.
Dfinition commenant par J
Jeton
Mthode d'accs un rseau ou la communication se fait suivant un ordre
prtabli, principalement utilis en Tocken-Ring
K
Dfinition commenant par L
LAYER Couche (niveau) du modle OSI ou Internet
LCD "Liquid Crystal Display", technologie utilis dans les projecteur vido
LGMR Technologie laser pour contrler les bandes Super DLT
Liaison des
donnes (couche)
Niveau 2 du modle OSI qui dfinit l'interface avec la carte rseau: hubs, switch,

Librairie Chargeur de plusieurs bandes de sauvegarde
Line Interactive Type d'UPS driv des UPS off-line
Lourd (rseau)
Type de rseau utilisant un ordinateur central de type serveur utilisant un
systme d'exploitation ddi.
LVD
(Low Voltage Differential), norme de connexion SCSI sous 3,3 volts et permet
datteindre 12 m de longueur de chane.
Dfinition commenant par M
MAC adresse
Adresse spcifique chaque quipement rseau code sur 6 octets (48 bits),soit
2
48
valeurs possibles.
MAC
"Medium Access Control", mthode d'accs des station un rseau. On
distingue la contention et la mthode jeton
Maille topologie Mthode de raccordement physique rseau
Main Frame Ordinateur central de type serveur
Mammoth Appareil de sauvegarde 8 mm dvelopp par Sony et Seagate
Manageable
Type de switch o l'on peut dterminer des groupes de PC pour les
communications autorises ou non
MDI / MDIX
Technologie des switch (jamais implante dans les HUB) qui dtecte
automatiquement le type d'appareil connect sur un port, vitant l'utilisation de
cbles croiss.
Medium Access
Control
"MAC", mthode d'accs des station un rseau. On distingue la contention et
la mthode jeton
Meshing Technologie des switch qui permet de crer des tables multi switch
Message Paquet de donnes au niveau de la couche application du modle TCP/IP
Micro coupures Pertes de courte dure de la tension lectrique
Mirror
Implantation logicielle du RAID 1 (Mirroring) dans les serveurs sous Windows NT
et Windows 2000 server
Mirroring
RAID 1, connexion de disques durs qui assure la redondance des donnes sur
plusieurs disques
Mixe (topologie)
Mthode de raccordement physique des rseaux o plusieurs topologies sont
mlanges (anneau, bus ou toile)
MMF Cble en fibre optique rseau multimode
MTBF Mean Time to Fealure: temps moyen de fonctionnement avant une panne
Multi session
Technologie utilise par les connexions SCSI effectuant plusieurs tches
simultanment
Dfinition commenant par N
Narrow Se rfre aux connexions SCSI sur 8 bits de donnes
NAS
Network Attached Storage: appareil servant de serveur de fichier directement
connect sur le rseau
NAT
(PAT en Franais), Network address translation: technologie d'un routeur qui
assure la transition entre une adresse globale extrieure et les adresses prives
d'un rseau Ethernet
Network (rseau) Connexion entre ordinateurs pour partager des ressources
Network Interface
Card
En abrg NIC, carte rseau
New Tear Attaque de type DoS
NIC Network Interface Card, carte rseau
NOCOMA Architecture XEON hybride 32 - 64 bits
NUMA
Non Uniform Memory Access, technologie multi processeurs o chaque
microprocesseur utilise sa propre mmoire avec un accs indirect aux mmoires
des autres (voir SMP)
Dfinition commenant par O
OFDM
"orthogonal frequency-division multiplexing" Mthode de modulation
hertzienne dcoupant le signal pour l'envoyer sur plusieurs frquences
diffrentes, utilis par le 802.11a
Off-line Type d'UPS utilis dans la protection des stations de travail
OOB (Out Of Band) Packet TCP/IP incomplet pour les attaques de Denial of service
On-Line
Type d'UPS o le rseau lectrique est totalement dissoci des appareils
protger.
Onduleur UPS
Orthogonal RAID 5 Norme de connexion drive du RAID 5 avec un contrleur RAID par disque
OSI (modle)
Standardisation des communications rseaux sur 7 couches dfinissant les
compatibilits des transferts de donnes
Out Of Band (OOB) Packet TCP/IP incomplet pour les attaques de Denial of service
Dfinition commenant par P
Paire (cble)
Nom donn aux cble de type tlphonique utiliss en rseaux Ethernet o 2 fils
(paire) sont apparis.
PAT
(NAT en anglais), port adress translation: technologie d'un routeur qui assure la
transition entre une adresse globale extrieure et les adresses prives d'un
rseau Ethernet
PCI-X
Connecteur interne (bus) utilis par les serveurs en 64 bits pour les cartes
d'extensions, dconnectable chaud
Peer To Peer Rseau o les ordinateurs sont la fois clients et serveurs
Physique (couche) Niveau 1 du modle OSI qui gre les connexions matriel
Pic de tension
Sur-tension de forte puissance sur une dure trs courte, typiquement 1/120
seconde
Pont mode)
Paramtrage d'un routeur - modem ADSL pour n'utiliser que la partie liaison
(bridge)
Port Trunking
Technologie des switch qui rserve des ports spcifiques pour la connexion avec
d'autres switch
Port (rseau)
Numros spcifiques utiliss par les application TCP/IP ou UDP pour
communiquer entre elles, permettant ainsi une normalisation des applications
Portal
Site regroupant des informations diverses compltes par un moteur de
recherche
Prsentation
(couche)
Couche 6 du modle OSI assurant la mise en forme des donnes
Protocole "Langage" utilis dans les communications rseaux
Proxy Mmoire cache pour la navigation Internet
Q
Dfinition commenant par R
RADSL
(Rate Adaptive DSL), technologie xDSL asymtrique dbits constants
(ascendants de 128kbps 1Mbps et descendant de 600kbps 7Mbps) sur une
distance de 5,4 KM
RAID
Norme de connexion de disques durs en parallle pour augmenter la vitesse ou /
et la scurit des donnes
RAID 0 Striping, connexion de disques en parallle pour augmenter le dbit
RAID 1
Mirroring, connexions de disques durs qui assure la redondance des donnes sur
plusieurs disques durs
RAID 10 Implantation du RAID 0 et du RAID 1
RAID 2 Norme de connexion de disques durs assurant un contrle des donnes
RAID 3
Norme de connexion de disques durs assurant un contrle des donnes par
contrle de parit
RAID 4 Norme de connexion de disques durs avec contrle des donnes
RAID 5 Norme de connexion de disques durs acceptant le Hot plug
RAID 6
Norme de connexion de disques durs driv du RAID 5 autorisant 2 disque durs
dfectueux
RAID 7
Norme de connexion de disques durs driv du RAID 5 avec calcul de parit par
circuit lectronique spcialis
RARP
"Reverse Address Resolution Protocol" gre l'adresse IP pour les quipements
sans disques durs
Redondance
Terme utilis dans une installation rseau o les composants critiques sont
ddoubls
Rptiteur (Hub en anglais), type de concentrateur utilis en rseau Ethernet RJ45
Rseau (Network) Connexion entre ordinateurs qui permet de partager des ressources
Rseau couche Niveau 3 du modle OSI qui gre les routes de transport des informations
REV Equipement de sauvegarde rseau
RJ45
Connecteur (connexion par extension) utilis en rseau Ethernet en toile pour
le 10 base T, le 100 base T, le 1000 base T, ...
Routeur Concentrateur intelligent servant de passerelle entre 2 rseaux
RUNT Trame Ethernet incomplte de moins de 64 bits
Dfinition commenant par S
S-AIT Type de bande 8 mm de 500 GB / 1 TB
SAS Connexion disque dur SCSI en srie
SAN Storage Attached Network, extension de disques durs sur serveurs
SCSI
Small Computer System Interface, norme de connexion de disque dur, lecteur
CD et sauvegarde
SCSI 1
Premire normalisation SCSI sur 8 bits (Narrow) avec un taux de transfert de 5
MB/s maximum
SCSI 2
FAST WIDE SCSI, norme SCSI sur 16 bits avec un taux de transfert de 20 MB/s
maximum
SCSI 3 Wide Ultra SCSI, norme SCSI sur 16 bits avec un taux de transfert de 40MB/s
SCSI 3 Differentiel Norme particulire SCSI 3 avec un taux de transfert de 40 MB/s
SCSI 5 Wide Ultra 2 SCSI, norme SCSI sur 16 bits avec un taux de transfert de 80 MB/s
SDLT 1 Mdia Super DLT utilis en SDLT 220 et 320
SDLT 2 Mdia Super DLT utilis en SDLT 640
SDLT 1280 Technologie Super DLT de 640 GB
SDLT 220 Super DLT de 110 GB
SDLT 2400 Super DLT de 1,2 TB
SDLT 320 Super DLT de 160 GB
SDLT 640 Super DLT de 320 GB
SDSL Technologie xDSL symtrique avec une vitesse de 768 kb/s limite 3,6 KM
SE Norme de connectique standard utilise en SCSI
Segment Nom donn aux parties de donnes dans la couche transport du modle TCP/IP
Serveur
Ordinateur partageant ses ressources en rseau. On distingue suivant
l'application des serveurs de fichiers, d'application et d'impression.
Session (couche) Niveau 5 du modle OSI: la gestion des communications rseaux
SHDSL
Technique xDSL symtrique permettant une connexion de 192 Kb/s 2,3 Mb/s
sur 1 paire et 384 Kb/s to 4.6 Mb/s sur 2 paires
SMF Cble rseau en fibre optique mono mode
SMP
Symetric multiprocessing, technologie multiprocesseurs o tous les
microprocesseurs utilisent un seul systme d'exploitation
SMTP "Simple Mail Transport protocol", protocole de gestion des mails
Sous-tension
Tension sur un rseau lectrique ou montage lectronique infrieure la
tension d'alimentation prvue
Spam (Spams) Courrier indsirable envoy une multitude de personnes
Splitter
Filtre utilis pour dissocier le signal analogique tlphonique du signal
numrique ADSL
Spyware Programme espion pour INTERNET
SSID Nom des groupes dans les rseaux sans fils
Stackable
(empilable) se dit des switch qui peuvent s'interconnecter entre-eux pour ne
former qu'un seul concentrateur
Starlan
Normalisation IEEE 802.3 1 base 5 de connexion Ethernet 1 Mbps par paire
tlphonique invente par A&T
Statefull packet
Inspection
Technologie des firewall hardware pour comparer des paquets de donnes
entrants.
Store and Forward
Technologie des switch Ethernet qui stocke toutes les trames avant de les
envoyer
Storm Trojan
Striping (RAID 0), connexion de disques en parallle pour augmenter le dbit
STP
"Shilded Twisted Pair", cbles paire torsade blinds Ethernet RJ45 qui est
entour d'une feuille d'aluminium pour faire cran.
Super DLT Technologie de Quantum drive des bandes DLT
Sur-tension
Dpassement de la tension nominale sur un rseau lectrique ou dans un
montage lectronique
Switch (commutateur), type de concentrateur intelligent
Symtrique (xDSL)
Liaison DSL o la vitesse de transfert en upload est identique celle de
download
Dfinition commenant par T
T1 Ligne loue amricaine (1,544 Mb/s) ou japonaise (1,544 Mb/s)
T2 Ligne loue amricaine (6,312 Mb/s) ou japonaise (6,312 Mb/s)
T3 Ligne loue amricaine (44,736 Mb/s) ou japonaise (32,064 Mb/s)
T4 Ligne loue japonaise (97,728 Mb/s)
Taux de Transfert Nombre de byte (octets) transfrs par secondes
TCP Protocole de livraison de donnes orient connexion
TCP/IP (modle) Modle de communication utilis par INTERNET
Tear drop Attaque de type Denial of Service
Telnet protocole de connexion sur une machine distante (serveur) en tant qu'utilisateur
Thread
Morceau de programme dont la particularit est de s'excuter sparment du
reste du programme, utilis par l'hyper-threading
Terminaison
rsistance de
Rsistance place aux 2 extrmits d'un cble coaxial rseau pour attnuer les
rverbrations, aussi appel Bouchon
Tocken Ring Structure rseau en anneau dveloppe par IBM
TOE
Type de cartes rseaux ETHERNET en Giga et 10 Giga qui travaillent jusqu'au
niveau 4 du modle OSI
Topologie Mthode de raccordement physique des rseaux
Trame
Nom donns aux segments de messages dans la couche "Accs rseau" du
modle TCP/IP
Transitoire Signal parasite sur un rseau lectrique
Transport (OSI) Niveau 4 du modle OSI qui gre la gestion des erreurs
Transport (TCP/IP)
Assure l'acheminement des donnes et les mcanismes permettant de connatre
l'tat de la transmission dans le modle TCP/IP
Tritube Technologie utilise pour les projecteurs vido de haute Gamme
Trojan
(Storm - Vers - cheval de Troie - backdoor) Programme pour prendre le contrle
d'un PC distance
Tunnel Liaison Internet scurise et crypte utiliss par les VPN
Dfinition commenant par U
UDP Protocole de transfert de donne non orient connexion
Ultra 2 Narrow Norme SCSI sur 8 bits avec un taux de transfert de 40 MB /s
Ultra 2 Wide Norme SCSI sur 16 bits avec un taux de transfert de 80 MB/s
Ultra Narrow SCSI Norme SCSI sur 8 bits avec un taux de transfert de 20 MB/s
UMA
Uniform Memory Access, technologie multi-processeurs utilise dans les
architecture SMP
Upload
Vitesse de chargement utilisateur vers Internet dans une connexion INTERNET
(voir download)
UPS
(Onduleur) Uninteruptible Power supply, appareil permettant d'alimenter un
appareil lectrique en cas de panne ou perturbation du rseau lectrique
UTP Unshielded twisted Pair, cble paire Ethernet RJ45 torsade non blinde
Dfinition commenant par V
VDSL et VDSL 2
Technologie xDSL symtrique et asymtrique avec un dbit en upload
(ascendant) de 1,5 2,3 Mbps et en dowload de 13 52 Mbps sur 1 paire
tlphonique sur une distance de 1,5 Km pour sa version standard. En version 2,
dbit maximum de 250 Mbit/s la source pour descendre 100 Mbit/s 500
mtres et 50 Mb/s 1 KM en mode asymtrique.
Vers trojan
Virus
Programmes malveillants qui perturbent le fonctionnement des programmes
d'un PC
VPN
Virtual Private Network, rseau priv virtuel: permet de se connecter un
rseau d'entreprise via INTERNET.
Dfinition commenant par W
WEP
Wired Equivalent Privacy, norme de scurit rseaux sans fils 802.11B et
802.11G remplace par 802.11i
Wide Se rfre aux connexions SCSI sur 16 bits
Wide Ultra SCSI SCSI 3, norme SCSI 16 bits, taux de transfert de 40MB/s
Wide Ultra 160 Norme SCSI 16 bits, taux de transfert de 160 MB/s
Wide Ultra 320 Norme SCSI 16 bits, taux de transfert de 320 MB/s
Wide Ultra 2 SCSI SCSI 5, norme SCSI sur 16 bits avec un taux de transfert de 80 MB/s
WIFI Autre nom des rseaux sans fils 802.11b
WIFI 5
Autre nom des rseaux sans fils 802.11a, ne pas confondre avec le WIFI
(802.11b)
Wingate Logiciel faisant fonction de routeur et proxy sous Windows
WPA Wi-fi protect access, norme de protection des connexions rseaux sans fils.



1. Introduction - 2. Paramtrage d'un pont DWL-2100AP D-Link - 3. Configuration
d'une station - 4. Rcapitulatif
1. Introduction.
Installer un rseau sans fils (Wlan) implique la scurisation du rseau pour viter son
utilisation de l'extrieur par des personnes "non-admises": utilisation de votre connexion
Internet ou mme piratage complet de votre systme par un gamin malintentionn. Rien ne
sert de protger l'accs votre rseau interne des intrusions via Internet si le voisin (ou un
autre) peut rentrer directement.
Une connexion sans fils utilise diffrents niveaux:
le type de connexion
le canal utilis
la divulgation du SSID, le nom du groupe raccord sans fils
l'autorisation uniquement de cartes avec des adresses MAC dfinies.
La cl de cryptage en WEP (obsolte), WPA
Nous allons utiliser pour cette procdure un pont (rptiteur). Le pont va uniquement
servir connecter des PC munis de cartes rseaux sans fils un rseau local Ethernet
standard. La connexion Internet utilisera un routeur Ethernet standard en plus.
1.a. Les types de rseaux sans fils Wifi.

Frquence
liaison
hertzienne
Dbit
maximum
Distance maximum Remarque
802.11 2,45 Mhz 2 Mb/s 100 mtres Premier rseau sans fils
802.11A
Wifi5
5 6 Ghz
54 Mb/s
maximum
Jusque 366 mtres
l'extrieur, 91 m
l'intrieur.
Incompatible avec les
autres liaisons
802.11B
Wifi
2,4 Ghz 11 Mb/s 100 mtres
Liaison sans fils la plus
courante en Europe
802.11B+ 2,4 Ghz 22 Mb/s 100 mtres
Amlioration du
802.11B et compatible
Cryptage sur 64, 128 et
256 bits.
802.11G 2,4 Ghz 54 Mb/s 100 mtres
Compatible 802.11,
802.11B et 802.11B+
802.11G+ 2,4 Ghz 108 Mb/s 100 mtres
Version amliore du
802.11G
Le 802.11A ne travaille pas dans la mme zone de frquence que les autres normes.
Un appareil 802.11A ne pourra donc pas se connecter sur un autre type de rseau sans fils.
Pour les autres liaisons, il y a une compatibilit ascendante. Un appareil de connexion en
802.11G+ adaptera sa vitesse si une carte rseau en 802.11 tente de se connecter par exemple,
et ainsi de suite.
1.b. Les canaux de communications.
Une connexion sans fils peut utiliser un canal parmi 13 (de 1 13). Pour une
communication entre 2 appareils sans fils, les canaux doivent correspondre. Certains appareils
dtectent automatiquement le canal.
1.c. Le SSID
Le SSID est un genre de nom de groupe de la connexion sans fils, il est diffrent du
groupe de travail propos par Windows. Un appareil sans fils ne peut se connecter que s'il est
dans le mme nom de rseau que l'quipement raccorder. Nanmoins, un pont wifi
communique par dfaut son nom de groupe. De ce fait, tout appareil se baladant dans la zone
de couverture dtectera ce nom de groupe. Il est nanmoins possible sur de nombreux
appareils de ne pas envoyer le SSID. Les appareils dj repris sur ce SSID pourront
nanmoins se connecter.
1.d. L'adresse MAC.
Chaque carte, routeur possde une adresse spcifique et unique que l'on appelle
l'adresse MAC. Elle est implante dans la carte la fabrication et ne peut donc pas tre
modifie. Certains appareils permettent d'accepter des connexions uniquement par des
installations dont l'adresse MAC est repris dans une liste interne. C'est le meilleur niveau de
scurit mais le plus difficile mettre en oeuvre. L'adresse MAC est gnralement
directement reprise sur l'appareil, rarement pour les cartes rseaux.
En Win98, l'adresse MAC est donne par la commande winipcfg.exe (Dmarrer ->
excuter)

En Windows 2000 et XP, elle se dtermine par la commande DOS IPconfig/all.
2. Paramtrage d'un point d'accs 802.11G+ D-Link
DWL2100AP
Je ne reprend pas ici la configuration complte de l'appareil. Voyons comment
scuriser la connexion sans fils. Je vous passe galement les mots de passe, ... pour rentrer
dans l'administration de l'appareil. Les systmes sont quivalents dans la majorit des
appareils.

Premire fentre de configuration, l'accs sans fils. La zone Wireless Band ne peut tre
modifie et signale que l'appareil travaille en 802.11G. En effet, le G+ n'est pas (encore)
normalis.
Le SSID (ici YBET) est le groupe d'utilisateurs autoriss ce connecter. Par dfaut, le
SSID Broadcast ENABLE. Le pont envoie donc l'extrieur son groupe via les les liaisons
hertziennes. Ceci signifie qu'un PC dans le rayon de l'appareil dtectera le rseau par son nom
de groupe. Il est ici DISABLE. L'appareil ne communique pas son nom de groupe
l'extrieur. Par contre, un PC programm avec ce groupe pourra se connecter. Il y a
nanmoins un dcalage de quelques secondes entre la mise en route de la liaison sans fils et la
connexion effective. DISABLE est donc nettement prfrable pour la scurisation du rseau
qui sera inconnu de l'extrieur.
Le Channel (canal) est celui utilis par la communication. Normalement, les appareils
doivent obligatoirement tre dans le mme canal. Nanmoins, certains quipement font un
scannage de tous les canaux disponibles (DWL-610 par exemple). Ce n'est donc en elle mme
pas une scurit suffisante.

La page suivante reprend des configurations particulires:
Access Point PtP Bridge PtMP Bridge AP repeater AP Client
Mode par dfaut,
permet la
connexion de PC
au rseau sans fils
Connexion de 2
points d'accs
entre-eux. Par
exemple, 2
btiments.
Connexion de
plusieurs points
d'accs sans fils.
Cette
configuration
permet au DWL-
2100 AP de
fonctionner
comme un
rptiteur et
d'augmenter la
distance de
Configuration
comme client
sans fils. Dans ce
mode, le DWL
est vu comme un
simple appareil
sans fils.
transmission
L'adresse MAC
de l'autre
quipement doit
tre indiqu. La
connexion est
donc uniquement
entre 2 appareils,
l'exclusion de
PC.
Les adresses
MAC des autres
points d'accs (
l'exclusion des
PC) ne sont pas
obligatoires mais
fortement
conseilles.
Dans ce mode,
l'adresse MAC de
l'appareil de
connexion sans
fils qui est
connect doit tre
rentre. Ceci n'est
pas lie la
scurit mais
pour viter des
interfrences.
L'adresse MAC
du point d'accs
(un autre appareil
connect en
access Point) doit
tre rentre.
Nous ne nous intressons qu'au mode "Access Point", le plus courant.

La fonction Filtrage (Filters) va permettre d'autoriser uniquement des cartes d'adresse MAC
prdfinies. C'est pour rappel, le niveau de scurit le plus lev.

Dernire commande de scurit, l'encryptage. Un rseau utilisant cette protection utilise
une cl de chiffres hexadcimals ou ASCI. Pour rappel, l'hexadcimal utilise une base 16,
tandis que les codes ascii (utiliss pour les lettres) une base 8.
Open System: Dans ce cas toutes les stations peuvent se connecter (sauf filtrages plus haut)
mais doivent utiliser la mme cl que l'appareil si l'option est Enabled comme ci-dessus.
Shared Key: Ceci ncessite l'implantation d'un protocole spcial, le PAE. C'est l'ordinateur
serveur qui va accepte la connexion de l'utilisateur et renvoyer la cl de cryptage au client. Le
serveur doit tre renseign au point d'accs.
WPA (Wi-fi Protect Access): Le WPA est une norme de scurit non standardise. Elle est
remplace depuis juin 2003 par la norme IEEE 802.11i et permet de changer
automatiquement la cl de chiffrement. La norme suivante (802.11X) permettra encore une
meilleure scurisation des connexions par certification utilisateurs.
Le chiffrement: La premire scurit est d'activer (enabled) cet encryptage. Le choix peut
tre dans cet appareil en hexadcimal ou en ASCII. Gnralement, dans les cartes rseaux,
seul l'hexadcimal est utilisable.

Le cryptage peut tre avec une cl de 64, 128 ou plus rare
de 152 bits (n'est pas souvent implante dans les cartes
rseaux actuelles). Plus le niveau est lev, plus la
"dcouverte" de la cl est difficile et donc meilleure est la
scurit.

L'option suivante permet d'utiliser 4 cls de scurit. Nanmoins, l'option VALID Key ne
permet de n'en utiliser qu'une la fois. L'utilisation de 4 cls est donc nettement
optionnelle.
3. Configuration d'une station
Voyons maintenant la connexion d'une station, ici un portable avec carte rseau
intgre sous Windows XP home.

Nous utiliserons directement les fonctions fournies par Windows XP. Comme les proprits
du rseaux ne sont pas diffrentes d'un rseau Ethernet normal, nous ne nous intressons qu'
la configuration de la carte (Configurer).

La configuration est assez rduite. Nanmoins, on retrouve:
Channel, le canal de communication iden,tique celui du point, ici 6. Network Type est
de type infrastructure pour une connexion sur un point d'accs. Le SSID est repris ici et
permet de dterminer le groupe de connexion.
Ce n'est pas tout. Dans les connexions rseaux, utilisons la touche contextuelle pour
slectionner la fonction "Afficher les rseaux disponibles"


Cette fonction permet d'afficher tous les rseaux sans fils disponibles (qui transmettent leur
SSID). Ici, le SSID est donn la carte rseau puisque nous avons slectionn de NE PAS
TRANSMETTRE LE nom du rseau par le pont Wifi. La cl rseau doit tre identique la
cl slectionne dans le pont.
L'authentification par 802.11X ne doit tre coche que si si vous utilisez sur le pont le
mode Shared Key, les cls sont automatiquement fournies par le serveur et ncessitent
l'implantation du PAE.
4. En conclusion.
La configuration d'un rseau sans fils passe par:
1. Choix du canal
2. Choix du SSID
La scurisation du rseau sans fils demande
1. Pas de transmission par le pont du SSID
2. Cl rseau, si possible 128 bits, en WEP (obsolte) ou en WPA
3. Filtrage des adresses MAC autorises se connecter
Ceci n'est qu' la limite du suffisant. En effet, des logiciels permettent d'analyser les
trames (les messages) et ainsi de dtecter les informations dans les messages (login, mots de
passe, ...). Parmi ces logiciels, on retrouve Wi-Fi Scanner et Airsnort sous Linux, Net
Stumbler (Windows) et mme Mini Stumbler pour les PocketPc. Bref, les possibilits sont
nombreuses et seule l'utilisation des adresses MAC autorises permet rellement de scuris
un rseau sans fils. La solution de scurit de cryptage (cl rseau) utilise le WEP (Wired
Equivalent Privaty). Selon des tudes rcentes, ce n'est pas une relle scurit. Le
chiffrement est facilement dterminable par des professionnels
Pour les rseaux hautement sensibles, l'utilisation d'un VPN est galement une source
supplmentaire de scurit. Le VPN se branche alors entre la borne de rception sans fils (ici
le DWL-2100AP) et le switch de connexion au rseau Ethernet.. Pour rappel, le VPN en
capsule des paquets IP chiffrs (en-ttes et donnes) dans d'autres paquets qui transitent entre
2 stations.
Pour une relle scurit, il faudra attendre l'arrive de la norme informatique de scurit
802.11X qui permettra l'authentification des utilisateurs avec le protocole EAP (Extensible
Authentification Protocole), en plus du cryptage des informations. Dans ce cas, l'accs n'est
autoris que si l'utilisateur est enregistr sur un serveur RADIUS (Remote Authentification
Dial-In User Service) tel que le logiciel libre Free Radius. Ce logiciel fonctionne sous
Windows 2000 serveur et Win2003 serveur. L'change pralable du login - mot de passe peut
passer par certificat (ventuellement intgr dans une carte puce) ou plus simplement par
l'algorithme MD5 avec une scurit moindre.
Dans tous les cas de donnes sensibles, il est prfrable de connect l'installation sans fils
comme liaison extrieur du firewall, par exemple entre le firewall et la connexion ADSL.
Ceci implique forcment l'utilisation d'un VPN.
14. Dpannage rseau local
1. Rappel.
Un rseau local permet de connecter plusieurs ordinateurs entre eux pour partager les
ressources (donne et rpertoire du disque dur, imprimantes, ...) ou partager une connexion
INTERNET. La connexion entre deux ordinateurs ncessite la comptabilit entre:
le support de communication (cble, liaison sans fils)
les cartes rseaux (spcifique selon la connexion) mais gnralement Ethernet ou Wifi
et les points d'accs associs
le programme de gestion (systme d'exploitation)
le protocole. Le protocole est le langage utilis par le programme de gestion pour
communiquer entre les ordinateurs. Le langage le plus utilis actuellement est le
TCP/IP. D'autres existent mais ne peuvent tre utiliss sur INTERNET: NetBui, IPX
(rseaux Novell avant Netware 4.1).
Si vous avez install un firewall logiciel, avant de tester l'ensemble de l'installation,
commencez par vrifier les configurations du firewall, ou du moins dsactivez le pour tests.
Ceci est surtout valable pour Windows XP SP2 qui en inclut un en standard. Norton semble
continuer bloquer certaines connexions rseaux mme dsactiv.
Un dpannage rseau complet serait trop complexe mais voici dj quelques pistes pour des
rseaux TCP/IP. Un autre problme rseaux est repris sur Workgroup est inaccessible
2. Dpannage
A. Dans "voisinage rseau", le PC ne se reconnat pas lui-mme.
Vrifiez si le partage disque dur / imprimante est activ pour cet ordinateur.
Carte rseau et connexion OK: en RJ45, vrifiez les LED sur l'HUB (switch) et sur la
carte rseau. A de trs rares exceptions prt (faux contact dans les connecteurs RJ45,
inversion de cble avec des switch de trs bas de gamme) ceci signifie que la
connexion rseau est bonne.
Vrifiez si le pilote de la carte rseau est le bon (notamment lors d'une dtection
automatique de Windows). Gnralement, un pilote non adapt spcifique la carte
fonctionne mais les connexions sont ralenties.
Attention aux nombreux problmes de cblage (paires respectes, loignement des fils
du rseau lectrique, ...)
B. Dans "Voisinage rseau", le PC se reconnat lui-mme. Dans ce cas, le pilote de la carte
rseau est correct.
Dans le cas d'un branchement direct rseau entre 2 ordinateurs (sans switch), le cble
doit tre crois. Ce mme cble doit tre utilis pour relier 2 concentrateurs (hub,
switch, routeur) entre eux mme si les switchs et la majorit des routeurs (au moins 4
ports) intgrent le MDI/MDIX qui permet d'utiliser n'importe quel cble, le
concentrateur paramtrant la connexion automatiquement. Dans le cas d'un PC
branch sur un concentrateur, le cble doit tre droit. Par contre, certain petit modem
(y compris ceux proposs par Voo) obligent un cble crois pour relier le PC.

La premire chose est de vrifier si le protocole IP est bien implant. Sous DOS tapez
la commande PING 127.0.0.1. Cette commande doit renvoyer ceci. Sinon,
dsinstallez IP dans les paramtres rseaux (ou plus gnralement tous les paramtres
rseaux), redmarrez le PC et rinstallez le tout.

Commencez par dterminer l'adresse IP sur chaque PC. Utilisez pour cela la
commande DOS "IPCONFIG".

Faite ensuite un ping XXX.XXX.XXX.XXX ou les X sont l'adresse de chaque PC
partir des autres (ping est un programme DOS). Dans l'exemple ci-dessus, tapez
partir des autres ping 192.168.1.152 . Ceci permet de dterminer si les PC sont en
communication et donc si la connexion (cble, switch ou hub, ...) est correcte. Dans le
cas de 2 PC connects en direct, le cble doit tre crois comme mentionn dans le
chapitre 4 de Hardware: les rseaux Ethernet
Pour rappel, pour que 2 stations puissent communiquer entre-elles sans passer par un
routeur, les stations doivent tre dans la mme classe d'adresse, comme mentionn dans la
chapitre 20 du cours INTERNET sur les concentrateurs (Hub, switch et routeurs)
Dans paramtres / rseau, vrifiez si le groupe de travail est le mme pour les 2
ordinateurs.
Message mot de passe non valide: "vrifiez votre login / mot de passe", en
correspondance sur le serveur. Sur les serveurs en 2000 - 2003 - 2008, utilisez
dconnexion dans le menu Dmarrer pour ouvrir une autre session (avec mot de
passe).
Dans les paramtres rseaux, vrifiez les protocoles sur chaque machines (TCP/IP le
plus courant, mais pour certains programmes ou configuration: NetBui, IPX).
Si vous avez attribu des adresses IP fixes, elles doivent tre dans la mme classe
d'adresse mais diffrentes (sinon, message conflit d'adresse). Par exemple: 192.168.1.5
et 192.168.1.20. Essayez la commande DOS ipconfig.exe (Win98) ou ipconfig (en
ligne de commande DOS) pour dterminer les paramtres TCP/IP. Vous pouvez
galement utiliser la commande DOS Ping (TCP/IP) pour vrifier si le PC est bien
connect. Par exemple Ping 192.168.1.5 mais attention certain firewall.
En mlange Win95/98/Me, n'utilisez pas les paramtrages automatiques par disquette
propos par Windows! Ils ne fonctionnent qu'avec le mme systme d'exploitation
Aucun autre PC dtect: vrifier le groupe de travail dans les proprits rseaux
(95/98) ou dans les proprits systmes du panneau de configuration (onglet
identification rseau) pour les systmes d'exploitation actuels.

Firewall logiciel install. Vrifiez s'il ne bloque pas ces connexions. Pour rappel:
Windows XP et Vista incluent d'office un firewall (mme s'il est peu performant).
C. Problmes de communication.
Sont rassembls ici quelques problmes lis l'exprience dans des problmes de
communication alatoires.
La connexion rseau fonctionne mais est lente. Ce problme peut venir d'une quantit de
raisons: pilote carte rseau, cblage, ...
Le pilote de la carte rseau doit tre celui fourni par la carte. Ce problme survient
notamment avec les cartes utilisant un circuit Railtek. Mme si le circuit lectronique
est le mme, utilis un pilote "quivalent" provoque souvent des ralentissements
alatoires.
Les rgles de cblage doivent tre respecte: respect des paires, longueur infrieure
100 mtres, pas de passage prs des fils lectriques et Nons. Des renseignements
complmentaires sur ces problmes sont repris de la cours Hardware 2 sur les
connexions Ethernet.
3. Quelques commandes DOS rseau
L'ensemble des X est remplac par l'adresse de destination IP ou par le nom du site
PING XXX.XXXX.XXX.XXX (sous DOS pour vrifier la communication. Si les PC ne sont
pas dans la mme classe d'adresse, le ping fonctionne mais pas la connexion.
Connatre l'adresse IP d'une station IPconfig (sous DOS)
Quels sont lesPC connects NET View (sous DOS)
D'o vient la connexion et par quel chemin: Tracert XXX.XXX.XXX.XXX (sous DOS)
Winipcfg (par excuter, commande Windows 98, plus en 2000 - XP - Vista), affiche l'adresse
MAC et l'adresse IP.
Pour une liste plus complte
4. Partage de connexion INTERNET.
Cette rubrique permet de retrouver quelques pistes mais le cours INTERNET reprend des
explications plus compltes suivant le mode de partage utilis. Avant de vrifier le partage,
les PC connects entre eux pour le partage doivent se reconnatre.
PC dans la mme classe d'adresse (y compris adresse interne du routeur si c'est
d'application). Si ce n'est pas le cas, le rseau ne fonctionne pas.
Protocole IP utilis pour tous les PC. Ce protocole est utilis par dfaut pour tous les
systmes d'exploitation Microsoft sauf Windows 95 ( rajouter par Dmarrer ->
Paramtre -> Panneau de configuration -> Rseau).


. Dans les proprits de TCP/IP -> carte rseau: La passerelle doit souvent tre renseigne.
L'adresse de la passerelle est celle du PC qui partage la connexion (partage par Windows) ou
celle du routeur. Parfois cela fonctionne sans, parfois non. Gnralement je la met.

De mme les paramtres DNS primaire et secondaire doivent souvent tre activs sur les PC.
Ils sont fournis par le fournisseur d'accs, cf paramtres Internet fournisseurs d'accs. La
fentre ci-dessous provient d'un Win98. Hte et domaine peuvent tre invent dans notre cas.
Par contre, en Win 2000 et XP, si le rseau interne est important, le nom de domaine peut tre
obligatoire pour le rseau interne (utilisation d'un serveur utilisant l'Active Directory Service).



8. Partage d'une connexion ADSL
8.1. Introduction - 8.2. Installation d'un rseau Ethernet RJ45 - 8.3. Mthodes de
partage de connexion INTERNET
8.1. Introduction
L'utilisation de l'ADSL permet dans de nombreux cas de partager la connexion entre
plusieurs ordinateurs (PC et Mac). Avant de paramtrer ces partages dans les chapitres
suivant, voyons comment partager une connexion Internet: les mthodes utilises, avantages
et inconvnients, matriels mettre en oeuvre.
Le partage de connexion INTERNET ADSL (ou autre) passe par l'installation d'un
rseau. Celui-ci peut tre de type Ethernet 10/100 (le plus courant) ou mme sans fils. Un
rseau permet de relier des PC entre-eux pour partager des ressources (rpertoires,
imprimantes et priphriques). Dans notre cas, c'est le priphrique modem qui nous
intresse, ou plutt appareil de communication Internet. Ce chapitre reprend le paramtrage
du rseau.
8.2. Installation d'un rseau Ethernet RJ45
8.2.1. Installation des cartes rseaux, cblage
Les cartes rseaux Ethernet 10/100 sont trs bon march, moins de 10 , quand elles
ne sont pas intgres sur la carte mre de l'ordinateur. Chaque PC qui va utiliser la connexion
doit tre quipe d'une telle carte de communication. Le cas d'un rseau sans fils sera vu plus
tard. Pour l'installation d'une carte rseau, rfrez-vous au cours hardware 2. Ceci ne pose pas
de problmes particuliers, le CD-Rom d'installation de votre systme d'exploitation vous sera
demand pour Wndows 98, pas pour les versions suivantes.
Les cartes rseaux Ethernet 100 travaillent la vitesse 100 Mb/s, la possibilit
d'utiliser la vitesse 10 Mb/s n'est pratiquement plus utilise. Les dernires versions utilisent le
Gb/s.

Les rseaux Ethernet utilise un cblage en cuivre sur 8 fils, similaire au cble
tlphonique. Ce type de cblage est appel RJ45, du nom du connecteur fix chaque bouts
du cble. Pour relier les cartes rseaux entre elles, on utilise un Hub ou un switch. Chaque PC
se relie vers ce concentrateur suivant un cblage dit en toile. Si vous n'utilisez que 2 cartes
rseaux, vous pouvez galement utiliser un cble crois comme sur la figure ci-dessous. La
longueur maximale des cbles rseau Ethernet 10/100 est de 100 mtres. Ces cbles peuvent
tre achets tout fait ou mme fabriqu l'aide d'une pince spciale. Rfrez-vous au chapitre
4 du cours hardware 2 pour les normes de cblages (couleurs et numro de pin) si vous
souhaitez fabriquer vous-mme ces cbles.

Cble RJ45 10/100 droit Cble RJ45 10/100 crois
Lorsque les cartes rseaux sont installes dans votre PC et connectes au switch ou
l'UPS, les LED du Switch et de la carte rseau correspondante doit tre allume. Ce n'est pas
la condition sine qua non pour avoir une connexion, mais gnralement, ceci prouve que la
connexion physique existe.
8.2.2. Paramtrage du rseau.
Une fois le cblage dtermin et termin, reste la liaison entre les PC. Pour
communiquer, les ordinateurs doivent utiliser le mme langage de communication. En rseau,
on appelle cela un protocole. Un PC peut utiliser plusieurs protocoles en mme temps. Dans
des rseaux normaux amateurs, ceci n'apporte aucun intrt mais augmente le trafique de
donnes et donc ralentit la communication. Le protocole utilis pour les partages Internet (et
dans la majorit des rseaux actuels) est TCP/IP. Il est implant par dfaut dans Win98, Win
Millenium, Win 2000 et Win XP. Par contre, pour les PC sous Win95, il faudra le rajouter par
le panneau de configuration -> rseau: ajouter protocole IP.

Une fois le rseau local install, on retrouve l'icne suivant sur le
bureau. Ce programme va permettre de vrifier vos connexions rseau.
Remarque, il n'y a pas de PC affichs si aucune ressource (rpertoire,
imprimante, ...) n'est partage sur un ordinateur. Cette notion est reprise
dans l'article "Paramtrer un petit rseau".
Dans un rseau IP, chaque PC doit tre dans la mme classe d'adresse pour pouvoir
communiquer. ceci est repris dans la page des ports INTERNET. Pour viter des surprises, il
est conseill de mettre les PC dans les classes d'adresses comprises entre 192.168.0.1.
192.168.255.254. Les plages d'adresses sont 192.168.0.X, 192.168.1.X, ... Gnralement, si
un quipement sur le rseau permet le mode DHCP (routeur, station sur Win2000 ou XP),
ceci se fait automatiquement. Les adresses termines par 0 et 255 ne sont pas utilisables. Ceci
fait 254 installation maximum dans une classe d'adresses IP locale.
Pour vrifier l'adresse IP d'une station, utilisez la commande DOS/ IPCONFIG

La commande renvoie l'adresse de la carte (ici 192.168.1.128), son masque de rseau
(255.255.255.0) et l'adresse de la passerelle par dfaut (192.168.1.1, nous en reparlerons
bientt).
Pour vrifier si 2 PC communiquent, vous pouvez utiliser la commande DOS: PING
X.X.X.X ou X.X.X.X est l'adresse IP d'une autre station. Par exemple: ping 192.168.1.1.
Dans le cas o les adresses ne sont pas dans la mme classe, vous pouvez paramtrer
vos adresses manuellement. Dans Panneau de configuration -> Paramtres rseaux,
slectionnez TCP/IP carte rseaux et cliquez sur proprits. Tapez pour chaque PC une
adresse dans la mme classe 192.168.1.1, 192.168.1.2, ... jusqu' 192.168.1.254. Comme
masque de sous rseau, utilisez 255.255.255.0 pour chaque station.

Pour partager des ressources, ce n'est pas ncessaire pour INTERNET, les PC doivent
galement tre dans le mme groupe de travail. Pour cela, dans les paramtres rseaux,
cliquez sur "identification". Dans la majorit des cas, le PC doit redmarrer pour prendre en
compte les modifications (Win95, Win98 et Me). Pour Windows 2000 et XP, utilisez l'onglet
identification rseau dans les proprits systmes du panneau de configuration. Pour la
majorit des systmes d'exploitation Windows, le groupe par dfaut est Workgroup. XP gre
cette possibilit diffremment et il faudra le rentrer manuellement.

8.3. Mthodes de partage de connexion
Internet
Une fois le rseau local install, diverses mthodes sont possibles suivant l'importance
du nombre de PC connects, le niveau de scurit souhait, ...
La mthode la plus
simple et la moins coteuse
est d'utiliser le partage
fourni avec Windows. Cette
solution pose parfois
quelques problmes de
paramtrages, ncessite que
l'ordinateur sur lequel est
connect le modem doit tre
allum, n'offre aucune
scurit (tous les PC
connects sont dtects de
l'extrieur) mais est
implante dans Windows depuis Win98 seconde dition. Elle est donc gratuite. Cette
possibilit peut tre implante avec un modem ADSL USB. Les stations peuvent varier de
Win95 Windows XP. Chaque PC peut dmarrer la connexion, mais celle-ci ne peut tre
coupe que pas le PC sur lequel est connect le modem. Il est parfois ncessaire de
dslectionner le pare-feu de XP sur les stations. Cette solution s'adapte jusque 5 PC sans
perte de vitesse.
La deuxime mthode utilise des logiciels de type proxy dont le plus clbre est
Wingate. Ces logiciels font la fonction entre la connexion Internet par modem Ethernet RJ45
(ce qui ncessite 1 deuxime carte rseau) ou modem USB et le rseau connect sur une carte
rseau indpendante. Les avantages sur la premire solution viennent du NAT (Network
Adresse Translate) qui cache les adresses internes du rseau et du proxy. Un proxy travaille
comme une zone mmoire qui stocke les pages les plus couramment lues, faisant gagner en
vitesse et masquant certaines visites de sites. Le logiciel joue galement le rle de firewall
(pare-feu) pour le rseau interne. Cette solution plus esthtique ncessite donc galement 1
ordinateur allum en permanence pour le partage de la connexion. Elle est rserve des
utilisateurs avertis cherchant une certaine scurit.
La troisime solution passe par un routeur. Cet appareil se connecte entre le modem
RJ45 et le rseau. Quelques modles permettent la connexion aux PC via un port USB, avec
quelques rats. Les routeurs peuvent inclure diverses possibilits ou quipements: switch
intgr, firewall hardware, serveur DHCP. Le NAT est toujours intgr dans ces appareils. Au
dpart, un routeur sert principalement relier des quipements dans des classes d'adresses IP
diffrentes.
La quatrime solution, pratiquement identique celle d'un logiciel proxy, est base sur
une installation Linux sur une machine avec 2 cartes rseaux. Les fonctionnalits sont
quivalentes mme si les inconditionnels de ce systme d'exploitation vous diront que c'est la
solution pas chre et scurise.
La cinquime solution consiste galement installer des appareils de protections entre
le routeur et le rseau interne: firewall, serveur proxy, VPN (connections aux rseau interne
par INTERNET), ... Ceci dpasse le cadre de cette formation.
Le partage Internet par Windows sera vu dans le chapitre suivant. Le paramtrage de
la connexion ADSL par routeur sera vue au chapitre 10. Les autres possibilits sont rserves
des spcialistes.
Partage Windows
Partage
logiciels
proxy
Partage
routeur
Partage
Linux
Partages
spciaux.
1 PC sert la connexion:
doit rester allum
Oui Oui - Oui -
Connexion automatique
Oui (sauf
paramtrage
spcifique)
Oui Oui Oui Oui
Adresses internes du
rseau invisibles: NAT
- Oui Oui Oui Oui
Scurisation firewall - Oui / non *
Oui / non
***
Oui * Oui
Possibilits de VPN - Oui / non *
Oui /
Non
****
Oui Oui
Facilit d'installation
Prix de revient
PC ou matriel
supplmentaire (en plus du
switch rseau)
Non Non **
Oui /
Non ***
Oui Oui
* Suivant modles ou configuration.
** Les logiciels de types proxy peuvent travailler et partager la connexion
*** Certains routeurs intgrent un petit firewall non paramtrable et un modem ADSL.
**** Quelques routeurs acceptent cette solution NON scurise.

Linternet rapide et permanant

La fibre optique
Elle n'a jamais autant t la mode, mais qu'est-ce exactement ? Et
quoi sert-elle ? Pour aller vite, c'est un fil de verre, entour d'une gaine rflchissante . Sa
proprit principale est de servir de tuyau dans lequel on peut faire circuler de la lumire.
En plus de servir construire tout un tas de gadgets amusants, on peut lui trouver quelques
applications plus technologiques, allant de l'endoscopie au transfert de donnes numriques.
Vous l'aurez devin, c'est plutt cet aspect l qui va nous intresser.
Bien entendu, dans ce domaine d'application, la fibre optique se met ressembler
furieusement n'importe quel cble lectrique et perd beaucoup de son aspect potique. (C'est
galement le cas pour l'endoscope).
Pourquoi donc essayer de transporter de l'information numrique
de cette manire ? Qu'est-ce qu'on y gagne ?
Autant de questions qui trouveront, je l'espre, des rponses dans les pages qui suivent. Je
vous rassure tout de suite, il n'est pas question de se lancer dans de brillantes dmonstrations
appuyes par de vastes calculs, mais simplement d'essayer d'expliquer le principe.
La lumire
Eclairons notre lanterne
La thorie de la lumire est une thorie particulirement obscure. Nous allons passer
beaucoup de temps utiliser de faux modles pour expliquer des phnomnes vrais , dans
la mesure o l'on peut les vrifier par la pratique.
Onde ou Photon ?
Pour expliquer certaines observations, il faut que la lumire soit une onde. Pour en expliquer
d'autres, il faut qu'elle soit un flux de particules. Qu' cela ne tienne, nous nous en sortirons
quand mme, la mauvaise foi n'ayant jamais touff un scientifique. Louis de Broglie (Fr.,
1892-1987) a avanc en 1924 que les corpuscules de matire taient accompagns d'une onde,
ce qui, en quelque sorte, rsout le problme de faon assez lgante.
Mais comment la lumire ?
Nous allons utiliser un modle d'atome (faux), celui de Bohr. En fait, il n'est pas tout fait
faux, mais il n'est pas juste non plus; a ne fait rien, il permet d'expliquer l'mission de la
lumire d'une manire tout fait acceptable.

1. Bohr explique que, dans un atome, les lectrons tournent autour du noyau selon des
orbites bien dfinies. Ce n'est pas tout fait juste, mais presque. C'est en tout cas
suffisant comme prcision pour notre propos.
2. Lorsque l'on excite les lectrons, par exemple en les chauffant, ces lectrons
rcuprent de l'nergie. Ce surcroit d'nergie les fait passer sur une orbite suprieure.
3. Comme la situation est instable, ils finissent par revenir sur leur orbite normale en
restituant l'nergie qu'ils avaient emprunte. Cette restitution d'nergie se fait sous
forme d'mission de lumire.
On dit que l'lectron franchit des niveaux d'nergie. C'est grce cette particularit de la
physique atomique que Thomas Edison est devenu clbre. Dans une ampoule lectrique, les
atomes du filament, chauffs par effet Joule au passage du courant lectrique, montent des
niveaux d'nergie suprieurs et mettent de la lumire chaque fois qu'ils redescendent sur un
niveau infrieur.
Le problme, en ces temps d'cologie, d'nergie non nuclaire mais renouvelable, de
rchauffement atmosphrique, c'est que la quantit d'nergie fournie pour chauffer le filament
est normment plus importante que l'nergie lumineuse rcupre. Le rendement est de
l'ordre de 2% en moyenne pour une ampoule incandescente filament de tungstne. D'o
l'ide lumineuse d'en interdire la vente partir de 2010. La bougie alors ? 0,04% de
rendement Le tube fluorescent ? Autour de 15% de rendement. C'est nettement mieux, mais
c'est aussi nettement plus polluant chimiquement et lectromagntiquement parlant. Le
meilleur rendement est actuellement obtenu avec de la vapeur de sodium en basse pression :
27%. Certes, c'est un peu orang comme lumire. Le mieux serait de se passer de lumire ; a
se faisait trs bien l'poque des cavernes. Mais ne sortons pas du sujet
Blanche ou colore ?
Lorsqu'un lectron redescend sur une couche infrieure, il met une lumire
monochromatique. La couleur dpend du niveau d'nergie descendu. La lumire apparat
blanche parce qu'il y a beaucoup de niveaux d'nergie diffrents mis en uvre et qu'il y a
donc beaucoup de radiations de couleurs diffrentes qui sont mises. Leur somme donne une
lumire blanche. Nous sommes ici en synthse additive et la somme de toutes les couleurs
donne du blanc.
Dans le cas de corps simples comme le non, il n'y a que deux niveaux d'nergie et donc une
seule couleur, dans l'orange.
Avec l'argon aussi, il n'y a que deux niveaux. Manque de chance, ici, la lumire n'est pas
visible, elle est situe dans l'ultra violet. C'est pour cette raison que dans les tubes
fluorescents, il y a de la poussire (trs polluante) dpose sur la face interne du tube. Vous ne
comprenez pas ? C'est pas grave, nous ne sommes pas ici pour expliquer le fonctionnement du
tube fluo. (Allez, je vais vous le dire quand mme ; l'nergie lumineuse non visible mise par
l'argon excite son tour les atomes de cette poussire qui, eux, vont mettre de la lumire
visible. Suivant la nature de cette poussire, la lumire sera plutt froide , tirant sur le bleu;
ou chaude tirant sur le jaune-rouge. La temprature d'une lumire se mesure en
Kelvins, par analogie au rayonnement lumineux d'un corps noir chauff une certaine
temprature).
Observez le spectre

La lumire visible s'tend de l'infrarouge l'ultraviolet, bornes non comprises. Bien entendu,
ici, nous considrons que la lumire est une onde.
(1 nanomtre = 10
-9
mtre = 1/1 000 000 de millimtre)
Si vous vous sentez plus l'aise avec les frquences, la lumire visible s'tend de 4 x 10
14

8 x 10
14
Hz (400 000 GHz 800 000 GHz).
Et quelle vitesse...
On a coutume de dire 300 000 Km/s C'est bien entendu faux, a dpend du milieu dans lequel
la lumire se propage. Ceci dit, les variations de vitesse restent minimes; elles peuvent tout de
mme apporter certaines perturbations suivant les conditions d'utilisation. Ce dtail a son
importance dans le cas de la fibre optique.
Dans quelle direction...
On a aussi coutume de dire qu'elle se propage en ligne droite. Vous l'avez devin, ceci est
galement faux la plupart du temps. Ce n'est vrai qu' la condition que le milieu dans lequel
elle se propage soit homogne et isotrope, ce qui est rarement le cas. La preuve que c'est faux:
les mirages existent.
Maintenant que toutes ces fausses bases sont donnes, passons l'tape suivante.
Le changement de milieu
Que fait la lumire lorsqu'elle rencontre un obstacle ?
Elle le traverse.
Elle est rflchie par cet obstacle.
Elle est absorbe par cet obstacle.
Elle subit une combinaison de ces trois possibilits.
Imaginons que le bleu soit de l'air et le jaune du
verre. Un rayon de lumire qui vient de l'air vers le verre selon un angle d'incidence donn va
:
Se rflchir et retourner dans l'air, c'est le rayon rflchi (sinon, les vitres de vos
voisins ne vous blouiraient jamais en rflchissant le soleil) ;
pntrer dans le verre (sinon vous ne verriez rien travers vos vitres, ni travers celles
de vos voisins) en subissant une dviation de trajectoire, (cette dviation ayant lieu
deux fois, une vitre a gnralement 2 faces, elle n'est pas remarquable dans la plupart
des cas, mais si l'on plonge un bton dans de l'eau, ne semble-t-il pas se plier
brutalement au passage dans l'eau ?) ;
perdre un peu d'nergie dans l'aventure (sinon, les vitres ne chaufferaient pas au
soleil).
Le bilan nergtique doit tre nul, savoir que l'nergie rflchie plus l'nergie rfracte
(transmise) plus l'nergie absorbe galent l'nergie incidente. (Loi de la conservation de
l'nergie, sans laquelle le monde serait bien plus chaotique que ce qu'il n'est dj).
Le rapport entre l'nergie rflchie et l'nergie transmise varie en fonction de l'angle
d'incidence. Il existe un angle critique Alors, a dpend de la faon dont on le mesure. S'il
est mesur comme indiqu sur le schma, lorsque cet angle devient infrieur l'angle critique,
il n'y a plus de rayon rfract et, aux pertes par absorption prs, la totalit du rayon incident
est rflchie. Ceci va tre trs important pour la suite.
L'angle de dviation entre le rayon incident et le rayon rfract dpend de plusieurs choses.
De la nature du dioptre (sparation entre les milieux); autrement dit, dpend des deux
milieux considrs.
Le plus souvent, dpend galement de la longueur d'onde de la lumire incidente.
Sinon, les arcs-en-ciel n'existeraient pas. Si les milieux ne sont pas dispersifs, alors il
n'y a pas d'arc-en-ciel. Mais la plupart des milieux le sont (ceci aussi va d'ailleurs nous
poser des problmes).
C'est cohrent ou a ne l'est pas ?
Le plus souvent, a ne l'est pas. Mais qu'est-ce que a veut dire ? La lumire normale ,
celle que l'on utilise habituellement (avec nos ampoules incandescence, bientt interdites),
n'est pas cohrente. Les petits trains d'ondes lumineuses mis par les lectrons qui descendent
les niveaux d'nergie, le sont n'importe quand, de faon alatoire. Il n'y a aucune cohrence
dans la forme des ondes lumineuses, constitues d'une somme de petits trains d'ondes de
mme frquence, mais mis avec une phase alatoire. On ne peut donc pas observer une belle
sinusode, comme on sait les faire en lectricit par exemple. Ici, la thorie du photon arrange
bien, c'est plus facile de parler d'un flux de particules que d'une onde sinusodale constitue de
petits morceaux qui ne sont pas en phase.
De ce ct l, le laser est bien intressant parce qu'il fournit une lumire cohrente, ce qui lui
donne des proprits particulires que l'on ne va pas numrer ici, mais dont on va relever
quelques particularits:
La lumire laser peut tre considre comme une onde part entire, c'est une
mission continue.
La lumire laser peut tre concentre sur un faisceau trs fin et se propager non pas
selon un cne, mais selon un cylindre.
La lumire laser est parfaitement monochromatique.
La lumire laser peut transporter beaucoup d'nergie.
Ceci nous suffira largement pour la suite.

La fibre optique
Pourquoi faire ?
Pour faire un tuyau dans lequel on peut faire passer de la lumire.
Nous avons vu que la lumire avait une certaine tendance se propager en ligne droite. Pour
transporter de l'information d'un point quelconque vers un autre point quelconque, ce n'est pas
trs pratique; un tuyau, c'est mieux, a peut prendre des virages.
Comment faire ?
Dans un premier temps, faisons simple. Une lumire incohrente et pas forcment
monochromatique, dans une fibre construite sans trop de prcautions.
Le principe de base, c'est le coup du dioptre. la fibre de verre va tre gaine d'un autre
matriau tel que le dioptre ainsi form soit avantageux pour nos besoins, savoir:
Un angle critique le plus grand possible (tel que nous l'avons dfini dans la page
prcdente), ceci afin de supprimer autant que possible tout rayon diffract.
Des absorptions d'nergie les plus minimes possibles lors de la rflexion sur le dioptre.

Je vous entends me dire : Oui, et dans les virages ? Parce que c'est bien le but, prendre des
virages. Dans les virages, c'est l'angle d'incidence qui va tre malmen. Il faut s'arranger pour
ne pas passer l'angle critique. Naturellement, tel que c'est dessin ici, il y aura forcment des
rayons qui arriveront dans le virage avec un angle trop grand et il y aura donc un rayon
diffract, perdu pour tout le monde.
Personne n'a jamais dit que les fibres optiques transmettaient la lumire sans pertes ! Et ce
n'est d'ailleurs pas la seule source de pertes.
Il serait possible de faire des calculs pour dfinir, en fonction du rayon de courbure, du
diamtre de la fibre et de l'indice de rfraction, les pertes d'nergie lumineuse Nous n'allons
pas le faire, mais en regardant le schma ci dessus, on comprend bien que plus de diamtre du
cur de la fibre sera petit, plus on minimisera les risques d'un angle d'incidence trop grand.
D'un autre ct, ce sera plus dlicat de faire passer dans cette fibre une quantit de lumire
donne. C'est le mme problme que dans un tuyau de plombier, dbit constant (m
3
/s), plus
le diamtre sera petit, plus il faudra augmenter la pression.
Les problmes qui arrivent...
Le premier arriv attend l'autre
Ce n'est pas la peine de faire des calculs compliqus pour voir sur l'illustration que les divers
rayons qui vont pntrer dans la fibre vont suivre des chemins diffrents, plus ou moins longs
suivant le nombre de rflexions subies. Comme ils vont tous la mme vitesse (du moins
pour une longueur d'onde donne), ils ne vont pas tous arriver l'autre bout en mme temps.
De plus, nous pouvons assister des phnomnes d'interfrences.
Un Kilomtre pied...
La nature du verre
1)
et celle du dioptre font qu'il y a des pertes dans la fibre. Pertes dues la
turbidit du verre et pertes dues aux rflexions. Il ne faudra pas s'attendre ce que la longueur
utile d'une fibre optique soit infinie.
La lumire se disperse
Le verre et ses quivalents sont des milieux dispersifs. La vitesse de propagation va varier en
fonction de la longueur d'onde. Si l'on introduit une lumire qui n'est pas monochromatique,
on va rcuprer en sortie plusieurs lumires diffrentes et a ne va pas aider reconstituer
le signal.
Au final...
Tous ces inconvnients vont imposer des limites d'utilisation:
Une bande passante maximale. Si l'on envoie des impulsions lumineuses, elles
seront rcupres avec une certaine distorsion et si cette distorsion devient trop
grande, on ne pourra plus reconstituer l'information. Nous comprendrons mieux cet
effet sur les illustrations qui suivent.
Une longueur maximale. Il est assez comprhensible que, plus la fibre va tre longue,
plus ces perturbations vont tre observes. Pour une performance attendue, il y aura
une longueur maximale dfinie, en fonction des technologies utilises.
Les parades
Il va falloir construire des fibres capable de limiter le plus possible ces problmes.
La fibre multi mode
Dans cette famille, nous trouvons deux sous catgories:
La fibre saut d'indice.

C'est la plus ordinaire . Le cur a un relatif gros diamtre, par rapport la longueur d'onde
de la lumire (de l'ordre du m dans l'infrarouge). Tous les inconvnients vus plus haut se
manifestent ici. Observez l'allure de l'impulsion de sortie, compare celle de l'impulsion
d'entre. Ce sont bien entendu des informations non quantitatives.
La fibre gradient d'indice

Ici, deux amliorations sont apportes:
1. Le diamtre du cur est de deux quatre fois plus petit.
2. Le cur est constitu de couches successives, indice de rfraction de plus en plus
grand. Ainsi, un rayon lumineux qui ne suit pas l'axe central de la fibre est ramen
en douceur dans le droit chemin.
Comme vous pouvez l'observer, les rsultats sont dj de meilleure qualit.
La fibre mono mode

C'est le top . Le diamtre du cur est trs petit, les angles d'incidence le sont donc aussi.
Les rsultats sont excellents, mais, compte tenu de la faible section de cette fibre, seul la
lumire laser est ici exploitable. Il n'y a pas de miracle, c'est la solution la meilleure, mais
aussi la plus onreuse.
Illustrations extraites du site: www.httr.ups-tlse.fr/pedagogie/cours/fibre/fotheori.htm. Site
que je vous invite par ailleurs visiter si vous souhaitez en savoir plus sur ce domaine. (Et
sur d'autres domaines aussi).
Quelques questions habituelles
La fibre optique coute-t-elle cher ?
Non. Par rapport au cble en cuivre, elle aurait mme tendance couter moins cher, surtout
avec l'envole du prix des mtaux. En revanche, la connectique et les convertisseurs d'nergie
lectrique/lumineuse et rciproquement placer aux extrmits coutent cher, trs cher mme,
suivant les technologies mises en uvre.
La fibre optique est-elle bidirectionnelle ?
Oui. Cependant, on ne l'utilise souvent que dans un seul sens, pour simplifier les
convertisseurs placs aux extrmits. Si l'on souhaite exploiter une fibre optique dans les deux
sens, il faudra:
- Utiliser des longueurs d'onde diffrentes pour chaque sens.
- Utiliser des extrmits capables de capter de la lumire pour la convertir en lectricit ET
mettre de la lumire en fonction d'un signal lectrique. C'est ralisable, mais a a un cout.
Peut-on passer plusieurs informations diffrentes dans la mme fibre et les rcuprer l'autre bout
intactes ?
Oui, il y a mme deux mthodes pour le faire:
- Si l'on utilise plusieurs longueurs d'ondes lumineuses. L aussi, il y a une incidence sur la
complexit des quipements aux extrmits. C'est du multiplexage spatial, rapprocher du
large bande sur le cuivre ou la HF.
- On peut galement faire du multiplexage temporel.
Ces techniques seront vues plus loin dans ce chapitre.
Quels sont les principaux avantages de la fibre optique ?
- La fibre optique est totalement insensible aux rayonnements lectromagntiques dans
lesquels nous baignons.
- L'attnuation du signal est infrieure celle d'un conducteur lectrique et les distances
couvertes sans ncessit d'installer des amplificateurs sont bien plus grandes.
- La bande passante est gnralement bien suprieure celle que l'on peut obtenir avec un
cble lectrique.
La fibre optique est-elle fragile ?
Pas particulirement. C'est la connectique qui peut l'tre. Le seul problme, c'est le rayon de
courbure minimum qui la rend assez peu souple d'emploi pour les installations volantes .
Quelles performances peut-on en attendre ?
D'une grosse centaine de Mga bits par seconde, comparable ce que l'on sait faire avec du
cuivre, au record actuel ( l'heure o ces lignes sont crites) dtenu par Alcatel:10,2 Tbit/s (10
200 Gbit/s), sur une distance de 100 kilomtres. Un autre record: 3 Tbit/s (3 000 Gbit/s), sur
une distance record de 7 300 kilomtres
Si la fibre a autant de qualits, pourquoi ne l'utilise-t-on pas plus ?
Je vous le demande. Notez que l'on commence en parler srieusement, au moins dans les
zones forte concentration urbaine.
1)
verre ou toute autre matire transparente fera l'affaire
Mthodes
Mais comment font-ils ?
Dans le principe, les mthodes sont simples. Ce qui l'est moins, c'est de matriser les
technologies ncessaires. Mais pour comprendre le fondement, prenons un cas simple .
La paire tlphonique
Tout le monde connat ces deux bouts de fil de cuivre qui permettent de brancher un
tlphone ? Voyons dj ce que l'on peut faire avec.
Bande passante du signal
Dans le cas du transport de tlphonie analogique, nous allons vhiculer sur cette paire de
cuivre un signal lectrique analogique (dont la forme d'onde est analogue celle du signal
acoustique), dont la bande passante va de quelques Hertz 4 KHz. Tout simplement parce que
c'est largement suffisant pour garder un message vocal comprhensible. On a coutume de dire
que l'homme est en mesure d'entendre des sons entre 20 Hz et 20 KHz. C'est une
approximation, bien entendu. Cette bande passante couvre l'ensemble des frquences
audibles. Si l'homme pouvait, avec ses seules cordes vocales couvrir un aussi large spectre, ce
serait amusant Un chanteur lyrique est capable de couvrir peine un peu moins de trois
octaves (d'une frquence 8x cette frquence).
Bande passante du cble tlphonique
Si par ailleurs, on essaye d'valuer la bande passante de la paire tlphonique, on arrive
gnralement faire passer des frquences allant jusqu'au Giga Hertz sur une longueur
moyenne , entendons par l, la longueur moyenne qui relie un abonn son centre de
distribution. En pratique, c'est un peu plus complexe.
Consquence directe
Il y a un formidable gaspillage de moyens. On sous utilise abominablement les ressources
d'une structure existante. Pourquoi ? Parce qu'utiliser 100% des ressources de cette paire
torsade impose de mettre en uvre des technologies complexes, donc chres, et qu'il faut les
rentabiliser.
xDSL
Aujourd'hui, tout le monde court aprs les moyens de transports d'information numrique,
connexion l'internet oblige. Les technologies deviennent rentables et on les exploite. Ici, la
solution consiste utiliser des frquences situes au dessus de 4 KHz, pour qu'elles
n'interfrent pas avec la tlphonie, et de les moduler pour leur faire transporter de
l'information. Voyez le chapitre sur la bande passante pour plus de dtails sur ces techniques.
La moralit est que l'on peut obtenir une connexion Internet haut dbit (ADSL) qui va
passer par la ligne tlphonique, sans perturber la tlphonie, le tout pour un prix acceptable,
simplement en optimisant les ressources d'une installation existante.
La fibre optique
Sur la fibre optique, on va essayer aussi de trouver des technologies, qui, pour une qualit de
fibre donne, vont chercher optimiser le flux d'informations dans cette fibre. En effet, la
fibre optique, mme la plus rudimentaire (saut d'indice) dispose d'une bande passante au
moins gale celle que l'on peut esprer d'une paire torsade. Les fibres de type gradient
d'indice sont dj beaucoup plus performantes. Quant aux fibres mono mode, elles disposent
d'une bande passante incomparable.
Il existe grosso modo deux mthodes:
Multiplexage temporel
L encore, prenons un cas simple.

D'un ct, nous avons quatre lignes faible dbit A, B, C et D, disons, 640 Kbits/s. De l'autre
ct, nous avons une fibre optique qui pourrait passer facilement 100 fois plus Autrement
dit, alors que la ligne A par exemple, va mettre une seconde dverser 640 Kbits, la fibre
optique va faire passer ces 640 Kbits en 1/100 de seconde, et va attendre 99/100 de seconde le
paquet suivant en provenance de la ligne A.
Ici l'on va tout simplement utiliser un multiplexeur temporel, qui va accumuler des paquets de
donnes provenant des lignes A, B, C et D et les passer squentiellement sur la fibre optique.
Dit autrement, vous avez quatre petites routes, o les voitures roulent pare-chocs contre pare-
chocs. Ces quatre routes dbouchent sur une autoroute 10 voies. Les routes sont satures,
mais l'autoroute peut encore accepter beaucoup d'autres voitures.
Ce type de multiplexage s'appelle TDM (Time Division Multiplexing).
Dans cette approche, nous utilisons une fibre optique avec une seule source lumineuse. C'est
peut-tre dommage, parce que cette fibre, l'image d'un cble de cuivre, peut faire passer
plusieurs frquences (longueurs d'ondes), donc plusieurs couleurs.
Multiplexage spatial
Sitt dit, sitt fait. Nous allons utiliser plusieurs lasers de couleurs diffrentes. Ces faisceaux
lasers pourront voyager dans la fibre et tre rcuprs individuellement l'autre bout, grce
de simples filtres optiques.

Une fibre optique peut facilement transporter des longueurs d'ondes comprises entre 1 530 nm
et 1 565 nm, nous sommes dans l'infrarouge (l'illustration fait apparaitre des couleurs pour la
comprhension) et sur de la fibre mono mode. 35 nm d'cart, a ne parait pas beaucoup. Oui,
mais comme on sait sparer deux ondes lumineuses si la diffrence de longueur d'onde est de
0,8 nm et mme 0,4 nm, alors, on peut passer dans la mme fibre de 43 87 lumires
diffrentes. Cette mthode s'appelle: DWDM (Dense Wavelength Division Multiplexing). Si
l'on considre que l'on peut passer sans problmes 2,5 Gbist/s sur chaque canal
Avec cette mthode, il est mme possible d'utiliser certains canaux dans un sens et d'autres
canaux dans l'autre, ce qui permet de faire du full duplex avec une seule fibre.
Encore plus fort :
Paris, le 21 mars 2001 - Alcatel, (Paris: CGEP.PA, NYSE: ALA), leader mondial des
rseaux optiques intelligents, a tabli deux nouveaux records du monde pour des
transmissions DWDM multi-Trabits. Le Groupe a d'une part franchi la barre mythique des
10 Tbit/s (10 000 Gbit/s), tablissant le record mondial absolu de capacit de transmission sur
une fibre optique. Alcatel a d'autre part ralis une transmission record de 3 Tbit/s (3 000
Gbit/s) sur une distance transocanique de 7 300 kilomtres. (Source Alcatel)
Mais...
Cette technique emploie:
De la fibre mono mode
une (des) source(s) lumineuse(s) laser, ce qui est obligatoire avec ce type de fibre.
La fibre mono mode a un diamtre de l'ordre de 10 m (1/100 de millimtre). Ce n'est pas
bien gros et on devine que les technologies ncessaires pour enfiler un rayon laser dans
cette fibre ne sont pas simples. A fortiori s'il faut en faire passer plusieurs. Et il faut aussi
rcuprer les signaux l'autre bout.
En d'autres termes, les performances de cette technologie n'ont d'gal que son prix. Tout le
problme consiste donc choisir la technologie la mieux approprie ses besoins prsents et
futurs, pour ne pas se retrouver avec un rseau
Ruineux parce que la technologie utilise, trop chre, ne peut tre rentabilise.
Ruineux parce que la technologie utilise, trop peu performante pour une raison de
prix, ne pourra pas assurer l'invitable croissance ultrieure, autrement qu'en
multipliant les quipements de bout en bout du rseau.
Les sources lumineuses
Le plus souvent, ce sont des diodes lectroluminescentes. Il en existe de
toutes sortes. Il en existe mme qui sont capables d'mettre un faisceau laser.
Ces dispositifs ne sont pas normes, tmoin l'illustration ci dessous. L'allumette donne
l'chelle.

Les capteurs de lumire
Les capteurs ne sont pas plus gros, ce sont des photodiodes, diodes sensibles la lumire, qui
permettent assez simplement de convertir une variation d'intensit lumineuse en variation de
courant lectrique.
Conclusion
La fibre optique reprsente assurment le meilleur moyen actuel pour transporter de trs hauts
dbits d'informations numriques, et les besoins dans ce domaine vont probablement
augmenter trs fortement dans un avenir proche. Il est vraisemblable que la demande
concernant un simple accs Internet, d'ici quelques annes, sera identique ce que l'on attend
aujourd'hui d'un rseau local (100 Mbits/s au moins). Dans ces conditions, le panorama de
l'information aura compltement chang. La tlphonie, la radio, la tlvision et les transferts
de donnes informatiques seront assurs par la mme connexion, les interpntrations de
ces divers moyens d'informations seront beaucoup plus grands, c'est du moins un scnario tout
fait raliste.
Les locations de films vido, les chaines de tlvision ddies la cinmatographie et la vente
de CD Audio seront sans doute les premires activits remises en question.
Avec des dbits quivalents ceux d'un rseau local, l'internet va voluer considrablement.
Au choix, suivant les groupes de pression et les intrts conomiques mis en jeu, vers :
un internet de plus en plus peer to peer o le contenu va refluer vers la priphrie
du rseau, ce qui serait dans le droit fil de la philosophie initiale de l'internet, mais irait
l'encontre de bien des intrts conomiques en place ;
un internet de plus en plus minitelis , o petit petit, le contrle de l'information
qui circule sera remis entre les mains d'entits spcialises vers le cur du rseau, la
priphrie du rseau ne devenant plus que consommatrice, comme nous l'avons connu
avec le Minitel, exception nationale dont la France fut trs fire, mais qui n'a jamais
russi convaincre quiconque en dehors de nos frontires.
Note: La conclusion peut certes paraitre hors sujet (encore que, pour quelles raisons nos
oprateurs marchent-ils vitesse aussi force vers des dbits toujours plus grands ?), mais elle
mrite tout de mme que l'on y rflchisse.
Bande passante
Le transport d'information par modulation d'une porteuse n'est pas un phnomne nouveau
Il est l'origine de la radio. L'mission la plus rudimentaire que l'on puisse raliser, le morse,
est une modulation de porteuse en tout o rien.
Toujours utilise dans le domaine de la radio communication, avec des frquences de
porteuses de plus en plus leves, la modulation de porteuse est aussi employe dans la
communication numrique par cble, au sens gnral du terme cble (la ligne tlphonique en
faisant partie, avec les solutions xDSL).
Nous allons ici nous intresser la fourniture d'accs l'Internet par le cble et au transport de
l'information sur ce cble, dans sa partie cuivre, c'est dire entre les centres de distribution et
les abonns, le transport entre les ttes de rseau et les centres de distribution se faisant par
fibre optique. Nous verrons aussi comment ADSL fonctionne sur un support qui n'est
absolument pas prvu pour a l'origine.
Nous allons tudier :
1. Quelques principes de base de la modulation.
2. D'autres principes plus volus, qui permettent d'optimiser la bande passante utile d'un
canal de communication.
3. Une tentative d'explication des spcificits du cble concernant les bandes passantes
descendante et remontante
4. La mme chose, mais pour l'ADSL
Principes de base
Les fondements de la modulation
Dans cette partie, nous allons voir les mthodes lmentaires qui permettent de transporter un
signal sur une porteuse, ce qui reprsente la moiti du travail de tout MoDem qui se respecte.
(MoDem est une contraction de Modulateur-Dmodulateur).
La modulation permet de bricoler une porteuse pour qu'elle puisse transporter une
information. C'est la partie mission des donnes.
La dmodulation consiste quant elle rcuprer l'information utile en supprimant la
porteuse.

La modulation d'amplitude
Position du problme
Nous disposons d'un oscillateur capable de gnrer un signal sinusodal une
frquence de 123 MHz (au hasard). Ce signal est appel porteuse .
Par ailleurs, nous disposons d'un autre oscillateur, galement capable de gnrer un
signal sinusodal une frquence de 3 MHz (toujours au hasard). Ce signal est appel
modulation .
Enfin, nous avons un tas de silicium capable d'effectuer le produit (au sens
mathmatique) de ces deux signaux.
Voici graphiquement la reprsentation dans le temps de ce qui vient d'tre dit:

Constatations
La porteuse est tordue par l'opration. On voit clairement que son enveloppe a la forme du
signal modulant que l'on a appel modulation. En voyant le rsultat, on comprend bien
pourquoi cette mthode est appele modulation d'amplitude, mais on comprend moins
pourquoi faire cette cuisine.
Pourquoi faire, alors ?
Suivant le domaine d'application, le but recherch est lgrement diffrent.
En radio communications
Les signaux lectriques, lorsqu'ils atteignent des frquences leves, acquirent des proprits
lectromagntiques qui leur permettent de se propager dans le vide et dans l'atmosphre, ce
que ne sait pas faire un signal lectrique de basse frquence (les signaux lectriques, images
de frquences audibles par exemple, entre 20Hz et 20 KHz). Il devient alors possible de
transporter de la musique autrement que dans des fils lectriques. Pratique, en voiture par
exemple
Bien entendu, un autre tas de silicium est capable l'autre bout d'effectuer l'opration inverse:
la dmodulation pour jeter la porteuse qui ne sert plus et rcuprer la modulation. C'est le
rle des rcepteurs radio.
Ce principe est naturellement utilis aussi pour la tlvision, le tlphone cellulaire etc.
En communication sur des cbles
Ici, l'objectif est un peu diffrent. Les signaux lectriques savent se propager dans un milieu
conducteur. Mais suivez-moi bien.
Sur un cble bien conu, il est possible de faire passer un signal lectrique compris entre le
courant continu (0Hz) et des frquences assez leves (disons 1GHz, un milliard de Hz, dans
le cas d'un cble coaxial construit dans ce but). Si l'on utilise ce cble pour passer des signaux
acoustiques (entre 20 Hz et 20KHz), c'est un peu comme si l'on construisait une autoroute 6
voies pour y faire passer des vlos en file indienne.
Si en revanche, on utilise des porteuses modules, judicieusement places pour pouvoir les
isoler les unes des autres la rception avec des filtres (on sait bien le faire), on va pouvoir
faire passer plusieurs signaux sur le mme cble sans les mlanger! (multiplexage spatial).
C'est bien ce qu'il se produit sur LE cble (rseau cbl, celui de France Tlcom Cble par
exemple), puisque l'on y retrouve plusieurs chanes de tlvision, la radio, Les connexions
Internet et il reste encore un peu de place.
Dans le cas de l'ADSL, nous y reviendrons plus loin, le multiplexage spatial est galement
utilis.
Le spectre de l'onde module
Un certain FOURIER (Joseph FOURIER, 1768-1830) Physicien franais a dmontr qu'un
signal priodique de forme quelconque peut toujours tre dcompos en la somme de signaux
sinusodaux, selon une srie dite de Fourier . Ces signaux sinusodaux sont appels
harmoniques . Il n'est pas question de s'amuser ici faire des calculs, juste de comprendre ce
que c'est qu'un spectre .
Un spectre de Fourier reprsente sur une chelle de frquence, pour un signal priodique
donn, la distribution des harmoniques ainsi que leur amplitude.
Dans le cas simple d'une porteuse sinusodale module en Amplitude par un autre signal
sinusodal, le calcul reste simple, mais nous ne le ferons pas quand mme. Ceux qui ont
encore quelques souvenirs de lyce se rappelleront peut-tre qu'un produit de sinus fait
apparatre les cosinus de la somme et de la diffrence des angles. (Mais un cosinus peut se
transformer en sinus).
Nous prenons donc une machine calculer un peu perfectionne et nous lui demandons de
faire le travail notre place:

Celle qui a fait ce calcul est TRES perfectionne et EXTREMEMENT chre
Sur ce spectre calcul, on voit bien une composante 123 MHz et deux autres, l'une 120
MHz (123-3) et l'autre 126 MHz (123+3).
Dans ce cas prcis, si l'on construit un filtre ne laissant passer que les frquences comprises
entre 110 MHz et 130 MHz, toute l'information passera et l'on pourra recommencer
l'opration avec un autre signal en dehors de la plage de ce filtre, pour passer un signal
diffrent du prcdent, sans que ceux-ci se mlangent.
Ici, nous avons une largeur de canal de 6 MHz (126-120)
Notions connexes: BLD, BLU...
C'est dommage de ne pas en parler ici, mme si a ne sert pas en ce qui nous concerne (du
moins, ma connaissance). Vous pouvez passer ce paragraphe, o profiter de l'occasion pour,
peut-tre, augmenter votre culture technologique.
Dans le spectre ci-dessus, que peut-on remarquer ?
Les deux raies 120 et 126 MHz ont rigoureusement la mme amplitude,
l'information contenue dans chacune de ces raies est elle aussi rigoureusement
identique. Si le signal modulant tait un signal plus complexe, (nous en verrons un
exemple plus loin) nous observerions une parfaite symtrie des deux distributions de
raies de part et d'autre de la porteuse. Ces deux informations sont donc redondantes.
La raie de la porteuse a une grosse amplitude et n'apporte aucune information sur la
forme du signal modulant. Dans la pratique, son seul but est d'indiquer la frquence de
la porteuse.
Dans le cas o nous devons crer une onde lectromagntique partir de cette
porteuse module, il va nous falloir de l'nergie pour la faire porter loin. Un
amplificateur de puissance qui va consommer des watts lectriques et restituer:
o des watts HF pour l'onde lectromagntique (un peu)
o des watts thermiques (beaucoup), cause du rendement, toujours assez
largement infrieur 100%
Partant de ces observations, que pourrait-on conclure ?
L'nergie consomme l'mission va se rpartir dans:
o La raie de la porteuse (nergie perdue, il n'y a pas d'information l dedans,
hormis celle de sa frquence, qu'il faut tout de mme connatre pour pouvoir
dmoduler correctement).
o les deux bandes latrales, mais elles sont symtriques et une seule pourrait
suffire, puisqu'elles contiennent toutes les deux les mmes informations.
Donc
Bande Latrale Double
On va liminer la raie de la porteuse et n'mettre que les bandes latrales. On va gagner ainsi
en efficacit puisque l'nergie dissipe mettre la raie de la porteuse ne sera justement plus
dissipe La frquence de la porteuse reste facile retrouver, puisqu'elle se situe au milieu
du spectre.
Bande Latrale Unique
Plus fort, on bloque la porteuse ET une bande latrale. L'nergie utilise par l'amplificateur va
tre concentre sur la seule partie qui contient vraiment l'information. Le seul dtail technique
qui reste rsoudre est de savoir retrouver la frquence de la porteuse, pour pouvoir
dmoduler.
Mais alors...
Pourquoi ne pas y avoir pens plus tt ? On y gagne
trs largement en rendement, pour une puissance lectrique consomme, nous aurons
une nergie plus importante dans la partie signifiante du signal ;
En largeur de canal aussi puisqu'il n'y passe plus qu'une bande latrale sans porteuse.
Donc la largeur devient plus de deux fois infrieure ce qu'il tait ncessaire avant
d'adopter cette technique.
Pour y avoir pens, on y a pens, on l'a mme fait, tous les radio amateurs vous le diront. Il
n'y a qu'un seul petit problme, c'est qu' la rception, on ne peut plus reconstituer le signal
utile avec un dmodulateur simple. Pour y arriver, il va falloir d'abord reconstruire tout ce qui
manque
La raie correspondant la porteuse ;
La bande latrale qu'on a ventuellement supprime, dans le cas de la BLU.
Bien entendu, c'est faisable, au prix d'un rcepteur qui devient plus complexe. Dans le cas de
la BLD, c'est encore assez simple, il suffit de reconstruire la raie de la porteuse au milieu du
spectre du signal reu. Dans le cas de la BLU, c'est beaucoup plus compliqu.
La BLU est une technique trs rpandue sur les metteurs mobiles qui doivent, avec peu
d'nergie, disposer d'une longue porte. (Radio de bord sur des voiliers par exemple). En
gnral, on est assez loin des normes HIFI .
Cette mthode, utilise en graphie (mission radio en morse) a permis avec des
quipements trs rudimentaires les premires liaisons radio l'chelle mondiale.
Conclusions
Dans cette page, nous avons vu:
Le principe de modulation d'une porteuse en amplitude.
La notion de spectre d'un signal.
La notion de largeur de canal.
Le multiplexage spatial.
Mais nous ne voyons pas encore quoi a peut nous servir. Imaginons maintenant que la
porteuse 123 MHz soit :
1. Module avec un signal 3 Mhz pour signifier 1
2. Pas module du tout pour signifier 0
Pour pouvoir avoir des chances de reconstruire correctement l'information l'arrive, il faudra
moduler au moins sur une demi priode du signal modulant. On pourra donc envoyer les bits
au rythme du double de la frquence du signal modulant, soit 6Mbits/seconde. Ca vous parait
beaucoup? Pourtant c'est du gaspillage! On devrait arriver dans un canal aussi large
passer au moins 10 fois plus.
Pour l'instant, avec la mthode que nous avons vue, le seul moyen d'augmenter la bande
passante, c'est d'augmenter la frquence du signal modulant (sans dpasser la limite thorique
de la moiti de la frquence de la porteuse. Mais la lumire de ce que nous avons vu, si nous
multiplions par deux la frquence de la modulation, nous multiplions galement par deux la
largeur du canal
Comme la technique de la BLU n'est pas utilisable ici, Il va falloir trouver autre chose
Du sinus au carr
La modulation sinusodale, c'est bien pour la radio, moins pour le numrique o l'on manipule
des 0 et des 1 . Il est alors plus simple de moduler avec un signal rectangulaire:

Cette mthode est bien connue des tlgraphistes, o un 1 (porteuse) = un point ou un trait
et un 0 (pas de porteuse) correspond un silence. Mme dans le cas de virtuoses du
morse, la frquence moyenne du signal modulant est trs faible, ce qui conduit une largeur
de canal drisoire. Mais voyons tout de mme les choses d'un peu plus prs
Spectre d'un signal carr
Un signal carr, selon FOURIER, se dcompose en une somme de sinus de frquences de plus
en plus leves (multiples de la frquence dite fondamentale , gale celle du signal carr
lui-mme). Voici le spectre d'un signal carr de 3 MHz:

Regardons maintenant le spectre de notre porteuse de 123 MHz module avec ce signal:

Comme on pouvait s'y attendre, on retrouve le spectre du signal carr plac de part et d'autre
de la porteuse. La largeur du canal devient beaucoup plus importante cause des
harmoniques. Fort heureusement, il n'est pas utile de les laisser toutes passer pour tre capable
la rception de restituer notre information. Si l'on doit juste se contenter de dtecter la
prsence ou non de la porteuse, il suffira mme de ne laisser passer que la fondamentale, se
ramenant ainsi une modulation sinusodale, comme on l'a vu plus haut.
Conclusions
Par rapport au premier exemple de la porteuse module par un sinus, il n'y a pas beaucoup
d'amliorations, on a mme ajout les harmoniques qui, si l'on doit les rcuprer, ncessitent
d'augmenter la largeur du canal. Mais le signal modulant est facile fabriquer.
Remarque importante
Nous avons toujours utilis des signaux de modulation priodiques. Ce ne sera plus le cas
lorsque nous aurons passer des donnes. Ceci induit quelques ennuis:
L'analyse de Fourier ne fonctionne QUE sur des signaux priodiques. Nous pouvons
cependant crer artificiellement un spectre dans une unit de temps en admettant que
le signal modulant observ dans cette unit de temps constitue une priode d'un signal
rcurrent. Mais d'une unit de temps la suivante, ce signal aura chang de forme, si
bien que le spectre galement. Les outils de mesure nous montreront alors une sorte de
spectre moyen beaucoup plus flou que ce que nous montrent les exemples
prcdents. Ceci n'est pas grave et n'entame pas les rflexions faites jusqu'ici.
Un autre moyen...
Jusqu'ici, nous avons vu la modulation d'une porteuse en faisant varier son amplitude. Il existe
un autre moyen beaucoup employ dans la transmission numrique: la modulation de phase:

Dans cet exemple, l'chelle de temps a t trs dilate pour bien voir ce qu'il se passe. La
porteuse subit une rotation de phase de 180 au changement d'tat du signal modulant, ce qui
revient multiplier la porteuse par -1 sur un niveau 0 par exemple. Ce type de
modulation peut galement s'analyser par Fourier (bien que le calcul soit considrablement
plus compliqu, mais on s'en fout, c'est la machine puissante et chre qui le fait):

Remarquez ici qu'il n'y a plus une seule raie de grande amplitude, mais deux, 120 MHz et
126 Mhz, avec une porteuse toujours 123 MHz et une modulation 3 MHz.
Conclusion
Ici aussi, on pourra reconstituer l'information en ne conservant que ces deux raies, ce qui nous
fait toujours un canal de l'ordre de 6 MHz
On n'a encore rien gagn, si ce n'est que l'on connat une nouvelle mthode de modulation.
D'autres modulations sont galement possibles :
La modulation par sauts de phase. Mme technique que vue plus haut, mais les
dphasages peuvent tre d'un angle infrieur.
La modulation en frquence, o le frquence de la porteuse est modifie par le signal
modulant. Cette mthode est peu utilise pour la transmission de donnes numriques.
Principes volus
Rcapitulons
Nous avons vu principalement deux types de modulation:
La modulation d'amplitude, qui ne touche pas la frquence de la porteuse, juste son
amplitude.
La modulation de phase, qui ne touche pas l'amplitude de la porteuse, juste sa
phase.
Eh bien, la solution vient d'tre donne, il suffit de combiner les deux types de modulation
pour augmenter le rendement
Et puis, on va mme aller plus loin:
Plutt que de moduler l'amplitude sur deux niveaux, pourquoi pas sur n ?
Plutt que de moduler la phase par pas de 180 , ce qui ne donne que deux
possibilits, pourquoi ne pas le faire par pas de 90, ce qui en donnerait 4 ?
Mais que va-t-on y gagner exactement?
On est justement l pour le voir
Dfinitions PRIMORDIALES...
Il est grand temps maintenant de tordre le cou une confusion prsente dans bien des esprits:
Il y a normalement une ENORME diffrence entre un bit et un baud.
Le Bit
C'est une valeur binaire (Binary Digit). Un bit = 0 ou Un bit=1. Il est impossible d'aller plus
loin.
Le symbole
Encore appel cellule . Nous avons vu qu'il fallait dfinir une dure minimale de
modulation de la porteuse, pour pouvoir reconstruire le signal la rception. Typiquement :
Une demi priode du signal modulant.
Dans la pratique, le nombre de symboles que l'on peut faire passer par unit de temps influe
directement sur la largeur du canal.
Le Baud
The number of discrete signal events per second in a data transmission
(Dfinition officielle.)
Un Baud est donc une unit de vitesse, parler de bauds/seconde n'a aucun sens . Lorsque l'on
module une porteuse, on le fait avec une modulation d'une valeur donne pendant un temps
donn. Exemple:
Je module une porteuse 123 MHz avec un signal plat, pendant 0,15 S (micro seconde, 0.15
x10
-6
seconde). Ce signal plat peut prendre 4 valeurs: 0,25 ou 0,5 ou 0,75 ou encore 1.
Toutes les 0,15 S (i.e. toutes les 150 nS), je change la valeur du signal plat. Je construis des
symboles (ie. cellules) qui contiennent 2 bits! Pourquoi?
4=2
2
autrement dit, on peut dfinir quatre valeurs diffrentes avec 2 bits:
Taux de modulation 0,25 0,5 0,75 1
Equivalent binaire 00 01 10 11
Voici ce que a donne en simulation:

Si l'on s'y prend bien en choisissant judicieusement la dure de la cellule, le spectre de la
porteuse module entrera dans la largeur du canal que l'on s'est donne, et on y gagnera quand
mme en densit d'information transporte.
La vitesse en Bauds reprsente la quantit de ces cellules que l'on peut transporter par
seconde. Dans notre exemple, 1/150.10
-9
(les cellules font 150 nS) soit environ 6 mgabauds.
Comme on transporte 2 bits par cellule, on est environ 12 mgabits/seconde.
Un baud n'est donc pas forcment gal 1 bit/seconde, il ne l'est mme quasiment
jamais et un modem V90 ou V92 56 kb/s n'est certes pas un modem 56 000 bauds. Il est
clairement impossible d'obtenir une largeur de canal de seulement 4 KHz en passant 56
000 symboles par seconde.
Vous l'avez compris, le jeu va maintenant consister enfiler le plus grand nombre possible de
bits dans un seul symbole
Les modulations hybrides
Amplitude
Rien n'interdit, donc, de moduler une porteuse la fois en amplitude et en phase. Nous avons
une porteuse que nous modulons en amplitude, seulement avec deux niveaux:
Taux de modulation 0,5 1
Equivalent binaire 0 1
Bien entendu, avec cette mthode, nous ne transportons qu'un seul bit la fois, chaque cellule
ne contient qu'un bit.
Amplitude + phase
Maintenant, nous allons en plus moduler en phase. Le dphasage sera nul ou gal 180
Taux de modulation 0,5 0,5 1 1
Dphasage 0 180 0 180
Equivalent binaire 00 01 10 11
Pour chaque niveau d'amplitude, nous avons deux cas possibles. Au total, a nous en fait 4.
Cette fois-ci, nous transportons 2 bits la fois dans chaque cellule. Nous avons augment le
nombre de bits pas seconde sans augmenter le nombre de cellules pas seconde (bauds), donc
nous amliorons le dbit de donnes sans augmenter la largeur du canal.
Porteuses en quadrature
Une astuce d'lectronicien, un peu droutante, mais efficace quand mme. Nous allons utiliser
maintenant non pas une, mais deux porteuses rigoureusement de mme frquence. Elles sont
dphases de 90
Ce qui est droutant, c'est que lorsque l'on additionne deux porteuses de frquence f
0
en
quadrature, on obtient une seule porteuse, toujours de frquence f
0
:

Mais rassurez-vous, les lectroniciens ont plus d'un tour dans leur sac et savent parfaitement
reconstituer les deux porteuses initiales partir de la rsultante.
L'avantage de cette mthode est que la porteuse rsultante n'a pas chang de frquence, mais
comme les deux sous-porteuses en quadrature vont tre modules indpendamment l'une
de l'autre, nous pourrons transporter deux fois plus d'informations par cellule.
Dans le cas le plus simple, nous allons provisoirement abandonner la modulation en
amplitude pour ne garder que la modulation de phase.
Phase de la premire sous porteuse 0 0 180 180
Phase de la seconde sous porteuse 0 180 0 180
Equivalent binaire 00 01 10 11
Cette faon de faire permet une reprsentation graphique dans un plan :
Chaque axe reprsente une sous porteuse. La partie
positive de l'axe reprsente un dphasage nul. La partie ngative de l'axe reprsente un
dphasage de pi (180)
Par rapport ce que nous venons de voir, nous ne gagnons rien de plus qu'une mthode
supplmentaire, puisque le nombre de bits pas cellule demeure inchang. Cette mthode de
modulation s'appelle QPSK (Quadrature Phase Shift Keying).
Avant d'aller plus loin...
Cette mthode de modulation est d'une solidit
toute preuve. En effet, le dcodage la rception va se borner dtecter dans quel quadrant
se situe le point.
Or, si la reprsentation graphique que nous venons de voir (appele : Constellation) est d'une
nettet quasi parfaite, voici ce que a donne dans la ralit, avec les perturbations apportes
par le bruit :
Dans la pratique, le point va se situer quelque part dans le nuage, dcal de sa position
thorique par le bruit lectronique. La surface du nuage sera d'autant plus grande que le
rapport signal/bruit est faible, autrement dit, que le bruit est important par rapport au signal.
La modulation QPSK permet de reconstruire l'information, mme en prsence d'un bruit
important.
Cette modulation nous sera utile dans la suite, puisque les modems cble l'utilisent pour la
voie remontante (upload).
QAM 16
Quadrature Amplitude Modulation. Nous
l'utilisons ici avec 16 tats, simplement en introduisant deux niveaux de modulation
d'amplitude, au lieu d'un seul.
Pour chaque porteuse, nous reprenons le tableau dj vu :
Taux de modulation 0,5 0,5 1 1
Dphasage 0 180 0 180
Equivalent binaire possible 00 01 10 11
Mais, grce aux deux sous porteuses en quadrature, nous allons cette fois-ci transporter 4 bits
par cellule, donc 2
4
tats possibles soit 16 tats.
Remarque importante :
Nous avons augment le nombre de points de la constellation, mais pas la largeur du canal
d'mission, puisque le nombre de symboles mis par seconde (bauds) n'a pas chang. Dans la
pratique, nous augmentons le dbit sans augmentation de bande passante, mais au prix d'une
relative fragilit du signal. En effet, les points de la constellation tant plus rapprochs, ils
seront plus difficiles dcoder en cas de bruitage de la ligne.
De plus en plus compliqu

Une autre faon de reprsenter la constellation consiste utiliser un modle vectoriel, qui est
un outil mathmatique plus adapt, parce que dans un repre polaire, il est reprsent par un
module (longueur) et un argument (angle). Comme nous avons ici deux porteuses en
quadrature, nous aurons un point de fonctionnement qui sera dfini par un vecteur gal la
somme de deux vecteurs en quadrature.

Si l'on reprend l'exemple de la modulation QAM 16, nous aurons par axe, donc par porteuse,
deux vecteurs d'argument 0 et de modules reprsentant le taux de modulation d'amplitude
utilis et deux autres vecteurs de mme module, mais d'argument gal 180. Comme les
porteuses sont en quadrature, nous obtenons ceci, dessin pour un seul quadrant. Bien
entendu, la reprsentation complte reconstitue exactement la constellation vue plus haut. Au
bout du compte, nous pouvons mme oublier la reprsentation quadratique et raisonner sur
une seule porteuse, qui sera module avec une amplitude (module du vecteur, sa longueur) et
une phase (argument du vecteur, son angle) calcule par cette mthode.
La rpartition des valeurs de symboles sur la constellation ne se fait pas au hasard, elle est
normalement prvue pour optimiser la rception, lorsque la constellation a t abme par le
bruit. Le choix judicieux de cette rpartition se fait au moyen d'algorithmes complexes, qui
sortent largement du cadre de cet expos, surtout destin expliquer qualitativement comment
se fait le transport de donnes.
Des algorithmes plus ou moins compliqus permettent de dfinir des constellations contenant
de plus en plus de points, c'est dire de plus en plus de bits dans chaque symbole. Ainsi, nous
utiliserons des modulations de type :
QAM 64 (2
6
), 6 bits par symbole. QAM 128 (2
7
), 7 bits par symbole

Gardons prsent l'esprit que ces manuvres ont comme consquences :
D'augmenter le dbit en bits par seconde sans augmenter pour autant la largeur du
canal de communication.
De diminuer l'immunit au bruit du signal modul.
Conclusions
Les protocoles de transmission de donnes comportent toujours des algorithmes de correction
d'erreur et des algorithmes de rcupration en cas d'erreur (rptition de l'mission des
donnes), mais plus il y aura d'erreurs, plus on perdra de temps, si bien que vouloir passer trop
d'informations la fois peut aboutir une perte de temps. (Problme bien connu sur les
modems RTC).
En gnral, les modems sont prvus pour pouvoir se replier sur des modes de modulation
disposant de constellations moins denses, plus faciles dmoduler en cas de bruit. Le dbit
diminue, mais le taux d'erreurs aussi.
Les divers types de modulations que nous avons vus ne sont que des exemples. Le principe
reste cependant toujours le mme, savoir:
Construire des algorithmes qui permettent de passer le plus d'informations possible
dans une largeur de canal donne (le plus possible de bits par symbole, avec le nombre
maximum de symboles par seconde que l'on peut utiliser sans dborder du canal).
Prvoir des solutions de repli lorsque la qualit du signal en rception se dtriore
cause du bruit lectronique.
Ces rgles sont bien connues des constructeurs de modems RTC, nous verrons galement
qu'elles sont applicables aussi bien pour les modems cble que les modems DSL.
Modems cble
Avertissement
Les valeurs indiques ici sont des ordres de grandeur. Elles ne sont pas les valeurs exactes
utilises par les divers quipements. Ce que l'on a appel les rseaux cbls mtropolitains
ont fortement volu depuis qu'il n'y a plus qu'un seul oprateur en France. Nous sommes
encore pour l'instant dans une priode d'volution. Ces rseaux, initialement conus pour
distribuer des signaux de tlvision analogique, ont subi une premire mutation dans la
dernire dcennie du sicle dernier, afin de s'adapter la distribution de connexions
l'internet. Aujourd'hui (24 juillet 2008 15h 52), ces rseaux sont en cours d'unification et
s'orientent vers un rseau entirement (ou quasi entirement) en fibre optique (FFTH).
Alors qu'au dbut du sicle actuel il y avait d'normes diffrences entre la distribution de
l'internet par les rseaux cbls d'une part et la boucle locale (ADSL) d'autre part,
l'volution vers les trs hauts dbits et la fibre optique amne des architectures de plus en
plus similaires, et destines apporter les mmes services avec les mmes performances.
Retour au pass
(Nous sommes la fin du 20
me
et au tout dbut du 21
me
sicle)
Nous l'avons vu, la bande passante descendante (download) est dpendante:
De la largeur du canal.
Du mode de modulation.
La largeur de notre canal descendant impose une modulation environ 6 MBauds (6 millions
de symboles par seconde).
Pour la voie montante, c'est un peu plus compliqu et a dpend des technologies utilises :
Le Com21 utilise une largeur de canal de 1,8 MHz, ce qui donne environ 1,2 Mbauds.
La norme Eurodocsis, plus souple, permet plusieurs largeurs de canaux : 200, 400,
800, 1 600 ou 3 200 KHz., ce qui donne, dans le meilleur des cas, environ 2,5
Mbauds.
En ce qui concerne les modes de modulation, il y a galement des diffrences entre la
technologie Com21 et la norme Eurodocsis :
Com21 (Premier modem mis en production par France Telecom Cble en 1998) :
o Downstream : QAM 64 (6 bits par symbole).
o Upstream : QPSK (2 bits par symbole).
Eurodocsis (volution technologique en 2002) :
o Downstream : QAM 64 ou QAM 128 (6 ou 7 bits par symbole).
o Upstream : QPSK ou QAM 16 (2 ou 4 bits par symbole).
Finalement, dans le cas le plus favorable, nous obtenons les dbits suivants :
Com21 :
o Downstream : 6 MBauds 6 bits par baud, soit 36 Mbits par seconde.
o Upstream : 1,2 Mbauds 2 bits par baud, soit 2,4 Mbits par seconde.
Eurodocsis :
o Downstream : 6 Mbauds 7 bits par baud, soit 42 Mbits par seconde.
o Upstream : 2,5 Mbauds 4 bits par baud, soit 10 Mbits/seconde, soit quatre
fois plus que le Com21 (mais attention, dans le meilleur des cas).
Rappelons que ces chiffres sont des ordres de grandeur. On constate clairement l'avance
technologique que procure Eurodocsis, puisque, dans le meilleur des cas, sans toucher
l'infrastructure du rseau cbl, le dbit montant peut atteindre celui d'un rseau local
10BaseT.
Pourquoi tout de mme ces limitations sur l'upstream ?
Il y a plusieurs raisons. Parmi les plus videntes a priori :
Le cble n'a pas t conu pour tre interactif, entendez par l que les voies montantes
n'taient pas prvues au dpart. Il a donc fallu bricoler un systme pour ajouter ces
voies montantes. Cette opration n'tant pas si simple qu'elle en a l'air, Principalement
cause de l'attnuation d'un signal lectrique circulant dans un conducteur (nous
verrons cela un peu plus bas).
Du ct optique du rseau, la situation tait la mme, les voies montantes n'taient pas
prvues. Une considrable remise niveau de la partie fibre optique a donc galement
t ncessaire ;
la bande passante totale du cble est exploite en grande partie par les services de
tlvision analogique, avec des frquences de porteuses qui devaient rester
compatibles avec les rcepteurs TV, pour ne pas ncessiter de couteux changeurs de
frquences chez les clients. Actuellement, le dveloppement des chaines numriques
imposant un dcodeur apporte plus de souplesse dans l'exploitation de la bande
passante du cble, mais tant un signal lectrique, donc produisant des rayonnements
lectromagntiques, certaines plages de frquence rserves ne peuvent tre exploites
;
le surf et le tlchargement, oprations de base de l'internaute d'hier,
s'accommodent parfaitement d'une voie montante plus restreinte, ces oprations tant
toutes deux des descentes d'informations des serveurs vers les clients. Ne remontent
que les requtes et les signaux d'acquittement des connexions TCP. L'internet allant
dans le sens d'un rseau local, o les stations utilisent les serveurs pour y stocker des
donnes (Flux montant important), le surf sera de moins en moins la seule activit des
internautes.
Le dveloppement de la norme Eurodocsis va permettre de rduire l'cart des dbits entre
voies descendantes et montantes, mais le systme restera fondamentalement asymtrique.
A quoi a ressemble ?
Pour les utilisateurs d'quipements
de type Com21, malheureusement .
Imaginons une autoroute qui aurait une file dans un sens (upload) et 11 files dans l'autre
(download). Dans le cas normal , surf et tlchargement FTP, La situation est peu prs
quilibre puisque le rapport donnes reues / donnes envoyes est environ gal 10.
Pour les utilisateurs d'quipements Eurodocsis, la situation est moins catastrophique, puisque,
dans le meilleur des cas, la largeur de la voie montante n'est plus que le quart de celle de
la voie descendante.
Et alors ?
Un rapport de 10 entre voies descendante et montante est parfaitement inadapt aux
volutions de l'Internet. A la rigueur, un rapport de 4 est-il actuellement acceptable. C'est
d'ailleurs celui qui est propos pour les accs haut dbit actuels :
512 Kbps en descente.
128 kpps en monte.
Eurodocsis permet d'ailleurs de conserver ce rapport l'chelle du rseau lui-mme, ce qui
n'tait pas le cas avec la solution Com21. Avec cette nouvelle norme, les possibilits sont
largement tendues, d'autant qu'elle prvoit de grer beaucoup plus finement le trafic
transitant par le modem.
Les problmes techniques de la voie montante
Les canaux Internet
Ces canaux sont placs dans la partie infrieure du spectre du cble. La voie descendante aux
alentours de 123 MHz, les voies montantes autour des 23 MHz (au moins pour Marseille; ces
frquences peuvent tre dcales sur d'autres sites).
Problme grave: les basses frquences (entre 5MHz et 30 MHz) sont soumises beaucoup
de perturbations. Les plus connues sont:
la C.B. dans la bande des 27 MHz
Les tlphones sans fil (pas les cellulaires, les tlphones d'intrieur) vers les 26 MHz
Les ondes courtes entre 10 MHz et 18 MHz
Sans parler des diverses perturbations domestiques. C'est pour ces raisons que les voies
montantes sont actuellement modules en phase uniquement (modulation QPSK), en QAM 16
dans le meilleur des cas. La modulation QPSK qui ne permet de passer que 2 bits par
symbole est plus facile dcoder en prsence de bruit, qui se traduit gnralement par une
modulation parasite, mais en amplitude principalement, et pas au niveau de la phase.
L'attnuation en ligne
Il se trouve qu'un signal s'attnue lors de son transport dans un conducteur (aussi bien un
signal lectrique dans du cuivre qu'un signal lumineux dans une fibre optique). Il faut donc
placer des amplificateurs le long de la ligne:

Le problme, c'est qu'un ampli, a a une entre et une sortie et qu'on ne peut videmment pas
les inverser
Pour crer des voies montantes dans la partie cuivre, il a donc fallu compliquer un peu le
problme:

On n'est pas ici pour faire de l'lectronique, mais il est ais de comprendre que la mise
niveau ne s'est faite ni simplement, ni gratuitement.
Prsent et avenir
La solution passe par une rorganisation du rseau. Tout le rseau cbl n'est pas constitu de
cuivre. Aprs tre pass par diverses tapes plus ou moins contradictoires, l'architecture
actuelle consiste en un savant mlange de fibre optique et de cuivre.
Voici, schmatiss l'extrme, quelques cas de figure possibles :

Le centre fonctionnel de l'oprateur est reli par des gros tuyaux l'internet d'une part, et
tout moyen qui lui permet de rcuprer les chaines de tlvision.
Il distribue par de la fibre optique tout ceci des centres de distribution. Il peut bien entendu y
avoir plusieurs niveaux dans cette desserte.
A la dernire tape de la ramification, le signal va tre vhicule sur du cuivre (de moins en
moins) ou de la fibre (de plus en plus), vers des rpartiteurs, gnralement placs aux pieds
des immeubles. Les clients sont relis au rpartiteur par du cuivre (encore trs
majoritairement pour l'instant) ou de la fibre (encore peu, mais a viendra).
Une autre mthode peut tre de relier directement chaque client au centre de distribution le
plus proche par une fibre ddie (architecture similaire la boucle locale tlphonique). Cette
mthode ne semble pas avoir t adopte par notre cblo oprateur.
Notez que l'architecture volue de telle manire que cblo oprateur et oprateurs de
tlcommunications finiront par disposer de rseaux tout fait similaires. La grande
diffrence qu'il existait entre cble et boucle locale va petit petit disparaitre totalement, avec
l'extension de la fibre optique.
Modems ADSL
Les technologies xDSL utilisent la boucle locale de tlphonie fixe.
Axiomes de base
Soit une formidable pelote de paires de cuivre destine raccorder l'immense majorit des
habitants d'une ville donne au rseau tlphonique. Que faire de ce fatras de cbles, lorsque
les possibilits d'expansion deviennent quasi nulles, le taux de pntration atteignant plus de
90%, pire, lorsque la tlphonie mobile fait rgresser ce taux de pntration ?
Reconvertir ce machin en rseau d'accs Internet haut dbit bien sr ! Comment ne pas y
avoir pens plus tt ?
Tous simplement, parce que techniquement, c'est une prouesse assez phnomnale. Le pire,
c'est que a fonctionne plutt bien
Il est intressant de constater que le transfert de donnes numriques par le rseau
tlphonique commut a toujours t du domaine du bidouillage . Nous allons voir qu'
xDSL ne droge pas cette rgle.
La paire de cuivre PTT
Autour des annes 1960, La tlphonie franaise est dans un tat affligeant (le clbre sketch
du regrett Fernand RAYNAUD : le 22 Asnires en est une illustration humoristique,
mais il n'y a pas rellement de quoi rire). Le gouvernement dcide alors de remdier cette
situation peu flatteuse pour la France. Des efforts considrables sont entrepris pour construire
un rseau tlphonique exemplaire. Aujourd'hui une infime minorit de franais ne dispose
pas encore du tlphone. Mais ce n'est qu'un rseau tlphonique, surtout dans la boucle
locale . (Sur les grosses artres, le rseau de type ATM est quant lui capable de vhiculer
indiffremment tout type de donnes numriques. La tlphonie elle mme, analogique sur la
boucle locale, est d'ailleurs transporte de manire numrique sur le rseau ATM).
Caractristiques gnrales
Chaque client est raccord un central en point point par l'intermdiaire d'une paire de fils
de cuivre. Cette paire de cuivre est destine faire passer une boucle de courant qui sera
module en amplitude par le signal vocal, en mode analogique (le rseau ISDN, appel
NUMERIS en France est autre chose. Il est conu nativement pour transporter des donnes
numriques sur la boucle locale, mme s'il s'agit de tlphonie. Compltement incompatible
avec l' ADSL, du moins dans son implmentation France Tlcom
1)
, nous n'en dirons pas plus
ici).
Le signal vocal s'accommode d'une bande passante assez faible. En gros, de 400 Hz 4 KHz.
Les modems RTC vont dployer des trsors d'ingniosit pour arriver passer des dbits
thoriques allant jusqu' 56 Kbps dans un canal aussi troit.
Cependant, il est envisageable de faire voyager sur ce fil des signaux d'une frquence
suprieure. Jusqu'o peut-on aller ? Toute la question est l. Ca dpend de beaucoup de
paramtres :
La qualit de la paire de cuivre.
La qualit des divers raccordements faits entre le central et le client
La longueur de la paire de cuivre.
Quoi qu'il en soit, on arrivera toujours monter plus haut que 4 KHz. L'ide est d'exploiter
cette rserve pour y passer un signal modul, qui ne se mlangera pas avec la bande
tlphonique.
DSL en gnral
Digital Subscriber Line. Disons que c'est un ensemble de moyens normaliss pour transporter
de l'information numrique sur une ligne tlphonique classique . ADSL (le A voulant dire
Asymmetrical ), n'est qu'un sous ensemble de DSL. Pour tre tout fait prcis, l'enjeu est
de transporter le maximum de densit d'informations numriques sur la boucle locale,
jusqu'au point d'entre du rseau ATM, sans toucher au systme tlphonique en place.
Les diverses technologies DSL ne fonctionnent pas toutes de la faon qui va tre dcrite par la
suite. Nous ne nous intresserons ici qu'au cas particulier de l'ADSL.
Une modulation complique
La technologie ADSL utilise un systme de modulation appel DMT (Discrete Multi Tone).
Disons que le principe consiste construire des canaux de 4 KHz de large, placs les uns
ct des autres, jusqu'au bout de la bande passante de la paire de cuivre. La technologie
annonce 1,1MHz pour une ligne ne dpassant pas 5,5 Km de long (ce qui fait fort peu, les
lignes ne se tirant pas en ligne droite). Le problme principal est que la paire de cuivre utilise
pour construire la boucle locale n'a absolument pas t prvue pour monter en frquence et
qu'elle introduit une forte attnuation du signal en fonction de sa longueur.

La technologie ADSL de dernire gnration permet de monter plus haut en frquence ( 2
MHz si tout va bien), mais arrive ses limites.
Mise en place du systme
Le premier canal est utilis par la tlphonie analogique. Appel POTS (Plain Old Telephone
Service), il constitue l'usage normal de la ligne tlphonique.
Une sorte de no man's land est rserve entre 4 KHz et 20 KHz, de manire pouvoir
facilement isoler le POTS de tout ce qui va se passer au dessus. Le fameux splitter , filtre
placer sur chaque prise tlphonique, est l pour sparer les deux services.
Entre 20 KHz et 200 KHz, on trouve les canaux qui serviront l'mission des donnes.
Entre 200 KHz et 1,1 MHz, nous avons les canaux rservs la rception des donnes.
Chaque canal est modul par une mthode QAM.
L'artifice sublime
Il faut maintenant exploiter au mieux ces canaux :
Chaque canal sera exploit avec une constellation adapte au bruit rencontr sur le
canal. Ainsi, certains canaux pourront fournir un dbit important, tandis que d'autres
en fourniront trs peu, voire pas du tout. Cette mthode flexible permet d'exploiter au
mieux la ligne mme dans un milieu hostile.
Une rpartition spatiale des donnes sera effectue sur l'ensemble des canaux
concerns. Autrement dit, le flux de donnes sera dcoup en tranche, chaque tranche
tant achemine par un canal diffrent.
Si dans la thorie, on peut aller assez loin en matire de dbit, la sagesse veut, pour un lien
ADSL, que l'on ne garantisse pas plus, sur une ligne de 5,5 Km de longueur maximum, que :
1,5 Mbps en voie descendante.
512 Kbps en voie montante.
On le voit clairement, mme si l'Internet haut dbit par l'ADSL fait aujourd'hui bonne
figure, le systme reste un moyen technologiquement trs sophistiqu, pour exploiter au
mieux une installation existante, inadapte la transmission haut dbit, sans avoir y toucher.
Prsent et avenir
Aujourd'hui, il y a environ deux fois plus de canaux dans le meilleur des cas, et la tlvision
est distribue par le mme chemin. La nature humaine dictant que l'homme en veut toujours
plus, les technologies DSL ont leur avenir derrire elles. Les oprateurs investissent
massivement dans des rseaux en fibre optique, parfois dans la plus grande anarchie, mais
nous n'en sommes encore (le 24 juillet 2008 16h 54) qu'au tout dbut. La fibre optique
jusque chez l'abonn sera l'aboutissement invitable.
1)
Il faut tout de mme savoir que l'utilisation des technologies DSL sur une ligne ISDN n'est
pas impossible. Pour des raisons qu'il faut demander France Tlcom, les lignes
tlphoniques numriques (NUMERIS en France, qui ne sont que l'adaptation de la norme
ISDN), n'ont pas t mises la porte de la clientle rsidentielle. Il en rsulte que seules les
entreprises ayant de forts besoins en ressources tlphoniques sont passes cette
technologie. Dans d'autres pays o la technologie ISDN a t plus dmocratise qu'en France,
comme en Allemagne avec Deutsche Telekom, des solutions ont t dveloppes. Sans entrer
dans les dtails du fonctionnement ISDN, disons que ce systme utilise une bande de base
jusqu' 80 KHz. Le reste n'tant pas exploit, il est parfaitement possible d'y placer des sous-
canaux utilisables par DSL, comme nous le verrons plus loin.

Le codage des caractres
Peut-tre trouvez-vous vident qu'une machine informatique soit capable de grer
efficacement vos donnes, quelles qu'elles soient, y compris le texte ?
Avez-vous pens un seul instant que, pour puissant qu'il soit, votre merveilleux ordinateur n'a
qu'un doigt pour compter ?
Et pourtant, a marche. Nous allons voir comment.
Par la mme occasion, nous verrons aussi pourquoi, quelquefois, il y a des petites curiosits
dans l'affichage du texte, principalement sur les lettres accentues et certains symboles.
Le codage des donnes
S'il est assez naturel de transformer un nombre humain (en base 10) dans n'importe quelle
autre base de calcul, y compris la base 2 (et rciproquement), c'est un peu plus compliqu de
coder en binaire les symboles d'criture.
Pourquoi ?
Parce qu'il n'y a pas rellement d'algorithme mathmatique pour le faire et qu'il faudra donc
travailler sur des conventions. Vous savez ce que valent les conventions, elles sont adoptes
jusqu' ce qu'elles ne le soient plus. De plus, les limites d'une convention sont bien connues :
une convention est attache un contexte. Lorsque le contexte change, la convention
doit tre modifie. Un exemple simple dans le domaine qui nous intresse ici :
l'adoption par la Communaut Europenne du symbole de sa monnaie unique, l'euro.
Changement de contexte, ce symbole doit tre ajout la liste des symboles d'criture
utilise dans tous les pays de l'UE ;
une convention doit satisfaire toutes les parties concernes. Les dites parties cherchant
chacune faire prvaloir leur point de vue, les conventions sont gnralement
adoptes trop tard.
Nous allons ici essayer de passer en revue les principales conventions adoptes pour le codage
des symboles d'criture, en ayant l'esprit que nous sommes dans un contexte mondial, avec
plusieurs langues, plusieurs alphabets et, pour compliquer encore le problme, plusieurs
systmes d'information.
l'Ecriture
Pourquoi crire ?
La question peut paraitre stupide, tant l'crit demeure un moyen
primordial dans nos civilisations pour la communication. Tmoin ces quelques pages. Le
problme principal vient, nous le savons, de la multitude de langues utilises de part le
monde, multitude qui utilise elle mme une multitude de symboles dans sa forme crite. Si
l'alphabet latin reste probablement le plus utilis, notons dj la grande quantit de symboles
altrs par des accentuations et autres contractions comme le fameux e dans l'o ().
L'alphabet latin reste, mme avec toutes les altrations qu'on lui connat, largement insuffisant
pour permettre l'criture de toutes les langues telles que le grec, l'hbreu, l'arabe, le russe et
sans parler encore des langues asiatiques
Comment crire ?
Nous parlons d'informatique ; ici, pas de crayons. Les outils qui permettent d'afficher du texte
sont principalement de deux sortes :
Les imprimantes
Nous pouvons les classer en deux grandes catgories :
les imprimantes dont le ou les jeux de caractres sont forms mcaniquement. Mme
si elles n'ont plus cours aujourd'hui, elles ont t parmi les premires. Depuis les
anctres utilisant un jeu de marteaux comme les machines crire mcaniques,
jusqu'aux marguerites (une galette en matriau souple, constitue de ptales,
chacun portant un caractre) en passant par les imprimantes boule dont IBM tait le
champion.
Dans tous ces cas, les symboles sont gravs sur un support mcanique et l'impression
se fait par impact sur un ruban encreur intercal entre l'outil de frappe et le papier ;
les imprimantes dont les jeux de caractres sont forms partir d'une matrice de
points. Depuis les antiques imprimantes aiguilles jusqu'au laser en passant par le jet
d'encre, le principe consiste dessiner les caractres par impression de points.
L'imprimante dispose alors de tables qui contiennent une reprsentation bitmap de
l'ensemble des caractres, ces tables pouvant tre embarques dans la mmoire de
l'imprimante ou tlcharges la demande.
Dans tous les cas, l'imprimante reoit un code numrique crit sur un octet (parfois plusieurs)
et dduit de ce code le caractre qu'elle doit imprimer.
Les crans
Qu'ils soient tube cathodique, cristaux liquides ou mme plasma, le principe est similaire
aux imprimantes matrices de points.
La mthode globale d'impression
S'il s'agit d'un procd d'impression mcanique type marguerite ou boule, un code va
permettre de placer l'organe mcanique la bonne place pour imprimer le caractre souhait.
Un changement de forme de caractres implique un changement de l'organe mcanique.
S'il s'agit d'un systme matrice de points, chaque caractre est dessin dans une table et le
systme n'a qu' aller chercher le bon dessin. Bien entendu, ce systme est plus souple et
propose gnralement plusieurs typographies.
Nous n'entrerons pas trop dans les dtails du pilotage d'une imprimante, mais en gnral, un
langage particulier (PCL, PostScript) permet d'expliquer l'imprimante ce qu'elle a faire
(police de caractres utiliser, taille, format du papier utiliser), en plus de lui envoyer les
donnes imprimer.
Pour les crans, c'est l'interface graphique avec son driver , mais aussi le systme
d'exploitation lui-mme qui se chargent de ce travail. Ce qu'il est important de comprendre,
c'est qu'en ce qui concerne le contenu du message imprimer, il doit exister un code qui
dfinisse parfaitement l'ensemble des caractres de l'alphabet d'une (ou de plusieurs) langue(s)
donne(s). Ce code, dans le cas de systmes communicants, comme c'est le cas sur l'Internet,
doit tre adopt par toutes les parties qui dcident de communiquer entre elles ; faute de quoi,
il apparaitra des aberrations dans les textes affichs.
L'objectif de ce chapitre est d'essayer de clarifier autant que possible l'ensemble des
procdures mises en uvre pour parvenir communiquer par l'crit de faon satisfaisante.
Le code ASCII
Au dbut tait le texte
Nous n'avons pas le choix, nous devons adopter une convention qui associera un nombre un
symbole d'criture, puisque nous disposons de machines qui ne savent manipuler que des
nombres. Nous crerons ainsi une table d'quivalence entre des valeurs numriques et des
symboles d'criture. Toutes les parties qui communiqueront entre elles en adoptant la mme
convention arriveront donc, en principe, se comprendre.
Figurez-vous que
l'informatique n'a pas toujours t aussi complique. Voici un exemple de terminal
informatique fort courant une certaine poque . Cette magnifique bestiole, appele tltype
du nom de l'entreprise qui la fabriquait (Les plus jeunes ne peuvent pas connaitre, la
machine date de 1967), servait dialoguer avec un ordinateur, par le truchement d'une liaison
srie RS232, que nous connaissons toujours, mme si ses jours sont dsormais compts. En
ces temps reculs de l'informatique, le tube cathodique n'tait pas un priphrique courant. On
utilisait volontiers la place une imprimante, le plus souvent boule ou marguerite. Cette
machine disposait par ailleurs d'un lecteur/perforateur de ruban en papier (trou/pas trou >
1/0). Mais pour intressantes qu'elles soient, ces considrations archologiques nous cartent
de notre sujet initial
La liaison RS232 prvoit de transmettre en srie (bit par bit) un mot de 8 bits en utilisant le bit
de poids le plus fort (bit 7) comme bit de parit, pour effectuer un contrle de validit de la
donne. Le principe est simple : dans un octet, le bit de parit est ajust de manire ce que le
nombre de 1 soit toujours pair (ou impair, a dpend de la convention adopte).
Dans ce cas de figure, il n'y a que 7 bits (b0 b6) qui sont significatifs d'une donne, le
dernier bit servant juste ajuster la parit.
7 bits pour un caractre
L' American Standard Code for Information Interchange (ASCII) s'est donc ingni
coder chaque caractre d'une machine crire sous la forme d'une combinaison de 7 bits. En
dcimal, nous obtenons des valeurs comprises entre 0 et 127.
Comme la base binaire (0 ou 1), si elle est trs commode pour un calculateur lectronique,
l'est beaucoup moins pour le cerveau humain, nous allons utiliser une autre base qui, si elle
n'est gure plus parlante , offre tout de mme l'avantage d'aboutir une criture beaucoup
plus compacte. Cette base devra tre une puissance de 2, la plus courante tant la base
hexadcimale, parce que chaque digit hexadcimal va reprsenter une combinaison de 4
bits :
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0 1 2 3 4 5 6 7 8 9 A B C D E F
Mais il est aussi possible d'utiliser de l'octal, sur trois bits.
Pourquoi pas la base 10 laquelle nous sommes habitus depuis notre plus tendre enfance ?
Parce que, malheureusement, 10 n'est pas une puissance de 2 et qu'un digit dcimal ne
reprsente donc pas toutes les combinaisons que l'on peut faire avec un groupe de n bits. 4
c'est trop (hexadcimal) et 3 c'est pas assez (octal). Plus mathmatiquement, on ne peut pas
trouver de valeur entire de n telle que 10=2
n
. Essayez donc de rsoudre n=Log(10)/Log(2).
Certains ont mis en uvre un codage appel BCD (Binary Coded Decimal). Le principe est
simple : chaque digit dcimal (de 0 9) est cod sur un quartet. Certaines combinaisons de
bits sont donc impossibles.
9 va donner 1001
10 donnera 0001 0000 et non pas 1010
Mais revenons notre code ASCII ; 7 bits sont-ils suffisants ? Oui et non
D'abord, dans une machine crire, il n'y a pas que des caractres imprimables. Il y a aussi
des caractres de contrle , comme le saut de ligne, le retour-charriot, le saut de page, la
tabulation, le retour arrire Tous ces caractres doivent aussi tre cods pour que
l'ordinateur puisse efficacement piloter une imprimante.
De plus, pour transmettre convenablement un texte, il faudra quelques smaphores pour
indiquer par exemple quand commence le texte, quand il finit
Enfin, suivant les langues, mme lorsqu'elles exploitent l'alphabet latin, certaines lettres sont
altres diffremment. L'anglais n'utilise pas d'accents mais la plupart des autres langues les
exploitent plus ou moins parcimonieusement.
Au final, si 7 bits suffisent gnralement pour une langue donne, ventuellement en faisant
l'impasse sur certains symboles peu usits comme [ ou ], nous ne pourrons pas coder
l'ensemble des caractres ncessaires pour la totalit des langues utilisant l'alphabet latin.
La norme iso-646 dfinit un code ASCII sur 7 bits. Ce code, parfaitement adapt l'anglais
US, l'est moins pour les autres langues. Nous assistons donc la cration d'une multitude de
dialectes ASCII , o certains caractres sont remplacs par d'autres suivant les besoins
locaux. Les lecteurs les plus anciens se rappelleront peut-tre des configurations
hasardeuses de certaines imprimantes pour arriver ce qu'elles impriment un franais
lisible
Les
caractres sur fond bleu sont les caractres non imprimables. Pour bien lire le tableau, il faut
construire le code hexadcimal en prenant d'abord le digit de la ligne, puis le digit de la
colonne. Par exemple, la lettre n a pour code hexadcimal 6E.
Comme vous le constatez, il n'y a aucune lettre accentue dans ce codage. Ce dernier a donc
t joyeusement localis pour satisfaire aux exigences des divers pays utilisant l'alphabet
latin. Cette situation aboutit rapidement une impasse, les fichiers ainsi construits n'tant plus
exportables dans d'autres pays. De plus, vous constaterez aisment que l'ajout de caractres
supplmentaires (le , le , le etc.) implique obligatoirement la suppression
d'autres caractres (le [ , le ] , le # etc.). Ceux qui ont quelques notions de
programmation comprendront quel point c'est facile d'crire du code avec un jeu de
caractres amput de ces symboles. Dans la pratique, les programmeurs taient condamns
utiliser un clavier US.
Pour un bit de plus
Avec les avances de la technique, le huitime bit qui servait pour le contrle de parit,
contrle rendu de plus en plus inutile, va tre utilis pour coder plus de caractres. Deux fois
plus, finalement.
Ainsi, le codage iso-latin-1 , galement connu sous le nom de iso-8859-1 propose peu
prs le codage suivant

Comme vous pouvez le constater ici :
les codes ASCII de 0 7F (127 en dcimal) demeurent inchangs ;
les codes suprieurs (ceux qui ont le bit 7 1) reprsentent quelques symboles
supplmentaires, ainsi qu'une panoplie de lettres accentues qui satisfont aux
exigences des langues de l'Europe de l'Ouest.
Pourquoi peu prs ? Le codage ci dessus est une interprtation de la norme iso-8859-1
par notre ami Microsoft qui a un peu bricol pour ajouter quelques symboles de plus, dont
celui de l'euro La consquence en est qu'une fois de plus, Windows n'est compatible
qu'avec lui-mme. Fort heureusement, nous verrons qu'il demeure possible d'adopter un
codage plus officiel avec les applications communicantes, mais avec des limites. Notez que si
l'on peut reprocher Microsoft de ne pas suivre les normes, il faut aussi reprocher aux normes
d'tres imparfaites et assez peu ractives.
Pour ajouter la complexit, la norme iso-8859 dfinit pas moins de 15 versions diffrentes,
pour satisfaire tous les besoins mondiaux. A titre d'information, la norme iso-8859-15
devrait pouvoir tre utilise pour l'Europe de l'Ouest avec plus de bonheur que l'iso-8859-
1.
Finalement, ce bit de plus ne fait que dplacer le problme sans toutefois l'liminer, nous ne
disposons toujours pas d'un systme normalis universel.
Les as de la confusion
Croyez-vous que la situation est suffisamment confuse comme a ? Vous vous trompez !
D'autres choses existent, souvent venant de chez IBM.
EBCDIC
Je me contenterai de vous citer la dfinition issue du jargon franais :
Extended Binary Coded Decimal I nterchange Code.
Jeu de caractres utilis sur des dinosaures d'IBM. Il existe en 6 versions parfaitement
incompatibles entre elles, et il y manque pas mal de points de ponctuation absolument
ncessaires dans beaucoup de langages modernes (les caractres manquants varient de plus
d'une version l'autre) IBM est accus d'en avoir fait une tactique de contrle des
utilisateurs. ( Jargon File 3.0.0).
Il existe quelques moulinettes capables de convertir tant bien que mal des fichiers cods
sous cette forme en fichiers ASCII.
Bien que l'EBCDIC soit aujourd'hui tout fait confidentiel, puisqu'il ne concerne que les
vieilles machines IBM, il faut en tenir compte pour les changes de donnes inter plateformes,
jusqu' extinction totale de la race (nous ne devons plus en tre trs loin).
Pages de codes 437 et 850
Lorsque IBM a cr le PC (Personal Computer, faut-il le rappeler ?), des jeux de caractres
ont t crs sur 8 bits, spcifiquement pour ces machines. Ci-dessous la page de code 437
(CP437). Attention, ce tableau se lit dans l'autre sens, le quartet de poids faible est celui de la
ligne et le quartet de poids fort est celui de la colonne.

Tous les petits grigris partir du code B0 taient destins faire de l'art ASCII tendu. De
jolies interfaces pseudo graphiques sur des terminaux en mode texte.
Si cette page de code est compatible avec l'ASCII US 7 bits (iso-646) il n'en est rien pour le
reste, avec aucune iso-8859. Cette situation a t assez pnalisante, aux dbuts de Windows,
o l'on devait souvent jongler avec les fichiers issus d'applications DOS et Windows.
Reconstruire la tour de Babel
Et si l'on construisait une table de codage sur 16 bits et pourquoi pas mme 32 bits ? L, on
aurait de la place pour entrer dans une seule et unique table tous les symboles que l'espce
humaine a pu inventer
Rassurez-vous, on y a dj pens, ceci s'appelle l'UNICODE et le projet fait mme l'objet
d'une normalisation, iso-10646-1.
Pourquoi faire, me direz-vous ? Avons-nous besoin de manipuler dans un mme document
tous les symboles d'criture que ce monde a invent ?
Il y a au moins deux bonnes raisons qui militent en faveur d'UNICODE :
si tout le monde utilise UNICODE, il n'y a plus de problmes, tout le monde peut
crire dans sa langue maternelle en utilisant la mme convention ;
les pauvres gens qui font de la traduction de documents d'une langue dans une autre
n'auront plus jongler en permanence avec les divers iso-8859 pour rdiger leur
travail.
Cependant UNICODE utilis brutalement aboutirait un quadruplement du volume pour un
document donn, chaque caractre tant dsormais encod sur 32 bits et non plus 8, le tout
avec probablement plein de zros et quelques octets constants dans chaque document. Une
solution ce petit problme s'appelle UTF-8. Notez que pour nous, europens, qui utilisons
l'alphabet latin, UTF-8 ne sera pas trop pnalisant en termes de volume de donnes. Pour
d'autres, chinois ou japonais par exemple, le problme sera diffrent.
Cette normalisation, bien que complexe, est en voie de devenir l'usage courant. Ce n'est pas
encore le cas partout, et comme ce codage n'est compatible avec les autres que sur les 127
premiers symboles (ASCII), nous n'avons pas encore fini de voir des choses comme De la
difficult avre du bon amnagement des caractres dans l'encodage
numrique fleurir dans nos e-mails et sur certaines pages du web.
La raison ? Le texte a t encod en UTF-8 et, pour une raison quelconque, a t interprt
par le client comme de l'iso-8859-1. Notez que l'inverse peut aussi se produire et reste aussi
inesthtique.
Conclusion provisoire
Comme vous le voyez, nous sommes encore loin de disposer d'un systme de codage efficace
des divers symboles utiliss dans le monde pour communiquer. La situation parait dj assez
dsesprante, sinon dsespre, mais rassurez-vous, nous n'avons pas encore tout vu. Notons
tout de mme que :
les dernires moutures de MS Windows (Vista, Seven) semblent vouloir se conformer
UTF-8 ;
la plupart des distributions GNU/Linux sont configures par dfaut pour utiliser UTF-
8 ;
les browsers modernes savent afficher correctement du code UTF-8 pour peu qu'ils
soient informs correctement qu'ils reoivent un tel codage.
Dans ces conditions, le pire est peut-tre dj derrire nous ? Pour autant, nous ne sommes
pas encore sortis de ce bourbier.
Note :
Les passionns de la chose trouveront ici beaucoup de dtails sur les divers codages existants.
Autres astuces
Code toujours, tu m'intresses
Par une remarquable tendance la perversit de l'esprit humain, certains protocoles
applicatifs (SMTP par exemple) ont t conu avec comme axiome de dpart qu'ils ne
devraient transporter que du texte, alors qu'il est clair qu'ils n'auraient transporter que des
valeurs numriques binaires, puisqu'un systme numrique ne sait finalement faire que cela.
D'ailleurs, le premier besoin qui s'est fait sentir, c'est de pouvoir attacher aux e-mails des
fichiers qui sont tout, sauf du texte pur.
Pourquoi le parti-pris du texte ?
A cause des caractres de contrle ! C'est trs pratique de disposer de caractres spciaux qui
permettent, comme leur nom l'indique, de contrler le flux de donnes. Avec le codage
ASCII, nous avons vu qu'il en existait pas mal, mme si nous ne sommes pas entrs dans le
dtail de leur signification.
De plus, nous n'avons pas parl du codage des valeurs numriques. Si un nombre entier ne
pose pas trop de problmes (1, 2 octets ou plus, ventuellement, encore que reste savoir dans
quel ordre on va les passer), les nombres rels, cods sous la forme mantisse / exposant sont
un rel casse-tte. Un exemple faux mais qui fait comprendre : Le nombre 1 245 389 789
726 986 425 ne va pas s'utiliser ainsi, on va d'abord l'crire, par exemple sous la forme
1245,389789726986425 10
15
. On s'attachera alors stocker en mmoire ce rel sous une
forme approche en utilisant systmatiquement, disons trois octets. Sa partie entire, 1245
dans l'exemple, sera code sur deux octets et la puissance de 10, 15 dans l'exemple, sur un
octet.
Cet exemple n'a pas de ralit, mais le principe est peu prs juste. Suivant les plateformes et
les langages de programmation, nous aurons nos rels stocks sur 4, 6 ou 8 octets, avec plus
ou moins de prcision sur la mantisse, ou plus ou moins d'espace sur la puissance de 10,
suivant la nature des calculs raliser (aviez-vous pens que la notion d'infini ne peut tre
gre par un calculateur ?). Au final, il est souvent plus simple de communiquer des valeurs
numriques un tiers sous leur forme ASCII (telles qu'on peut les afficher ou les imprimer,
avec des symboles d'criture, donc), plutt que telles qu'elles sont stockes en mmoire.
La consquence ?
Ces protocoles ne peuvent pas simplement transfrer des donnes numriques, puisqu'un octet
est priori considr comme l'image d'un caractre et non comme une donne numrique en
elle mme. Ainsi, si vous voulez transfrer un fichier qui contient une reprsentation bitmap
d'une image, comme un fichier jpeg, png ou gif, par exemple, vous ne pouvez pas
considrer que c'est du texte, puisque priori, chaque octet peut prendre n'importe quelle
valeur, y compris celle d'un caractre de contrle. Vous connaissez beaucoup de pages Web
sans aucune image dedans ? Vous n'avez jamais envoy un e-mail avec une image en pice
jointe ?
La conclusion est qu'il a fallu trouver une astuce pour transporter des donnes purement
numriques sur un protocole qui n'est pas prvu pour a.
Codage tous les tages
Le jeu va consister maintenant coder une donne purement numrique sous une forme
alphabtique, elle-mme code sur des valeurs numriques, pour qu'elle puisse tre
transporte sur un systme qui ne connat que des 0 et des 1.
Tordu, n'est-ce pas ?
Oui, mais comment faire autrement ? Les rvolutions, c'est bien, mais on ne peut pas en faire
tous les jours, sinon, c'est le chaos permanent. Vous allez voir que les solutions apportes sont
certes parfois tordues, mais astucieuses et surtout efficaces.
Comme il est clair, la lueur de ce que nous avons vu jusqu'ici, que la seule convention qui
soit peu prs universellement accepte et correctement transporte par les protocoles
applicatifs est la norme iso-646 (US-ASCII), il faudra trouver des conventions de
codage pour convertir un octet en un ensemble de caractres sur 7 bits.
C'est parti pour la grande cuisine.
Le codage quoted printable
Ce codage est principalement employ pour transformer un texte crit avec un codage sur 8
bits en un texte qui ne contiendra que des caractres codables sur 7 bits. Vous allez voir
comme c'est simple :
D'abord, il faut savoir sur quel codage 8 bits on va s'appuyer, en gnral, pour nous, iso-8859-
1.
Ensuite, nous allons utiliser un code d'chappement (c'est une technique assez courante,
nous la rencontrons souvent en informatique). Ici, le caractre d'chappement est le signe =.
Ce signe signifie que les deux caractres qui vont le suivre reprsenteront le code
hexadcimal d'un caractre et non le caractre lui-mme. Bien entendu, il faudra aussi coder
le caractre d'chappement.
Un petit exemple vaudra bien mieux qu'un long discours
le dont le code 8 bits est E9, sera cod sur trois caractres de 7 bits de la faon
suivante : =E9
De la mme faon, le sera cod =E8.
le donnera =E7
le donnera =E0
Comme le = revt une signification particulire : C'est le code d'chappement, il sera
lui-mme cod en =3D.
L'expression et l sera donc transmise sous la forme =E7=E0 et l=E0
Ainsi, nous transporterons nos donnes uniquement sous la forme de caractres US-ASCII (7
bits), mme s'ils ncessitent 8 bits pour tre dfinis. En effet, les caractres =, E, et 0 ont tous
des codes ASCII sur 7 bits.
Astucieux non ?
Bien entendu, il vaut mieux le savoir pour dcoder correctement le message. Cette mthode
est utilise principalement pour les e-mails. En voici un exemple :
Return-Path:
...
From: "Christian Caleca"
To:
Subject: quoted
Date: Tue, 5 Nov 2002 10:51:34 +0100
MIME-Version: 1.0
Content-Type: text/plain;
charset= "iso-8859-1"
Content-Transfer-Encoding: quoted-printable
...
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106

=E7=E0 et l=E0
Notez que l'on parle ici de MIME, en indiquant, la nature du contenu (text/plain), le jeu de
caractres utilis (iso-8859-1) et le mode d'encodage : quoted-printable. Nous y reviendrons
plus tard.
Remarque
Aujourd'hui, la plupart des relais de messagerie utilisent ESMTP, qui est capable de
transporter du texte sur 8 bits (ISO8859-1 et mme UTF-8). Cependant, ceci n'est possible
que dans le corps du message et pas dans l'en-tte. Comme le sujet (Subject:) se trouve dans
l'en-tte, il ne faudrait pas crire de sujets en utilisant autre chose que des codes sur 7 bits.
Pour permettre l'internaute d'user des accents dans les sujets, ceux-ci sont alors encods en
quoted printable par les clients de messagerie (MUA), avec des rsultats plus ou moins
heureux.
Le codage Base64
Plus gnralement, ce codage permettra de passer non seulement du texte cod sur 8 bits, mais
aussi tout type de donnes constitues d'octets. Voyons d'abord avec du texte.
L aussi, il faudra commencer par indiquer en quel code est crit le texte initial. Pour nous,
toujours iso-8859-1.
Trois caractres de 8 bits (24 bits au total) sont dcoups sous la forme de 4 paquets de 6 bits
(toujours 24 bits au total). Chaque valeur sur 6 bits, comprise donc entre 0 et 3F en
hexadcimal, sera symbolise par un caractre prsent, et avec le mme code, dans toutes les
versions de code ASCII et EBCDIC. La table d'quivalence est celle qui suit. Remarquez que
les caractres choisis sont tous cods sur 7 bits en US-ASCII, mais que la valeur qu'ils
reprsentent n'est pas leur code ASCII
dec hex car. dec hex car. dec hex car. dec hex car.
0 0 A

16 10 Q

32 20 g

48 30 w
1 1 B

17 11 R

33 21 h

49 31 x
2 2 C

18 12 S

34 22 i

50 32 y
3 3 D

19 13 T

35 23 j

51 33 z
4 4 E

20 14 U

36 24 k

52 34 0
5 5 F

21 15 V

37 25 l

53 35 1
6 6 G

22 16 W

38 26 m

54 36 2
7 7 H

23 17 X

39 27 n

55 37 3
8 8 I

24 18 Y

40 28 o

56 38 4
9 9 J

25 19 Z

41 29 p

57 39 5
10 A K

26 1A a

42 2A q

58 3A 6
11 B L

27 1B b

43 2B r

59 3B 7
12 C M

28 1C c

44 2C s

60 3C 8
13 D N

29 1D d

45 2D t

61 3D 9
14 E O

30 1E e

46 2E u

62 3E +
15 F P

31 1F f

47 2F v

63 3F /
Comme cette explication doit paratre fumeuse plus d'un (moi-mme, plus je la relis, plus je
la trouve fumeuse), l encore, prenons un exemple. Soit coder le texte extrmement simple :
012
Ce texte est destin tre crit avec un codage iso-8859-1.
caractre initial 0 1 2
Code ASCII hexa 30 31 32
Code ASCII binaire 00110000 00110001 00110010
Bien. nous avons donc la suite de 24 bits suivante : 001100000011000100110010. Nous
allons maintenant la couper en quatre morceaux de 6 bits :
les valeurs sur 6 bits 001100 000011 000100 110010
Equivalent hexadcimal 0C 03 04 32
Caractre quivalent en Base64 M D E y
Et voil. 012 donne, une fois cod en Base 64 MDEy. Constatez comme c'est simple.
Constatez surtout que ces caractres seront transcrits en US-ASCII, donc sur 7 bits.
Pour dcoder, il suffit de le faire dans l'autre sens.
Refaisons la manip avec un e-mail cod en Base64 :
Return-Path:
...
From: "Christian Caleca"
To:
Subject: Base 64 (1)
Date: Tue, 5 Nov 2002 11:07:11 +0100
MIME-Version: 1.0
Content-Type: text/plain;
charset= "iso-8859-1"
Content-Transfer-Encoding: base64
...
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106

MDEy
Et voil le travail.
Ca, c'est une dmo commerciale , c'est dire, qui ne montre que ce qui est facile et qui
marche bien. Vos messages contiennent tous un nombre de caractres qui est un exact
multiple de 3 ?
Dans ce cas (nombre de caractres qui n'est pas un multiple de 3) , le systme de codage va
remplir le trou avec un caractre spcial, qui ne sera pas interprt l'arrive. Ce caractre
est le signe =
Voyons ce que a donne si le texte initial ne contient plus que le seul caractre 0.
Le premier groupe de 6 octets sera toujours le mme : 001100 qui donne M
Le second sera : 00 (complt avec des 0, donc : 000000) qui donne A
Comme il faut 24 bits quand mme, on ajoutera deux fois le caractre =
Au total, on aura MA==
Vrification par l'e-mail :
Return-Path:
...
From: Christian Caleca
To:
Subject: base 64 (3)
Date: Tue, 5 Nov 2002 11:18:06 +0100
MIME-Version: 1.0
Content-Type: text/plain;
charset= iso-8859-1
Content-Transfer-Encoding: base64
...
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106

MA==
CQFD.
Nous verrons que ce codage base64, qui permet de transformer tout octet en un quivalent
ASCII, permettra par exemple de coder des pices jointes de types divers dans les e-mails.
Et les autres...
uuencode
Bien entendu, d'autres conventions existent, mais n'appartiennent pas aux systme MIME. Par
exemple UUENCODE, assez proche de Base64, mais antrieur, utilis sur plateformes Unix.
BinHex
Un codage propritaire, cr dans le monde Macintosh pour les mmes raisons
Vous le voyez, les astuces ne manquent pas pour utiliser exclusivement de l'ASCII 7 bits dans
le transport de n'importe quelle donne.
Conclusions
En plus du codage des caractres dans des tables de 7 , 8 ou plus, il faut donc ajouter des
systmes qui vont s'efforcer de reprsenter tout type de donne sous forme de texte 7 bits.
Ceci nous amne naturellement parler de MIME
Dans le HTML
Les pieds dans la toile
Bien que pour HTTP, protocole apte transmettre des flux d'octets sans considrer que ce
sont forcment des caractres, bon nombre de problmes sont rsoudre.
Le langage HTML (Hyper Text Markup Language), lui aussi, propose des mthodes
particulires pour traiter les caractres non US-ASCII. Il rgne d'ailleurs dans ce domaine la
plus grande confusion.
Avec la version 3.2 du HTML, il n'y avait normalement pas d'autre possibilit que de passer
par un transcodage du type signes nomms . Depuis le version 4.0 de HTML, il est
thoriquement possible de dfinir dans l'en-tte du document quel jeu de caractres est utilis.
Comme HTML est probablement le lieu o les normes sont le moins respectes, il convient
tout de mme de rester prudent. Car, croyez-vous que le fait de pouvoir utiliser UTF-8, ISO-
8859-1, ISO-8859-15 ou autre, simplement en annonant la chose dans l'en-tte HTML ?
Voyons ceci
Dans la page que nous avons sous les yeux, il est crit :
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
</head>
En voyant ceci, notre browser va comprendre qu'il faut utiliser UTF-8 et, normalement, il
n'y a pas de problme, la condition bien entendu que le texte qui a t introduit dans ce wiki
soit bien encod en UTF-8.
Mais en cas de dsaccord entre la saisie et l'affichage, la phrase :
Nous avons t abuss par le systme
Pourrait devenir ceci :
Nous avons t abuss par le systme
Nettement moins lisible n'est-ce pas ? Dans cet exemple, le texte a t encod en UTF-8 et
dcod en ISO-8859-1. Il s'agit bien sr d'une manipulation pour faire apparaitre ceci. Mais
forcez donc votre navigateur afficher cette page en ISO-8859-1
Normalement, avec des choses comme les WIKI, le problme ne se rencontre pas, sauf dans
certains cas tordus
Si nous utilisons les signes nomms , nous pouvons garantir plus d'interoprabilit, au prix
d'un code source HTML nettement moins lisible.
Les signes nomms
Le principe est simple :
Un caractre d'chappement : Le &,
un nom pour le caractre non US-ASCII
un dlimiteur de fin de codage : le ;
Un simple exemple, juste pour illustrer. Le devrait se coder dans le source HTML :
&;eacute;
Vous trouverez beaucoup plus de dtails sur les signes nomms ainsi que sur beaucoup
d'autres points du HTML sur le trs instructif site SELFHTML.
Il existe une table de signes nomms dfinie dans HTML 3.2 . HTML 4.0 dfinit des ajouts
cette table, bien que, thoriquement, une balise d'en-tte du type :
<meta http-equiv= "Content-Type" content= "text/html; charset=iso-8859-1">
devrait elle seule permettre l'emploi de tous les symboles dfinis par iso-8859-1 (version 4.0
uniquement).
Une manipulation amusante
FrontPage 2000, (un diteur HTML de Microsoft), ne s'embarrassait pas de considrations
complexes, annonait un charset=windows-1252 dans ses en-ttes et ne code aucun de ces
symboles de faon particulire, mme pas l'euro.
D'autres diteurs, comme DreamWeaver (de Macromedia) ou Golive (d'Adobe) sont plus
orthodoxes et, non seulement annonceront un charset=iso-8869-1 , mais encore utiliseront
les signes nomms pour les caractres non US.
L'exemple qui suit est bricol directement dans le source HTML. La mme ligne sera
code selon diverses faons :
Caractres codage



(sans codage) FrontPage 2000


&eacute; &egrave; &ccedil; &ugrave; &agrave; &ecirc;
&euro;
DreamWeaver 4


&eacute; &egrave; &ccedil; &ugrave; &agrave; &ecirc;
&#x20AC;
Golive 5
Normalement, il y a de grandes chances que vous voyez tout a correctement. Maintenant, si
vous utilisez Internet Explorer, allez dans Affichage , puis Codage et changez le
codage par dfaut. L, vous risquez de voir les limites de FrontPage qui n'utilise pas
systmatiquement les signes nomms, mme si en thorie, HTML 4.0 devrait le permettre.
Ceux qui n'utilisent pas IE doivent avoir quelque part une fonction quivalente, pour changer
l'affichage par dfaut.
Notez la curieuse faon de coder le symbole de l'euro par Golive 5 : &#x20AC; . C'est tout
simplement sa valeur numrique, en hexadcimal, dans la normalisation unicode
Que penser de tout a ?
Il serait possible de pousser encore plus loin les investigations, et de supprimer dans l'en-tte
de chaque page la dfinition du charset , a ne changerait trs probablement rien au
rsultat final.
Vous le voyez, nous sommes ici dans le flou artistique . Au bout du compte, mme en
HTML 4.0, il semble de bon ton d'utiliser tout de mme systmatiquement les signes
nomms, mme si l'on peut s'en passer le plus souvent
Conclusions
Si vous n'avez pas encore attrap le vertige, vous ne l'attraperez plus. Sinon, essayons de
consolider un peu nos positions.
Les faits
Les systmes numriques ne savent traiter que des informations binaires, donc
numriques.
Les protocoles applicatifs, le plus souvent, ont besoin de transporter du texte.
Le texte est destin tre lu, donc crit, et n'est pas constitu d'une collection de
valeurs numriques, mais d'une collection de symboles graphiques : Un alphabet
Il n'y a pas qu'un seul alphabet au monde.
Les protocoles applicatifs peuvent avoir aussi changer des donnes qui ne sont pas
du texte (une image, du son, une vido).
Les solutions
Coder sur 7 bits un jeu de caractres minimal (US-ASCII), mais il n'y a pas que
l'amricain dans le monde, et 128 valeurs ne suffisent pas pour des langues riches en
lettres accentues.
Coder sur 8 bits, mais a ne suffit pas non plus pour toutes les langues possibles.
Coder en UTF-8.
Le bricolage
Le bricolage le plus propre consiste utiliser un jeu de caractres minimal et de coder les
caractres supplmentaires par une combinaison identifiable des caractres de base. C'est cette
solution qui est le plus souvent mise en uvre, et elle donne finalement les meilleurs rsultats.
Codage quoted-printable (e-mails, imprimantes)
Codage Base64 (e-mails, fichiers pouvant contenir autre chose que du texte pur)
Signes nomms (HTML). Vous trouverez par exemple ici la liste des signes nomms
utilisables en HTML 3.2 et en HTML 4. De mme, la source sur le site du W3C.

MIME
MIME. C'est quoi ?
Multipurpose Internet Mail Extension. Comme son nom l'indique, c'est une suite d'extensions
pour permettre, principalement aux e-mails, de transporter autre chose que du texte, savoir,
du son, des images, de la vido Autant de choses pour lesquelles la messagerie n'est priori
pas faite.
Ces extensions servent galement sur le web, lorsque l'on utilise HTTP pour transporter autre
chose que du texte (ce qui est souvent le cas). Voyez le chapitre HTTP ce propos.
MIME rassemble deux choses distinctes :
Une description normalise d'un type de document (non texte pur).
Le mode de codage employ pour le transporter.
L'IANA maintient une liste des MIME Media Types.
MIME et SMTP
C'est ici que MIME prend toute son importance. En effet, en plus de pouvoir dfinir des types
de documents, il peut aussi dfinir des types d'encodages, comme Base64 ou Quoted-
Printable.
Exemple
Un exemple significatif. Il reprendra ce que nous avons eu l'occasion de voir par ailleurs.
Le message contient le texte :
juste un texte lgrement accentu...
suivi d'une image gif.
cod Quoted-Printable , suivi d'une image gif en pice jointe. Voici le message tel qu'il est
reu :
Return-Path: <christian.caleca@epikoi.net>
...
From: "Christian Caleca" <christian.caleca@epikoi.net>
To: <christian.caleca@epikoi.net>
Subject: demo MIME
Date: Sat, 9 Nov 2002 11:29:09 +0100
MIME-Version: 1.0
Content-Type: multipart/mixed;

On est averti qu'il y aura plusieurs morceaux de type diffrents...

boundary="----=_NextPart_000_0044_01C287E3.38B13A20"

Avec un sparateur bien dfini, que l'on ne peut confondre avec un plan de
fraises des bois.

X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106

This is a multi-part message in MIME format.

------=_NextPart_000_0044_01C287E3.38B13A20
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

La partie texte, code quoted-printable ...

juste un texte l=E9g=E8rement accentu=E9...
suivi d'une image gif.

Voil qui est fait. L'image, maintenant :
------=_NextPart_000_0044_01C287E3.38B13A20
Content-Type: application/octet-stream;
name="moineau1.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="moineau1.gif"

Difficile d'tre plus prcis :
type :flux d'octets
nom : moineau1.gif
codage : Base64...
Suit maintenant le fichier binaire converti en base64 :

R0lGODlhcgH8APf/AP//////zP//mf//Zv//M///AP/M///MzP/Mmf/MZv/MM//MAP+Z//+ZzP+
Z
...
...
...
GZACDvqwAvWAOgEBADs=

------=_NextPart_000_0044_01C287E3.38B13A20--
Comme prvu, ce message contient bien deux parties :
Du texte pur, cod en Quoted-Printable,
une image gif, code en Base64
L'image, dans Outlook Express, va apparaitre sous le texte, spare par un filet horizontal.
Autre exemple
Plus moderne, avec Thunderbird, un message cod en UTF-8, avec en plus un dans le sujet :
Return-Path: <christian.caleca@epikoi.net>
...
Message-ID: <4A5071E0.7080308@epikoi.net>
Date: Sun, 05 Jul 2009 11:26:56 +0200
From: Christian Caleca <christian.caleca@epikoi.net>
User-Agent: Thunderbird 2.0.0.22 (X11/20090608)
MIME-Version: 1.0
To: Christian Caleca <christian.caleca@epikoi.net>
Subject: Objet =?UTF-8?B?YWNjZW50dcOp?=

Observez la sale tte que prend ls "Subject:", juste parce qu'il y a
un accent dedans.
Le texte de l'objet tant tout simplement :
Objet accentu

Content-Type: multipart/mixed;
boundary="------------000609020506050905050804"

This is a multi-part message in MIME format.
--------------000609020506050905050804
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

Et texte utilisant des symboles spciaux confis UTF-8
- le copyright :
- le trade mark :
Le tout suivi d'une image gif

--------------000609020506050905050804
Content-Type: image/png;
name="logogrenouille.png"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="logogrenouille.png"

iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAABHNCSVQICAgIfAhkiAAAAAlw
...
DH5ZAZkYjPyIry4bVPWnSb2mgoyCKiTCKSnh3tA6xJgPQTdgA0OQ/Q5lmEEdplpVO6Y0Gn9A
UwXwkkTpkzA+Vq56JMY/wI7p7P8P7DhAtpxfH8cAAAAASUVORK5CYII=
--------------000609020506050905050804--
Il y a ici plusieurs choses intressantes noter :
l'abominable pirouette utilise cause de l'unique lettre accentue dans l'objet ;
le texte du message est annonc comme tant cod en UTF-8, et il n'y a effectivement
aucun artifice employ sur les caractres spciaux, pas de quoted-printable ni de
bases64 ici ;
dans la partie image , la directive MIME Content-Disposition: inline;
indique que l'image doit tre affiche dans le corps du message (inline) et non comme
une pice jointe.
Note pour les e-mails
Selon toute logique, le codage Base64 devrait pouvoir tre universellement exploit dans la
messagerie, puis qu'il permet coup sr de transporter correctement le message cod (sur 7
bits) et dfinit compltement la table de codage ASCII quelque soit l'alphabet utilis par
l'auteur. Cependant ESMTP prvoit de transporter tout type d'encodage sur 8 bits. Associe
MIME, cette fonctionnalit permet, pour du texte, de ne plus avoir utiliser de conversion 8
bits > 7 bits. Encore faut-il que le destinataire dispose d'un MUA capable de grer de tels
messages.
Au final, nous pouvons observer tout un tas d'attitudes plus ou moins originales et plus ou
moins logiques, dans la faon qu'ont les divers MUA de grer les caractres non US-ASCII et
les pices jointes.
La mode tant aux e-mails en html, nous pouvons trouver assez souvent
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
charset="windows-1252"
Content-Transfer-Encoding: quoted-printable
(inutile de prciser l'origine du MUA responsable).
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Iso-8859-1 est encod en quoted-printable
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Ici, c'est UTF-8 qui est utilis, mais encod galement en quoted-printable
Content-Transfer-Encoding: binary
Content-Type: text/plain;
charset="iso-8859-1"
Ici, c'est plus simple, de l'iso-8859-1 sans encodage particulier
Je n'ai pas d'exemple sous la main, mais il est bien sr tout fait possible de faire :
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
Vous le voyez, arriver lire correctement un message d'apparence tout fait anodine peut
ncessiter de passer par d'normes usines gaz.
MIME et HTTP
Nous en avons dj un exemple dans le chapitre HTTP, pour transporter une image gif dans
une page html. Mais dans ce cas, il n'y a pas de codage (type Base64 ou quoted-printable), les
octets sont brutalement transports par le protocole. MIME sert juste dfinir le type de
document.
Voici juste un exemple, o HTTP va transporter un document MS Word. La manipulation est
faite avec Internet Explorer 6 et Mozilla 1.1 sur une plateforme Windows disposant de MS
Word. Un sniffeur regarde ce qu'il se passe au niveau HTTP.
Comme vous pouvez le constater, cet exemple est dj ancien, mais bien que les outils soient
dsormais obsoltes, la dmonstration reste valable.
Avec Internet Explorer 6
Frame 4 (387 on wire, 387 captured)
...
Internet Protocol, Src Addr: 192.168.0.10, Dst Addr: 192.168.0.253
...
Hypertext Transfer Protocol
GET /odj.doc HTTP/1.1\r\n
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/vnd.ms-excel,
application/msword, */*\r\n

Nous le savons, IE6 accepte explicitement les fichiers au format MS
Office si ce dernier est install.

Accept-Language: fr\r\n
Accept-Encoding: gzip, deflate\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n
Host: linux.maison.mrs\r\n
Connection: Keep-Alive\r\n
\r\n
Frame 6 (1514 on wire, 1514 captured)
...
Internet Protocol, Src Addr: 192.168.0.253, Dst Addr: 192.168.0.10
...
Hypertext Transfer Protocol
HTTP/1.1 200 OK\r\n
Date: Sat, 09 Nov 2002 09:32:41 GMT\r\n
Server: Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6.1mdk)
auth_ldap/1.6.0 mod_ssl/2.8.10 OpenSSL/0.9.6g PHP/4.2.3\r\n
Last-Modified: Thu, 06 Jul 2000 15:07:29 GMT\r\n
ETag: "57d5a-7800-3964a0b1"\r\n
Accept-Ranges: bytes\r\n
Content-Length: 30720\r\n
Keep-Alive: timeout=15, max=100\r\n
Connection: Keep-Alive\r\n
Content-Type: application/msword\r\n
\r\n

Apache connait le type MIME msword et signale le type de contenu, puis,
commence envoyer les donnes.

Data (1067 bytes)
0000 d0 cf 11 e0 a1 b1 1a e1 00 00 00 00 00 00 00 00 ................
0010 00 00 00 00 00 00 00 00 3e 00 03 00 fe ff 09 00 ........>.......
...
Les octets surligns montrent l'vidence que HTTP transporte sur 8
bits
Une fois la rception termine, Internet Explorer va afficher directement le document, en
utilisant MS Word comme plug-in .
Avec Mozilla 1.1
Frame 6 (534 on wire, 534 captured)
...
Internet Protocol, Src Addr: 192.168.0.10, Dst Addr: 192.168.0.253
...
Hypertext Transfer Protocol
GET /odj.doc HTTP/1.1\r\n
Host: linux.maison.mrs\r\n
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1)
Gecko/20020826\r\n
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,
text/plain;q=0.8,video/x-
mng,image/png,image/jpeg,image/gif;q=0.2,
text/css,*/*;q=0.1\r\n

Mozilla ne connat pas quant lui les formats Microsoft.
Il accepte cependant tout type de document (*/*).

Accept-Language: fr-fr, en-us;q=0.66, en;q=0.33\r\n
Accept-Encoding: gzip, deflate, compress;q=0.9\r\n
Accept-Charset: ISO-8859-1, utf-8;q=0.66, *;q=0.66\r\n

Plus respectueux de HTTP, il indique les jeux de caractres qu'il
prfre
iso-8859-1 (latin-1) d'abord, utf-8 (unicode) ensuite, * (n'importe
quoi) enfin.

Keep-Alive: 300\r\n
Connection: keep-alive\r\n
\r\n
Frame 8 (1514 on wire, 1514 captured)
...
Internet Protocol, Src Addr: 192.168.0.253, Dst Addr: 192.168.0.10
...
Hypertext Transfer Protocol
HTTP/1.1 200 OK\r\n
Date: Sat, 09 Nov 2002 09:35:06 GMT\r\n
Server: Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6.1mdk)
auth_ldap/1.6.0 mod_ssl/2.8.10 OpenSSL/0.9.6g PHP/4.2.3\r\n
Last-Modified: Thu, 06 Jul 2000 15:07:29 GMT\r\n
ETag: "57d5a-7800-3964a0b1"\r\n
Accept-Ranges: bytes\r\n
Content-Length: 30720\r\n
Keep-Alive: timeout=15, max=100\r\n
Connection: Keep-Alive\r\n
Content-Type: application/msword\r\n
\r\n

Data (1067 bytes)
0000 d0 cf 11 e0 a1 b1 1a e1 00 00 00 00 00 00 00 00 ................
0010 00 00 00 00 00 00 00 00 3e 00 03 00 fe ff 09 00 ........>.......
Rien de chang de ce ct l. Mozilla, une fois le fichier reu proposera de l'enregistrer ou de
l'afficher en dmarrant MS Word, comme une application spare.
Anecdotes diverses
Il est souvent d'usage d'attribuer un suffixe correspondant un type de fichier donn. Les
images au format jpeg sont par exemple suffixes par .jpg ou encore .jpeg ou .jpe. Il
peut tre intressant de dduite le type MIME du suffixe d'un fichier.
Ainsi, sur une distribution GNU/Linux (ici Ubuntu 9.04, mais aussi Debian
et sans doutes ses autres drives), il existe un fichier /etc/mime.types'' cr
dans ce but. En voici le contenu :
###########################################################################
####
#
# MIME-TYPES and the extensions that represent them
#
# This file is part of the "mime-support" package. Please send email (not
a
# bug report) to mime-support@packages.debian.org if you would like new
types
# and/or extensions to be added.
#
# The reason that all types are managed by the mime-support package
instead
# allowing individual packages to install types in much the same way as
they
# add entries in to the mailcap file is so these types can be referenced
by
# other programs (such as a web server) even if the specific support
package
# for that type is not installed.
#
# Users can add their own types if they wish by creating a ".mime.types"
# file in their home directory. Definitions included there will take
# precedence over those listed here.
#
# Note: Compression schemes like "gzip", "bzip", and "compress" are not
# actually "mime-types". They are "encodings" and hence must _not_ have
# entries in this file to map their extensions. The "mime-type" of an
# encoded file refers to the type of data that has been encoded, not the
# type of encoding.
#
###########################################################################
####


application/activemessage
application/andrew-inset ez
application/annodex anx
application/applefile
application/atom+xml atom
application/atomcat+xml atomcat
application/atomserv+xml atomsrv
application/atomicmail
application/batch-SMTP
application/beep+xml
application/bbolin lin
application/cals-1840
application/cap cap pcap
application/commonground
application/cu-seeme cu
application/cybercash
application/davmount+xml davmount
application/dca-rft
application/dec-dx
application/docbook+xml
application/dsptype tsp
application/dvcs
application/ecmascript es
application/edi-consent
application/edi-x12
application/edifact
application/eshop
application/font-tdpfr
application/futuresplash spl
application/ghostview
application/hta hta
application/http
application/hyperstudio
application/iges
application/index
application/index.cmd
application/index.obj
application/index.response
application/index.vnd
application/iotp
application/ipp
application/isup
application/java-archive jar
application/java-serialized-object ser
application/java-vm class
application/javascript js
application/m3g m3g
application/mac-binhex40 hqx
application/mac-compactpro cpt
application/macwriteii
application/marc
application/mathematica nb nbp
application/ms-tnef
application/msaccess mdb
application/msword doc dot
application/news-message-id
application/news-transmission
application/ocsp-request
application/ocsp-response
application/octet-stream bin
application/oda oda
application/ogg ogx
application/parityfec
application/pdf pdf
application/pgp-encrypted
application/pgp-keys key
application/pgp-signature pgp
application/pics-rules prf
application/pkcs10
application/pkcs7-mime
application/pkcs7-signature
application/pkix-cert
application/pkix-crl
application/pkixcmp
application/postscript ps ai eps espi epsf eps2
eps3
application/prs.alvestrand.titrax-sheet
application/prs.cww
application/prs.nprend
application/qsig
application/rar rar
application/rdf+xml rdf
application/remote-printing
application/riscos
application/rss+xml rss
application/rtf rtf
application/sdp
application/set-payment
application/set-payment-initiation
application/set-registration
application/set-registration-initiation
application/sgml
application/sgml-open-catalog
application/sieve
application/slate
application/smil smi smil
application/timestamp-query
application/timestamp-reply
application/vemmi
application/whoispp-query
application/whoispp-response
application/wita
application/x400-bp
application/xhtml+xml xhtml xht
application/xml xml xsl xsd
application/xml-dtd
application/xml-external-parsed-entity
application/xspf+xml xspf
application/zip zip
application/vnd.3M.Post-it-Notes
application/vnd.accpac.simply.aso
application/vnd.accpac.simply.imp
application/vnd.acucobol
application/vnd.aether.imp
application/vnd.anser-web-certificate-issue-initiation
application/vnd.anser-web-funds-transfer-initiation
application/vnd.audiograph
application/vnd.bmi
application/vnd.businessobjects
application/vnd.canon-cpdl
application/vnd.canon-lips
application/vnd.cinderella cdy
application/vnd.claymore
application/vnd.commerce-battelle
application/vnd.commonspace
application/vnd.comsocaller
application/vnd.contact.cmsg
application/vnd.cosmocaller
application/vnd.ctc-posml
application/vnd.cups-postscript
application/vnd.cups-raster
application/vnd.cups-raw
application/vnd.cybank
application/vnd.dna
application/vnd.dpgraph
application/vnd.dxr
application/vnd.ecdis-update
application/vnd.ecowin.chart
application/vnd.ecowin.filerequest
application/vnd.ecowin.fileupdate
application/vnd.ecowin.series
application/vnd.ecowin.seriesrequest
application/vnd.ecowin.seriesupdate
application/vnd.enliven
application/vnd.epson.esf
application/vnd.epson.msf
application/vnd.epson.quickanime
application/vnd.epson.salt
application/vnd.epson.ssf
application/vnd.ericsson.quickcall
application/vnd.eudora.data
application/vnd.fdf
application/vnd.ffsns
application/vnd.flographit
application/vnd.framemaker
application/vnd.fsc.weblaunch
application/vnd.fujitsu.oasys
application/vnd.fujitsu.oasys2
application/vnd.fujitsu.oasys3
application/vnd.fujitsu.oasysgp
application/vnd.fujitsu.oasysprs
application/vnd.fujixerox.ddd
application/vnd.fujixerox.docuworks
application/vnd.fujixerox.docuworks.binder
application/vnd.fut-misnet
application/vnd.google-earth.kml+xml kml
application/vnd.google-earth.kmz kmz
application/vnd.grafeq
application/vnd.groove-account
application/vnd.groove-identity-message
application/vnd.groove-injector
application/vnd.groove-tool-message
application/vnd.groove-tool-template
application/vnd.groove-vcard
application/vnd.hhe.lesson-player
application/vnd.hp-HPGL
application/vnd.hp-PCL
application/vnd.hp-PCLXL
application/vnd.hp-hpid
application/vnd.hp-hps
application/vnd.httphone
application/vnd.hzn-3d-crossword
application/vnd.ibm.MiniPay
application/vnd.ibm.afplinedata
application/vnd.ibm.modcap
application/vnd.informix-visionary
application/vnd.intercon.formnet
application/vnd.intertrust.digibox
application/vnd.intertrust.nncp
application/vnd.intu.qbo
application/vnd.intu.qfx
application/vnd.irepository.package+xml
application/vnd.is-xpr
application/vnd.japannet-directory-service
application/vnd.japannet-jpnstore-wakeup
application/vnd.japannet-payment-wakeup
application/vnd.japannet-registration
application/vnd.japannet-registration-wakeup
application/vnd.japannet-setstore-wakeup
application/vnd.japannet-verification
application/vnd.japannet-verification-wakeup
application/vnd.koan
application/vnd.lotus-1-2-3
application/vnd.lotus-approach
application/vnd.lotus-freelance
application/vnd.lotus-notes
application/vnd.lotus-organizer
application/vnd.lotus-screencam
application/vnd.lotus-wordpro
application/vnd.mcd
application/vnd.mediastation.cdkey
application/vnd.meridian-slingshot
application/vnd.mif
application/vnd.minisoft-hp3000-save
application/vnd.mitsubishi.misty-guard.trustweb
application/vnd.mobius.daf
application/vnd.mobius.dis
application/vnd.mobius.msl
application/vnd.mobius.plc
application/vnd.mobius.txf
application/vnd.motorola.flexsuite
application/vnd.motorola.flexsuite.adsi
application/vnd.motorola.flexsuite.fis
application/vnd.motorola.flexsuite.gotap
application/vnd.motorola.flexsuite.kmr
application/vnd.motorola.flexsuite.ttc
application/vnd.motorola.flexsuite.wem
application/vnd.mozilla.xul+xml xul
application/vnd.ms-artgalry
application/vnd.ms-asf
application/vnd.ms-excel xls xlb xlt
application/vnd.ms-lrm
application/vnd.ms-pki.seccat cat
application/vnd.ms-pki.stl stl
application/vnd.ms-powerpoint ppt pps
application/vnd.ms-project
application/vnd.ms-tnef
application/vnd.ms-works
application/vnd.mseq
application/vnd.msign
application/vnd.music-niff
application/vnd.musician
application/vnd.netfpx
application/vnd.noblenet-directory
application/vnd.noblenet-sealer
application/vnd.noblenet-web
application/vnd.novadigm.EDM
application/vnd.novadigm.EDX
application/vnd.novadigm.EXT
application/vnd.oasis.opendocument.chart odc
application/vnd.oasis.opendocument.database odb
application/vnd.oasis.opendocument.formula odf
application/vnd.oasis.opendocument.graphics odg
application/vnd.oasis.opendocument.graphics-template otg
application/vnd.oasis.opendocument.image odi
application/vnd.oasis.opendocument.presentation odp
application/vnd.oasis.opendocument.presentation-template otp
application/vnd.oasis.opendocument.spreadsheet ods
application/vnd.oasis.opendocument.spreadsheet-template ots
application/vnd.oasis.opendocument.text odt
application/vnd.oasis.opendocument.text-master odm
application/vnd.oasis.opendocument.text-template ott
application/vnd.oasis.opendocument.text-web oth
application/vnd.osa.netdeploy
application/vnd.palm
application/vnd.pg.format
application/vnd.pg.osasli
application/vnd.powerbuilder6
application/vnd.powerbuilder6-s
application/vnd.powerbuilder7
application/vnd.powerbuilder7-s
application/vnd.powerbuilder75
application/vnd.powerbuilder75-s
application/vnd.previewsystems.box
application/vnd.publishare-delta-tree
application/vnd.pvi.ptid1
application/vnd.pwg-xhtml-print+xml
application/vnd.rapid
application/vnd.rim.cod cod
application/vnd.s3sms
application/vnd.seemail
application/vnd.shana.informed.formdata
application/vnd.shana.informed.formtemplate
application/vnd.shana.informed.interchange
application/vnd.shana.informed.package
application/vnd.smaf mmf
application/vnd.sss-cod
application/vnd.sss-dtf
application/vnd.sss-ntf
application/vnd.stardivision.calc sdc
application/vnd.stardivision.chart sds
application/vnd.stardivision.draw sda
application/vnd.stardivision.impress sdd
application/vnd.stardivision.math sdf
application/vnd.stardivision.writer sdw
application/vnd.stardivision.writer-global sgl
application/vnd.street-stream
application/vnd.sun.xml.calc sxc
application/vnd.sun.xml.calc.template stc
application/vnd.sun.xml.draw sxd
application/vnd.sun.xml.draw.template std
application/vnd.sun.xml.impress sxi
application/vnd.sun.xml.impress.template sti
application/vnd.sun.xml.math sxm
application/vnd.sun.xml.writer sxw
application/vnd.sun.xml.writer.global sxg
application/vnd.sun.xml.writer.template stw
application/vnd.svd
application/vnd.swiftview-ics
application/vnd.symbian.install sis
application/vnd.triscape.mxs
application/vnd.trueapp
application/vnd.truedoc
application/vnd.tve-trigger
application/vnd.ufdl
application/vnd.uplanet.alert
application/vnd.uplanet.alert-wbxml
application/vnd.uplanet.bearer-choice
application/vnd.uplanet.bearer-choice-wbxml
application/vnd.uplanet.cacheop
application/vnd.uplanet.cacheop-wbxml
application/vnd.uplanet.channel
application/vnd.uplanet.channel-wbxml
application/vnd.uplanet.list
application/vnd.uplanet.list-wbxml
application/vnd.uplanet.listcmd
application/vnd.uplanet.listcmd-wbxml
application/vnd.uplanet.signal
application/vnd.vcx
application/vnd.vectorworks
application/vnd.vidsoft.vidconference
application/vnd.visio vsd
application/vnd.vividence.scriptfile
application/vnd.wap.sic
application/vnd.wap.slc
application/vnd.wap.wbxml wbxml
application/vnd.wap.wmlc wmlc
application/vnd.wap.wmlscriptc wmlsc
application/vnd.webturbo
application/vnd.wordperfect wpd
application/vnd.wordperfect5.1 wp5
application/vnd.wrq-hp3000-labelled
application/vnd.wt.stf
application/vnd.xara
application/vnd.xfdl
application/vnd.yellowriver-custom-menu
application/x-123 wk
application/x-7z-compressed 7z
application/x-abiword abw
application/x-apple-diskimage dmg
application/x-bcpio bcpio
application/x-bittorrent torrent
application/x-cab cab
application/x-cbr cbr
application/x-cbz cbz
application/x-cdf cdf cda
application/x-cdlink vcd
application/x-chess-pgn pgn
application/x-core
application/x-cpio cpio
application/x-csh csh
application/x-debian-package deb udeb
application/x-director dcr dir dxr
application/x-dms dms
application/x-doom wad
application/x-dvi dvi
application/x-httpd-eruby rhtml
application/x-executable
application/x-font pfa pfb gsf pcf pcf.Z
application/x-freemind mm
application/x-futuresplash spl
application/x-gnumeric gnumeric
application/x-go-sgf sgf
application/x-graphing-calculator gcf
application/x-gtar gtar tgz taz
application/x-hdf hdf
application/x-httpd-php phtml pht php
application/x-httpd-php-source phps
application/x-httpd-php3 php3
application/x-httpd-php3-preprocessed php3p
application/x-httpd-php4 php4
application/x-ica ica
application/x-info info
application/x-internet-signup ins isp
application/x-iphone iii
application/x-iso9660-image iso
application/x-jam jam
application/x-java-applet
application/x-java-bean
application/x-java-jnlp-file jnlp
application/x-jmol jmz
application/x-kchart chrt
application/x-kdelnk
application/x-killustrator kil
application/x-koan skp skd skt skm
application/x-kpresenter kpr kpt
application/x-kspread ksp
application/x-kword kwd kwt
application/x-latex latex
application/x-lha lha
application/x-lyx lyx
application/x-lzh lzh
application/x-lzx lzx
application/x-maker frm maker frame fm fb book
fbdoc
application/x-mif mif
application/x-ms-wmd wmd
application/x-ms-wmz wmz
application/x-msdos-program com exe bat dll
application/x-msi msi
application/x-netcdf nc
application/x-ns-proxy-autoconfig pac dat
application/x-nwc nwc
application/x-object o
application/x-oz-application oza
application/x-pkcs7-certreqresp p7r
application/x-pkcs7-crl crl
application/x-python-code pyc pyo
application/x-qgis qgs shp shx
application/x-quicktimeplayer qtl
application/x-redhat-package-manager rpm
application/x-ruby rb
application/x-rx
application/x-sh sh
application/x-shar shar
application/x-shellscript
application/x-shockwave-flash swf swfl
application/x-stuffit sit sitx
application/x-sv4cpio sv4cpio
application/x-sv4crc sv4crc
application/x-tar tar
application/x-tcl tcl
application/x-tex-gf gf
application/x-tex-pk pk
application/x-texinfo texinfo texi
application/x-trash ~ % bak old sik
application/x-troff t tr roff
application/x-troff-man man
application/x-troff-me me
application/x-troff-ms ms
application/x-ustar ustar
application/x-videolan
application/x-wais-source src
application/x-wingz wz
application/x-x509-ca-cert crt
application/x-xcf xcf
application/x-xfig fig
application/x-xpinstall xpi

audio/32kadpcm
audio/3gpp
audio/amr amr
audio/amr-wb awb
audio/amr amr
audio/amr-wb awb
audio/annodex axa
audio/basic au snd
audio/flac flac
audio/g.722.1
audio/l16
audio/midi mid midi kar
audio/mp4a-latm
audio/mpa-robust
audio/mpeg mpga mpega mp2 mp3 m4a
audio/mpegurl m3u
audio/ogg oga ogg spx
audio/parityfec
audio/prs.sid sid
audio/telephone-event
audio/tone
audio/vnd.cisco.nse
audio/vnd.cns.anp1
audio/vnd.cns.inf1
audio/vnd.digital-winds
audio/vnd.everad.plj
audio/vnd.lucent.voice
audio/vnd.nortel.vbk
audio/vnd.nuera.ecelp4800
audio/vnd.nuera.ecelp7470
audio/vnd.nuera.ecelp9600
audio/vnd.octel.sbc
audio/vnd.qcelp
audio/vnd.rhetorex.32kadpcm
audio/vnd.vmx.cvsd
audio/x-aiff aif aiff aifc
audio/x-gsm gsm
audio/x-mpegurl m3u
audio/x-ms-wma wma
audio/x-ms-wax wax
audio/x-pn-realaudio-plugin
audio/x-pn-realaudio ra rm ram
audio/x-realaudio ra
audio/x-scpls pls
audio/x-sd2 sd2
audio/x-wav wav

chemical/x-alchemy alc
chemical/x-cache cac cache
chemical/x-cache-csf csf
chemical/x-cactvs-binary cbin cascii ctab
chemical/x-cdx cdx
chemical/x-cerius cer
chemical/x-chem3d c3d
chemical/x-chemdraw chm
chemical/x-cif cif
chemical/x-cmdf cmdf
chemical/x-cml cml
chemical/x-compass cpa
chemical/x-crossfire bsd
chemical/x-csml csml csm
chemical/x-ctx ctx
chemical/x-cxf cxf cef
#chemical/x-daylight-smiles smi
chemical/x-embl-dl-nucleotide emb embl
chemical/x-galactic-spc spc
chemical/x-gamess-input inp gam gamin
chemical/x-gaussian-checkpoint fch fchk
chemical/x-gaussian-cube cub
chemical/x-gaussian-input gau gjc gjf
chemical/x-gaussian-log gal
chemical/x-gcg8-sequence gcg
chemical/x-genbank gen
chemical/x-hin hin
chemical/x-isostar istr ist
chemical/x-jcamp-dx jdx dx
chemical/x-kinemage kin
chemical/x-macmolecule mcm
chemical/x-macromodel-input mmd mmod
chemical/x-mdl-molfile mol
chemical/x-mdl-rdfile rd
chemical/x-mdl-rxnfile rxn
chemical/x-mdl-sdfile sd sdf
chemical/x-mdl-tgf tgf
#chemical/x-mif mif
chemical/x-mmcif mcif
chemical/x-mol2 mol2
chemical/x-molconn-Z b
chemical/x-mopac-graph gpt
chemical/x-mopac-input mop mopcrt mpc zmt
chemical/x-mopac-out moo
chemical/x-mopac-vib mvb
chemical/x-ncbi-asn1 asn
chemical/x-ncbi-asn1-ascii prt ent
chemical/x-ncbi-asn1-binary val aso
chemical/x-ncbi-asn1-spec asn
chemical/x-pdb pdb ent
chemical/x-rosdal ros
chemical/x-swissprot sw
chemical/x-vamas-iso14976 vms
chemical/x-vmd vmd
chemical/x-xtel xtel
chemical/x-xyz xyz

image/cgm
image/g3fax
image/gif gif
image/ief ief
image/jpeg jpeg jpg jpe
image/naplps
image/pcx pcx
image/png png
image/prs.btif
image/prs.pti
image/svg+xml svg svgz
image/tiff tiff tif
image/vnd.cns.inf2
image/vnd.djvu djvu djv
image/vnd.dwg
image/vnd.dxf
image/vnd.fastbidsheet
image/vnd.fpx
image/vnd.fst
image/vnd.fujixerox.edmics-mmr
image/vnd.fujixerox.edmics-rlc
image/vnd.mix
image/vnd.net-fpx
image/vnd.svf
image/vnd.wap.wbmp wbmp
image/vnd.xiff
image/x-cmu-raster ras
image/x-coreldraw cdr
image/x-coreldrawpattern pat
image/x-coreldrawtemplate cdt
image/x-corelphotopaint cpt
image/x-icon ico
image/x-jg art
image/x-jng jng
image/x-ms-bmp bmp
image/x-photoshop psd
image/x-portable-anymap pnm
image/x-portable-bitmap pbm
image/x-portable-graymap pgm
image/x-portable-pixmap ppm
image/x-rgb rgb
image/x-xbitmap xbm
image/x-xpixmap xpm
image/x-xwindowdump xwd

inode/chardevice
inode/blockdevice
inode/directory-locked
inode/directory
inode/fifo
inode/socket

message/delivery-status
message/disposition-notification
message/external-body
message/http
message/s-http
message/news
message/partial
message/rfc822 eml

model/iges igs iges
model/mesh msh mesh silo
model/vnd.dwf
model/vnd.flatland.3dml
model/vnd.gdl
model/vnd.gs-gdl
model/vnd.gtw
model/vnd.mts
model/vnd.vtu
model/vrml wrl vrml

multipart/alternative
multipart/appledouble
multipart/byteranges
multipart/digest
multipart/encrypted
multipart/form-data
multipart/header-set
multipart/mixed
multipart/parallel
multipart/related
multipart/report
multipart/signed
multipart/voice-message

text/calendar ics icz
text/css css
text/csv csv
text/directory
text/english
text/enriched
text/h323 323
text/html html htm shtml
text/iuls uls
text/mathml mml
text/parityfec
text/plain asc txt text pot brf
text/prs.lines.tag
text/rfc822-headers
text/richtext rtx
text/rtf
text/scriptlet sct wsc
text/t140
text/texmacs tm ts
text/tab-separated-values tsv
text/uri-list
text/vnd.abc
text/vnd.curl
text/vnd.DMClientScript
text/vnd.flatland.3dml
text/vnd.fly
text/vnd.fmi.flexstor
text/vnd.in3d.3dml
text/vnd.in3d.spot
text/vnd.IPTC.NewsML
text/vnd.IPTC.NITF
text/vnd.latex-z
text/vnd.motorola.reflex
text/vnd.ms-mediapackage
text/vnd.sun.j2me.app-descriptor jad
text/vnd.wap.si
text/vnd.wap.sl
text/vnd.wap.wml wml
text/vnd.wap.wmlscript wmls
text/x-bibtex bib
text/x-boo boo
text/x-c++hdr h++ hpp hxx hh
text/x-c++src c++ cpp cxx cc
text/x-chdr h
text/x-component htc
text/x-crontab
text/x-csh csh
text/x-csrc c
text/x-dsrc d
text/x-diff diff patch
text/x-haskell hs
text/x-java java
text/x-literate-haskell lhs
text/x-makefile
text/x-moc moc
text/x-pascal p pas
text/x-pcs-gcd gcd
text/x-perl pl pm
text/x-python py
text/x-scala scala
text/x-server-parsed-html
text/x-setext etx
text/x-sh sh
text/x-tcl tcl tk
text/x-tex tex ltx sty cls
text/x-vcalendar vcs
text/x-vcard vcf

video/3gpp 3gp
video/annodex axv
video/dl dl
video/dv dif dv
video/fli fli
video/gl gl
video/mpeg mpeg mpg mpe
video/mp4 mp4
video/quicktime qt mov
video/mp4v-es
video/ogg ogv
video/parityfec
video/pointer
video/vnd.fvt
video/vnd.motorola.video
video/vnd.motorola.videop
video/vnd.mpegurl mxu
video/vnd.mts
video/vnd.nokia.interleaved-multimedia
video/vnd.vivo
video/x-flv flv
video/x-la-asf lsf lsx
video/x-mng mng
video/x-ms-asf asf asx
video/x-ms-wm wm
video/x-ms-wmv wmv
video/x-ms-wmx wmx
video/x-ms-wvx wvx
video/x-msvideo avi
video/x-sgi-movie movie
video/x-matroska mpv

x-conference/x-cooltalk ice

x-epoc/x-sisx-app sisx
x-world/x-vrml vrm vrml wrl
Conclusions
Ce chapitre vous aura, je l'espre, aid mieux comprendre :
Comment le Net arrive tout de mme plutt bien se sortir lgamment du pige
permanent que prsente le transport de donnes au niveau mondial,
certains messages que vos navigateurs web peuvent vous envoyer lorsque vous visitez
des sites trangers,
pourquoi certains mails que vous pouvez recevoir peuvent tre illisibles, et, peut-tre,
comment y remdier,
les prcautions qu'il faut prendre pour avoir de bonnes chances d'envoyer des e-mails
lisibles par le plus grand nombre
TCP/IP(v4)
Dans le chapitre prcdent, nous avons eu l'occasion de voir comment un rseau est construit
et quels protocoles de bas niveau (niveau 1 du modle OSI) sont employs pour transporter
ses donnes brutes sur le rseau.
Le rseau Ethernet est le plus employ (Avec ATM pour les oprateurs Tlcoms). Ici, nous
allons nous intresser au protocole situ juste au dessus, du moins au plus utilis d'entre eux:
TCP/IP. Ce protocole est en effet omniprsent sur le Net.
Une bonne comprhension de TCP/IP est ncessaire si l'on souhaite d'une part savoir
comment les donnes transitent sur les rseaux et, d'autre part, ne pas tre trop perdu dans les
rgles sanitaires qui permettent de mettre nos machines connectes le plus possible l'abri
des agressions. Il existe plusieurs outils de protection (Firewalls en anglo saxon), mais ces
outils n'ont qu'un effet psychologique, le plus souvent nfaste d'ailleurs, si l'on n'a aucune
comptence pour les paramtrer de faon efficace. Le problme de la scurit est abord dans
un autre chapitre sur ce site.
Au programme :
les adresses logiques de l'Internet Protocol (couche 3 du modle OSI)
Les modes connect (TCP) et non connect (UDP) (couche 4 du modle OSI)
Les protocoles applicatifs (HTTP, FTP, SMTP, POP etc.) (couche 7 du modle OSI)
Les protocoles
C'est quoi un protocole?
Essayons d'en donner une dfinition satisfaisante
C'est un mode opratoire qui doit tre commun tous les lments qui dsirent communiquer
entre eux. Il n'y a pas de communication possible sans avoir recours un protocole. Bien
entendu, le protocole doit tre adapt au type de communication que l'on souhaite mettre en
uvre
Nous passons notre vie utiliser des protocoles, heureusement sans en tre conscients la
plupart du temps.
Rappel
Le modle OSI dfinit sept couches. TCP/IP est bas sur le modle DOD, qui ne comporte
que quatre couches, mais en cohrence avec le modle OSI.

Les principaux protocoles rencontrs sur un rseau
TCP/IP
Organisation hirarchique

Nous trouvons ici les protocoles
applicatifs. Ce sont des protocoles de
haut niveau, destins permettre le
dialogue entre applications serveurs et
clientes. HTTP, FTP, POP et SMTP
sont loin d'tre les seuls. Ce sont
cependant ceux que les internautes
utilisent le plus souvent. Parmi l'un des
plus dangereux, il y a TELNET qui
permet de piloter une machine
distance.

Ici, ce sont les protocoles orients
transport de donnes. UDP est dit sans
connexion et TCP est dit avec
connexion . Nous verrons plus loin ce
que ceci veut dire. Ces protocoles
permettent ceux de la couche 4 de
transporter leurs donnes de faon
fiable.

Ce sont ici des protocoles de haut
niveau de la couche rseau. IP permet le
routage des informations entre rseaux,
c'est ici que l'adresse IP est utilise.
ICMP est un protocole de contrle il
met disposition des outils de dpistage
d'erreur et de signalisation. C'est un
protocole important qui mrite que l'on
s'y arrte. Nous en reparlerons plus en
dtail.

Protocole de plus bas niveau sur le
rseau, il assure la bonne gestion du
mdium (dtection de collisions) et
permet l'acheminement des informations
entre metteur et destinataire au niveau
des adresses MAC. IP s'appuie dessus
bien videment.
Ethernet
Le vocable Ethernet est souvent employ contre sens. Peut-tre n'est-il pas inutile
de prciser un peu, mme si, pour l'utilisateur (qui travaille sur la couche suprieure), ce
qu'il se passe sur la couche 1 n'a pas beaucoup de rpercussions.
Le mot Ethernet fait rfrence au support de propagation des informations utilis.
Historiquement, de trois types (mais d'autres peuvent tre utiliss):
Coaxial pais
Coaxial fin (RG58)
Paire torsade.
Pour tre tout fait prcis, la norme qui dcrit les rseaux de type Ethernet qui sont utiliss
sur la majorit des rseaux locaux est la norme IEEE 802.3
Cette norme dcrit dans le dtail le fonctionnement du rseau sur les supports cits
prcdemment. Elle dfinit entre autre, le protocole d'mission de donnes utilis: le
CSMA/CD persistant 1 (qui n'est pas le plus performant).
Remarque fine...
Les rseaux France Tlcom ne sont pas des rseaux IEEE 802.3, mais des rseaux ATM
(Asynchronous Transfer Mode). Le rseau ATM a t dvelopp dans l'optique d'un transport
de donnes de natures diverses (voix, vido, informatique). ATM est capable de grer
finement le partage des ressources d'une dorsale.
Bien que cette technologie soit pas mal controverse, c'est tout de mme elle qui est utilise
par notre oprateur historique (et d'autres galement). Cependant, les trames IEEE 802.3
peuvent tre encapsules sur de l'ATM, TCP/IP peut s'appuyer sur ATM, si bien que nous
autres, utilisateurs, voyons tout de mme un rseau classique de l'Internet. En fait, le
Com21 est connect sur un rseau ATM via le cble.

IP
Internet Protocol.
C'est le protocole dont on parle le plus, il est en effet directement impliqu dans la
configuration rseau de l'hte. C'est lui qui, en fonction de l'adresse IP du destinataire
acheminera l'information sur la bonne route.
Les considrations relatives la topologie d'une adresse IP sont vues un peu plus loin
dans ce chapitre.
Les concepts du routage sont vus dans le chapitre suivant sur ce site.
ICMP
Internet Control Message Protocol.
En termes de scurit, ce protocole fait peur beaucoup de monde (parfois juste titre
d'ailleurs), il est cependant fondamental pour le bon fonctionnement de l'Internet. C'est grce
ce protocole que les anomalies de fonctionnement peuvent tre signales l'metteur, afin
qu'il puisse essayer d'y remdier.
ICMP gnre des messages de types diffrents, selon la nature du problme traiter:
Valeur Nom Description
0 Rponse d'cho Rien de plus que la rponse un PING
3
Destination
inaccessible
C'est un message intressant, parce qu'il permet celui qui le reoit
d'tre inform que l'hte avec lequel il veut communiquer n'est pas
accessible. Ca peut souvent viter une application de rester
plante attendre une rponse qui ne viendra pas.
4
Etranglement
de la source
Principalement utiliss par les routeurs, ce signal permet d'expliquer
un hte qui parle un peu trop qu'il faut qu'il se taise, parce qu'il
inonde la file d'attente.
5
Redirection
ncessaire
Information utile pour la mise jour des tables de routage.
8
Demande
d'cho
C'est la question pose un hte par la commande PING.
11 TTL Expir
Un paquet est toujours mis avec une dure de vie. Cette dure de
vie est dcrmente chaque nud qui traite le paquet (d'une dure
minimum d'une seconde, ou du temps qu'a mis la paquet traverser
le nud). Si le paquet arrive en fin de vie, il est jet et un message
ICPM de type 11 est envoy l'metteur. Cette proprit est utilise
dans la commande tracert (traceroute sur Linux) pour calculer les
temps d'accs sur les diverses passerelles du chemin parcouru.
12
Problme de
paramtre
Ce message indique qu'il y a une erreur dans le champ d'en-tte du
paquet. Ce problme ne peut normalement arriver que dans le cas
d'un bug du logiciel.
13
Requte
d'horodatage
Assez similaire la requte d'cho, avec en plus le marquage de
l'heure Ce type d'cho permet de connatre l'heure d'arrive de la
requte et l'heure de dpart de la rponse sur l'hte cible.
14
Rponse de
d'horodatage.
17
Requte de
masque
d'adresse
Ces messages sont utiliss pour effectuer des tests au sein d'un rseau
ou d'un sous-rseau.
18
Rponse de
masque
d'adresse.

Les protocoles de la couche transport permettent, comme l'indique le nom de la couche, de
mettre disposition des niveaux suprieurs des outils de transport de donnes fiables.
Il existe deux modes de transfert:
Le mode connect (TCP)
Dans ce mode, il se met en place un processus de handshake (poigne de main) entre le
client et le serveur. Ce processus permet d'tablir un dialogue propos du transfert de
donnes. Il y a des accuss rception, des demandes d'mission etc. qui permettent aux
applications de savoir exactement o en est le processus de transfert de donnes.
Ce protocole est trs robuste et permet un transfert de donnes dans de bonnes conditions.
Voir les dtails plus loin dans ce chapitre.
Le handshake est un concept fondamental dans un protocole de dialogue robuste. En
gros, a veut dire: Chaque fois que tu envoies un message son destinataire, assure-toi
qu'il l'a reu et compris
La lettre recommande avec accus de rception est un bon exemple de mode connect. Si
l'metteur reoit l'accus rception, alors il est certain que sa lettre est arrive destination.
Le mode non connect (UDP)
C'est un mode simple, de type on envoie les donnes et on espre qu'elles arriveront . Il n'y
a pas de connexion , au sens o on l'a vu pour le mode connect. En revanche, il est
possible de mettre en place un processus d'acquittement.
Ce mode est utilis, par exemple, pour les requtes DNS. Il offre l'avantage d'tre moins
gourmand en ressources, mais ne peut tre efficace pour un transfert de fichiers et en gnral,
pour les transferts de donnes volumineuses.
L aussi, vous aurez plus de dtails un peu plus loin sur ce site.
Dans ce mode, il n'y a pas de handshake . Une lettre simple et ici un bon exemple.
L'metteur ne reoit priori aucune confirmation de rception.
Les protocoles d'application sont des protocoles de haut niveau, adapts aux besoins
d'applications spcifiques. Ils s'appuient sur UDP et TCP pour permettre le transfert
d'informations entre une application serveur et ses applications clientes.
Il en existe un grand nombre, nous allons effectuer un rapide tour d'horizon de ceux qui sont
le plus souvent utiliss.
HTTP
Hyper Text Transfert Protocol Ce protocole est utilis pour la navigation web
entre un serveur HTTP et un butineur. Le protocole assure (normalement) qu'un
client comme Internet Explorer ou Netscape Communicator peut envoyer des
requtes et recevoir les rponses de serveurs HTTP comme APACHE ou Internet
Information Server sans problmes particuliers. Les ennuis viennent du fait que les
clients supportent bien souvent des extensions propritaires du protocole. Ces
extensions sont d'ailleurs la plupart du temps entrines dans les versions
successives du protocole, c'est comme a que tout volue.
FTP
File Transfert Protocol Protocole qui permet d'assurer le transfert de fichiers de
faon indpendante des spcificits des NOS (Network Operatind System, pour
mmoire). Ainsi, un client FTP sous Windows peut tlcharger un fichier depuis un
serveur UNIX
SMTP
Simple Mail Transfert Protocol Le protocole qui permet d'acheminer le courrier
depuis le serveur SMTP de l'metteur, jusqu'au serveur SMTP du destinataire, qui
le classe dans les Botes aux lettres de ses clients. (Dcrit en dtail par ailleurs dans
ce site).
POP3
Post Office Protocol version 3. Le protocole qui permet au client de relever
distance le courrier class dans sa bote aux lettres. Egalement dtaill par ailleurs
sur ce site.
I MAP4
I nteractive Mail Access Protocol version 4 Normalement, ce protocole devrait
prendre la place de POP3. Certains fournisseurs srieux, comme FREE
l'implmentent dj. Contrairement POP3 qui ne permet une gestion des messages
qu'une fois qu'ils sont rapatris localement, IMAP propose des fonctionnalits plus
fines.
NNTP
Network News Transfert Protocol Trs proche de SMTP, ce protocole est employ
par les forums usenet. Bien que l'usage des forums NNTP n'entre que tardivement
dans les murs des internautes dbutants, ce moyen de communication offre des
avantages incomparables par rapport aux listes de diffusion par exemple.
TELNET
C'est le couteau suisse du travail distance. En fait, un client TELNET est une
console en mode texte, capable de se connecter sur la plupart des serveurs, comme
POP3 ou SMTP. Il devient alors possible d'envoyer et de lire des messages, si l'on
connait les commandes inhrentes aux protocoles SMTP et POP3. Un serveur
TELNET permet cependant des choses bien plus puissantes et dangereuses
puisqu'il devient possible de prendre distance le contrle d'un hte. C'est un outil
qui permet l'administration distante d'une machine, du moment que l'on est capable
d'ouvrir une session et d'acqurir les droits de super utilisateur .
Il en existe bien entendu beaucoup d'autres, il n'est pas, encore une fois, question ici de
rfrencer tous les protocoles applicatifs de la cration.
L'adresse IP
Avant de commencer
Il est bon de savoir qu'il existe une adresse MAC (Media Access Control), crite
normalement en dur dans la ROM de l'interface rseau et donc thoriquement
ineffaable et infalsifiable (mais ce n'est que la thorie, tous les pirates vous le diront). Cette
adresse est rpute unique et dcide par le constructeur de la carte. Elle est la seule adresse
exploite au niveau 2 pour l'identification des htes qui dialoguent. Cette mthode ne
permettant pas l'interconnexion de rseaux, il va tre ncessaire d'ajouter dans la couche
suprieure (niveau 3), une adresse logique qui sera attribue par l'administrateur du rseau, en
coordination avec les organismes chargs de grer l'attribution de ces adresses. Dans le cas
qui nous intresse ici, il s'agit de l'adresse IP.
Dfinition d'une adresse IP
Internet Protocol
Il existe dj sur le Net une multitude de pages qui traitent du sujet, a ne fait rien, mettons en
une de plus
Dans sa version 4, IP dfinit une adresse sur 4 octets. Une partie dfinit l'adresse du rseau
(NetID ou SubnetID suivant le cas), l'autre partie dfinit l'adresse de l'hte dans le rseau
(HostID). La taille relative de chaque partie varie suivant le masque de (sous) rseau.
Les classes d'adresses
Bien que cette faon de faire soit dsormais obsolte (nous verrons plus loin pourquoi), il
reste intressant de l'tudier, pour mieux comprendre la notion de masque de sous-rseau.
Topologie
Hormis la classe D multicast, destine faire de la diffusion d'information pour plusieurs
htes simultanment, il existe trois classes d'adresses IP:
Comme vous le voyez, la classe A permet de crer peu de rseaux, mais avec beaucoup
d'htes dans chaque rseau, La classe C faisant l'inverse.
tendue de chaque classe
Comment fait-on pour savoir quelle classe appartient une adresse ? Il y a deux mthodes
pour le savoir:
La triviale, qui consiste apprendre par cur le tableau.
La subtile, qui consiste retenir la rgle, qui est logique.
Voici donc la rgle:
La classe est dfinie par les bits les plus lourds (les plus gauche)
Le bit le moins signifiant pour la classe est toujours un 0
Les autres sont tous 1
La classe A est signale par un seul bit, donc obligatoirement un 0
La classe B par deux bits, donc 1 0
La classe C par trois bits, donc 1 1 0
La classe D (multicast) par 4 bits donc 1 1 1 0

Il existe mme une classe E, dont les bits les plus lourds sont 11110, qui est rserve un
usage ultrieur .
Si l'on arrive retenir la dfinition ou son image, a devient facile de retrouver l'tendue de
chaque classe:
Class Premire adresse Dernire adresse
A 0.0.0.1 127.255.255.254
B 128.0.0.1 191.255.255.254
C 192.0.0.1 223.255.255.254
D 224.0.0.1 239.255.255.254
A ce stade, nous pourrions penser qu'il peut y avoir, par exemple, 128 rseaux de classe A,
avec la possibilit d'avoir 16 777 216 htes dans chaque rseau. C'est bien entendu, un peu
plus compliqu que .
Il y a dj quelques adresses que l'on ne peut pas attribuer un hte:
L'adresse d'hte =0 (exemple: 192.168.1.0 dans une classe C)
Par convention, l'adresse IP dont la partie hte est nulle est rserve l'identification
du rseau.
L'adresse d'hte avec tous ses bits 1 (exemple: 192.168.1.255)
Par convention, cette adresse signifie que tous les htes du rseau 192.168.1.0 sont
concerns (Adresse de broadcast).
Les rseaux privs
Et ce n'est pas tout. Nous savons qu'une adresse Internet doit tre unique dans un inter rseau.
Cette considration, qui ne posait pas trop de problmes pour des rseaux d'entreprise coups
du reste du monde, devient trs restrictive l'chelle de l'Internet o chaque adresse IP doit
tre unique l'chelle plantaire. Ceci reprsente une contrainte norme, et qui fait que la
pnurie d'adresses IP est une catastrophe annonce bien plus certaine que celle du bug de l'an
2000. (Rassurez-vous, le prochain protocole IP v6 prvoit de la marge, il faudra juste tout r
apprendre).
Pour permettre aux entreprises de construire leur rseau priv, il a donc t rserv dans
chaque classe A, B et C des adresses de rseaux qui ne sont jamais attribues sur l'Internet
(RFC 1918). Tout paquet de donnes contenant une adresse appartenant ces rseaux doit
tre limin par le premier routeur tablissant une connexion avec l'Internet.
Ces rseaux privs sont:
Classe Rseaux privs Identification
A 10.0.0.0 Pour les rseaux privs
A 127.0.0.0 Pour l'interface de boucle locale (1)
B 169.254.0.0 169.254.255.255 Pour l'auto-configuration en rseau local (2)
B 172.16.0.0 172.31.0.0 Pour les rseaux privs
C 192.168.0.0 192.168.255.0 Pour les rseaux privs
(1) L'adresse qui correspond localhost . Cette adresse locale est ncessaire au
fonctionnement de la pile IP.
(2) Systme zeroconf qui permet une allocation dynamique d'adresse IP sur le lien local
(IPV4LL).
Le masque de sous rseau
Le masque de sous-rseau a une importance que peu d'utilisateurs connaissent, elle est
pourtant fondamentale. C'est un ensemble de 4 octets destin isoler:
Soit l'adresse de rseau (NetID ou SubnetID) en effectuant un ET logique bit bit
entre l'adresse IP et le masque.
Soit l'adresse de l'hte (HostID) en effectuant un ET logique bit bit entre l'adresse IP
et le complment du masque (!masque).
Les masques de sous-rseau par dfaut sont, suivant les classes d'adresses:
Classe Masque par dfaut Nbe d'octets pour l'hte
A 255.0.0.0 3
B 255.255.0.0 2
C 255.255.255.0 1
Par dfaut, un masque de sous rseau englobe donc la totalit de la classe.
Mais pourquoi sous rseau ?
Le principe en est simple: Imaginons que nous disposions d'une classe B. Nous disposons
donc de deux octets pour les adresses d'htes, soit 65 534 htes possibles (les adresses x.x.0.0
et x.x.255.255 sont rserves). Ca ferait tout de mme beaucoup de machines sur le mme
rseau. En pareil cas, il est bien prfrable d'organiser son rseau logique en plusieurs sous
rseaux, connects entre eux par des routeurs.
Si par exemple, bien qu'tant en classe B, on choisit comme masque de sous rseau
255.255.255.0, nous obtiendrons 256 sous rseaux de 254 htes chacun dans le mme
rseau. Mais il est possible de dfinir des masques plus subtils.
Deux htes, bien qu'appartenant au mme rseau logique, s'ils sont placs dans des sous
rseaux logiques diffrents, ne pourront communiquer entre eux que par l'intermdiaire d'un
routeur. Cette solution est trs commode pour des rseaux d'entreprise constitus de rseaux
locaux distants et mme pour des rseaux locaux comportant plusieurs centaines d'htes.
Le modle CIDR
Cette faon de faire aboutit malheureusement un formidable gaspillage d'adresses IP dans la
mesure o, la belle poque, une entreprise pouvait se voir attribuer une classe complte et
n'en utiliser qu'une partie.
Avec ce modle (Classless Inter-Domain Routing), la notion de classe n'existe plus, si ce n'est
pour les classes rserves l'usage priv. Les adresses sont dsormais distribues par bloc,
sans tenir compte de leur classe originelle.
L'IANA distribue donc dsormais des blocs d'adresses contigus, dlimites par un masque,
toujours de 32 bits, dont les x bits de gauche sont 1 et les autres 0. Dans ce modle, un
bloc d'adresse se dfinit ainsi :
adresse.de.base/x
A titre d'exemple, la classe C 192.168.0.0 avec un masque 255.255.255.0 s'crirait :
192.168.0.0/24
Ici, nous avons toujours deux adresses remarquables :
192.168.0.0 qui symbolise tout le bloc ;
192.168.0.255 qui est l'adresse de broadcast pour ce bloc.
La souplesse de cette mthode CIDR rside dans le fait que l'on peut dfinir dsormais un
bloc comme ceci :
192.168.0.0/26
Il existe sur toute bonne distribution GNU/Linux un utilitaire nomm ipcalc qui va nous
dcortiquer ce bloc :
~$ ipcalc 192.168.0.0/26
Address: 192.168.0.0 11000000.10101000.00000000.00 000000
Netmask: 255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard: 0.0.0.63 00000000.00000000.00000000.00 111111
=>
Network: 192.168.0.0/26 11000000.10101000.00000000.00 000000
HostMin: 192.168.0.1 11000000.10101000.00000000.00 000001
HostMax: 192.168.0.62 11000000.10101000.00000000.00 111110
Broadcast: 192.168.0.63 11000000.10101000.00000000.00 111111
Hosts/Net: 62 Class C, Private Internet
Notez l'inhabituelle adresse de broadcast pour ce bloc. Nous avons donc ici la possibilit
d'adresser 62 nuds, et l'tendue totales des adresses utilises (rseau et broadcast compris)
est :
192.168.0.0 - 192.168.0.63
Voyons le bloc suivant qui pourrait tre tout naturellement :
192.168.0.64/26
:~$ ipcalc 192.168.0.64/26
Address: 192.168.0.64 11000000.10101000.00000000.01 000000
Netmask: 255.255.255.192 = 26 11111111.11111111.11111111.11 000000
Wildcard: 0.0.0.63 00000000.00000000.00000000.00 111111
=>
Network: 192.168.0.64/26 11000000.10101000.00000000.01 000000
HostMin: 192.168.0.65 11000000.10101000.00000000.01 000001
HostMax: 192.168.0.126 11000000.10101000.00000000.01 111110
Broadcast: 192.168.0.127 11000000.10101000.00000000.01 111111
Hosts/Net: 62 Class C, Private Internet
Un autre exemple
Sur un rseau priv, nous pourrions prendre les deux classes C 192.168.0.0 et 192.168.1.0. En
utilisant un masque de type 255.255.254.0, ceci nous permettra de runir les deux classes C au
sein d'un mme rseau logique.
En notation CIRD : 192.168.0.0/23
~$ ipcalc 192.168.0.0/23
Address: 192.168.0.0 11000000.10101000.0000000 0.00000000
Netmask: 255.255.254.0 = 23 11111111.11111111.1111111 0.00000000
Wildcard: 0.0.1.255 00000000.00000000.0000000 1.11111111
=&gt;
Network: 192.168.0.0/23 11000000.10101000.0000000 0.00000000
HostMin: 192.168.0.1 11000000.10101000.0000000 0.00000001
HostMax: 192.168.1.254 11000000.10101000.0000000 1.11111110
Broadcast: 192.168.1.255 11000000.10101000.0000000 1.11111111
Hosts/Net: 510 Class C, Private Internet
a fonctionne Avec quelques restrictions cependant, sur les anciens systmes. Certaines
vieilles piles IP (Windows 95 par exemple) risquent de ne pas accepter les adresses
192.168.0.255 et 192.168.1.0 comme adresses d'htes valides (elles devraient tre rserves
dans un rseau normal, nous l'avons vu, mais dans le cas d'un bloc constitu comme celui
de l'exemple, il est logiquement possible de les utiliser).
Un exemple vrai de configuration
Cet exemple appartient dsormais au pass, du temps d'un fournisseur d'accs aujourd'hui
disparu.
Un client se connecte et rcupre l'adresse 62.161.99.115. C'est une adresse de classe A. Nous
allons essayer de voir toutes les informations que l'on peut en tirer, au niveau du rseau.
whois nous dit:
whois -h whois.geektools.com 62.161.99.115 ...
Query: 62.161.99.115
Registry: whois.ripe.net
Results:
% Rights restricted by copyright. See http://www.ripe.net/ripencc/pub-
services/db/copyright.html
inetnum: 62.161.96.0 - 62.161.120.255
...
Cette adresse appartient donc au bloc 62.161.96.0 - 62.161.120.255, qui est une portion du
rseau de classe A 62.0.0.0.
Voyons maintenant les informations donnes par le DHCP. (Exemple sous Linux avec
PUMP)
Device eth0
IP: 62.161.99.115
Netmask: 255.255.248.0
Broadcast: 62.161.103.255
Network: 62.161.96.0
Boot server 62.161.120.11
Next server 62.161.120.11
Gateway: 62.161.96.1
...
Nameservers: 62.161.120.11
Renewal time: Thu Feb 1 10:17:57 2001
Expiration time: Thu Feb 1 10:25:27 2001
Le masque de sous rseau est ici aussi inhabituel
~$ ipcalc 62.161.96.0 255.255.248.0
Address: 62.161.96.0 00111110.10100001.01100 000.00000000
Netmask: 255.255.248.0 = 21 11111111.11111111.11111 000.00000000
Wildcard: 0.0.7.255 00000000.00000000.00000 111.11111111
=>
Network: 62.161.96.0/21 00111110.10100001.01100 000.00000000
HostMin: 62.161.96.1 00111110.10100001.01100 000.00000001
HostMax: 62.161.103.254 00111110.10100001.01100 111.11111110
Broadcast: 62.161.103.255 00111110.10100001.01100 111.11111111
Hosts/Net: 2046 Class A
Exercices...
A quel sous rseau appartient l'adresse 62.161.99.115 (SubnetID)?
Adresse IP
0011 1110 . 1010 0001 . 0110 0011 . 0111
0011
Masque de sous rseau:
1111 1111 . 1111 1111 . 1111 1000 . 0000
0000
Adresse du sous-rseau: (ET
logique)
0011 1110 . 1010 0001 . 0110 0000 . 0000
0000
donc en dcimal:
62.161.96.0
L'opration consiste simplement en un ET logique bit bit entre l'adresse et le masque. Mais
on avait dj la rponse en consultant les informations du client DHCP
Quelle est la partie de l'adresse qui concerne l'hte (HostID)?
Adresse IP
0011 1110 . 1010 0001 . 0110 0011 . 0111
0011
Masque de sous rseau: (complment
logique)
0000 0000 . 0000 0000 . 0000 0111 . 1111
1111
HostID: (ET logique)
0000 0000 . 0000 0000 . 0000 0011 . 0111
0011
donc en dcimal:
0.0.3.115
L'opration consiste ici en un ET logique entre l'adresse et le complment du masque. Bien
entendu, HostID + SubnetID doit reconstituer l'adresse IP, ce qui est bien le cas:
(62.161.96.0) + (0.0.3.115) = 62.161.99.115
Quelle est la plus petite adresse possible dans ce sous rseau?
SubnetID+1=62.161.96.1 .
Qui est d'ailleurs l'adresse de la passerelle (c'est un choix de FTCI, pas une obligation.
Toute adresse dans le mme sous rseau aurait aussi bien fait l'affaire)..
Quelle est la plus grande adresse possible dans ce sous rseau?
C'est SubnetID+!SubnetMask-1
Pourquoi?
!SubnetMask-1 correspond la plus grande HostID possible dans ce sous rseau,
!SubnetMask correspondant l'adresse de l'hte de broadcast
SubnetID:
0011 1110 . 1010 0001 . 0110 0000 . 0000 000
Masque de sous rseau-1:
0000 0000 . 0000 0000 . 0000 0111 . 1111 1110
Plus grande adresse possible: (+)
0011 1110 . 1010 0001 . 0110 0111 . 1111 1110
donc en dcimal:
62.161.103.254
L'opration est une somme binaire. Le rsultat tait prvisible, une fois encore, en regardant
les informations du client DHCP. En effet; l'adresse de broadcast pour le sous rseau tudi
est 62.161.103.255 (HostID avec tous les bits 1).
C'est bien, n'est-ce pas, de pouvoir donner une explication rationnelle tous ces paramtres IP
plus ou moins obscurs premire vue
Les sockets
Une oreille dans chaque port
Adresse, port et socket
Imaginons la situation suivante (frquente sur des petits rseaux):
Un seul serveur (entendez par l une machine) hberge plusieurs services bien connus des
internautes:
Un serveur web (HTTP)
Un serveur de fichiers (FTP)
Un serveur de messagerie (SMTP et POP3)
Tous ces services cohabitent donc sur un hte disposant d'une seule adresse IP, disons
62.161.120.45 (pour fixer les ides) et fonctionnent sans problmes. Vous tes-vous pos la
question de savoir par quel prodige tout ne se mlange pas? Comment se fait-il que le
navigateur du client qui invoque l'URL http://62.161.120.45/default.html voit bien
arriver la page demande, alors que le client qui se connecte sur le serveur POP 62.161.120.45
va pouvoir y rcuprer son courrier?
Plus fort encore, pendant qu'un client consulte la page
http://62.161.120.45/default.html, un autre consulte
http://62.161.120.45/sommaire.html. Et chaque client reoit bien la page qu'il
demande
Grce aux ports! Les ports sont des numros d'identification qui permettent de spcifier le
service concern. Ce numro de port est crit sur 2 octets, ce qui donne 65535 ports possibles
(parce que le port 0 n'est, ma connaissance, pas utilis).
La combinaison adresse IP:numro de port constitue ce que l'on appelle une socket
(qui veut dire peu prs connecteur en anglais).
Une socket identifie pleinement le service qui est concern sur une machine donne.
Le serveur et le client
Les serveurs ont une fonction particulire: Ils doivent envoyer des informations pertinentes
aux clients qui en rclament. Comme un serveur ne convient pas d'un rendez-vous avec le
client, il doit rester attentif en permanence pour ne pas risquer de rater une question. Pour ce
faire, on y installe des daemons, petits programmes qui tournent en tche de fond et qui
coutent continuellement sur un numro de port donn. Il y a des conventions pour attribuer
ces ports sur des services connus, par exemple le port 80 pour HTTP, le port 110 pour POP3,
le port 21 pour FTP. Il faut qu'il y ait des conventions de ce genre pour que les clients puissent
atteindre ces services.
Lorsque l'on crit http://62.161.120.45, on ne spcifie pas de port; sous-entendu, il s'agit
du port 80 parce que l'on invoque un service HTTP. Il serait possible d'crire:
http://62.161.120.45:80 Ici, on spcifie le port. Certaines protections triviales consistent
justement forcer un service ne pas employer le port standard. Un administrateur pourrait
dcider de mettre son serveur HTTP l'coute du port 88. Dans ce cas, si l'utilisateur n'est pas
au courant de cette particularit, il ne pourra pas accder ce serveur (sauf s'il dispose d'un
scanner de ports et qu'il dcouvre la supercherie).

En revanche, le client qui met la requte ne dispose pas de port d'coute attitr. Ce n'est pas
un serveur, c'est un client; il n'a donc rien couter d'autre que les rponses ses questions. Il
faut donc, lorsqu'il envoie sa requte, qu'il spcifie sur quel port il va couter la rponse, de
manire ce que le serveur puisse construire un socket efficace pour ladite rponse.
Vous tes-vous demand par quel miracle, si vous ouvrez deux fois votre navigateur pour
afficher deux pages diffrentes sur le mme serveur, les informations ne se mlangent pas?
C'est parce que les deux sessions du navigateur indiquent des ports de rponse diffrents!
C'est le NOS du client qui choisit les ports de rponse en fonction de ceux qui sont
disponibles sur la machine.

Un port d'coute est une porte ouverte
Lorsqu'un port est ouvert l'coute sur un service serveur, c'est une porte ouverte par laquelle
un intrus peut entrer.
Ce dtail nous mne directement aux problmes de scurit et d'intrusions. Mais ne
mlangeons pas tout, cette affaire est traite ailleurs sur ce site.
Quelques infos supplmentaires
NAT, PAT et autres mascarades
Nous y reviendrons plus loin dans le chapitre consacr au routage, mais tant qu'on est dans les
ports, autant dire quelques mots de ces techniques.
NAT (Network Address Translation) est une facult dont dispose un routeur, de
modifier les adresses IP des metteurs lors du passage des datagrammes entre deux
rseaux. Ca ne nous intresse pas directement ici.
PAT (Port Access Translation) est une fonction qui permet de changer au passage le
numro de port dans le datagramme. Ca peut paratre tordu, mais il existe une foule
d'applications possibles pour cette proprit.
MASQUERADE, qui est un mlange des deux (NAT, PAT) est une fonction trs
intressante pour connecter tout un rseau local construit sur une classe IP prive
l'Internet. La passerelle utilisera son IP publique (ct Internet) pour faire du NAT sur
les adresses prives du rseau local et fera galement du PAT pour savoir qui il
faudra transmettre les rponses.
o Le principe de fonctionnement et la faon de construire une telle passerelle
sont dcrits dans la chapitre MASQUERADE, ailleurs sur ce site.
Mode connect
La connexion TCP
Le mode connect de TCP n'est pas d'une grande simplicit. Il est conu pour tre robuste et
tient compte des possibilits et des risques des grands rseaux maills, savoir:
Les paquets peuvent circuler de la source vers la cible par des chemins diffrents (dans
ce cas, ils arrivent sur la cible dans le dsordre),
Il peut s'en perdre en route,
Certains paquets peuvent arriver corrompus
etc..
TCP en revanche ne prend hlas pas en compte, ou trs peu, les problmes de piratage.
L'exemple est pris sur mon rseau local, mais le principe reste rigoureusement le mme sur
l'Internet. La manipulation sur le rseau local m'vite d'avoir faire un filtrage plus ou moins
pnible.
La squence en gros
No. Time Source Destination Proto Info
1 0.000000 00:20:18:b9:49:37 ff:ff:ff:ff:ff:ff ARP Who has
192.168.0.250? Tell 192.168.0.10
2 0.000277 00:20:18:61:90:e3 00:20:18:b9:49:37 ARP 192.168.0.250 is
at 00:20:18:61:90:e3
3 0.000474 chris.maison.mrs gateway1.maison.mrs TCP 1927 > pop3 [SYN]
4 0.000885 gateway1.maison.mrs chris.maison.mrs TCP pop3 > 1927 [SYN,
ACK]
5 0.001111 chris.maison.mrs gateway1.maison.mrs TCP 1927 > pop3 [ACK]
6 0.049836 gateway1.maison.mrs chris.maison.mrs POP Response: +OK
7 0.050586 chris.maison.mrs gateway1.maison.mrs POP Request: USER
chris
8 0.050998 gateway1.maison.mrs chris.maison.mrs TCP pop3 > 1927 [ACK]
9 0.051511 gateway1.maison.mrs chris.maison.mrs POP Response: +OK
10 0.051979 chris.maison.mrs gateway1.maison.mrs POP Request: PASS
babaorum
11 0.060769 gateway1.maison.mrs chris.maison.mrs TCP pop3 > 1927 [ACK]
12 0.159888 gateway1.maison.mrs chris.maison.mrs POP Response: +OK
Mailbox open, 0 messages
13 0.160799 chris.maison.mrs gateway1.maison.mrs POP Request: STAT
14 0.161552 gateway1.maison.mrs chris.maison.mrs POP Response: +OK 0 0
15 0.162801 chris.maison.mrs gateway1.maison.mrs POP Request: QUIT
16 0.167987 gateway1.maison.mrs chris.maison.mrs POP Response: +OK
Sayonara
17 0.168562 chris.maison.mrs gateway1.maison.mrs TCP 1927 > pop3 [FIN,
ACK]
18 0.168957 gateway1.maison.mrs chris.maison.mrs TCP pop3 > 1927 [ACK]
19 0.169465 gateway1.maison.mrs chris.maison.mrs TCP pop3 > 1927 [FIN,
ACK]
20 0.169698 chris.maison.mrs gateway1.maison.mrs TCP 1927 > pop3 [ACK]
Pas moins de 20 trames, pour constater qu'il n'y a pas de nouveau courrier!
TCP en dtail
Un petit coup d'ARP...
Les squences 1 et 2 ne sont pas inintressantes, bien que ne faisant pas directement partie du
protocole TCP. C'est de l'ARP, a vient de la couche basse d'Ethernet,
Trame 1:
Mon poste n'a pas en mmoire la correspondance MAC Address / IP pour le serveur. Il
pose donc la question sur un broadcast ARP:
A qui appartient l'adresse IP 192.168.0.250 (le serveur)? rpondez 192.168.0.10
(mon poste).
Trame 2:
Le serveur rpond:
192.168.0.250 la MAC Address:00:20:18:61:90:e3
Si, sans trop attendre, je lance la commande ARP sur mon poste, voici le rsultat:
E:\> arp -a

Interface : 192.168.0.10 on Interface 0x4000003
Adresse Internet Adresse physique Type
192.168.0.250 00-20-18-61-90-e3 dynamique**
Au bout d'un certain temps sans servir, cette ligne sera efface de la mmoire. Rappelons
qu' l'intrieur d'un rseau, la couche d'accs physique (la plus basse du modle DOD) utilise
exclusivement les adresses MAC
Et la connexion TCP
Etablissement de la connexion
Accrochez-vous, c'est un peu compliqu :)
Il faut d'abord savoir que les connexions TCP mettent en uvre deux pointeurs de 32 bits,
respectivement appels:
Sequence number
Acknowledgment number
Ces deux pointeurs permettent le suivi des paquets:
L'accus rception pour la source pour chaque paquet mis.
La remise en ordre des paquets reus sur la cible.
D'autres pointeurs permettent galement de fiabiliser la connexion, comme le checksum.
Nous n'allons pas rentrer dans tous les dtails, d'autres sites sur l'Internet le font dj trs bien.
Le point particulier des numros de squence et d'acquittement va en revanche tre regard de
prs, parce qu'il est utilis pour une attaque particulirement redoutable: le spoofing .
Par ailleurs, un ensemble de flags (drapeaux, bits significatifs d'un tat particulier) permet
de donner des informations sur la nature du paquet.
Voyons ce que les livres disent:
L'tablissement d'une connexion se fait en trois temps:

1 2 3
Le client envoie une squence de
synchronisation, avec un numro de
Le serveur rpond par une
acceptation dans laquelle
Le client acquitte la rponse
en envoyant:
squence. Le Flag SYN est
positionn
il renvoie:
- un numro
d'acquittement gal au
numro de squence qu'il
a reu+1
- un numro de squence
les flags SYN et ACK
sont positionns.
- un numro d'acquittement
gal au numro de squence
envoy par le serveur +1
- un numro de squence
gal au numro
d'acquittement envoy par le
serveur
Mais voyons cela sur l'exemple::
Frame 3 (62 on wire, 62 captured)
Arrival Time: Oct 12, 2000 11:19:15.3756
Time delta from previous packet: 0.000197 seconds
Frame Number: 3
Packet Length: 62 bytes
Capture Length: 62 bytes
Ethernet II
Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
*** //Au niveau Ethernet, nous trouvons les deux adresses MAC
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 48
Identification: 0x7624
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: TCP (0x06)
*** C'est bien un protocole TCP
Header checksum: 0x024f (correct)
Source: chris.maison.mrs (192.168.0.10)
Destination: gateway1.maison.mrs (192.168.0.250)
Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110)
Source port: 1927 (1927)
*** Le port du client (l'metteur de cette trame)
Destination port: pop3 (110)
*** Le port de destination (110 pour POP3)
Sequence number: 3662573346
*** Et un numro de squence ( mmoriser pour la suite).
Header length: 28 bytes
Flags: 0x0002 (SYN)
..0. .... = Urgent: Not set
...0 .... = Acknowledgment: Not set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..1. = Syn: Set
*** C'est bien une requte SYN
.... ...0 = Fin: Not set
Window size: 16384
Checksum: 0x6f64
Options: (8 bytes)
Maximum segment size: 1460 bytes
NOP
NOP
SACK permitted
La seconde doit tre la rponse du serveur POP. Normalement, c'est un ACK
(Acknowledgment, Acceptation de la synchronisation du client, suivi d'une demande de
synchronisation du numro de squence du serveur), c'est ce que disent les livres. Voyons a :
Frame 4 (62 on wire, 62 captured)
Arrival Time: Oct 12, 2000 11:19:15.3760
Time delta from previous packet: 0.000411 seconds
Frame Number: 4
Packet Length: 62 bytes
Capture Length: 62 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37) *** Le client
Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3) *** Le serveur
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 48
Identification: 0x088a
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: TCP (0x06)
Header checksum: 0xafe9 (correct)
Source: gateway1.maison.mrs (192.168.0.250)
Destination: chris.maison.mrs (192.168.0.10)
Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927)
Source port: pop3 (110)
*** Le serveur continue sur le port 110
Destination port: 1927 (1927)
*** Et rpond bien sur le port ouvert par le client
Sequence number: 4089248825
*** Le numro de squence propos par le serveur
Acknowledgement number: 3662573347
*** Rappelez-vous, le n de squence du client tait 3662573346
*** Le numro d'acquittement est 3662573346 + 1
Header length: 28 bytes
Flags: 0x0012 (SYN, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
*** Nous avons bien un acquittement de la part du serveur
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..1. = Syn: Set
*** Et une demande de synchronisation (sur le numro de squence
4089248825)
.... ...0 = Fin: Not set
Window size: 32120
Checksum: 0x41e4
Options: (8 bytes)
Maximum segment size: 1460 bytes
NOP
NOP
SACK permitted
Ici, nous devrions trouver un acquittement du client sur le numro de squence 4089248825
Frame 5 (60 on wire, 60 captured)
Arrival Time: Oct 12, 2000 11:19:15.3762
Time delta from previous packet: 0.000226 seconds
Frame Number: 5
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
*** C'est bien le client qui rpond au serveur
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 40
Identification: 0x7625
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: TCP (0x06)
Header checksum: 0x0256 (correct)
Source: chris.maison.mrs (192.168.0.10)
Destination: gateway1.maison.mrs (192.168.0.250)
Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110)
Source port: 1927 (1927)
Destination port: pop3 (110)
*** Les ports ne sont toujours pas changs
Sequence number: 3662573347
*** souvenez-vous: Acknowledgement number: 3662573347
Acknowledgement number: 4089248826
*** comme tout l'heure, 4089248825 + 1
Header length: 20 bytes
Flags: 0x0010 (ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
*** Il n'y a bien qu'un acquittement.
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 17520
Checksum: 0xa7b0
C'est bien comme dans les livres (ouf!)
La transmission des donnes
Que disent les livres? Ils disent que maintenant, les changes de donnes vont se faire.
Le flag PUSH sert signaler TCP qu'il doit transmettre les donnes reues aux
couches suprieures.
Chaque paquet aura:
o Pour numro d'acquittement le numro de squence du dernier paquet reu,
augment du nombre d'octets de donnes qu'il contenait.
o Pour numro de squence le numro d'acquittement du dernier paquet reu
Sur le protocole POP3, c'est le serveur qui va envoyer un message de bienvenue. La trame qui
suit doit donc provenir du serveur, elle doit contenir:
Un acquittement du numro de squence de la trame prcdente:3662573347, puisque
la trame 5 ne contenant pas de donnes.
Un numro de squence gal au numro d'acquittement de la trame
prcdente:4089248826
Frame 6 (103 on wire, 103 captured)
Arrival Time: Oct 12, 2000 11:19:15.4249
Time delta from previous packet: 0.048725 seconds
Frame Number: 6
Packet Length: 103 bytes
Capture Length: 103 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 89
Identification: 0x088b
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: TCP (0x06)
Header checksum: 0xafbf (correct)
Source: gateway1.maison.mrs (192.168.0.250)
Destination: chris.maison.mrs (192.168.0.10)
*** C'est bien le serveur qui rpond.
Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927)
Source port: pop3 (110)
Destination port: 1927 (1927)
Sequence number: 4089248826
Acknowledgement number: 3662573347
*** Nous partons bien sur les numros de squence et d'acquittement
dfinis
Header length: 20 bytes
Flags: 0x0018 (PSH, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
*** L'acquittement au paquet prcdent est donn
.... 1... = Push: Set
*** Il va y avoir des donnes...
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 32120
Checksum: 0xa343
Post Office Protocol
Response: +OK
Response Arg: POP3 gateway1.maison.mrs v7.64 server ready
*** Et voil les donnes.
Pour le moment, tout se passe encore conformment aux critures. Voyons la suite.
Le paquet prcdent contient les donnes:
+OK POP3 gateway1.maison.mrs v7.64 server ready
Ceci nous fait 47 octets (Il ne faut pas oublier de compter les espaces, ce sont des caractres
comme les autres). Il ne faut pas oublier non plus qu'une ligne de texte se termine par les
caractres CR (retour la ligne) et LF (saut de ligne), ce qui nous fait deux caractres de plus,
soit au total 49 octets.
Normalement:
Le numro d'acquittement du prochain paquet devrait donc tre
4089248826+49=4089248875 (squence + 49)
Le numro de squence devrait tre 3662573347
Le client doit maintenant envoyer son login. Nous devrions donc trouver un PUSH et un ACK
.
Frame 7 (66 on wire, 66 captured)
Arrival Time: Oct 12, 2000 11:19:15.4257
Time delta from previous packet: 0.000750 seconds
Frame Number: 7
Packet Length: 66 bytes
Capture Length: 66 bytes
Ethernet II
Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 52
Identification: 0x7626
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: TCP (0x06)
Header checksum: 0x0249 (correct)
Source: chris.maison.mrs (192.168.0.10)
Destination: gateway1.maison.mrs (192.168.0.250)
*** C'est bien le client qui s'adresse au serveur
Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110)
Source port: 1927 (1927)
Destination port: pop3 (110)
Sequence number: 3662573347
*** Oui, c'est l'Acknowledgment number du paquet prcdent
Acknowledgement number: 4089248875
*** OUI!!! C'est le Sequence number du paquet prcdent augment de 49
Header length: 20 bytes
Flags: 0x0018 (PSH, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
*** voici l'ACK...
.... 1... = Push: Set
*** et voil le PUSH, donc il y aura des donnes
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 17471
Checksum: 0x0da4
Post Office Protocol
Request: USER
Request Arg: chris
*** Ce sont les donnes.
Tout s'est pass comme prvu.
Bien. Comme nous connaissons par cur le protocole POP, nous savons que le serveur va
envoyer la rponse +OK et une invite communiquer le mot de passe.
Nous devrions trouver:
Un ACK et un PUSH,
Un Sequence number gal l'Acknowledgment number du paquet prcdent
Un Acknowledgment number gal au Sequence number du paquet prcdent +12
(comptez les octets de donnes du paquet prcdent)..
Frame 8 (60 on wire, 60 captured)
Arrival Time: Oct 12, 2000 11:19:15.4261
Time delta from previous packet: 0.000412 seconds
Frame Number: 8
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 40
Identification: 0x088c
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: TCP (0x06)
Header checksum: 0xafef (correct)
Source: gateway1.maison.mrs (192.168.0.250)
Destination: chris.maison.mrs (192.168.0.10)
*** C'est bien le serveur qui rpond.
Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927)
Source port: pop3 (110)
Destination port: 1927 (1927)
Sequence number: 4089248875
Acknowledgement number: 3662573359 =3662573347+12. Toujours normal, 12
octets de donnes dans le paquet prcdent.
Header length: 20 bytes
Flags: 0x0010 (ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
*** Voici ACK...
.... 0... = Push: Not set
*** Mais il n'y a pas de PUSH, donc pas de donnes?
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 32120
Checksum: 0x6e6b
Ben non, il n'y a pas eu de donnes. Comme on est parfaitement certain que le serveur doit en
envoyer (parce que l'on connat le protocole POP3 par cur), c'est que c'est encore le serveur
qui va parler
Frame 9 (95 on wire, 95 captured)
Arrival Time: Oct 12, 2000 11:19:15.4266
Time delta from previous packet: 0.000513 seconds
Frame Number: 9
Packet Length: 95 bytes
Capture Length: 95 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 81
Identification: 0x088d
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: TCP (0x06)
Header checksum: 0xafc5 (correct)
Source: gateway1.maison.mrs (192.168.0.250)
Destination: chris.maison.mrs (192.168.0.10)
*** Oui, c'est encore le serveur
Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927)
Source port: pop3 (110)
Destination port: 1927 (1927)
Sequence number: 4089248875
Acknowledgement number: 3662573359
*** Et les numros sont identiques au paquet prcdent (normal, pas de
donnes dans le paquet prcdent)
Header length: 20 bytes
Flags: 0x0018 (PSH, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 1... = Push: Set
*** Ce coup-ci, il y a des donnes.
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 32120
Checksum: 0x6428
Post Office Protocol
Response: +OK
Response Arg: User name accepted, password please
*** Les voil!
Et voil. Le client va envoyer son mot de passe, le dialogue continue.
Frame 10 (68 on wire, 68 captured)
Arrival Time: Oct 12, 2000 11:19:15.4271
Time delta from previous packet: 0.000468 seconds
Frame Number: 10
Packet Length: 68 bytes
Capture Length: 68 bytes
Ethernet II
Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 54
Identification: 0x7627
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: TCP (0x06)
Header checksum: 0x0246 (correct)
Source: chris.maison.mrs (192.168.0.10)
Destination: gateway1.maison.mrs (192.168.0.250)

*** C'est bien le client
Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110)
Source port: 1927 (1927)
Destination port: pop3 (110)
Sequence number: 3662573359
*** = Acknowledgement number prcdent
Acknowledgement number: 4089248916
*** = Sequence number prcdent augment de 41, nous avons compris le
principe
Header length: 20 bytes
Flags: 0x0018 (PSH, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 1... = Push: Set
*** Il va y avoir des donnes.
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 17430
Checksum: 0x8f50
Post Office Protocol
Request: PASS
Request Arg: epikoi

*** M**** alors! le mot de passe circule en clair !
rassurez-vous, ce n'est pas le bon que vous lisez :-)
Mais le mot de passe circule vraiment en clair. Stupfiant non?//**

Bien. Il ne reste plus que 10 trames regarder mais maintenant, a va devenir monotone. Je
vous laisse les analyser tout seul. Je vous conseille tout de mme les trames 17, 18 19 et 20
qui servent fermer proprement la connexion. C'est une procdure importante qui permet au
serveur d'oublier cette connexion.
Frame 11 (60 on wire, 60 captured)
Arrival Time: Oct 12, 2000 11:19:15.4359
Time delta from previous packet: 0.008790 seconds
Frame Number: 11
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 40
Identification: 0x088e
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: TCP (0x06)
Header checksum: 0xafed (correct)
Source: gateway1.maison.mrs (192.168.0.250)
Destination: chris.maison.mrs (192.168.0.10)
Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927)
Source port: pop3 (110)
Destination port: 1927 (1927)
Sequence number: 4089248916
Acknowledgement number: 3662573373
Header length: 20 bytes
Flags: 0x0010 (ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 32120
Checksum: 0x6e34

Frame 12 (84 on wire, 84 captured)
Arrival Time: Oct 12, 2000 11:19:15.5350
Time delta from previous packet: 0.099119 seconds
Frame Number: 12
Packet Length: 84 bytes
Capture Length: 84 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 70
Identification: 0x088f
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: TCP (0x06)
Header checksum: 0xafce (correct)
Source: gateway1.maison.mrs (192.168.0.250)
Destination: chris.maison.mrs (192.168.0.10)
Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927)
Source port: pop3 (110)
Destination port: 1927 (1927)
Sequence number: 4089248916
Acknowledgement number: 3662573373
Header length: 20 bytes
Flags: 0x0018 (PSH, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 1... = Push: Set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 32120
Checksum: 0x8064
Post Office Protocol
Response: +OK
Response Arg: Mailbox open, 0 messages

Frame 13 (60 on wire, 60 captured)
Arrival Time: Oct 12, 2000 11:19:15.5359
Time delta from previous packet: 0.000911 seconds
Frame Number: 13
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 46
Identification: 0x7628
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: TCP (0x06)
Header checksum: 0x024d (correct)
Source: chris.maison.mrs (192.168.0.10)
Destination: gateway1.maison.mrs (192.168.0.250)
Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110)
Source port: 1927 (1927)
Destination port: pop3 (110)
Sequence number: 3662573373
Acknowledgement number: 4089248946
Header length: 20 bytes
Flags: 0x0018 (PSH, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 1... = Push: Set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 17400
Checksum: 0x05d6
Post Office Protocol
Request: STAT

Frame 14 (63 on wire, 63 captured)
Arrival Time: Oct 12, 2000 11:19:15.5366
Time delta from previous packet: 0.000753 seconds
Frame Number: 14
Packet Length: 63 bytes
Capture Length: 63 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 49
Identification: 0x0890
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: TCP (0x06)
Header checksum: 0xafe2 (correct)
Source: gateway1.maison.mrs (192.168.0.250)
Destination: chris.maison.mrs (192.168.0.10)
Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927)
Source port: pop3 (110)
Destination port: 1927 (1927)
Sequence number: 4089248946
Acknowledgement number: 3662573379
Header length: 20 bytes
Flags: 0x0018 (PSH, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 1... = Push: Set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 32120
Checksum: 0x8d62
Post Office Protocol
Response: +OK
Response Arg: 0 0

Frame 15 (60 on wire, 60 captured)
Arrival Time: Oct 12, 2000 11:19:15.5379
Time delta from previous packet: 0.001249 seconds
Frame Number: 15
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 46
Identification: 0x7629
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: TCP (0x06)
Header checksum: 0x024c (correct)
Source: chris.maison.mrs (192.168.0.10)
Destination: gateway1.maison.mrs (192.168.0.250)
Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110)
Source port: 1927 (1927)
Destination port: pop3 (110)
Sequence number: 3662573379
Acknowledgement number: 4089248955
Header length: 20 bytes
Flags: 0x0018 (PSH, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 1... = Push: Set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 17391
Checksum: 0xffce
Post Office Protocol
Request: QUIT

Frame 16 (68 on wire, 68 captured)
Arrival Time: Oct 12, 2000 11:19:15.5431
Time delta from previous packet: 0.005186 seconds
Frame Number: 16
Packet Length: 68 bytes
Capture Length: 68 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 54
Identification: 0x0891
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: TCP (0x06)
Header checksum: 0xafdc (correct)
Source: gateway1.maison.mrs (192.168.0.250)
Destination: chris.maison.mrs (192.168.0.10)
Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927)
Source port: pop3 (110)
Destination port: 1927 (1927)
Sequence number: 4089248955
Acknowledgement number: 3662573385
Header length: 20 bytes
Flags: 0x0018 (PSH, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 1... = Push: Set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 32120
Checksum: 0x3cde
Post Office Protocol
Response: +OK
Response Arg: Sayonara

Frame 17 (60 on wire, 60 captured)
Arrival Time: Oct 12, 2000 11:19:15.5437
Time delta from previous packet: 0.000575 seconds
Frame Number: 17
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 40
Identification: 0x762a
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: TCP (0x06)
Header checksum: 0x0251 (correct)
Source: chris.maison.mrs (192.168.0.10)
Destination: gateway1.maison.mrs (192.168.0.250)
Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110)
Source port: 1927 (1927)
Destination port: pop3 (110)
Sequence number: 3662573385
Acknowledgement number: 4089248969
Header length: 20 bytes
Flags: 0x0011 (FIN, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...1 = Fin: Set
Window size: 17377
Checksum: 0xa789

Frame 18 (60 on wire, 60 captured)
Arrival Time: Oct 12, 2000 11:19:15.5441
Time delta from previous packet: 0.000395 seconds
Frame Number: 18
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 40
Identification: 0x0892
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: TCP (0x06)
Header checksum: 0xafe9 (correct)
Source: gateway1.maison.mrs (192.168.0.250)
Destination: chris.maison.mrs (192.168.0.10)
Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927)
Source port: pop3 (110)
Destination port: 1927 (1927)
Sequence number: 4089248969
Acknowledgement number: 3662573386
Header length: 20 bytes
Flags: 0x0010 (ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 32120
Checksum: 0x6df2

Frame 19 (60 on wire, 60 captured)
Arrival Time: Oct 12, 2000 11:19:15.5446
Time delta from previous packet: 0.000508 seconds
Frame Number: 19
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 40
Identification: 0x0893
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: TCP (0x06)
Header checksum: 0xafe8 (correct)
Source: gateway1.maison.mrs (192.168.0.250)
Destination: chris.maison.mrs (192.168.0.10)
Transmission Control Protocol, Src Port: pop3 (110), Dst Port: 1927 (1927)
Source port: pop3 (110)
Destination port: 1927 (1927)
Sequence number: 4089248969
Acknowledgement number: 3662573386
Header length: 20 bytes
Flags: 0x0011 (FIN, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...1 = Fin: Set
Window size: 32120
Checksum: 0x6df1

Frame 20 (60 on wire, 60 captured)
Arrival Time: Oct 12, 2000 11:19:15.5448
Time delta from previous packet: 0.000233 seconds
Frame Number: 20
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..00 = Currently Unused: 0
Total Length: 40
Identification: 0x762b
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: TCP (0x06)
Header checksum: 0x0250 (correct)
Source: chris.maison.mrs (192.168.0.10)
Destination: gateway1.maison.mrs (192.168.0.250)
Transmission Control Protocol, Src Port: 1927 (1927), Dst Port: pop3 (110)
Source port: 1927 (1927)
Destination port: pop3 (110)
Sequence number: 3662573386
Acknowledgement number: 4089248970
Header length: 20 bytes
Flags: 0x0010 (ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 17377
Checksum: 0xa788
Ce qu'il est intressant d'tudier, c'est le mcanisme des numros de squence et
d'acquittement. Parce que celui qui va tre capable de prdire la squence de ces numros, s'il
dispose d'outils qui savent bricoler les trames, pourra se faire passer pour un autre dans un
dialogue TCP existant. C'est ce qu'on appelle le spoofing, mthode de piratage dlicate
mais dangereuse.
Mode non connect
Protocole UDP
User Datagram Protocol. Ici, la discussion se fait sans trop de prcautions. Le principe est le
suivant:
Celui qui doit parler s'adresse son interlocuteur, la plupart du temps en posant une
question, directement, sans vrifier que l'interlocuteur est prsent et peut rpondre.
Si la rponse ne vient pas, l'initiateur dcidera de la stratgie appliquer. En gnral, il
n'y a pas trop de solutions:
o Rpter la question au mme interlocuteur
o Rpter la question un autre interlocuteur (C'est le cas par exemple des
rsolutions de noms)
o Abandonner et arrter le dialogue.
Parmi les usages les plus connus du mode sans connexion (UDP), notons:
La rsolution des noms ou la rsolution inverse des adresses (DNS)
La recherche d'une adresse IP dynamique (DHCP)
La plupart des jeux en rseau.
En gnral, partout o le paquet de donnes transmettre peut tenir dans un seul datagramme.
A titre d'exemple, nous allons regarder a sur quelque chose de nouveau: le protocole NTP
(Network Time Protocol). C'est un protocole applicatif qui permet un hte de synchroniser
son horloge sur un serveur de temps.
L'exemple est pris sous linux par la commande:
#ntpdate ntp0.oleane.net
Comme d'habitude, le sniffer ne perd rien de la conversation
No. Source Destination Protocol Info
16 193.248.36.34 ntp0.oleane.net NTP NTP
17 ntp0.oleane.net 193.248.36.34 NTP NTP
18 193.248.36.34 ntp0.oleane.net NTP NTP
19 ntp0.oleane.net 193.248.36.34 NTP NTP
20 193.248.36.34 ntp0.oleane.net NTP NTP
21 ntp0.oleane.net 193.248.36.34 NTP NTP
22 193.248.36.34 ntp0.oleane.net NTP NTP
23 ntp0.oleane.net 193.248.36.34 NTP NTP
A premire vue, nous constatons un dialogue entre le client (193.248.36.34) et le serveur
ntp0.oleane.net.
L'objectif est ici, non pas de dcortiquer le protocole NTP, encore que ce ne soit pas sans
intrt, mais d'observer un dialogue UDP. Voyons donc le dtail:
Le surlignage jaune reprsente le protocole, la source et la destination, le sur lignage bleu
reprsente les donnes transmises, dans l'organisation dcrite par le protocole NTP
Frame 16 (86 on wire, 86 captured)
...
Protocol: UDP (0x11)
Header checksum: 0x40a6 (correct)
Source: Mix-Marseille-107-1-34.abo.wanadoo.fr (193.248.36.34)
Destination: ntp0.oleane.net (194.2.0.28)
User Datagram Protocol
Source port: ntp (123)
Destination port: ntp (123)
Length: 56
Checksum: 0x5b48
Network Time Protocol
Flags: DB
11.. .... = Leap Indicator: alarm condition (clock not
synchronized)
..01 1... = Version number: NTP Version 3
.... .011 = Mode: client
Peer Clock Stratum: unspecified or unavailable (0)
Peer Pooling Interval: 4 (16 sec)
Peer Clock Precision: 0,015625 sec
Root Delay: 1,0000 sec
Clock Dispersion: 1,0000 sec
Reference Clock ID: Unindentified reference source ''
Reference Clock Update Time: NULL
Originate Time Stamp: NULL
Receive Time Stamp: NULL
Transmit Time Stamp: 2001-06-13 12:36:30,1227 UTC

Frame 17 (76 on wire, 76 captured)
...
Protocol: UDP (0x11)
Header checksum: 0xa111 (correct)
Source: ntp0.oleane.net (194.2.0.28)
Destination: Mix-Marseille-107-1-34.abo.wanadoo.fr (193.248.36.34)
User Datagram Protocol
Source port: ntp (123)
Destination port: ntp (123)
Length: 56
Checksum: 0xa367
Network Time Protocol
Flags: 1C
00.. .... = Leap Indicator: no warning
..01 1... = Version number: NTP Version 3
.... .100 = Mode: server
Peer Clock Stratum: secondary reference (2)
Peer Pooling Interval: 4 (16 sec)
Peer Clock Precision: 0,000004 sec
Root Delay: 0,0130 sec
Clock Dispersion: 0,1491 sec
Reference Clock ID: 49.110.238.145
Reference Clock Update Time: 2001-06-13 12:33:43,8840 UTC
Originate Time Stamp: 2001-06-13 12:36:30,1227 UTC
Receive Time Stamp: 2001-06-13 12:35:18,4244 UTC
Transmit Time Stamp: 2001-06-13 12:35:18,4246 UTC

Frame 18 (86 on wire, 86 captured)
...
Protocol: UDP (0x11)
Header checksum: 0x40a5 (correct)
Source: Mix-Marseille-107-1-34.abo.wanadoo.fr (193.248.36.34)
Destination: ntp0.oleane.net (194.2.0.28)
User Datagram Protocol
Source port: ntp (123)
Destination port: ntp (123)
Length: 56
Checksum: 0x5a96
Network Time Protocol
Flags: DB
11.. .... = Leap Indicator: alarm condition (clock not
synchronized)
..01 1... = Version number: NTP Version 3
.... .011 = Mode: client
Peer Clock Stratum: unspecified or unavailable (0)
Peer Pooling Interval: 4 (16 sec)
Peer Clock Precision: 0,015625 sec
Root Delay: 1,0000 sec
Clock Dispersion: 1,0000 sec
Reference Clock ID: Unindentified reference source ''
Reference Clock Update Time: NULL
Originate Time Stamp: NULL
Receive Time Stamp: NULL
Transmit Time Stamp: 2001-06-13 12:36:30,1879 UTC

Frame 19 (76 on wire, 76 captured)
...
Protocol: UDP (0x11)
Header checksum: 0xa10d (correct)
Source: ntp0.oleane.net (194.2.0.28)
Destination: Mix-Marseille-107-1-34.abo.wanadoo.fr (193.248.36.34)
User Datagram Protocol
Source port: ntp (123)
Destination port: ntp (123)
Length: 56
Checksum: 0x66a1
Network Time Protocol
Flags: 1C
00.. .... = Leap Indicator: no warning
..01 1... = Version number: NTP Version 3
.... .100 = Mode: server
Peer Clock Stratum: secondary reference (2)
Peer Pooling Interval: 4 (16 sec)
Peer Clock Precision: 0,000004 sec
Root Delay: 0,0130 sec
Clock Dispersion: 0,1491 sec
Reference Clock ID: 49.110.238.145
Reference Clock Update Time: 2001-06-13 12:33:43,8840 UTC
Originate Time Stamp: 2001-06-13 12:36:30,1879 UTC
Receive Time Stamp: 2001-06-13 12:35:18,5105 UTC
Transmit Time Stamp: 2001-06-13 12:35:18,5106 UTC
Etc
Ce n'est pas ncessaire de voir la suite pour montrer ce qui est important ici. Contrairement
ce qui a t vu en mode connect avec TCP:
Toute la partie synchronisation entre l'hte et le client n'existe pas ici.
Le client pose tout de suite sa question, en fait, ce n'est pas vraiment une question,
le client se contente de dire:
alarm condition (clock not synchronized)
Suivi de quelques indicateurs nuls et de la date UTC dont il dispose.
Le serveur rpond simplement en envoyant son heure UTC et quelques autres
paramtres destins informer sur la prcision de la date qu'il donne.
Ce dialogue va s'arrter lorsque le client estimera qu'il dispose de toutes les
informations ncessaires pour synchroniser son horloge dans de bonnes conditions. (Je
vous laisse tudier le protocole NTP en dtail, si a vous intresse).
Notez que le dialogue s'arrte sans signalisation particulire, ce qui n'est pas le cas en
mode connect o le signal FIN doit tre envoy et confirm.
Notez galement que les informations transmettre sont entirement contenues dans
un seul datagramme. Dans un tel cas, le protocole UDP est tout fait acceptable et
plus lger que le mode connect.
Vous pouvez trouver d'autres exemples de dialogue UDP dans les paragraphes DNS et DHCP
sur ce site.
IP v6
Pourquoi IPv6 ?
IP v4 montre ses limites devant l'accroissement norme de la demande d'adresses sur l'internet
:
Le gaspillage d'adresses induit par la notion de classes a dj t en partie rsolu avec
CIDR, mais ne rpond pas l'accroissement prvisible de la demande ;
l'historique de la distribution des adresses a cr une parcellisation des blocs
d'adressages qui contraint les routeurs avaler des tables de routage interminables, ce
qui ralentit leurs performances et ncessite des ressources matrielles sans cesse
croissantes.
Alors qu'aujourd'hui, en France, environ 50% des foyers sont connects et disposent d'une
seule adresse IPv4, l'avenir laisse imaginer qu'un jour plus ou moins proche, chaque foyer
disposera de plusieurs dizaines d'objets potentiellement connectables l'internet et que les
technologies palliatives telles que NAT ne rpondront plus au besoin.
Les pays mergeants sont de plus en plus demandeurs, non seulement de ressources
nergtiques fossiles, mais aussi d'adresses IP. Pour l'nergie fossile, le problme est dlicat.
Il l'est aussi pour les adresses IP, mais un protocole est plus facile et surtout plus rapide
laborer que du ptrole, du gaz ou du charbon.
Une recherche de solution a t initie en 1990 et a dbouch en 1994 sur le choix d'IPv6. Ce
n'est donc pas proprement parler une nouveaut, bien que ce protocole soit encore en phase
d'exprimentation.
Comment IPv6 ?
Nous allons nous donner comme objectif de raliser un rseau local connect l'internet,
utilisant IPv6 tel que mis disposition par le fournisseur Free. D'autres solutions sont
possibles bien sr.
Ce rseau local est constitu de postes de travail quips de GNU/Linux (Ubuntu Hardy
Heron , Debian Etch ou Lenny ). Une passerelle (Debian Etch) assure le routage NAT
en IPv4 vers l'internet via une FreeBox dont les fonctions de routeur ne sont pas actives.
Nous aurions pu bien videmment choisir l'option de la simplicit, en utilisant tout bonnement
les fonctions de routeur IPv4 de la Freebox, mais o aurait t le plaisir ?
L'objectif est d'arriver ce que chaque station du LAN puisse disposer d'une adresse IPv6
publique et que donc, chaque station puisse accder et tre jointe directement par d'autres
nuds de l'internet.
Comme nous sommes encore loin de disposer d'un internet full IPv6 , il nous faudra
fonctionner en mode hybride, IPv4 avec NAT et IPv6.
Caractristiques gnrales
Il n'est pas ici question de faire un cours complet sur IPv6. Il existe un excellent ouvrage
intitul IPv6 Thorie et Pratique publi et mis en ligne par les ditions O'Reilly. Nous
nous contenterons du strict minimum pour pouvoir pratiquer.
La longueur
Une adresse v6 est crite sur 128 bits, comparer aux 32 bits d'IP v4. Pour donner un ordre de
grandeur la louche , alors que IP v4 fournir environ 4 milliards d'adresses (2 32, soit
environ 4 x 10
9
), IP v6 peut en fournir plus d'un quadrillion de fois autant (2 128 soit environ
3 x 10
38
), permettant ainsi de distribuer un peu plus d'un trilliard d'adresses par mtre carr
Bien sr ces chiffres ne veulent pas dire grand chose, si ce n'est que l'humanit devrait tre
l'abri d'une pnurie d'adresses pour quelques temps.
Nous verrons que comme chaque fois que l'homme a la sensation de disposer d'une
ressource profusion, il s'empresse de la gaspiller. Mais tout de mme l'opulence est telle
qu'elle dpasse les capacits de gaspillage humain.
Le format d'criture
Il n'est plus question ici d'utiliser une criture similaire celle qui est habituellement
employe pour IP v4.
L'criture est dsormais faite en hexadcimal ;
les mots sont constitus de 16 bits ;
ils sont spars par un : .
Exemple :
2a01:05d8:52f3:500d:021b:fcff:fe71:1486
Vous le voyez, c'est quand mme moins lisible que l'IP v4.
Simplifications
Pour simplifier l'criture, dans chaque mot, il est possible d'omettre les zros non
significatifs ( gauche). Ainsi, notre exemple prcdent peut s'crire :
2a01:5d8:52f3:500d:21b:fcff:fe71:1486
Bien sr, il peut se faire que l'on ait des adresses contenant des mots entiers gaux 0, comme
par exemple :
2a01:05d8:52f3:500d:0000:0000:0000:0001
Dans un tel cas, nous pouvons bien sr simplifier comme suit :
2a01:5d8:52f3:500d:0:0:0:1
ce qui n'est dj pas si mal, mais nous pouvons aller encore plus loin en remplaant une srie
de mots nuls par :: . Ceci nous donne :
2a01:5d8:52f3:500d::1
Pour des raisons assez videntes, ce dernier type de simplification ne peut tre utilis qu'une
seule fois dans l'adresse. Si nous crivions :
2a01::12::1
seriez-vous capables de dire combien il y a de mots nuls dans la premire simplification et
combien il en reste dans la seconde ?
Exercice inverse : nous avons l'adresse (trs simplifie)
2a01:5d8::1
Comme nous savons qu'il doit y avoir 8 mots au total et qu'il n'y en a que 3 de significatifs,
c'est qu'il y en a 5 qui sont nuls :
2a01:5d8:0:0:0:0:0:1
et donc finalement :
2a01:05d8:0000:0000:0000:0000:0000:0001
sans aucune simplification.
Prfixe et jeton
Comme pour IP v4, une adresse v6 donne deux informations :
un identifiant de rseau (prfixe) ;
un identifiant de nud dans le rseau (jeton).
Le prfixe est constitu d'un certain nombre de bits de masque, en partant du poids le plus
fort, exactement comme en notation CIDR avec IP v4. Ainsi, l'adresse note
2a01:5d8:52f3:500d:21b:fcff:fe71:1486/64 indique que les 64 premiers bits seront
communs tous les nuds qui sont dans le mme rseau IP. Autrement dit :
2a01:5d8:52f3:500d::/64 est l'adresse du rseau ;
21b:fcff:fe71:1486 (le jeton) est reprsentatif du nud dans ce rseau.
Notez que dans cet exemple, qui n'est pas du tout imaginaire, l'administrateur dispose de 64
bits pour identifier les machines de son rseau, ce qui fait quand mme pas mal de nuds
adressables.
Adressage(s) d'un nud
Avec IP v4, attribuer plusieurs adresses IP un mme nud n'est pas courant. C'est en
revanche tout fait banal avec IP v6. Cette dmarche pourra vous paraitre curieuse, mais c'est
parce que vous ne savez pas encore tout de ce merveilleux protocole
Porte des adresses
Nous disposerons d'adresses dont la porte est plus ou moins grande, en fonction des besoins.
Scope link
La porte lien local permet aux nuds connects au mme rseau physique de
communiquer entre eux. Ces adresses ne doivent pas passer les routeurs. La porte est
similaire celle des adresses MAC sur le rseau Ethernet.
Quelque soit le rseau sur lequel nous nous trouvons, chaque nud disposera d'une adresse de
porte locale dans le rseau FE80::/10 (premier gaspillage, calculez le nombre de nuds
possibles). Ainsi, l'adresse fe80::21b:11ff:fe52:bfab est une adresse de type lien
local .
Scope Global
La porte globale, en revanche, est une adresse qui permettra de communiquer avec tout nud
situ sur l'internet. C'est l'quivalent d'une adresse publique IP v4 Ces adresses doivent
tre routes partout dans le monde.
Et pour les grands rseaux d'entreprise ?
La notion d'adresse prive telle qu'utilise en IP v4 a disparu des RFC IP v6. Ces adresses
ne sont par dfinition pas routables sur l'internet, mais permettent de structurer de gros
rseaux d'entreprise, sans ncessiter de connectivit l'internet. Le RFC 4193 (Unique Local
IPv6 Unicast Addresses). Si vous tes dans ce cas
Particularits
Auto-configuration
Il y a de nombreuses nouveauts dans IPv6, dont une qui n'est certes pas conome elle non
plus, mais qui permet une configuration assez simple des nuds du rseau.
Avec IPv4, nous ne connaissons que deux moyens vraiment exploitables pour disposer d'une
configuration IP valide :
la configuration entirement manuelle ;
la configuration automatique via DHCP.
Certes, il existe un ersatz d'auto-configuration, mais qui n'est utilisable que sur un petit rseau,
sans passerelle vers l'extrieur.
IPv6 propose un moyen d'auto-configuration efficace, mais gourmand, encore appel
configuration sans tat . Le jeton va tre cr automatiquement, le plus souvent partir
de l'adresse MAC de l'interface configurer. Cette mthode ncessite d'absorber 64 bits sur
les 128 disponibles (encore un gaspillage).
L'IEEE a dfini un identificateur global 64 bits (format EUI-64). Les adaptateurs Ethernet
disposent d'une adresse MAC code sur 48 bits. L'IETF a fourni un algorithme de conversion
qui permet de passer d'un identifiant MAC un identifiant EUI-64

Exemple
Nous disposons de l'adresse MAC :
00:1B:11:52:BF:AB
l'identifiant constructeur est : 1B:11
le numro de srie est : 52:BF:AB
Ceci nous donnera en octets :
02:1b:11:ff:fe:52:bf:ab
Et en mots de 16 bits comme il sied une adresse IP v6 BCBG :
21b:11ff:fe52:bfab
Nous pouvons donc tout de suite construire une adresse de type lien local en ajoutant le
prfixe idoine :
fe80::21b:11ff:fe52:bfab
Vrification
~$ ifconfig eth0
eth0 Lien encap:Ethernet HWaddr 00:1B:11:52:BF:AB
inet adr:192.168.10.47 Bcast:192.168.10.255
Masque:255.255.255.0
adr inet6: fe80::21b:11ff:fe52:bfab/64 Scope:Lien
...
Le prfixe utilis ici est spcifique au lien local. Si nous disposons d'un prfixe distribu par
notre fournisseur d'accs, nous pourrons aussi construire une adresse de type globale :
~$ ifconfig eth0
eth0 Lien encap:Ethernet HWaddr 00:1B:11:52:BF:AB
inet adr:192.168.10.47 Bcast:192.168.10.255
Masque:255.255.255.0
adr inet6: 2a01:5d8:52f3:500d:21b:11ff:fe52:bfab/64 Scope:Global
adr inet6: fe80::21b:11ff:fe52:bfab/64 Scope:Lien
Notez que :
le prfixe distribu par notre fournisseur d'accs est ici : 2a01:5d8:52f3:500d::/64 ;
le jeton est rigoureusement le mme sur les deux adresses IPv6.
Confidentialit
Cette mthode peut prsenter une atteinte la vie prive. En effet, l'adresse MAC est en
quelque sorte une signature. Il devient donc possible de tracer une machine sur un rseau
(ordinateur portable en particulier). Le RFC3041 propose une mthode alternative partir
d'un tirage alatoire.
Configuration dtermine
Il reste possible cependant de faire appel des mthodes plus connues en IPv4 :
une configuration manuelle, fort peu intressante en IPv6, sauf dans certains cas trs
particuliers ;
une configuration de type DHCP qui, l'heure o je rdige ces lignes, n'a pas encore
fait la preuve de sa relle utilit. Il n'existe ce jour que peu d'implmentations
compltes de DHCPv6, comme dcrit dans le RFC3315.
Ce type de configuration est appel configuration avec tat .
Dure de vie d'une adresse
IPv6 est conu pour un adressage dynamique des nuds. L'exprience montre avec IP v4 que
l'adressage statique s'avre trop contraignent dans bien des cas. IP v6 prvoit donc qu'un nud
puisse changer d'adresse IP, mme s'il reste connect 24/7 l'internet. Ceci est rendu possible
par :
la possibilit d'attribuer plusieurs adresses IP la mme interface ;
la dfinition d'un mode d'obsolescence progressif d'une adresse.
Pour anticiper un peu sur la suite, voici un exemple :
~# ip -6 addr ls dev eth0
1: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500
inet6 2a01:e35:2e52:9840:220:18ff:fe2d:d291/64 scope global dynamic
valid_lft 86331sec preferred_lft 86331sec
inet6 2a01:5d8:52e5:2984:220:18ff:fe2d:d291/64 scope global deprecated
dynamic
valid_lft 86331sec preferred_lft -69sec
...
Comme nous le voyons ici, eth0 dispose de deux adresses de scope global. Elles disposent
toutes deux de deux paramtres :
valid_lft (dure de vie de validit) ;
preferred_lft (dure de vie de prfrence).
L'adresse 2a01:5d8:52e5:2984:220:18ff:fe2d:d291 est affuble d'un valid_lft positif, mais
d'un preferred_lft ngatif, ce qui confre cette adresse des proprits spciales :
elle est toujours valide (valid_lft positif) ;
elle est deprecated (preferred_lft ngatif).
Autrement dit, cet hte, lorsqu'il va initier une nouvelle connexion IP n'utilisera pas cette
adresse, mais l'autre : 2a01:e35:2e52:9840:220:18ff:fe2d:d291. En revanche, l'adresse
dprcie pourra continuer a tre utilise sur les connexions dj en cours.
Nous comprendrons mieux comment ces choses se passent lorsque nous tudierons la faon
d'obtenir une adresse globale sans tat.
ICMP et ARP
Nous sommes en IPv6, mais en dessous, il y a toujours Ethernet (du moins sur notre LAN).
ARP permet, avec IPv4, d'obtenir l'adresse MAC laquelle il faut envoyer l'information,
suivant l'adresse IP du destinataire.
Ce mcanisme doit bien sr exister aussi en IPv6, mais il est pris en charge par ICMP et ARP
n'existe plus. Nous verrons comment un peu plus loin.
Le lien local
Nous allons sans tarder effectuer une premire manipulation. Pour l'instant, nous ne disposons
que de deux htes, connects entre eux par un simple HUB, sans aucune passerelle vers
l'internet. L'un des deux htes est dj dmarr et configur en IP v6. Il dispose d'un sniffeur
(l'incontournable Wireshark).
L'objectif est de contrler ce qu'il se passe lorsque le second hte est mis en service. Cet hte
dispose d'une interface dont l'adresse MAC est :
00:0d:88:37:73:e9
Voyons d'abord l'ensemble des trames captures :
No. Time Source Destination Protocol
Info
1 0.000000 :: ff02::1:ff37:73e9 ICMPv6
Neighbor solicitation
2 0.999924 fe80::20d:88ff:fe37:73e9 ff02::2 ICMPv6
Router solicitation
3 4.999740 fe80::20d:88ff:fe37:73e9 ff02::2 ICMPv6
Router solicitation
4 8.999580 fe80::20d:88ff:fe37:73e9 ff02::2 ICMPv6
Router solicitation
Il y a plusieurs choses dire ici.
Neighbor solicitation
L'hte qui dmarre cherche auto-configurer son lien local, en utilisant le principe vu plus
haut. Il va donc pralablement s'assurer que l'adresse IP qu'il compte exploiter n'est pas dj
utilise.
Pour ce faire, il exploite une nouvelle fonctionnalit d'ICMP qui est appele Neighbor
discovery (Dcouverte du voisinage).
L'adresse source est ici non spcifie (::, rapprocher en IP v4 de l'adresse 0.0.0.0) ;
l'adresse de destination est intressante : ff02::1:ff37:73e9. Il s'agit d'une adresse de
diffusion (multicast) dont nous tudierons le dtail plus loin.
Il n'y a pas de rponse ce message, ce qui veut dire que l'adresse convoite n'est pas en
usage sur le lien local. Notre hte adopte donc l'adresse :
fe80::20d:88ff:fe37:73e9
construite comme nous l'avons vu plus haut.
Viennent ensuite trois messages de type Router solicitation (dcouverte de routeurs) qui
restent sans rponse, ce qui est rassurant, puisqu'il n'y en a pas sur notre rseau embryonnaire.
Voyons plus en dtail la premire trame :
Frame 1 (78 bytes on wire, 78 bytes captured)
...
Ethernet II, Src: D-Link_37:73:e9 (00:0d:88:37:73:e9), Dst: IPv6-Neighbor-
Discovery_ff:37:73:e9 (33:33:ff:37:73:e9)
Destination: IPv6-Neighbor-Discovery_ff:37:73:e9 (33:33:ff:37:73:e9)
Address: IPv6-Neighbor-Discovery_ff:37:73:e9 (33:33:ff:37:73:e9)
.... ...1 .... .... .... .... = IG bit: Group address
(multicast/broadcast)
.... ..1. .... .... .... .... = LG bit: Locally administered
address (this is NOT the factory default)
Source: D-Link_37:73:e9 (00:0d:88:37:73:e9)
Address: D-Link_37:73:e9 (00:0d:88:37:73:e9)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IPv6 (0x86dd)
Internet Protocol Version 6
0110 .... = Version: 6
.... 0000 0000 .... .... .... .... .... = Traffic class: 0x00000000
.... .... .... 0000 0000 0000 0000 0000 = Flowlabel: 0x00000000
Payload length: 24
Next header: ICMPv6 (0x3a)
Hop limit: 255
Source: :: (::)
Destination: ff02::1:ff37:73e9 (ff02::1:ff37:73e9)
Internet Control Message Protocol v6
Type: 135 (Neighbor solicitation)
Code: 0
Checksum: 0x0ad9 [correct]
Target: fe80::20d:88ff:fe37:73e9 (fe80::20d:88ff:fe37:73e9)
La source (l'hte qui cherche s'auto-configurer avec l'IPv6 fe80::20d:88ff:fe37:73e9)
dispose de l'adresse MAC 00:0d:88:37:73:e9 et envoie un message ICMP de type: 135
(Neighbor solicitation) sur une adresse de broadcast IPv6 ff02::1:ff37:73e9, ce qui
correspond une adresse MAC multicast de la forme 33:33:ff:37:73:e9.
Si d'aventure, un autre hte disposait d'une adresse MAC dont les 3 derniers octets seraient
37:73:e9, ce dernier rpondrait la sollicitation en envoyant son adresse IPv6 ainsi que son
adresse MAC complte. Dans le cas o l'adresse IPv6 serait identique celle convoite par
notre poste qui dmarre, il y aurait alors conflit et l'auto-configuration ne pourrait se faire.
Neighbor advertisement
Vous aimeriez ben savoir ce qu'il se passerait si, par un hasard extraordinaire, l'adresse
construite partir de l'adresse MAC tait dj en service sur le lien ? Rien de plus simple !
Faisons la manip. Nous allons exploiter la possibilit du multi-adressage d'un nud pour
attribuer la machine espion l'adresse convoite par le nouvel arrivant.
Sur la machine munie du Wireshark (la commande ip -6 fonctionne avec IP v6
exactement comme la commande ip le fait avec IP v4) :
# ip -6 addr add fe80::20d:88ff:fe37:73e9/64 dev eth0
Vrification :
# ifconfig eth0
eth0 Lien encap:Ethernet HWaddr 00:10:B5:40:B7:04
adr inet6: fe80::210:b5ff:fe40:b704/64 Scope:Lien
adr inet6: fe80::20d:88ff:fe37:73e9/64 Scope:Lien
...
Voyons maintenant le dmarrage de notre cobaye :
No. Time Source Destination Protocol
Info
1 0.000000 :: ff02::1:ff37:73e9 ICMPv6
Neighbor solicitation
2 0.000077 fe80::20d:88ff:fe37:73e9 ff02::1 ICMPv6
Neighbor advertisement
Si la premire trame est identique au cas prcdent, nous observons ici une rponse
Neighbor advertisement de fe80::20d:88ff:fe37:73e9 (l'adresse que nous avons
manuellement ajoute notre espion). Le processus s'arrte l, il n'y a pas de dcouverte de
routeurs et pour cause, notre cobaye n'a pu auto-configurer son interface.
Voyons le dtail de la trame 2 :
Frame 2 (86 bytes on wire, 86 bytes captured)
...
Ethernet II, Src: AcctonTe_40:b7:04 (00:10:b5:40:b7:04), Dst: IPv6-
Neighbor-Discovery_00:00:00:01 (33:33:00:00:00:01)
Destination: IPv6-Neighbor-Discovery_00:00:00:01 (33:33:00:00:00:01)
Address: IPv6-Neighbor-Discovery_00:00:00:01 (33:33:00:00:00:01)
.... ...1 .... .... .... .... = IG bit: Group address
(multicast/broadcast)
.... ..1. .... .... .... .... = LG bit: Locally administered
address (this is NOT the factory default)
Source: AcctonTe_40:b7:04 (00:10:b5:40:b7:04)
Address: AcctonTe_40:b7:04 (00:10:b5:40:b7:04)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IPv6 (0x86dd)
Internet Protocol Version 6
0110 .... = Version: 6
.... 0000 0000 .... .... .... .... .... = Traffic class: 0x00000000
.... .... .... 0000 0000 0000 0000 0000 = Flowlabel: 0x00000000
Payload length: 32
Next header: ICMPv6 (0x3a)
Hop limit: 255
Source: fe80::20d:88ff:fe37:73e9 (fe80::20d:88ff:fe37:73e9)
Destination: ff02::1 (ff02::1)
Internet Control Message Protocol v6
Type: 136 (Neighbor advertisement)
Code: 0
Checksum: 0x72ec [correct]
Flags: 0xa0000000
1... .... .... .... .... .... .... .... = Router
.0.. .... .... .... .... .... .... .... = Not adverted
..1. .... .... .... .... .... .... .... = Override
Target: fe80::20d:88ff:fe37:73e9 (fe80::20d:88ff:fe37:73e9)
ICMPv6 Option (Target link-layer address)
Type: Target link-layer address (2)
Length: 8
Link-layer address: 00:10:b5:40:b7:04
Notre espion signale par un message ICMP de type 136 que l'adresse IPv6
fe80::20d:88ff:fe37:73e9 est attache l'interface dont l'adresse MAC est
00:10:b5:40:b7:04. Ce message est envoy tous les htes du rseau (ff02::1, ce qui
correspond l'adresse MAC multicast 33:33:00:00:00:01). Notre postulant l'adresse IPv6
fe80::20d:88ff:fe37:73e9 en est donc inform.
Voyons l'tat de la configuration IP v6 du cobaye :
2: eth0: mtu 1500 qlen 1000
inet6 fe80::20d:88ff:fe37:73e9/64 scope link tentative
valid_lft forever preferred_lft forever
Le scope link que nous observions tout l'heure s'est transform en scope link tentative
. Autrement dit, cette adresse ne sera pas exploitable, l'hte n'est pas configur.
Moralit : En cas de duplication d'adresse, le processus d'auto-configuration montre ses
limites. Dans un tel cas, nous devrons rsoudre manuellement le conflit.
Notez aussi au passage que tout ceci ressemble furieusement ce que fait ARP en IPv4. Mais
ici, c'est de l'ICMP.
Avec deux interfaces
A priori, il n'y a pas de problmes, dans la mesure o la construction de l'adresse se fait
partir de l'adresse MAC. Nous devrions trouver deux adresses IPv6 diffrentes :
eth0 Link encap:Ethernet HWaddr 00:10:b5:40:b7:04
adr inet6: fe80::210:b5ff:fe40:b704/64 Scope:Lien
...

eth1 Link encap:Ethernet HWaddr 00:0c:6e:63:e6:ed
inet adr:192.168.10.30 Bcast:192.168.10.255
Masque:255.255.255.0
adr inet6: fe80::20c:6eff:fe63:e6ed/64 Scope:Lien
...
C'est bien, c'est comme on avait prvu
Et les routes ?
Il y a plusieurs faons d'afficher les routes IPv6, dont la classique commande route , avec
quelques amnagements :
~# route -A inet6
Table de routage IPv6 du noyau
Destination Next Hop Flag Met Ref Use
If
::1/128 :: Un 0 1 4
lo
fe80::/128 :: Un 0 2 0
lo
fe80::/128 :: Un 0 2 0
lo
fe80::20c:6eff:fe63:e6ed/128 :: Un 0 1 0
lo
fe80::210:b5ff:fe40:b704/128 :: Un 0 1 0
lo
fe80::/64 :: U 256 0 0
eth1
fe80::/64 :: U 256 0 0
eth0
ff00::/8 :: U 256 0 0
eth1
ff00::/8 :: U 256 0 0
eth0
::/0 :: !n -1 1 1
lo
Pour l'instant contentons-nous de noter ceci : la route pour fe080::/64 peut passer aussi bien
par eth0 que par eth1
Un petit ping...
Nous avons sur un mme lien local deux nuds auto-configurs en IPv6 :
l'un dispose de l'adresse fe80::20c:6eff:fe63:e6ed ;
l'autre de l'adresse fe80::21b:11ff:fe52:bfab (sur eth0).
Depuis ce dernier nud, nous tentons un ping (ipv6) sur fe80::20c:6eff:fe63:e6ed :
~$ ping6 -c4 fe80::20c:6eff:fe63:e6ed
connect: Invalid argument
Pourquoi tant de haine ?
Vous pensez bien que que la remarque pralable sur les routes n'a pas t faite par hasard.
Avec les adresses de type lien local, il faut prciser sur quelle interface nous dsirons
travailler. La commande ping6 propose diverses syntaxes. La plus courte est sans doute :
ping 6 <adresse de la cible>%ethx
Voyons ceci :
:~$ ping6 -c4 fe80::20c:6eff:fe63:e6ed%eth0
PING fe80::20c:6eff:fe63:e6ed%eth0(fe80::20c:6eff:fe63:e6ed) 56 data bytes
64 bytes from fe80::20c:6eff:fe63:e6ed: icmp_seq=1 ttl=64 time=3.54 ms
64 bytes from fe80::20c:6eff:fe63:e6ed: icmp_seq=2 ttl=64 time=0.121 ms
64 bytes from fe80::20c:6eff:fe63:e6ed: icmp_seq=3 ttl=64 time=0.123 ms
64 bytes from fe80::20c:6eff:fe63:e6ed: icmp_seq=4 ttl=64 time=0.120 ms

--- fe80::20c:6eff:fe63:e6ed%eth0 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.120/0.976/3.543/1.482 ms
Nettement plus efficace. Nous verrons plus loin que cette limitation n'intervient pas avec des
adresses de type global.
Hello World
Fort de ces quelques observations, nous allons maintenant connecter une station directement
sur notre Freebox, configure pour fonctionner en IPv6.
Configuration
Cette machine, une Debian lenny (testing, l'heure o ces lignes sont crites), dispose
d'une interface eth0 configure en IPv4 DHCP. Nous aurons donc aussi une connectivit
IPv4, ce qui pour l'instant est ncessaire, si nous voulons accder la plupart des ressources
de l'internet. En effet, peu de sites proposent actuellement une connectivit IPv6.
Nous dmarrons cette machine et :

~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:1b:11:52:bf:ab
inet adr:82.243.80.13 Bcast:82.243.80.255 Masque:255.255.255.0
adr inet6: 2a01:5d8:52f3:500d:21b:11ff:fe52:bfab/64 Scope:Global
adr inet6: fe80::21b:11ff:fe52:bfab/64 Scope:Lien
...
Nous observons deux adresses IPv6 :
fe80::21b:11ff:fe52:bfab/64 qui correspond au lien local, comme nous l'avons vu
;
2a01:5d8:52f3:500d:21b:11ff:fe52:bfab/64 qui est une adresse globale, fournie
par notre oprateur.
Anatomie de l'adresse globale
Dj, nous pouvons observer que le jeton (partie reprsentative du nud) est le mme pour les
adresses globale et lien local. C'est normal, elles sont toutes les deux auto-configures de la
mme manire.
Adresse de Free auto-configure ?
Oui, vous ne rvez pas, en IPv6 Free vous octroie 2
64
adresses publiques. Votre rseau local
sera donc entirement intgr l'internet (avec tous les risques que cela comprend). Plus
besoin de NAT, donc. Lorsque notre tlvision, notre rfrigrateur, notre lave linge, notre lave
vaisselle, notre four chaleur tournante, notre conglateur etc. seront connects l'internet, ce
qui nous permettra, via notre tlphone/pda/baladeur-mp3 de recevoir toutes les alertes
lectro-mnagres o que nous soyons dans le vaste monde, nous n'aurons pas de problmes
de pnurie d'adresses IP.
En fait, en IPv6, votre fournisseur ne vous procurera non plus une adresse IP, mais un bloc
d'adresses IP. Actuellement au moins un /64, pour permettre l'auto-configuration. Autrement
dit, votre fournisseur vous alloue un prfixe.
En IPv4, en revanche, vous ne disposerez toujours que d'une seule adresse IP publique, bien
sr.
Le prfixe Free
Dans l'exemple, ce prfixe est :
2a01:5d8:52f3:500d::/64
Il est construit de la manire suivante :
2a01:5d8::/32 qui est un prfixe fourni Free pour l'ensemble de ses besoins ;
les 32 bits suivants ne sont rien d'autre que votre adresse IPv4. Ici 52f3:500d peut
s'crire en hexadcimal 0x52.0xf3.0x50.0x0d, ce qui donne 82.243.80.13 en
dcimal, conformment ce qui a t observ plus haut avec la commande ifconfig.
Au final le prfixe que Free vous alloue est entirement votre usage, exception faite d'une
adresse particulire qui, comme nous le verrons plus bas, est celle de la passerelle par dfaut.
Il en faut aussi une en IPv6, bien entendu. Cette adresse est conventionnellement : <votre
prfixe>::1. Ainsi, dans l'exemple, ce sera 2a01:5d8:52f3:500d::1.
~$ ping6 -c 4 2a01:5d8:52f3:500d::1
PING 2a01:5d8:52f3:500d::1(2a01:5d8:52f3:500d::1) 56 data bytes
64 bytes from 2a01:5d8:52f3:500d::1: icmp_seq=1 ttl=64 time=6.38 ms
64 bytes from 2a01:5d8:52f3:500d::1: icmp_seq=2 ttl=64 time=0.666 ms
64 bytes from 2a01:5d8:52f3:500d::1: icmp_seq=3 ttl=64 time=0.657 ms
64 bytes from 2a01:5d8:52f3:500d::1: icmp_seq=4 ttl=64 time=0.662 ms

--- 2a01:5d8:52f3:500d::1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.657/2.092/6.386/2.479 ms
Ah tiens, nous n'avons pas eu besoin ici de spcifier le nom de l'interface dans la commande
ping ?
Non, car la table des routes dit :
~$ route -A inet6

Table de routage IPv6 du noyau
Destination Next Hop Flag
Met Ref Use If
::1/128 :: Un
0 1 25 lo
2a01:5d8:52f3:500d:21b:11ff:fe52:bfab/128 :: Un
0 1 3080 lo
2a01:5d8:52f3:500d::/64 :: UAe
256 0 17 eth0
fe80::21b:11ff:fe52:bfab/128 :: Un
0 1 10 lo
fe80::/64 :: U
256 0 0 eth0
ff00::/8 :: U
256 0 0 eth0
::/0 fe80::207:cbff:fe1f:f5a UGDAe
1024 0 1 eth0
::/0 :: !n
-1 1 1 lo
Il n'y a donc aucune ambigut sur le chemin prendre.
Notons, puisque nous y sommes, la route par dfaut :
::/0 fe80::207:cbff:fe1f:f5a UGDAe
1024 0 1 eth0
o l'adresse IP de la passerelle est une adresse de type lien local.
Et ARP dans tout a ?
Nous l'avons dj dit, ARP n'existe plus, mais la pile IPv6 doit tout de mme conserver une
table d'quivalence entre adresses IPv6 et adresses MAC.
La commande arp en version 6 n'existe pas, mais la commande ip permet d'afficher le
voisinage, aussi bien en IPv4 qu'en IPv6.
~# ping6 -c 1 fe80::207:cbff:fe1f:f5a%eth0
PING fe80::207:cbff:fe1f:f5a%eth0(fe80::207:cbff:fe1f:f5a) 56 data bytes
64 bytes from fe80::207:cbff:fe1f:f5a: icmp_seq=1 ttl=64 time=1.55 ms

--- fe80::207:cbff:fe1f:f5a%eth0 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.557/1.557/1.557/0.000 ms

~# ip -6 neigh show dev eth0
fe80::207:cbff:fe1f:f5a lladdr 00:07:cb:1f:0f:5a router REACHABLE
Notre passerelle par dfaut dispose d'une adresse lien local auto-configure, son adresse MAC
est 00:07:cb:1f:0f:5a. Profitons de l'occasion pour vrifier que l'adresse globale
2a01:5d8:52f3:500d::1 correspond bien notre passerelle par dfaut.
Un ping sur cette adresse :
~# ping6 -c 1 2a01:5d8:52f3:500d::1
PING 2a01:5d8:52f3:500d::1(2a01:5d8:52f3:500d::1) 56 data bytes
64 bytes from 2a01:5d8:52f3:500d::1: icmp_seq=1 ttl=64 time=5.39 ms
...
Un ping sur l'adresse lien local de la passerelle :
~$ ping6 -c 1 fe80::207:cbff:fe1f:f5a%eth0
PING fe80::207:cbff:fe1f:f5a%eth0(fe80::207:cbff:fe1f:f5a) 56 data bytes
64 bytes from fe80::207:cbff:fe1f:f5a: icmp_seq=1 ttl=64 time=0.646 ms
...
Enfin, nous affichons le voisinage :
~$ ip -6 neigh show dev eth0
fe80::207:cbff:fe1f:f5a lladdr 00:07:cb:1f:0f:5a router REACHABLE
2a01:5d8:52f3:500d::1 lladdr 00:07:cb:1f:0f:5a router REACHABLE
La mme adresse MAC 00:07:cb:1f:0f:5a correspond bien aux deux adresses IPv6. A titre
purement informatif, faisons quelque chose d'quivalent en IPv4 :
~# route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use
Iface
82.243.80.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
0.0.0.0 82.243.80.254 0.0.0.0 UG 0 0 0
eth0

~# ping -c 1 82.243.80.254
PING 82.243.80.254 (82.243.80.254) 56(84) bytes of data.
64 bytes from 82.243.80.254: icmp_seq=1 ttl=64 time=36.8 ms
...

~# arp -an
? (82.243.80.254) at 00:07:CB:1F:0F:5A [ether] on eth0
Nous remarquons que, en IPv4 comme en IPv6, l'adresse MAC de la passerelle par dfaut est
toujours la mme
DNS, DHCP ???
Nous sommes dj assez rompus aux protocoles de l'internet. Mme si nous ne les
manipulons qu'au travers d'IPv4, nous ne somme plus des newbies , nous savons que la
configuration IP n'est pas miraculeuse, que nous avons besoin, en plus d'une adresse IP, de
quelques renseignements supplmentaires pour pouvoir exploiter les ressources de l'internet :
une adresse de passerelle par dfaut ;
au moins une adresse de DNS pour rsoudre les noms en adresses IP.
Avec IPv4, ces informations nous sont communiques par le fournisseur d'accs de faon
automatique. Par DHCP si le processus de connexion est assimil une connexion sur un
rseau local (cas de Free), ou par PPP(oE) lors de l'identification RADIUS. mais qu'en est-il
en IPv6 ?
DHCP
Il existe bien un RFC dcrivant un protocole DHCPv6, mais il reste pour l'heure (o ces
lignes sont crites) exprimental. Nous avons vu que le mcanisme d'auto-configuration tait
privilgi pour l'obtention de son adresse IP. Ici, donc, foin de DHCP. Mais alors, comment
notre machine a-t-elle fait pour dcouvrir l'adresse de la passerelle par dfaut ? car nous avons
vu sur la page prcdente que cette adresse tait bien connue.
Auto-configuration, soit. Mais comment notre systme fait-il pour connatre le prfixe que
nous attribue notre fournisseur d'accs ?
DNS
Disposons-nous d'une adresse de DNS IPv6 ? Et d'abord, comment fonctionne DNS en IPv6 ?
Rsolution des noms
Il y a dj longtemps que les DNS (Bind en particulier) savent diffuser leurs clients aussi
bien des adresses IPv4 que des adresses IPv6, pour un nom d'hte donn. Exemple :
~# host www.kame.net
www.kame.net has address 203.178.141.194
www.kame.net has IPv6 address 2001:200:0:8002:203:47ff:fea5:3085
Pour ne pas trop vous donner le vertige, n'entrons pas de suite dans les dtails de la manip.
Disons simplement pour l'instant qu'il est possible de :
demander un DNS l'adresse IPv6 d'un hte en l'interrogeant sur son IPv4 ;
demander un DNS l'adresse IPv4 d'un hte en l'interrogeant sur son adresse IPv6 (si
le DNS dispose d'une adresse IPv6 bien sr).
En ralit, un DNS dispose :
du champ A pour enregistrer l'IPv4 correspondant un nom d'hte ;
du champ AAAA pour enregistrer l'IPv6 correspondant un nom d'hte.
Si le DNS en question dispose d'une adresse IPv4 et d'une adresse IPv6, les clients pourront
l'interroger en IPv4 comme en IPv6 pour obtenir le champ A comme le champ AAAA pour
un hte donn.
Autrement dit, un DNS est capable de fournir des adresses IPv4 comme IPv6 pourvu qu'il les
connaisse et ce, qu'il soit interrog aussi bien par une requte IPv4 qu'une requte IPv6.
Les DNS de Free
Comment connatre les adresses IP (v4 comme v6) des DNS que Free met la disposition de
ses clients ?
Les adresses IPv4 sont assez simples retrouver, puisqu'elles figurent dans les informations
fournies par DHCP, que nous trouvons sur notre Debian dans
/var/lib/dhcp/dhclient.eth0.leases :
lease {
interface "eth0";
...
option domain-name-servers 212.27.54.252,212.27.53.252;
...
}
Nous avons donc deux DNS identifis par leur IPv4:
212.27.54.252 ;
212.27.53.252.
Les adresses IPv6 sont elles aussi assez simples trouver si l'on sait comment faire, mais pour
l'instant, nous ne savons pas encore. Il vous faudra donc vous contenter de me croire sur
parole :
2a01:5d8:e0ff::2 ;
2a01:5d8:e0ff::1.
Nous allons interroger ces DNS en mode IPv4 et en mode IPv6 propos de www.kame.net et
comparer les rsultats :
~$ host -4 www.kame.net 212.27.54.252
Using domain server:
Name: 212.27.54.252
Address: 212.27.54.252#53
Aliases:

www.kame.net has address 203.178.141.194
www.kame.net has IPv6 address 2001:200:0:8002:203:47ff:fea5:3085


~$ host -6 www.kame.net 2a01:5d8:e0ff::2
Using domain server:
Name: 2a01:5d8:e0ff::2
Address: 2a01:5d8:e0ff::2#53
Aliases:

www.kame.net has address 203.178.141.194
www.kame.net has IPv6 address 2001:200:0:8002:203:47ff:fea5:3085
Quel que soit le serveur interrog, en mode IPv4 comme en mode IPv6, nous obtenons bien
les adresses IPv4 et IPv6 de la cible.
Bon. Mais comment notre systme fait-il pour connatre la ou les adresses de DNS que notre
fournisseur nous procure ?
A la dcouverte du monde IPv6
Il existe une trousse outils nomme ndisc6 (IPv6 diagnostic tools for Linux and BSD),
facile installer sur Debian, Ubuntu et drives par un aptitude install ndisc6. Bien
entendu, les autres distributions rcentes proposent galement cette trousse, qui contient
quatre outils de base.
Dans un premier temps, nous nous contenterons d'utiliser ces outils, sans trop savoir comment
ils fonctionnent, juste pour voir les informations que l'on peut en tirer.
ndisc6
Permet de lancer une dcouverte des voisins . Comparable la commande arping du
monde IPv4. Utilisons cet outil pour scruter notre passerelle par dfaut. Commenons par son
adresse de type lien local, telle que nous l'avons dcouverte avec la commande route -A
inet6 :
:~$ ndisc6 fe80::207:cbff:fe1f:f5a eth0
Solicitation de fe80::207:cbff:fe1f:f5a (fe80::207:cbff:fe1f:f5a) sur
eth0...
Adresse cible de lien : 00:07:CB:1F:0F:5A
de fe80::207:cbff:fe1f:f5a
~$ ndisc6 2a01:5d8:52f3:500d::1 eth0
Solicitation de 2a01:5d8:52f3:500d::1 (2a01:5d8:52f3:500d::1) sur eth0...
Adresse cible de lien : 00:07:CB:1F:0F:5A
de 2a01:5d8:52f3:500d::1
Ne nous ternisons pas sur cet outil qui pour l'instant ne nous apprend rien de bien nouveau.
En gros, un ping6 suivi d'un ip -6 neigh show nous en apprend tout autant.
rdisc6
Cet outil est magique. Voyons tout de suite ce qu'il est capable de nous apprendre :
~$ rdisc6 eth0
Solicitation de ff02::2 (ff02::2) sur eth0...

Limite de saut (TTL) : 64 ( 0x40)
Conf. d'adresse par DHCP : Non
Autres rglages par DHCP : Non
Prfrence du routeur : moyen
Dure de vie du routeur : 1800 (0x00000708) secondes
Temps d'atteinte : non indiqu (0x00000000)
Temps de retransmission : non indiqu (0x00000000)
Prfixe : 2a01:5d8:52f3:500d::/64
Dure de validit : 86400 (0x00015180) secondes
Dure de prfrence : 86400 (0x00015180) secondes
Recursive DNS server : 2a01:5d8:e0ff::2
Recursive DNS server : 2a01:5d8:e0ff::1
DNS servers lifetime : 600 (0x00000258) secondes
MTU : 1480 octets (valide)
Adresse source de lien : 00:07:CB:1F:0F:5A
de fe80::207:cbff:fe1f:f5a
L, nous sommes servis. Nous apprenons que :
il n'y a pas de DHCP dans le coup ;
le prfixe qui nous est attribu est bien 2a01:5d8:52f3:500d::/64 ;
les dures de validit et de prfrence sont identiques et de 86400 secondes (24
heures) ;
les DNS proposs sont 2a01:5d8:e0ff::2 et 2a01:5d8:e0ff::1 ;
le routeur (passerelle par dfaut) est fe80::207:cbff:fe1f:f5a.
Nous sentons bien ici qu'il faudra approfondir cette question. Nous avons rcupr toutes les
informations ncessaires, comme nous l'aurions fait en IPv4 par DHCP, mais ici, ce n'est pas
DHCP. Alors, qu'est-ce que c'est ?
De plus, que reprsente cette adresse ff02::2 qui semble tre la source de toutes ces
informations ?
tcptraceroute6
Comme son nom l'indique, cette commande est quivalente au tcptraceroute du monde
IPv4 :
:~$ tcptraceroute6 www.kame.net
traceroute vers orange.kame.net (2001:200:0:8002:203:47ff:fea5:3085) de
2a01:5d8:52f3:500d:21b:11ff:fe52:bfab, port 80, du port 56328, 30 sauts
max, 60 octet/paquet
1 2a01:5d8:52f3:500d::1 (2a01:5d8:52f3:500d::1) 0.586 ms 0.493 ms
0.514 ms
2 2a01:5d8:e000:9d1::4 (2a01:5d8:e000:9d1::4) 48.728 ms 48.941 ms
48.161 ms
3 2a01:5d8:e000:9d1::fe (2a01:5d8:e000:9d1::fe) 50.412 ms 49.901 ms *
...
22 lo0.alaxala1.k2.wide.ad.jp (2001:200:0:4800::7800:1) 342.425 ms
342.790 ms 339.848 ms
23 orange.kame.net (2001:200:0:8002:203:47ff:fea5:3085) 343.017 ms
[ouvert] 342.494 ms 338.770 ms
Comme vous le constatez, il n'y a rien de fondamentalement nouveau, si ce n'est que nous
voluons dans un monde IPv6.
le hop 1 nous confirme une fois encore l'adresse IP (globale) de notre passerelle
par dfaut ;
le hop 22 nous apprend que la cible www.kame.net se situe au japon et que son
port 80 est ouvert.
traceroute6
Nous n'allons pas nous intresser cette commande, qui est quivalente au traceroute du
monde IPv4 et qui ne nous apprendra rien de plus ici.
Les questions
Le lecteur attentif aura pu constater que cette page pose beaucoup de question, mais n'apporte
gure de rponses sur les mcanismes mis en uvre, signe vident qu'il y a encore de la
lecture en perspective
Si nous avons appris qu'il existe un mcanisme qui remplace DHCP, nous ne savons toujours
pas exactement lequel. Ami lecteur, ne rate surtout pas la page suivante, qui va enfin
commencer rpondre ces questions.
ICMPv6, multicast, ndp...
ICMPv6
Ce protocole, qui ressemble beaucoup l'ICMP du monde IPv4, a t enrichi de nouveaux
messages, c'est lui qui sert vhiculer les informations de configuration, dans le cas qui nous
intresse. En effet, nous n'allons maintenant plus tarder voir que ce sont des messages ICMP
qui contiennent les questions et les rponses que nous avons obtenues avec l'outil rdisc6,
exactement de la mme manire que lors du dmarrage de la pile IPv6 sur une interface
rseau.
Multicast
IPv6 cherche par tous les moyens viter la diffusion (broadcast), en prfrant adopter des
solutions multicast . Nous allons dcouvrir que certaines adresses multicast sont dfinies
pour rpondre des requtes bien prcises, et que les quipements du rseau qui sont senss
disposer des rponses ces requtes coutent sur ces adresses multicast.
Ainsi :
ff02::2 est une adresse multicast destine recevoir des requtes du type router
discovery (Sollicitation d'un routeur) . Tous les routeurs accessibles dans le voisinage
le seront par cette adresse multicast. C'est ce que fait notre commande rdisc6 sur la
page prcdente ;
ff02::1 est une autre adresse multicast, qui sert dans l'autre sens. Toutes les stations
d'un rseau doivent tre capables d'couter sur cette adresse ce que les routeurs ont
leur dire.
NDP
Neighbor Discovery Protocol (dcouverte des voisins) . Ce protocole permet aux nuds
d'un rsau de dcouvrir leur voisinage. Pour ce qui nous intresse principalement ici, c'est
grce lui qu'une station qui dmarre dcouvre les routeurs qui lui sont accessibles et que
ceux-ci lui communiquent les paramtres ncessaires sa configuration IPv6. Car vous l'avez
devin, ce sont les routeurs qui transmettent ces informations que nous avons mises en
vidence grce rdisc6.
NDP utilise des messages ICMPv6 et les adresses multicast ff02::1 et ff02::2.
Capture du protocole
Nous allons lancer notre wireshark favori l'coute d'ICMPv6 sur eth0 et refaire un rdisc6
eth0 pour voir
No. Time Source Destination Protocol
Info
1 0.000000 fe80::21b:11ff:fe52:bfab ff02::2 ICMPv6
Router solicitation
2 0.004925 fe80::207:cbff:fe1f:f5a ff02::1 ICMPv6
Router advertisement
1. Notre station (fe80::21b:11ff:fe52:bfab) envoie un Router solicitation
(sollicitation de routeurs) sur l'adresse multicast ff02::2 ;
1. Notre routeur (fe80::207:cbff:fe1f:f5a, la passerelle par dfaut) rpond un
Router advertisement (annonce de routeur) sur l'adresse multicast ff02::1.
Analyse de l'change
La question
Elle est assez simple, nous allons tronquer un peu le dtail, pour ne garder que ce qu'il y a de
plus intressant :
Frame 1 (62 bytes on wire, 62 bytes captured)
...
Ethernet II, Src: 00:1b:11:52:bf:ab (00:1b:11:52:bf:ab), Dst:
33:33:00:00:00:02 (33:33:00:00:00:02)
Destination: 33:33:00:00:00:02 (33:33:00:00:00:02)
Address: 33:33:00:00:00:02 (33:33:00:00:00:02)
.... ...1 .... .... .... .... = IG bit: Group address
(multicast/broadcast)
.... ..1. .... .... .... .... = LG bit: Locally administered
address (this is NOT the factory default)
Source: 00:1b:11:52:bf:ab (00:1b:11:52:bf:ab)
Address: 00:1b:11:52:bf:ab (00:1b:11:52:bf:ab)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IPv6 (0x86dd)
Internet Protocol Version 6
...
Source: fe80::21b:11ff:fe52:bfab (fe80::21b:11ff:fe52:bfab)
Destination: ff02::2 (ff02::2)
Internet Control Message Protocol v6
Type: 133 (Router solicitation)
Code: 0
Checksum: 0xab1e [correct]
Notez, sur la couche Ethernet, les adresses multicast utilises.
Pour le reste, nous dcouvrons bien sur ICMPv6 un message de type 133 (Router solicitation).
La rponse
a va tre un peu plus copieux ici.
Frame 2 (158 bytes on wire, 158 bytes captured)
...
Ethernet II, Src: 00:07:cb:1f:0f:5a (00:07:cb:1f:0f:5a), Dst:
33:33:00:00:00:01 (33:33:00:00:00:01)
Destination: 33:33:00:00:00:01 (33:33:00:00:00:01)
Address: 33:33:00:00:00:01 (33:33:00:00:00:01)
.... ...1 .... .... .... .... = IG bit: Group address
(multicast/broadcast)
.... ..1. .... .... .... .... = LG bit: Locally administered
address (this is NOT the factory default)
Source: 00:07:cb:1f:0f:5a (00:07:cb:1f:0f:5a)
Address: 00:07:cb:1f:0f:5a (00:07:cb:1f:0f:5a)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IPv6 (0x86dd)
Internet Protocol Version 6
...
Source: fe80::207:cbff:fe1f:f5a (fe80::207:cbff:fe1f:f5a)
Destination: ff02::1 (ff02::1)
Internet Control Message Protocol v6
Type: 134 (Router advertisement)
Code: 0
Checksum: 0xfc50 [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 timer: 0

ICMPv6 Option (Prefix information)
Type: Prefix information (3)
Length: 32
Prefix length: 64
Flags: 0xc0
1... .... = Onlink
.1.. .... = Auto
..0. .... = Not router address
...0 .... = Not site prefix
Valid lifetime: 86400
Preferred lifetime: 86400
Prefix: 2a01:5d8:52f3:500d::

ICMPv6 Option (Recursive DNS Server)
Type: Recursive DNS Server (25)
Length: 40
Reserved
Lifetime: 600
Recursive DNS Servers: 2a01:5d8:e0ff::2 (2a01:5d8:e0ff::2)
Recursive DNS Servers: 2a01:5d8:e0ff::1 (2a01:5d8:e0ff::1)

ICMPv6 Option (MTU)
Type: MTU (5)
Length: 8
MTU: 1480

ICMPv6 Option (Source link-layer address)
Type: Source link-layer address (1)
Length: 8
Link-layer address: 00:07:cb:1f:0f:5a
Tout est dit dans un seul paquet ICMP. Notez que ce message Neighbor advertisement est
priodiquement mis par les routeurs, mme s'il n' pas t sollicit par un nud du rseau., ce
qui permet si ncessaire de reconfigurer dynamiquement les htes.
IPv6 global sur son LAN
Tout ceci est bien amusant, mais comment exploiter au mieux ce monde IPv6 sur son LAN,
car IPv6 ne se suffit pas lui-mme pour l'instant. Les ressources IPv6 sont encore rares sur le
vaste internet, et l'usage d'IPv4 est encore le plus souvent ncessaire ;
1. Comment les choses peuvent-elles se passer si l'on fait cohabiter sur le mme hte une
pile IPv4 et une pile IPv6 ?
1. Je n'ai qu'une IPv4 publique et 2
64
IPv6 globales. Comment grer a sur mon LAN ?
1. Je voudrais bien utiliser l'auto-configuration. Je n'ai donc pas besoin de DHCPv6 ?
1. Mais si j'ai bien compris, il faut 64 bits pour le jeton si je veux faire de l'auto-
configuration. Comme le prfixe fourni par Free et un prfixe de 64 bits, 64+64=128,
je ne peux donc pas crer de sous-rsaux, malgr mes 2
64
adresses possibles ?
1. Si je ne peux crer de sous-rseaux, je ne peux utiliser un routeur IPv6 entre ma
Freebox et mon LAN ?
Voil beaucoup de questions auxquelles il faudra rpondre pour rsoudre le problme.
IPv4 et IPv6 ensemble
C'est tout fait possible. Depuis dj pas mal de temps GNU/Linux installe par dfaut les
deux piles, et c'est IPv6 qui est prioritaire. Nous pourrons vrifier que, dans le cas o une
ressource de l'internet dispose d'une adresse IPv6 et d'une adresse IPv4, c'est IPv6 qui sera
employ.
Maintenant, il reste le problme qu'en IPv4, je n'ai qu'une seule adresse publique ma
disposition pour tout mon LAN et je dois donc obligatoirement faire du NAT. Je sais faire
depuis longtemps, ce n'est pas un problme pour moi, un routeur NAT avec IPTables, je
matrise parfaitement. En revanche, j'ai bien compris que mes configurations IPv6 vont se
faire partir des informations que le routeur IPv6 (dont je n'ai pas du tout la marise)
m'envoie via des messages ICMPv6. Un switch ? pourquoi pas, mais alors, adieu IPv4 qui
a besoin d'un routeur.
Il faudrait que mon machin deux pattes que je place entre ma Freebox et le switch de
mon LAN agisse comme un routeur NAT pour IPv4 et soit transparent pour IPv6. Un petit
dessin ?

Le moyen simple pour que notre machin soit transparent au niveau IP est qu'il traite les
paquets sur la couche infrieure, savoir la couche Ethernet. Ce sont les ponts qui savent faire
ce genre de choses.
Nous avons de la chance, GNU/Linux sait parfaitement faire le pont et sait donc rsoudre
notre problme, la condition que nous soyons capables de lui expliquer qu'il ne doit le faire
que pour les trames Ethernet qui transportent de l'IPv6 et surtout pas de l'IPv4, il n'y aurait
plus de routage NAT IPv4 sinon. Nous verrons que GNU/Linux sait faire un pont intelligent.
IPv4 par routage NAT
Ce n'est pas une nouveaut. Nous disposons d'un rseau local, par exemple 192.168.0.0/24,
avec son DHCP, son DNS cache et son routeur NAT, qui dispose d'une interface dans notre
rseau local (par exemple 192.168.0.1) et une autre patte dans le rseau du fournisseur d'accs
(par exemple 82.243.80.13).
Pour que tout ceci fonctionne en harmonie, Netfilter fait du masquage d'adresse, il faut crire
plein de rgles IPtables bien senties, ce qui permet d'en profiter pour que notre routeur serve
aussi de pare-feu.
Si nous dsirons abriter un serveur dans notre LAN, qui soit visible depuis l'internet, c'est un
peu plus compliqu. Il faut faire sur le routeur du prerouting C'est--dire qu'il va falloir,
toujours avec Netfilter/IPTables, indiquer que les requtes entrant sur le routeur par le port qui
correspond au service que nous voulons exposer (par exemple le port 80 pour http) devra tre
redirig vers l'adresse IP locale de notre serveur sur le LAN. Il ne faut pas tre manchot de
l'iptables, mais a se fait assez bien.
Bien entendu, ce genre d'ouverture augmente considrablement les risques d'intrusion sur
votre LAN et il vaudrait mieux dans un tel cas disposer d'un routeur NAT trois pattes, avec
une DMZ pour y placer les machines exposes. Ceci complique encore un peu la
configuration Netfilter/IPTables, mais a reste toujours ralisable si l'on est un artiste du
filtrage.
Lorsque nous utilisons sur les stations de notre LAN des applications qui sont la fois client
et serveur (ceci peut arriver dans certains protocoles apparents au peer to peer ), la
configuration IPtables peut alors devenir la fois un casse-tte et une passoire.
Mais comme le haut dbit existe dj depuis le dbut du sicle, nous avons largement eu le
temps de nous familiariser avec toutes ces subtilits.
IPv6 par pontage Ethernet
De ceci, nous avons moins l'habitude et il convient peut-tre ici de faire un point sur cette
nouvelle situation.
Avantages
Toutes les stations de notre LAN vont avoir une adresse IPv6 publique. Plus besoin de NAT,
plus besoin de PREROUTING tout ceci est termin. Chacune de nos stations sera
dsormais directement accessible (sauf prcautions particulires) depuis l'internet.
Si nous disposons d'un nom de domaine, il sera relativement facile de configurer un DNS
capable de rsoudre publiquement les adresses de tous nos htes locaux. Nous allons enfin
pouvoir jouer comme les grands.
Inconvnients
Oui mais, et la scurit dans tout a ? Jouer comme les grands c'est bien, mais il faut en avoir
les comptences. La gestion de la scurit devra se faire plusieurs niveaux, chacun des htes
du rseau local (qui n'est par le fait plus du tout un rseau local, mais bel et bien un morceau
de l'internet) devra faire l'objet d'une attention toute particulire.
Iptables a son quivalent IPv6 et se nomme de faon originale : ip6tables, qui nous permettra
de raliser notre filtrage en IPv6, de faon tout fait analogue ce que nous savons faire en
IPv4.
Un pont avec GNU/Linux
Raliser une telle chose n'tant pas courante, nous allons dtailler quelque peu. La station que
nous avons connecte notre Freebox est maintenant munie de deux interfaces :
eth0 est sur la Freebox ;
eth1 est connecte un switch qui accueillera les htes de notre LAN .
C'est cette station qui va jouer le rle de machin .

Machin reoit pour eth0 une IPv4 et une IPv6 de la part de notre fournisseur :
~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:05:5d:df:fe:35
inet adr:82.243.80.13 Bcast:82.243.80.255 Masque:255.255.255.0
adr inet6: 2a01:5d8:52f3:500d:205:5dff:fedf:fe35/64 Scope:Global
adr inet6: fe80::205:5dff:fedf:fe35/64 Scope:Lien
...
C'est bien, mais dans un premier temps, nous voulons juste en faire un pont Ethernet tout
simple.
Les outils ncessaires
Nous sommes sur une Debian testing . Il nous faut les paquets :
bridge-utils.
Description : Utilities for configuring the Linux Ethernet bridge This package
contains utilities for configuring the Linux Ethernet bridge in Linux 2.4 or later. The
Linux Ethernet bridge can be used for connecting multiple Ethernet devices together.
The connecting is fully transparent: hosts connected to one Ethernet device see hosts
connected to the other Ethernet devices directly.
Le pont Ethernet de Linux peut tre utilis pour connecter plusieurs interfaces
Ethernet ensemble. La connexion est compltement transparente : les htes connects
une interface voient directement les htes connexts aux autres interfaces ;
ebtables.
Description : Ethernet bridge frame table administration Ebtables is used to set up,
maintain, and inspect the tables of Ethernet frame rules in the Linux kernel. It is
analogous to iptables, but operates at the MAC layer rather than the IP layer.
Ebtales est la couche Ethernet ce qu'iptables est la couche IP.
Un aptitude install bridge-utils ebtables fera l'affaire.
Construire le pont
Bon gros avertissement
Toute la manipulation qui suit est faite localement sur le machin. Si vous devez la faire
distance, voyez d'abord cette page de mise en garde sur les pertes de contrle IP. Vous voil
prvenus.
Pour bien comprendre quel point IP n'est pas ncessaire pour le bon fonctionnement d'un
pont Ethernet, nous allons nous passer de toute configuration IP.
~# ifdown eth0
Internet Systems Consortium DHCP Client V3.1.0
Copyright 2004-2007 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

Listening on LPF/eth0/00:05:5d:df:fe:35
Sending on LPF/eth0/00:05:5d:df:fe:35
Sending on Socket/fallback
DHCPRELEASE on eth0 to 82.243.80.254 port 67
Puis, nous activons eth0 et eth1, mais sans les configurer :
~# ifconfig eth0 up
~# ifconfig eth1 up
~# ifconfig

eth0 Link encap:Ethernet HWaddr 00:05:5d:df:fe:35
adr inet6: fe80::205:5dff:fedf:fe35/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...
eth1 Link encap:Ethernet HWaddr 00:05:5d:e1:f7:ac
adr inet6: fe80::205:5dff:fee1:f7ac/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...
Nous n'avons sur nos deux interfaces qu'une adresse IPv6 de type lien local. Nous allons
maintenant utiliser brctl pour construire le pont :
~# brctl addbr br0
~# brctl addif br0 eth0
~# brctl addif br0 eth1

~# ts2b7:~# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.00055ddffe35 no eth0
eth1
Nous avons bien un pont br0. Un pont, a dispose au moins de deux bouts, ils sont ici eth0 et
eth1. Si tout se passe comme nous le souhaitons, les paquets ethernet devraient passer ce pont
selon les rgles en usage sur ce type d'quipement.
Nous allons maintenant activer ce pont :
ifconfig br0 up
Vrifions la configuration IP de tout ceci :
~# ifconfig
br0 Link encap:Ethernet HWaddr 00:05:5d:df:fe:35
adr inet6: fe80::205:5dff:fedf:fe35/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...

eth0 Link encap:Ethernet HWaddr 00:05:5d:df:fe:35
adr inet6: fe80::205:5dff:fedf:fe35/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...

eth1 Link encap:Ethernet HWaddr 00:05:5d:e1:f7:ac
adr inet6: fe80::205:5dff:fee1:f7ac/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...
Nous n'avons que des IPv6 lien local. Notez que br0 apparat comme une interface part
entire, avec l'adresse MAC de l'interface eth0. Pour qu'il n'y ait absolument aucune
ambigit dans cette manip, nous allons jusqu' supprimer ces adresses IPv6 locales :
~# ip -6 addr del fe80::205:5dff:fedf:fe35/64 dev br0
~# ip -6 addr del fe80::205:5dff:fedf:fe35/64 dev eth0
~# ip -6 addr del fe80::205:5dff:fee1:f7ac/64 dev eth1
Ce qui nous donne maintenant :
~# ifconfig
br0 Link encap:Ethernet HWaddr 00:05:5d:df:fe:35
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...

eth0 Link encap:Ethernet HWaddr 00:05:5d:df:fe:35
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...

eth1 Link encap:Ethernet HWaddr 00:05:5d:e1:f7:ac
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...
Plus aucune trace d'IP, v4 comme v6.
Passer le pont
Il suffit de passer le pont
C'est tout de suite l'aventure
Laisse-moi tenir ton jupon
J't'emmn' visiter la nature
Bref, nous dmarrons la station. Une station toute simple, avec une distribution Ubuntu des
familles. Sitt fini le dmarrage, empressons-nous de consulter la configuration rseau :
~$ ifconfig
eth0 Lien encap:Ethernet HWaddr 00:0C:6E:AD:B6:99
inet adr:82.243.80.13 Bcast:82.243.80.255 Masque:255.255.255.0
adr inet6: 2a01:5d8:52f3:500d:20c:6eff:fead:b699/64 Scope:Global
adr inet6: fe80::20c:6eff:fead:b699/64 Scope:Lien
...

Ca marche, nous avons notre IPv4 publique et aussi nos deux IPv6. Si nous avons une IPv4
publique sur eth0 c'est bien que la couche IPv4 de notre station n'a pas vu le machin
non ?
Voyons la table de routage IPv4 :
~$ route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use
Iface
82.243.80.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
0.0.0.0 82.243.80.254 0.0.0.0 UG 100 0 0
eth0
a se confirme, pour IPv4, le machin n'intervient pas dans les routes.
Et les routes IPv6 ?
~$ route -A inet6
Table de routage IPv6 du noyau
Destination Next Hop
Flags Metric Ref Use Iface
::1/128 ::
U 0 4 1 lo
2a01:5d8:52f3:500d:20c:6eff:fead:b699/128 ::
U 0 152 1 lo
2a01:5d8:52f3:500d::/64 ::
UA 256 0 0 eth0
fe80::20c:6eff:fead:b699/128 ::
U 0 3 1 lo
fe80::/64 ::
U 256 0 0 eth0
ff00::/8 ::
U 256 0 0 eth0
::/0 fe80::207:cbff:fe1f:f5a
UGDA 1024 74 0 eth0
L encore, le machin n'est pas visible.
Un petit traceroute IPv4 vers www.kame.net ?
~$ sudo traceroute www.kame.net
traceroute to www.kame.net (203.178.141.194), 64 hops max, 40 byte packets
1 82.243.80.254 (82.243.80.254) 37 ms 37 ms 37 ms
2 213.228.20.254 (213.228.20.254) 44 ms * 37 ms
...
23 orange.kame.net (203.178.141.194) 308 ms 308 ms 308 ms
Le hop 1 est bien la passerelle par dfaut du fournisseur d'accs. Il n'y a plus de doutes
avoir pour IPv4.
Et pour ipV6 ?
~/.ssh$ sudo traceroute6 www.kame.net
traceroute to www.kame.net (2001:200:0:8002:203:47ff:fea5:3085) from
2a01:5d8:52f3:500d:20c:6eff:fead:b699, 30 hops max, 16 byte packets
1 2a01:5d8:52f3:500d::1 (2a01:5d8:52f3:500d::1) 1.549 ms 0.594 ms
0.575 ms
2 2a01:5d8:e000:9d1::4 (2a01:5d8:e000:9d1::4) 51.501 ms 48.268 ms
48.146 ms
...
24 orange.kame.net (2001:200:0:8002:203:47ff:fea5:3085) 336.759 ms
337.563 ms 336.053 ms
L encore, le hop 1 correspond bien la passerelle du fournisseur. Plus de doutes non plus
pour IPv6.
Nous avons rempli la premire partie du contrat, le Machin est compltement invisible,
aussi bien en IPv4 qu'en IPv6. L'est-il aussi au niveau Ethernet ? Des ponts, il y en a plein les
switch et ces derniers sont bien invisibles au niveau Ethernet. Vrifions tout de mme.
Vrifications de routine
Un 'tit coup de rdisc6 :
~$ rdisc6 eth0
Solicitation de ff02::2 (ff02::2) sur eth0...

Limite de saut (TTL) : 64 ( 0x40)
Conf. d'adresse par DHCP : Non
Autres rglages par DHCP : Non
Prfrence du routeur : moyen
Dure de vie du routeur : 1800 (0x00000708) secondes
Temps d'atteinte : non indiqu (0x00000000)
Temps de retransmission : non indiqu (0x00000000)
Prfixe : 2a01:5d8:52f3:500d::/64
Dure de validit : 86400 (0x00015180) secondes
Dure de prfrence : 86400 (0x00015180) secondes
Recursive DNS server : 2a01:5d8:e0ff::2
Recursive DNS server : 2a01:5d8:e0ff::1
DNS servers lifetime : 600 (0x00000258) secondes
MTU : 1480 octets (valide)
Adresse source de lien : 00:07:CB:1F:0F:5A
de fe80::207:cbff:fe1f:f5a
OK, le routeur IPv6 habituel.
~$ ping6 -c 3 fe80::207:cbff:fe1f:f5a%eth0
PING fe80::207:cbff:fe1f:f5a%eth0(fe80::207:cbff:fe1f:f5a) 56 data bytes
64 bytes from fe80::207:cbff:fe1f:f5a: icmp_seq=1 ttl=64 time=1.73 ms
64 bytes from fe80::207:cbff:fe1f:f5a: icmp_seq=2 ttl=64 time=0.701 ms
64 bytes from fe80::207:cbff:fe1f:f5a: icmp_seq=3 ttl=64 time=0.699 ms

--- fe80::207:cbff:fe1f:f5a%eth0 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.699/1.044/1.732/0.486 ms

~$ ip -6 neigh show
fe80::207:cbff:fe1f:f5a dev eth0 lladdr 00:07:cb:1f:0f:5a router DELAY
Le voisinage, c'est bien le routeur du fournisseur d'accs et pas notre pont, preuve que c'est un
pont
Couper les ponts IPv4
Nous allons maintenant raliser un pont qui ne fonctionnera que pour IPv6. Mais avant,
prenons quelques prcautions, car il n'y aura plus de connectivit IPv4 pour notre station de
travail.
DNS Free (IPv4) :
option domain-name-servers 212.27.54.252,212.27.53.252;
(information prise dans les logs du client dhcp).
Sur le machin
Commenons par couper le pont IPv4 au moyen d'ebtables :
~# ebtables -t broute -A BROUTING -p ! ipv6 -j DROP
A ce niveau, notre station de travail ne dispose plus d'IPv4. Il nous faut maintenant configurer
le machin en routeur NAT IPv4. C'est une formalit.
une IPv4 dynamique pour eth0
Bien que notre IPv4 soit fixe, la configuration est tout de mme rcupre par DHCP :
~# dhclient eth0
Internet Systems Consortium DHCP Client V3.1.0
Copyright 2004-2007 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/sw/dhcp/

Listening on LPF/eth0/00:05:5d:df:fe:35
Sending on LPF/eth0/00:05:5d:df:fe:35
Sending on Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7
DHCPOFFER from 82.243.80.254
DHCPREQUEST on eth0 to 255.255.255.255 port 67
DHCPACK from 82.243.80.254
bound to 82.243.80.13 -- renewal in 604800 seconds.
Une IPv4 fixe pour eth1
Nous allons nous faire un petit 192.168.254.0/24 pour changer un peu de la routine:
~# ip addr add 192.168.254.1/24 dev eth1
Un masquerade pour eth0
Nous faisons du NAT sur tout ce qui sort par eth0 :
~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Activer le routage
(Ne pas oublier ce dtail, si l'on souhaite garder sa chevelure intacte)
echo 1 > /proc/sys/net/ipv4/ip_forward
Vrifications
~# ifconfig
br0 Link encap:Ethernet HWaddr 00:05:5d:df:fe:35
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...

eth0 Link encap:Ethernet HWaddr 00:05:5d:df:fe:35
inet adr:82.243.80.13 Bcast:82.243.80.255 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...

eth1 Link encap:Ethernet HWaddr 00:05:5d:e1:f7:ac
inet adr:192.168.254.1 Bcast:0.0.0.0 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...
Tout l'air normal.
~# route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use
Iface
82.243.80.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
192.168.254.0 0.0.0.0 255.255.255.0 U 0 0 0
eth1
0.0.0.0 82.243.80.254 0.0.0.0 UG 0 0 0
eth0
Tout l'air normal aussi. Notre routeur NAT IPv4 devrait tre oprationnel
Sur la station de travail
Commenons par dsactiver eth0
:~$ sudo ifdown eth0
Ractivation de eth0, mais sans configuration :
:~$ sudo ifconfig eth0 up
Ajout d'une adresse IPv4 compatible avec celle que nous avons mis sur eth1 du Machin :
~$ sudo ip addr add 192.168.254.2/24 dev eth0
Ajout d'une route par dfaut qui pointe sur Machin :
~$ sudo ip route add default via 192.168.254.1 dev eth0
Vrifications d'usage :
:~$ route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use
Iface
192.168.254.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
0.0.0.0 192.168.254.1 0.0.0.0 UG 0 0 0
eth0
Si nous dsirons tre efficaces, il faut maintenant renseigner le systme sur les DNS
consulter pour la rsolution des noms. Editons /etc/resolv.conf pour qu'il ressemble ceci
:
~$ cat /etc/resolv.conf
nameserver 212.27.54.252
nameserver 212.27.53.252
Et voyons si a roule :
~$ ping -c 1 www.kame.net
PING www.kame.net (203.178.141.194) 56(84) bytes of data.
64 bytes from orange.kame.net (203.178.141.194): icmp_seq=1 ttl=43 time=313
ms

--- www.kame.net ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 313.359/313.359/313.359/0.000 ms


~$ ping6 -c 1 www.kame.net
PING www.kame.net(orange.kame.net) 56 data bytes
64 bytes from orange.kame.net: icmp_seq=1 ttl=47 time=340 ms

--- www.kame.net ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 340.627/340.627/340.627/0.000 ms
a roule. En IPv4 comme en IPv6, nous pouvons faire ping sur la tortue. Je vous laisse
vrifier par vous-mme, avec des traceroute biens sentis, que le Machin est vu comme
un routeur en IPv4 et comme rien du tout en IPv6.
Fignolage
Bien entendu, il reste quelques oprations cosmtiques raliser :
faire un peu de filtrage sanitaire en IPv4 sur le Machin ;
installer un DNS cache pour que nos clients du LAN n'aient pas connatre les DNS
du fournisseur d'accs ;
installer un DHCP sur le LAN pour que nos clients se configurent automatiquement en
IPv4 ;
et surtout, automatiser tout a pour que nous ne soyons pas oblig de ressortir nos
notes au prochain reboot du Machin.
Les trois premiers points, voil longtemps que nous savons faire. Voyons plutt comment
automatiser la configuration du Machin.
Automatiser le machin
La suite s'adresse principalement aux (heureux) utilisateurs de Debian et drives. En effet la
configuration du rseau est assez particulire sur ces distributions et trs diffrente de la faon
de faire sur les Red-Hat like ou autres Slackware / Gentoo / Suse like .
Debian utilise un fichier /etc/network/interfaces et plusieurs rpertoires contenant des
scripts excuter en pre-up, up, down et post-down . Le paquet bridge-utils a dj
install les scripts /etc/network/if-pre-up.d/bridge et /etc/network/if-post-
down.d/bridge aux-quels il est inutile et mme dconseill de toucher. Tout va pouvoir se
faire partir du fichier /etc/network/interfaces :
auto br0
iface br0 inet manual
bridge_ports eth0 eth1
bridge_maxwait 0
pre-up ebtables -t broute -A BROUTING -p ! ipv6 -j DROP
down ebtables -t broute -F

auto eth0
iface eth0 inet dhcp
up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
down iptables -t nat -F

auto eth1
iface eth1 inet static
address 192.168.254.1
netmask 255.255.255.0
1. iface br0 inet manual indique que l'interface br0 sera configure par les scripts
ifupdown ;
2. bridge_ports eth0 eth1 et bridge_maxwait 0 sont des directives qui seront
utilises par ces scripts pour configurer le pont ;
3. pre-up ebtables -t broute -A BROUTING -p ! ipv6 -j DROP (fondamental)
permettra d'interdire le pont au trafic IPv4, lorsque le pont est activ ;
4. down ebtables -t broute -F remettra les choses plat en ce qui concerne les
tables du pont lorsque ce dernier est dsactiv.
Ce n'est pas dans mes habitudes, mais si vous souhaitez avoir plus d'informations sur les
directives de configuration des interfaces rseau sous Debian, je vous dirai man interfaces
(Lorsque l'on veut jouer avec IPv6, il faut savoir donner de sa personne).
En ce qui concerne l'interface eth0, la ligne up iptables -t nat -A POSTROUTING -o
eth0 -j MASQUERADE est tout fait minimaliste, nous sommes l pour vrifier que a
fonctionne. Dans la pratique, il faudra ici invoquer un script qui crive de vraies rgles de
filtrage IPv4.
De mme, il faudra ventuellement rflchir des rgles ebtables et IP6tables pour protger
au moins notre machin contre d'ventuelles attaques IPv6.
Quelques vrifications
Voyons la configuration IP des divers composants :
~# ifconfig
br0 Link encap:Ethernet HWaddr 00:05:5d:df:fe:35
adr inet6: 2a01:5d8:52f3:500d:205:5dff:fedf:fe35/64 Scope:Global
adr inet6: fe80::205:5dff:fedf:fe35/64 Scope:Lien
...

eth0 Link encap:Ethernet HWaddr 00:05:5d:df:fe:35
inet adr::82.243.80.13 Bcast::82.243.80.255
Masque:255.255.255.0
adr inet6: fe80::205:5dff:fedf:fe35/64 Scope:Lien
...

eth1 Link encap:Ethernet HWaddr 00:05:5d:e1:f7:ac
inet adr:192.168.254.1 Bcast:192.168.254.255
Masque:255.255.255.0
adr inet6: fe80::205:5dff:fee1:f7ac/64 Scope:Lien
...
L'adresse globale IPv6 sur br0 n'est pas fondamentale si le machin ne doit pas lui-mme
accder l'internet par IPv6. Eth0 et eth1 disposent de leurs adresses IPv4 convenablement,
les adresses IPv6 sont totalement inutiles ici, mais ne sont pas gnantes.
Les routes IPv4 :
~# ip route ls
82.243.80.0/24 dev eth0 proto kernel scope link src 82.243.80.13
192.168.254.0/24 dev eth1 proto kernel scope link src 192.168.254.1
default via 82.243.80.254 dev eth0
Tout ceci est parfait. Les routes IPv6 maintenant :
~# ip -6 route ls
2a01:5d8:52f3:500d::/64 dev br0 proto kernel metric 256 expires 85974sec
mtu 1480 advmss 1420 hoplimit 4294967295
fe80::/64 dev eth0 metric 256 expires 21332903sec mtu 1500 advmss 1440
hoplimit 4294967295
fe80::/64 dev eth1 metric 256 expires 21332903sec mtu 1500 advmss 1440
hoplimit 4294967295
fe80::/64 dev br0 metric 256 expires 21332903sec mtu 1480 advmss 1420
hoplimit 4294967295
default via fe80::207:cbff:fe1f:f5a dev br0 proto kernel metric 1024
expires 1369sec mtu 1480 advmss 1440 hoplimit 64
Notez encore une fois que ceci n'est pas ncessaire si le machin ne doit pas lui-mme accder
l'internet en IPv6.
Vrification des ebtables :
~# ebtables -t broute -L
Bridge table: broute

Bridge chain: BROUTING, entries: 1, policy: ACCEPT
-p ! IPv6 -j DROP
C'est bon.
Et IPtables (IPv4) ?
~# iptables-save
# Generated by iptables-save v1.4.0 on Tue May 6 14:59:45 2008
*nat
:PREROUTING ACCEPT [738:380896]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [127:9544]
-A POSTROUTING -o eth0 -j MASQUERADE
Impeccable.
Attention toutefois, un ifdown br0 fera tomber toutes les interfaces et pas seulement br0. Il
faudrait sans doute tudier le script /etc/network/if-post-down.d/bridge du paquetage
bridge-utils ou crer un script /etc/network/if-down.d/bridge spcifique pour
amliorer ce comportement.
Le bridge et la couche IP
Dsagrments en perspective

Lorsque le pont est construit (entre eth0 et eth1 dans l'exemple), le flux des donnes est
directement chang, si ncessaire, entre eth0 et eth1 au niveau Ethernet, et donc l'insu
complet de la couche IP. Mme si eth0 et eth1 disposent d'une adresse IP, ces interfaces
ne remonteront plus les donnes qu'elles reoivent au niveau IP.
Autrement dit, si vous faites a distance en vous connectant sur la machine aussi bien par
eth0 que par eth1, sitt que le pont sera oprationnel, vous en perdrez le contrle sans
rmission.
Heureusement tout de mme, il existe des solutions pour rpondre ce dsagrment potentiel.
Et br0 ?
Lorsque nous crons un pont avec brctl addbr, le nom attribu ce pont (ici br0) apparait
comme un nud rseau auquel il est possible d'attribuer une adresse IP. br0 sera accessible
par IP. Tous ceux qui ont eu l'occasion d'avoir entre les mains un switch administrable savent
que ces dispositifs disposent d'une adresse IP qui permet leur administration par un moyen
plus sympathique que le terminal VT100 sur le port RS232.
Ce quoi il faut prendre garde
Nous accdons une machine distante, disons par eth0 pour fixer les ides. Nous voulons sur
cette machine configurer un pont dans lequel eth0 sera intgr.
Lorsque eth0 sera intgre au pont br0, nous perdrons instantanment et sans rmission la
connexion. Si la machine n'est pas physiquement accessible, nous sommes mal barrs.
Le moyen le plus simple est de disposer d'une interface supplmentaire, qui ne doit pas tre
intgre au pont et par laquelle nous pouvons accder la machine, mais ceci n'est bien
entendu pas toujours possible.
Solutions ?
Dans notre cas o le pont n'est destin qu'au trafic IPv6 et non IPv4, la premire prcaution
prendre est de s'assurer que la rgle ebtables -t broute -A BROUTING -p ! ipv6 -j
DROP est en place avant d'activer le pont.
Attribuer une adresse IPv6 au pont br0 aprs l'avoir cr mais avant de lui assigner les
interfaces Ethernet peut galement tre d'un grand secours.

IP et le Routage
Les rseaux informatiques ont ceci d'intressant: Ils couvrent des besoins aussi simples que la
connexion entre deux htes sur un rseau local que l'interconnexion de systmes l'chelle
plantaire.
Ici, nous allons nous intresser quelques aspects ncessaires une bonne comprhension de
ce qu'il se passe sur notre connexion Internet par le cble (nous verrons pourquoi cette
connexion diffre fondamentalement d'autres moyens comme l'ADSL, le RTC ou l' ISDN).
Vous trouverez dans cet expos:
Une dfinition de ce que sont les adresses MAC et IP.
Ce que sont les rseaux physiques et les rseaux logiques
Quels sont les composants d'interconnexion de rseaux les plus courants.
Comment les donnes circulent d'un rseau l'autre.
Une manipulation destine toucher du doigt les problmes du routage.
Physique/Logique
Qu'est-ce qu'une adresse MAC ?
Media Access Control
C'est une adresse crite en dur dans le firmware d'un quipement rseau, le plus
souvent une interface rseau.
Cette adresse est dfinie sur 6 octets.
Les trois premiers (les plus gauche) sont attribus au constructeur.
Les trois derniers sont spcifiques un quipement matriel donn.
Au total, une adresse MAC est sense tre unique au monde.
Son but est d'identifier sans aucune ambigit possible un nud sur un rseau. Elle est utilise
par le niveau 2 du modle OSI pour l'acheminement des donnes d'une source vers une cible.
Il faut bien comprendre que cette adresse est indispensable, parce qu'elle est la seule qui soit
dfinie la mise en route d'un systme, puisqu'elle rside dans une ROM. D'ailleurs, certains
protocoles rseaux simples se contentent de cette adresse pour fonctionner. NetBEUI en est
un exemple. De plus, au niveau 2 du modle OSI, c'est la seule adresse en mesure d'tre
utilise.
Toute autre adresse qui sera ajoute avec l'installation du systme sera une adresse plus
volue, destine grer les rseaux de faon logique, mais l'adresse MAC demeure
indispensable.
Avantages et inconvnients
Nous l'avons vu, le principal avantage est que cette adresse unique est disponible
immdiatement lors de la procdure de boot et qu'elle est alors la seule disponible, de
plus, c'est la seule qui soit utilisable dans les couches basses du rseau.
Son principal inconvnient est qu'elle est physiquement attache un hte. Pour en changer, il
faut changer d'interface (il y a des astuces pour qu'il en soit autrement, surtout avec Linux,
mais je ne vous les dvoilerai pas Un internaute politiquement correct n'a pas besoin de les
connaitre). De plus, la rpartition de ces adresses sur un rseau est faite de manire quasi
alatoire, il n'y a que le constructeur de l'interface qui maitrise cette adresse. Il est donc
impossible d'organiser cet adressage de manire logique.
Adresse IP
Nous n'allons pas revenir sur les dtails de cette adresse, abondamment traits dans le chapitre
prcdent. Cette adresse sera ici d'une importance fondamentale.
Mise en garde
Nous avons dit et redit que la couche 2 n'utilise que l' adresse MAC pour acheminer les
donnes. Au passage de la couche 3 (qui utilise une adresse logique, IP dans notre cas) la
couche 2 (et rciproquement), il faudra donc disposer d'une table d'quivalence entre les
adresses IP et les adresses MAC du rseau.
Rseau physique ou logique
Ici, nous allons faire abstraction du support choisi (autant que possible) et nous intresser la
faon de connecter les systmes entre eux.
Un rseau physique
Le principe
Voici un rseau physique:
Tous les htes sont connects entre eux au moyen du mme support de transport.
Tous les htes sont en mesure de communiquer entre eux directement, sans besoin
d'une quelconque passerelle.
Un rseau physique, c'est relativement facile comprendre. Vous prenez un HUB, vous y
connectez autant de postes que vous pouvez avec des cbles de cuivre en paire torsade et
vous avez construit un rseau physique.
Vous vous arrangez pour que tous les postes disposent du mme logiciel rseau, par exemple
WIndows avec le protocole NetBEUI et le tour est jou. Vous pouvez partager des ressources
entre les postes. Finalement, c'est assez simple. Oui mais, c'est parce que vos besoins sont
simples. Si vous voulez utiliser TCP/IP, il faudra alors dfinir des adresses IP pour chacune de
vos machines, adresses choisies dans le mme rseau logique (voir le chapitre TCP/IP) et
votre rseau fonctionnera aussi bien. Pourtant, NetBEUI n'introduit pas d'adresse logique.
Comment a marche
La question est trs complique, mais il est encore possible ici de donner une rponse simple
et satisfaisante pour l'instant:
Les informations qui transitent sur le rseau sont visibles par tous les htes du rseau.
Cependant, un systme d'adresse unique par hte (adresse MAC) permet au destinataire de se
reconnatre et de rcuprer l'information. Disons que dans un groupe de 5 personnes qui
vaquent chacunes leurs occupations, vous posez une question un membre du groupe. Tout
le groupe entend la question, mais celui qui elle est destine se reconnat et vous rpond.
Les autres entendent aussi la rponse, mais savent qu'ils ne sont pas concerns et ne
l'coutent pas. Notez que si vous tes capable d'analyser parfaitement tous les mcanismes
mis en oeuvre dans cet exemple, vous avez dj pratiquement tout compris sur les principes
des rseaux locaux.
Ca peut se compliquer...
Nous verrons, avec les passerelles, qu'un rseau physique peut tre un peu plus compliqu que
a. Les ponts, qui sont des passerelles travaillant au niveau 2 (Avec les adresses MAC)
permettent de connecter deux rseaux physiques pour qu'ils n'en fassent plus qu'un.
Un rseau logique
Le principe
La notion de rseau logique est dj un peu plus dlicate, parce qu'elle n'est pas directement
lie au cblage.
Il est peut-tre ncessaire de reprendre le modle thorique d'un OS rseau. A gauche, le
modle OSI en 7 couches, droite le modle DOD de TCP/IP, plus pragmatique. Nous allons
tout de mme utiliser le modle OSI qui dcompose mieux les diverses fonctions.

Pour l'tude des rseaux, ce sont surtout les trois premires couches OSI qui nous intressent.
Nous avons dj parl de la couche physique et de la couche liaison. Parler d'un rseau
physique, c'est parler d'un rseau en le regardant au niveau 2.
Un rseau logique en revanche fait intervenir la couche 3. Il existe toujours une adresse
unique par hte, mais cette adresse est logique, l'adresse IP en ce qui nous concerne, et cette
adresse est exploite par niveau 3
Comment a marche
Comme l'adresse utilise est fixe par une stratgie dfinie par l'architecte du rseau et non
par le hasard de la construction de la machine, il devient possible d'organiser les transferts de
donnes d'une manire optimale en fonction des besoins. Deux rseaux logiques ne pourront
communiquer entre eux que par l'intermdiaire d'un routeur, ce qui permet non seulement
d'optimiser les flux de donnes, mais encore d'assurer un minimum de scurit parce que l'on
va pouvoir effectuer un contrle d'accs au niveau de ces routeurs (fonctions de firewalls )
Il ne nous reste plus maintenant qu' regarder d'un peu plus prs les passerelles les plus
courantes.
Passerelles
C'est quoi, une passerelle ?
Nous allons dire que c'est un lment
qui permet d'inter-connecter plusieurs rseaux de manire permettre le passage de
l'information d'un rseau l'autre. Je n'ai volontairement pas prcis s'il s'agissait de rseaux
logiques ou physiques, parce que tout est possible dans ce domaine.
Les principales techniques
Nous n'allons pas parler de tous les types de passerelles que l'on peut rencontrer, il y en a
beaucoup trop. Nous allons regarder d'un peu plus prs deux types courants que sont les ponts
et les routeurs. Ils ne travaillent pas au mme niveau du modle OSI et ne servent pas tout
fait la mme chose, bien qu'ils soient tous les deux des lments d'interconnexion.
Comme nous avons vu qu'il existe deux adresses pour un nud donn: l'une matrielle
(adresse MAC) qui est utilise au niveau 2 et l'autre logicielle (IP le plus souvent) utilise au
niveau 3, nous pouvons nous attendre trouver des passerelles travaillant aux niveaux 2: Les
ponts, ou au niveau 3: Les routeurs.
Les ponts
Nous avons deux rseaux physiques Ethernet totalement disjoints. Ces deux rseau utilisent
TCP/IP et les htes disposent d'adresses IP dans la mme classe, avec le mme masque de
sous rseau. Cependant, il n'existe aucun doublon dans les adresses entre les deux rseaux.
Rseau A Rseau B
Adresses IP
192.168.0.1
192.168.0.50
Adresses IP
192.168.0.128
192.168.0.170
Masque de sous
rseau
255.255.255.0
Masque de sous
rseau
255.255.255.0
Nous dsirons raccorder ces deux rseaux physiques pour n'en faire plus q'un et nous allons le
faire avec un pont

Qu'est-ce qu'un pont ?

Description gnrale
Un pont dispose d'un pied dans chaque rseau. Il agit au niveau 2, sur la couche de liaison. Il
est capable de laisser passer les trames d'un rseau l'autre, mais ne le fait pas btement.
Un pont, aprs une priode d'apprentissage, sait reprer les adresses MAC des nuds de
chaque ct du pont. Il ne laissera passer d'un ct l'autre que les trames qui ont rellement
besoin de passer; si bien que le trafic sur chaque ct se trouve optimis, la condition bien
entendu que l'architecture gnrale ait t pense dans ce sens. Un pont est trs efficace si les
deux rseaux A et B communiquent peu entre eux. Si le rseau A utilise principalement les
services des serveurs du rseau B et rciproquement, le pont perd compltement son intrt,
autant le remplacer par un bout de cble.
Particularits
Un pont, travaillant au niveau 2, est indpendant des couches rseau suprieures. En
d'autres termes, un pont fonctionnera aussi bien avec TCP/IP qu'avec un protocole non
routable (pas d'adresses logiques) comme NetBEUI.
Il faut imprativement que les protocoles rseau soient les mmes de chaque ct du
pont, l'change se faisant au niveau des trames.
o Un pont ne pourra pas interconnecter un rseau Ethernet avec un rseau Token
Ring par exemple.
o Un pont ne pourra pas interconnecter deux rseaux Ethernet, l'un utilisant
TCP/IP et l'autre un autre protocole (IPX/SPX par exemple).
Deux rseaux physiques ponts apparaissent comme un seul rseau physique. Au
niveau de la couche rseau (et des couches suprieures), le pont est transparent. Ceci
est un dtail fondamental.
Le principe du pont est repris dans les switches, que l'on pourrait considrer comme des
HUBS volus.
Conclusion
Un pont est une passerelle particulire, que l'on utilise au sein d'un mme rseau physique,
pour optimiser le trafic des trames sur ce rseau.
Les routeurs
Nous avons ici aussi deux rseaux physiques Ethernet totalement disjoints. Ces deux rseau
utilisent TCP/IP mais les htes disposent d'adresses IP de rseau diffrentes (ou de mme
rseau, mais avec des masques de sous rseaux diffrents, ce qui introduirait la notion de sous
rseau logique.
Rseau A Rseau B
Adresses IP
192.168.0.1
192.168.0.50
Adresses IP
192.168.1.1
192.168.1.50
Masque de sous
rseau
255.255.255.0
Masque de sous
rseau
255.255.255.0
Nous dsirons raccorder ces deux rseaux physiques pour qu'ils puissent communiquer, nous
allons le faire avec un routeur.

Qu'est-ce qu'un routeur ?

Un routeur agit au niveau de la couche rseau, d'IP par exemple. Le rsultat peut paratre
similaire celui d'un pont, il n'en est rien.
Description gnrale
Le routeur lui aussi dispose d'un pied dans chaque rseau, mais son fonctionnement est plus
volu. Alors que le pont utilise les adresses MAC, le routeur utilise les adresses rseau (IP
en ce qui nous concerne).
Particularits
Les tables de routage ne sont pas construites par un simple apprentissage, comme dans
un pont, mais sont mises en place soit la main, soit automatiquement au moyen de
protocoles plus volus.
Les deux rseaux raccords restent deux rseaux physiques diffrents, les adresses
MAC d'un ct restent totalement inconnues de l'autre ct, ce qui n'est pas le cas du
pont. (Nous le comprendrons mieux avec les manips qui suivent).
Les rseaux A et B peuvent tre de nature diffrente.
Le protocole rseau (TCP/IP par exemple) doit tout de mme tre identique des deux
cts et doit tre routable (ce qui n'est pas ncessaire avec un pont).
Notez q'un routeur peut interconnecter plus que deux rseaux, il lui suffit de disposer d'un
pied dans chaque rseau interconnecter. (Des ponts multivoies existent cependant aussi).
D'autres solutions bases sur un principe comparable existent et permettent d'interconnecter
des rseaux ayant des protocoles diffrents, mais ce n'est pas l'objet de cet expos.
Conclusions
Un routeur permet de faire communiquer deux rseaux logiques diffrents. Nous verrons plus
loin ce que cela induit dans le transport des donnes. Si l'on interconnecte deux rseaux
physiques avec un routeur, il faudra absolument que ces deux rseaux physiques soient
galement des rseaux (ou sous rseaux) logiques diffrents (NetID diffrents). Un routeur
conservera la notion de rseaux physiques diffrents. C'est trs important, surtout lorsque l'on
utilise des dispositifs comme DHCP pour attribuer des adresses IP aux htes du rseau. Un
DHCP a une porte limite son rseau physique, autrement dit, un DHCP ne peut pas
fournir d'adresse un hte situ de l'autre ct d'un routeur.
Ah, mais alors, comment se fait-il que chez nous, cbls de Marseille, il n'existe qu'un seul
serveur DHCP (62.161.120.11) et qu'il y a pourtant au moins quatre rseaux logiques et qu'en
plus, le DHCP n'est dans aucun de ces rseaux?
C'est parce qu'il existe une exception cette rgle, si l'on utilise un agent de relais DHCP. Ce
dispositif permet, s'il est install sur un routeur, de distribuer des adresses IP sur les rseaux
inter-connects par ce routeur avec un seul DHCP situ sur l'un de ces rseaux; la condition
bien entendu, que ce DHCP dispose de plages d'adresses correspondant chacun de ces
rseaux, ce qui est le cas pour FTCI. Dans la pratique, l'agent de relais intercepte les
requtes des clients DHCP et les retransmet au(x) serveur(s) indiqu(s) dans sa configuration.
Vous trouverez plus de dtails sur le fonctionnement de DHCP dans le chapitre qui lui est
ddi dans ce site
Mais encore...
Il existe bien d'autres dispositifs capables par exemple d'interconnecter des rseaux utilisant
des supports diffrents (optique, cuivre), des protocoles de transport diffrents (Ethernet,
Token Ring) et mme des protocoles diffrents (TCP/IP, IPX/SPX). Nous n'en parlerons pas.
Le masquage d'adresse
En revanche, il existe une technique de passerelle intressante qui est le masquage d'adresse.
Cette technique est bien utile lorsque l'on souhaite interconnecter un rseau priv pour qu'il
devienne client d'un rseau public. (Client, parce que a fonctionne bien dans un sens,
beaucoup moins bien dans l'autre et nous allons vite comprendre pourquoi).
Ici, le routeur dispose d'une fonction particulire de changement d'adresse logique (IP). Le
principe en est dtaill dans le chapitre Partage de connexion internet . Disons simplement
ici que:
D'un ct, nous avons un rseau priv, avec des adresses IP prises dans un bloc
rserv cet effet, par exemple 192.168.0.0 Un routeur sur l'Internet qui voit passer
une telle adresse doit immdiatement mettre le paquet la poubelle, ces adresses sont
rserves un usage priv.
De l'autre ct nous avons une connexion l'Internet.
La passerelle entre les deux va disposer:
o D'une adresse prive du ct du rseau priv (par exemple 192.168.0.250)
o D'une adresse IP publique, attribue par le fournisseur d'accs (par exemple
213.56.56.250)
Cette passerelle va permettre un hte du rseau priv d'envoyer une requte un serveur de
l'Internet en mettant au passage son adresse publique la place de l'adresse prive du client.
Vu du dehors, on ne verra qu'un seul hte: la passerelle, c'est la raison pour laquelle ce type
d'interconnexion ne permet pas de placer des serveurs publics dans le rseau priv, sauf avec
des artifices pas toujours simples, voire impossible mettre en oeuvre, suivant le produit
utilis. (Linux 2.2.x le permet de faon assez complexe, Linux 2.4.x, avec IPTables, le permet
de faon beaucoup plus simple).
Cette solution est celle que j'utilise pour connecter mes 4 htes privs l'Internet et qui va
intervenir dans les manipulations que nous ferons plus loin, c'est la raison pour laquelle j'en
parle ici.
Hormis ce phnomne de changement d'adresse logique, tout va se passer comme avec un
vrai routeur.
Livraisons
La livraison des donnes
Voyons un peu les mcanismes mis en oeuvre pour le transport de donnes d'un hte un
autre.
Imaginons une application qui doive envoyer des donnes d'un hte A1 un hte A2. Nous
sommes ici sur la couche 7. Les donnes sont prtes tre envoyes, elles vont descendre les
diverses couches du systme. (Nous sommes sur un systme TCP/IP)
D'abord, il faudra rsoudre les noms en adresses IP.
Construire les sockets ncessaires l'tablissement de la connexion.
Plus bas encore, il va falloir trouver l'adresse physique des htes, parce que la couche
liaison (couche 2) ne sait utiliser que ce moyen.
A ce niveau, deux cas de figure peuvent se prsenter

La livraison directe
Les deux htes sont sur le mme rseau physique (et logique), c'est le cas le plus simple. La
source et la cible se trouvant sur le mme rseau, il suffit qu'il y ait quelque part une table de
correspondance entre adresse IP et adresse MAC. Cette table de correspondance est construite
localement, sur chaque hte au moyen du protocole ARP. Cette table ARP est visualisable
avec la commande arp -a
Exemple:
Je vrifie que la table ARP est bien vide.
Depuis mon poste pchris, je fais un ping sur gw1.
Je regarde nouveau l'tat de ma table ARP
E:\>arp -a
Aucune entre ARP trouve
E:\>ping gw1.maison.mrs
Envoi d'une requte 'ping' sur gw1.maison.mrs [192.168.0.250] avec 32
octets de
donnes :
Rponse de 192.168.0.250 : octets=32 temps&lt;10 ms TTL=255
Rponse de 192.168.0.250 : octets=32 temps&lt;10 ms TTL=255
Rponse de 192.168.0.250 : octets=32 temps&lt;10 ms TTL=255
Rponse de 192.168.0.250 : octets=32 temps&lt;10 ms TTL=255
Statistiques Ping pour 192.168.0.250:
Paquets : envoys = 4, reus = 4, perdus = 0 (perte 0%),
Dure approximative des boucles en millisecondes :
minimum = 0ms, maximum = 0ms, moyenne = 0ms
E:\>arp -a
Interface : 192.168.0.10 on Interface 0x1000003
Adresse Internet Adresse physique Type
192.168.0.250 00-20-18-61-90-e3 dynamique
Et, bien entendu, mon sniffeur embusqu sur gw1 n'a rien perdu de l'change:
gw1 est enregistr sous gateway1.maison.mrs (gw1.maison.mrs est un alias)
pchris est enregistr sous pchris.maison.mrs
No. Source Destination Protocol Info
1 pchris.maison.mrs ff:ff:ff:ff:ff:ff ARP Who has
192.168.0.250? Tell 192.168.0.10
2 gateway1.maison.mrs pchris.maison.mrs ARP 192.168.0.250
is at 00:20:18:61:90:e3
3 pchris.maison.mrs gateway1.maison.mrs ICMP Echo (ping)
request
4 gateway1.maison.mrs pchris.maison.mrs ICMP Echo (ping)
reply
5 pchris.maison.mrs gateway1.maison.mrs ICMP Echo (ping)
request
6 gateway1.maison.mrs pchris.maison.mrs ICMP Echo (ping)
reply
7 pchris.maison.mrs gateway1.maison.mrs ICMP Echo (ping)
request
8 gateway1.maison.mrs pchris.maison.mrs ICMP Echo (ping)
reply
9 pchris.maison.mrs gateway1.maison.mrs ICMP Echo (ping)
request
10 gateway1.maison.mrs pchris.maison.mrs ICMP Echo (ping)
reply
11 gateway1.maison.mrs pchris.maison.mrs ARP Who has
192.168.0.10? Tell 192.168.0.250
12 pchris.maison.mrs gateway1.maison.mrs ARP 192.168.0.10
is at 00:20:18:b9:49:37
Remarquez:
Ligne 1 la requte ARP mise en broadcast (ff:ff:ff:ff:ff:ff) par mon poste de travail:
Qui a l'adresse 192.168.0.250 (gw1)? Dites-le 192.168.0.10 (pchris)
Ligne 2 la rponse ARP de gw1 pchris:
192.168.0.250 est 00:20:18:61:90:e3
Viennent ensuite les changes pour la commande ping et enfin (mais ce n'est pas
systmatique) gw1 qui recherche l'adresse MAC de pchris. Ce n'est pas une bonne ide
d'ailleurs, parce qu'il l'a dj. En effet, si l'on regarde le dtail de la trame 1:
Frame 1 (60 on wire, 60 captured)
Arrival Time: Feb 15, 2001 16:02:12.2750
Time delta from previous packet: 0.000000 seconds
Frame Number: 1
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: ff:ff:ff:ff:ff:ff (ff:ff:ff:ff:ff:ff)
Source: 00:20:18:b9:49:37 (pchris.maison.mrs)
Type: ARP (0x0806)
Trailer: 20202020202020202020202020202020...
Address Resolution Protocol (request)
Hardware type: Ethernet (0x0001)
Protocol type: IP (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: request (0x0001)
Sender hardware address: 00:20:18:b9:49:37
Sender protocol address: 192.168.0.10
Target hardware address: 00:00:00:00:00:00
Target protocol address: 192.168.0.250
On s'aperoit que l'adresse MAC de pchris est dj donne dedans. Et si a ne suffisait pas,
l'information se trouve galement dans la trame 2:
Frame 2 (60 on wire, 60 captured)
Arrival Time: Feb 15, 2001 16:02:12.2753
Time delta from previous packet: 0.000285 seconds
Frame Number: 2
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (pchris.maison.mrs)
Source: 00:20:18:61:90:e3 (gateway1.maison.mrs)
Type: ARP (0x0806)
Trailer: 769E8580000000010000000020454E45...
Address Resolution Protocol (reply)
Hardware type: Ethernet (0x0001)
Protocol type: IP (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: reply (0x0002)
Sender hardware address: 00:20:18:61:90:e3
Sender protocol address: 192.168.0.250
Target hardware address: 00:20:18:b9:49:37
Target protocol address: 192.168.0.10
La livraison indirecte
Cette fois-ci, le transfert de donnes doit passer par le routeur, parce que le destinataire est
dans un autre rseau logique. Prenons au hasard ftp.oleane.net:(195.25.12.28)
E:\>arp -a
Aucune entre ARP trouve
E:\&gt;ping 195.25.12.28
Envoi d'une requte 'ping' sur 195.25.12.28 avec 32 octets de donnes :
Rponse de 195.25.12.28 : octets=32 temps=30 ms TTL=245
Rponse de 195.25.12.28 : octets=32 temps=40 ms TTL=245
Rponse de 195.25.12.28 : octets=32 temps=30 ms TTL=245
Rponse de 195.25.12.28 : octets=32 temps=30 ms TTL=245
Statistiques Ping pour 195.25.12.28:
Paquets : envoys = 4, reus = 4, perdus = 0 (perte 0%),
Dure approximative des boucles en millisecondes :
minimum = 30ms, maximum = 40ms, moyenne = 32ms
E:\>arp -a
Interface : 192.168.0.10 on Interface 0x1000003
Adresse Internet Adresse physique Type
192.168.0.250 00-20-18-61-90-e3 dynamique
Que s'est-il pass ?
No. Source Destination Protocol Info
1 pchris.maison.mrs ff:ff:ff:ff:ff:ff ARP Who has
192.168.0.250? Tell 192.168.0.10
2 gateway1.maison.mrs pchris.maison.mrs ARP 192.168.0.250
is at 00:20:18:61:90:e3
3 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping)
request
4 ftp.oleane.net pchris.maison.mrs ICMP Echo (ping)
reply
5 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping)
request
6 ftp.oleane.net pchris.maison.mrs ICMP Echo (ping)
reply
7 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping)
request
8 ftp.oleane.net pchris.maison.mrs ICMP Echo (ping)
reply
9 pchris.maison.mrs ftp.oleane.net ICMP Echo (ping)
request
10 ftp.oleane.net pchris.maison.mrs ICMP Echo (ping)
reply
La requte ARP a port sur la passerelle par dfaut (gw1) parce que la couche 2 ne sait pas
franchir les routeurs, elle ne sait transporter l'information que sur un seul rseau physique.
Son travail se borne donc transporter l'information jusqu' la passerelle qui remontera la
trame jusqu'au niveau 3 (IP) pour la passer ensuite sur un autre rseau.
La table ARP d'un hte ne peut donc contenir que des adresses MAC d'htes ou de
passerelles situes sur le mme rseau physique.
Un peu plus loin, nous allons essayer de voir comment un paquet voyage en l'espionnant de
chaque ct d'une passerelle.
Manips
Objectif de la manipulation
Nous allons essayer de dcortiquer le mieux possible le fonctionnement du routage en
essayant d'ouvrir un dialogue avec un hte situ dans un autre rseau et en regardant au
moyen d'un sniffeur ce qu'il se passe, du moins notre porte.
Description de la manipulation
Il existe dans tous les systmes TCP/IP une commande qui s'appelle traceroute. Cette
commande a pour but de reprer toutes les passerelles franchies pour aller de son poste un
hte distant. En plus de dterminer les passerelles, elle indique, un peu la manire d'un ping,
le temps que met cette passerelle rpondre.
Cette commande, dans les systmes Windows, s'appelle tracert, sans doute cause d'une
vieille habitude de crer des noms de 8 caractres maximum. Sous Linux, elle s'appelle
traceroute. Les deux commandes donnent les mmes indications, celle de Linux tant un
peu plus puissante dans la mesure o elles est plus paramtrable.
Exemple :
Emploi de la commande tracert pour tudier le chemin emprunt pour aller de mon poste de
travail Marseille sur le serveur web de l'acadmie de Montpellier (a change un peu
d'Olane et ce n'est pas bien loin).
E:\>tracert www.ac-montpellier.fr

Dtermination de l'itinraire vers mtn.ac-montpellier.fr [193.48.169.69]
avec un maximum de 30 sauts :

1 <10 ms <10 ms <10 ms gw1.maison.mrs [192.168.0.250]
2 20 ms 20 ms 30 ms ca-ol-marseille-1-2.abo.wanadoo.fr [62.161.96.2]
3 20 ms 30 ms 30 ms 194.250.158.157
4 30 ms 20 ms * POS-6-0-0.NCMAR202.Marseille.raei.francetelecom.net
[194.51.171.41]
5 20 ms 21 ms 20 ms P0-7.ncmar302.Marseille.francetelecom.net
[193.252.101.78]
6 20 ms 20 ms 30 ms P0-2.nrlyo102.Lyon.francetelecom.net
[193.252.101.150]
7 30 ms 40 ms * P7-0.ntsta102.Paris.francetelecom.net
[193.251.126.98]
8 30 ms 30 ms 41 ms 193.251.126.26
9 30 ms 31 ms 20 ms P1-0.BOUBB1.Paris.opentransit.net [193.251.128.66]
10 30 ms 40 ms 20 ms nio-i.cssi.renater.fr [193.51.206.41]
11 40 ms 40 ms 40 ms nio-n1.cssi.renater.fr [193.51.206.9]
12 70 ms 60 ms 60 ms montpellier.cssi.renater.fr [195.220.99.166]
13 * 80 ms 220 ms NRCP-montpellier.cssi.renater.fr [195.220.99.174]
14 60 ms 50 ms 60 ms 193.50.61.110
15 60 ms 60 ms 60 ms 193.48.170.21
16 60 ms 60 ms 50 ms 193.48.168.72
17 60 ms 60 ms 70 ms 193.48.169.69

Itinraire dtermin.
Ce n'est pas bien loin, tout de mme 17 passerelles et il suffit de lire les noms pour
constater que l'on passe par Paris! (Heureusement qu'on ne fait pas a en voiture :).
Le rseau Renater est un rseau qui relie en France toutes les facults et les centres de
recherche. Visiblement, le passage du rseau France Tlcom au rseau renater se fait Paris.
Il n'empche que les paquets ne mettent qu'environ 70 ms pour faire l'aller-retour.
Comment a marche ?
La commande s'appuie sur le Time To Live d'un paquet de donnes. Ce TTL dispose
d'une valeur initiale, gnralement entre 15 et 30 secondes, et est dcrment chaque
passage de routeur. La dcrmentation chaque routeur est au moins d'une seconde, plus si le
paquet reste en file d'attente dans le routeur plus d'une seconde. Dans un tel cas, le TTL est
dcrment chaque seconde passe dans la file d'attente.
Si le TTL devient nul, le paquet est considr comme mort et est dtruit par le routeur.
L'metteur du paquet reoit un message ICMP Time-to-live exceeded pour le prvenir
(une des raisons pour laquelle il ne faut pas filtrer tout le trafic ICMP sur un firewall).
C'est cette proprit qui va servir dfinir la route. La cible envoie un premier paquet avec un
TTL de 1s. Ce paquet, en arrivant sur le premier routeur, va voir son TTL tomber 0, donc va
tre dtruit, et le routeur va en informer l'metteur au moyen d'un message ICMP TTL
expir . L'opration est effectue par dfaut trois fois (les trois indices de temps indiqus
dans la rponse), puis, un nouvel essai sera fait, avec cette fois-ci un TTL de 2 secondes.
Normalement, le paquet doit passer le premier routeur et tre dtruit par le second. Ainsi de
suite jusqu' arriver destination.
Les paquets envoys par la source peuvent tre des paquets UDP ou ICMP. La commande
traceroute de Linux envoie par dfaut des paquets UDP, mais la directive -I force
l'mission de paquets ICMP. Sous Windows, la commande tracert ne sait envoyer que des
paquets ICMP. Notez que l'envoi de paquets UDP peut parfois poser des problmes.
Comment les routeurs connaissent-ils les routes ?
L, je n'ai pas de routeur Internet sous la main pour vous montrer; cependant, le choix des
routes commence dj sur votre machine et la commande route permet d'administrer ces
routes. C'est le mme principe qui sera appliqu sur un routeur.
Voyons dj les routes connues par mon poste de travail sous Windows 2000:
E:\>route print
===========================================================================
Liste d'Interfaces
0x1 ........................... MS TCP Loopback interface
0x1000003 ...00 20 18 b9 49 37 ...... Realtek RTL8029(AS) Ethernet Adapt
===========================================================================
===========================================================================
Itinraires actifs :
Destination rseau Masque rseau Adr. passerelle Adr. interface
Mtrique
0.0.0.0 0.0.0.0 192.168.0.250 192.168.0.10 1
(1)
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
(2)
192.168.0.0 255.255.255.0 192.168.0.10 192.168.0.10 1
(3)
192.168.0.10 255.255.255.255 127.0.0.1 127.0.0.1 1
(4)
192.168.0.255 255.255.255.255 192.168.0.10 192.168.0.10 1
(5)
224.0.0.0 224.0.0.0 192.168.0.10 192.168.0.10 1
(6)
255.255.255.255 255.255.255.255 192.168.0.10 192.168.0.10 1
(7)
Passerelle par dfaut : 192.168.0.250
(8)
===========================================================================
A premire vue, a semble plutt illisible, mais avec un peu d'habitude, on y arrive assez bien:
1. Destination 0.0.0.0
C'est la route que les paquets vont prendre lorsqu'ils n'on pas trouv un meilleur
chemin. En fait, c'est la route par dfaut, reprise la ligne 8.
C'est la ligne la plus intressante, parce qu'elle fait intervenir une adresse de passerelle
(192.168.0.250 c'est dire gw1) et une adresse d'interface (192.168.0.10) diffrentes.
Cette ligne veut dire en franais, Lorsqu'on ne sait pas par o il faut passer, on va
emprunter l'interface 192.168.0.10 pour joindre la passerelle 192.168.0.250. C'est elle
qui dcidera pour la suite du chemin.
2. Destination 127.0.0.0
C'est la boucle interne, celle qui permet l'hte de se parler lui mme.
3. Destination 192.168.0.0
C'est mon rseau local. Cette ligne indique que la passerelle est 192.168.0.10, de
mme que l'adresse de l'interface.
4. Pour atteindre 192.168.0.10, c'est dire moi-mme, il faudra utiliser 127.0.0.1
(adresse interne toujours la mme sur tous les htes quelque soit l'OS).
5. Pour raliser un broadcast sur mon rseau, il faudra utiliser 192.168.0.10
6. Si l'on souhaite faire du multicast, mme chose
7. Si l'on souhaite faire du broadcast tendu, encore la mme chose.
8. La passerelle par dfaut est indique de faon explicite.
Comme deux exemples valent mieux qu'un, nous allons maintenant voir la table de routage de
gw1, plus intressante parce que dedans, il y a deux interfaces rseau (l'une sur le rseau
local, l'autre sur le rseau FTCI).
Avant d'aller plus loin, rappelons que gw1 est connect l'Internet par eth0 dont l'adresse est
donne par le DHCP de FTCI (213.56.56.250 actuellement), ainsi que le masque de sous
rseau (255.255.248.0) et une passerelle par dfaut (213.56.56.1).
[root@gw1 /root]# route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use
Iface
192.168.0.0 * 255.255.255.0 U 0 0 0
eth1 (1)
213.56.56.0 * 255.255.248.0 U 0 0 0
eth0 (2)
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
(3)
default 213.56.56.1 0.0.0.0 UG 0 0 0
eth0 (4)
Curieusement, les informations paraissent beaucoup plus lisibles, alors que le routage devrait
tre plus compliqu.
1. Pour atteindre le rseau 192.168.0.0 (masque 255.255.255.0), il faut passer par
l'interface eth1
2. Pour atteindre le rseau 213.56.56.0 (masque 255.255.248.0), il faut passer par eth0
3. Pour atteindre le rseau 127.0.0.0, il faut passer par l'interface locale (127.0.0.1)
4. La route par dfaut, celle qu'il faut prendre lorsqu'on ne sait pas laquelle prendre, c'est
de joindre la passerelle 213.56.56.1 en passant par eth0
De ceci nous pouvons dj prvoir quelque chose: Les paquets qui partiront de mon poste de
travail vers un serveur quelconque de l'Internet passeront obligatoirement par 192.168.0.10
pour rejoindre 192.168.0.250. De l, ils passeront par eth0 (213.56.56.250) pour rejoindre
213.56.56.1 et c'est ce routeur qui dcidera de la suite. C'est obligatoire, a ne peut pas tre
autrement, ce sont les seules routes connues dans mon rayon d'action.
Comme vous avez tous suivi attentivement, vous avez pu constater que ce que je dis ici n'est
pas en accord avec ce que dit la commande tracert vers www.ac-montpellier.fr vue plus
haut. En effet, la deuxime passerelle rencontre n'est pas 213.56.56.1 comme on peut le
prvoir, mais 62.161.96.2 qui, en plus, n'est pas situe dans un rseau que gw1 sait atteindre
autrement qu'en passant par 213.56.56.1. Comment se fait-il qu'il n'y ait aucune trace de la
passerelle par dfaut attribue par le DHCP? Pour le savoir, demandez FTCI; j'ignore la
rponse.
Et pourtant, a passe
Et comment font les vrais routeurs ?
Ils font pareil, part que les tables sont souvent plus longues et que leurs mises jour se font
par l'intermdiaire de protocoles de dialogue entre routeurs, pour se tenir informs des
changements toujours possibles. Normalement a marche puisqu'il est tout de mme assez
rare d'tre confront de rels problmes de routage.
La suite
Maintenant que tout le dcor est plant, passons la manipulation proprement dite
Pour mieux comprendre la suite de cet expos, rappelons l'architecture sur laquelle tous les
tests vont tre faits:
Mon rseau local
Le rseau local est rellement constitu de 6 htes (gw1 et gw2 inclus). Tous les htes (gw1 et
gw2 exclus) fonctionnent sous diverses versions de Windows. pchris est mon poste de
travail habituel et fonctionne le plus souvent sous Windows 2000.

Connexion Internet
Il n'y a que les deux htes gw1 et gw2 qui sont connects directement l'Internet via un HUB
et le Com21. Les deux machines fonctionnent sous Linux (Mandrake 7.2 l'heure o ces
lignes ont t crites) et sont toutes les deux configures en passerelles / firewall
1)
.
gw1 est la passerelle officielle . Normalement, il n'y a que cette machine qui est en
service.
gw2 est plus exprimentale, cette machine n'est en service que lorsque je fais des
manipulations particulires, ce qui sera le cas ici.
Informations rseau
Lors des manipulations dcrites dans ce chapitre, les adresses rseau taient les suivantes:

eth0 eth1 Passerelle

MAC IP MAC IP MAC IP
gw1
00:20:AF:07:1A
:3D
213.56.56.
250
00:20:18:61:90
:E3
192.168.0.
250
00:00:OC:07:A
C:03
213.56.56.
1
gw2
00:20:AF:4A:66
:B7
195.6.103.
216
00:20:18:29:11
:31
192.168.0.
253
00:00:OC:07:A
C:03
195.6.96.1
pchr
is
00:20:18:B9:49:
37
192.168.0.
10
N/A N/A
00:20:18:61:90:E
3
192.168.0.
250
Attention! Regardez bien les informations sur les passerelles par dfaut pour gw1 et gw2:
Ct Internet, gw1 et gw2 ne sont pas dans les mmes rseaux logiques.
Leurs passerelles par dfaut sont bien dans leur rseau logique.
L'adresse MAC des deux passerelles par dfaut est la mme. Nous verrons un peu plus
loin cette particularit plus en dtail.
Ce qui veut dire que, bien que les deux htes gw1 et gw2 n'appartiennent pas au mmes
rseaux logiques (IP), ils sont malgr tout connectes sur le mme rseau physique (ce qui est
finalement tout fait normal). Cette conclusion est tire du fait que l'adresse MAC est la
mme pour les deux passerelles. En fait, il n'y a qu'une seule passerelle qui dispose de deux
adresses IP (Plus, en ralit, comme nous le verrons plus loin)
Vrification ultime
Nous avons peut-tre voir d'un peu plus prs la configuration de mon poste de travail:
pchris.
La commande ''ipconfig''
J'utilise Windows 2000. Ce serait la mme chose avec Windows NT 4, mais pas avec
WIndows 95, 98 ou Me; ces OS disposent en revanche de l'application winipgfg qui fait
rigoureusement la mme chose, mais en mode graphique.
E:\>ipconfig /all

Configuration IP de Windows 2000

Nom de l'hte . . . . . . . . . . : pchris
Suffixe DNS principal . . . . . . : maison.mrs
Type de noeud . . . . . . . . . . : Diffuser
Routage IP activ . . . . . . . . : Non
Proxy WINS activ . . . . . . . . : Non

Ethernet carte Connexion au rseau local:

Suffixe DNS spc. la connexion. :
Description . . . . . . . . . . . : Carte Realtek PCI Ethernet base
RTL8029(AS)
Adresse physique. . . . . . . . . : 00-20-18-B9-49-37
DHCP activ . . . . . . . . . . . : Non
Adresse IP. . . . . . . . . . . . : 192.168.0.10
Masque de sous-rseau . . . . . . : 255.255.255.0
Passerelle par dfaut . . . . . . : 192.168.0.250
Serveurs DNS. . . . . . . . . . . : 192.168.0.250
C'est une configuration fixe. Il n'y a pas de DHCP sur mon rseau priv (pour 4 htes, ce
serait peut-tre excessif). Nous avons ici toutes les informations ncessaires au bon
fonctionnement de la pile IP:
Adresse MAC
Adresse IP
Masque de sous rseau
Passerelle par dfaut.
Mais c'est quoi, cette passerelle par dfaut ?
Mon poste de travail sait que tous les autres htes du rseau ont des adresses avec le mme
HostID 192.168.0.0 et qu'il peut leur envoyer directement les informations. En revanche,
pour tout hte qui dispose d'une adresse IP avec un HostID autre, il sait qu'il ne peut pas leur
envoyer d'informations directement. Dans ce cas, il lui faut un relais et ce relais, c'est
justement la passerelle par dfaut. Ici, la configuration est simple, il n'y a qu'un seul routeur.
Sur des rseaux plus complexes, il pourrait y avoir plusieurs routeurs, chacun tablissant une
passerelle vers des rseaux diffrents. La table de routage serait alors plus complique, une
simple passerelle par dfaut ne pouvant plus suffire.
Plus simplement, la couche 3 de mon OS, lorsqu'elle doit envoyer des informations un hte
qui n'est pas sur mon rseau, se contentera de les envoyer la passerelle par dfaut, soit
192.168.0.250 qui, elle, est directement accessible, puisqu'elle est dans le mme rseau
logique. C'est elle qui devra se charger de dfinir la suite de la route.
Une route simple
Nous allons voir de trs prs comment dterminer l'itinraire entre un client et le serveur FTP
ftp.oleane.net. Ce n'est pas trs difficile, nous savons maintenant qu' il existe une commande
exprs pour.
Cette fois-ci, nous allons utiliser tracert sur ftp.oleane.net.
Quelles informations obtient-on ?
L'exemple qui suit est ralis avec Windows 2000 depuis mon poste pchris
Dtermination de l'itinraire vers ftp.oleane.net [195.25.12.28] avec un
maximum de 30 sauts:
1 <10 ms <10 ms <10 ms gw1.maison.mrs [192.168.0.250]
2 20 ms 30 ms 20 ms ca-ol-marseille-1-2.abo.wanadoo.fr [62.161.96.2]
3 30 ms 10 ms 30 ms 194.250.158.162
4 30 ms 20 ms 30 ms 212.234.244.93
5 10 ms 30 ms 20 ms POS-6-0-
0.NCMAR201.Marseille.raei.francetelecom.net [194.51.171.37]
6 20 ms 30 ms 20 ms P0-2.nrlyo101.Lyon.francetelecom.net
[193.252.101.74]
7 30 ms 30 ms 40 ms P7-0.ntaub101.Aubervilliers.francetelecom.net
[193.251.126.226]
8 40 ms 30 ms 30 ms P9-0.nraub201.Aubervilliers.francetelecom.net
[193.251.126.165]
9 30 ms * 40 ms POS-2-0.ARCG1.Archives.raei.francetelecom.net
[194.51.159.234]
10 30 ms 40 ms 21 ms POS-1-0.GENG1.Archives.raei.francetelecom.net
[194.51.159.154]
11 40 ms 30 ms 40 ms ftp.oleane.net [195.25.12.28] Itinraire
dtermin.
Comme nous l'avons vu, la commande permet d'identifier tous les routeurs par lesquels on
passe pour arriver jusqu' la cible, avec le temps ncessaire pour atteindre chacun d'eux, un
peu comme le ferait un ping. Les toiles indiquent que le temps de rponse a t trop long ou
qu'il n'y a pas eu de rponse.
Comment a marche ?
Premire vrification
No. Source Destination
Proto Info
1 - Premire passerelle (la mienne). Nous voyons les trois pings et les
trois rponses ICMP
On passe du rseau 192.168.0.0 au rseau 213.56.56.0 (L'adresse indique
dans le tracert semble
ne pas tre la bonne, mais souvenez-vous que ce routeur a plusieurs
adresses IP
sur la mme interface)

583 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
584 gw1.maison.mrs pchris.maison.mrs ICMP
Time-to-live exceeded
585 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
586 gw1.maison.mrs pchris.maison.mrs ICMP
Time-to-live exceeded
587 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
588 gw1.maison.mrs pchris.maison.mrs ICMP
Time-to-live exceeded

2 - Seconde passerelle (ma passerelle par dfaut)
On passe du rseau 213.56.56.0 au rseau 194.250.158.0
610 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
611 ca-ol-marseille-1-2.abo.wanadoo.fr pchris.maison.mrs ICMP
Time-to-live exceeded
612 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
613 ca-ol-marseille-1-2.abo.wanadoo.fr pchris.maison.mrs ICMP
Time-to-live exceeded
614 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
615 ca-ol-marseille-1-2.abo.wanadoo.fr pchris.maison.mrs ICMP
Time-to-live exceeded

3 - Troisime passerelle du rseau 194.250.158.0 au rseau 194.51.171.0
637 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
638 194.250.158.162 pchris.maison.mrs ICMP
Time-to-live exceeded
639 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
640 194.250.158.162 pchris.maison.mrs ICMP
Time-to-live exceeded
641 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
642 194.250.158.162 pchris.maison.mrs ICMP
Time-to-live exceeded

4 - Et ainsi de suite jusqu' la destination...
744 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
745 212.234.244.93 pchris.maison.mrs ICMP
Time-to-live exceeded
746 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
747 212.234.244.93 pchris.maison.mrs ICMP
Time-to-live exceeded
748 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
749 212.234.244.93 pchris.maison.mrs ICMP
Time-to-live exceeded

5 -
842 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
843 POS-6-0-0.NCMAR201.Marseille.raei.francetel... pchris.maison.mrs ICMP
Time-to-live exceeded
844 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
845 POS-6-0-0.NCMAR201.Marseille.raei.francetel... pchris.maison.mrs ICMP
Time-to-live exceeded
846 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
847 POS-6-0-0.NCMAR201.Marseille.raei.francetel... pchris.maison.mrs ICMP
Time-to-live exceeded

...

9 - Notez ici la rponse qui a trop tard venir et considre comme
perdue
Elle se traduit dans la rponse de tracert par une astrisque
950 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
951 POS-2-0.ARCG1.Archives.raei.francetelecom.net pchris.maison.mrs ICMP
Time-to-live exceeded
952 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
1021 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
1022 POS-2-0.ARCG1.Archives.raei.francetelecom.net pchris.maison.mrs ICMP
Time-to-live exceeded

...

11 - Et enfin la cible...
1071 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
1072 ftp.oleane.net pchris.maison.mrs ICMP
Echo (ping) reply
1073 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
1074 ftp.oleane.net pchris.maison.mrs ICMP
Echo (ping) reply
1075 pchris.maison.mrs ftp.oleane.net ICMP
Echo (ping) request
1076 ftp.oleane.net pchris.maison.mrs ICMP
Echo (ping) reply
Ce premier aperu ne nous montre pas grand chose, finalement ; si ce n'est que la commande
tracert utilise des pings vers la cible et que ce sont tour tour les passerelles successives qui
rpondent par un TTL expir , jusqu' la cible qui rpond au ping.
Essayons tout de mme d'en savoir un peu plus
Nous allons regarder de plus prs le contenu de la premire trame mise:
Frame 583 (106 on wire, 106 captured)
Arrival Time: Jan 21, 2001 10:25:11.5597
Time delta from previous packet: 0.000000 seconds
Frame Number: 583
Packet Length: 106 bytes
Capture Length: 106 bytes
Ethernet II
Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
*** Adresse MAC de l'interface Eth1 de ma passerelle linux!
Source: 00:20:18:b9:49:37 (pchris.maison.mrs)
*** Adresse MAC de mon poste de travail
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 92
Identification: 0x3b7b
Flags: 0x00
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 1
*** Avec un TTL de 1 seconde (comme c'est dit dans les critures)
Protocol: ICMP (0x01)
Header checksum: 0xee3e (correct)
Source: pchris.maison.mrs (192.168.0.10)
*** Niveau IP la source est toujours mon poste de travail
Destination: ftp.oleane.net (195.25.12.28)
*** Niveau IP la destination est bien ftp.oleane.net
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
Code: 0
Checksum: 0xd0ff (correct)
Identifier: 0x0200
Sequence number: 25:00
Data (64 bytes)
...
Nous avons constat ici quelques dtails intressants:
Pour le premier ping, le TTL est bien fix une seconde.
Bien que la cible IP soit ftp.oleane.net, la cible Ethernet (Adresses MAC) est la
passerelle!
Mais voyons maintenant la premire rponse :
Frame 584 (154 on wire, 154 captured)
Arrival Time: Jan 21, 2001 10:25:11.5599
Time delta from previous packet: 0.000171 seconds
Frame Number: 584
Packet Length: 154 bytes
Capture Length: 154 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (pchris.maison.mrs)
*** oui, normal...
Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
*** Et c'est ma passerelle qui rpond. C'est normal aussi, c'est elle
qui a tu le paquet en mettant son TTL 0
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0xc0 (DSCP 0x30: Class Selector 6; ECN:
0x00)
1100 00.. = Differentiated Services Codepoint: Class Selector 6
(0x30)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 140
Identification: 0xfb43
Flags: 0x00
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 255
Protocol: ICMP (0x01)
Header checksum: 0x3d18 (correct)
Source: gw1.maison.mrs (192.168.0.250)
Destination: pchris.maison.mrs (192.168.0.10)
Internet Control Message Protocol
Type: 11 (Time-to-live exceeded)
Code: 0 (TTL equals 0 during transit)
*** Vous constaterez que l'on a ici toute l'explication du
fonctionnement.
Checksum: 0xf2ff (correct)
Avez-vous compris le principe? Nous n'allons pas toutes les faire, nous allons juste regarder
un dialogue un peu plus loin pour vrifier.
La trame 923 (ne vous tonnez pas des numros de trames, je n'tais pas le seul sur le rseau
lorsque j'ai rcupr la trace, il a fallu filtrer un peu). Cette trame correspond la premire
rponse du 8 routeur (P9-0.nraub201.Aubervilliers.francetelecom.net)
Frame 923 (106 on wire, 106 captured)
Arrival Time: Jan 21, 2001 10:25:27.9036
Time delta from previous packet: 0.965007 seconds
Frame Number: 923
Packet Length: 106 bytes
Capture Length: 106 bytes
Ethernet II
Destination: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
Source: 00:20:18:b9:49:37 (pchris.maison.mrs)
*** Bien entendu, rien n'a chang, au niveau MAC, la remarque faite
plus haut se re vrifie)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 92
Identification: 0x3c20
Flags: 0x00
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 8
*** Le TTL est ici de 8 (c'est normal, on cherche la 8 passerelle)
Protocol: ICMP (0x01)
Header checksum: 0xe699 (correct)
Source: pchris.maison.mrs (192.168.0.10)
Destination: ftp.oleane.net (195.25.12.28)
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
Code: 0
Checksum: 0xbbff (correct)
Identifier: 0x0200
Sequence number: 3a:00
Et la rponse du 8 routeur
Frame 924 (70 on wire, 70 captured)
Arrival Time: Jan 21, 2001 10:25:27.9379
Time delta from previous packet: 0.034276 seconds
Frame Number: 924
Packet Length: 70 bytes
Capture Length: 70 bytes
Ethernet II
Destination: 00:20:18:b9:49:37 (pchris.maison.mrs)
Source: 00:20:18:61:90:e3 (00:20:18:61:90:e3)
*** Et la source? C'est pas le 8 routeur, c'est toujours ma passerelle
moi!
*** (Nous sommes au niveau 2, au niveau Ethernet)
Type: IP (0x0800)
Internet Protocol
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 56
Identification: 0x0000
Flags: 0x00
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 249
Protocol: ICMP (0x01)
Header checksum: 0xc071 (correct)
Source: P9-0.nraub201.Aubervilliers.francetelecom.net (193.251.126.165)
*** Au niveau 3 (IP), c'est bien le routeur qui rpond
Destination: pchris.maison.mrs (192.168.0.10)
Internet Control Message Protocol
Type: 11 (Time-to-live exceeded)
Code: 0 (TTL equals 0 during transit)
Checksum: 0xec57 (correct)
Si je n'avais pas eu peur de vous fatiguer (ce qui, du reste, est peut-tre tout de mme le cas),
je vous aurai laiss la totalit de la trace pour vrifier que, quelque soit le routeur qui tue le
ping parce que son TTL a expir durant le transit, l'adresse MAC de la source que reoit mon
poste de travail est toujours celle de ma passerelle (le premier routeur que je rencontre sur le
chemin). Ceci confirme bien ce que nous avons dj vu propos de la couche 2.
De l'autre ct...
Nous avons vu en dtail le dialogue ICMP sur le rseau local. C'est bien, mais nous allons
faire mieux Un petit dessin :

Grce gw2, nous allons espionner les paquets ICMP qui traversent gw1 pour aller plus loin.
La premire salve, celle qui avait un TTL de 1 en partant de mon poste de travail, nous ne la
verrons pas au del de gw1, c'est normal, gw1 l'a tue. La premire que nous verrons passer,
c'est celle qui partait de pchris avec un TTL de 2.
Pour mieux suivre, nous comparons ces paquets avant passage de gw1 et aprs :
Envoi de l'cho.
Sur le rseau local
(entre pchris et gw1)
Sur la connexion Internet
(entre gw1 et la passerelle FAI)
Frame 610 (106 on wire, 106 captured)
...
Ethernet II
Destination: 00:20:18:61:90:e3
(eth1 sur gw1)
Source: 00:20:18:b9:49:37 (pchris)
*** notez bien au passage de gw1
le changement
d'adresses MAC source et
destination
...
Time to live: 2
...
Frame 32 (106 on wire, 106 captured)
...
Ethernet II
Destination: 00:00:0c:07:ac:03
(pass. FAI)
Source: 00:20:af:07:1a:3d (eth0
sur gw1)
...
...
...
Time to live: 1
*** Le TTL a t dcrmente par
gw1
Protocol: ICMP (0x01)
Header checksum: 0xed31 (correct)
Source: (192.168.0.10)
*** Attention l'IP...
Destination: ftp.oleane.net
(195.25.12.28)
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
...
Sequence number: 28:00
...
Protocol: ICMP (0x01)
Header checksum: 0xa0b1
(correct)
Source: (213.56.56.250)
*** a, c'est le travail de "IP
Masquerade"
Destination: ftp.oleane.net
(195.25.12.28)
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
...
Sequence number: 28:00
...
Plusieurs points sont retenir:
Au niveau Ethernet (niveau 2) les adresses MAC ont chang, elles correspondent
chaque fois l'metteur et au destinataire dans le rseau concern.
Le TTL du paquet a t dcrment au passage de gw1. Nous savons dj que, lorsque
ce paquet va arriver sur la passerelle FTCI, il va tre tu puisque son TTL va tomber
0 et que cette passerelle va nous renvoyer un message ICMP Time-to-live exceeded.
L'adresse IP a t modifie, mais ceci est d au masquage d'adresse introduit par gw1.
Si gw1 avait t un vrai routeur, il n'aurait pas agi au niveau de l'IP
Rception de la rponse
(asseyez-vous confortablement, il va y avoir des surprises)
Sur le rseau local
(entre pchris et gw1)
Sur la connexion Internet
(entre gw1 et la passerelle FTCI)
Frame 611 (70 on wire, 70 captured)
...
Ethernet II
Destination: 00:20:18:b9:49:37
*** (pchris.maison.mrs)

Source: 00:20:18:61:90:e3
*** (eth1 sur gw1)
Type: IP (0x0800)
Internet Protocol
...
Source: ca-ol-marseille-1-
2.abo.wanadoo.fr
(62.161.96.2)
Destination: pchris.maison.mrs
(192.168.0.10)
Internet Control Message Protocol
Type: 11 (Time-to-live
exceeded)
...
Frame 33 (70 on wire, 70 captured)
...
Ethernet II
Destination: 00:20:af:07:1a:3d
*** (ca-ol-marseille-9-
250.abo.wanadoo.fr)
*** (joli nom de gw1 sur le Net)
Source: 00:03:a0:83:0c:00
*** (ca-ol-marseille-25-
2.abo.wanadoo.fr)
Type: IP (0x0800)
Internet Protocol
...
Source: ca-ol-marseille-1-
2.abo.wanadoo.fr
(62.161.96.2)
Destination: ca-ol-marseille-9-
250.abo.wanadoo.fr
(213.56.56.250)
Internet Control Message Protocol
Type: 11 (Time-to-live exceeded)
...
Rappelons ici le rsultat de la commande tracert:
Dtermination de l'itinraire vers ftp.oleane.net [195.25.12.28] avec un
maximum de 30 sauts:
1 <10 ms <10 ms <10 ms gw1.maison.mrs [192.168.0.250]
2 20 ms 30 ms 20 ms ca-ol-marseille-1-2.abo.wanadoo.fr [62.161.96.2]
3 ....
Nous avions dj rencontr ce phnomne dans la prsentation de la commande tracert,
nous le retrouvons identique ici.
Dj, est-il normal que ce soit ca-ol-marseille-1-2.abo.wanadoo.fr (62.161.96.2) qui
me rponde, alors que ma passerelle par dfaut est ca-ol-marseille-9-1.abo.wanadoo.fr
(213.56.56.1) ? La seconde serait logique puisqu'elle est dans le mme rseau que gw1
ct public, mais ce n'est pas elle qui rpond. Nous pourrions penser que c'est une
astuce, il est possible en effet d'attribuer plusieurs adresses IP la mme interface
rseau, mais dans ce cas, l'adresse MAC devrait correspondre
Encore plus curieux, au niveau Ethernet, c'est 00:03:a0:83:0c:00 qui rpond (ca-ol-
marseille-25-2.abo.wanadoo.fr)
Rsumons-nous :
Sur un rseau simple , il y a une passerelle par dfaut, les paquets sortant vers un
autre rseau et entrant depuis un autre rseau passent par elle, une analyse de trame et
une tude de la table ARP le confirment.
Ici, tout se passe de faon plus complique:
o Les paquets sortant ne peuvent passer que par la passerelle par dfaut
paramtre par le serveur DHCP (ici 213.56.56.1, 00:00:0c:07:ac:03) Ce n'est
pas possible autrement, ma machine connecte au COm21 n'en connat pas
d'autres.
o Les paquets entrants, en revanche, arrivent par une autre passerelle:
00:03:a0:83:0c:00. Ce qui est encore plus curieux, c'est qu'au niveau IP elle est
annonce avec l'adresse 62.161.96.2, adresse situe dans un autre rseau
logique que le mien (213.56.56.0)
1)
En ces temps bnis, il tait possible en effet d'obtenir deux adresses IP publiques, ce qui a
permis cette manipulation, maintenant impossible
Conclusions
Que peut-on retenir de tout a ?
Le niveau Ethernet (niveau 2 OSI)
Ce niveau utilise les adresses MAC pour acheminer les paquets. Ici, il n'est pas possible de
sortir du rseau physique.
Pour y arriver, il faut des routeurs qui travaillent au niveau suprieur. Ces routeurs prennent
en charge l'acheminement des paquets inter rseaux en agissant en quelque sorte comme
destinataire par procuration (ou metteur par procuration), si bien que lorsqu'un paquet est
destination d'un autre rseau, au niveau 2, il est envoy au routeur.
Le niveau Internet Protocol (niveau 3 OSI)
A ce niveau plus volu, les paquets sont capables de passer d'un rseau l'autre en
empruntant des routes prdfinies en fonction des adresses rseau (NetID). C'est ce niveau
qu'un paquet sera directement transmis au destinataire si celui-ci est situ sur le mme rseau
logique (livraison directe) ou transmis une passerelle qui retransmettra plus loin (livraison
indirecte). De chaque ct d'un routeur, les adresses MAC changent, de manire ce que le
niveau Ethernet puisse fonctionner correctement l'intrieur des rseaux physiques
concerns.
Epilogue
J'espre que cette contribution vous aura permis d'un peu mieux comprendre comment sur
l'Internet les donnes circulent de part le monde avec quelques chances de ne pas se perdre.
Pour ceux qui ont mettre en place de tels systmes, il est fondamental de bien rflchir
l'tablissement des routes. Il n'est pas rare en effet sur des rseaux locaux constitus de
plusieurs sous rseau logiques, le tout connect l'Internet, d'avoir l'impression que tout se
passe bien, alors que des paquets devant aller d'un sous rseaux l'autre empruntent des
routes aberrantes, simplement parce que le routage entre les sous rseaux a t mal fait.
Pour l'utilisateur terminal, l'internaute classique , la route par dfaut indique par le DHCP
du fournisseur de services suffira dans l'immense majorit des cas, surtout s'il n'a aucun
rseau local, mais un minimum de connaissances sur le principe lui permettra de mieux cerner
d'ventuels dysfonctionnements et ventuellement d'y remdier sans penser que la
rinstallation de la couche IP est le seul remde possible.
Pour les plus curieux qui se lanceront dans diverses manipulations pour observer le routage,
sachez que vous risquez fort de rencontrer des situations difficilement explicables. Pour
reprendre une remarque qui m'a t faite sur le forum fr.comp.reseaux.ip : Avec IP, c'est
tous les jours carnaval .
Le meilleur pour la fin
Il est de bon ton, dans une oeuvre littraire o cinmatographique, d'adopter une conclusion
ouverte , c'est--dire qu'elle ne conclue pas. a permet au lecteur ou au spectateur de se
fabriquer la suite de l'histoire comme il en a envie. a peut aussi servir, vous l'aurez constat
maintes fois, permettre de produire une suite, pour ceux qui manqueraient d'imagination
(Alien 1, 2, 3, 4 ).
Je vous propose ici une conclusion de ce type
Nous avons vu des traceroutes partant de chez nous vers des htes distants. Nous n'avons pas,
et pour cause, essay de voir la route de l'hte distant vers chez nous. Pourquoi faire? Tout
simplement parce que rien n'oblige ce que les routes aller et retour soient les mmes !
Vous pouvez vous amuser avec un correspondant ou, plus simplement, avec des serveurs de
traceroute. Vous en trouverez quelques uns sur cette page. Prenons juste un exemple:
Dtermination de l'itinraire de chez moi vers www.belnet.be
[193.190.198.19]

1 gw1.maison.mrs 192.168.0.250
2 ca-ol-marseille-1-2.abo.wanadoo.fr 62.161.96.2
3 194.250.158.162 194.250.158.162
4 212.234.244.93 212.234.244.93
5 POS-6-0-0.NCMAR201.Marseille.raei.francetelecom.net 194.51.171.37
6 P0-7.ncmar301.Marseille.francetelecom.net 193.252.101.74
7 P5-1.nrlyo101.Lyon.francetelecom.net 193.252.101.146
8 P7-0.ntaub101.Aubervilliers.francetelecom.net 193.251.126.226
9 193.251.126.154 193.251.126.154
10 So-1-0-0.BAGBB4.Paris.opentransit.net 193.251.240.73
11 So-5-0-0.PASBB4.Paris.opentransit.net 193.251.240.57
12 P9-0.PASBB1.Paris.opentransit.net 193.251.240.54
13 So-1-0-3.TELBB1.Telehouse.opentransit.net 193.251.240.150
14 paris1.fr.eqip.net 195.206.65.141
15 paris5.fr.eqip.net 195.206.64.61
16 amsterdam11.nl.eqip.net 195.90.64.217
17 amsterdam51.nl.eqip.net 195.90.65.121
18 amsterdam9.nl.eqip.net 195.90.65.102
19 nl-aucs.nl.ten-155.net 212.1.194.1
20 ge.nl40.ten-155.net 212.1.193.146
21 nl-uk-2.uk40.ten-155.net 212.1.197.62
22 be-uk.be1.ten-155.net 212.1.197.14
23 pvc0-1005.c12008.brussels.belnet.net 212.1.192.122
24 g10-0-0.c7513.science.belnet.net 193.190.197.182
25 dalet.belnet.be 193.190.198.19

Itinraire dtermin.
Dtermination de l'itinraire de www.belnet.be [193.190.198.19] vers chez
moi [213.56.56.250] :

1 g0-1-0-1.c7513.science.belnet.net 193.190.198.16
2 g6-0.c12008.brussels.belnet.net 193.190.197.181
3 serial5-0.bru-icr-02.carrier1.net 212.4.203.1
4 fastethernet6-1.bru-bbr-01.carrier1.net 212.4.199.197
5 pos13-1.lon-bbr-02.carrier1.net 212.4.199.61
6 pos1-0.lon-bbr-01.carrier1.net 212.4.193.189
7 pos13-0.par-bbr-02.carrier1.net 212.4.211.134
8 serial1-1.par-ixr-01.carrier1.net 212.4.192.234
9 Oleane.parix.net 198.32.246.20
10 Raspail.GW.OLEANE.NET 194.2.3.10
11 POS-8-0.NRSTA102.Raspail.raei.francetelecom.net 194.51.159.53
12 P3-0.ntsta102.Paris.francetelecom.net 193.251.126.42
13 P9-0.nrlyo102.Lyon.francetelecom.net 193.251.126.97
14 P0-0.ncmar302.Marseille.francetelecom.net 193.252.101.149
15 P0-0-0.ncmar202.Marseille.francetelecom.net 193.252.101.77
16 POS-5-1-0.MAR4.Marseille.raei.francetelecom.net 194.51.171.42
17 194.250.158.158 194.250.158.158
18 ca-ol-marseille-9-250.abo.wanadoo.fr 213.56.56.250

Itinraire dtermin.
Ce n'est pas trs facile interprter, parce que, mme lorsqu'on passe le mme routeur dans
un sens ou dans l'autre, on ne le voit pas avec la mme adresse ni le mme nom, puisqu'on le
voit par l'interface par laquelle on entre. Il est clair cependant dans cet exemple que les
chemins ne sont pas les mmes l'aller et au retour, puisqu'il n'y a pas le mme nombre de
passerelles franchies.
Alors, rflchissez ceci: vous faites un traceroute. Les messages ICMP TTL Exceed qui
vous reviennent ne prennent pas forcment le mme chemin que le ping que vous avez
envoy. La dure indique sur la ligne correspond aux temps aller + retour. Comme les
chemins peuvent tre diffrents, que pouvez-vous conclure ? Rien, parce qu'un temps lev ne
met pas forcment en cause la passerelle qui a rpondu, mais peut tre une passerelle dont on
ignore tout et qui est situe quelque part sur le chemin de retour, mais pas sur le chemin de
l'aller.
Vertigineux non ?
Le routage, complments
Le routage est une notion pas forcment facile comprendre.
Ce court chapitre a pour but de donner quelques exemples supplmentaires qui aideront
comprendre, sur des cas concrets, ce qui est expliqu dans le chapitre IP et le Routage :
Un cas tout simple d'un routeur entre deux rseaux privs,
un routeur avec masquage d'adresse, destin permettre l'accs des clients d'un LAN
l'Internet, par une connexion permanente unique (partage de connexion Internet),
un montage un peu plus tordu, mlangeant les deux premiers cas, destin montrer
comment un paquet peut passer par des sens uniques, passer dans un sens mais pas
dans l'autre, emprunter des chemins de traverse
Une manip. trs simple
Dans cet exemple,
nous avons un cas extrmement simple :
Un rseau bleu, dont l'adresse IP est 192.168.0.0, avec le classique masque
255.255.255.0 ;
un rseau rouge, dont l'adresse IP est 192.168.1.0, mme masque ;
entre les deux, un routeur qui dispose donc deux deux adresses IP :
192.168.0.9 dans le rseau bleu
192.168.1.1 dans le rseau rouge. Ce routeur s'appelle Helios.
Dans le rseau bleu, Saturne, d'adresse IP 192.168.0.2, envoie un ping sur Neptune, qui se
trouve dans le rseau rouge avec l'IP 192.168.1.3.
Saturne
Machine sous Debian Woody.
Configuration rseau
saturne:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:00:E8:78:9A:1F
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2674831 errors:7 dropped:559 overruns:7 frame:0
TX packets:1880271 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2193374824 (2.0 GiB) TX bytes:932807313 (889.5 MiB)
Interrupt:10 Base address:0xa000

lo Link encap:Local Loopback...
Observez bien les deux adresses qui vont nous tre utiles par la suite :
HW addr :00:00:E8:78:9A:1F
inet addr:192.168.0.2
Configuration de routage
saturne:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.0.9 0.0.0.0 UG 0 0 0 eth0
Notez la route par dfaut : Il faut passer par eth0 et joindre le nud 192.168.0.9.
Neptune
Egalement sous Debian Woody.
Configuration rseau
neptune:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:A0:C9:E0:2B:7B
inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:527923 errors:0 dropped:0 overruns:0 frame:0
TX packets:422325 errors:0 dropped:0 overruns:0 carrier:0
collisions:21182 txqueuelen:100
RX bytes:269846768 (257.3 MiB) TX bytes:240923195 (229.7 MiB)
Interrupt:11 Base address:0x5000

lo Link encap:Local Loopback...
Observez bien ici aussi les deux adresses qui vont nous tre utiles par la suite :
HW addr : 00:A0:C9:E0:2B:7B
inet addr:192.168.1.3
Configuration de routage
neptune:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
Notez l encore la route par dfaut : Il faut passer par eth0 et joindre le nud 192.168.1.1.
Helios
Sous Mandrake 9.0.
L, a va tre un peu plus compliqu, il y a deux interfaces rseau :
[root@helios root]# ifconfig
eth0 Lien encap:Ethernet HWaddr 00:20:18:B9:49:37
inet adr:192.168.0.9 Bcast:192.168.0.255 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4338949 errors:0 dropped:0 overruns:0 frame:0
TX packets:4968746 errors:0 dropped:0 overruns:0 carrier:0
collisions:11750 lg file transmission:100
RX bytes:503746782 (480.4 Mb) TX bytes:547552476 (522.1 Mb)
Interruption:9 Adresse de base:0x5000

eth1 Lien encap:Ethernet HWaddr 00:20:AF:4A:66:00
inet adr:192.168.1.1 Bcast:192.168.1.255 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4403671 errors:0 dropped:0 overruns:0 frame:0
TX packets:3762159 errors:0 dropped:0 overruns:0 carrier:0
collisions:34316 lg file transmission:100
RX bytes:2763013200 (2635.0 Mb) TX bytes:2646670391 (2524.0 Mb)
Interruption:5 Adresse de base:0x210

lo Lien encap:Boucle locale...
Notons les adresses utiles pour chaque rseau :
HW addr :00:20:18:B9:49:37
inet adr:192.168.0.9
Pour le rseau 192.168.0.0
HWaddr 00:20:AF:4A:66:00
inet adr:192.168.1.1
Pour le rseau 192.168.1.0
Configuration de routage
[root@helios root]# route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Notez que cette machine n'est qu'un routeur, son unique rle, simplifi l'extrme, est
d'interconnecter les deux rseaux 192.168.0.0 et 192.168.1.0
Aucune route par dfaut n'est indique ici.
Tout ce que nous observons, c'est que Helios sait que :
Pour aller dans le rseau bleu (192.168.0.0), il faut envoyer les paquets sur eth0,
pour aller dans le rseau rouge (192.168.1.0), il faut envoyer les paquets sur eth1
C'est bien, mais a ne suffit pas pour que Helios fonctionne comme un routeur. Nous avons un
peu besoin d'IPtables :
iptables -A FORWARD -j ACCEPT # c'est pas bien compliqu...
Il faut aussi s'assurer que l'on a autoris le noyau faire le routage :
echo 1 > /proc/sys/net/ipv4/ip_forward
Et a va router
saturne:~# ping -c 1 neptune
PING neptune.eme.org (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: icmp_seq=0 ttl=254 time=1.2 ms

--- neptune.eme.org ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 1.2/1.2/1.2 ms
Si le ping passe, c'est que a route.
Juste pour le fun :
neptune:~# ping -c 1 saturne
PING saturne.eme.org (192.168.0.2): 56 data bytes
64 bytes from 192.168.0.2: icmp_seq=0 ttl=254 time=1.1 ms

--- saturne.eme.org ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 1.1/1.1/1.1 ms
Ca marche aussi dans l'autre sens.
Snif
On regarde tout a avec des sniffers, l'un sur le rseau bleu et l'autre sur le rseau rouge.
saturne:~# ping -c 1 neptune
Les traces qui suivent ont t expurges de ce qui nous est inutile ici.
Tout ce qu'il est important d'observer est surlign
Frame 1 ...
Ethernet II
Destination: 00:20:18:b9:49:37
Source: 00:00:e8:78:9a:1f
Type: IP (0x0800)
Internet Protocol, Src Addr:
saturne.eme.org

(192.168.0.2),
Frame 1 ...
Ethernet II
Destination: 00:a0:c9:e0:2b:7b
Source: 00:20:af:4a:66:00
Type: IP (0x0800)
Internet Protocol, Src Addr:
saturne.eme.org

(192.168.0.2),
Dst Addr:
neptune.eme.org

(192.168.1.3)
...
Time to live: 64
Protocol: ICMP (0x01)
...
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
...

Frame 2 ...
Ethernet II
Destination: 00:00:e8:78:9a:1f
Source: 00:20:18:b9:49:37
Type: IP (0x0800)
Internet Protocol, Src Addr:
neptune.eme.org

(192.168.1.3),
Dst Addr:
saturne.eme.org

(192.168.0.2)
...
Time to live: 254
Protocol: ICMP (0x01)
...
Internet Control Message Protocol
Type: 0 (Echo (ping) reply)
Dst Addr:
neptune.eme.org

(192.168.1.3)
...
Time to live: 63
Protocol: ICMP (0x01)
...
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
...

Frame 2...
Ethernet II
Destination: 00:20:af:4a:66:00
Source: 00:a0:c9:e0:2b:7b
Type: IP (0x0800)
Internet Protocol, Src Addr:
neptune.eme.org

(192.168.1.3),
Dst Addr:
saturne.eme.org

(192.168.0.2)
...
Time to live: 255
Protocol: ICMP (0x01)
...
Internet Control Message Protocol
Type: 0 (Echo (ping) reply)
Vous avez not les points fondamentaux :
Au niveau IP, les adresses source et destination sont les mmes des deux cts de
Helios,
au niveau Ethernet, il n'en va pas de mme :
o Dans la trame 1 (echo request) :
ct bleu :
l'adresse MAC source est bien celle de Saturne,
l'adresse MAC destination est celle du routeur Helios ct
bleu,
ct rouge :
l'adresse MAC source est celle du routeur Helios ct rouge,
l'adresse MAC destination est bien celle de Neptune,
o Dans la trame 2 (echo reply) :
ct rouge :
l'adresse MAC source est bien celle de Neptune,
l'adresse MAC destination est celle u routeur Helios ct
rouge,
ct bleu :
l'adresse MAC source est celle du routeur Helios ct bleu
l'adresse MAC de destination est bien celle de Saturne.
Autrement dit :
Lorsque Saturne doit envoyer son echo request Neptune :
o ICMP prpare son paquet et le refile IP (couche 3),
o IP constate que la cible n'est pas dans son rseau, cherche le routeur joindre
pour passer dans le rseau rouge. Il n'y a qu'une passerelle par dfaut :
192.168.0.9.
Advienne que pourra, on va lui envoyer le paquet, mais les adresses IP source
et destination ne sont pas modifies. En fait, IP va rechercher l'adresse MAC
d'Helios dans son rseau et trouve que 192.168.0.9 a pour adresse MAC
00:20:18:b9:49:37.
IP va donc dposer cette adresse de destination, avant de refiler le paquet la
couche 2
o Ethernet va donc, sans se poser de question grer ce paquet comme s'il
s'adressait Helios.
o Helios reoit ce paquet, le fait remonter jusqu'au niveau IP ct bleu
(192.168.0.0),
o l, la couche IP constate que Helios n'est pas le destinataire, puisque c'est
Neptune (192.168.1.3),
o Netfilter passe le paquer la couche IP rouge (192.168.1.0)
o La couche IP rouge va chercher l'adresse MAC de Neptune, puisqu'elle sait
que Neptune est dans le mme rseau qu'elle.
Et voil le travail.
Un peu de philosophie
Jouons avec traceroute :
saturne:~# traceroute -I -n neptune
traceroute to neptune.eme.org (192.168.1.3), 30 hops max, 38 byte packets
1 192.168.0.9 0.824 ms 0.741 ms 0.740 ms
2 192.168.1.3 1.246 ms 0.922 ms 0.968 ms
neptune:~# traceroute -I -n saturne
traceroute to saturne.eme.org (192.168.0.2), 30 hops max, 38 byte packets
1 192.168.1.1 0.902 ms 0.705 ms 0.675 ms
2 192.168.0.2 1.108 ms 1.033 ms 1.008 ms
Bien entendu, nous passons toujours par Helios au hop 1, quelque soit le sens du
traceroute, mais nous le voyons du ct bleu avec l'IP 192.168.0.9 et du ct rouge avec l'IP
192.168.1.1
a vous tonne ?
Routage avec MASQUERADE
Plus fort. Nous
reprenons ici le principe du routage entre un rseau local utilisant des adresses IP prives et
une connexion Internet, avec une vraie IP, une qui peut se promener de rseau en rseau
en dehors de notre microcosme.
Pour raliser la manipulation, nous ralisons quelque chose de trs similaire ce que nous
avons vu en page prcdente, seules les adresses MAC et IP changent, de mme que le nom
de la passerelle. Notre routeur cyclope, qui connecte nos rseaux 192.168.1.0 et 192.168.0.0
va, ici, raliser un masquage d'adresse pour 192.168.1.0.
Autrement dit :
192.168.1.0 joue le rle du rseau local,
192.168.0.0 joue le rle de l'Internet
Ici, cyclope ne va pas se comporter en routeur normal , il fera du masquage d'adresse de
tout ce qui vient du rseau 192.168.1.0 et sort par eth0.
Avec IPtables, nous utilisons la commande suivante :
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
192.168.1.2 envoie un ping sur 192.168.0.15 :
Ct rseau 192.168.1.0 (LAN) Ct rseau 192.168.0.0 (Pseudo Internet)
# Le ping...

Frame 1 ...
Ethernet II, Src: 00:80:c8:8e:89:b0,
Dst: 00:20:18:2c:0e:21
Destination: 00:20:18:2c:0e:21
(192.168.1.1)
Source: 00:80:c8:8e:89:b0
(192.168.1.2)
# Au niveau Ethernet (niveau 2)
# - La source est la vraie source
# - la destination devient le
routeur
# Jusque l, tout est normal.

Type: IP (0x0800)
Internet Protocol, Src Addr:
192.168.1.2
Dst Addr:
192.168.0.15
# Au niveau IP (niveau 3)
# - La source est la vraie source
# - la destination est la vraie
destination
# Assez banal, finalement...


Version: 4
...
Protocol: ICMP (0x01)
Header checksum: 0xb847 (correct)
Source: 192.168.1.2
Destination: 192.168.0.15
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
# Le ping...

Frame 1 ...
Ethernet II, Src: 00:20:af:4a:66:b7,
Dst: 00:05:5d:48:2b:84
Destination: 00:05:5d:48:2b:84
(192.168.0.15)
Source: 00:20:af:4a:66:b7
(192.168.0.16)
# Au niveau Ethernet (niveau 2)
# - La source devient le routeur
# - la destination est la vraie
destination
# Jusque l, tout est normal.

Type: IP (0x0800)
Internet Protocol, Src Addr:
192.168.0.16
Dst Addr:
192.168.0.15
# Au niveau IP (niveau 3)
# - La source devient le routeur
(192.168.0.16)
# - la destination reste la vraie
destination
# Il y a donc eu remplacement de
l'adresse
# de la source par celle du routeur
(MASQUERADE)...

Version: 4
...
Protocol: ICMP (0x01)
Header checksum: 0xba39 (correct)
Source: 192.168.0.16
Destination: 192.168.0.15
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
# Et la rponse...

Frame 2 ...
Ethernet II, Src: 00:20:18:2c:0e:21,
Dst: 00:80:c8:8e:89:b0
Destination: 00:80:c8:8e:89:b0
(192.168.1.2)
Source: 00:20:18:2c:0e:21
(192.168.1.1)

# Au niveau Ethernet, le routeur
rpond
# au client, c'est encore normal.

Type: IP (0x0800)
Internet Protocol, Src Addr:
192.168.0.15,
Dst Addr:
192.168.1.2

# Au niveau IP, de ce ct-ci, on a
# Et la rponse...

Frame 2 ...
Ethernet II, Src: 00:05:5d:48:2b:84,
Dst: 00:20:af:4a:66:b7
Destination: 00:20:af:4a:66:b7
(192.168.0.16)
Source: 00:05:5d:48:2b:84
(192.168.0.15)

# Au niveau Ethernet, le serveur
rpond au routeur
# L encore, c'est normal.

Type: IP (0x0800)
Internet Protocol, Src Addr:
192.168.0.15,
Dst Addr:
192.168.0.16

# Mais au niveau IP, le serveur
bien
# l'impression que le serveur a
rpondu directement
# au client, tout semble normal.
# En fait, MASQUERADE a bien fait son
travail.

Version: 4
...
Protocol: ICMP (0x01)
Header checksum: 0x25b4 (correct)
Source: 192.168.0.15
Destination: 192.168.1.2
Internet Control Message Protocol
Type: 0 (Echo (ping) reply)
rpond aussi
# au routeur. C'est logique, cause
de MASQUERADE,
# le serveur croit que c'est le
routeur qui
# a envoy le ping.

Version: 4
...
Protocol: ICMP (0x01)
Header checksum: 0x25a7 (correct)
Source: 192.168.0.15
Destination: 192.168.0.16
Internet Control Message Protocol
Type: 0 (Echo (ping) reply)
La morale de cette histoire est la suivante :
Du ct du LAN, nous avons l'impression d'utiliser un routeur normal , comme vu
en page prcdente,
du ct Internet, les clients du LAN sont masqus par le routeur. Ct Inet, tout
semble provenir du routeur lui-mme.
Ce n'est pas pour rien que l'on appelle cette technique : du masquage d'adresse
(MASQUERADE) !
Pour finir de mettre les points sur les i :
Dans un routage par masquage d'adresse :
au niveau 2 (Ethernet) :
o les requtes sont envoyes du client sur le routeur, puis du routeur sur le
serveur,
o les rponses sont envoyes du serveur sur le routeur, puis du routeur sur le
client.
au niveau 3 (IP) :
o les requtes semblent aller directement du client sur le serveur,(mais le routeur
remplace, au passage, l'adresse IP du client par la sienne)
o les rponses vont du serveur au routeur, puis du routeur au client, mais le client
a l'impression que la rponse lui parvient directement, parce que le routeur
change son adresse de destination par celle du client initial.
Dans un routage simple, c'est plus simple :
au niveau 2 (Ethernet) :
o les requtes sont envoyes du client sur le routeur, puis du routeur sur le
serveur,
o les rponses sont envoyes du serveur sur le routeur, puis du routeur sur le
client.
au niveau 3 (IP) :
o les requtes vont directement du client sur le serveur,
o les rponses vont directement du serveur au client.

Jouons un peu...
C'est lorsque l'on croit avoir tout bien
compris que l'on tombe parfois dans le panneau
Voyons un cas de figure un peu plus compliqu, mais intressant.
Dans ce cas, dj vu en page prcdente, gw2 reprsente un routeur avec masquage d'adresse,
de manire permettre aux htes du rseau 192.168.0.0 d'accder l'Internet. Les htes du
rseau 192.168.0.0 connaissent uniquement :
la route de leur propre rseau ;
une route par dfaut : 192.168.0.252.
Hormis le dtail de masquerade, gw2 agit comme un routeur tout fait ordinaire. Sa table de
routage est simple :
ca-marseille-14-119:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
80.8.136.1 0.0.0.0 255.255.255.255 UH 0 0 0
ppp0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0
eth1
0.0.0.0 80.8.136.1 0.0.0.0 UG 0 0 0
ppp0
Mais compliquons un petit peu l'architecture
Nous
rajoutons un second rseau , 192.168.1.0, interconnect au rseau 192.168.0.0 par une autre
passerelle, que nous appellerons cyclope. Ce routeur va fonctionner sans masquage d'adresse
(ce serait trop facile sinon).
Objectif de la manuvre.
Nous aimerions bien que les choses se passent de la manire suivante :
Le rseau jaune doit accder l'Internet,
le rseau jaune doit accder au rseau bleu,
le rseau bleu doit accder au rseau jaune, bien sr.
Facile, me direz-vous ? Peut-tre pas tant que a
De 192.168.1.0 vers INET
Il suffit d'indiquer aux htes du rseau jaune 192.168.1.1 comme passerelle par dfaut.
cyclope a une table de routage toujours trs simple :
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0
eth1
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
Bon. un paquet part de 192.168.1.2 destination, par exemple, de 213.186.35.33.
L'metteur, sachant que le destinataire n'est pas dans le rseau jaune, va envoyer le
paquet sur cyclope,
cyclope, voyant que ce n'est pas pour lui, va chercher une route pour joindre le
destinataire. Malheureusement, il n'en connat pas. Ca va se terminer par un no route
to host ou un truc de ce genre.
Il nous faut donc modifier la configuration de cyclope, pour lui indiquer une route par dfaut,
qui pointera sur gw2 :
~# route add default gw 192.168.0.252 eth0

~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0
eth1
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
0.0.0.0 192.168.0.252 0.0.0.0 UG 0 0 0
eth0
La route par dfaut de cyclope est place, il sait maintenant o envoyer les paquets qui ne
vont pas dans le rseau bleu (ni dans le rseau jaune, d'ailleurs).
Et rejouons le scnario
Re-bon. un paquet part de 192.168.1.2 destination, par exemple, de 213.186.35.33.
L'metteur, sachant que le destinataire n'est pas dans le rseau jaune, va envoyer le
paquet sur cyclope,
cyclope, voyant que ce n'est pas pour lui, va chercher une route pour joindre le
destinataire. N'en trouvant pas une explicite, il va envoyer le paquet gw2,
celui-ci, ne connaissant pas non plus de route explicite pour ce paquet, va l'envoyer
sa passerelle par dfaut, savoir 80.8.136.1 dans l'exemple.
C'est parti. Aprs, ce n'est plus de notre comptence, mais de celle de notre fournisseur
d'accs. Le paquet va arriver destination.
Mais pour le retour ?
Pour le retour, a va coincer, vous pensez bien Lorsque la rponse va arriver sur gw2, aprs
dmasquage de l'adresse du destinataire, il lui restera trouver une route qui mne
192.168.1.0 et elle n'en connat pas, donc, retour sur la passerelle par dfaut. Ca ne va pas trop
bien marcher. Il faut bricoler quelque chose sur gw2 :
~# route add -net 192.168.1.0 gw 192.168.0.16 netmask 255.255.255.0 eth1

~#route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
80.8.136.1 0.0.0.0 255.255.255.255 UH 0 0 0
ppp0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0
eth1
192.168.1.0 192.168.0.16 255.255.255.0 UG 0 0 0
eth1
0.0.0.0 80.8.136.1 0.0.0.0 UG 0 0 0
ppp0
En rajoutant
cette route, a ira mieux. gw2 enverra le paquet destination de 192.168.1.2 sur cyclope qui,
lui, saura joindre le destinataire.
Voil une bonne chose de faite. Notre rseau jaune est maintenant en mesure d'offrir ses
htes l'accs l'Internet.
De 192.168.1.0 vers 192.168.0.0 (et vice versa).
Ce serait trop beau que a marche du premier coup
Sur le rseau bleu, il y a deux passerelles. Si on ne le dit pas tous les htes du rseau bleu,
elles ne le dcouvriront pas toutes seules. Elles ne connaissent, faut-il le rappeler, qu'une route
par dfaut, qui pointe sur gw2, savoir 192.168.0.252.
Essayons quand mme, depuis 192.168.0.15, de faire un ping sur 192.168.1.2. Ca passera le
temps.
Envoi d'une requte 'ping' sur 192.168.1.1 avec 32 octets de donnes :

Rponse de 192.168.1.1 : octets=32 temps=1 ms TTL=255
Rponse de 192.168.1.1 : octets=32 temps<1ms TTL=255
Rponse de 192.168.1.1 : octets=32 temps<1ms TTL=255
Rponse de 192.168.1.1 : octets=32 temps<1ms TTL=255

Statistiques Ping pour 192.168.1.1:
Paquets : envoys = 4, reus = 4, perdus = 0 (perte 0%),
Dure approximative des boucles en millisecondes :
Minimum = 0ms, Maximum = 1ms, Moyenne = 0ms
Mince alors, a marche !!! Comment ce peut-ce ?
En faisant du ping pong.
ping
192.168.0.15 ne connat pas de route vers 192.168.1.2. Il envoie la balle sa passerelle
par dfaut 192.168.0.252 (gw2),
gw2, lui, connat une route vers le rseau 192.168.1.0, c'est cyclope (192.168.0.16). Il
lui passe la balle,
cyclope envoie 192.168.1.2.
pong

192.168.1.2 rpond. Ne sachant pas joindre 192.168.0.15, il envoie cyclope,
cyclope sait joindre directement 192.168.0.15, il connat la route vers ce rseau.
C'est une partie triangulaire, en quelque sorte.
Voici graphiquement ce que a donne, mais dans l'autre sens, ping en vert et pong en violet :
Bien entendu, nous pouvions aussi indiquer 192.168.0.15 la route directe pour aller dans le
rseau 192.168.1.0, mais ce n'est pas forcment facile faire de faon automatique (DHCP
par exemple).
Traceroutes
Pour finir de convaincre l'aimable assistance, voici des traceroutes dans les deux sens.
de 192.168.1.2 vers 192.168.0.15 :
~# traceroute -n 192.168.0.15
traceroute to 192.168.0.15 (192.168.0.15), 30 hops max, 38 byte packets
1 192.168.1.1 1.150 ms 1.601 ms 1.602 ms
2 192.168.0.15 1.618 ms 1.863 ms 1.932 ms
Comme prvu, 192.168.1.2 va joindre 192.168.0.15 en traversant le seul routeur 192.168.1.1
(cyclope, ct 192.168.1.0).
de 192.168.0.15 vers 192.168.1.2 :
~# traceroute -n 192.168.1.2
traceroute to 192.168.1.2 (192.168.1.2), 30 hops max, 38 byte packets
1 192.168.0.252 1.209 ms 0.855 ms 0.839 ms
2 192.168.0.16 1.531 ms 0.728 ms 2.235 ms
3 192.168.1.2 1.702 ms 1.195 ms 1.184 ms
En revanche, pour atteindre 192.168.1.2, 192.168.0.15 passera d'abord par 192.168.0.252
(gw2) puis par 192.168.0.16 (cyclope, ct 192.168.0.0)
Conclusions.
Les routes aller et retour ne sont pas forcment les mmes,
des paquets peuvent trouver leur route dans un sens, mais pas dans l'autre,
sur des structures plus compliques, a peut marcher, mais pas forcment de manire
efficace. Avec un peu d'imagination, vous trouverez des cas o un paquet peut
beaucoup voyager dans votre inter rseau, pour arriver finalement sur la machine juste
ct. Attention donc, lorsque a marche du premier coup alors mme que ce n'tait
pas du tout vident, avant de s'merveiller, il vaut mieux essayer de comprendre
pourquoi.
Le routage slectif
Prsentation du chapitre
Nous abordons ici un sujet relativement inclassable, tant il fait appel de multiples outils.
L'objectif initial est de raliser un proxy transparent pour le protocole POP3. Un serveur
mandataire, destin intercepter le trafic POP3 au niveau applicatif pour y effectuer un
contrle antivirus, de faon tout fait transparente pour les utilisateurs.
Pour raliser cette opration, nous devons :
installer un serveur mandataire (P3Scan),
l'quiper d'un antivirus (Clamav),
identifier les flux TCP qui transportent POP3 (Netfilter),
les router vers le serveur mandataire par un systme de routage slectif (Iproute).
Le thme principal de cet expos est de raliser le routage slectif, en utilisant les services de
Netfilter et d'Iproute2. La solution de filtrage antivirus transparente est tout de mme ralise
de bout en bout, mais nous n'analyserons pas en profondeur toutes les possibilits offertes par
Clamav et P3scan.
Topologie
Ce dont nous disposons
Voici l'architecture sur laquelle nous allons monter ce systme :

Nous disposons d'un ou de plusieurs postes de travail, qui accdent l'internet via un routeur
NAT, faisant galement office de pare-feu.
La solution triviale serait d'installer notre proxy POP3 sur le routeur lui-mme, mais ce n'est
pas forcment une bonne solution, d'abord parce que nous verrons que Clamav consomme
normment de ressources, ensuite parce que ce routeur peut trs bien tre une boite noire
spcialise, sur laquelle nous ne pouvons rien installer.
La solution qui reste est donc d'ajouter sur notre rseau local une machine ddie au serveur
mandataire et l'antivirus. Nous trouverons bien un moyen d'y envoyer les flux POP3
destination d'htes de l'internet.
Cette architecture pourrait suffire, nous allons cependant faire plus riche en ajoutant encore
une nouvelle machine :

La passerelle miroir va tre configure comme un routeur, mais avec une seule patte. En
gros, tout flux sortant du ou des postes de travail vers l'internet sera dirig dessus, charge
pour ce miroir de re-diriger les flux :
directement sur le routeur NAT en temps normal,
sur le proxy P3scan pour les flux POP3.
Les chemins emprunts par les flux seront quelque chose de ce genre :
en temps normal pour les flux POP3


Rappelons qu'un serveur mandataire joue en quelque sorte le rle d'une passerelle, mais au
niveau de l'application et non au niveau IP. Le fait qu'il soit transparent va faire que :
le client du LAN va croire qu'il s'adresse directement au serveur cible (pop.free.fr par
exemple),
les requtes POP3 sont interceptes par le proxy, celui-ci les retransmettant pour son
propre compte au vrai serveur POP3.
les rponses du vrai serveur POP3 arrivent donc tout naturellement sur le proxy,
celui-ci effectue le filtrage antivirus sur les messages entrants,
les retransmet au client du LAN comme s'ils arrivaient directement du vrai serveur
POP3, si et seulement s'il n'y a pas eu de virus reconnu dans le message. Sinon, le
proxy enverra au client un message d'alerte la place du message original, qui sera
gard en quarantaine sur le serveur ou purement et simplement dtruit.
Le client, en temps normal n'y verra que du feu, n'aura pas besoin de la moindre modification
dans sa configuration. Tout se fait dans son dos.
L'intrt d'ajouter cette passerelle intermdiaire a un double avantage :
a permet de mieux comprendre comment le systme fonctionne,
a permettra d'ajouter facilement d'autres serveurs mandataires pour d'autres
protocoles comme FTP ou HTTP ou mme de permettre une rpartition de la charge
sur plusieurs serveurs, si le trafic est trs important.
Pratiquement, nous verrons, lorsque nous aurons bien compris le mcanisme, que la fonction
de routage intermdiaire dvolue cette machine peut tre reporte sur le mandataire POP3
lui-mme, si l'on veut faire plus simple.
Dans la suite de cet expos, la passerelle miroir et le proxy POP3 sont des machines Linux. Le
routeur NAT aussi, mais a n'a aucune importance dans la suite. Le ou les postes de travail
peuvent tre n'importe quoi, pourvu que ces n'importe quoi sachent exploiter un rseau
TCP/IP.
Le routeur NAT, qui permet in fine d'atteindre l'internet sera vu comme un simple routeur,
nous ne nous occuperons pas le moins du monde de sa configuration qui est suppose tre
dj oprationnelle. Si vous voulez plus de dtails sur la faon de raliser un tel routeur,
reportez-vous aux chapitres :
Partage de connexion pour le principe du NAT,
Netfilter et IPtables pour approfondir les rgles de filtrage de paquets,
La scurit pour mieux comprendre ce que l'on risque se connecter l'internet.
La distribution utilise est une Debian Sarge (avec un noyau 2.6.8), encore en statut testing
l'heure o ces lignes sont crites, mais qui finira bien un jour pas tre dclare stable la
place de la Woody vieillissante.
Iproute 2
Avertissement
Ce qui suit suppose comme acquis tout ce qui est dit dans les chapitres relatifs au routage :
IP et le Routage
Le routage, complments
Au bon vieux temps...
Tous les utilisateurs de GNU/Linux connaissent les commandes route et ifconfig. Bien
qu'elles soient toujours efficaces, les volutions des fonctions de routage des noyaux 2.4.x et
suprieurs ont fait qu'elles ne rendent plus compte que d'une partie des possibilits.
Pour exploiter au mieux les possibilits de routage des noyaux actuels, il faut installer le
paquetage iproute (iproute2 dans d'autres distributions, comme la Mandrake).
Iproute2, alli Netfilter, donne un couple capable de faire de grandes choses. Comme il faut
bien commencer par un bout , voyons d'abord en quoi iproute2 peut nous aider.
Prsentation rapide d'Iproute2
Les interfaces du rseau
Nous savons que la commande ifconfig nous montre les interfaces rseau en service sur
notre machine :
betelgeuse:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:20:18:2D:D2:91
inet addr:192.168.100.30 Bcast:192.168.100.255
Mask:255.255.255.0
inet6 addr: fe80::220:18ff:fe2d:d291/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19370201 errors:0 dropped:0 overruns:0 frame:0
TX packets:3279270 errors:0 dropped:0 overruns:0 carrier:0
collisions:150124 txqueuelen:1000
RX bytes:3979103861 (3.7 GiB) TX bytes:376345956 (358.9 MiB)
Interrupt:11 Base address:0x2000

eth1 Link encap:Ethernet HWaddr 00:90:27:71:43:C7
inet addr:192.168.0.250 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::290:27ff:fe71:43c7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3129241 errors:0 dropped:0 overruns:0 frame:0
TX packets:3344387 errors:0 dropped:0 overruns:0 carrier:21
collisions:478776 txqueuelen:1000
RX bytes:317538639 (302.8 MiB) TX bytes:2507642937 (2.3 GiB)
Interrupt:11 Base address:0x7000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:28040 errors:0 dropped:0 overruns:0 frame:0
TX packets:28040 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3395473 (3.2 MiB) TX bytes:3395473 (3.2 MiB)

ppp0 Link encap:Point-to-Point Protocol
inet addr:80.8.154.12 P-t-P:80.8.128.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:6405 errors:0 dropped:0 overruns:0 frame:0
TX packets:4791 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:5209426 (4.9 MiB) TX bytes:662798 (647.2 KiB)

tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-
00-00-00
inet addr:192.168.18.2 P-t-P:192.168.18.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:685 errors:0 dropped:0 overruns:0 frame:0
TX packets:685 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:54460 (53.1 KiB) TX bytes:73640 (71.9 KiB)
Trs verbeux, nous avons pas mal d'informations sur les diverses interfaces. L'exemple est
pris sur une passerelle qui assure la connexion l'internet via un lien PPP, et qui prsente
galement un lien vers un tunnel Open VPN (tun1).
Iproute dispose d'une commande : ip suivie de plusieurs arguments. Utilisons ici ip addr :
betelgeuse:~# ip addr list
1: lo: &lt;LOOPBACK,UP&gt; mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: &lt;BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:20:18:2d:d2:91 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.30/24 brd 192.168.100.255 scope global eth0
inet6 fe80::220:18ff:fe2d:d291/64 scope link
valid_lft forever preferred_lft forever
3: eth1: &lt;BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:90:27:71:43:c7 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.250/24 brd 192.168.0.255 scope global eth1
inet6 fe80::290:27ff:fe71:43c7/64 scope link
valid_lft forever preferred_lft forever
4: sit0: &lt;NOARP&gt; mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
254: ppp0: &lt;POINTOPOINT,MULTICAST,NOARP,UP&gt; mtu 1492 qdisc pfifo_fast
qlen 3
link/ppp
inet 80.8.154.12 peer 80.8.128.1/32 scope global ppp0
255: tun1: &lt;POINTOPOINT,MULTICAST,NOARP,UP&gt; mtu 1500 qdisc pfifo_fast
qlen 100
link/[65534]
inet 192.168.18.2 peer 192.168.18.1/32 scope global tun1
Je vous laisse passer du temps comparer les deux informations. Formules de manires
diffrentes (et pas forcment plus lisibles), ce sont, en partie, les mmes.
Nous avons aussi notre disposition les commandes :
ip link list, qui affiche la liste des interfaces :
betelgeuse:~# ip link list
1: lo: &lt;LOOPBACK,UP&gt; mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: &lt;BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:20:18:2d:d2:91 brd ff:ff:ff:ff:ff:ff
3: eth1: &lt;BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:90:27:71:43:c7 brd ff:ff:ff:ff:ff:ff
4: sit0: &lt;NOARP&gt; mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
913: ppp0: &lt;POINTOPOINT,MULTICAST,NOARP,UP&gt; mtu 1492 qdisc pfifo_fast
qlen 3
link/ppp
914: tun1: &lt;POINTOPOINT,MULTICAST,NOARP,UP&gt; mtu 1500 qdisc pfifo_fast
qlen 100
link/[65534]
ip neigh list, qui affiche la table ARP, un peu la manire de la commande arp -a :
betelgeuse:~# ip neigh list
2001:4f8:0:2::8 dev eth0 nud failed
192.168.0.13 dev eth1 lladdr 00:20:18:2f:d1:8c nud stale
192.168.0.12 dev eth1 lladdr 00:20:18:2f:0e:35 nud reachable
192.168.0.11 dev eth1 lladdr 00:20:18:2a:f5:ca nud reachable
192.168.0.67 dev eth1 lladdr 00:90:96:c4:d9:e0 nud stale
192.168.0.10 dev eth1 lladdr 00:05:5d:4a:f1:c8 nud reachable
192.168.0.64 dev eth1 lladdr 00:40:05:de:68:c3 nud stale
Les routes
Voyons maintenant la commande route :
betelgeuse:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
192.168.18.1 0.0.0.0 255.255.255.255 UH 0 0 0
tun1
80.8.128.1 0.0.0.0 255.255.255.255 UH 0 0 0
ppp0
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0
eth1
172.16.0.0 192.168.18.1 255.255.0.0 UG 0 0 0
tun1
0.0.0.0 80.8.128.1 0.0.0.0 UG 0 0 0
ppp0
La commande ip, suivie de l'argument route, nous donne :
betelgeuse:~# ip route list
192.168.18.1 dev tun1 proto kernel scope link src 192.168.18.2
80.8.128.1 dev ppp0 proto kernel scope link src 80.8.154.12
192.168.100.0/24 dev eth0 proto kernel scope link src 192.168.100.30
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.250
172.16.0.0/16 via 192.168.25.1 dev tun1
default via 80.8.128.1 dev ppp0
Moins lisible, assurment. Mais plus riche en informations. Voyons a de plus prs.
Avec route, nous pensions qu'il n'y avait qu'une table de routage. En ralit, il y en a
plusieurs. Dans la terminologie iproute2, les tables sont exploites en fonction de rgles
(rules en anglais). Nous pouvons avoir un aperu d'un routage standard de la faon suivante :
betelgeuse:/etc/iproute2# ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Tout ceci voudrait dire qu'il y a au moins trois tables de routage, local, main et default,
qui seraient auscultes pour router tous les paquets entrant dans le routeur, quelle que soit
leur provenance (from all) et dans l'ordre indiqu par l'index numrique plac juste avant
chaque rgle ?
Absolument, c'est bien comme a que a se passe.
Et donc, il serait possible, avec la commande ip, de voir ce qu'il y a dans chacune de ces
tables ?
Oui. Il suffit d'en prciser le nom :
betelgeuse:/etc/iproute2# ip route list table main
192.168.18.1 dev tun1 proto kernel scope link src 192.168.18.2
80.8.128.1 dev ppp0 proto kernel scope link src 80.8.154.12
192.168.100.0/24 dev eth0 proto kernel scope link src 192.168.100.30
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.250
172.16.0.0/16 via 192.168.25.1 dev tun1
default via 80.8.128.1 dev ppp0
C'est la mme que tout l'heure !
Oui, c'est la mme. Preuve que l'antique commande route ne nous dit pas tout, puisque avant
main, il y a local, et que cette table n'est pas vide du tout :
betelgeuse:/etc/iproute2# ip route list table local
broadcast 192.168.100.0 dev eth0 proto kernel scope link src
192.168.100.30
broadcast 192.168.0.255 dev eth1 proto kernel scope link src
192.168.0.250
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
local 80.8.154.12 dev ppp0 proto kernel scope host src 80.8.154.12
local 192.168.0.250 dev eth1 proto kernel scope host src 192.168.0.250
local 192.168.18.2 dev tun1 proto kernel scope host src 192.168.18.2
broadcast 192.168.100.255 dev eth0 proto kernel scope link src
192.168.100.30
broadcast 192.168.0.0 dev eth1 proto kernel scope link src 192.168.0.250
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 192.168.100.30 dev eth0 proto kernel scope host src 192.168.100.30
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
Mais comme vous le voyez, cette table ne concerne que le routage local et les broadcasts ,
rien de bien palpitant. Quant la table default, elle est vide par dfaut.
Mais alors, il y aurait la possibilit de crer des tables qui ne seraient utilises que dans
certaines conditions ?
C'est une partie de l'intrt et de la puissance du modle Iproute2. Parce qu'en plus de a,
Iproute2 sait faire plein d'autres choses. Pour vous en convaincre, le mieux est de lire la
documentation officielle : Advanced Routing HOWTO, dont il existe une version en franais.
Il n'est bien entendu pas question ici de voir tout ce qu'il est possible de faire, l'objectif est
juste de pouvoir raliser un routage slectif en fonction d'un numro de port TCP.
Mise en place d'une rgle de routage
Dans ce qui suit, la machine qui va servir de passerelle miroir s'appelle saturne .
La liste des tables qui existent sur votre machine se trouve dans le fichier
/etc/iproute2/rt_tables. Vous ne pourrez pas crer de rgles (rules) associes une table
qui n'est pas rfrence dans ce fichier. Comme nous aurons besoin d'une table de routage
spcifique pour le protocole POP3, nous allons crer une entre supplmentaire dans ce
fichier qui, aprs modification, aura l'allure suivante :
saturne:~# cat /etc/iproute2/rt_tables
#
# reserved values
#

200 pop3
255 local
254 main
253 default
0 unspec
#
# local
#
1 inr.ruhep
Cette manipulation, en elle mme n'apporte rien aux rgles en vigueur :
saturne:~# ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Si nous voulons ajouter une rgle, il faudra le dire explicitement de la faon suivante (prenez-
le comme une recette pour le moment) :
saturne:~# ip rule add fwmark 6e table pop3
Ceci a pour effet d'ajouter une rgle, que nous comprendrons mieux par la suite. Disons pour
le moment que, lorsqu'un paquet contient la marque 0x6e (valeur hexadcimale), il devra tre
rout en fonction des informations contenues dans la table de routage pop3.
saturne:~# ip rule list
0: from all lookup local
32765: from all fwmark 6e lookup pop3
32766: from all lookup main
32767: from all lookup default
Nous voyons effectivement apparaitre une ligne supplmentaire dans la liste des rgles.
Mais la table de routage pop3 est vide. Il faut la peupler un petit peu. En ralit, qu'avons-
nous besoin de faire, en fonction de la topologie donne ? Il nous suffit de dire que pour ces
paquets, la route par dfaut n'est pas 192.168.0.1, mais 192.168.0.3, adresse ip du serveur
mandataire. Faisons le :
ip route add default via 192.168.0.3 dev eth0 table pop3
Bien. Pour vrifier :
saturne:~# ip route list table pop3
default via 192.168.0.3 dev eth0
Et si nous regardons la table de routage principale :
saturne:~# ip route list table main
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2
default via 192.168.0.1 dev eth0
Autrement dit, si tout se passe comme prvu, tous les paquets sortant du poste de travail (qui
est configur pour voir 192.168.0.2 comme passerelle par dfaut) seront aiguills vers
192.168.0.1 (la vraie passerelle vers l'internet), sauf les paquets marqus 6e, qui, eux, seront
aiguills vers 192.168.0.3 (le futur proxy transparent POP3).
Pour pouvoir vrifier si tout a fonctionne, il faut commencer par pouvoir marquer ces
paquets avec le label 6e, ce que nous n'avons pas encore fait.
Pour raliser cette opration, nous aurons recours Netfilter, avec IPtables.
Netfilter
Charcuter les datagrammes IP
Avertissement
Pour ce qui suit, il est fortement recommand de savoir ce que sont Netfilter et IPtables,
autrement dit d'avoir lu le chapitre Netfilter et IPtables .
La table mangle
Cette table, peu voque dans le chapitre indiqu ci-dessus, va nous servir ici. Son but est
justement de pouvoir placer des marques sur les paquets qui circulent. Elle dispose au moins
de la chane PREROUTING, celle qui nous intresse ici. Autrement dit, ce qui suit doit tre
ralisable avec tout noyau 2.4.x ou suprieur.
Nous devons en effet marquer les paquets avant le routage, puisque le routage va dpendre
justement de cette marque.
Que devons-nous faire exactement ?
Nous devons, sur la passerelle miroir, marquer avant routage les paquets qui contiennent un
port de destination gal 110 (en dcimal), le port par dfaut sur lequel coutent les serveurs
POP3 :
iptables -t mangle -A PREROUTING -i eth0 -p tcp -m tcp --dport 110 -j MARK
--set-mark 0x6e
Pourquoi la marque 0x6e (le 0x signifie que l'on s'exprime en hexadcimal) ? En ralit, la
valeur n'a aucune importance, pourvu qu'on utilise la mme avec iproute2, lors de la cration
de la rgle de routage. 0x6e = 110, c'est juste un choix mnmotechnique.
A ce niveau nous avons sur notre passerelle miroir :
les paquets destination du port 110 qui sont marqus, avec iptables,
la table de routage spcifique cette marque qui est renseigne avec une route par
dfaut qui pointe sur le futur proxy POP3
Si cette passerelle est configure pour effectuer le routage (/proc/sys/net/ipv4 = 1), elle
devrait donc remplir son office.
Passons maintenant la machine destine recevoir le proxy. Pour l'instant, il y a juste un
systme install. Il n'est pas ncessaire qu'il soit configur pour router, mais pour tester ce que
nous avons fait jusqu'ici, ce sera utile.
Voyons son tat :
mercure:~# ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
mercure:~# ip route list
192.168.0.0/16 dev eth0 proto kernel scope link src 192.168.0.3
default via 192.168.0.1 dev eth0
Vous l'avez compris, sur la maquette, cette machine s'appelle mercure. Elle n'a aucune rgle
de routage particulire et donc, sa seule route par dfaut est 192.168.0.1, la vraie passerelle
vers l'internet.
Pour les besoins de la manip qui suit, nous activons le routage :
mercure:~# echo 1 > /proc/sys/net/ipv4/ip_forward
Et maintenant, nous avons besoin d'un outil un peu spcial. Un outil qui trace les routes, mais
qui le fait en utilisant TCP (et non UDP ou ICMP, comme le traceroute classique), sur un port
de son choix. Cet outil n'est bien sr pas install par dfaut, mais est disponible sur la Debian
Sarge, avec un apt-get install tcptraceroute.
Dans un premier temps, un tcptraceroute sur le port 80 de www.free.fr :
janus:~# tcptraceroute www.free.fr 80
Selected device eth0, address 192.168.0.4 for outgoing packets
Tracing the path to www.free.fr (213.228.0.42) on TCP port 80, 30 hops max
1 192.168.0.2 (192.168.0.2) 0.275 ms 0.136 ms 0.121 ms
2 192.168.0.1 (192.168.0.1) 0.769 ms
193.253.160.3 (193.253.160.3) 68.483 ms 59.903 ms
3 80.10.215.197 (80.10.215.197) 84.734 ms 58.070 ms 59.270 ms
4 pos6-0.nraub303.Aubervilliers.francetelecom.net (193.252.99.70)
216.432 ms 215.634 ms 216.115 ms
5 pos13-0.ntaub301.aubervilliers.francetelecom.net (193.252.161.82)
57.044 ms 55.925 ms 54.911 ms
6 pos0-0-0-0.noaub101.aubervilliers.francetelecom.net (193.252.103.85)
56.687 ms 56.202 ms 57.633 ms
7 193.252.161.98 (193.252.161.98) 58.090 ms 57.025 ms 57.829 ms
8 p19-6k-2-v806.routers.proxad.net (212.27.50.161) 56.652 ms 55.946 ms
56.285 ms
9 vlq-6k-2-v800.intf.routers.proxad.net (212.27.50.5) 58.152 ms 57.447
ms 57.984 ms
10 vlq-6k-1-po1.intf.routers.proxad.net (212.27.50.2) 57.969 ms 57.473
ms 60.456 ms
11 www1.free.fr (213.228.0.42) [open] 56.886 ms 58.319 ms 62.456 ms
Notez qu' l'aller, le paquet issu de notre machine de test (janus, sous Debian Sarge elle
aussi), passent par notre passerelle miroir 192.168.0.2, puis par le routeur NAT 192.168.0.1.
Voyons maintenant un tcptraceroute sur le port 110 de pop.free.fr :
janus:~# tcptraceroute pop.free.fr 110
Selected device eth0, address 192.168.0.4 for outgoing packets
Tracing the path to pop.free.fr (212.27.42.14) on TCP port 110, 30 hops max
1 192.168.0.2 (192.168.0.2) 0.285 ms 0.122 ms 0.119 ms
2 192.168.0.3 (192.168.0.3) 0.784 ms 0.229 ms 0.214 ms
3 192.168.0.1 (192.168.0.1) 0.847 ms 0.585 ms 0.578 ms
4 193.253.160.3 (193.253.160.3) 67.374 ms 58.665 ms
80.10.215.197 (80.10.215.197) 58.922 ms
5 pos1-0.nraub303.aubervilliers.francetelecom.net (193.252.103.170)
62.153 ms 63.039 ms 60.602 ms
6 pos13-0.ntaub301.aubervilliers.francetelecom.net (193.252.161.82)
59.383 ms 55.566 ms 57.070 ms
7 pos0-0-0-0.noaub101.aubervilliers.francetelecom.net (193.252.103.85)
57.811 ms 57.416 ms 59.551 ms
8 193.252.161.98 (193.252.161.98) 56.101 ms 56.321 ms 57.904 ms
9 p19-6k-2-v806.routers.proxad.net (212.27.50.161) 61.040 ms 55.864 ms
58.123 ms
10 vlq-6k-2-v800.intf.routers.proxad.net (212.27.50.5) 58.282 ms 58.115
ms 57.634 ms
11 vlq-6k-1-po1.intf.routers.proxad.net (212.27.50.2) 59.048 ms 58.657
ms 59.208 ms
12 pop4-q.free.fr (212.27.42.14) [open] 59.107 ms 58.373 ms 63.638 ms
Si le paquet issu de janus passe d'abord par la passerelle miroir 192.168.0.2, il est ensuite
dirig sur mercure, notre futur proxy POP3 dont l'adresse est 192.168.0.3. Comme celui-ci
n'est pas encore configur, mais qu'il a le routage activ, il transmet alors le paquet au routeur
NAT 192.168.0.1
Nous avons bien russi mettre en vidence que saturne, la passerelle miroir, effectue un
routage diffrent suivant que le trafic est du http (port 80) ou du POP3 (port 110).
Le proxy
Installation de Clamav
Clamav est un antivirus sous licence GPL, qui fonctionne sur le principe d'une base de
donnes de signatures, comme la plupart des antivirus commerciaux. Son installation ne pose
aucun problme particulier sur une Debian Sarge. Les scripts d'installation vous aideront
configurer correctement cet antivirus, en choisissant :
le miroir le plus proche pour les mises jour de la base de donne des virus connus,
le mode de mise jour, plusieurs modes possibles, dont un dmon qui vrifie
priodiquement auprs du serveur, la mise disposition d'une mise jour de la base.
Pensez installer tous les outils de dcompression ncessaires au bon fonctionnement de
l'antivirus sur les pices jointes compresses. Apt vous indiquera la liste des paquetages
supplmentaires suggrs et recommands, s'ils ne sont dj prsents.
Clamav semble tre un bon antivirus, dont le principal avantage est d'tre sous licence GPL et
le principal inconvnient, celui de consommer normment de ressources CPU. Il ne sait pas
radiquer un virus dans un document (ici, un e-mail). Tout ce qu'il sait faire, c'est identifier un
virus connu. Vous pourrez alors choisir de mettre le message en quarantaine ou de le dtruire,
mais c'est P3Scan qui se chargera de a.
Clamav tourne par dfaut sous le nom d'un utilisateur fictif : clamav, cr lors de l'installation
du paquetage.
Installation de P3Scan
P3Scan est le logiciel proxy. Il permet non seulement d'y greffer Clamav, ou d'autres antivirus
non libres, mais encore spamassassin, si vous souhaitez en profiter pour filtrer les spams.
Il s'installe aussi simplement que clamav avec les apt, mais il faudra ici revenir un petit peu
sur son fichier de configuration.
Pour que P3Scan fonctionne, il faut le configurer pour qu'il utilise au moins les services d'un
antivirus.
Voici l'allure du fichier de configuration :
mercure:~# cat /etc/p3scan/p3scan.conf | grep ^[^#]
pidfile = /var/run/p3scan/p3scan.pid
maxchilds = 10
ip = 0.0.0.0
port = 8110
user = p3scan
notifydir = /var/spool/p3scan/notify
virusdir = /var/spool/p3scan
justdelete
scannertype = basic
scanner = /usr/bin/clamscan --no-summary -i
virusregexp = .*: (.*) FOUND
template = /etc/p3scan/p3scan-fr.mail
subject = [virus] dans un message pour vous:
notify = Pour information, le message a t dtruit.
Le grep ^[^#] est une astuce qui permet d'liminer toutes les lignes de commentaire (qui
commencent par un #). Pour comprendre cette incantation, il faut comprendre la syntaxe des
expressions rgulires, c'est assez spcial
Vous pourrez, au choix, conserver en quarantaine les messages vrols (dans
/var/spool/p3scan) ou tout simplement les dtruire (directive justdelete)
La directive template dfinit le chemin d'accs au message type qui se substituera au
message infect. P3scan propose dans /etc/p3scan une liste de messages types en diffrentes
langues, que vous pouvez aisment personnaliser.
La ligne subject dfinit l'objet de ce message, qui sera complt par le nom du virus.
La ligne notify apparat dans le message si justdelete est actif.
Voici (par anticipation, parce que pour l'instant, a ne fonctionne pas encore), un exemple de
texte source d'un message reu (ici, avec l'option justdelete inactive) :
From - Sat Feb 05 14:29:34 2005
X-Account-Key: account2
X-UIDL: 1083005466.9058
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Return-Path: &lt;webmaster@divx-overnet.com&gt;
Received: from mwinf1008.wanadoo.fr (mwinf1008.wanadoo.fr)
by mwinb0704 (SMTP Server) with LMTP; Sat, 05 Feb 2005 14:30:25
+0100
X-Sieve: Server Sieve 2.2
Received: from me-wanadoo.net (localhost [127.0.0.1])
by mwinf1008.wanadoo.fr (SMTP Server) with ESMTP id 56A2B6000384
for &lt;caleca.christian@free.fr&gt;; Sat, 5 Feb 2005 14:30:25
+0100 (CET)
Received: from free.fr (12.254.100-84.rev.gaoland.net [84.100.254.12])
by mwinf1008.free.fr (SMTP Server) with ESMTP id EC80B600038E
for &lt;caleca.christian@free.fr&gt;; Sat, 5 Feb 2005 14:30:17
+0100 (CET)
X-ME-UUID: 20050205133018968.EC80B600038E@mwinf1008.free.fr
From: webmaster@divx-overnet.com
To: caleca.christian@free.fr
Date: Sat, 05 Feb 2005 14:30:34 +0100
Subject: [Virus] dans un message pour vous: Worm.SomeFool.AA-2
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain;
charset="iso-8859-1"

Bonjour caleca.christian.
Ce corps de message a t gnr automatiquement par P3Scan, qui fonctionne
sur
la passerelle mercure pour scanner tous les courriels entrants.

Il remplace le corps du message contenant un VIRUS qui vous tait adress!
Ce message vous est envoy la place du courriel infect, .

==========
Nom du virus:
Worm.SomeFool.AA-2

Expditeur du courriel:
webmaster@divx-overnet.com

Envoy :
caleca.christian@free.fr

Date:
Sat, 05 Feb 2005 14:30:34 +0100

Object:
Information

Informations de connexion:
POP3 from 192.168.0.10:1395 to 193.252.22.90:110

Le fichier original du message est archiv sur le serveur sous le nom de :
/p3scan.ZzReH5
==============

--
P3Scan 2.1
par Jack S. Lai &lt;laitcg@cox.net&gt;
.
Que manque-t-il pour finir ?
Nous avons :
le routage slectif qui est oprationnel, nous l'avons test,
l'antivirus install,
le proxy p3scan galement install.
Mais
Il faut tout de mme rediriger les flux POP3 (port 110) entrants sur mercure vers le port du
proxy (8110 dans notre configuration). Il nous faudra donc crire quelque rgle iptables
bien sentie sur mercure.
Quelque chose du genre :
iptables -t nat -A PREROUTING -i eth0 -d ! 192.168.0.0/24 -p tcp --dport
110 -j REDIRECT --to-ports 8110
Nous sommes en PREROUTING, donc sitt que le paquet TCP entre par eth0, s'il est
destination du port 110, il est redirig sur le port 8110, sans changer l'adresse IP du
destinataire (ce qui n'aurait pas t le cas avec une rgle utilisant le DNAT, condition
indispensable pour que P3Scan puisse savoir quel vrai serveur POP3 il doit s'adresser). Il
sera donc intercept par le proxy, condition que ce ne soit pas destination de l'une de nos
machines du LAN (c'est une prcaution, pas indispensable, du moins pour p3scan).
Le rsultat est assez amusant (et mme vertigineux) voir avec un tcptraceroute :
janus:~# tcptraceroute pop.wanadoo.fr 110
Selected device eth0, address 192.168.0.4 for outgoing packets
Tracing the path to pop.wanadoo.fr (193.252.22.68) on TCP port 110, 30 hops
max
1 192.168.0.2 (192.168.0.2) 0.282 ms 0.125 ms 0.118 ms
2 pop.wanadoo.fr (193.252.22.68) [open] 1.087 ms 0.231 ms 0.209 ms
Quand je vous disais que c'est amusant Le client, janus, qui fait un traceroute vers
pop.wanadoo.fr a l'impression qu'il a atteint sa cible au deuxime hop , c'est dire,
lorsqu'il atteint le proxy (mercure).
Fonctionnement
Ethereal va encore frapper, pour bien voir ce qu'il se passe au niveau de mercure, le proxy
POP3. Juste pour vrifier le fonctionnement du proxy, depuis janus, nous allons ouvrir une
session POP3 sur pop.free.fr, avec telnet, ce sera plus folklorique. Pendant ce temps, ethereal
rcuprera tout ce qui passe sur l'unique interface eth0 de la machine.
Voici l'intgralit du dialogue dans la console telnet :
janus:~# telnet pop.free.fr 110
Trying 212.27.42.11...
Connected to pop1-q.free.fr.
Escape character is '^]'.
+OK &lt;31488.1107616735@pop1-q.free.fr&gt;
user caleca.christian
+OK
pass haben_non
+OK
stat
+OK 1121 25539581
quit
+OK
Connection closed by foreign host.
Vraiment le strict minimum, juste pour voir comment a se passe au niveau de mercure.
No. Source Destination Protocol Info
1 192.168.0.4 212.27.42.12 TCP 33273 > pop3 [SYN] Seq=0
Ack=0
2 212.27.42.12 192.168.0.4 TCP pop3 > 33273 [SYN, ACK]
Seq=0 Ack=1
3 192.168.0.4 212.27.42.12 TCP 33273 > pop3 [ACK] Seq=1
Ack=1

# le client janus (192.168.0.4) a ouvert une connexion TCP avec ce qu'il
croit tre
# le serveur pop.free.fr (212.27.42.12). En ralit, il l'a ouverte avec
mercure (192.168.0.3)
# mais a ne se voit pas. C'est normal, c'est fait pour tre "transparent"

4 192.168.0.3 212.27.42.12 TCP 39232 > pop3 [SYN] Seq=0
Ack=0
5 212.27.42.12 192.168.0.3 TCP pop3 > 39232 [SYN, ACK]
Seq=0 Ack=1
6 192.168.0.3 212.27.42.12 TCP 39232 > pop3 [ACK] Seq=1
Ack=1

# A son tour, mercure (192.168.0.3) ouvre une connexion TCP avec le vrai
pop.free.fr.
# Cette fois-ci, il n'y a pas de tromperie.

7 212.27.42.12 192.168.0.3 POP Response: +OK
<14870.1107617952@pop2-q.free.fr>
8 192.168.0.3 212.27.42.12 TCP 39232 > pop3 [ACK] Seq=1
Ack=40

# Le vrai serveur pop.free.fr, croyant avoir affaire avec un vulgaire
client POP3
# envoie notre proxy la rponse +OK (voir le protocole pop3 pour plus
d'informations)

9 212.27.42.12 192.168.0.4 POP Response: +OK
<14870.1107617952@pop2-q.free.fr>
10 192.168.0.4 212.27.42.12 TCP 33273 >; pop3 [ACK] Seq=1
Ack=40

# notre proxy, qui se fait toujours passer pour le vrai pop.free.fr,
rpercute alors cette
# rponse notre client janus (192.168.0.4) qui continue croire qu'il
discute
# avec le vrai serveur POP3////

11 192.168.0.4 212.27.42.12 POP Request: user
caleca.christian
12 212.27.42.12 192.168.0.4 TCP pop3 > 33273 [ACK] Seq=40
Ack=24

# notre client, toujours bern, envoie alors le nom d'utilisateur, ce
qu'il croit
# toujours tre son serveur POP3 (alors qu'il s'agit bien sr de notre
proxy)

13 192.168.0.3 212.27.42.12 POP Request: user
caleca.christian
14 212.27.42.12 192.168.0.3 TCP pop3 > 39232 [ACK] Seq=40
Ack=24

# Et notre proxy (192.168.0.3) de rpter la chose au vrai serveur POP3
# qui continue croire qu'il discute avec son client.

15 212.27.42.12 192.168.0.3 POP Response: +OK
16 192.168.0.3 212.27.42.12 TCP 39232 > pop3 [ACK] Seq=24
Ack=46

# Il lui rpond alors +OK

17 212.27.42.12 192.168.0.4 POP Response: +OK
18 192.168.0.4 212.27.42.12 TCP 33273 > pop3 [ACK] Seq=24
Ack=46

# Bien entendu, notre proxy qui continue se faire passer pour pop.free.fr
# vis vis de janus, lui rpercute la rponse.

19 192.168.0.4 212.27.42.12 POP Request: pass haben_non
20 212.27.42.12 192.168.0.4 TCP pop3 > 33273 [ACK] Seq=46
Ack=39

# Enhardi par ce succs, janus envoie alors le mot de passe au suppos
pop.free.fr
# (qui n'est autre, vous le devinez, que le proxy mercure)...

21 192.168.0.3 212.27.42.12 POP Request: pass haben_non
22 212.27.42.12 192.168.0.3 TCP pop3 > 39232 [ACK] Seq=46
Ack=39

# Lequel mercure, qui continue inlassablement se faire passer pour un
client
# POP3 "normal", rpte au vrai serveur POP3.

23 212.27.42.12 192.168.0.3 POP Response: +OK
24 192.168.0.3 212.27.42.12 TCP 39232 > pop3 [ACK] Seq=39
Ack=52

# Lequel, ne trouvant rien de spcial redire, se contente de rpondre +OK

25 212.27.42.12 192.168.0.4 POP Response: +OK
26 192.168.0.4 212.27.42.12 TCP 33273 > pop3 [ACK] Seq=39
Ack=52

# et notre proxy de continuer jouer les proquets.
# Et ainsi de suite... Je vous laisse finir de commenter ce "listing"

27 192.168.0.4 212.27.42.12 POP Request: stat
28 212.27.42.12 192.168.0.4 TCP pop3 > 33273 [ACK] Seq=52
Ack=45
29 192.168.0.3 212.27.42.12 POP Request: stat
30 212.27.42.12 192.168.0.3 TCP pop3 > 39232 [ACK] Seq=52
Ack=45
31 212.27.42.12 192.168.0.3 POP Response: +OK 1122 25540691
32 192.168.0.3 212.27.42.12 TCP 39232 > pop3 [ACK] Seq=45
Ack=71
33 212.27.42.12 192.168.0.4 POP Response: +OK 1122 25540691
34 192.168.0.4 212.27.42.12 TCP 33273 > pop3 [ACK] Seq=45
Ack=71
35 192.168.0.4 212.27.42.12 POP Request: quit
36 212.27.42.12 192.168.0.4 TCP pop3 > 33273 [ACK] Seq=71
Ack=51
37 192.168.0.3 212.27.42.12 POP Request: quit
38 212.27.42.12 192.168.0.3 POP Response: +OK
39 192.168.0.3 212.27.42.12 TCP 39232 > pop3 [ACK] Seq=51
Ack=77
40 212.27.42.12 192.168.0.4 POP Response: +OK
41 192.168.0.4 212.27.42.12 TCP 33273 > pop3 [ACK] Seq=51
Ack=77
42 212.27.42.12 192.168.0.3 TCP pop3 > 39232 [FIN, ACK]
Seq=77 Ack=51
43 212.27.42.12 192.168.0.4 TCP pop3 > 33273 [FIN, ACK]
Seq=77 Ack=51
44 192.168.0.3 212.27.42.12 TCP 39232 > pop3 [FIN, ACK]
Seq=51 Ack=78
45 192.168.0.4 212.27.42.12 TCP 33273 > pop3 [FIN, ACK]
Seq=51 Ack=78
46 212.27.42.12 192.168.0.4 TCP pop3 > 33273 [ACK] Seq=78
Ack=52
47 212.27.42.12 192.168.0.3 TCP pop3 > 39232 [ACK] Seq=78
Ack=52
Donc, pour rcapituler :
Le client janus croit tout le temps qu'il dialogue avec pop.free.fr, alors qu'en ralit, il
dialogue avec mercure, le proxy transparent. Pour janus, l'adresse IP de son serveur est
toujours celle de pop.free.fr.
Le vrai serveur pop.free.fr, tout le temps du dialogue, discute en ralit avec notre proxy, en
croyant que c'est un vulgaire client POP3.
le proxy, quant lui, se contente de rpter d'un bord l'autre ce qu'il reoit :
en se faisant passer pour un client du ct du vrai serveur, avec sa vraie adresse IP,
en se faisant passer pour le vrai serveur POP3 du ct du client, en usurpant l'adresse
IP du vrai serveur POP3.
Finalement aucune des deux extrmits ne se rend compte qu'il y a un serveur mandataire
entre les deux, et c'est bien le but d'un proxy transparent.
Conclusions
L'objectif de ce chapitre tait de donner un exemple d'application du marquage de paquets
avec Netfilter, associ un routage slectif avec Iproute2, en se servant de ces possibilits
pour raliser un proxy transparent pour le protocole POP3.
Nous n'avons pas vu tout ce qu'il est possible de faire avec la table mangle de Netfilter, ni tout
ce qu'il est possible de tirer d'Iproute2. Parmi les choses possibles, il y a l'quilibrage de
charge entre protocoles, la ventilation du trafic entre rseaux sur plusieurs routes par dfaut, si
l'on dispose par exemple de plusieurs accs l'internet, la surveillance et la protection contre
certains types de DoS et d'autres choses encore.
Nous avons rapidement vu le logiciel P3scan pour raliser le serveur mandataire, sans pour
autant en exploiter toutes les possibilits. Nous aurions pu y greffer aussi Spamassassin pour
effectuer un filtrage de spams.
Nous avons vu, non moins rapidement, le logiciel antivirus Clamav, pour l'utiliser travers
P3scan. Mais Clamav est un antivirus part entire, qui peut galement servir contrler le
contenu des mmoires de masse, et peut aussi se greffer sur d'autres applications.
Parmi les applications trs proches de ce que nous avons fait, c'est dire en utilisant des
techniques tout fait similaires, nous pourrions citer :
la mise en place d'un serveur proxy transparent pour le FTP, avec filtrage antivirus ;
Frox est un mandataire FTP bien adapt cette possibilit,
la mise en place d'un proxy transparent pour HTTP, avec Squid, que l'on peut
galement coupler Clamav ; il est mme possible d'utiliser Squid avec SquidGuard et
Clamav, la condition d'utiliser Clamav travers SquidGuard.
Si ce genre d'aventures vous tente, pensez tout de mme que Clamav, comme Spamassassin
sont des logiciels trs gourmands en ressources CPU et prvoyez les machines en
consquence.
L'architecture qui est propose dans cet expos offre l'avantage de pouvoir facilement
multiplier les machines hbergeant les serveurs mandataires.
Partage de connexion
Prsentation
Vous allez apprendre configurer un serveur LINUX pour connecter un rseau priv
l'Internet par votre belle connexion Haut Dbit, qu'elle soit ADSL ou Cble. Bien
qu'aujourd'hui les fournisseurs d'accs proposent tous une box qui fait office de
modem/routeur/borne WI-FI, il reste intressant de raliser son propre routeur NAT, qui
disposera de fonction bien plus avances que les box .
Comme l'immense majorit des connexions, cble ou ADSL utilisent maintenant PPPoE, il est
vivement conseill de lire d'abord le chapitre sur ce sujet. Tout ceci sera tout de mme facile
transposer si votre fournisseur propose une configuration par DHCP.
Comme une passerelle vers l'Internet sur une connexion permanente prsente quelques
dangers potentiels ventuellement lourds de consquences :
Indiscrtions dans vos donnes ou destruction pure et simple de ces dernires,
pire, emploi de votre machine comme relais pour d'autres actes de piraterie, situation
qui risquerait fort de vous attirer pas mal d'ennuis,
Je vous conseille galement de lire le chapitre sur la scurit, pour avoir un premier aperu de
ce qu'il risque de vous arriver.
Pr-requis
Vous savez dj installer LINUX et vous avez quelques notions des fichiers de configuration,
des commandes en ligne, vous savez installer un package . Il sera intressant pour vous de
savoir utiliser un diteur de texte tel que nano qui est d'un emploi facile et propose des
options d'dition suffisantes).
Vous disposez d'une connexion Internet. Ce qui est dit ici fonctionne avec tout type de
connexion, mais s'appuie sur une connexion de type PPPoE Cble ou ADSL. Alors, n'oubliez
pas de lire le chapitre sur PPPoE
La manipulation propose est faite sur un PENTIUM 166. La version utilise dans cet expos
est une Debian etch. Pour la configuration du routage, c'est IPtables qui sera utilis.
Ce chapitre, juste destin montrer combien il est simple de raliser une passerelle, est
considrer comme une introduction au chapitre suivant : Netfilter et IPtables , qui vous
expliquera plus en dtail le fonctionnement du filtrage de paquets et les mthodes de
scurisation de votre passerelle.
Thorie
Architecture du travail termin

Mise en garde
Les adresses IP dfinies sur le schma sont donnes titre d'exemple
Rseau priv
Bien entendu, tout fonctionne avec TCP/IP, vous configurez donc votre rseau priv avec des
adresses prives. Les rseaux 192.168.xxx.yyy sont des rseaux destins cet usage. Ce ne
sont pas les seuls, mais comme vous avez peu de chances d'avoir plus de 254 machines sur
votre rseau priv, une classe C devrait vous suffire. Vous n'avez dj rien compris ce que
j'ai racont ? Alors, vous devriez commencer par lire les chapitres sur TCP/IP(v4) et IP et le
Routage
Sur ce rseau priv, nous trouvons :
Tous vos postes clients (ici 1, 2 et 3) ;
Une interface rseau de votre passerelle GNU/Linux.
Attention !
Dans notre exemple, l'adresse 192.168.0.0 NE DOIT PAS tre utilise par une machine, elle
reprsente l'adresse du rseau dans son ensemble. De mme, l'adresse 192.168.0.255 est
rserve au broadcast . Pour plus de dtails, voir TCP/IP(v4) sur ce site.
Connexion au FAI
La deuxime carte rseau place dans le serveur LINUX est directement connecte au
modem-cble ou modem ADSL. Gnralement, vous n'avez droit qu' une adresse IP
dynamique. C'est votre FAI qui vous la prte pour une dure qui, le plus souvent, ne
dpassera pas 24h.
Thoriquement, une connexion par USB devrait aussi faire l'affaire, bien qu'avec les dbits
actuels, cette connectivit ne soit plus du tout souhaitable. Elle n'est pas traite ici, mais si
vous arrivez faire fonctionner un modem en USB sous Linux, le reste de ce chapitre est
certainement exploitable, avec un minimum d'interprtation.
Configuration des clients
Les clients (les postes du rseau priv) peuvent tre de n'importe quelle nature, pourvu qu'ils
disposent d'un OS rseau grant le protocole TCP/IP.
Il faut donc installer TCP/IP et le configurer de la faon suivante:
Donner une adresse IP fixe dans un rseau priv (192.168.0.x dans notre exemple).
Indiquer comme passerelle par dfaut l'adresse IP de la machine LINUX dans le
rseau priv(Celle qui est attache eth0: 192.168.0.253 dans notre exemple).
Indiquer l'adresse du DNS de votre fournisseur d'accs (vous pouvez la trouver en
faisant un host -v ou encore, un dig sur la machine LINUX). Vous pourrez aussi
construire votre propre DNS sur votre machine Linux, comme c'est indiqu dans le
chapitre DNS .
Ceci devrait suffire. Le client PPPoE que nous allons utiliser est suffisamment performant
pour rsoudre tout seul l'pineux problme du MTU. Voir le chapitre sur PPPoE ce sujet
Et aprs ?
Aprs, vous arrivez sur la passerelle de votre FAI. Elle ne fonctionne pas tout fait comme
celle que nous allons monter, mais presque (masquerade en moins, ici, nous avons des
vraies adresses IP).
Nous n'allons pas ici entrer dans les dtails du routage, c'est dj fait ailleurs sur ce site, mais
il faut en parler un petit peu tout de mme. Lorsqu'une machine d'un rseau A (par exemple
192.168.0.0) veut communiquer avec une machine d'un rseau B (par exemple 192.168.1.0),
mme si ces deux machines sont physiquement connectes au mme mdia, elles ne se
verront pas. Il faut mettre en place une passerelle entre ces deux rseaux, c'est dire une
machine qui a un pied dans chaque rseau, un peu comme votre machine GNU/Linux. En
plus, il faudra expliquer cette machine qu'elle doit tablir un passage entre les deux rseaux.
Une dmonstration...
Trace l'itinraire vers watteau.auteuil.cnrs-dir.fr [193.51.136.4]
avec un maximum de 30 tronons :
Dure du ping Nom de la machine
Adresse IP de la
machine
1 <10 ms <10 ms
<10 ms
LINUX [192.168.0.253]
2 12 ms 12 ms 13
ms
ca-ol-marseille-1-1.abo.wanadoo.fr [80.8.128.1]
3 12 ms 12 ms 35
ms
172.19.46.65 [172.19.46.65]
4 11 ms 12 ms 12
ms
GE1-1-
811.ncmar301.Marseille.francetelecom.net
[193.252.227.82]
C'est pas la peine d'aller plus loin:
1. Ma passerelle. Elle s'appelle potiquement LINUX, son IP dans mon rseau:
192.168.0.253
2. La 1 passerelle du FAI, je parle pas de son nom, son IP: 80.8.128.1
3. La Passerelle de sortie du FAI: 172.19.46.65
La route complte aurait pu tre trace, nous aurions vu alors toutes les passerelles
d'interconnections de rseaux. Vous ferez la manip. vous mme:
tracert <nom de la machine> sous Windows (console)
traceroute <nom de la machine> sous LINUX.
Le masquage d'adresses
(encore appel camouflage d'adresses )
Un peu de logique
Nous devons tre quelques millions dans le monde (et peut-tre plus) utiliser les mme
classes prives, elles sont faites pour a ! Ces adresses ne transitent JAMAIS sur l'internet.
Mais alors comment faire? C'est l'objet de la fonction de masquage, appele MASQUERADE chez
LINUX. Gnriquement, c'est du NAT (Network Address Translation), associ du PAT
(Port Address Translation). Par extension, on parle systmatiquement de NAT.
L'opration de masquage (ou camouflage)
1. rcupre votre socket,
2. remplace votre adresse IP par la sienne, ct extrieur
3. remplace votre port de rponse X par un qu'il choisit lui-mme (Y)
4. tient jour une table avec votre socket et le numro de port Y.
5. transmet la requte votre place, avec le socket qu'il a construit.
6. rcupre la rponse sur son port Y
7. remet dans la rponse votre adresse la place de la sienne
8. vous transmet la rponse sur votre port X
Simple non?
Avantages
Votre machine est inaccessible directement depuis l'Internet puisque votre IP est
inconnue, seule celle du camoufleur est visible.
Vous n'avez besoin que d'une seule IP officielle, celle fournie par votre FAI, pour
accder l'Internet depuis toutes les machines de votre rseau priv.
L'opration est compltement transparente pour le client de votre rseau priv, il suffit
de configurer correctement votre pile IP. (adresse IP interne, masque de sous rseau
qui, dans notre cas serait 255.255.255.0, et adresse du DNS de votre FAI pour avoir la
rsolution des noms).
Inconvnients
Mais en est-ce un ? Votre machine est inaccessible (par IP) directement depuis l'Internet
puisque votre IP est inconnue, seule celle du camoufleur est visible. Vous ne pouvez donc pas
placer un serveur derrire votre passerelle, du moins pas trs simplement. Des solution
existent cependant, comme nous le verrons avec Netfilter.
Attention toutefois, cette protection ne vous met pas l'abri de toutes les formes d'intrusions.
Si un malveillant ne peut accder directement par IP votre poste de travail, il peut toujours
arriver vous faire installer une porte drobe par un moyen o un autre, qui lui donnera
tout de mme l'accs votre machine. Mais pour intressante que soit cette question, elle ne
fait pas partie du sujet qui nous occupe ici.
Interfaces
Pr-requis
Votre rseau priv est dj install, les postes disposent de leur adresse IP et ont un nom de
machine. Le rseau est test et tout fonctionne. (Nous supposerons que les clients sont sous
Windows, toutes versions confondues. Si ce n'est pas le cas, il vous faudra traduire). Nous
supposerons que le modem est utilis avec une connexion Ethernet. C'est aussi possible
d'utiliser USB, mais plus compliqu, surtout sur Linux, cause des difficults trouver les
drivers du modem.
Installation
Il va falloir deux interfaces rseaux:
L'une pour vous connecter l'Internet via le modem
L'autre pour vous connecter votre rseau priv. (N'oublions pas que nous sommes en
prsence de deux rseaux distincts et que nous voulons faire une passerelle entre les
deux).
Note pour les bricoleurs :
Un bricolage sordide permet de tout faire avec une seule interface, Linux permettant
de faire du multihosting , c'est dire permettant d'attribuer deux IP diffrentes la
mme interface. Amusant, mais pas trs utile.
Nous allons installer deux interfaces Ethernet dans notre future passerelle, afin de disposer de
deux nuds eth0 et eth1. Une difficult ventuelle sera de savoir qui sera eth0 et qui sera
eth1. Les distributions modernes savent reconnaitre automatiquement les interfaces et leur
attribuer un nom. C'est le gestionnaire de priphriques udev qui se charge de l'affaire.
Comme c'est automatique, a se passe dans votre dos
Retrouver ses billes
La commande lspci vous indiquera o sont places les interfaces rseau sur votre bus PCI :
~# lspci
00:00.0 Host bridge: Intel Corporation 430VX - 82437VX TVX [Triton VX] (rev
01)
00:07.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
(rev 01)
00:07.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton
II]
00:09.0 Ethernet controller: Accton Technology Corporation SMC2-1211TX (rev
10)
00:0a.0 Ethernet controller: Accton Technology Corporation SMC2-1211TX (rev
10)
00:0b.0 Ethernet controller: 3Com Corporation 3c905C-TX/TX-M [Tornado] (rev
74)
Ici nous sommes servis, il y a 3 interfaces dont deux sont identiques.
Ceci est bien beau, mais ne nous dit pas comment ces interfaces sont appeles par le systme.
Nous devons trouver les informations fournies par udev.
Nous sommes sur Debian etch, ce que nous cherchons se trouve dans le fichier
/etc/udev/rules.d/z25_persistent-net.rules :
~# cat /etc/udev/rules.d/z25_persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, probably run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.
# MAC addresses must be written in lowercase.

# PCI device 0x1113:0x1211 (8139too)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:00:e8:8e:cb:b7",
NAME="eth0"

# PCI device 0x1113:0x1211 (8139too)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:10:b5:4d:55:a0",
NAME="eth1"

# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:50:da:07:dc:76",
NAME="eth2"
Notez deux choses :
il existe une relation entre le nom attribu l'interface et le module utilis pour la
grer ; 139too pour eth0 et eth1, 3c59x pour eth2 ;
il existe galement une relation entre le nom attribu l'interface et son adresse MAC.
Cet exemple nous montre clairement que si nous utilisons plusieurs interfaces de mme type,
donc utilisant le mme module pour leur gestion, le seul moyen de s'y retrouver est de
connaitre l'adresse MAC de chaque interface. Une bonne pratique est donc de noter cette
adresse, normalement indique sur la carte, avant de la monter dans la boite.
Configuration Ethernet
Nous allons procder par tapes, en configurant d'abord l'interface ct LAN.
S'il existe un domaine o les distributions GNU/Linux diffrent grandement entre elles, c'est
bien dans la configuration du rseau. Nous sommes avec Debian, o tout se passe dans
/etc/network/interfaces. Pour d'autres distributions, il vous faudra adapter.
Ct LAN
Nous crivons dans /etc/network/interfaces :
auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
Nous aurons ainsi eth0 configur de faon statique, pour notre rseau local.
Notez qu'il n'est pas indiqu de passerelle par dfaut gateway. Cette information devra venir
du ct configur par notre fournisseur d'accs.
Vrifications
Commenons par redmarrer le rseau :
~# /etc/init.d/networking restart
Puis vrifions qu'eth0 est correctement configue :
~# ifconfig eth0
eth0 Lien encap:Ethernet HWaddr 00:20:18:2D:D2:91
inet adr:192.168.0.253 Bcast:192.168.0.255 Masque:255.255.255.0
...
Constatez que l'IP, le masque de sous rseau sont corrects.
Ct modem
Il nous faut connecter eth1 au modem. Pour la configuration IP, nous avons deux cas de
figure, suivant que notre fournisseur a choisi d'utiliser DHCP ou PPPoE. Ces deux mthodes
ne sont pas du tout comparables.
Le premier cas considre que vous tes sur un rseau Ethernet (comme sur votre LAN) et
votre configuration sera fournie grce au protocole DHCP. Il n'y a pas dans ce cas
d'identification du client (rassurez-vous, elle est faite autrement). Le fournisseur Free par
exemple, utilise cette mthode.
Le second cas, le plus frquent, tablit un lien ppp entre vous et un quipement de votre
fournisseur. Cette mthode ressemble beaucoup ce qu'il se fait avec un modem tlphonique
simple, mais ici, le lien ppp est construit sur la couche Ethernet. PPPoE utilise RADIUS pour
:
authentifier le client ;
lui fournir sa configuration IP.
Configurer une connexion ppp est un peu moins simple, puisque dj, il nous faut connaitre :
le nom d'utilisateur qui nous a t attribu par le fournisseur (quelque chose du genre
fti/epikoi@fti par exemple, pour Orange ;
le mot de passe, galement attribu par notre fournisseur.
Il y aura galement trois fichiers modifier sans se tromper
Sous Debian Etch, il y a un utilitaire : pppoeconf ( installer ventuellement) qui aidera
oprer. Nous allons tout de mme voir rapidement ce qu'il y a faire.
DHCP ?
Dans ce cas c'est facile, il suffit d'ajouter dans /etc/network/interfaces le paragraphe
suivant :
auto eth1
iface eth1 inet dhcp
Au total, vous devriez avoir dans /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

auto eth1
iface eth1 inet dhcp
N'oublions pas de relancer le rseau de relancer le rseau :
/etc/init.d/networking restart
PPPoE ?
Le fichier pap-secrets
Editez le fichier /etc/ppp/pap-secrets pour y placer les informations d'identification
donnes par le fournisseur d'accs. Ce fichier est de la forme :
"<nom d'utilisateur>" "<domaine>" "<mot de passe">
Le domaine sera avantageusement remplac par une astrisque *. Exemple :
"fti/epikoi@fti" * "password"
Dans certains cas, un fichier identique, mais nomm /etc/ppp/chap-secrets pourra tre
ncessaire. Son contenu est exactement le mme.
Le fichier dsl-provider
Le fichier /etc/ppp/peers/dsl-provider install par dfaut contient beaucoup de
commentaires explicatifs. Il y a deux lignes qu'il faut modifier :
user "fti/3fdyg6v@fti"
pty "/usr/sbin/pppoe -I eth1 -T 80 -m 1452"
La ligne user doit contenir le nom d'utilisateur tel qu'crit dans pap-secrets ;
la ligne pty doit tre modifie en fonction de l'interface connecte au modem (ici
eth1).
Au total, nous devrions avoir un fichier proche de ceci :
~# cat /etc/ppp/peers/dsl-provider
user "fti/epikoi@fti"
pty "/usr/sbin/pppoe -I eth1 -T 80 -m 1452"
noipdefault
defaultroute
hide-password
lcp-echo-interval 60
lcp-echo-failure 3
connect /bin/true
noauth
persist
mtu 1492
noaccomp
default-asyncmap
Je vous laisse retrouver par vous-mme la signification exacte des divers paramtres. Notons
tout de mme :
defaultroute qui permettra de placer automatiquement la route par dfaut sur cette
connexion ;
mtu 1492 qui vitera une fragmentation toujours peu souhaitable. Voir les dtails sur
le fonctionnement de PPPoE.
Le fichier interfaces
Nous devons ajouter dans /etc/network/interfaces les lignes suivantes :
auto ppp0
iface ppp0 inet ppp
provider dsl-provider
Notez que dans le cas de PPPoE, le lien ppp se faisant sur Ethernet, l'interface eth1 n'a pas
besoin d'tre configure au niveau IP. Vous n'aurez besoin de configurer au niveau IP que
si votre modem propose un accs IP pour sa configuration, ou simplement pour la lecture de
son tat, mais cette configuration IP n'est absolument pas ncessaire PPPoE.
Au final, vous devriez avoir dans /etc/network/interfaces :
auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

auto ppp0
iface ppp0 inet ppp
provider dsl-provider
Vrifications
DHCP
Les interfaces :
~# ifconfig
eth0 Lien encap:Ethernet HWaddr 00:20:18:54:5A:E9
inet adr:192.168.0.253 Bcast:192.168.0.255 Masque:255.255.255.0
...
...

eth1 Lien encap:Ethernet HWaddr 00:50:DA:07:DC:76
inet adr:82.243.80.13 Bcast:82.243.80.255 Masque:255.255.255.0
...
Les routes :
~# route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use
Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
82.243.80.0 0.0.0.0 255.255.255.0 U 0 0 0
eth1
0.0.0.0 82.243.80.254 0.0.0.0 UG 0 0 0
eth1
Traceroute pour voir :
:~# traceroute -n mir1.ovh.net
traceroute to mir1.ovh.net (213.186.33.37), 30 hops max, 40 byte packets
1 82.243.80.254 37.080 ms 36.893 ms 36.931 ms
2 213.228.20.254 37.204 ms 47.425 ms 37.225 ms
...
9 213.186.33.37 48.645 ms 48.504 ms 50.597 ms
Nous identifions bien la passerelle par dfaut, aussi bien dans la table des routes que dans le
traceroute.
PPPoE
Les interfaces :
~# ifconfig
eth0 Lien encap:Ethernet HWaddr 00:20:18:54:5A:E9
inet adr:192.168.0.253 Bcast:192.168.0.255 Masque:255.255.255.0
...
...

ppp0 Lien encap:Protocole Point--Point
inet adr:82.127.57.95 P-t-P:193.253.160.3
Masque:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
...
Les routes :
~# route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use
Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0
eth0
193.253.160.3 0.0.0.0 255.255.255.255 UH 0 0 0
ppp0
0.0.0.0 0.0.0.0 0.0.0.0 UG 0 0 0
ppp0
Notez surtout que la route du LAN est sur eth0 et la route par dfaut est bien sur ppp0
Traceroute, pour voir :
~# traceroute -n mir1.ovh.net
traceroute to mir1.ovh.net (213.186.33.37), 30 hops max, 40 byte packets
1 193.253.160.3 52.392 ms 53.781 ms 53.367 ms
2 80.10.215.249 54.146 ms 53.199 ms 52.268 ms
...
11 213.186.33.37 53.750 ms 55.160 ms 53.864 ms
Notez que dans cet exemple, nous retrouvons l'adresse 193.253.160.3 dans la route o mne
ppp0 et comme premier hop dans le traceroute. Un lien ppp n'a que deux bouts il ne relie
que deux nuds entre eux. Dans cet exemple, il relie 82.127.57.95 193.253.160.3 (ce
que nous savions dj grce la commande ifconfig qui, pour ppp0, nous a donn :
inet adr:82.127.57.95 P-t-P:193.253.160.3 Masque:255.255.255.255
Question subsidiaire
Les clients de notre LAN vont avoir besoin de connaitre des adresses de DNS. DHCP comme
PPPoE fournissent ces informations, mais elles ne seront pas communiques aux clients du
LAN. Il faut pour l'instant savoir les retrouver.
DHCP
Si nous utilisons le client par dfaut de Debian qui est dhclient, il crit tout dans les logs
/var/lib/dhcp/dhclient.eth1.leases :
# cat /var/lib/dhcp/dhclient.eth1.leases
...
lease {
interface "eth1";
fixed-address 82.243.80.13;
server-name ".dslg.proxad.net";
option subnet-mask 255.255.255.0;
option routers 82.243.80.254;
option domain-name-servers 212.27.54.252,212.27.53.252;
option broadcast-address 82.243.80.255;
option dhcp-lease-time 604800;
option dhcp-message-type 5;
option dhcp-server-identifier 82.243.80.254;
renew 1 2008/5/26 20:46:25;
rebind 4 2008/5/29 11:46:25;
expire 5 2008/5/30 08:46:25;
}
Ici, nous avons deux DNS : 212.27.54.252 et 212.27.53.252. Il nous suffit de renseigner
nos clients avec ces informations qui normalement ne changent que trs rarement, voire
jamais.
PPPoE
Ici, c'est ppp qui laisse des traces dans /etc/ppp/resolv.conf :
# cat /etc/ppp/resolv.conf
nameserver 80.10.246.1
nameserver 80.10.246.132
Deux DNS: 80.10.246.1 et 80.10.246.132 indiquer nos clients.
Conclusions
Rsum de la situation
Vous disposez maintenant d'une machine qui possde deux connexions rseaux:
L'une: Eth0 sur votre rseau priv, protocole TCP/IP, la pile est configure
manuellement, en fonction de vos paramtres de rseau,
L'autre peut paratre un peu plus complexe et nous sommes alls tellement vite qu'il
faudrait maintenant faire le point.
o Eth1 est, comme son nom l'indique, une interface Ethernet. Elle ne sert rien
d'autre d'important qu' supporter la connexion PPP over Ethernet vers votre
fournisseur d'accs. En aucun cas, la configuration IP de cette interface n'est
utilise pour accder l'Internet.
Je sais que ce n'est pas facile comprendre, mais lorsque vous aurez tout
compris de ce qui est dit sur ce site, vous n'aurez plus de difficults.
PPPoE c'est, rptons-le, du Point to Point Protocol over Ethernet, la
couche IP que l'on peut ajouter par dessus ne sert rien pour PPPoE. Elle ne
sert ventuellement qu' une chose : permettre d'accder au serveur HTTP situ
dans le modem. Si vous n'avez rien faire de cette fonctionnalit, vous pouvez
vous contenter de dfinir votre carte Ethernet, sans lui attribuer d'adresse IP ni
de masque de sous rseau, a n'empchera absolument pas PPPoE de
fonctionner par dessus.
o ppp0, en revanche, est un lien ppp mont par rp-pppoe lorsque la session est
ouverte. Ce lien dispose d'une adresse IP dynamique, fournie par votre FAI,
selon un principe proche de DHCP, mais ce n'est pas DHCP, c'est un serveur
d'accs distant de type RADIUS. Tout a est expliqu en dtail dans le chapitre
sur PPPoE (peut-tre l'avez-vous dj lu ?).
Ce lien ppp0, qui n'existe que lorsqu'une session PPPoE a t ouverte avec
succs, prsente donc :
Une adresse IP dynamique (renouvelable chaque session PPPoE,
session qui ne dpasse pas, en gnral, 24h),
un masque de sous-rseau,
une adresse de passerelle par dfaut pour les connexions hors du rseau
de votre FAI,
deux adresses de DNS pour la rsolution des noms.
Mises en garde
A ce stade, mme si votre machine LINUX est connecte aux deux rseaux, elle ne
fonctionnera pas encore en tant que passerelle pour votre rseau priv. Il faut encore:
Mettre en oeuvre le systme de masquerading sur la machine LINUX,
vous assurer que tous vos postes du rseau priv sont correctement configurs :
o Une IP dans la mme classe (192.168.0.0 dans notre exemple), mais toutes
diffrentes,
o un masque de sous rseau convenable, 255.255.255.0 dans l'exemple,
o la passerelle par dfaut pointant sur votre machine Linux (192.168.0.253 dans
l'exemple),
o au moins un DNS, le premier des deux que votre FAI vous propose (voir plus
haut). Attention, le FAI peut tre amen changer de DNS. Votre machine
Linux en sera automatiquement informe, mais pas les clients de votre rseau.
Si vous en restez l, il sera de votre responsabilit de vrifier priodiquement
que le DNS n'a pas chang. D'ailleurs, vous vous apercevrez vite que quelque
chose ne va plus
Tout ce que vous pouvez faire pour l'instant, c'est:
Vous connecter l'Internet depuis votre machine LINUX
Envoyer des pings depuis votre machine LINUX vers :
o Votre rseau priv (avec les adresses IP, nous n'avons pas mis en place de
rsolutions de noms pour le rseau priv),
o l'Internet. Ici, le DNS du FAI saura, en principe, rsoudre les noms.
Ne vous attendez pas voir la machine LINUX dans votre voisinage rseau Windows!
LINUX n'utilise pas NetBIOS. Si vous voulez le faire, il vous faudra installer SAMBA sur
LINUX, qui cre une couche de dialogue avec NetBIOS, mais ceci est une autre histoire Si
vous voulez le faire et ne savez pas comment, consultez au moins le SMB HOWTO, mais ne
faites pas tout en mme temps
Passerelle simple
Comme je suis prof depuis assez longtemps pour avoir compris qu'il n'y a rien de plus
frustrant que de se taper des heures de thorie avant de pouvoir passer, enfin, la pratique,
nous allons d'abord raliser vite fait une passerelle oprationnelle. Sommaire, rudimentaire,
mais oprationnelle.
Aprs, nous verrons plus en dtail comment tout ceci fonctionne.
Netfilter et IPtables
Installation
Netfilter, c'est le systme de filtrage des paquets. C'est lui qui va permettre de raliser le
routage dans de bonnes conditions. Les bonnes distributions l'intgrent sous forme de
modules.
IPtables, c'est en quelque sorte l'interface qui permet de configurer Netfilter. L, il vous
faudra vrifier que le paquetage iptables est bien install, ce qui est maintenant unanimement
le cas.
Configuration simpliste
Dans la suite, ne confondez pas le script /etc/init.d/iptables avec /sbin/iptables, qui est un
excutable.
Incantation magique Signification
iptables -t nat -A POSTROUTING -o ppp0 -
j MASQUERADE
On applique le masquerading sur tout
ce qui doit sortir par ppp0
echo 1 > /proc/sys/net/ipv4/ip_forward
On dverrouille le forwarding ,
autrement dit, on active le routage.
Et voil. La passerelle fonctionne. Assurez-vous d'abord que votre connexion PPPoE est bien
active, par exemple en faisant un
ifconfig ppp0
qui doit vous indiquer que cette interface est bien monte. Si ce n'est pas le cas, commencez
par arriver obtenir ce lien.
Essayez maintenant, depuis un poste quelconque de votre rseau local, de faire un ping sur
www.oleane.fr :
$ ping -c 3 mir1.ovh.net
PING mir1.ovh.net (213.186.33.37) 56(84) bytes of data.
64 bytes from mir1.ovh.net (213.186.33.37): icmp_seq=1 ttl=55 time=90.8 ms
64 bytes from mir1.ovh.net (213.186.33.37): icmp_seq=2 ttl=55 time=82.1 ms
64 bytes from mir1.ovh.net (213.186.33.37): icmp_seq=3 ttl=55 time=78.5 ms

--- mir1.ovh.net ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 78.523/83.855/90.890/5.200 ms
Vous croyez que c'est fini ?
Rendre ces choses dfinitives
Les rgles iptables sont volatiles. Si vous redmarrez votre machine, il faudra les rcrire.
Pour viter ce dsagrment, une fois vos rgles tablies, crez un rpertoire /etc/iptables
et utilisez la commande iptables-save pour crer un fichier contenant vos rgles :
~# mkdir /etc/iptables
~# iptables-save > iptables-active
Si nous regardons ce que nous avons dans /etc/iptables/iptables-active :
:~# cat /etc/iptables/iptables-sactive
# Generated by iptables-save v1.3.8 on Fri May 23 19:13:20 2008
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [4:228]
:OUTPUT ACCEPT [4:228]
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
# Completed on Fri May 23 19:13:20 2008
# Generated by iptables-save v1.3.8 on Fri May 23 19:13:20 2008
*filter
:INPUT ACCEPT [45334:56750206]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [33598:2416238]
COMMIT
# Completed on Fri May 23 19:13:20 2008
Ce n'est pas tout, il nous faudra aussi ajouter la ligne :
pre-up iptables-restore < /etc/iptables/iptables-active
Dans /etc/network/interfaces la configuration de l'interface connecte au modem (eth1
ou ppp0 suivant le cas). Exemple :
auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

auto ppp0
iface ppp0 inet ppp
provider dsl-provider
pre-up iptables-restore < /etc/iptables/iptables-active
Pour tre tout fait propres, il faudrait galement ajouter le ligne :
post-down iptables -t nat -F
Pour vider la table nat lorsque ppp0 (ou eth1) est dsactive. Ce qui donne finalement :
auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

auto ppp0
iface ppp0 inet ppp
provider dsl-provider
pre-up iptables-restore < /etc/iptables/iptables-active
post-down iptables -t nat -F
Le dverrouillage du forwarding est galement volatile par dfaut. Pour remdier ce
problme :
ditez le fichier /etc/sysctl.conf
ajoutez ce fichier la ligne :
net.ipv4.ip_forward=1
Au prochain redmarrage, vous devrez retrouver la valeur 1 dans
/proc/sys/net/ipv4/ip_forward :
:~# cat /proc/sys/net/ipv4/ip_forward
1
Et la scurit ?
Votre passerelle fonctionne, certes, mais c'est un vaste trou bant au sens de la scurit. Pour
faire quelque chose de propre, il vous faudra lire le chapitre sur la scurit ]et aussi celui sur
Netfilter, pour comprendre mieux ce qu'il y a faire.
Dans l'tat actuel des choses, vous tre fortement expos toutes sortes d'ennuis
Plus de confort
Le problme du DNS
Sur vos postes du rseau priv, vous devez indiquer en dur l'adresse IP des DNS de votre
FAI. Ce n'est pas pratique, parce qu'ils peuvent changer sans vous le dire. Il vaut mieux
installer sur votre passerelle un service DNS qui pourra soit rsoudre les noms directement
par lui mme, soit servir de proxy DNS, c'est dire retransmettre au DNS de votre FAI les
requtes de rsolution que vous lui adresserez.
Dans ce cas, vous indiquerez sur vos clients l'adresse de votre passerelle pour le DNS et c'est
elle qui se chargera de vous communiquer les rsolutions.
A vous de voir ce qui vous convient le mieux. Normalement, un proxy DNS est suffisant.
Vous pouvez faire a assez simplement avec BIND. Lisez le chapitre consacr au DNS pour
en savoir plus.
La configuration IP des clients
Configurer ses clients du rseau priv la main, c'est bien, mais c'est vite fastidieux si vous en
avez beaucoup. Il existe une possibilit de faire a automatiquement au dmarrage de vos
machines en utilisant les services de DHCP. Vous pouvez aussi installer un serveur DHCP sur
votre passerelle. C'est vraiment du luxe pour un petit rseau domestique, mais comme ce luxe
ne vous cotera rien de plus que de lire le chapitre sur DHCP
Mais, avant tout, pensez d'abord la scurit et passez Netfilter au plus vite.
TCP/IP & scurit
Prliminaires
La scurit des htes sur un rseau, et donc sur le Net, est un vaste problme.
L'objectif de ce document n'est certes pas d'tre une rfrence l'usage des spcialistes, mais
plutt un expos des connaissances de base qui permettent d'entrevoir les dangers encourus
par un utilisateur tel qu'un internaute cbl ou ADSLis .
Mais que risque-t-on ?
Malheureusement beaucoup. TCP/IP n'est pas un modle de scurit et de nombreux
spcialistes ont mis jour des trous qui permettent de s'introduire frauduleusement dans les
machines des autres. Comme le monde virtuel n'est pas bien diffrent du monde rel, nous y
trouverons aussi des cambrioleurs, des voyeurs, des casseurs etc. avec toutes les nuisances
que a laisse supposer. Il est donc ncessaire de se protger de ces agresseurs.
Firewall, c'est quoi a ?
Traduit plus ou moins harmonieusement par mur pare-feu , les firewalls sont
normalement des systmes ddis la scurit d'un rseau.
Dans l'absolu, un firewall devrait tre un dispositif informatique qui s'intercale entre le rseau
priv et la connexion Internet. Comme c'est lui qui va prendre les coups, il vaut mieux qu'il
soit solide et qu'il soit ddi cette tche.
Malheureusement, les choses ne sont pas toujours aussi simples et de nombreuses entorses
cette rgle basique sont souvent ncessaires.
Le cot.
Installer selon cette rgle un firewall pour protger une machine unique augmente
l'investissement dans des proportions considrables (encore qu'un vieux PC type P75
,16 Mo de RAM, DD de 500Mo et une installation de GNU/Linux bien configure, a
peut se faire pour pas trs cher)
Les services.
On a souvent besoin d'installer des services qui doivent communiquer directement
avec le Net (DNS, SMTP, FTP, HTTP) et dans ces cas l, un firewall pur et dur
devient un vrai casse tte. On parle alors de DMZ (Zone dmilitarise), sorte de
purgatoire un peu protg dans lequel les serveurs publics jouissent d'une relative
scurit derrire un barrage filtrant, mais non protgs par un firewall plus strict, dont
le rle reste de protger la partie prive du rseau.
D'autres compromis sont possibles. Le firewall pourra tre une machine expose, donc
protge par des logiciels appropris, mais elle servira galement d'autres tches. C'est le cas
d'un poste isol, seulement connect au Net. C'est aussi le cas de ma configuration o la
machine expose sert galement de passerelle pour le rseau priv, de DNS et de relais
SMTP.
Finalement, Le firewall apparat plutt comme un ensemble de rgles de scurit pour la
configuration de la machine, avec un logiciel de filtrage de paquets, un logiciel de
surveillance (snort, par exemple sous GNU/Linux), voire un logiciel capable de construire une
protection particulire lorsqu'il dtecte les prmices d'une intrusion.
D'autres logiciels qui cumulent ces fonctions existent dans le monde Windows. Leur principe
reste cependant plus ou moins le mme, chaque paquet entrant est vrifi et, s'il correspond
certains critres, est bloqu, trac, accept etc.
Les attaques
Hasard ou ncessit ?
La bonne question se poser, concernant les problmes de scurit n'est pas:
Est-ce que j'ai des chances (grandes ou petites) de subir une attaque un jour?
Mais:
Quand vais-je tre la cible d'une attaque?
Et la seule rponse pertinente cette question est:
A tout moment. Peut-tre justement pendant que tu lis ces lignes
Mon propos n'est certes pas d'affoler le lecteur, mais d'essayer de lui faire comprendre que les
arguments du type:
Oh, moi, je n'ai rien d'intressant sur ma machine et je ne vois pas pourquoi un pirate
s'ennuierait essayer d'y pntrer
Sont du mme ordre que de croire que les accidents de voiture sont toujours pour les autres et
jamais pour soi.
Les attaques possibles
Une machine informatique est par dfaut, d'une grande vulnrabilit, tout simplement, parce
que l'informatique est passe des mains d'une poigne de spcialistes une foule d'utilisateurs
et qu'une certaine thique de l'informaticien y a laiss ses plumes.
Les environnements informatiques n'ont pas t prvus pour tre manipuls par des personnes
sans scrupules qui cherchent en exploiter tous les effets pervers.
Je classerai les malfaisants dans trois catgories (c'est une opinion toute personnelle):
1. Les amateurs de gnocides
Ils utilisent des virus pour produire le plus de dgts possible sans se soucier de savoir
quelles sont les cibles qui seront touches. Ce qui leur importe est la masse atteinte.
Les meilleurs crivent eux-mmes leurs virus, ce qui fait au moins la preuve de leur
comptence technique, les pires exploitent des virus faits par d'autres, sans mme
savoir comment ils fonctionnent.
2. Les voyous du Net
Bien connus sous le nom de script kiddies , ceux l cherchent pntrer, le plus
souvent pour faire de la casse, des htes connects au Net en utilisant des recettes de
cuisine labores par d'autres. Nous verrons plus loin de quoi il retourne. Peu leur
importe la cible, leur amusement consiste utiliser des mthodes toutes faites pour
ennuyer leur monde. Ils s'attaquent la premire machine sur laquelle ils trouvent une
faille, juste pour le plaisir. Mes logs sont pleins de petits comiques de ce genre, qui
cherchent au hasard du Net, une machine qui serait infecte par un cheval de Troie,
juste, sans doute, parce qu'ils ont trouv quelque part le client qui sait s'y connecter.
3. Les Hackers
Les vrais, ceux qui ont des connaissances trs tendues dans les systmes et pour qui
le jeu consiste rechercher toujours de nouvelles failles. Notez bien que ce ne sont pas
forcment des pirates. Ceux l sont de vritables techniciens et, mme s'ils font parfois
des dgts (lorsqu'ils sombrent du mauvais ct de la force), inspirent plus ou moins le
respect par leur grandes connaissances. Ce sont leurs dcouvertes qui, la plupart du
temps, sont exploites par les script kiddies et autres utilisateurs de virus. Ce sont
galement leurs dcouvertes qui contribuent crer des systmes de plus en plus
solides et fiables. Leur objectif premier n'est pas de dtruire, mais de comprendre.
Les attaques virales et assimiles
Les virus dans les excutables
Un virus est un bout de programme gliss volontairement dans une application dans le but de
nuire. Il est possible d'attraper un virus avec n'importe quelle application que l'on a installe et
que l'on excute, ce n'est pas un problme typique d'une connexion permanente. Un virus ne
peut tre introduit dans sa machine que si l'on excute une application infecte, application
rcupre sur l'internet ou sur n'importe quel autre support informatique: Disquette, CD ROM,
cl USB etc.
Les macro virus dans les donnes
Une autre infection, assez semblable, consiste exploiter les possibilits qu'ont certaines
applications d'installer des macro commandes dans les fichiers de donnes. La suite Microsoft
Office qui propose des possibilits, par ailleurs intressantes, de placer des macros dans les
documents Word, Excel et mme Powerpoint est une cible de choix. Ces macros sont
maintenant crites en VBA (Visual Basic for Applications) qui est un langage suffisamment
puissant pour arriver faire beaucoup de dgts avec. Dans un tel cas, il suffit d'ouvrir un
document infect pour mettre le macro virus en activit. Autrement dit, mme des fichiers de
donnes peuvent tre dangereux. Notez que Microsoft a modifi les applications de MS
Office de manire ce qu'elles puissent vous avertir de la prsence de macros dans les
documents, vous laissant la possibilit de les activer ou non. OpenOffice n'est pas plus l'abri
de ce genre d'infection.
Les scripts et applets dans le HTML
Malheureusement, d'autres moyens existent, typiquement venus de l'internet, dans les pages
HTML. En effet, pour rendre les pages HTML plus vivantes, il devient possible d'y insrer
des composants actifs. Parmi ceux-ci nous trouvons :
les scripts (javascript, vbscript).
Ce ne sont pas les plus dangereux parce que les langages de scripts offrent rarement
des fonctions pouvant tre utilises des fins vraiment destructrices. Ils disposent
cependant de la possibilit de lancer des excutables locaux, c'est en cela qu'ils
peuvent devenir dangereux ;
les applets Java ou les composants ActiveX.
Plus puissants, ils sont introduits dans les pages HTML sous la forme de composants
compils (ou pr compils). Leur contenu n'est pas visible et les outils qui permettent
de les construire (Java ou Visual Basic) offrent des fonctions permettant de raliser
des oprations extrmement dangereuses.
La grande mode consiste en un mlange des deux. Un message malicieux en HTML
pour excuter un script qui excute un applet ou un ActiveX, le rsultat tant par
exemple que votre carnet d'adresse sera utilis votre insu pour spammer toutes
vos connaissances le mme message malicieux ou mieux encore, un autre message,
mais contenant le mme ver ;
les plug-in qui sont des extensions ajoutes aux navigateurs pour permettre la
visualisation de fichiers multimdia peuvent galement tre corrompus.
Parades
Toutes ces attaques sont plus ou moins prises en charge par des applications anti-virus, les
meilleures prcautions prendre sont :
installer un bon antivirus et effectuer une mise jour frquente de la base de
donnes de cet outil. Mais attention, un antivirus, si efficace soit-il ne saura jamais
dtecter 100% des attaques ;
ne pas faire une confiance aveugle son antivirus, sous prtexte qu'il est bon et
jour ;
rester trs prudent sur les sources des documents ou applications que l'on rapatrie sur
la machine ;
paramtrer son navigateur pour ne pas laisser excuter n'importe quel script ou applet
dont l'origine n'est pas sre ;
ventuellement, prier.
Les intrusions
Dcrire dans le dtail les mthodes employes serait long, voire fastidieux. Ceux qui sont
avides de dtails sur la question ont intrt se procurer le trs instructif Hacking interdit
dit en franais chez Eyrolles. Cet ouvrage traite en quelques 1250 pages des diverses
techniques de piratage, ainsi que les parades possibles. Voyons tout de mme en rsum les
principaux risques.
Les ports l'coute
Lorsqu'un port est ouvert l'coute sur un service serveur, c'est une porte ouverte par laquelle
un intrus peut entrer. Sur un serveur, on peut entrer avec des outils comme telnet et exploiter
des failles de ces logiciels
Je vous entend me dire Oui, mais ma machine WIndows xx n'est pas un serveur, il n'y a donc
pas de ports l'coute En tes-vous si sr?
Vous avez dj les ports 137, 138 et 139 qui sont ouverts pour que NetBIOS fonctionne (la
partie la plus visible tant le voisinage rseau). Surtout, si vous avez le partage des fichiers et
des imprimantes activ. Dans ce cas l, vous tes bel et bien un serveur.
Si vous avez install IIS (Internet Information Services), ncessaire pour travailler
efficacement avec FrontPage, vous avez galement le port 80 qui est ouvert (et vous tes
particulirement en danger).
Vous tes donc peut-tre beaucoup plus serveur que vous ne le pensez
Les backdoors , trojans et assimils
Une porte drobe n'est pas proprement parler un virus, dans la mesure o elle ne se
multiplie pas . Elle peut cependant s'attraper sensiblement de la mme manire, par un cheval
de Troie. Un cheval de Troie est une application, d'apparence inoffensive qui installe
discrtement une porte drobe. Elle peut galement tre inocule par un pirate qui a russi
une opration de spoofing , un dbordement de pile ou de prise de contrle distance sur
votre poste, comme nous le verrons plus loin.
Une porte drobe est en gros un logiciel de contrle distance. Il fonctionne comme un
serveur, sur un port connu de celui qui a conu le pige. Un simple scan d'adresses IP sur ce
port permet alors de reprer les machines infectes actuellement en ligne. Le mal intentionn
peut s'y connecter et faire plus ou moins ce qu'il veut sur la machine distante. Trs dangereux,
ce genre de salet peut heureusement tre repr relativement simplement, en prenant la
prcaution de vrifier priodiquement les ports ouverts sur sa machine. Malheureusement,
l'utilisateur a souvent autre chose faire que de surveiller continuellement les ports ouverts.
Une variante est le spyware trs la mode actuellement. Ce n'est pas dangereux
proprement parler, mais a envoie des informations diverses sur le contenu de votre machine,
vos habitudes sur l'internet etc. un serveur qui les rcupre. Les spywares sont souvent
implants dans des logiciels en dmonstration ou des sharewares , de la mme manire
qu'une porte drobe. Certains logiciels commerciaux, hlas, s'adonnent galement ce genre
de pratiques.
Exemple marrant d'un spyware
Un keylogger est un membre de cette famille, dont la spcialit est d'intercepter au plus
bas niveau du systme toutes les activits du clavier. En bon franais, tout ce que vous tapez,
il l'enregistre la source.
Dangereux ?
Vous tes dans une transaction commerciale. Vous devez envoyer votre numro de carte
bancaire au site marchand. Vous avez bien pris les prcautions d'usage :
vous tes en HTTPS (HTTP scuris), donc connexion chiffre ;
vrification du certificat du serveur, le serveur est bien celui qu'il prtend tre ;
(Comment, vous n'avez mme pas vrifi tout a ?)
Mais si bien sr, vous avez vrifi .
Oui mais
Le keylogger il s'en fout un peu du https, puisqu'il rcupre les informations la source,
bien avant la couche application. De mme, il s'en fout un peu du serveur dument
authentifi, puisqu'il va envoyer les informations recueillies un serveur pas du tout
authentifi, et contrl par une association de malfaiteurs.
Vous entrevoyez les risques ?
parades
Contrler priodiquement les ports ouverts l'coute ;
certains antivirus savent dtecter les trojans, backdoors et autres spywares connus.
Les dfauts logiciels
Il est galement possible d'exploiter des failles de scurit sur des applications serveur
officielles pour les utiliser comme porte d'entre, en gnral par dbordement de pile. Il
arrive aussi que certains logiciels serveurs comportent des bugs ou soient mal configurs et
permettent de prendre la main sur une machine, les serveurs FTP mal configurs sont un
danger immdiat , mais tout type de serveur peut prsenter des failles de scurit pouvant
dboucher sur une prise de contrle. Le pirate qui russit l'opration peut alors installer une
porte drobe pour la suite des oprations.
Parades
Ne pas installer de serveur inutile.
Mettre en place toutes les scurits proposes par les serveurs que l'on a installs et
vrifier priodiquement sur les sites des constructeurs de ces logiciels l'apparition de
mises jour de scurit.
Filtrer efficacement les accs sur les ports que l'on souhaite laisser ouverts.
D'une manire gnrale, se tenir au courant des patchs, service packs et autres
correctifs qui sortent et les installer systmatiquement.
Les spoofing , hijacking et autres SYN Flood
Le jeu consiste se faire passer pour un autre au cours d'une connexion TCP. Le principe est
assez compliqu, mais redoutable s' il russit. En gnral, le pirate utilise ces mthodes pour
placer une porte drobe qu'il utilisera par la suite. Vous serez sans doute tout fait rassurs
de savoir qu'il trane sur l'Internet des programmes spcialement conus pour ce genre
d'intrusions.
Il est trs dlicat de se protger de ces d'attaques.
Parades
Pas ma connaissance, sauf si le pirate utilise un SYN Flood et que le logiciel firewall
sait le dtecter. Ici, il faut tre prventif et curatif. Comme un spoofing ne s'improvise pas, le
mal intentionn a dj certainement pas mal tourn autour de votre machine. Prise d'empreinte
de la pile TCP/IP, scan des ports ouverts et c'est ce niveau qu'il faut le dbusquer et le
coincer. Par ailleurs, il se contentera dans cette phase d'installer une porte drobe ou de crer
un compte d'administrateur, choses qui sont dtectables si l'on y prend garde en vrifiant
priodiquement l'tat de son systme.
Les blocages
Ce n'est pas proprement parler une intrusion. C'est assez facile faire, c'est pas forcment
dangereux, mais la machine cible se bloque, forant parfois un reset sauvage, on appelle a
un denial of Service
Pour ce genre d'attaque, le mchant utilise des failles dans le NOS pour bloquer le systme
distant. Le ping de la mort en est un bon exemple. Le jeu consiste envoyer un echo
request avec une trame anormalement longue. Certains systmes y sont sensibles et se
bloquent. Le mchant n'y gagne rien, il a juste la joie de vous avoir oblig faire un reset.
Parades :
Un firewall bien configur arrive gnralement viter ce genre de problmes.
ICMP, le proto qui fait peur
Rappelons ici que le protocole ICMP est avant tout destin au transport d'informations sur le
fonctionnement du rseau. Il travaille au mme niveau qu'IP. Vous trouverez ici des dtails
sur ce protocole.
ICMP couvre tous les besoins de signalisation des quipements de rseau. Il est clair que
l'utilisateur final n'a pas besoin de tous les signaux possibles, c'est cependant une erreur de
croire que l'on peut tous les bloquer sans problmes. Voici quelques lments de rponse
l'pineuse question: ICPM oui ou non?
Le PING
Le ping peut ventuellement tre une source de dsagrments:
Il contribue rvler votre prsence sur le Net
Il peut servir obtenir un dni de service (blocage de la machine)
Vous pouvez bloquer les ping request (signal 8) l'entre de votre machine, a ne prte pas
consquences.
Hte inaccessible
C'est le signal 3. Il sert indiquer que l'hte que l'on cherche joindre ne rpond pas. C'est
certainement le signal le plus utile pour les clients du Net.
Il ne faut pas bloquer ce signal, du moins en entre, faute de quoi les couches suprieures du
protocole ne pourront pas tre informes et ne ragiront pas en consquence.
Par ailleurs, ce signal intervient dans la dcouverte du MTU (Maximum Transfert Unit). C'est
la taille la plus grosse qu'un paquet peut prendre avant de devoir subir une fragmentation. Si
ce processus est mis en uvre et que le signal 3 est bloqu, les paquets envoys risquent
d'tre systmatiquement trop grands et donc systmatiquement fragments (voire mme
rejets parfois). Dans ce cas, les performances de la connexion risquent de devenir
dplorables.
Ce signal est-il par ailleurs dangereux? Pas ma connaissance.
Horodatage
Ce signal peut donner des indications sur le fuseau horaire sur lequel vous vous trouvez. Son
utilisation est assez similaire au ping. Comme vous ne voulez pas forcment donner ce genre
d'information un ventuel pirate, bloquez le (signal 13) A priori, a ne devrait pas perturber
le bon fonctionnement de votre connexion.
TTL Expir
Information aussi intressante que hte inaccessible . Ce signal (signal 11) est utilis dans
la commande traceroute.
Il n'est pas utile, voire nfaste de bloquer ce signal.
Redirection ncessaire
Ce signal n'est en principe utile que pour les routeurs. Il peut servir manipuler distance la
table des routes (commande route print sous Windows, ou route sous GNU/Linux).
Du fait de ces risques, il vaut mieux le bloquer.
En ce qui concerne les autres signaux, je n'ai trouv aucune information indiquant s'il valait
mieux les bloquer ou non. A mon sens, le signal 17 (requte de masque de rseau) ne perd
rien tre bloqu. A essayer pour voir.
Etude de cas
Analyse de cas classiques
Commenons par voir ce qu'il se passe sur une machine propre , c'est--dire non infecte
par des chevaux de Troie, ou toute application destine en prendre le contrle distance.
Un poste classique sous Windows 98
L'exprience est tente sur deux postes Windows 98, l'un avec le partage de fichiers activ et
l'autre non. Nous faisons un scan de ports TCP et UDP avec nmap depuis un poste Linux situ
sur le rseau :
Ports TCP :
Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ )
Interesting ports on michele.maison.mrs (192.168.0.2):
(The 1522 ports scanned but not shown below are in state: closed)
Port State Service
139/tcp open netbios-ssn

TCP Sequence Prediction: Class=trivial time dependency
Difficulty=2 (Trivial joke)

Remote operating system guess: Windows NT4 / Win95 / Win98

Nmap run completed -- 1 IP address (1 host up) scanned in 1 second
Ports UDP :
Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ )
Warning: No TCP ports found open on this machine,
OS detection will be MUCH less reliable
Interesting ports on michele.maison.mrs (192.168.0.2):
(The 1446 ports scanned but not shown below are in state: closed)
Port State Service
137/udp open netbios-ns
138/udp open netbios-dgm

Too many fingerprints match this host for me to give an accurate OS guess
Nmap run completed -- 1 IP address (1 host up) scanned in 8 seconds
Ce qu'il est intressant de constater au premier abord, c'est que les mmes ports sont ouverts,
que l'on ait activ le partage des fichiers ou non. La seule chose qui diffre, c'est que le poste
sur lequel le partage n'a pas t activ n'est pas visible dans le voisinage rseau.
Les seuls ports ouverts sont ceux utiliss par NetBIOS.
Un poste de travail Windows 2000
Prenons un autre exemple un peu plus compliqu, mon poste de travail sous Windows 2000.
(Je vous rappelle qu'il n'est pas directement connect l'Internet, j'ai une passerelle Linux
entre les deux
Ce poste est considr comme une station de travail et en aucun cas comme un serveur. Il ne
doit donc thoriquement pas y avoir de ports l'coute sur l'Internet.
Sur ce poste, j'utilise Frontpage 2000, j'ai donc un serveur web personnel (propos par
Windows 2000). Voici ce que donne un scan de ports TCP avec Nmap depuis ma passerelle
Linux:
Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ )
Interesting ports on chris.maison.mrs (192.168.0.10):
(The 1517 ports scanned but not shown below are in state: closed)
Port State Service
80/tcp open http
135/tcp open loc-srv
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds

TCP Sequence Prediction: Class=random positive increments
Difficulty=14803 (Worthy challenge)
Remote operating system guess: Windows 2000 RC1 through final release

Nmap run completed -- 1 IP address (1 host up) scanned in 1 second
Comme vous le constatez, il y a 5 ports ouverts en coute sur cette machine. Parmi ceux-ci, il
y en a un bon nombre qui prsentent des dangers.
Le port 80
C'est normal, PWS est actif (Personal Web Server). Ce serveur HTTP est utile pour la
composition de sites avec Frontpage, pour la mise disposition de documents sur le rseau
priv, en revanche, il pourrait tre dangereux de le laisser visible sur l'Internet
Le port 135
Celui-ci doit prsenter quelques dangers
C'est le serveur RPC (Remote Procedure Call), c'est--dire le mcanisme qui permet
distance de dclencher l'excution de procdures sur ma machine (par un administrateur
uniquement). Il est clair que ce port ne doit pas tre accessible depuis l'Internet.
Le port 139
Ah, celui l est bien connu. C'est un des mcanismes de service de noms NetBIOS (le
voisinage rseau). Absolument rien faire sur l'Internet
Le port 443
HTTP scuris (HTTPS). Ouvert galement par PWS.
Le port 445
Celui-ci, c'est une originalit de Windows 2000. Pour le service de noms, Microsoft a toujours
utilis son systme WINS, bas sur NetBIOS. Depuis Windows 2000, il existe galement un
service de noms bas sur un DNS dynamique, qui n'utilise pas NetBIOS. Ce port est ouvert
pour ce nouveau service et ne devrait se rencontrer que sur les machines Windows 2000 et
suivants
Passons maintenant un scan de ports UDP:
Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ )
Warning: No TCP ports found open on this machine,
OS detection will be MUCH less reliable
Interesting ports on chris.maison.mrs (192.168.0.10):
(The 1442 ports scanned but not shown below are in state: closed)
Port State Service
135/udp open loc-srv
137/udp open netbios-ns
138/udp open netbios-dgm
445/udp open microsoft-ds
500/udp open isakmp
3456/udp open vat

Too many fingerprints match this host for me to give an accurate OS guess
Nmap run completed -- 1 IP address (1 host up) scanned in 9 seconds
Nous avons dj vu le port 135. Les ports 137 et 138 sont des services NetBIOS toujours pour
la rsolution des noms et les ouvertures de sessions. Nous avons galement dj rencontr le
port 445, spcifique Windows 2000.
Le port 500 est utilis par HTTPS, pour la ngociation de cls de cryptage. Encore un port
ouvert par PWS.
Un poste de travail Windows XP SP3
Pare-feu dsactiv
IIS n'est pas install. Un scan TCP :
Starting Nmap 4.53 ( http://insecure.org ) at 2008-05-26 09:30 CEST
Initiating ARP Ping Scan at 09:30
Scanning 172.16.129.250 [1 port]
Completed ARP Ping Scan at 09:30, 0.01s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 09:30
Completed Parallel DNS resolution of 1 host. at 09:30, 0.00s elapsed
Initiating SYN Stealth Scan at 09:30
Scanning 172.16.129.250 [1714 ports]
Discovered open port 3389/tcp on 172.16.129.250
Discovered open port 135/tcp on 172.16.129.250
Discovered open port 139/tcp on 172.16.129.250
Discovered open port 445/tcp on 172.16.129.250
Completed SYN Stealth Scan at 09:30, 1.29s elapsed (1714 total ports)
Initiating Service scan at 09:30
Scanning 4 services on 172.16.129.250
Completed Service scan at 09:30, 6.00s elapsed (4 services on 1 host)
Initiating OS detection (try #1) against 172.16.129.250
Retrying OS detection (try #2) against 172.16.129.250
Retrying OS detection (try #3) against 172.16.129.250
Retrying OS detection (try #4) against 172.16.129.250
Retrying OS detection (try #5) against 172.16.129.250
SCRIPT ENGINE: Initiating script scanning.
SCRIPT ENGINE: rpcinfo.nse is not a file.
SCRIPT ENGINE: Aborting script scan.
Host 172.16.129.250 appears to be up ... good.
Interesting ports on 172.16.129.250:
Not shown: 1710 closed ports
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn
445/tcp open microsoft-ds Microsoft Windows XP microsoft-ds
3389/tcp open microsoft-rdp Microsoft Terminal Service
MAC Address: 00:11:2F:41:C7:57 (Asustek Computer)
No exact OS matches for host (If you know what OS is running on it, see
http://insecure.org/nmap/submit/ ).

Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=258 (Good luck!)
IP ID Sequence Generation: Incremental
Service Info: OS: Windows

Read data files from: /usr/share/nmap
OS and Service detection performed. Please report any incorrect results at
http://insecure.org/nmap/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 17.615 seconds
Raw packets sent: 1938 (88.840KB) | Rcvd: 1800 (85.270KB)
Avec le pare-feu actif, en autorisant les exceptions suivantes :
Bureau distance ;
Partage de fichiers et d'imprimantes.
Starting Nmap 4.53 ( http://insecure.org ) at 2008-05-26 09:36 CEST
Initiating ARP Ping Scan at 09:36
Scanning 172.16.129.250 [1 port]
Completed ARP Ping Scan at 09:36, 0.01s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 09:36
Completed Parallel DNS resolution of 1 host. at 09:36, 0.00s elapsed
Initiating SYN Stealth Scan at 09:36
Scanning 172.16.129.250 [1714 ports]
Discovered open port 3389/tcp on 172.16.129.250
Discovered open port 135/tcp on 172.16.129.250
Discovered open port 139/tcp on 172.16.129.250
Discovered open port 445/tcp on 172.16.129.250
Completed SYN Stealth Scan at 09:36, 8.66s elapsed (1714 total ports)
Initiating Service scan at 09:36
Scanning 4 services on 172.16.129.250
Completed Service scan at 09:36, 6.00s elapsed (4 services on 1 host)
Initiating OS detection (try #1) against 172.16.129.250
Retrying OS detection (try #2) against 172.16.129.250
SCRIPT ENGINE: Initiating script scanning.
SCRIPT ENGINE: rpcinfo.nse is not a file.
SCRIPT ENGINE: Aborting script scan.
Host 172.16.129.250 appears to be up ... good.
Interesting ports on 172.16.129.250:
Not shown: 1710 filtered ports
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn
445/tcp open microsoft-ds Microsoft Windows XP microsoft-ds
3389/tcp open microsoft-rdp Microsoft Terminal Service
MAC Address: 00:11:2F:41:C7:57 (Asustek Computer)
Warning: OSScan results may be unreliable because we could not find at
least 1 open and 1 closed port
Device type: general purpose|authentication server
Running (JUST GUESSING) : Microsoft Windows XP|2000|2003 (98%), Juniper
Windows 2000 (90%)
Aggressive OS guesses: Microsoft Windows XP SP2 (98%), Microsoft Windows
2000 SP4 or Windows XP SP2 (93%),
Microsoft Windows 2003 Small Business Server (93%), Microsoft Windows XP
Professional SP2 (93%),
Microsoft Windows Server 2003 SP0 or Windows XP SP2 (93%), Microsoft
Windows Server 2003 SP1 or SP2 (91%),
Microsoft Windows XP SP 2 (91%), Microsoft Windows XP SP2 (firewall
disabled) (91%),
Microsoft Windows XP Professional SP2 (firewall enabled) (91%), Microsoft
Windows Server 2003 SP2 (90%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
TCP Sequence Prediction: Difficulty=260 (Good luck!)
IP ID Sequence Generation: Incremental
Service Info: OS: Windows

Read data files from: /usr/share/nmap
OS and Service detection performed. Please report any incorrect results at
http://insecure.org/nmap/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.020 seconds
Raw packets sent: 3493 (157.302KB) | Rcvd: 31 (2132B)
Pas grand chose de chang ici.
Voyons maintenant avec le pare-feu actif, sans aucune exception :
Starting Nmap 4.53 ( http://insecure.org ) at 2008-05-26 09:45 CEST
Initiating ARP Ping Scan at 09:45
Scanning 172.16.129.250 [1 port]
Completed ARP Ping Scan at 09:45, 0.02s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 09:45
Completed Parallel DNS resolution of 1 host. at 09:45, 0.00s elapsed
Initiating SYN Stealth Scan at 09:45
Scanning 172.16.129.250 [1714 ports]
Completed SYN Stealth Scan at 09:45, 36.54s elapsed (1714 total ports)
Initiating Service scan at 09:45
Initiating OS detection (try #1) against 172.16.129.250
Retrying OS detection (try #2) against 172.16.129.250
SCRIPT ENGINE: Initiating script scanning.
SCRIPT ENGINE: rpcinfo.nse is not a file.
SCRIPT ENGINE: Aborting script scan.
Host 172.16.129.250 appears to be up ... good.
All 1714 scanned ports on 172.16.129.250 are filtered
MAC Address: 00:11:2F:41:C7:57 (Asustek Computer)
Too many fingerprints match this host to give specific OS details
Network Distance: 1 hop

Read data files from: /usr/share/nmap
OS and Service detection performed. Please report any incorrect results at
http://insecure.org/nmap/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 39.523 seconds
Raw packets sent: 3477 (157.546KB) | Rcvd: 18 (936B)
La moralit de l'histoire, c'est que dans ce cas, plus aucun port n'est accessible, ce qui est
plutt une bonne nouvelle si votre machine est directement connecte l'internet.
Conclusions
Il est clair qu'il y a toujours quelques ports ouverts sur un hte, sauf dans le cas de Windows
XP (SP3 ici), avec le pare-feu actif sans aucune exception. Si les ports UDP ne prsentent pas
trop de dangers encore que), les ports TCP sont plus inquitants.
Par ailleurs, certaines machines de marque comme Compaq ou Hewlett Packard installent des
dispositifs d'administration distante qui ouvrent galement des ports l'coute et l'utilisateur
ne le sait pas forcment.
Il importe donc de savoir avec le plus de prcision possible qu'est ce qui est install sur sa
machine, volontairement ou involontairement.
Contrles possibles
Vrifications la main
Il existe un certain nombre de commandes en ligne qui permettent de vrifier l'tat de votre
machine vis--vis du rseau. Nous allons essayer d'en voir quelques unes et ce que l'on peut
en tirer comme informations.
Rappel sur la configuration de test
Pour mieux comprendre la suite, rappelons la configuration avec laquelle ces tests vont tre
effectus:

Le poste de travail est sous Windows 2000, il s'appelle pchris . Il est connect la
passerelle Linux via eth1.
La passerelle GNU/Linux est connecte l'Internet via eth0, elle s'appelle gateway1 . Cette
passerelle fait tourner un serveur SAMBA, qui permet d'ajouter les composants NetBIOS
pour pouvoir partager des partitions Linux sur un rseau Microsoft. Ce n'est pas une solution
exempte de dangers pour la scurit de la passerelle, mais il est simple de filtrer les ports 137
139. Par ailleurs, SAMBA permet de dfinir la plage d'adresses autorises accder aux
ressources, ainsi que les interfaces rseau utiliser. Ce sont des protections supplmentaires
ne pas ngliger.
La commande netstat
La commande netstat est bien instructive, mme si elle n'est pas toujours trs lisible. Elle
affiche les statistiques de protocole et les connexions rseau TCP/IP en cours.
E:\>netstat

Connexions actives

Proto Adresse locale Adresse distante Etat
TCP pchris:1031 gateway1.maison.mrs:netbios-ssn ESTABLISHED**
Tout fait normal. C'est la session rseau NetBIOS qui est l'uvre. En effet, dans mon
voisinage rseau, je vois la passerelle.

Une variante de la commande:
E:\>netstat -n

Connexions actives

Proto Adresse locale Adresse distante Etat
TCP 192.168.0.10:1031 192.168.0.250:139 ESTABLISHED**
Elle donne les mmes informations, mais sans rsoudre ni les adresses IP ni les ports.
Si j'arrte le serveur SAMBA sur la passerelle, cette connexion va disparatre, mais je ne
verrai plus gateway1 dans mon voisinage rseau.
Attention !
La liste tait simple parce que je ne faisais rien de spcial sur l'Internet. Voici la liste si j'ouvre
Internet Explorer sur http://www.altavista.fr :
E\:>netstat

Connexions actives

Proto Adresse locale Adresse distante Etat
TCP pchris:1031 gateway1.maison.mrs:netbios-ssn ESTABLISHED
TCP pchris:1296 gateway1.maison.mrs:5901 ESTABLISHED
TCP pchris:1304 212.187.226.53:http TIME_WAIT
TCP pchris:1311 195.154.216.235:http TIME_WAIT
TCP pchris:1318 195.154.216.235:http TIME_WAIT
TCP pchris:1327 212.187.226.53:http TIME_WAIT
TCP pchris:1331 195.154.216.235:http TIME_WAIT
TCP pchris:1333 a213-56-194-51.deploy.akamaitechnologies.com:http
ESTABLISHED
TCP pchris:1334 a213-56-194-51.deploy.akamaitechnologies.com:http
ESTABLISHED
TCP pchris:1335 212.187.226.41:http ESTABLISHED
TCP pchris:1338 195.154.216.235:http TIME_WAIT
Il convient donc d'tre prudent dans l'interprtation des rsultats de cette commande qui liste
toutes les connexions existant un instant donn. Pour dtecter des connexions indlicates
, il faut tre certain que votre poste n'a aucune activit normale sur l'Internet (Pas de
navigateur ouvert, pas de client de messagerie etc.).
La commande netstat dispose de quelques options, voici pour ceux qui voudraient un peu
s'amuser avec la documentation extraite de Windows 2000 (je ne garantis pas qu'elle soit
entirement compatible avec Windows 98).
Netstat
Affiche les statistiques de protocole et les connexions rseau TCP/IP en cours. Cette
commande est disponible uniquement si le protocole TCP/IP est install.
netstat [-a] [-e] [-n] [-s] [-p protocole] [-r] [intervalle]
Paramtres
-a
Affiche toutes les connexions et les ports d'coute. Les connexions serveur ne
sont en principe pas affiches.
-e
Affiche des statistiques relatives Ethernet. Ce paramtre peut tre combin avec
l'option -s.
-n
Affiche les adresses et numros de ports sous forme numrique (au lieu de tenter
des recherches par nom).
-s
Affiche les statistiques des protocoles respectifs. Par dfaut, les statistiques de
TCP, UDP, ICMP et IP sont affiches. L'option -p peut tre utilise pour spcifier
un sous-ensemble des protocoles par dfaut.
-
p protocole
Affiche les connexions du protocole spcifi par le paramtre protocole ; ce
paramtre peut avoir pour valeur tcp ou udp. Quand il est utilis avec l'option -s
pour afficher des statistiques par protocole, protocol peut prendre la valeur tcp,
udp, icmp ou ip.
-r Affiche le contenu de la table de routage.
intervalle
Affiche les statistiques slectionnes de manire rpte avec un intervalle (en
secondes) entre chaque occurrence. Appuyez sur CTRL+C pour interrompre
l'affichage des statistiques. Si ce paramtre est omis, netstat n'imprime qu'une
seule fois les informations de configuration.
La commande arp
Affiche et modifie les tables de conversion des adresses physiques IP employes par le
protocole ARP (Address Resolution Protocol). Il s'agit ici d'une conversion au niveau du sous
rseau. Le protocole ARP permet, dans un sous rseau, d'tablir une relation entre adresse IP
et adresse MAC, celle qui est employe par la couche d'accs rseau pour acheminer les
donnes.
Autrement dit, si quelqu'un tente de se connecter sur votre machine alors qu'il est dans le
mme sous rseau que vous (un autre abonn cble de votre branche), vous le verrez. Mais si
la tentative vient d'un autre rseau, vous ne verrez qu'une connexion la passerelle.
Un exemple
Test de la commande arp sur le poste de travail:
E:\>arp -a

Interface : 192.168.0.10 on Interface 0x1000003
Adresse Internet Adresse physique Type
192.168.0.250 00-20-18-61-90-e3 dynamique**
192.168.0.250, c'est l'adresse de ma passerelle sur eth1.
Mme commande sur la passerelle Linux (pour une fois que l'on a les mmes outils dans les
deux environnements):
[root@gateway1 chris]# arp -a
ca-ol-marseille-9-1.abo.wanadoo.fr (213.56.56.1) at 00:D0:79:72:5C:00
[ether] on eth0
chris.maison.mrs (192.168.0.10) at 00:20:18:B9:49:37 [ether] on eth1**
J'ai deux connexions:
La premire sur 213.56.56.1 par eth0, c'est normal, c'est la passerelle par dfaut que le
client DHCP a rcupr.
La seconde sur 192.168.0.10 par eth1, c'est encore normal, c'est mon poste de travail.
Note :
Il est possible que la commande vous rponde :
E:\>arp -a
Aucune entre ARP trouve
Ce n'est pas alarmant, si vous n'avez pas utilis la connexion depuis un certain temps, la table
ARP s'est vide. Ce qui ventuellement peut tre plus drangeant, c'est lorsque votre table
ARP indique des connexions multiples et pas forcment faciles justifier:
Il vous faudra alors essayer d'identifier ces connexions en fonction de ce que vous tes en
train de faire sur votre machine.
Voici les diverses options de la commande arp :
Arp
Affiche et modifie les tables de conversion des adresses physiques IP (Ethernet ou anneau
jeton) employes par le protocole ARP (Address Resolution Protocol). Cette commande est
disponible uniquement si le protocole TCP/IP est install.
arp -a [adr_inet] [-N [adr_si]]
arp -d adr_inet [adr_si]
arp -s adr_inet adr_ether [adr_si]
Paramtres
-a
Affiche les entres ARP en cours en interrogeant TCP/IP. Si adr_inet est spcifi,
seules les adresses physiques et IP du systme spcifi apparaissent.
-g Identique -a.
adr_inet Spcifie une adresse IP en notation dcimale pointe.
-N Affiche les entres ARP pour l'interface rseau spcifie par adr_si.
adr_si
Spcifie, le cas chant, l'adresse IP de l'interface dont la table de conversion des
adresses doit tre modifie. Si elle n'est pas spcifie, la modification est applique
la premire interface rencontre.
-d Supprime l'entre spcifie par adr_inet.
-s
Ajoute une entre dans la mmoire cache ARP pour associer l'adresse IP adr_inet
l'adresse physique adr_ether. L'adresse physique se compose de six octets
hexadcimaux spars par des tirets. L'adresse IP est spcifie en notation dcimale
pointe. L'entre est permanente, c'est--dire qu'elle est automatiquement
supprime du cache l'expiration de la temporisation.
adr_ether Spcifie une adresse physique.
Les outils d'audit
Sous Linux, il existe une foule d'outils permettant de tracer le trafic rseau. En gnral, ces
outils sont capables d'afficher ou d'enregistrer (ou les deux) tout ce qui est visible sur une
interface rseau, concernant les protocoles TCP, UDP, ICMP et mme ARP
Brutalement, a ressemble un peu un sniffer , part que les trames sont identifies, mais
pas visualises en entier et que, normalement, seules les trames destines l'hte sont
analyses (pas de mode promiscuit )..
Ces outils ncessitent la mise en place de rgles de filtrage, sans quoi, ils enregistrent
absolument tout ce qui entre depuis le rseau concern.
Ce ne sont pas proprement parler des outils de protection, mais ils permettent de contrler le
trafic et constituent un excellent moyen d'apprentissage. Bien configurs, ils peuvent servir
d'alarme en cas d'activit juge suspecte.
Parmi les plus connus sous Linux, il y a ippl (qui ne semble plus voluer), iptraf et bien sr
Snort, TCPDump, Tshark, Fail2ban, etc.
L'audit ne se rsume cependant pas aux traces gnres par ce genre d'outils. Les systmes
d'exploitation srieux construisent des journaux d'audit du systme qui permettent de
savoir qui s'est connect sur la machine, quel service a t dmarr, utilis, arrt Autant
d'informations qu'il ne faut pas ngliger de consulter rgulirement.
Protections
Savoir ce qui est install
La premire rgle est bien entendu de savoir exactement quels sont les services installs sur sa
machine et de n'y laisser que ce qui est strictement ncessaire. Cette mthode, surtout dans le
cas d'un rseau local connect l'Internet par une passerelle est toutefois assez pnalisante.
On peut souhaiter disposer de quelques services sur l'hte qui sert de passerelle.
Bien entendu, la solution la plus sre consiste installer une passerelle qui ne fera que son
travail de passerelle et de firewall et d'installer par ailleurs sur le rseau priv un serveur pour
les divers services souhaits. Ceci augmente tout de mme le nombre de machines et la
facture EDF. Ca ne rsoudra pas non plus certains problmes pour les entreprises qui
souhaitent accder certaines de leurs ressources depuis l'extrieur, mais le cas de figure
dpasse largement le propos de cet expos.
Construire une barrire
Etat des lieux
Une solution de protection consiste interdire l'accs aux ports inutiles ct Internet. L'tude
qui suit date un peu, mais malgr l'obsolescence du systme utilis, elle n'en est pas moins
toujours pertinente.
Sur Linux Mandrake 7.x (plus gnralement avec un noyau 2.2.x bien compil), ceci peut se
faire avec IPChains. Les noyaux 2.4.x et suprieurs, bien que supportant IPChains, gagneront
exploiter plutt IPTables, nettement plus volu.
Pour fixer les esprits, donnons un exemple.
Soit une machine Linux servant de passerelle sur l'Internet. Comme on aime bien jouer avec
les diverses applications fournies, on y a install:
SAMBA, pour communiquer avec le rseau Microsoft.
APACHE, pour tester ses pages web sur un serveur classique de l'Internet
WU-FTPD, serveur FTP pour pouvoir charger ses pages HTML avec les outils de
FrontPage.
BIND, pour avoir son propre DNS,
POSTFIX, pour avoir son propre serveur SMTP,
VNC SERVER pour ouvrir des sessions X depuis les postes Microsoft du rseau
priv.
Et j'en passe
Et comme on ne veut pas s'embter, la rgle par dfaut sur INPUT est ACCEPT.
Croyez-vous que ce soit prudent? Pas du tout bien entendu. Sur une machine expose
l'Internet, moins on installe de serveurs, mieux a vaut. Examinons ce que verrait un pirate qui
ferait un scan de cette machine avec l'un des meilleurs outils dans le genre nmap (inclus
dans toutes les bonnes distributions GNU/Linux).
Dmonstration
De quoi vraiment
donner envie de s'y intresser de plus prs!
21, c'est WU-FTPD
23, Telnet, ah! nous verrons a
25 C'est Postfix, faudra voir si ce ne serait pas un open relay
53 Tiens, il y a un DNS, intressant.
80, sans doute apache.
139, Ce monsieur a install SAMBA. Bon, a suffit comme a pour l'instant.
Exploitons un peu le sujet
Telnet, c'est intressant:
Welcome to gateway2.maison.mrs
Linux Mandrake release 7.1 (helium)
Kernel 2.2.16-9mdk on an i586
login:
Voil, une Mandrake 7.1 avec un kernel 2.2.16-9 et la machine s'appelle
gateway2.maison.mrs. Ca c'est intressant. Allons faire un tour sur le DNS du monsieur
E:\>nslookup
Serveur par dfaut : <peu importe>
Address: <peu importe>

> server 62.161.100.113
Serveur par dfaut : ca-ol-marseille-5-113.abo.wanadoo.fr
Address: 62.161.100.113
> set q=any
> ls maison.mrs
[ca-ol-marseille-5-113.abo.wanadoo.fr]
maison.mrs. NS server = gateway2.maison.mrs
gateway2 A 192.168.0.253
remi A 192.168.0.12
michele A 192.168.0.2
chris A 192.168.0.10
gateway1 NS server = 192.168.0.250
daniel A 192.168.0.11
gateway2 NS server = 192.168.0.253**
Et hop! On sait tout du rseau de ce monsieur (Mme, si vous avez bien suivi, que ce
monsieur dispose sans doute d'une seconde machine du mme genre qui s'appelle gateway1)
Il faut dire que c'est quand mme trs mal, de laisser libre le transfert de zone sur un DNS.
Mais j'ai trouv cette gravissime lacune sur des sites trs professionnels .
Reprenons le scnario, mais avec BIND correctement configur. a donne ceci:
E:\>nslookup
Serveur par dfaut : gateway1.maison.mrs
Address: 192.168.0.250

> server 62.161.100.113
Serveur par dfaut : ca-ol-marseille-5-113.abo.wanadoo.fr
Address: 62.161.100.113
> set q=any
> ls maison.mrs.
ls: connect: No error
*** Impossible de fournir la liste du domaine maison.mrs.: Unspecified
error
> pchris.maison.mrs
Serveur : ca-ol-marseille-5-113.abo.wanadoo.fr
Address: 62.161.100.113

*** ca-ol-marseille-5-113.abo.wanadoo.fr ne parvient pas trouver
pchris.maison.mrs :
No response from server
C'est dj mieux, au moins le DNS ne rpond plus aux requtes venant de l'Internet.
Comment il faut faire? Dans /etc/named.conf, il faut utiliser les directives allow-transfert ,
allow-query et mme listen-on (cf. la doc. de BIND)
Cet exemple est juste donn pour bien montrer que la scurit passe d'abord par une
configuration correcte des serveurs installs
Mais continuons l'investigation. Voyons le serveur FTP, un petit coup de telnet sur le port 21:
220 gateway2.maison.mrs FTP server (Version wu-2.6.0(1) Wed Jun 28 23:51:34
EDT2000) ready.
Oui, c'est bien un wu-ftp, version 2.6.0. Faudra voir ce qu'il y a comme exploits l dessus.
On va s'arrter l, mais il y a pas mal d'investigations faire sur un serveur FTP
Allez, encore un telnet sur le port 25
220 gateway2.maison.mrs ESMTP Postfix (Postfix-19991231) (Linux-Mandrake)
C'est bien Postfix. (L aussi, il y aurait encore beaucoup faire).
Convaincu? en trs peu de temps, le pirate accumule une quantit intressante d'informations
sur votre quipement, autant d'informations qu'il pourra exploiter pour essayer de casser
votre matriel.
Comme l'objectif de cet expos n'est pas de faire un cours sur l'intrusion (encore que ce soit le
meilleur moyen pour apprendre mettre en place des parades), on va s'arrter l.
La situation expose est d'autant plus absurde, qu'avec IPTables, on peut dj compliquer
passablement le travail de l'indlicat.
Que les utilisateurs de Windows n'abandonnent pas la lecture de ce qui suit. La dmonstration
se fait avec IPtables, mais le principe reste vrai quel que soit l'OS. Nous verrons plus loin les
solutions proposes aux utilisateurs de produits Microsoft.
Construction de barrires
Disons d'abord ce que l'on veut faire en franais. D'abord une simple passerelle avec
masquage d'adresses du rseau priv :
En entre, on accepte tout par dfaut (comme c'tait dans l'exemple prcdent),
en sortie, on laisse tout passer aussi,
au travers de la passerelle (le routage entre le Net et le rseau priv), on n'accepte rien,
mais on va faire du masquage d'adresse pour tout ce qui vient du rseau priv et va
vers le Net,
Ensuite, pour tout ce qui vient du Net, nous bloquerons en UDP comme en TCP les ports :
21 tcp, qui est le port de commande FTP,
23 tcp, qui est le port Telnet,
25 tcp, qui est le port SMTP,
110 tcp, qui est le port POP3,
111 tcp/udp qui est le port des Remote Procedure Call ,
135 139 tcp/udp, des ports utiliss par NetBIOS,
143 tcp, le port IMAP,
6000 6009 tcp, les ports utiliss pour le serveur graphique.
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o ppp0 -j
MASQUERADE
iptables -A INPUT -p tcp --dport 21 -i ppp0 -j REJECT
iptables -A INPUT -p tcp --dport 23 -i ppp0 -j REJECT
iptables -A INPUT -p tcp --dport 25 -i ppp0 -j REJECT
iptables -A INPUT -p tcp --dport 110 -i ppp0 -j REJECT
iptables -A INPUT -p tcp --dport 111 -i ppp0 -j REJECT
iptables -A INPUT -p udp --dport 111 -i ppp0 -j REJECT
iptables -A INPUT -p tcp --dport 135:139 -i ppp0 -j REJECT
iptables -A INPUT -p udp --dport 135:139 -i ppp0 -j REJECT
iptables -A INPUT -p tcp --dport 143 -i ppp0 -j REJECT
iptables -A INPUT -p tcp --dport 6000:6009 -i ppp0 -j REJECT
Traduit en franais, a veut dire que l'on jette (REJECT) les paquets qui viennent de
n'importe o pour aller n'importe o, s'ils ont le malheur de rentrer par ppp0 sur les ports 21,
23, 25, 110, 111, 139, 143 et de 6000 6009. C'est bien ce que nous voulions. Refaisons un
scan:
Starting nmap V. 2.30BETA17 by fyodor@insecure.org ( www.insecure.org/nmap/
)
Interesting ports on ca-ol-marseille-5-113.abo.wanadoo.fr
(62.161.100.113):
(Ports scanned but not shown below are in state: filtered)
Port State Service Owner
1/tcp unfiltered tcpmux
2/tcp unfiltered compressnet
3/tcp unfiltered compressnet
...
80/tcp open http nobody
...
113/tcp open auth nobody
...
515/tcp open printer root
...
...
3306/tcp open mysql mysql
...

TCP Sequence Prediction: Class=random positive increments
Difficulty=4917615 (Good luck!)
Remote operating system guess: Linux 2.1.122 - 2.2.14**

Nmap run completed -- 1 IP address (1 host up) scanned in 220 seconds
nmap ne s'y trompe pas, il constate qu'il y a des rgles de filtrage sur cette machine et essaye
de trouver les ports non filtrs. Il va en trouver beaucoup, mais a ne veut pas dire qu'ils sont
ouverts. Ceux qu'il trouve ouverts sont ceux que l'on n'a pas filtrs.
Il est clair que l'on a dj limit les problmes. Mais on pourrait encore faire beaucoup mieux
. L'objectif ici n'tait que de montrer comment l'on peut tablir des rgles de filtrage de
paquets, mais d'expliquer comment un port peut tre bloqu par un firewall.
Dans la pratique, il sera probablement plus judicieux de tout interdire, puis de n'ouvrir que ce
qui est ncessaire. Voyez ce propos le chapitre NetFilter et IPtables .
Conclusion
Ce type de protection passive offre dj un bon niveau de scurit, si l'on a convenablement
analys la configuration de sa machine et plac les bonnes rgles. Il y aurait encore faire sur
cette machine, car si l'on a peu prs filtr les ports TCP, qui sont les plus dangereux parce
qu'ils permettent un mode connect, on n'a encore rien fait ni sur UDP, ni sur ICMP. Ces deux
protocoles peuvent cependant crer des nuisances parce qu'ils peuvent tre utiliss pour
bloquer la machine.
Cependant, il est intressant de placer en plus quelques systmes qui vont pier le trafic et
prvenir, voire ragir, en cas d'activit suspecte avec les loggers et les firewalls actifs.
IPtables sait dj logger les vnements qui satisfont aux critres des chanes, mais il est
peut-tre plus intressant d'utiliser des outils spcifiques.
Les miradors du Net
La plupart des attaques commencent par un scan des ports ouverts sur la cible. Des outils
particuliers permettent de dtecter ce scan, d'en identifier la source par son adresse IP et
certains permettent mme de monter un firewall sur mesure pour bloquer l'intrus. Le
scanner n'aura mme pas le temps de finir son travail et aura l'impression que la cible a
disparu.
Les loggers
J'en ai plus ou moins test trois sous Linux, il en existe beaucoup d'autres, chacun dispose,
mon sens, d'avantages et d'inconvnients. Bien qu'ils n'aient plus beaucoup volu depuis pas
mal de temps, ils sont toujours distribus dans Debian Etch.
IPTRAF

C'est peut-tre le plus convivial mais pas forcment le plus
paramtrable. Il fonctionne bien en mode texte mais prsente
quelques bugs d'affichage dans une console sous X, suivant la
taille de la fentre.
Les anciens de MS DOS
retrouveront avec nostalgie
les menus arborescents en
mode caractre

Ici, il est possible de choisir les protocoles tracer.
Malheureusement, s'il est possible de dfinir des filtres
personnaliss pour UDP, l'option n'existe pas pour les autres
protocoles.

Il est galement possible de
choisir l'interface que l'on
souhaite tracer

Voici un exemple de trace. Si les connexions TCP sont affiches de manire trs lisible, il
n'en va malheureusement pas de mme pour les autres protocoles

IPPL
Celui-ci fonctionne de manire diffrente. Son but principal tant d'enregistrer la trace dans
des fichiers, bien qu'il soit possible de diriger ses traces sur une console. Lui aussi, se trouve
encore dans la Debian Etch, bien que sa dernire version (1.4.14) remonte septembre 2001.
Sa configuration se fait par le fichier /etc/ippl.conf, je n'ai malheureusement pas trouv le
moyen de limiter son activit l'interface choisie autrement qu'en donnant son adresse IP, ce
qui n'est gure pratique lorsque l'on dispose d'une adresse dynamique.
Snort
Il s'agit d'un outil de dtection et de prvention d'intrusions. Disposant d'un langage de
dfinition de rgles, il travaille un peu comme un antivirus heuristique, en combinant des
recherches de signatures et des analyses comportementales. Probablement l'outil le plus utilis
dans le monde, mais pas facile maitriser.
Conclusions
Un outil de log comme iplog est un bon moyen pour contrler le trafic. Il ne sait cependant
tracer que ce qu'il lui est demand (ce que vous lui demandez) et uniquement ce qu'il lui est
demand. Ca veut dire deux choses importantes:
Il tracera des vnements qui n'en valent peut-tre pas la peine. Si vous lui demandez
de tracer tout trafic sur une interface, il le fera. Les logs de la journe risqueront peut-
tre de peser plusieurs Mo et seront inexploitables, autrement que par des filtres qu'il
vous faudra crire.
Il ne tracera peut-tre pas des vnements qu'il aurait t important de ne pas rater.

Vous apprendrez certainement beaucoup de choses en passant du temps essayer de matriser
ce genre d'outils
Les Coupe feux actifs
Un coupe feu actif, en plus de surveiller les connexions entrantes est capable de dtecter une
activit rpute frauduleuse et y parer de manire dynamique. Il existe sous Linux au moins
une application de ce type: Portsentry
Portsentry, le pompier du Net
Portsentry est capable de dtecter un scan de ports TCP et UDP. La dtection peut
dclencher plusieurs types de parades:
Un simple log via syslogd. Dans ce cas, Portsentry agit comme un simple
loggeur , un peu lger toutefois, puisqu'il ne sait pas traiter les activits ICMP.
Une inscription du scanner dans hosts.deny , pour qu'il soit pris en compte par le
TCP Wrapper
L'ajout d'une rgle dans la chane input d'IPtables pour bloquer l'intrus.
La modification de la route par dfaut dans un black hole de manire ce qu'une
ventuelle rponse l'intrus soit dirige vers nulle part.
Le dclenchement d'une commande externe pouvant tre, par exemple, la
dsactivation pure et simple de l'interface rseau.
Bien entendu, ces parades sont configurables.
Portsentry ne semble plus voluer depuis sa version 1.2 de 2003, mais est toujours disponible
sur Debian Etch.
Juste un exemple
Dans le rle de l'intrus: 213.56.228.199. Une machine Linux quipe du scanner
nmap .
Dans le rle du dfenseur, une autre machine Linux, quipe de portsentry. La
configuration est peu de choses prs celle qui est donne par dfaut dans le
paquetage rpm pour Mandrake. En cas de dtection de scan, portsentry va ragir de la
manire suivante:
o Inscription de l'intrus dans /etc/hosts.deny
o Ecriture d' une rgle de blocage dans IPChains (fonctionne aussi avec
IPTables).
Avant l'attaque
Voyons un peu l'allure de la chane INPUT (IPtables):
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- anywhere anywhere tcp dpt:telnet reject-with icmp-port-
unreachable
REJECT tcp -- anywhere anywhere tcp dpt:smtp reject-with icmp-port-
unreachable
Les protections sont trs simplistes, seuls telnet et smtp sont filtrs.
Portsentry est dmarr avec la commande portsentry -atcp (Entamer ici une tude dtaille
de portsentry nous mnerait trop loin.).
Le dmarrage de portsentry ajoute ces lignes au fichier /var/log/messages:
adminalert: Psionic PortSentry is starting.
adminalert: Advanced mode will monitor first 1023 ports
adminalert: Advanced mode will manually exclude port: 113
adminalert: Advanced mode will manually exclude port: 139
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 21
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 23
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 25
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 53
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 80
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 110
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 111
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 113
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 139
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 143
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 515
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 820
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 901
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 113
adminalert: Advanced Stealth scan detection mode activated. Ignored TCP
port: 139
adminalert: PortSentry is now active and listening.
L'attaque a lieu...
Le scan est dmarr avec nmap sur l'hte pirate . Portsentry s'en rend compte et effectue
les oprations suivantes:
Les lignes qui suivent sont ajoutes au journal /var/log/messages
attackalert: SYN/Normal scan from host: ca-ol-marseille-21-
199.abo.wanadoo.fr/213.56.228.199 to TCP port:52
attackalert: Host 213.56.228.199 has been blocked via wrappers with string:
ALL: 213.56.228.199
attackalert: Host 213.56.228.199 has been blocked via dropped route
using command: /sbin/ipchains -I input -s 213.56.228.199 -j DENY
attackalert: SYN/Normal scan from host: ca-ol-marseille-21-
199.abo.wanadoo.fr/213.56.228.199 to TCP port:175
attackalert: Host: ca-ol-marseille-21-199.abo.wanadoo.fr/213.56.228.199 is
already blocked Ignoring
attackalert: SYN/Normal scan from host: ca-ol-marseille-21-
199.abo.wanadoo.fr/213.56.228.199 to TCP port:32
attackalert: Host: ca-ol-marseille-21-199.abo.wanadoo.fr/213.56.228.199 is
already blocked Ignoring
attackalert: SYN/Normal scan from host: ca-ol-marseille-21-
199.abo.wanadoo.fr/213.56.228.199 to TCP port:621
attackalert: Host: ca-ol-marseille-21-199.abo.wanadoo.fr/213.56.228.199 is
already blocked Ignoring
attackalert: SYN/Normal scan from host: ca-ol-marseille-21-
199.abo.wanadoo.fr/213.56.228.199 to TCP port:312
attackalert: Host: ca-ol-marseille-21-199.abo.wanadoo.fr/213.56.228.199 is
already blocked Ignoring
La rgle suivante est ajoute dans la chane INPUT d'IPchains:
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 213.56.228.199 anywhere
*** //L'attaquant est bloqu sur tous les ports, sur tous les
protocoles,
*** quelle que soit la destination//**//
REJECT tcp -- anywhere anywhere tcp dpt:telnet reject-with
icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:smtp reject-with
icmp-port-unreachable
Le fichier /etc/hosts.deny est modifi de la manire suivante :
#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!
#

ALL: 213.56.228.199
Bilan
L'attaquant n'aura mme pas le temps de finir son scan. il aura l'impression que la cible
n'existe plus, tout simplement.
N'est-ce pas joli? Attention toutefois, si la modification de /etc/hosts.deny n'est pas volatile
(criture dans le fichier), il n'en va pas de mme pour IPChains. Sans prcautions
particulires, si la machine est arrte, la rgle sera perdue. Il existe cependant une parade
grce, par exemple, la possibilit d'excuter une commande externe en cas de dtection
d'attaque. Il suffit de sauvegarder la rgle INPUT pour pouvoir la recharger au prochain
dmarrage. Ceci dit, les attaques venant le plus souvent d'adresses dynamiques, il n'est pas
forcment ncessaire de rendre la rgle dfinitive. Par ailleurs, si l'on agit sur IPChains, il
n'est pas ncessaire de conserver l'option de modification de /etc/hosts.deny.
Notez tout de mme que nous n'avons pas couvert les risques manant:
D'un scan UDP.
C'est gnralement moins dangereux, mais pas ngliger tout de mme. Portsentry
peut galement tre dmarr pour surveiller les ports UDP, mais le fonctionnement est
plus dlicat et peut provoquer des ractions parasites.
D'une attaque ICMP
Portsentry ne sait rien faire contre a. Il ne vous reste de ce ct qu' crire des rgles
correctes.
D'une attaque sans qu'il y ait de scan pralable
Portsentry n'est donc hlas pas un outil miraculeux, il n'en existe d'ailleurs pas.
Fail2ban
Fail2ban lit des fichiers de log comme /var/log/pwdfail ou /var/log/apache/error_log et bannit
les adresses IP qui ont obtenu un trop grand nombre d'checs lors de l'authentification. Il met
jour les rgles du pare-feu pour rejeter cette adresse IP. Ces rgles peuvent tres dfinies par
l'utilisateur.
Il ne s'agit pas ici de dtecter des scans mais des tentatives de loggin . Lorsque le
logiciel dtecte un nombre dtermin de loggins rats dans un temps galement dtermin, il
peut dclencher un certain nombre d'actions :
criture d'une rgle IPtables pour bloquer la source, pendant une dure paramtrable ;
envoi d'un message d'alerte l'administrateur
Il peut surveiller plusieurs serveurs susceptibles de rclamer un loggin comme Openssh,
Apache, Postfix, Proftpd, vsftpd,wuftpd etc.
Voici un exemple de message reu en cas de dtection :
Hi,

The IP 62.38.244.99 has just been banned by Fail2Ban after
5 attempts against SSH.


Here are more information about 62.38.244.99:

% This is the RIPE Whois query server #2.
% The objects are in RPSL format.
...
## Suivent les informations recueillies par "hois"

Regards,
On ne devrait pas pouvoir se passer de Fail2ban
Les Firewalls
Dans la page prcdente, nous avons fait du firewalling sans le savoir. Pour donner
quelques indications de plus, il est ncessaire de se pencher d'un peu plus prs sur les diverses
mthodes de construction d'un firewall .
D'abord, c'est quoi, un firewall ?

Typiquement, une installation complte contient :
Un rseau priv, dont on considre (souvent tort) qu'il ne sera pas utilis pour
attaquer notre systme informatique. Dans cette zone, il n'y a que des clients du rseau
et des serveurs qui sont inaccessibles depuis l'Internet. Normalement, aucune
connexion, au sens TCP du terme, aucun change, au sens UDP du terme, ne peuvent
tre initis depuis le Net vers cette zone.
Une DMZ (Zone DMilitarise), qui contient des serveurs accessibles depuis le
Net et depuis le rseau priv. Comme ils sont accessibles depuis le Net, ils risquent
des attaques. Ceci induit deux consquences :
o Il faut troitement contrler ce que l'on peut faire dessus depuis le Net, pour
viter qu'ils se fassent casser trop facilement,
o Il faut s'assurer qu'ils ne peuvent pas accder aux serveurs de la zone prive, de
manire ce que si un pirate arrivait en prendre possession, il ne puisse
directement accder au reste du rseau.
Les trois types de communications marques 1,2 et 3 sur l'illustration seront donc soumis
des rgles de passage diffrentes. Le dispositif qui va permettre d'tablir ces rgles de
passages s'appelle un firewall. Techniquement, ce pourra tre un logiciel de contrle install
sur un routeur.

Nous aurons, par exemple :
Le rseau priv dans une classe d'adresses IP prives, comme 192.168.0.0,
la DMZ dans une autre classe prive comme 192.168.1.0 ou, si l'on a les moyens, dans
un morceau de classe publique, de manire pouvoir accder ces machines depuis le
Net sans translation d'adresse,
une adresse publique attribue au routeur sur le Net par le FAI (Fixe ou dynamique.
Dans ce type d'installation, il vaut mieux qu'elle soit fixe).
Le routeur cumule ici deux fonctions :
Le routage proprement dit, pour permettre aux paquets de passer d'une zone l'autre
alors que ces zones ne sont pas situes dans le mme rseau IP,
Le filtrage du trafic entre les diverses zones, c'est la fonction de FireWall.
Bien entendu, qui peut le plus peut le moins, il peut ne pas y avoir de DMZ, si l'on n'a pas
besoin d'exposer de serveurs sur le Net.
Sur des petites structures, la DMZ peut tre implante sur le routeur lui-mme. En effet, un
routeur peut trs bien n'tre rien d'autre qu'un serveur avec plusieurs interfaces rseau et un
logiciel de routage. Ce n'est bien entendu pas une solution trs propre au sens de la
scurit.
Les trois passages
Revenons notre schma initial.
1- Entre le rseau priv et le Net
Toujours typiquement, ce sont les clients du rseau (les utilisateurs) qui l'on va donner des
possibilits d'accder au Net comme par exemple le surf ou la messagerie. Toutes les requtes
partent du rseau priv vers le Net. Seules les rponses ces requtes doivent entrer dans cette
zone. Les accs peuvent tre compltement brids (les clients du rseau priv n'ont aucun
droit d'accs vers le Net, a nuit leur productivit. Seul le patron y a droit). Ou alors, les
utilisateurs ne pourront consulter qu'un nombre de sites limits, dans le cadre de leurs
activits professionnelles exclusivement. Trs gnralement, cette zone est construite sur une
classe d'adresses prives et ncessite donc une translation d'adresse pour accder au Net. C'est
le routeur qui se chargera de cette translation.
2- Entre la DMZ et le Net
Ici, nous avons des serveurs qui doivent tre accessibles depuis le Net. Un serveur Web, un
serveur de messagerie, un FTP Il faudra donc permettre de laisser passer des connexions
inities depuis l'extrieur. Bien entendu, a prsente des dangers, il faudra surveiller
troitement et ne laisser passer que le strict ncessaire.
Si l'on dispose d'adresses IP publiques, le routeur fera un simple routage. Si l'on n'en dispose
pas, il devra faire du port forwarding pour permettre, avec la seule IP publique dont on
dispose, d'accder aux autres serveurs de la DMZ. Cette technique fonctionne bien sur un petit
nombre de serveurs, mais devient trs vite un casse-tte si, par exemple, plusieurs serveurs
HTTP sont prsents dans la DMZ.
3- Entre le rseau priv et la DMZ
Les accs devraient tre peu prs du mme type qu'entre la zone prive et le Net, avec un
peu plus de souplesse. En effet, il faudra
Mettre jour les serveurs web,
Envoyer et recevoir les messages, puisque le SMTP est dedans
Mettre jour le contenu du FTP (droits en criture).
En revanche, depuis la DMZ, il ne devrait y avoir aucune raison pour qu'une connexion soit
initie vers la zone prive.
Les divers types de FireWall
Bien. Maintenant que nous savons peu prs ce que l'on peut et ce que l'on ne peut pas faire
entre les diverses zones, voyons comment construire ce firewall.
Il y a dj deux moyens diffrents de s'y prendre. Soit l'on travaille au niveau TCP et UDP en
s'intressant aux adresses IP des sources et des cibles, ainsi qu'aux ports employs, nous
ferons du filtrage de paquets, soit l'on travaille au niveau de l'application (HTTP, SMTP,
FTP). Nous ferons alors du proxying .
Rien d'ailleurs n'interdit de faire les deux.
Si l'on travaille au niveau des paquets, il y a encore deux mthodes, l'une triviale et l'autre
plus fine. Pour comprendre la diffrence entre les deux, ce n'est pas facile. Disons qu'une
connexion entre un client et un serveur peut engendrer plusieurs connexions sur des ports
diffrents.
Sans aller trs loin, une simple consultation de page web suffit expliquer ce qu'il se passe. Si
le client envoie bien la requte toujours sur le port 80 du serveur, il attend en revanche la
rponse sur un port qu'il va choisir alatoirement, gnralement en dessus de 1024. Comme le
port de rponse est alatoire, a va tre difficile de laisser passer les rponses sans ouvrir tous
les ports au dessus de 1024 en entre vers la zone prive.
Pour tre efficace, il faut tre capable d'assurer un suivi de la connexion, en analysant la
requte initiale pour dcouvrir le port sur lequel le client recevra la rponse et agir
dynamiquement en fonction. C'est ce que l'on appelle le suivi de connexion ( conntrack en
jargon informatico-anglo-saxon).
Le Firewall par filtrage simple de paquets ( stateless )
C'est donc le plus trivial. Il ne sait que vrifier si les sockets (Couple adresse IP : port)
source et destination sont conformes ou non des autorisations de passage. Dans la pratique,
si la machine cliente d'IP 217.146.35.25 doit pouvoir accder au serveur web 124.8.3.251 et,
bien entendu, recevoir ses rponses, nous dirons en franais :
Les paquets venant de 217.146.35.25 vers 124.8.3.251, port 80 passent.
Les paquets venant de 124.8.3.251, port 80 vers 217.146.35.25, ports &gt;=1024
passent.
Si nous voulons tendre tous les serveurs web possibles, nous ne pourrons plus tenir compte
de l'IP des serveurs, a aura pour consquence que tout le Net pourra accder 217.146.35.25
sur tous les ports au dessus de 1024.
Si nous voulons que toute la zone prive puisse accder tous les serveurs web du Net, alors,
tout le rseau priv sera accessible sur les ports au dessus de 1024.
L'exemple est minimaliste, les IP des clients sont des IP publiques, il n'y a pas de translation
d'adresse mise en oeuvre, ce qui rend les risques maximums. Dans la pratique, le cas est
rarissime. Il ne sert ici qu' montrer les limites de ce filtrage simple. Notez qu'avec de tels
systmes, la translation d'adresse est de toutes manires rendue impossible. Pour faire de la
translation d'adresse, il faut tre capable de suivre les connexions.
Le Firewall par suivi de connexion ( statefull )
Ici, nous mettons en oeuvre le suivi des connexions. Par un procd que nous conserverons
obscur pour le moment, le firewall va savoir si une connexion est :
NEW.
C'est dire qu'elle est cre. Par exemple, un client envoie sa premire requte vers un
serveur web.
ESTABLISHED.
Cette connexion a dj t initie. Elle suit dans les faits une connexion NEW que l'on
a dj vu passer.
RELATED.
Ce peut tre une nouvelle connexion, mais elle prsente un rapport direct avec une
connexion dj connue.
INVALID.
Un paquet qui a une sale tte, un paquet qui n'a rien faire l dedans, un paquet qui
sent l'ail.
L, a va devenir plus facile. Nous dirons en franais :
Toutes les connexions NEW qui viennent du rseau priv et qui vont sur le NET port
80 sont acceptes. Tous les clients du rseau priv peuvent interroger tous les serveurs
web du Net.
Toutes les connexions RELATED et ESTABLISHED qui viennent du Net port 80
sont autorises rentrer. Les serveurs peuvent rpondre.
Toutes les connexions RELATED et ESTABLISHED qui sortent du rseau priv vers
le Net sont autorises sortir. Les connexions peuvent se poursuivre, mme si elles
ouvrent de nouvelles connexions.
Toutes les connexions INVALID, d'o qu'elles viennent sont jetes la poubelle, on
n'aime pas l'odeur de l'ail.
Certains suivis de connexions ne sont pas simples faire et ncessitent des algorithmes
spcifiques, comme principalement le FTP.
Netfilter, avec son interface IPTables, dans les noyaux 2.4 de Linux savent trs bien travailler
de cette manire.
Les FireWalls applicatifs
Ici, on ne travaille plus au niveau du transport, mais au niveau de l'application, c'est dire au
niveau du protocole applicatif, comme HTTP, FTP ou autre. Un tel FireWall est en ralit
un serveur Proxy , c'est dire que le client s'adressera toujours lui, quelle que soit la
cible finale et n'acceptera de rponse que de sa part. Le Proxy reformule la requte pour son
propre compte vers le Net et, lorsqu'il reoit la rponse, la transmet au client comme si c'tait
lui qui rpondait directement.
En gros, a veut dire que le proxy est le seul accder au Net et qu'il est donc le seul risquer
de subir des attaques.
Cette mthode, si elle est simple mettre en oeuvre avec des clients HTTP ou FTP, qui sont
pratiquement tous prvus pour fonctionner dans ce cadre, peut poser des problmes avec des
applications qui ne le prvoient pas, comme c'est souvent le cas pour les clients de
messagerie.
Avantages et inconvnients
Reprenons l'envers.
Le Proxy
Ca pourrait apparatre comme la solution ultime, puisqu'il y a effectivement une barrire entre
le Net et la zone protge. Sauf que ces logiciels sont complexes et qu'ils peuvent contenir des
bugs que les pirates, tt ou tard, dcouvriront et exploiteront pour passer quand mme. De
plus, ils consomment pas mal de ressources et ncessitent des machines relativement
muscles.
Le FireWall StateFull
C'est pas mal, c'est souple paramtrer, a consomme peu de ressources, mais le suivi de
connexion est dlicat et, s'il y a un bug dans le systme, a ouvre des portes aux pirates. Les
premires versions de Netfilter en ont prsent beaucoup, surtout sur les protocoles dlicats
comme FTP.
Le Firewall StateLess
C'est trs simple, a consomme trs peu de ressources, il n'y a quasiment aucun risque de bug,
mais a ouvre trop de portes pour qu'un protocole applicatif ne risque pas de rester plant un
moment ou un autre.
Vous le voyez, il n'y a pas de solution miracle.
Et avec, a va mieux ?
Oui, bien sr, un firewall est indispensable. Pour autant, se croire l'abri parce que son
firewall a pass les tests de scurit classiques relve de la plus pure utopie. Pourquoi ?
Il n'existe pas de firewall inviolable, tout simplement. Pour plusieurs raisons :
Nous l'avons vu, les systmes puissants comme un firewall statefull ou un proxy
renferment des logiciels complexes qui ne peuvent pas tre totalement exempts de
failles. Il suffit au pirate d'en trouver une.
Les rgles de filtrage places sur ces outils sont obligatoirement un compromis entre la
scurit maximale et une certaine libert d'usage de l'Internet. L o il y a
compromission, il y a aussi faiblesse.
Les proxys travaillent sur les couches hautes, on peut les percer en passant sur les
couches basses.
Les filtres de paquets travaillent sur les couches basses, on peut les percer en
exploitant les failles des couches hautes.
Nous pouvons multiplier les barrages en les diversifiant, mais a ne procure pas une
protection absolument certaine. Pour obtenir une scurit maximale, (mais jamais absolue), il
faut travailler tous les niveaux :
Configurer ses serveurs avec le plus grand soin, en liminant tous les risques connus
leur niveau,
s'assurer que l'on n'a pas dans un coin un serveur qui tourne sans qu'on le sache. Ne
riez pas, le cas est assez frquent,
protger le tout avec un systme de filtrage efficace, bien adapt ses besoins,
surveiller avec le plus grand soin tout se qu'il se passe, aussi bien sur les serveurs que
sur les filtres, pour dtecter le plus rapidement possible toute activit anormale,
avoir perptuellement l'esprit qu'il y a forcment quelque part une faille que l'on ne
connat pas, et qu'un pirate peut trouver.
Vous le voyez, la scurit informatique oblige devenir compltement paranoaque. Mais
rflchissez bien Dans la vie, c'est pareil. Si vous voulez vivre avec un risque zro, vous
aurez les mmes problmes :)
Sueurs froides
Votre rseau est bien l'abri, derrire tous les murs pare-feu de la cration, avec une
surveillance de tous les instants sur les points d'accs au Net. Mais dans votre rseau,
il y a des utilisateurs qui se servent de portables. Lorsqu'ils rentrent chez eux, ils
connectent leur portable au Net sans aucune scurit et se gavent de virus, de
backdoors et autres spywares. Le lendemain, ils reviennent se connecter sur votre beau
rseau tout propre.
Un proxy travaille dans les couches hautes. On peut le casser en passant par les
couches basses ou en exploitant des failles logicielles. Donc, on ajoute aussi un filtre
de paquets. Mais le filtrage de paquets peut plus ou moins tre contourn, si l'on arrive
installer dessus une autre pile IP, parallle celle qui est utilise par le filtre. Une
sorte de super backdoor qui permettra de construire un routeur pirate ct du votre,
trs troitement surveill, et qui ne s'apercevra de rien.
Client Windows
Et les bons vieux Windows...
Revenons une situation plus commune, celle de l'internaute priv, qui ne dispose pas d'un
rseau de type entreprise chez lui. Tout au plus,
Il faut distinguer deux cas qui n'ont pas beaucoup de rapports :
Ceux qui utilisent les services d'un petit routeur NAT du commerce, on en trouve
maintenant moins de 100 . En gnral, ce type d'quipement propose dj pas mal
de fonctions de filtrage de paquets,
ceux qui utilisent une machine connecte directement au Net et qui peut
ventuellement partager la connexion avec un ou deux autres postes. Les dernires
versions de Windows (Me, 2000 et XP) proposent un moyen simple de le faire, Mac
OS X galement. Dans ces cas, il est clair que la machine expose devra disposer d'un
minimum de protections. Si Mac OS X propose un filtre de paquets performant, hrit
de ses origines BSD, les diverses version Windows ne sont pas trs performantes dans
ce domaine, bien qu'au moins 2000 et XP proposent un filtrage de paquets.
Windows NT, 2000, XP etc.
N'en dplaise aux dtracteurs de ces produits, ce ne sont pas forcment des passoires, la
condition tout de mme de faire attention plusieurs choses. Suivant la version, la
configuration par dfaut peut tre plus ou moins dangereuse. Microsoft a tout de mme fait
quelques progrs sur ce point, au fil des Service-Packs et des versions.
Ne laissez pas le compte d'administrateur par dfaut avec un mot de passe vide
(C'est vident, mais combien l'ont fait?) ;
Windows 2000 et Windows XP permettent de changer le nom de l'administrateur.
Dans leur version Franaise, l'administrateur s'appelle Administrateur (comme root
sur Linux). Changez ce nom ;
adoptez pour ce compte (et ceux d'ventuels autres administrateurs) un mot de passe
fort :
o 8 caractres minimum; 14, c'est mieux ;
o utilisez une combinaison de caractres sans signification (pour viter les
recherches par dictionnaire), avec des majuscules, des minuscules, des
caractres de ponctuation et mme ventuellement des caractres non
imprimables ;
dsactivez NetBIOS sur TCP/IP sur l'interface connecte au Net ;
n'installez pas de serveur inutile. IIS est dangereux, l'agent SMTP de l'option pack
aussi, le DNS galement.
proscrivez dans la mesure du possible tout logiciel de prise de contrle distance ;
bloquez les ports 135 139 aussi bien en UDP qu'en TCP, a peut se faire sur
NT, 2000 et XP sans logiciel supplmentaire, dans la configuration de la pile IP ou
avec le firewall fourni sur XP depuis le SP1 ;
installez les derniers Service Packs ;
vrifiez rgulirement chez Microsoft l'apparition de nouveaux patchs de scurit ;
vrifiez frquemment que vous n'avez pas install un backorifice ou un netbus
par inadvertance. (Ctrl+Alt+Suppr permet de visualiser les tches et processus en
cours. C'est pas toujours trs comprhensible, mais on y gagne beaucoup analyser la
liste des processus en cours) ;
installez un antivirus srieux, mme s'il ne faut pas en attendre de miracles.
Enfin, prenez l'habitude de travailler systmatiquement avec un compte d'utilisateur
sans pouvoirs d'administration. Cette pratique, naturelle sur les systmes Unix ne l'est
malheureusement pas sous Windows, au point que vous rencontrerez peut-tre des
problmes avec certaines applications, mme prtendues professionnelles .
Avec ces prcautions, vous devriez dj tre relativement l'abri, mais tout ceci ne vous
vitera pas forcment l'installation malveillante d'un programme malicieux.
Les logiciels de surveillance
Il en existe un grand nombre, plus ou moins efficaces, plus ou moins simples configurer,
plus ou moins gratuits.
Actuellement, les anti-virus sont en ralit des logiciels plus larges, capables de faire plus
que de la simple dtection de virus. Ils sont souvent grands consommateurs de ressources,
mais il s'agit d'un mal ncessaire sur certains systmes d'exploitation, plus particulirement
cibls par les malveillants.
Conclusions
Je tiens m'excuser auprs des possesseurs de Mac. (Apple), je n'ai aucune comptence dans
ce domaine. Mais des outils analogues doivent exister.
La protection d'une machine connecte l'Internet sous Windows (comme sous n'importe
quel OS d'ailleurs) passe d'abord par des principes de prudence et de scurit de bon sens,
encore faut-il tre suffisamment averti des problmes potentiels et des rgles lmentaires
d'hygine en matire de rseaux et j'espre que cet expos vous aura aid y voir un peu plus
clair dans ce domaine.
En plus de cela, l'usage d'un outil de surveillance reste tout de mme conseill, mais afin de
ne pas sombrer dans la paranoa, il convient de se renseigner sur les risques, les mcanismes
des rseaux pour pouvoir faire le tri dans les alertes, entre celles qui sont rellement
dangereuses et celles qui ne le sont pas.
NetFilter et IPtables
Prambule
On peut parler l'infini des avantages compars de Linux face aux systmes Microsoft et
rciproquement, il semble mme possible de russir dclencher quelques guerres de religion
ce sujet, il y a tout de mme un domaine o la discussion est impossible, sauf peut tre avec
une mauvaise foi extrme, c'est celui de la gestion des rseaux. Mme si Windows 2000 est en
trs net progrs par rapport Windows NT4 (nous parlons ici des versions server ), Les
noyaux Linux 2.6.x avec IPTables et IPRoute2 disposent, mon sens, d'une trs confortable
avance.
Ces versions 2.6 du noyau Linux sont particulirement riches dans ce domaine et il devient
sans doute possible de raliser avec ce systme des passerelles et des firewalls aussi
performants sinon plus, que certains matriels spcialiss.
Iproute2 constitue une nouvelle approche de la gestion des routes inter rseaux. Iproute2
mriterait lui seul un chapitre complet. Nous ne ferons ici que l'voquer.
Netfilter permet de faire beaucoup plus de choses en matire de filtrage de paquets et de
translation d'adresses que ses prdcesseurs, ce qui fait de Linux 2.6 un outil de choix pour la
ralisation de passerelles entre rseaux privs et l'Internet.
Ce chapitre a pour but de prsenter succinctement l'architecture et les principales
fonctionnalits de Netfilter, dans le cadre d'un rseau domestique connect au Net par une
ligne haut dbit type cble ou ADSL . Si vous voulez absolument tout savoir sur Netfilter, il
vous faudra chercher galement ailleurs. La premire source consulter (de toutes manires,
je n'ai rien invent, je me suis content d'essayer de rendre plus digestes les documents
initiaux), c'est:
Rusty's Remarkably Unreliable Guides
Ce sont les documentations officielles. Vous y trouverez mme des documents traduits
en franais.
Architecture
Avant propos
Avertissement important ceux qui matrisent IPchains
NetFilter avec IPtables n'a pas du tout la mme architecture, le fonctionnement est diffrent,
mme si la syntaxe d'IPtables peut paratre proche de celle d'IPchains.
En particulier, les chanes INPUT et OUTPUT ne contrlent pas tout ce qui entre et sort de la
passerelle, routage compris, mais uniquement ce qui entre en direction de la passerelle elle
mme et sort de la passerelle elle mme. Entendez par l que tout le trafic entre le rseau priv
masqu par le NAT et l'Internet ne sera aucunement influenc par ces deux chanes. Nous
verrons en dtail plus loin pourquoi et comment.
Finalement, le meilleur conseil donner aux utilisateurs d'IPchains, c'est d'oublier purement
et simplement tout ce qu'ils savent sur le sujet
Avertissement aux utilisateurs exclusifs des interfaces graphiques
Avec les versions 2.2.x, nous avions l'excellent outil gfcc qui permettait de faire peu prs
tout ce qu'il tait possible de faire avec IPchains. Malheureusement, avec IPtables, je n'ai pas
encore trouv d'outil quivalent l'heure o j'cris ces lignes. Essayez de voir avec knetfilter,
mais ce n'est pas du tout la mme chose.
Position du problme
Comme d'habitude sur ce site, l'expos s'appuie sur une passerelle Linux mettant en relation
un rseau priv avec le Net, au moyen d'une liaison haut dbit et permanente de type cble ou
ADSL. Si vous ne savez pas faire, voyez le chapitre Partage de connexion .
Topologie de la machine Linux
La machine Linux dispose de deux
interfaces Ethernet. Ici:
Eth0 sur le rseau local (priv)
Eth1 sur l'Internet via le modem cble du fournisseur d'accs. Cette interface, le plus
souvent, sert de support PPPoE.
Il faut bien comprendre qu' priori, il peut entrer et sortir des donnes de chaque interface.
Il peut entrer et sortir des donnes par Eth0, parce qu'un client du rseau local tablit
une connexion avec un service install sur la passerelle, Samba par exemple, pour le
partage de fichiers avec Windows.
Il peut entrer et sortir des donnes par Eth1 (ou la connexion ppp qui y est associe)
parce qu'un client situ sur le Net tablit une connexion avec un service install sur la
passerelle, une session ssh ou telnet par exemple (ssh, c'est mieux). Il peut se faire
aussi que cette connexion s'tablisse votre insu, parce qu'un pirate est en train de
prendre possession de votre machine (mais ceci est une autre histoire, dveloppe au
chapitre de la scurit).
Il peut se faire galement qu'une connexion s'tablisse entre un poste du rseau priv
et un serveur situ sur le Net. Dans ce cas, les paquets entreront par une interface et
sortiront par l'autre.
En toute rigueur, il est galement possible qu'une connexion s'tablisse entre un client
situ sur le Net et un serveur situ sur votre rseau priv (si si, c'est possible aussi,
bien que dans le cadre d'un rseau domestique, ce ne soit pas ncessaire, ni mme
souhaitable). L aussi, les paquets qui entrent par une interface sortiront par l'autre.
Quel que soit le cas de figure vu plus haut, dans ce qui suit, nous ne ferons pas de sgrgation
sur l'interface par laquelle les paquets entrent ni l'interface par laquelle les paquets sortent.
Cette sgrgation interviendra ventuellement dans les rgles que nous crirons avec IPtables.
Netfilter dans la pile IP
En tout tat de cause, dans l'explication
qui suit, quelles que soient l'origine et la destination des paquets, ils vont entrer dans la pile de
protocoles IP par le mme point et en sortir par le mme autre point. Netfilter se prsente
comme une srie de 5 hooks (points d'accrochage), sur lesquels des modules de traitement
des paquets vont se greffer. Ces points sont:
NF_IP_PRE_ROUTING ;
NF_IP_LOCAL_IN ;
NF_IP_FORWARD ;
NF_IP_POSTROUTING ;
NF_IP_LOCAL_OUT.
La branche gauche reprsente le trajet des paquets qui entrent et qui sortent vers et depuis un
processus local (SMB, FTP, HTTP etc.) La branche de droite reprsente le trajet des paquets
qui traversent notre passerelle dans sa fonction de routeur.
Que l'on peut reprsenter autrement ainsi :

Attention toutefois, ces diagrammes sont faux, dans la mesure o ils sont largement
simplifis. Leur but est uniquement de montrer o Netfilter vient interagir avec la pile IP, en
aucun cas il ne reprsente l'architecture complte de la pile IP.
Ce que sait faire Netfilter
A travers ces cinq points d'insertion, Netfilter va tre capable :
D'effectuer des filtrages de paquets, principalement pour assurer des fonctions de
Firewall. On pourra par exemple interdire tous les paquets venant de l'Internet et
s'adressant au port 80 (HTTP) de passer. Notre serveur APACHE est un serveur
Intranet et ne doit pas tre accessible depuis l'extrieur.
D'effectuer des oprations de NAT (Network Address Translation) Ces fonctions sont
particulirement utiles lorsque l'on veut faire communiquer tout ou partie d'un rseau
priv, mont avec des adresses IP prives (192.168.x.x par exemple) avec l'Internet.
D'effectuer des oprations de marquage des paquets, pour leur appliquer un traitement
spcial. Ces fonctionnalits sont particulirement intressantes sur une passerelle de
rseau d'entreprise, un peu moins pour notre cas de rseau domestique.
Comment Netfilter sait le faire
Netfilter dispose d'une commande tout faire : IPtables. Cette commande va permettre, entre
autres, d'crire des chanes de rgles dans des tables. Il y a dans Netfilter trois tables qui
correspondent aux trois principales fonctions vues plus haut:
Les tables et leurs chanes
Il existe trois tables qui vont servir contenir des rgles de filtrage:

La table Filter
Cette table va contenir toutes les rgles qui permettront de filtrer les paquets. Cette table
contient trois chanes :
la chane INPUT.
Cette chane dcidera du sort des paquets entrant localement sur l'hte ;
la chane OUTPUT.
Ici, ce ne sont que les paquets mis par l'hte local qui seront filtrs ;
la chane FORWARD.
Enfin, les paquets qui traversent l'hte, suivant les routes implantes, seront filtrs ici.
La table NAT
Cette table permet d'effectuer toutes les translations d'adresses ncessaires.
La chane PREROUTING.
Permet de faire de la translation d'adresse de destination. Cette mthode est
intressante si l'on veut faire croire au monde extrieur, par exemple, qu'il y a un
serveur WEB sur le port 80 de la passerelle, alors que celui-ci est hberg par un hte
du rseau priv, sur le port 8080.
La chane POSTROUTING.
Elle permet de faire de la translation d'adresse de la source, comme du masquage
d'adresse, la mthode classique pour connecter un rseau priv comme client de
l'Internet, avec une seule adresse IP publique.
La chane OUTPUT.
Celle-ci va permettre de modifier la destination de paquets gnrs localement (par la
passerelle elle-mme).
La table MANGLE
Cette table permet le marquage des paquets entrants (PREROUTING) et gnrs localement
(OUTPUT). Le marquage de paquets va permettre un traitement spcifique des paquets
marqus dans les tables de routage avec IPROUTE 2. Ceci nous mnerait trop loin. Si vous
tes intress par cette question, voyez ce sujet le document: Linux 2.4 Advanced Routing
HOWTO.
Depuis la version 2.4.18 du noyau, d'autres tables ont t rajoutes sur tous les hooks. Nous
avons ainsi notre disposition les tables supplmentaires INPUT, POSTROUTING et
FORWARD
Les chanes
Les chanes sont des ensembles de rgles que nous allons crire dans chaque table. Ces
chanes vont permettre d'identifier des paquets qui correspondent certains critres.
Les cibles
Les cibles enfin sont des sortes d'aiguillage qui dirigeront les paquets satisfaisant aux critres .
Les cibles prconstruites sont :
ACCEPT
Les paquets qui satisfont aux critres sont accepts, ils continuent leur chemin dans la
pile,
DROP
Les paquets qui satisfont aux critres sont rejets, on les oublie, on n'envoie mme pas
de message ICMP . Un trou noir, quoi.
LOG
C'est une cible particulire qui permet de tracer au moyen de syslog les paquets qui
satisfont aux critres.
Suivant les contextes, d'autres cibles deviennent accessibles, comme REJECT (similaire
DROP, mais avec envoi d'un message d'erreur ICMP la source du paquet rejet), RETURN,
REDIRECT, SNAT, DNAT, MASQUERADE
En franais, nous pourrons faire des choses de ce genre :
Par dfaut, tous les paquets qui entrent sont rejets (DROP)
Les paquets qui entrent par le port 80 sur l'interface eth0 sont accepts
Les paquets qui sortent par le port 80 sur l'interface eth0 sont accepts
etc.
Nous verrons cela plus en dtail dans les divers exemples.
La commande IPtables
IPtables est en quelques sortes l'interface utilisateur de Netfilter. Dans sa partie visible, tout
ceci ressemble au bonnes vieilles IPchains (noyaux 2.2), mais ici, ce n'est qu'une interface de
commande de Netfilter. La syntaxe est plus complte et plus rigoureuse.
Conntrack
Le suivi de connexion
Le suivi de connexion est un concept essentiel dans Netfilter. C'est une sorte d'intelligence
artificielle qui permet d'tablir des liens de cause effet entre les paquets qui passent dans la
pile. Il faut, un moment donn, dire quelques mots propos de ce suivi de connexion.
Comme c'est une notion qui va intervenir aussi bien dans le filtrage que dans la traduction
d'adresses, autant en parler tout de suite.
Exprience prliminaire
Le principe du suivi de connexion permet de raliser un firewall statefull , c'est dire qu'il
va ragir intelligemment sur une connexion donne, suivant son tat. Voyez ventuellement
ce propos le chapitre sur la scurit. Comme ce n'est pas trs simple d'expliquer a, nous
allons observer un exemple sur le terrain. Nous allons tablir une connexion TCP partir du
protocole HTTP :
No. Time Source Destination Protocol Info
10 10.181832 192.168.0.10 212.27.35.1 TCP 4252 > http [SYN]
11 10.204707 212.27.35.1 192.168.0.10 TCP http > 4252 [SYN, ACK]
12 10.204848 192.168.0.10 212.27.35.1 TCP 4252 > http [ACK]
13 10.205333 192.168.0.10 212.27.35.1 HTTP GET / HTTP/1.1
L'tablissement d'une connexion TCP suit un protocole strict :
Une requte de synchronisation [SYN] de la part de l'initiateur du dialogue (le client),
une rponse d'accus rception de la synchronisation [SYN,ACK] de la part du
serveur,
un accus rception du client [ACK]
Observons galement les sockets.
Trame n10:
Le client [192.168.0.10] s'adresse au serveur [212.27.35.1] sur le port http (80). Il
attend une rponse sur le port 4252. C'est un numro pris plus ou moins au hasard. A
priori, personne ne peut le deviner l'avance.
Trame n11:
Le serveur, bien lev, rpond au client sur le port demand (4252)
La mme chose, mais plus dtaille, ce qui donne l'occasion de voir l'ensemble des flags
exploitables au niveau TCP :
Frame 10 (62 bytes on wire, 62 bytes captured)
...
Transmission Control Protocol
Source port: 4252 (4252)
Destination port: http (80)
Sequence number: 3290220049
Header length: 28 bytes
Flags: 0x0002 (SYN)
0... .... = Congestion Window Reduced (CWR): Not set
.0.. .... = ECN-Echo: Not set
..0. .... = Urgent: Not set
...0 .... = Acknowledgment: Not set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..1. = Syn: Set
.... ...0 = Fin: Not set
...

Frame 11 (62 bytes on wire, 62 bytes captured)
...
Transmission Control Protocol
Source port: http (80)
Destination port: 4252 (4252)
Sequence number: 1602605975
Acknowledgement number: 3290220050
Header length: 28 bytes
Flags: 0x0012 (SYN, ACK)
0... .... = Congestion Window Reduced (CWR): Not set
.0.. .... = ECN-Echo: Not set
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..1. = Syn: Set
.... ...0 = Fin: Not set
...

Frame 12 (54 bytes on wire, 54 bytes captured)
...
Transmission Control Protocol
Source port: 4252 (4252)
Destination port: http (80)
Sequence number: 3290220050
Acknowledgement number: 1602605976
Header length: 20 bytes
Flags: 0x0010 (ACK)
0... .... = Congestion Window Reduced (CWR): Not set
.0.. .... = ECN-Echo: Not set
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 16944
Checksum: 0xe79b (correct)
De ces premires observations, nous pouvons dduire quelques choses intressantes. En
considrant des changes TCP entre deux sockets toujours les mmes :
Lorsqu'un paquet TCP contient le flag SYN, c'est que c'est une nouvelle connexion qui
commence.
lorsqu'un paquet TCP contient les flags SYN et ACK, c'est que la connexion est
accepte, elle est donc tablie,
lorsqu'un paquet ne contient que le flag ACK, c'est que la connexion se continue.
Mais voyons un peu plus loin
No. Time Source Destination Protocol Info
29 10.427697 192.168.0.10 212.27.35.1 TCP 4252 > http [ACK]
30 10.731147 192.168.0.10 212.27.35.1 TCP span class="bhly">4253 >
http span class="bhly">[SYN]
31 10.752981 212.27.35.1 192.168.0.10 TCP http > 4253 [SYN, ACK]
32 10.753165 192.168.0.10 212.27.35.1 TCP 4253 > http [ACK]
33 10.753707 192.168.0.10 212.27.35.1 HTTP GET /images/titre.gif
HTTP/1.1
34 10.780941 192.168.0.10 212.27.35.1 TCP 4252 > http [FIN, ACK]
Ce que nous observons ici, c'est l'tablissement d'une nouvelle connexion TCP entre les
mmes protagonistes. Bien entendu pour viter les mlanges, le port du client n'est plus le
mme. C'est cette fois-ci 4253.
Autrement dit, le mme client (192.168.0.10) ouvre une nouvelle connexion TCP sur le mme
serveur (212.27.35.1), toujours sur le port 80, mais attend les rponses sur un nouveau port,
alors que la connexion prcdente existe toujours.
Le client met fin la prcdente (trame 34) avec le flag [FIN] une fois seulement que la
seconde connexion est tablie.
Dans ces conditions, il est pertinent de penser que cette nouvelle connexion est en relation
directe avec la premire. Nous dirons que c'est une connexion en relation avec la premire.
Premires dductions
Si l'on met en place un systme capable de mmoriser ce qu'il se passe sur la couche TCP,
alors il va devenir possible de savoir si une connexion est dans l'un de ces tats :
NEW
nouvelle connexion (elle contient le flag SYN),
ESTABLISHED
connexion dj tablie, elle ne devrait pas contenir de SYN ni de FIN,
RELATED
la connexion prsente une relation directe avec une connexion dj tablie,
INVALID
la connexion n'est pas conforme, contient un jeu de flags anormal, n'est pas classable
dans l'une des trois catgories prcdentes.
Ceci est intressant, parce que l'on pourra interdire priori toute connexion NEW d'entrer
dans notre installation, il n'y a aucune raison qu'il en rentre si nous n'avons pas de serveur.
Eventuellement, nous pourrons par exemple crer des exceptions pour les port ssh, si nous
souhaitons accder notre machine depuis le Net.
En revanche, toute connexion ESTABLISHED ou RELATED devra pouvoir entrer depuis le
Net.
Dans l'autre sens, du LAN vers le Net, les paquets NEW doivent pouvoir passer, de mme,
bien entendu que les ESTABLISHED et les RELATED.
Les paquets INVALID pourront ventuellement tre tracs dans les logs.
Et pour l'UDP ?
L, c'est plus dlicat puisqu'il n'y a justement pas de connexion. Il sera donc impossible de
dfinir de faon prcise l'tat d'un change UDP. Ce que l'on pourra faire, c'est mettre en
place un timer pour dcider de l'tat d'un paquet UDP. Nous pouvons prendre l'exemple
simple d'une requte DNS depuis notre rseau priv.
Le premier paquet UDP sort de notre rseau, sur un port connu et identifi (53) vers un
serveur DNS. Nous pouvons dcider de le laisser passer et nous le qualifions de NEW. Il
dclenche un timer,
si avant expiration du timer , nous recevons un paquet UDP dudit serveur DNS,
nous considrerons que c'est un paquet ESTABLISHED.
Dans la pratique
Un module principal de suivi de connexion est charg dynamiquement en cas de besoin, il
s'agit du module ip_conntrack. Cependant tout n'est pas toujours si simple et ce module peut
montrer ses limites sur des protocoles particulirement complexes, comme par exemple FTP.
ip_conntrack ne pourra assurer qu'une connexion FTP de type passive. Si l'on souhaite assurer
le suivi de connexion sur du FTP en mode actif, il faudra avoir recours au module spcialis
nf_conntrack_ftp. Mais celui-ci ne se chargera pas dynamiquement, Nous aurons le
charger nous-mme. Nous aurons aussi besoin dans ce cas de nf_nat_ftp; si notre passerelle
fait du NAT.
Nous verrons sur le terrain le travail de conntrack dans divers exemples.
Filter
La table de filtrage
C'est la table qui va permettre de filtrer tous les paquets qui entrent et sortent de notre
machine. Il n'y a ici aucune modification de ces paquets, ils seront compars des critres
dfinis dans la table Filter. Dans notre cas, il peut se passer deux choses diffrentes:
Un paquet qui entre est destin un processus de l'hte (serveur HTTP, FTP).
Un paquet qui entre est destin un autre rseau, c'est alors une fonction de routage.
Un paquet entre dans notre machine. Peu
importe par quelle interface il entre, il peut venir aussi bien du rseau local que de l'Internet. Il
passe d'abord par la fonction de dcision de routage. C'est elle qui va dterminer si le paquet
est destin un processus local de l'hte ou un hte sur un autre rseau.
Si le paquet est destin l'hte local:
o Il traverse la chane INPUT ;
o S'il n'est pas rejet, il est transmis au processus impliqu. Ce processus va donc
le traiter et ventuellement mettre un nouveau paquet en rponse ;
o Ce nouveau paquet traverse la chane OUTPUT ;
o S'il n'est pas rejet, il va vers la sortie.
Si le paquet est destin un hte d'un autre rseau:
o Il traverse la chane FORWARD ;
o S'il n'est pas rejet, il poursuit alors sa route.
Une autre faon de reprsenter graphiquement tout a serait la suivante :

La chane INPUT sera raccroche au hook NF_IP_LOCAL_IN
la chane OUTPUT au hook NF_IP_LOCAL_OUT
la chane FORWARD NF_IP_FORWARD.
Rappel d'avertissement important :
Pour ceux qui ont travaill avec IPchains, notez que la dmarche est ici diffrente et a va
peut-tre vous poser pas mal de problmes
Avec IPChains Avec IPtables
TOUS les paquets entrants passaient par les
chanes INPUT qu'ils soient destins un process
local o au routage TOUS les paquets sortants
passaient par la chane OUTPUT, qu'ils soient
issus d'un process local ou destins au routage.
SEULS les paquets destins un process
local traversent la chane INPUT SEULS
les paquets issus d'un process local
traversent la chane OUTPUT SEULS les
paquets destins au routage traversent la
chane FORWARD
L'illustration ci-dessus le montre bien, et ceci va conduire d'normes erreurs, si l'on se
contente de traduire les anciennes rgles IPChains en rgles IPTables, sans prcautions
particulires.
Vous ne me croyez pas ?
Alors, avant d'aller plus loin, faites la manip suivante. Sur votre passerelle Linux 2.6.x :
Initialisation de Netfilter
Tapez successivement les commandes suivantes pour initialiser votre systme:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
De cette manire, vous avez toutes vos chanes vides, avec par dfaut la rgle ACCEPT
iptables -L
L'affichage va vous assurer que les trois chanes INPUT, FORWARD et OUTPUT sont vides
et ont bien la rgle par dfaut ACCEPT
iptables -t nat -L
L'affichage va vous assurer que les trois chanes PREROUTING, POSTROUTING et
OUTPUT sont vides et ont bien la rgle par dfaut ACCEPT.
Mise en place de Masquerade
Tapez maintenant les commandes suivantes:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
O ppp0 reprsente l'interface connecte l'Internet. Remplacez ventuellement, si votre
configuration est diffrente. Ceci signifie en gros: Tout ce qui sort du routage (-A
POSTROUTING) et qui doit passer vers l'Internet (-o ppp0) doit subir un masquage d'adresse
(-j MASQUERADE)
echo 1 > /proc/sys/net/ipv4/ip_forward
Ceci pour tre certain que votre noyau autorise le routage. Vous n'en avez pas besoin, si votre
machine est configure par dfaut pour assurer le routage.
Voil. Votre passerelle entre le rseau priv et l'Internet doit tre oprationnelle.
Vrifiez que, depuis votre passerelle Linux, vous avez bien accs au Net.
Vrifiez que, depuis un poste de votre rseau priv, vous avez bien accs au Net.
Attention, dans cet tat, vous n'avez rigoureusement aucune dfense contre d'ventuelles
intrusions ! Passez rapidement la suite.
Et maintenant, la manip dcisive...
Pour bien montrer que les chanes INPUT et OUTPUT n'interviennent pas dans le routage,
nous allons tout simplement leur mettre DROP comme rgle par dfaut. Attention, il faut que
vos clients utilisent un DNS situ ailleurs que sur votre passerelle Linux, sinon, a ne
fonctionnera pas cause du DNS.
Tapez les commandes suivantes:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -L
(pour vrifier que INPUT et OUTPUT droppent bien tout ce qui passe).
Vrifiez que, depuis votre passerelle Linux, vous n'avez plus accs au Net (ni votre
rseau priv d'ailleurs).
Vrifiez que, depuis un poste de votre rseau priv, vous avez toujours l'accs au Net.
Convaincu ? INPUT et OUTPUT n'interviennent absolument pas dans le routage. Toutes
les rgles que vous pourrez y mettre ne concerneront que la scurit de la passerelle elle-
mme, mais pas de votre rseau priv.
La table de translation d'adresses
Remarques importantes
La traduction d'adresse (NAT comme Network Address Translation) est prendre ici au sens
le plus large, puisque cette table permet non seulement de faire de la translation stricte
d'adresses, mais galement de la translation de ports et un mlange des deux, dont le
masquage d'adresse est une forme particulire.
Mais qu'est-ce que c'est exactement ?
Dans un datagramme, en plus des donnes, on trouve galement quelques informations
concernant le protocole utilis et des identificateurs de l'metteur et du destinataire. Ce sont
ces identificateurs qui nous intressent:
L'adresse IP du destinataire.
Le port du service utilis sur le destinataire.
Ces informations constituent une socket , elles sont indispensables pour arriver joindre le
bon service sur le bon serveur, par exemple le service HTTP du serveur grenouille.com.
L'adresse IP de l'metteur.
Le port de rponse.
Ces informations constituent une autre socket , elles sont indispensables pour que
l'metteur d'un paquet puisse esprer recevoir une rponse.
Avec les fonctions NAT de Netfilter, lorsqu'un paquet transite par notre passerelle, nous
allons pouvoir bricoler ces sockets absolument comme on le dsire. Par exemple, nous
pourrons changer l'adresse de l'metteur ou le port de l'metteur ou les deux. Nous pouvons
aussi changer l'adresse du destinataire, ou le port du destinataire, ou les deux.
Mais quoi a sert ?
Ca sert une quasi infinit de choses. Parmi les plus intressantes, citons:
Le masquage d'adresse
C'est une fonction fondamentale lorsque l'on souhaite connecter un rseau priv l'Internet
lorsque l'on ne dispose que d'une seule IP valide sur le Net, mme si celle-ci est dynamique,
ce qui est le cas qui nous intresse le plus. Les clients sont sur le rseau priv et les serveurs
sont sur le Net. C'est une forme particulire de SNAT (Source NAT)
C'est ce que sont capables de faire tous les routeurs SOHO (Small Office, Home Office) qui
permettent de relier un petit rseau local l'Internet, lorsque l'on ne dispose que d'un accs
RTC, NUMERIS, Cble, ADSL Un simple (trs) vieux PC (un 486 suffit) quip d'un
Linux 2.6.x permet de le faire aussi bien sinon mieux.
Le NAT de destination
Ici, c'est pour rsoudre les problmes qui apparaissent dans l'autre sens. Les clients sont sur le
Net et les serveurs sont sur le rseau priv.
Imaginons que nous n'ayons qu'une seule IP valide sur le Net et que nous voulions tout de
mme offrir des services tels que HTTP, FTP, SMTP, POP et peut-tre d'autres encore.
Comment faire ? La rponse triviale consiste dire: J'ai droit une seule IP, donc je place
tous ces serveurs sur la mme machine, celle qui a la seule IP laquelle j'ai droit.
Oui, mais la dmarche est simpliste:
Comment assurer un minimum de scurit sur une machine ouverte de tous les cts ?
Comment faire pour assurer une disponibilit suffisante chaque service dans les
montes en charge ?
Cette solution ne parait finalement pas trs acceptable, mais comment faire autrement ? Tout
simplement avec NAT. La machine frontale sera un simple routeur NAT. Ct Internet, elle
possde la seule IP valide disponible, elle va faire croire que tous les services sont dessus,
mais en ralit, lorsqu'elle va recevoir un paquet dont le socket de destination est
62.161.96.47:80, elle va remplacer a vite fait par 192.168.0.1:80 et router le paquet vers le
serveur HTTP. Lorsque la rponse du serveur va lui parvenir, elle remplacera le socket de
l'metteur (192.168.0.1:80) par 62.161.96.47:80 et enverra a sur le Net. Tout le monde n'y
verra que du feu.
Bien entendu, le routeur NAT est capable de faire a pour chacun des autres serveurs:
Ce qui lui arrivera sur les ports 20 et 21 sera redirig sur le serveur FTP (en ralit, le
cas du FTP est bien plus difficile rsoudre que a. Il faudra d'abord lire le chapitre
sur FTP).
Ce qui lui arrivera sur le port 25 sera redirig sur le serveur SMTP/POP3 service
SMTP
Ce qui lui arrivera sur le port 110 sera redirig sur le serveur SMTP/POP3 service
POP3
Le cas du proxy transparent
Bien qu' priori, cette possibilit soit sans intrt sur un rseau domestique, je prfre en
parler parce que ce sujet peut revtir une certaine gravit quant aux atteintes aux liberts
individuelles.
Tout le monde sait ce qu'est un proxy (serveur mandataire, en franais) ? C'est un serveur
auquel on s'adresse pour qu'il nous fournisse des informations situes sur un autre serveur, sur
les protocoles HTTP et FTP essentiellement.. Le principal avantage d'un proxy est qu'il garde
en mmoire dans un cache toutes les informations qu'il est dj all chercher. Si, sur un rseau
priv, 10 personnes cherchent la mme information, elle ne sera tlcharge qu'une fois sur le
Net. L'avantage vident est l'optimisation de la bande passante sur le lien Internet, lorsque le
rseau priv est un peu consquent. L'autre avantage, c'est que l'on peut raliser un firewall
applicatif pour le protocole HTTP. Dans ce cas, on n'utilisera plus seulement un filtrage de
paquets, mais galement un filtrage sur le protocole lui-mme, ce qui permet, par exemple, de
faire du contrle parental ou du contrle de trafic web tout court.
Face cet avantage, il y a pas mal d'inconvnients, dus tous les effets pervers des
fonctionnalits que l'on peut ajouter un proxy. Parmi les inconvnients les plus graves:
La dure de vie du cache peut tre mal paramtre, la vrification de validit du
contenu galement et le proxy peut fournir des informations qui ne sont plus jour.
Les proxys ont souvent des fonctions de restriction d'accs qui peuvent aboutir un
rgime franchement totalitaire. (Contrle parental chez AOL, par exemple, mais ce
n'est pas forcment vous qui choisissez les filtrages).
Les fonctions de traage ne manquent pas non plus, ce qui permet d'espionner de
faon trs efficace ce que les utilisateurs de votre rseau font sur le Net.
Normalement, le navigateur Internet doit tre paramtr pour utiliser un serveur proxy
(outils/Options Internet/Connexions/Paramtres LAN dans Internet Explorer). Si l'installation
est faite proprement, l'utilisateur devrait pouvoir choisir d'utiliser le proxy ou non. Souvent
cependant, l'administrateur du rseau va bloquer le passage direct sur le port 80, obligeant les
utilisateurs passer par le proxy. L encore, au moins, les utilisateurs sont avertis.
Le proxy transparent est beaucoup plus pernicieux, parce qu'il ne ncessite aucun paramtrage
du navigateur et l'utilisateur ne sait pas qu'il passe par un proxy.
Le principe est simple, il suffit de rediriger tous les paquets dont le port de destination est 80
vers le proxy transparent, qui peut tre plac sur la passerelle elle mme. Ceux qui disposent
d'une passerelle Linux peuvent assez facilement monter la manip en installant le proxy
SQUID (configur convenablement pour faire un proxy transparent) et en utilisant iptables
pour faire de la redirection sur le service squid local.
Si vous voulez plus de dtails sur ces pratiques qui flirtent avec le douteux, visitez |e chapitre
consacr HTTP.
Ce ne sont pas les seules manipulations possibles, mais ce sont celles qui paraissent les plus
souvent utilises.
Et comment a marche ?
La table NAT est organise comme ci-contre:
Comme son nom l'indique, la chane PREROUTING va bricoler les sockets avant
les dcisions de routage. Nous nous en servirons pour faire du DNAT (Destination
NAT), autrement dit, pour modifier la socket du destinataire. ;
la chane POSTROUTING intervient la sortie du routeur. Elle servira faire du
SNAT (Source NAT) dont par exemple, le masquage d'adresse ;
la chane OUTPUT, quant- elle, permet de modifier le socket de destination d'un
paquet issu d'un processus local. L'utilit de cette chane n'est pas vidente, dans la
mesure o, normalement, les paquets sortant d'un processus local devraient aussi
passer par POSTROUTING. La seule possibilit supplmentaire est de pouvoir
rediriger les paquets qui sortent d'un processus local destination d'une cible
extrieure, vers un autre processus local (127.0.0.1). |
L encore, nous pouvons l'illustrer de faon diffrente :

Les possibilits offertes par le NAT sont quasiment infinies. Nous avons vu les plus
frquentes :
Masquage d'adresse, pour permettre tout un rseau priv d'accder au Net lorsque
l'on ne dispose que d'une seule adresse IP valide sur le Net,
redirection d'un service serveur adress sur la passerelle vers un serveur situ dans le
rseau priv, a peut tre utile pour les joueurs en rseau, mais aussi pour des
applications plus professionnelles.
Pour que tout a fonctionne correctement, le systme s'appuie sur le suivi de connexion. Nous
pouvons donc nous attendre trouver des modules spcialiss pour certains protocoles, dont
le FTP, toujours lui. Ainsi, le module nf_nat_ftp sera ncessaire si vous voulez travailler
proprement en FTP.
Et le reste...
Ce n'est pas tout...
Netfilter permet encore d'autres choses, qui sortent plus ou moins du cadre de cet expos
(peut-tre un jour ?).
Mangle
Nous n'avons pas parl de la table Mangle. Cette table permet d'effectuer un marquage des
paquets.

Nous pouvions, avec les premires versions de Netfilter, marquer les paquets en
PREROUTING ou en OUTPUT pour les sorties d'un processus local (en rouge sur
l'illustration). Notez que depuis la version 2.4.18 du noyau, le systme a t tendu tous les
hooks (en bleu sur l'illustration).
L'intrt de ce marquage, qui n'est visible que dans la pile de la machine, est de pouvoir tre
relu par d'autres fonctions comme iproute ou la gestion de la qualit de service (QoS).
Ainsi, nous pouvons disposer de toute la puissance de Netfilter pour la slection de divers
types de paquets, et utiliser ensuite ce marquage pour le routage ou les priorits de passage.
Donner ici des exemples prcis nous mnerait trop loin parce qu'il faudrait tudier en dtail
IProute2 et les fonctions de QoS des noyaux 2.6 et la vie est courte.
Voici tout de mme un cas de figure qui serait grable par ce systme :
Nous disposons de deux liens sur le Net :
o l'un, trs rapide et trs fiable, mais trs cher et factur au volume de donnes ;
o l'autre, classique, comme une connexion ADSL, avec les limites que nous leurs
connaissons.
Nous souhaitons exploiter au mieux ces deux connexions, par exemple de la faon
suivante :
o Nous devons mettre jour le contenu d'un serveur distant. Il faut le faire de
faon rapide et sre. Il n'y a pas forcment beaucoup de donnes transmettre,
mais il est impratif que ce soit fait le plus rapidement et le plus srement
possible.
o Nous devons assurer un accs au Net pour les utilisateurs du rseau local, mais
avec une qualit de service plus faible.
Avec le marquage de paquets associ IProute, nous pourrons arriver faire passer les mises
jour du serveur sur le lien rapide mais cher et tout le reste sur le lien ADSL.
Nous disposons d'une connexion ADSL et il arrive trs souvent que certains
utilisateurs fassent du tlchargement FTP sur des serveurs rapides. Chaque fois qu'un
tlchargement est lanc, toute la bande passante Download est utilise et les autres
utilisateurs ne peuvent plus surfer dans de bonnes conditions.
En exploitant le marquage de paquets associ aux fonctions de QoS, nous pourrons
restreindre la bande passante exploite par le download FTP afin de laisser un peu
d'espace pour les autres activits.
Ceci peut aussi tre appliqu aux transferts peer-to-peer , qui ont l'inconvnient de
monopoliser le peu de bande passante upload dont on dispose sur des connexions
asymtriques comme ADSL ou cble.
Les logs
Netfilter propose un systme de log puissant. Il ne s'agit pas ici d'une table, mais d'une
cible. Nous verrons plus en dtail dans la suite ce que sont les cibles, disons pour le moment
qu'il en existe deux qui sont particulires.
La cible LOG
Elle permet de remonter vers le dmon syslog, avec, par dfaut, le niveau warning , des
messages dcrivant les paquets qui satisfont la rgle qui pointe vers LOG. Dans une
distribution Debian, nous retrouverons donc leur trace dans /var/log/syslog.
Juste un exemple trivial, pour voir ce que a donne :
iptables -A INPUT -i eth0 -p icmp -j LOG
Ce qui veut dire en franais :
Ajouter la chane INPUT la rgle suivante : envoyer vers la cible LOG
tout paquet ICMP qui entre par eth0
La machine dont l'IP de eth0 est 192.168.0.253 envoie un ping sur la machine192.168.0.251.
ping -n 1 192.168.0.251
Nous allons tracer la rponse au ping (INPUT). Nous rcuprons cette trace dans
/var/log/syslog :
Dec 1 22:40:11 linux kernel:
IN=eth0
OUT= MAC=00:00:b4:bb:5d:ee:00:20:18:29:11:31:08:00
SRC=192.168.0.251
DST=192.168.0.253
LEN=84 TOS=0x00
PREC=0x00
TTL=255 ID=4938
PROTO=ICMP TYPE=0
CODE=0
ID=53771
SEQ=256
Ce qui est surlign en jaune correspond la machine qui trace, c'est dire celle qui envoie le
ping et attend la rponse (qui est trace). Ce qui est surlign en vert correspond la cible du
ping qui rpond.
Comme vous le voyez, c'est un bon moyen pour se faire de la lecture facile, propre vous
aider en cas d'insomnie. Si la commande ping est crite de la faon suivante :
ping -n 100 192.168.0.251
Nous gnrerons 100 fois une trace similaire celle que nous venons de voir. Compter les
moutons qui sautent la barrire est sans doute bien moins efficace.
Pour viter que les logs n'arrivent remplir votre disque dur, il existe la directive limit qui
permet, comme son nom l'indique, de limiter l'envoi vers la cible de paquets satisfaisant la
rgle. Cette directive elle seule mriterait toute une page d'explications.
La cible ULOG
Plutt que d'utiliser syslog, cette cible permet d'envoyer les paquets un dmon spcialis :
ulogd. Ce dmon permet d'obtenir des logs plus prsentables, voire stocks dans une base de
donnes comme MySQL.
iptables
Encore une fois, il n'est pas question de reprendre toute la documentation d'IPtables. Nous
allons simplement examiner quelques rgles simples d'un usage courant. Pour tudier la
syntaxe, consultez:
Les pages man (man iptables)
Rusty's Remarkably Unreliable Guides
Les pages de man, bien que pas toujours trs agrables lire, sont essentielles, pour la simple
raison que Netfilter/IPtables sont des outils en pleine volution et que d'une version l'autre,
de nouvelles fonctionnalits peuvent apparatre.
Manipulations diverses
Pour ce qui suit, nous allons faire de la pratique. Debian Etch monte en passerelle, tel que
dcrit dans le chapitre Partage de connexion .
Rappelons-le, il s'agit de
masquer tous les clients d'un rseau priv (par exemple 192.168.0.0) derrire l'unique adresse
officielle attribue par le fournisseur d'accs, et d'assurer un minimum de scurit sur la
totalit de l'installation.
Initialisation des tables
Pour commencer, nous allons tout fermer au niveau de la passerelle dans la table filter.
Nous vidons les chanes :
iptables -F
Nous supprimons d'ventuelles chanes personnelles :
iptables -X
Nous les faisons pointer par dfaut sur DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
Nous faisons de mme avec toutes les autres tables, savoir nat et mangle, mais en les
faisant pointer par dfaut sur ACCEPT. Ca ne pose pas de problmes puisque tout est bloqu
au niveau filter :
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT
Notez que dans tout a, on n'a pas chang grand chose par rapport l'tat de ces tables tel
qu'on le trouve aprs un boot de la machine, sans modifications particulires des scripts de
dmarrage, hormis la cible par dfaut des rgles de la table filter que l'on a pass DROP.
Tout de mme, cette manipulation prliminaire a eu pour consquences :
Que l'on est parfaitement sr de l'tat de Netfilter,
Que l'on a commenc se familiariser un peu avec le langage IPtables.
O en sommes-nous ?
Normalement, plus rien ne doit passer nulle part. Essayez des pings dans tous les sens, entre la
passerelle et votre rseau priv ou vers le Net, entre un poste de votre rseau priv et la
passerelle, rien ne devrait passer.
Ouvrons quelques portes
Nous considrons que la machine elle mme est sre et que les processus locaux peuvent
communiquer entre eux via l'interface locale :
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
Nous considrons que notre rseau local est galement sr (ce qui n'est pas forcment vrai,
d'ailleurs).
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
A ce stade, nous avons la situation suivante :
Si, sur votre passerelle, vous faites ping 127.0.0.1, a rpond,
si, sur votre passerelle, vous faites un ping sur un hte du rseau priv, a rpond,
si, sur un hte du rseau priv, vous faites un ping sur la passerelle, a rpond aussi.
Mais
Si, depuis la passerelle, on fait des pings n'importe o sur le Net, a ne rpondra pas,
cause du DROP sur OUTPUT par dfaut,
si, depuis n'importe o sur le Net, on fait des pings sur votre passerelle, a ne rpondra
pas non plus, cause du DROP sur INPUT par dfaut,
si, depuis un hte de votre rseau, on fait un ping n'importe o sur le Net, a ne
rpondra encore pas, pour deux raisons :
o Nous n'avons pas plac de rgle de NAT entre le rseau local et le Net,
o FORWARD fait DROP sur tout ce qui passe.
Faisons maintenant du NAT :
Translation d'adresses pour tout ce qui traverse la passerelle en sortant par ppp0
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Nous pourrions ici restreindre le NAT une plage d'IPs du rseau local :
iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o ppp0 -j
MASQUERADE
Ou mme une liste d'IP bien dfinies :
iptables -t nat -A POSTROUTING -s 192.168.0.10 -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.11 -o ppp0 -j MASQUERADE
Ceci peut tre utile, surtout en sachant que vous pouvez dtruire une rgle et une seule :
iptables -t nat -D POSTROUTING -s 192.168.0.11 -o ppp0 -j MASQUERADE
Ainsi, si vous avez, par exemple, des enfants qui usent de votre connexion permanente de
faon un peu trop permanente, vous pourrez aisment, avec l'aide du dmon cron n'accorder
l'accs au Net que pour certaines plages horaires.
Mais a ne suffit pas encore pour fonctionner, les pings depuis le rseau local vers le Net ne
passent toujours pas. Normal, FORWARD fait toujours DROP sur tout ce qui passe. Nous
devons accorder des autorisations de passage sur FORWARD.
Utilisation de conntrack
Le suivi de connexion est intressant, bien qu'il
consomme un peu plus de ressources sur votre passerelle. Nous l'avons vu, son avantage est
qu'il permet d'obtenir des informations sur toute connexion en cours. Ces informations sont
principalement :
NEW
Une nouvelle connexion est tablie ;
ESTABLISHED
La connexion analyse a dj t tablie ;
RELATED
La connexion est en relation avec une autre connexion dj tablie (par exemple, dans
le FTP actif) ;
I NVALI D
Le paquet n'appartient aucune des trois catgories prcdentes. Il est possible, par
exemple, de n'accepter dans les deux sens (vers et depuis l'Internet) que les
connections dj tablies ou en relation avec des connexions dj tablies et de
n'accepter des nouvelles connexions que depuis notre installation vers l'Internet. De
cette manire, notre rseau local pourra se connecter sur tout serveur Internet, mais
aucune nouvelle connexion ne pourra tre cre depuis le Net vers notre installation.
En franais, nous allons faire :
Toutes les connexions : nouvelles, tablies et associes une connexion tablie qui
entrent par eth0 (rseau local) et veulent sortir par ppp0 (le Net), peuvent passer,
Toutes les connexions : tablies et associes une connexion tablie qui entrent par
ppp0 et veulent aller vers eth0 pourront galement passer.
En langage iptables : Toutes les connexions qui sortent du LAN vers le Net sont acceptes
iptables -A FORWARD -i eth0 -o ppp0 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
Nous aurions aussi bien pu crire :
iptables -A FORWARD -i eth0 -o ppp0 -m state --state ! INVALID -j ACCEPT
Seules les connexions dj tablies ou en relation avec des connexions tablies sont acceptes
venant du Net vers le LAN
iptables -A FORWARD -i ppp0 -o eth0 -m state --state ESTABLISHED,RELATED -j
ACCEPT
ping ul.grenouille.com (par exemple) se met fonctionner.
Le chapeau magique
Maintenant que nous avons mis conntrack en uvre, nous aimerions bien voir un peu
comment il opre Il se trouve qu'il est possible d'observer la table de suivi de connexions
qui se prsente sous la forme d'un fichier virtuel en /proc/net/ip_conntrack.
Pour interprter plus facilement ce qu'il suit, il faut savoir plusieurs choses :
Un client du LAN dispose de l'IP 192.168.0.10,
la passerelle dispose de l'IP 192.168.0.253 sur le LAN
la passerelle dispose de l'IP 80.8.130.97 sur le Net
le client navigue sur le serveur HTTP d'IP 213.186.35.33
tcp 6 14 CLOSE_WAIT
src=192.168.0.10 dst=213.186.35.33 sport=1102 dport=80
src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1102 [ASSURED]
use=1

tcp 6 431991 ESTABLISHED
src=192.168.0.10 dst=213.186.35.33 sport=1103 dport=80
src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1103 [ASSURED]
use=1

tcp 6 73 TIME_WAIT
src=192.168.0.10 dst=213.186.35.33 sport=1104 dport=80
src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1104 [ASSURED]
use=1

tcp 6 82 SYN_SENT
src=192.168.0.10 dst=213.186.35.33 sport=1105 dport=80
[UNREPLIED]
src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1105 use=1

tcp 6 51 CLOSE_WAIT
src=192.168.0.10 dst=213.186.35.33 sport=1106 dport=80
src=213.186.35.33 dst=80.8.130.97 sport=80 dport=1106 [ASSURED]
use=1
Le troisime champ est un timer , l'entre est efface de la table lorsque le timer tombe
zro. Bien entendu, cette table est en mmoire, ce n'est pas un vrai fichier, son contenu volue
donc perptuellement au cours du temps.
Vous ne pourrez pas visualiser efficacement son contenu avec l'outil tail ;
cette table prend de la place en mmoire, d'autant plus que le nombre de clients sur le
LAN est important et leur activit grande. Sur un petit rseau domestique, ce sera
rarement un problme, mais sur un rseau d'entreprise, il faudra rester attentif la
mmoire disponible.
O en somme nous ?
Depuis le rseau local, nous accdons la passerelle,
depuis le rseau local, nous accdons au Net,
depuis la passerelle, nous accdons au rseau local,
depuis la passerelle, nous n'accdons pas au Net
depuis le Net, nous n'accdons pas la passerelle (nous avons toujours un DROP en
INPUT sur ppp0)
depuis le net, nous ne pouvons accder aux htes du rseau local que sur des
connexions qu'ils ont tablies et dont ils sont clients. Autrement dit, aucun serveur,
ventuellement plac sur le rseau local ne sera accessible depuis le Net
Amlioration possibles
Un DNS local
Si vous installez sur votre passerelle un serveur DNS, il faudra qu'il puisse envoyer ses
requtes sur le Net, ce qui n'est actuellement pas possible. Il faut ouvrir une voie en UDP
conforme aux besoins d'une requte DNS :
Votre serveur envoie une requte UDP destination du port 53 d'un serveur DNS
il attend une rponse sur un port suprieur ou gal 1025, venant d'un port 53.
En langage IPtables :
Autorisation des requtes DNS locales
iptables -A OUTPUT -o ppp0 -p udp --sport 1024: --dport 53 -m state --state
! INVALID -j ACCEPT
iptables -A INPUT -i ppp0 -p udp --sport 53 --dport 1024: -m state --state
RELATED,ESTABLISHED -j ACCEPT
Voil des syntaxes qui commencent tre sympathiques
Lorsque l'on veut dfinir, non pas un port mais une plage de ports, les critures suivantes sont
autorises :
dport 1024:1999 autorisera la plage de ports [1024,1999] en destination (a marche
aussi avec sport) ;
dport 1024: veut dire que tous les ports suprieurs o gaux 1024 seront accepts
en destination.
Un SMTP local
Vous pouvez dsirer implanter un SMTP sur votre passerelle, pour envoyer votre courrier
depuis le LAN sans vous proccuper des disponibilits ou des lenteurs du SMTP de votre
FAI. Voir le chapitre SMTP ce sujet.
Deux options sont possibles :
Votre SMTP enverra vos courriers directement aux destinataires,
votre SMTP enverra tous vos courriers au SMTP de votre FAI qui effectuera lui-
mmes les livraisons.
La premire option est la plus rapide. Malheureusement, cause de nombreux dbordements,
la tendance actuelle consiste refuser les messages provenant de serveurs SMTP non
officiels, ce fut un temps par exemple le cas entre Wanadoo et AOL. AOL refusait tout
message en provenance de wanadoo.fr autre que ceux qui lui arrivent des SMTP officiels de
wanadoo. Comme il est clair que cette tendance n'ira qu'en s'accentuant, il demeure plus sage
d'utiliser la seconde mthode. Vous serez tributaire du bon fonctionnement du SMTP de votre
FAI, mais a ne se verra pas au niveau de vos clients du LAN. Ce sera votre SMTP local qui
assurera les ventuelles attentes.
Sachant qu'un serveur SMTP coute sur le port 25 et utilise tcp :
Autorisation des envois SMTP locaux
iptables -A OUTPUT -o ppp0 -p tcp --sport 1024: --dport 25 -m state --state
! INVALID -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp --sport 25 --dport 1024: -m state --state
RELATED,ESTABLISHED -j ACCEPT
Et vous pouvez mme restreindre encore d'avantage, si vous avez adopt la seconde stratgie
d'envoi :
Autorisation des envois SMTP locaux vers le SMTP du FAI
iptables -A OUTPUT -o ppp0 -p tcp --sport 1024: -d smtp.wanadoo.fr --dport
25 -m state --state ! INVALID -j ACCEPT
iptables -A INPUT -i ppp0 -p tcp -s smtp.wanadoo.fr --sport 25 --dport
1024: -m state --state RELATED,ESTABLISHED -j ACCEPT
Si, si, a fonctionne, condition bien entendu que votre passerelle soit en mesure de rsoudre
les noms au moment o vous crivez la rgle. Attention donc, si vous faites tout a lors de
l'initialisation de la machine, il faudra que :
Les services rseaux soient monts,
la connexion PPPoE tablie,
le service DNS dmarr.
Vous pouvez, plus simplement, indiquer non pas le nom du serveur mais son IP.
Un accs SSH depuis le Net
Vous pouvez souhaiter pouvoir accder votre passerelle depuis le Net, pour peu que vous
ayez un moyen de connatre tout moment son adresse IP. Sachant que ssh utilise tcp sur le
port 22 :
iptables -A INPUT -p tcp --dport ssh -i ppp0 -j ACCEPT
iptables -A OUTPUT -p tcp --sport ssh -o ppp0 -j ACCEPT
Nous pouvons effectivement dfinir un port par le service qui lui est normalement associ (ici
ssh).
Si vous devez accder votre passerelle depuis une IP fixe sur le Net, vous pouvez largement
restreindre cette rgle en n'acceptant les connexions ssh que depuis et vers cette IP.
ICMP, c'est parfois utile
Le protocole ICMP, mme s'il prsente quelques dangers, rend tout de mme quelques
services apprciables, dans le cas d'erreurs de transmission et aussi dans la dcouverte du
MTU. Pour plus de dtails, voyez le chapitre TCP/IP(v4) .
Il se trouve que, pour les messages d'erreur ICMP, l'en-tte du paquet qui a gnr l'erreur est
reproduite dans le message. Le suivi de connexion ICMP s'en sert pour dclarer ce paquet
RELATED.
En ce qui concerne les clients du LAN, avec les rgles que nous avons crites, il ne devrait
pas y avoir de problmes, puis qu'on laisse passer tout paquet RELATED sans distinction de
protocole.
En revanche, pour la passerelle elle-mme, si l'on a activ SMTP et DNS, il peut s'avrer
intressant d'ajouter la ligne :
iptables -A INPUT -p icmp -m state --state RELATED -j ACCEPT
De cette manire, une erreur ICMP passera, mais votre passerelle ne rpondra pas aux pings,
ni aucune autre interrogation ICMP.
Encore une dernire recette
Vous pouvez faire quelque chose de trs simple, mais qui reste tout de mme moins sr. Nous
sommes dans la table Filter (table par dfaut).
Vidage des chanes
iptables -F
Destruction des ventuelles chanes personnelles :
iptables -X
Changement de stratgie par dfaut: Nous n'acceptons plus rien
ni en entre
ni en traverse de la passerelle
Mais nous acceptons tout ce qui sort (localement) de la passerelle :
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
Initialisation des tables NAT et MANGLE :
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
Mise en place du NAT :
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
Maintenant, nous allons crer une chane particulire, que nous allons appeler
SuiviConnexions et qui va grer ce suivi :
iptables -N SuiviConnexions
Filtrage de suivi dans cette chane : Seules les nouvelles connexions qui ne viennent pas du
Net sont acceptes :
iptables -A SuiviConnexions -m state --state NEW -i ! ppp0 -j ACCEPT
Ceci veut dire plus clairement que toutes les connexions qui n'entrent pas par ppp0 c'est dire
dans notre cas, qui entrent par eth0, mais aussi par l'interface locale (lo).
Toutes les connexions tablies et relatives sont acceptes :
iptables -A SuiviConnexions -m state --state ESTABLISHED,RELATED -j ACCEPT
Cette chane va maintenant servir de cible commune pour les deux chanes standard INPUT et
FORWARD, les deux chanes INPUT et FORWARD vont pointer sur SuiviConnexions :
iptables -A INPUT -j SuiviConnexions
iptables -A FORWARD -j SuiviConnexions
Et le tour est jou, puisque OUTPUT accepte tout. Il faut faire beaucoup confiance au bon
fonctionnement de conntrack et ne pas trop se poser de questions sur les coups tordus qui
peuvent arriver passer quand mme l dedans, mais au premier coup d'oeil, votre machine
paratra invisible sur le Net.
Enfin, pour ssh :
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
Le FTP actif
Trs souvent, les clients du LAN derrire un routeur NAT ne peuvent accder des serveurs
FTP sur le Net qu'en mode passif. Sans prcautions particulires, ce sera galement le cas ici.
Cependant, Netfilter permet de s'affranchir de cette limitation, en exploitant les modules
spcialiss, nf_nat_ftp et nf_conntrack_ftp. Ceci nous amne dire quelques mots du
chargement de ces modules, propos desquels nous ne nous sommes pas beaucoup pos de
questions.
Netfilter est capable de charger dynamiquement la plupart des modules qui lui sont
ncessaires, en fonction des rgles crites. Faites un lsmod et voyez les modules impliqus
dans Netfilter (ils sont tous dans /lib/modules/<version du kernel
utilis>/kernel/net/ipv4/netfilter et dans /lib/modules/<version du kernel
utilis>/kernel/net/netfilter).
Cependant, les modules ncessaires au FTP actif ne se chargent pas automatiquement. Vous
pourrez les monter avec modprobe pour faire les tests. Si vous voulez les rendre
automatiquement disponibles chaque dmarrage, rfrencez-les par exemple dans le fichier
/etc/modules.
Pour conserver tout ce beau travail
C'est le moment d'utiliser un outil fourni avec iptables : le script iptables-save. Ce script
envoie sur le flux de sortie par dfaut, normalement l'cran, le contenu des chanes de toutes
les tables, dans un format relativement lisible pour l'tre humain :
# iptables-save

# Generated by iptables-save v1.2.6a on Mon Dec 2 18:22:31 2002
*mangle
:PREROUTING ACCEPT [4110:906437]
:INPUT ACCEPT [113562:22595477]
:FORWARD ACCEPT [2160:709057]
:OUTPUT ACCEPT [2308:208513]
:POSTROUTING ACCEPT [68746:14733820]
COMMIT
# Completed on Mon Dec 2 18:22:31 2002
# Generated by iptables-save v1.2.6a on Mon Dec 2 18:22:31 2002
*filter
:INPUT DROP [392:38736]
:FORWARD DROP [20:944]
:OUTPUT DROP [616:25100]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A FORWARD -i eth0 -o ppp0 -m state --state NEW,RELATED,ESTABLISHED -j
ACCEPT
-A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
COMMIT
# Completed on Mon Dec 2 18:22:31 2002
# Generated by iptables-save v1.2.6a on Mon Dec 2 18:22:31 2002
*nat
:PREROUTING ACCEPT [781:63004]
:POSTROUTING ACCEPT [331:18116]
:OUTPUT ACCEPT [1028:49802]
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
# Completed on Mon Dec 2 18:22:31 2002
Nous retrouvons bien l dedans tout ce que nous avons dfini plus haut. Mais cette commande
a un autre avantage. En dirigeant sa sortie vers un fichier, vous obtenez un fichier de
configuration qui sera exploitable par un autre script : iptables-restore
En d'autres termes, si vous faites :
iptables-save > /root/maconfig.iptables
vous pourrez refaire ensuite :
iptables-restore < /root/maconfig.iptables
Pour restaurer intgralement votre configuration.
Sur Debian, il est possible d'invoquer des commandes lors de l'activation et de la
dsactivation d'une interface rseau, dans le fichier /etc/network/interfaces. Voyez le
chapitre Partage de connexion et plus particulirement la page Passerelle simple pour
plus de dtails.
Conclusions
Beaucoup de choses n'ont pas t dites, Netfilter ncessiterait un livre entier. Parmi ce dont
nous n'avons pas parl et qui peut s'avrer utile, mme pour un rseau domestique :
Comment placer, par exemple, un serveur HTTP sur le LAN et s'arranger pour qu'il
soit visible depuis le Net ? C'est possible en utilisant du NAT de destination
(PREROUTING). Je vous laisse chercher
Nous n'avons que survol l'utilisation de la cible LOG, pour tracer des paquets
indsirables, ou simplement pour dverminer des rgles qui ne fonctionnent pas
comme on le souhaiterait. La cible LOG est un peu spciale, dans la mesure o elle
n'affecte pas la destination du paquet trac. Ainsi, vous devrez crire des rgles pour
les logs en plus de votre filtrage et de votre NAT.
L'utilisation de la table mangle conjointement avec le QoS pour exploiter au mieux
votre bande passante.
Je ne suis pas un expert en scurit. Ne comptez pas sur moi pour vous donner toutes les
ficelles de scurisation de votre installation. D'ailleurs, rien n'est dfinitif dans ce domaine.
PPPoE
Prsentation rapide
PPPoE est connu pour son emploi dans les connexions l'internet proposes par de nombreux
fournisseurs d'accs. Il fait partie des protocoles de connexion point point.
PPP, PPtP, PPPoE, PPPoA Autant d'acronymes barbares qui fleurissent sur le Net. Ces
mthodes de connexion point point sont souvent utilises par les internautes, sans qu'ils le
sachent obligatoirement. Ces mthodes peuvent galement servir de tunnels chiffrs pour
permettre d'accder via l'internet un rseau priv.
Du temps o les fournisseurs d'accs ne mettaient la disposition de leurs clients qu'un simple
modem (ADSL ou cble), il fallait le plus souvent mettre en uvre une connexion PPPoE
entre le modem et la station de travail qui y tait connecte.
Aujourd'hui, les diverses box qui font office de routeur NAT prennent automatiquement
en charge cette mise en uvre et l'internaute n'a en principe plus s'en proccuper, sauf s'il
est un peu Geek sur les bords et qu'il prfre utiliser un simple modem et construire lui-mme
son routeur NAT.
La connexion Point Point
Depuis longtemps l'informatique a besoin d'tablir des connexions entre htes sur des
supports qui ne sont pas des supports rseau. Une liaison srie RS 232 par exemple, comme
celle qui reliait votre PC votre Modem RTC, du temps o l'USB n'existait pas. Notez que
USB (Universal Serial Bus) n'est autre qu'une simple liaison srie, pas du tout conue au
dpart pour supporter des couches rseau.
Connexion Internet via un modem RTC
Depuis le PC jusqu' l'quipement du fournisseur d'accs, la connexion n'est donc pas de type
rseau (du moins, jusqu'au concentrateur tlphonique). Internet ncessite l'usage du
protocole TCP/IP. Il est donc ncessaire de mettre en dessous un autre protocole, capable de
supporter TCP/IP, qui ne sera pas le classique Ethernet.
PPP (Point to Point Protocol) a t cr pour rsoudre ce problme. PPP est capable de
transporter sur une liaison srie, sur une ligne tlphonique RTC par l'intermdiaire d'un
modem, non seulement TCP/IP, mais tout protocole rseau comme IPX/SPX ou mme
l'antique NetBEUI.
Connexion Internet via ADSL
Bien que l'on utilise ici une ligne tlphonique, c'est ATM qui arrive jusqu'au modem de
l'abonn. Nous avons une architecture rseau et il est parfaitement possible de transporter des
trames Ethernet dessus, jusque chez l'abonn, sans utilisation d'un protocole point point. Les
premires exprimentations de l'ADSL ont d'ailleurs eu lieu sur ce schma. Les tunnels point
point ont t ajouts pour permettre de partager le mme support (boucle locale) entre
plusieurs fournisseurs d'accs.
Par la suite, PPP est rest mme dans le cas d'un dgroupage total, chez la majeure partie des
fournisseurs d'accs.
ADSL sans support point point
Dans cette configuration, tous les abonns sont, ds lors qu'ils sont connects, placs sur un
mme rseau physique. Il ne peut simplement y avoir qu'un seul fournisseur d'accs commun
tous les abonns. Cette situation a t accepte pour les cblo oprateurs, elle ne l'a pas t
pour l'exploitation de l'ADSL ses dbuts o France Tlcom tait charge du transport pour
tous les fournisseurs, ce qui est encore le cas des lignes non dgroupes .
ADSL avec support point point
Les technologies xDSL amnent un rseau ATM jusqu'au modem de l'abonn. ATM est un
protocole rseau qui fonctionne en mode connect. Autrement dit, il tablit un chemin virtuel
entre client et serveur pour raliser la connexion. Mais TCP/IP fonctionne sur Ethernet.
Finalement, les trames Ethernet sont transportes par ATM, qui devient compltement
transparent pour l'utilisateur. Dans la pratique, avec un modem ADSL reli au PC par un lien
Ethernet, le PC se croit directement connect un rseau Ethernet.
Si l'on ajoute au dessus d'Ethernet un protocole capable de faire du point point entre le client
et son fournisseur d'accs, on ralise une sorte de tunnel qui va permettre principalement
d'utiliser le mme rseau pour y faire cohabiter des clients de fournisseurs diffrents, la
connexion se ralisant avec le bon fournisseur grce l'identifiant de connexion.
Cette stratgie a t mise en place sur ADSL au moment de sa mise en production. PPP
faisant appel une authentification du client, la grande majorit des fournisseurs d'accs a
conserv PPP mme dans le cas de lignes en dgroupage total.
IP sur quoi ?
Petit rappel
Peut-tre est-il bon de rappeler ici le modle DOD, celui sur
lequel TCP/IP s'appuie. Dans le cas qui nous occupe, c'est principalement la couche d'accs
rseau qui nous intresse.
IP s'appuie avec aisance sur Ethernet. Mais il est tout fait possible de remplacer Ethernet par
quelque chose d'autre.
PPP, Point to Point Protocol
Nous savons tous qu'une connexion Internet fonctionne correctement si l'on ne dispose que
d'un simple modem RTC (Rseau Tlphonique Commut). Dans ce cas, il faut disposer d'un
client PPP, capable d'tablir une connexion PPP avec les quipements du FAI.
Sous Windows, ce client apparat comme un client d'accs distant
Voici typiquement ce que l'on voit sous Windows XP
par exemple, lorsque l'on dispose la fois d'une connexion de type rseau local et une
connexion par modem RTC (ici rtc Free )
Si l'on dveloppe les proprits de cette connexion RTC, voici ce que l'on voit: Un client PPP,
capable de se connecter des serveurs d'accs distants de type Windows 95/98/NT4/2000 (et
XP bien sr), mais aussi Internet. Quelques tribulations dans cette fentre montreront que l'on
dispose ici de toutes les possibilits de TCP/IP

L'aspect de ces fentre diffrera suivant la version de Windows, mais vous retrouverez les
mmes fonctionnalits sur toutes les versions, partir de Windows 95.
Tout ceci pour bien montrer que TCP/IP peut sans problmes s'appuyer sur PPP plutt que sur
Ethernet.
Et l'adresse MAC ?
L'adresse MAC, normalement, est inscrite en dur dans l'interface Ethernet. Dans le cas de
PPP, il n'y a bien entendu pas d'adresse MAC crite en dur sur votre machine, le serveur
d'accs distant va combler cette lacune (service proxy ARP).
A gauche, IP s'appuie sur
Ethernet qui utilise un support de type 802.3.
A droite, IP s'appuie sur PPP qui utilise (par exemple) un support de type liaison srie RS
232.
Remarques diverses
Ethernet et PPP n'ont pas grand chose en commun, si ce n'est qu'ils peuvent supporter tous les
deux IP.
Ethernet
Nous l'avons largement vu par ailleurs sur ce site, Ethernet est un support communautaire .
les datagrammes circulent sur tout le rseau physique, tout le monde peut les voir passer, c'est
juste la couche d'accs au rseau qui va, suivant l'adresse MAC du destinataire, dcider de
remonter ou non le datagramme aux couches suprieures. Cette technologie est trs
majoritairement utilise sur les rseaux locaux.
PPP
Nous sommes en mode connect point point. Lorsque l'on utilise un modem RTC, depuis
son PC jusqu' l'quipement du fournisseur de services on utilise une ligne qui relie
physiquement les deux machines et elles seules (au moins virtuellement, comme nous le
verrons plus loin).
ATM, l'accs rseau qui travaille dans l'ombre
Le rseau France Tlcom est un rseau ATM. C'est le mme rseau qui sert aussi bien pour
la tlphonie que le transport de donnes informatiques. ATM sait transporter des donnes de
toutes natures. Autrement dit, lorsque vous communiquez entre un point A et un point B en
utilisant le rseau FT, vous utilisez de l'ATM sans le savoir (et c'est tant mieux pour nous,
ATM n'est pas une petite affaire).
ATM sait transporter de la tlphonie numrise. Si votre tlphone travaille avec un
signal analogique dans une bande passante de 4 KHz sur la fameuse boucle locale ,
ce signal est rapidement numris avant d'tre vhicul par le rseau ATM. Il sera
nouveau transform en signal analogique avant d'tre inject dans la boucle locale de
votre interlocuteur. (Mme chemin tortueux pour les signaux des modems RTC).
ATM sait aussi transporter des signaux vido numriss, mais ce n'est pas notre
propos.
ATM sait transporter des donnes informatiques:
o Directement , il existe des interfaces ATM qui permettent de construire un
rseau informatique purement ATM.
o Indirectement , en transportant des datagrammes issus d'autres accs
rseaux comme PPP ou Ethernet. Ces trames sont alors transportes sur ATM
par le biais d'une couche d'adaptation (AAL comme ATM Adaptation Layer).
Dans ce cas, ATM est parfaitement transparent et l'utilisateur peut avoir
l'impression qu'il est sur un rseau Ethernet, mme si ce n'est pas vrai. C'est le
cas actuellement pour les Internautes.
ATM est un rseau dit commut . Bien que ce soit un vrai rseau, au sens o les
quipements sont connects en rseau, il s'tablit un chemin virtuel entre source et cible et
pour les donnes qui transitent, tout se passe comme s'il y avait un fil qui relie directement
et uniquement source et cible.
S'il est bon de savoir qu'ATM est partout dans notre vie d'Iinternaute, il est encore meilleur de
savoir que l'on n'a pas trop besoin de s'en soucier.
Sans PPPoE
Nous sommes dans cette configuration :
IP accde au rseau par Ethernet ;
Ethernet est transport par ATM au moyen de la couche d'adaptation AAL5.
Pour le client connect au Net par ce biais, tout se passe donc comme s'il tait sur un rseau IP
transport par Ethernet, configuration identique celle d'un LAN (Local Area Network).
Lors de la mise sous tension du poste client, si l'interface Ethernet est active, DHCP va faire
son uvre et le client rcuprera automatiquement une adresse IP, une passerelle par dfaut,
un DNS, bref, tout ce qu'il faut pour qu'il soit connect au rseau. Lorsque tout se passe bien,
cette opration est compltement transparente pour l'utilisateur et il se trouve de facto
connect au Net.
Il n'y a aucune procdure de login avec nom d'utilisateur et mot de passe, comme a se fait
avec une connexion PPP sur RTC.
Avec PPPoE
Ici, nous sommes dans cette configuration :
IP accde au rseau par PPP ;
PPP est transport par Ethernet ;
Ethernet est transport par ATM au moyen de la couche d'adaptation AAL5.
Il y a une couche de plus, mais ATM peut continuer tre ignor.
Et les tunnels ?
Les tunnels du dessus
Jusqu'ici, tout est simple. Nous sommes en TCP/IP et, soit nous disposons d'un rseau 802.3
et utilisons Ethernet comme Accs rseau, soit nous disposons d'une ligne tlphonique et
nous utilisons PPP comme accs rseau.
Seulement, voil Ethernet, pose beaucoup de problmes du fait principalement que les
donnes qui y circulent ne sont pas protges des regards indiscrets. Les renifleurs
(sniffers) en sont une brillante dmonstration.
Il est donc devenu utile de crer au dessus d'Ethernet des connexions de type PPP. Ces
connexions, bien que transportes par Ethernet apparaissent comme des liaisons point point
en exploitant les proprits de PPP. En outre, elles peuvent permettre l'identification du client
(RADIUS).
PPTP. (Point to Point Tunelling Protocol)
C'est un protocole qui a t dvelopp par Microsoft. Son
principe est de crer au dessus d'IP une liaison PPP dans laquelle on va refaire passer de l'IP.
Deux couches IP l'une sur l'autre, si vous voulez. Ceci permet de crer des VPN (Virtual
Private Network) au dessus d'un rseau public. Il est possible par ce biais de crer une sorte de
LAN virtuel priv qui emprunte les voies de l'Internet.
PPPoE (Point to Point over Ethernet)
Ce protocole, galement propritaire au dpart, a t conu par
la socit RedBack. Son but, peine diffrent, est de crer une liaison point point au dessus
d'Ethernet. Ici, il n'y a pas deux couches IP
Dans un cas comme dans l'autre, il s'agit de profiter des avantages d'une connexion point
point sur un accs rseau qui ne le propose pas. (On pourrait faire la chose nativement sur
ATM, pas sur Ethernet).
Mais pourquoi des tunnels ?
A priori, a permet de rendre les donnes plus confidentielles. Les tunnels peuvent tre
chiffrs et les connexions s'tablissent par PPP et non par les moyens classiques d'IP
directement sur Ethernet.
Pour un fournisseur de services Internet, l'intrt principal est qu'il a une meilleure matrise
des connexions de ses clients. De plus, le mme rseau peut tre partag entre plusieurs
fournisseurs, les clients tablissant une liaison point point avec leur FAI, comme par le
RTC. C'est la solution qui a t retenue pour l'ADSL.
PPPoE : Installation
Ce qu'il faut d'abord comprendre
Le cas du modem RTC
Lorsque nous installons une connexion PPP, telle que celle que nous utilisons
sur une liaison srie avec notre modem RTC, Il n'existe pas proprement parler d'interface
physique. Sous Windows, par exemple, nous installons le client d'accs distant que nous
lions notre modem, puis nous le configurons pour qu'il utilise TCP/IP pour la connexion
Internet. GNU/Linux utilise le service pppd.
Le cas du rseau local Ethernet
Lorsque nous installons une interface Ethernet destine nous connecter sur un
rseau local (ou sur notre connexion ADSL, si notre fournisseur adopte cette stratgie), nous
installons le driver de la carte rseau, puis nous y associons TCP/IP. Nous configurons
alors TCP/IP, soit en dur dans le cas d'un petit rseau local, soit de faon automatique via
DHCP dans le cas d'un rseau plus complexe.
Le cas de PPPoE
Dans le cas de PPPoE, vous l'avez compris, il y a une couche de plus.
Nous installons le driver de la carte rseau ;
nous lions dessus le client PPPoE. Cette procdure peut tre transparente pour
l'utilisateur. Windows XP par exemple, propose un assistant qui fera les choses votre
place en vous posant quelques questions ;
TCP/IP va venir se lier ce client de faon plus ou moins transparente. Notez bien
qu' aucun moment, TCP/IP n'a t directement li Ethernet, comme c'est le cas pour
le rseau local.
Nous avons donc une couche de plus et IP se voit sur un transport PPP, exactement
comme dans le cas d'une connexion par modem RTC, et non plus directement sur un transport
Ethernet. Les captures documentes sur la page Reniflons un peu... le montrent bien.
Un client DHCP ne fonctionnera pas. Ce protocole n'est utilisable que sur Ethernet.
Votre adaptateur rseau n'a pas besoin d'tre configur en client DHCP. Il ne doit pas
l'tre, sinon votre pile IP va perdre du temps chercher un serveur DHCP qu'elle ne
trouvera forcment pas.
Pour tablir la connexion, il vous faudra initier une connexion PPP, comme avec votre
bon vieux modem RTC (login, mot de passe) et c'est PPP qui rcuprera alors votre
IP, la passerelle par dfaut et le DNS. Il n'y a plus de bail, les paramtres sont
inchangs pour toute la dure de la session. Nous verrons cela dans le dtail un peu
plus loin, la page Les dtails .
Les clients PPPoE les plus courants
Aujourd'hui tous les systmes d'exploitation proposent un client PPPoE. Pour ceux que je
connais :
GNU/Linux utilise gnralement rp-pppoe de faon plus ou moins amnage, suivant
la distribution employe. Debian installe deux paquets :
o pppoe qui est un amnagement de rp-pppoe, et s'appuie sur le paquet ppp,
service gnrique pour les connexions de type point point ;
o pppoeconf qui porpose des outils pour configurer simplement sa connexion
pppoe.
MS Windows XP propose galement un client natif.
Vous utilisez une plate-forme Win32
dmarrez l'assistant Crer une nouvelle connexion partir des connexions rseau
dans le panneau de configuration ;
choisissez Etablir une connexion Internet ;
configurez votre connexion manuellement ;
choisissez Se connecter en utilisant une connexion large bande qui ncessite un nom
d'utilisateur et un mot de passe ;
donnez un nom votre connexion. Ce nom apparaitra dans vos connexions rseau.
C'est pour vous, vous mettez ce que vous voulez ;
Choisissez si vous voulez que cette connexion soit accessible tous les utilisateurs ou
seulement vous. Dans ce dernier cas, les autres utilisateurs devront eux aussi
configurer leur connexion ;
remplissez le formulaire avec les informations que votre fournisseur d'accs vous a
communiques.
C'est termin.
Vous utilisez une plate-forme Linux
Nous allons voir a sur une Debian Etch. Vous pouvez normalement utiliser les services du
paquet pppoeconf avec la commande /usr/sbin/pppoeconf. Nous allons tout de mme
regarder de plus prs les trois fichiers de configuration modifier.
Le fichier pap-secrets
Editez le fichier /etc/ppp/pap-secrets pour y placer les informations d'identification
donnes par le fournisseur d'accs. Ce fichier est de la forme :
"<nom d'utilisateur>" "<domaine>" "<mot de passe">
Le domaine sera avantageusement remplac par une astrisque *. Exemple :
"fti/epikoi@fti" * "password"
Dans certains cas, un fichier identique, mais nomm /etc/ppp/chap-secrets pourra tre
ncessaire. Son contenu est exactement le mme.
Le fichier dsl-provider
Le fichier /etc/ppp/peers/dsl-provider install par dfaut contient beaucoup de
commentaires explicatifs. Il y a deux lignes qu'il faut modifier :
user "fti/epikoi@fti"
pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452"
La ligne user doit contenir le nom d'utilisateur tel qu'crit dans pap-secrets ;
la ligne pty doit tre modifie en fonction de l'interface connecte au modem (ici
eth0).
Au total, nous devrions avoir un fichier proche de ceci :
~# cat /etc/ppp/peers/dsl-provider
user "fti/epikoi@fti"
pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452"
noipdefault
defaultroute
hide-password
lcp-echo-interval 60
lcp-echo-failure 3
connect /bin/true
noauth
persist
mtu 1492
noaccomp
default-asyncmap
Je vous laisse retrouver par vous-mme la signification exacte des divers paramtres. Notons
tout de mme :
defaultroute qui permettra de placer automatiquement la route par dfaut sur cette
connexion ;
mtu 1492 qui vitera une fragmentation toujours peu souhaitable. Voir les dtails sur
le fonctionnement de PPPoE.
Le fichier interfaces
Nous devons ajouter dans /etc/network/interfaces les lignes suivantes :
auto ppp0
iface ppp0 inet ppp
provider dsl-provider
Notez que dans le cas de PPPoE, le lien ppp se faisant sur Ethernet, l'interface eth1 n'a pas
besoin d'tre configure au niveau IP. Vous n'aurez besoin de configurer au niveau IP que
si votre modem propose un accs IP pour sa configuration, ou simplement pour la lecture de
son tat, mais cette configuration IP n'est absolument pas ncessaire PPPoE.
Au final, vous devriez avoir dans /etc/network/interfaces :
auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

auto ppp0
iface ppp0 inet ppp
provider dsl-provider
Normalement, l'interface ppp0 doit maintenant pouvoir se manipuler comme n'importe quelle
interface rseau.
Reniflons un peu...
Un change ICMP vu de prs
La manip qui suit est destine claircir un peu les ides sur l'empilement des protocoles.
Elle est effectue sur une machine Linux connecte en PPPoE sur un modem SpeedTouch
Home (Accs ADSL).
L'interface Ethernet connecte au Modem est eth1. le client rp-pppoe assure la
connexion ppp au dessus. Ceci fait apparatre une interface supplmentaire: ppp0
Autrement dit, ppp0 est une interface PPP qui fonctionne au dessus de eth1
Voici un extrait de ce que donne ifconfig :
[root@gw root]# ifconfig
...
eth1 Lien encap:Ethernet HWaddr 00:60:8C:50:F0:DF
inet adr:10.0.0.10 Bcast:10.0.0.255 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...
ppp0 Lien encap:Protocole Point--Point
inet adr:217.128.147.4 P-t-P:217.128.147.1 Masque:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
...
Notez que si eth1 dispose de l'adresse IP 10.0.0.10, c'est uniquement pour pouvoir accder au
miniserveur http situ dans le SpeedTouch, qui permet de visualiser l'tat du modem. Ce n'est
absolument pas ncessaire, rptons-le, au bon fonctionnement de PPoE.
Deux sniffers , l'un sur eth1 (couche Ethernet), l'autre sur ppp0 (couche PPPoE),
vont observer simultanment un ping sur l'habituel ftp.oleane.net.
Voici ce que l'on obtient:
Sur Ethernet (Eth1) Sur PPPoE (ppp0)
Frame 4 (106 on wire, 106 captured)
...
Ethernet II
Destination: 00:02:3b:00:4f:7d
(Redback_00:4f:7d)
Source: 00:60:8c:50:f0:df
(3Com_50:f0:df)
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 218c
Payload Length: 86
Point-to-Point Protocol
Protocol: IP (0x0021)
Internet Protocol, Src Addr:
217.128.147.4
Dst Addr:
195.25.12.28
Version: 4
Header length: 20 bytes
Differentiated Services Field:
0x00
(DSCP 0x00: Default;
ECN: 0)
0000 00..=Differentiated Services
Codepoint:Default (0)
.... ..0.=ECN-Capable Transport
(ECT): 0
.... ...0=ECN-CE: 0
Total Length: 84
Identification: 0x0000
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: ICMP (0x01)
Header checksum: 0xfeee (correct)
Source: 217.128.147.4
Destination: 195.25.12.28
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
Code: 0
Checksum: 0xf320 (correct)
Identifier: 0x0e10
Sequence number: 00:00
Data (56 bytes)
...
Frame 1 (84 on wire, 84 captured)
...
Raw packet data
No link information available
**
**
** Au niveau ppp, ce qu'il se passe
dessous
** interprter, le renifleur sait pas
faire,
** il se croit sur un vrai lien
PPP
** parce qu'il coute sur une
interface PPP.
** Mais en regardant au niveau
Ethernet
**
**
** Nous trouvons les informations
relatives
** au protocole PPPoE
**
Internet Protocol, Src Addr:
217.128.147.4
Dst Addr:
195.25.12.28
Version: 4
Header length: 20 bytes
Differentiated Services Field:
0x00
(DSCP 0x00: Default;
ECN:0)
0000 00..=Differentiated Services
Codepoint: Default (0)
.... ..0.=ECN-Capable Transport
(ECT): 0
.... ...0=ECN-CE: 0
Total Length: 84
Identification: 0x0000
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: ICMP (0x01)
Header checksum: 0xfeee (correct)
Source: 217.128.147.4
(217.128.147.4)
Destination: 195.25.12.28
(195.25.12.28)
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
Code: 0
Checksum: 0xf320 (correct)
Identifier: 0x0e10
Sequence number: 00:00
Data (56 bytes)
...
Frame 5 (106 on wire, 106 captured) Frame 2 (84 on wire, 84 captured)
...
Ethernet II
Destination: 00:60:8c:50:f0:df
(3Com_50:f0:df)
Source: 00:02:3b:00:4f:7d
(Redback_00:4f:7d)
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 218c
Payload Length: 86
Point-to-Point Protocol
Protocol: IP (0x0021)
Internet Protocol, Src Addr:
195.25.12.28
Dst Addr:
217.128.147.4
Version: 4
Header length: 20 bytes
Differentiated Services Field:
0x00
(DSCP 0x00: Default;
ECN: 0)
0000 00..=Differentiated Services
Codepoint:Default (0)
.... ..0.=ECN-Capable Transport
(ECT): 0
.... ...0=ECN-CE: 0
Total Length: 84
Identification: 0xf960
Flags: 0x00
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 248
Protocol: ICMP (0x01)
Header checksum: 0x8d8d (correct)
Source: 195.25.12.28
(195.25.12.28)
Destination: 217.128.147.4
(217.128.147.4)
Internet Control Message Protocol
Type: 0 (Echo (ping) reply)
Code: 0 Checksum: 0xfb20
(correct)
Identifier: 0x0e10
Sequence number: 00:00
Data (56 bytes)
...
...
Raw packet data
No link information available
**
**
**
**
**
** Et pour la rponse
** c'est la mme chose
**
**
**
**
**
Internet Protocol, Src Addr:
195.25.12.28
Dst Addr:
217.128.147.4
Version: 4
Header length: 20 bytes
Differentiated Services Field:
0x00
(DSCP 0x00: Default;
ECN: 0)
0000 00..=Differentiated Services
Codepoint:Default (0)
.... ..0.=ECN-Capable Transport
(ECT): 0
.... ...0=ECN-CE: 0
Total Length: 84
Identification: 0xf960
Flags: 0x00
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 248
Protocol: ICMP (0x01)
Header checksum: 0x8d8d (correct)
Source: 195.25.12.28
Destination: 217.128.147.4
Internet Control Message Protocol
Type: 0 (Echo (ping) reply)
Code: 0
Checksum: 0xfb20 (correct)
Identifier: 0x0e10
Sequence number: 00:00
Data (56 bytes)
...
Comme il est facile de le constater, on a bien de l'IP qui est transport au dessus de PPP, lui
mme au dessus d'Ethernet. Si ce n'est la couche supplmentaire introduite par ce protocole,
tout reste identique ce que l'on observerait sur un rseau Ethernet classique .
Les dtails
Mise en confiance
Ce qui va suivre peut paratre quelque peu indigeste . Il n'est donc peut-tre pas inutile de
donner quelques points de repres avant d'entamer cette descente aux enfers.
Nous savons maintenant que le but ultime est d'exploiter les possibilits de PPP sur un rseau
de nature Ethernet, parce que PPP offre quelques facilits aux fournisseurs de services,
comme l'identification nominative des clients, principalement. C'est ncessaire lorsqu'il y a
plusieurs fournisseurs d'accs qui cohabitent sur la mme structure.
Dans la page prcdente, nous avons vu qu'une fois la connexion PPP tablie, IP est
transport par PPP (oE), lui-mme transport par Ethernet.
Nous devons donc nous attendre, lors de l'tablissement de cette connexion, observer
comment PPPoE va s'y prendre pour mettre en place le lien PPP entre notre machine et celle
de notre fournisseur de services. Nous nous arrterons lorsque PPP sera tabli, a suffira. Le
reste concernerait le protocole PPP lui-mme, ce qui n'est pas l'objectif de cet expos.
Nous sommes sur un rseau Ethernet, donc en architecture de rseau, plusieurs htes
sont prsents sur ce rseau et parmi eux, il y a celui avec lequel il faut mettre en place
le lien PPP. Il va donc falloir identifier cet interlocuteur sur ce rseau. Le seul moyen
connu au niveau Ethernet, c'est un broadcast ARP (Diffusion sur toutes les
adresses MAC prsentes). Une au moins des machines du fournisseur d'accs devrait
rpondre.
Une fois les deux interlocuteurs mutuellement reconnus, il n'y aura plus de broadcast
ARP. Comme nous allons le voir, la reconnaissance mutuelle va aboutir l'octroi d'un
identifiant de session qui restera valide tout le temps de la session.
PPP, au moyen du sous-protocole LCP (Link Control Protocol, protocole spcialis
dans la ngociation et la maintenance de la connexion PPP), va identifier le client
(Nom d'utilisateur et mot de passe).
Si cette identification russit, LCP va fournir au client les paramtres ncessaires pour
le bon fonctionnement d'IP:
o Adresse IP du client
o Serveur DNS pour la rsolution des noms
o Passerelle par dfaut. (Ici, cette passerelle est symbolique, puisque sur la
connexion PPP, il n'y a que deux protagonistes : Vous et l'quipement de votre
FAI l'autre bout. C'est forcment lui la passerelle).
Si l'identification choue, la ligne sera raccroche (par analogie avec un modem
RTC). Il faudra donc reprendre la connexion son dbut.
Voici donc en quelques mots, ce que nous devrions vrifier dans la suite immdiate.
Accrochez-vous, on y va.
RFC...
Les Request For Comment sont une trs grande chose :
1. Elles dcrivent gnralement dans le dtail les divers protocoles utiliss sur l'Internet
(dont PPPoE, bien entendu) et toute personne mettant en uvre un protocole de
l'internet se doit de le faire en respectant les RFCs qui le dcrivent, c'est l'assurance
que ce protocole sera utilisable par tous.
2. Elles sont initialement rdiges en Anglais, par des spcialistes au langage
particulirement obscur.
3. A cause de toutes les proprits cites plus haut, elles servent d'argument massue
ceux qui veulent tout prix montrer qu'ils sont les plus comptents et qu'ils planent
bien au dessus des foules ignares (Une rponse communment trouve sur les
newsgroups : Va d'abord lire les RFC ).
4. A cause du point 1 (le seul positif), elles sont tout de mme d'une utilit inestimable.
Par chance pour nous, plusieurs personnes se sont atteles l'ingrate tche de la traduction de
ces RFCs. Toutes ne le sont pas encore, mais la RFC 2516, celle qui dcrit le protocole
PPPoE, est traduite.
Lisez cette RFC, vous constaterez combien le point 2, mme affranchi de la langue Anglaise,
reste vrifi. Lisez la quand mme si vous voulez vraiment connatre le dtail de ce protocole.
Pour vous aider un peu dans cette lecture...
Voici la manipulation propose:
Une machine Linux Mandrake 8.1
1)
est connecte une liaison Netissimo (France
Tlcom) via un modem Ethernet SpeedTouch Home (Alcatel).
Le client PPPoE utilis est rp-pppoe.
Nous ouvrons une session PPPoE, un renifleur est l'coute, qui rcupre tout ce qu'il
se passe au niveau Ethernet.
Nous comparons ce que nous voyons avec ce qui est dit dans les RFC.
Ce que disent les Textes
L'tape de dcouverte
l'tape de dcouverte s'effectue en quatre tapes. Quand elle s'achve, chaque vis vis connat
le PPPOE SESSION_ID ainsi que les adresses Ethernet ; cela suffit pour dfinir une session
PPPOE. Les tapes sont :
Emission d'un paquet broadcast d'initiation par l'hte ;
Emission de paquets d'offres par un concentrateur d'accs ou plus ;
Emission d'un paquet de demande de session unicast par l'hte ;
Et mission d'un paquet de confirmation par le concentrateur d'accs.
Aprs avoir envoy le paquet de confirmation et ds que l'hte le reoit, la connexion passe
alors l'tape suivante : la session PPP. Toutes les trames de dcouvertes Ethernet ont le
champ ETHER_TYPE 0x8863.
Ce que nous pouvons observer
Etablissement de PPPoE
Dans un premier temps, juste le rsum des trames qui passent:
No. Source Destination Protocol Info
4 3Com_50:f0:df ff:ff:ff:ff:ff:ff PPPoED Active Discovery
Initiation (PADI)
5 Redback_00:4f:7d 3Com_50:f0:df PPPoED Active Discovery Offer
(PADO)
6 3Com_50:f0:df Redback_00:4f:7d PPPoED Active Discovery
Request (PADR)
7 Redback_00:4f:7d 3Com_50:f0:df PPPoED Active Discovery
Session-confirmation (PADS)
8 Redback_00:4f:7d 3Com_50:f0:df PPP LCP PPP LCP Configuration
Request
Et voici, exprime dans toute sa beaut, la magie des systmes bien normaliss : Ca va se
passer exactement comme c'est dit dans les textes.
Exactement ? Voyons a de plus prs
Le paquet PADI ( PPPoE Active Discovery Initiation) :
Les htes envoient en broadcast un paquet PADI. Le champ CODE est mis 0x09 et le
champ SESSION_ID 0x0000.
Le paquet PADI doit contenir un TAG de type Service-Name, indiquant le service que l'hte
demande ainsi que d'autres numros correspondant d'autres types de TAG. Un paquet PADI
entier (incluant l'en-tte PPPoE) ne doit pas dpasser 1484 octets afin de laisser la place
suffisante pour qu'un agent relais puisse ajouter un TAG Relay-Session-Id.
Note: A l'usage, j'ai pu constater que les rapports d'analyse de trames affichs en franais
peuvent induire en erreur. Ces rapports sont gnrs par le renifleur (sniffer), parce qu'il
connat par cur le format des trames qu'il capture et qu'il les interprte de faon plus lisible
. Dans la pratique, les donnes captures ne sont rien de plus que la suite d'octets, ici
surligns.Dans la trame qui suit, il n'y en a que 32, qui gnrent 24 lignes d'explications .
0000 ff ff ff ff ff ff 00 60 8c 50 f0 df 88 63 11 09 Ce sont les
information effectivement captures
0010 00 00 00 0c 01 01 00 00 01 03 00 04 3d 53 00 00
...............................................

Frame 4 (32 on wire, 32 captured) Ceci n'est que du
calcul ralis par le sniffer
Arrival Time: Dec 3, 2001 15:12:09.426679 ces informations ne
correspondent aucune donne
Time delta from previous packet: 10.824602 seconds crite dans la
trame
Time relative to first packet: 11.398184 seconds
Frame Number: 4
Packet Length: 32 bytes
Capture Length: 32 bytes
................................................
Ethernet II Les informations
captures commencent ici
Destination: ff:ff:ff:ff:ff:ff (ff:ff:ff:ff:ff:ff) ff ff ff ff ff ff
*** La destination est bien un broadcast
sur les adresses MAC
Source: 00:60:8c:50:f0:df (3Com_50:f0:df) 00 60 8c 50 f0 df
*** La source est l'adresse MAC
de l'interface Ethernet
*** connecte au modem ADSL
Type: PPPoE Discovery (0x8863) 88 63
*** ETHER_TYPE est bien 8863H
PPP-over-Ethernet Discovery
Version: 1
Type: 1 11
Code: Active Discovery Initiation (PADI) 09
*** C'est bien une trame PADI Le champ code est 9
Session ID: 0000 00 00
*** Le champ Session_ID est bien 0
Payload Length: 12 00 0c
PPPoE Tags
Tag: Service-Name 01 01 00 00
*** Le Tag Service-Name, comme indiqu
Tag: Host-Uniq 01 03 00 04
*** Et un autre Tag: Host-Uniq 3d 53 00 00
Binary Data: (4 bytes)
Remarquez la similitude avec DHCP discovery dans le prococole DHCP. Le client qui se
rveille envoie un broadcast ARP pour trouver un interlocuteur qui devra lui indiquer ses
paramtres de configuration.
Le Tag Host-Uniq est dcrit dans l'annexe A:
0x0103 Host-Uniq
Ce Tag est utilis par un hte pour associer de faon unique la rponse d'un concentrateur
d'accs (PADO ou PADS) la requte d'un hte particulier (PADI ou PADR). Sa valeur est
une donne binaire de n'importe quelle valeur et de n'importe quelle longueur, choisies par
l'hte. Cette valeur n'est pas interprte par le concentrateur d'accs
Un hte PEUT inclure un Tag Host-Uniq dans un paquet PADI ou PADR. Si le
concentrateur d'accs reoit ce Tag, il DOIT inclure ce Tag sans le modifier dans la rponse
PADO ou PADS associe.
Ce Tag (0x0103) est suivi du nombre d'octets qu'il contient (0x0004) et des octets de donnes
(0x3d530000). Nous devrions donc thoriquement retrouver ce Tag dans son intgralit dans
la rponse PADO qui suit
Il n'y a pas ici d'agent de relais. Pour l'instant, tout est donc bien conforme.
Note: Le Payload est assez difficile bien traduire, peut-tre par Donnes utiles (mais
elles sont toutes utiles). Comme en mot--mot, a donne : la charge qui paye , nous dirons
charge utile . En s'appuyant sur cette analyse de trames, on constate que le payload
length n'est autre que le nombre d'octets qui suivent, ce qui sera confirm dans la suite.
Ce payload contient des tags , un peu plus facile traduire
Le paquet PADO (PPPoE Active Discovery Offer)
Quand le concentrateur d'accs reoit un PADI qu'il peut servir, il rpond en envoyant un
paquet PADO. l'adresse de destination est l'adresse unicast de l'hte envoy dans le PADI. Le
champ CODE est fix 0x07 et le champ SESSION_ID 0x0000.
Le paquet PADO doit contenir un TAG AC-Name : c'est le nom du concentrateur d'accs, un
TAG Service-Name identique celui contenu dans le PADI. Les autres numros
correspondent aux autres services qui peuvent tre offerts par le concentrateur d'accs. Si le
concentrateur d'accs ne peut pas servir le PADI alors celui-ci ne rpond pas avec un PADO.
Le client qui a dmarr sa connexion PPPoE vient d'essayer de dcouvrir un interlocuteur, le
ou les interlocuteurs prsents vont maintenant lui rpondre.
0000 00 60 8c 50 f0 df 00 02 3b 00 4f 7d 88 63 11 07
0010 00 00 00 2b 01 01 00 00 01 03 00 04 3d 53 00 00
0020 01 02 00 17 36 32 30 33 32 30 33 30 31 30 38 33
0030 37 36 2d 42 53 4d 41 52 31 30 32 01 01 00 00

Frame 5 (63 on wire, 63 captured)
Arrival Time: Dec 3, 2001 15:12:09.479615
Time delta from previous packet: 0.052936 seconds
Time relative to first packet: 11.451120 seconds
Frame Number: 5
Packet Length: 63 bytes
Capture Length: 63 bytes
Ethernet II
Destination: 00:60:8c:50:f0:df (3Com_50:f0:df) 00 60 8c 50 f0 df
*** La destination est ici le client
Source: 00:02:3b:00:4f:7d (Redback_00:4f:7d) 00 02 3b 00 4f 7d
*** Et la source, l'quipement
du gestionnaire du rseau
Type: PPPoE Discovery (0x8863) 88 63
*** C'est toujours un type Discovery
PPP-over-Ethernet Discovery
Version:1 11
Type: 1
Code: Active Discovery Offer (PADO) 07
*** Mais ici, c'est un Offer
Session ID: 0000 00 00
Payload Length: 43 00 2b 00 2b
PPPoE Tags
Tag: Service-Name 01 01 00 00
*** Nous retrouvons, comme prvu,
le Tag Host-Uniq
Tag: Host-Uniq 01 03 00 04
Binary Data: (4 bytes) 3d 53 00 00
*** Le Tag AC_NAME ...
Tag: AC-Name 01 02 00 17
*** Et sa valeur (nom du concentrateur d'accs)
String Data: 62032030108376-BSMAR102 36 32 30 33 32 30 33
30 31 30 38 33
37 36 2d 42 53 4d 41
52 31 30 32
Tag: Service-Name 01 01 00 00
Tout ceci devient monotone, il n'y a aucune surprise Tant pis pour le suspense , il n'y
aura pas d'autres rponses PADO. Nous allons donc maintenant retrouver l'hte qui envoie un
paquet PADR (Session-Request).
Le paquet PADR (PPPoE Active Discovery Request)
Puisque le PADI a t envoy en broadcast l'hte peut recevoir plusieurs PADO. L'hte
examine les paquets PADO reus et en choisit un. Le choix peut tre bas sur le nom du
concentrateur d'accs ou sur les services offerts. L'hte envoie alors un paquet PADR au
concentrateur d'accs slectionn. Le champ DESTINATION_ADDR est l'adresse Ethernet
unicast du concentrateur d'accs qui a envoy par le PADO. Le champ CODE est 0x19 et le
champ SESSION_ID est la valeur 0x0000.
Le paquet PADR doit contenir exactement un TAG_TYPE contenant le nom du service que
l'hte demande ainsi que d'autres numros d'autres types de TAG.
0000 00 02 3b 00 4f 7d 00 60 8c 50 f0 df 88 63 11 19
0010 00 00 00 0c 01 01 00 00 01 03 00 04 3d 53 00 00

Frame 6 (32 on wire, 32 captured)
Arrival Time: Dec 3, 2001 15:12:09.480206
Time delta from previous packet: 0.000591 seconds
Time relative to first packet: 11.451711 seconds
Frame Number: 6
Packet Length: 32 bytes
Capture Length: 32 bytes
Ethernet II
*** Vous avez compris maintenant le niveau Ethernet...
Destination: 00:02:3b:00:4f:7d (Redback_00:4f:7d) 00 02 3b 00
4f 7d
Source: 00:60:8c:50:f0:df (3Com_50:f0:df) 00 60 8c 50
f0 df
Type: PPPoE Discovery (0x8863) 88 63
*** Et je vous laisse faire la suite tout seuls...
PPP-over-Ethernet Discovery
Version: 1
Type: 1 11
Code: Active Discovery Request (PADR) 19
Session ID: 0000 00 00
Payload Length: 12 00 0c
PPPoE Tags
Tag: Service-Name 01 01 00 00
Tag: Host-Uniq 01 03 00 04
Binary Data: (4 bytes) 3d 53 00 00
Il n'y a pas de grosses diffrences avec le paquet PADI, si ce n'est que l'adresse du destinataire
n'est plus une adresse de broadcast, mais celle du concentrateur d'accs, puisque maintenant,
on la connat.
Finalement, le Concentrateur d'accs va confirmer cette connexion :
Le paquet PADS(PPPoE Active Discovery Session-confirmation)
Quand le Concentrateur d'Accs reoit un paquet PADR, il se prpare commencer une
session PPP. Il produit un SESSION_ID unique pour la session PPPOE et rpond l'hte avec
un paquet PADS. Le champ DESTINATION_ADDR est l'adresse Ethernet unicast de l'hte
qui a envoy le PADR. Le champ CODE est mis 0x65 et le SESSION_ID DOIT tre mis
la valeur unique produite pour cette session PPPOE.
Le paquet PADS contient exactement un TAG_TYPE contenant le nom du service sous lequel
le concentrateur d'accs a accept la session PPPoE et d'autres numros pour d'autres types de
TAG.
Si le concentrateur d'accs n'accepte pas le service propos dans le PADR, il doit rpondre
avec des PADS contenant TAG _TYPE Service-Name-Error (et d'autres numros d'autres
TAG). Dans ce cas le SESSION_ID DOIT tre la valeur 0x0000.
0000 00 60 8c 50 f0 df 00 02 3b 00 4f 7d 88 63 11 65
0010 02 f4 00 2b 01 01 00 00 01 03 00 04 3d 53 00 00
0020 01 02 00 17 36 32 30 33 32 30 33 30 31 30 38 33
0030 37 36 2d 42 53 4d 41 52 31 30 32

Frame 7 (60 on wire, 60 captured)
Arrival Time: Dec 3, 2001 15:12:09.547915
Time delta from previous packet: 0.067709 seconds
Time relative to first packet: 11.519420 seconds
Frame Number: 7
Packet Length: 60 bytes
Capture Length: 60 bytes
Ethernet II
Destination: 00:60:8c:50:f0:df (3Com_50:f0:df) 00 60 8c 50 f0 df
Source: 00:02:3b:00:4f:7d (Redback_00:4f:7d) 00 02 3b 00 4f 7d
Type: PPPoE Discovery (0x8863) 88 63
PPP-over-Ethernet Discovery
Version: 1
Type: 1 11
Code: Active Discovery Session-confirmation (PADS) 65
*** Nous rcuprons ici la Session-ID
Session ID: 02f4 02 f4
Payload Length: 43 00 2b
PPPoE Tags
Tag: Service-Name 01 01 00 00
Tag: Host-Uniq 01 03 00 04
Binary Data: (4 bytes) 3d 53 00 00
Tag: AC-Name 01 02 00 17
String Data: 62032030108376-BSMAR102 36 32 30 33 32 30
33 30 31 30 38 33
37 36 2d 42 53 4d
41 52 31 30 32
Il n'y a pas eu de problmes, la session est accepte par les deux partenaires et elle aura
l'identifiant 0x02f4. Nous retrouverons systmatiquement cet identifiant dans tous les paquets
qui suivront.
C'est fini pour l'tablissement de la session PPPoE. Comme vous avez pu le remarquer, c'est
assez simple et il n'y a pas grand chose de fait. Tout de mme, faisons un petit bilan:
L'hte client a cherch et trouv un Concentrateur d'accs.
Le Concentrateur d'accs a dlivr l'hte client:
o Son adresse MAC (ici : 00:02:3b:00:4f:7d)
o Un numro de session PPPoE (ici : 0x02f4)
Etablissement de PPP
Tout ceci est trs bien, mais nous n'avons pas d'adresse IP, ni de passerelle, ni de DNS
Autant de choses ncessaires pour faire fonctionner correctement TCP/IP, sans oublier que,
pour l'instant, nous ne sommes toujours pas authentifis.
Le reste va maintenant tre ngoci par le protocole PPP, de la mme manire qu'avec une
connexion classique par modem RTC.
PPP est encore une autre affaire, qui dpasse le cadre de ce chapitre. Nous n'allons donc pas
tudier par le dtail les trames qui suivent. Nous allons tout de mme regarder comment les
informations qui nous manquent pour l'instant vont tre rcupres. Si vous dsirez
absolument approfondir PPP, vous avez les RFC 1661 traduites en franais ici.
Voici le sommaire des trames qui nous intressent :
8 Redback_00:4f:7d 3Com_50:f0:df PPP LCP PPP LCP Configuration
Request
9 3Com_50:f0:df Redback_00:4f:7d PPP LCP PPP LCP Configuration
Request
10 3Com_50:f0:df Redback_00:4f:7d PPP LCP PPP LCP Configuration
Ack
11 Redback_00:4f:7d 3Com_50:f0:df PPP LCP PPP LCP Configuration
Ack
12 3Com_50:f0:df Redback_00:4f:7d PPP LCP PPP LCP Echo Request
13 Redback_00:4f:7d 3Com_50:f0:df 0xc223 PPP Cryptographic
Handshake Auth. Protocol (0xc223)
14 3Com_50:f0:df Redback_00:4f:7d 0xc223 PPP Cryptographic
Handshake Auth. Protocol (0xc223)
15 Redback_00:4f:7d 3Com_50:f0:df PPP LCP PPP LCP Echo Reply
16 Redback_00:4f:7d 3Com_50:f0:df 0xc223 PPP Cryptographic
Handshake Auth. Protocol (0xc223)
17 Redback_00:4f:7d 3Com_50:f0:df PPP LCP PPP LCP Echo Request
18 Redback_00:4f:7d 3Com_50:f0:df PPP IPCP PPP IPCP Configuration
Request
19 3Com_50:f0:df Redback_00:4f:7d PPP IPCP PPP IPCP Configuration
Request
20 3Com_50:f0:df Redback_00:4f:7d PPP LCP PPP LCP Echo Reply
21 3Com_50:f0:df Redback_00:4f:7d PPP IPCP PPP IPCP Configuration
Ack
22 Redback_00:4f:7d 3Com_50:f0:df PPP IPCP PPP IPCP Configuration
Nak
23 3Com_50:f0:df Redback_00:4f:7d PPP IPCP PPP IPCP Configuration
Request
24 Redback_00:4f:7d 3Com_50:f0:df PPP IPCP PPP IPCP Configuration
Ack
25 Redback_00:4f:7d 3Com_50:f0:df IP Bogus IP header length
(0, must be at least 20)
26 Redback_00:4f:7d 3Com_50:f0:df PPP LCP PPP LCP Echo Request
27 3Com_50:f0:df Redback_00:4f:7d PPP LCP PPP LCP Echo Reply
Nous n'allons pas les dtailler, mais juste en extraire les points les plus importants. Dj, nous
allons sauter les LCP Echo request et reply, qui ne prsentent pas un intrt fondamental pour
ce qui nous intresse, si ce n'est qu'ils sont recommands par les RFC.
Le protocole LCP (Link Control Protocol) est transport par PPP. Sa fonction, comme son
nom l'indique, est de maintenir le bon tat du lien PPP. En particulier, c'est lui qui va
permettre de ngocier au dpart la configuration IP du client, ce que nous allons voir tout de
suite.
Demande de configuration de la part du concentrateur d'accs
Frame 8 (60 on wire, 60 captured)
...
Ethernet II Ethernet
Destination: 00:60:8c:50:f0:df (3Com_50:f0:df) La cible est le client

Source: 00:02:3b:00:4f:7d (Redback_00:4f:7d) La source est le
Concentrateur d'accs
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session PPPoE
...
Code: Session Data
Session ID: 02f4 Le Session-ID qui a t
ngoci prcdemment
Payload Length: 21
Point-to-Point Protocol PPP
Protocol: Link Control Protocol (0xc021)
PPP Link Control Protocol LCP
Code: Configuration Request (0x01)
Identifier: 0x6d
Length: 19
Options: (15 bytes)
MRU: 1492 Trs important!!!, nous
y reviendrons.
L'identification va tre crypte**
Authentication protocol: 5 bytes (Cryptographic
Handshake Auth. Protocol)
Authentication protocol: CHAP (0xc223) Le Nombre Magique
est sans intrt pour nous
Data (1 byte) (voir RFC 1661)
Magic number: 0x2889d071
MRU: Maximum Receive Unit, taille maximale en octets d'un paquet acceptable en rception.
C'est la valeur qui devra tre adopte pour le MTU (Maximum Transfert Unit) de
l'interlocuteur.
Demande de configuration de la part du client.
Frame 9 (36 on wire, 36 captured) Le client n'a pas
grand chose rclamer
... pour la
configuration...
Ethernet II
Destination: 00:02:3b:00:4f:7d (Redback_00:4f:7d)
Source: 00:60:8c:50:f0:df (3Com_50:f0:df)
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 02f4
Payload Length: 16
Point-to-Point Protocol
Protocol: Link Control Protocol (0xc021)
PPP Link Control Protocol
Code: Configuration Request (0x01)
Identifier: 0x01
Length: 14
Options: (10 bytes)
MRU: 1492 Le MRU, galement
1492.
Magic number: 0x694c9902
Mais pourquoi 1492 ? Une trame Ethernet ne doit pas dpasser 1500 Octets. Comme l'en-tte
de PPPoE fait 6 octets et que le PPP_ID est de 2 octets, il ne reste que 1492 octets pour le
PPP_MTU.
Acquittement du client
Frame 10 (41 on wire, 41 captured) Le client est
d'accord pour :
...
Ethernet II
Destination: 00:02:3b:00:4f:7d (Redback_00:4f:7d)
Source: 00:60:8c:50:f0:df (3Com_50:f0:df)
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 02f4
Payload Length: 21
Point-to-Point Protocol
Protocol: Link Control Protocol (0xc021)
PPP Link Control Protocol
Code: Configuration Ack (0x02)
Identifier: 0x6d
Length: 19
Options: (15 bytes)
MRU: 1492 Le MRU 1492
Authentication protocol: 5 bytes
Authentication protocol: CHAP (0xc223) le protocole CHAP
pour l'authentification
Data (1 byte)
Magic number: 0x2889d071 Et le numro
magique
Acquittement du concentrateur d'accs
Frame 11 (60 on wire, 60 captured) Le concentrateur
d'accs est d'accord pour:
...
Ethernet II
Destination: 00:60:8c:50:f0:df (3Com_50:f0:df)
Source: 00:02:3b:00:4f:7d (Redback_00:4f:7d)
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 02f4
Payload Length: 16
Point-to-Point Protocol
Protocol: Link Control Protocol (0xc021)
PPP Link Control Protocol
Code: Configuration Ack (0x02)
Identifier: 0x01
Length: 14
Options: (10 bytes)
MRU: 1492 Le MRU 1492
Magic number: 0x694c9902 Et le numro
magique.
Authentification du Concentrateur
Frame 13 (60 on wire, 60 captured) Le
concentrateur envoie au client
... un
paquet de donnes...
Ethernet II
Destination: 00:60:8c:50:f0:df (3Com_50:f0:df)
Source: 00:02:3b:00:4f:7d (Redback_00:4f:7d)
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 02f4
Payload Length: 31
Point-to-Point Protocol
Protocol: Cryptographic Handshake Auth. Protocol (0xc223)
Data (38 bytes)

0000 00 60 8c 50 f0 df 00 02 3b 00 4f 7d 88 64 11 00 .`.P....;.O}.d..
Le dtail de ce paquet pourrait tre
0010 02 f4 00 1f c2 23 01 01 00 1d 10 75 51 f4 58 40 .....#.....uQ.X@
dcrit en tudiant le protocole CHAP...
0020 38 9b 08 c2 8f 76 9f 8e 89 81 3c 42 53 4d 41 52 8....v....<BSMAR
Notez que le nom du concentrateur
0030 31 30 32 66 00 50 35 d1 cc 8f 00 00 102f.P5.....
apparat en clair
Authentification du client
Frame 14 (58 on wire, 58 captured) Le
client envoie au concentrateur
... un
paquet de donnes...
Ethernet II
Destination: 00:02:3b:00:4f:7d (Redback_00:4f:7d)
Source: 00:60:8c:50:f0:df (3Com_50:f0:df)
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 02f4
Payload Length: 38
Point-to-Point Protocol
Protocol: Cryptographic Handshake Auth. Protocol (0xc223)
Data (36 bytes)

0000 00 02 3b 00 4f 7d 00 60 8c 50 f0 df 88 64 11 00 ..;.O}.`.P...d.. Le
dtail de ce paquet pourrait tre
0010 02 f4 00 26 c2 23 02 01 00 24 10 38 af 00 96 c1 ...&.#...$.8....
dcrit en tudiant le protocole CHAP...
0020 b0 95 b2 b2 ee 6f be bb d4 cd 5e 66 74 69 2f xx .....o....^fti/x
Notez que le nom du client apparat
0030 xx xx xx xx xx xx 40 66 74 69 xxxxxx@fti
galement en clair

(les x, c'est de ma part).
Le verdict...
Frame 16 (61 on wire, 61 captured)
...
Ethernet II
Destination: 00:60:8c:50:f0:df (3Com_50:f0:df)
Source: 00:02:3b:00:4f:7d (Redback_00:4f:7d)
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 02f4
Payload Length: 41
Point-to-Point Protocol
Protocol: Cryptographic Handshake Auth. Protocol (0xc223)
Data (39 bytes)

0000 00 60 8c 50 f0 df 00 02 3b 00 4f 7d 88 64 11 00 .`.P....;.O}.d.. On
ne sait pas exactement comment, mais...
0010 02 f4 00 29 c2 23 03 01 00 27 43 48 41 50 20 61 ...).#...'CHAP a
L'authentification a russi.
0020 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 73 75 uthentication su
0030 63 63 65 73 73 2c 20 75 6e 69 74 20 39 ccess, unit 9
Requte de configuration du concentrateur
Frame 18 (60 on wire, 60 captured) A vrai dire
... Ce n'est pas exactement
une requte

Ethernet II
Destination: 00:60:8c:50:f0:df (3Com_50:f0:df) Le concentrateur n'a
rien demander
Source: 00:02:3b:00:4f:7d (Redback_00:4f:7d)
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 02f4
Payload Length: 12
Point-to-Point Protocol
Protocol: IP Control Protocol (0x8021)
PPP IP Control Protocol
Code: Configuration Request (0x01) il annonce juste son IP
Identifier: 0x6e
Length: 10
Options: (6 bytes)
IP address: 217.128.147.1
Requte de configuration du client
Frame 19 (44 on wire, 44 captured) Ici, c'est plus
amusant.
... Le client propose
une configuration
Ethernet II
Destination: 00:02:3b:00:4f:7d (Redback_00:4f:7d)
Source: 00:60:8c:50:f0:df (3Com_50:f0:df)
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 02f4
Payload Length: 24
Point-to-Point Protocol
Protocol: IP Control Protocol (0x8021)
PPP IP Control Protocol
Code: Configuration Request (0x01)
Identifier: 0x01
Length: 22
Options: (18 bytes)
IP address: 0.0.0.0 Comme il se rveille
juste, il propose
Primary DNS server IP address: 0.0.0.0 une configuration
plutt farfelue...
Secondary DNS server IP address: 0.0.0.0
Acquittement de la configuration du concentrateur
Frame 21 (32 on wire, 32 captured)
...
Ethernet II
Destination: 00:02:3b:00:4f:7d (Redback_00:4f:7d)
Source: 00:60:8c:50:f0:df (3Com_50:f0:df)
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 02f4
Payload Length: 12
Point-to-Point Protocol
Protocol: IP Control Protocol (0x8021)
PPP IP Control Protocol
Code: Configuration Ack (0x02) Le client est
d'accord...
Identifier: 0x6e
Length: 10
Options: (6 bytes) Pour l'adresse IP
du concentrateur
IP address: 217.128.147.1 (qui deviendra sa
passerelle par dfaut)



Refus de la configuration du client
Frame 22 (60 on wire, 60 captured) On s'en souvient, le
client avait
... propos une
configuration stupide.
Ethernet II
Destination: 00:60:8c:50:f0:df (3Com_50:f0:df) En fait, elle ne
l'tait pas.
Source: 00:02:3b:00:4f:7d (Redback_00:4f:7d) Ne connaissant pas
sa configuration,
Type: PPPoE Session (0x8864) le client indique
des adresses
PPP-over-Ethernet Session toutes zro.
Version: 1
Type: 1 C'est dans le but
que le concentrateur
Code: Session Data lui propose la
place des adresses
Session ID: 02f4 valides
Payload Length: 24
Point-to-Point Protocol
Protocol: IP Control Protocol (0x8021)
PPP IP Control Protocol
Code: Configuration Nak (0x03)
Identifier: 0x01
Length: 22
Options: (18 bytes)
IP address: 217.128.147.4 Son IP
Primary DNS server IP address: 193.252.19.3 Et le (ici les) DNS.
Secondary DNS server IP address: 193.252.19.4
Re-requte de configuration du client
Frame 23 (44 on wire, 44 captured) Un protocole, c'est
parfois bte,
... mais toujours
disciplin.
Ethernet II
Destination: 00:02:3b:00:4f:7d (Redback_00:4f:7d)
Source: 00:60:8c:50:f0:df (3Com_50:f0:df)
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 02f4
Payload Length: 24
Point-to-Point Protocol
Protocol: IP Control Protocol (0x8021)
PPP IP Control Protocol
Code: Configuration Request (0x01)
Identifier: 0x02
Length: 22 Le client refait une
requte de configuration
Options: (18 bytes) cette fois-ci avec
les adresses qui lui ont t
IP address: 217.128.147.4 suggres par le
concentrateur...
Primary DNS server IP address: 193.252.19.3
Secondary DNS server IP address: 193.252.19.4
Acquittement de la configuration du client
Frame 24 (60 on wire, 60 captured) Le concentrateur,
sous peine de passer
... pour un fou,
Ethernet II ne pourra pas faire
autrement (en principe)
Destination: 00:60:8c:50:f0:df (3Com_50:f0:df) que d'accepter cette
configuration
Source: 00:02:3b:00:4f:7d (Redback_00:4f:7d) qu'il a propos lui-
mme.
Type: PPPoE Session (0x8864)
PPP-over-Ethernet Session
Version: 1
Type: 1
Code: Session Data
Session ID: 02f4
Payload Length: 24
Point-to-Point Protocol
Protocol: IP Control Protocol (0x8021)
PPP IP Control Protocol
Code: Configuration Ack (0x02) Voil qui est fait.
Identifier: 0x02
Length: 22
Options: (18 bytes)
IP address: 217.128.147.4
Primary DNS server IP address: 193.252.19.3
Secondary DNS server IP address: 193.252.19.4
Toute cette squence n'aura dur que 3 secondes .
Etablissement d'une session PPPoE entre le client et le concentrateur, avec
tablissement d'un identifiant de session.
Authentification du client de la part du concentrateur par LCP (sur PPP)
Obtention d'une configuration valide pour le client (Adresse IP, Adresses de DNS et
Passerelle, la passerelle tant bien entendu le concentrateur lui-mme).
Conclusions
J'espre que cet expos vous aura clair sur le fonctionnement de ce protocole qui tend
devenir universel sur les connexions haut dbit . Les points principaux retenir me semble
tre les suivants:
Etablissement d'une connexion PPP au dessus d'Ethernet avec obtention d'un
identifiant de session.
Identification du client avec LCP, protocole de gestion et de maintenance d'une
connexion PPP.
Obtention des paramtres de connexion IP par ce mme protocole LCP.
Transport des datagrammes IP par PPP, lui mme transport par Ethernet.
1)
oui, a date un peu, mais a reste vrai
MTU, MSS etc.
Coupons les cheveux en quatre
PPPoE prsente un inconvnient considrable, du au fait qu'il encapsule de l'IP avant de le
faire transporter sur Ethernet. Cette couche supplmentaire apporte quelques octets de plus
dans la trame Ethernet, ce qui est trs lourd de consquences.
Sans prcautions particulires, l'internaute risque de rencontrer le fameux problme du gel
de la connexion . Nous allons maintenant analyser dans le dtail cet inconvnient et, peut-
tre, trouver les solutions qui permettraient de supprimer ce dsagrment.
Circulation des donnes
Une fois encore, nous devrons nous reporter au modle OSI ou DOD. Rappelez-vous qu'entre
l'applications qui mettent et reoivent les donnes, il y a quelques couches traverser pour
arriver jusqu'au support physique du transport. Lorsqu'une donne est mise par une
application, elle descend les couches une une, chaque couche ajoutant des informations
supplmentaires aux donnes initiales. Le paquet grossit donc chaque fois qu'il descend d'une
couche.
Le problme va venir ici de la couche supplmentaire introduite par PPPoE. Celle-ci ajoute 8
octets supplmentaires, 8 octets de trop dans bien des cas.
L'IP facile sur Ethernet
Nous le savons, IP est fait pour tre transport par Ethernet. L'Internet a t ralis partir de
cet axiome.

Comme nous le voyons sur l'illustration, une trame Ethernet fait un maximum de 1518 octets,
ce qui laisse IP 1500 octets maximum. Tout l'Internet est bas sur ce postulat. Je rappelle
qu'il s'agit bien ici d'IP sur Ethernet ! Pas de PPPoE dans l'histoire.
PPPoE, l'intrus

Que se passe-t-il lorsque PPPoE s'installe ? Il ajoute, nous l'avons dit, une couche
supplmentaire entre IP qu'il transporte et Ethernet qui le transporte. PPPoE ajoute au total 8
octets supplmentaires. Vous voulez le dtail ?
PPPoE
o 1 octet pour la version + le type
o 1 octet de code (voyez RFC)
o 2 octets pour l'identificateur de session
o 2 octets pour la longueur des donnes transportes (payload)
PPP ajoute a 2 octets pour indiquer le protocole qu'il transporte
Si l'on part du principe que la trame Ethernet ne peut dpasser 1518 octets (si vous prfrez,
que la taille maximum du payload Ethernet ne doit pas dpasser 1500 octets), a veut dire que
la trame IP utile doit tre rduite 1492 octets.
Compliqu ?
Lorsque les donnes arrivent sur la couche IP, il se passe le phnomne suivant. IP ne sait pas
qu'en dessous de lui il y a PPP et non Ethernet. IP va donc considrer que sa longueur de
trame peut atteindre 1500 octets (Maximum Transfert Unit), puisque normalement Ethernet
sait transporter un volume de donnes de cette taille.
Le MTU est fix, en principe, selon la nature du rseau situ en dessous de IP.
Lorsque c'est de l'Ethernet, le MTU est 1500
Lorsque c'est PPPoE, le MTU doit donc tomber 1492.
(Sur du token ring 16 Mbps, IBM utilise un MTU pourrait aller jusqu' 17 914 !)
Normalement, lorsque le MTU est le mme partout sur les divers composants de l'inter rseau,
tout se passe bien.
Mais o est le problme ?
Dans une configuration comme celle qui suit. Forcment, quelque part, il va y avoir des
configurations comme celle-ci, un routeur avec de l'IP sur Ethernet d'un ct et de l'IP sur PPP
sur Ethernet de l'autre. Le paquet jaune reprsente le datagramme IP. Le point dlicat est
cercl de rouge.
Ce paquet, cercl de rouge, ne doit pas dpasser 1500 octets, cause des limites d'Ethernet.
De ce ct l du routeur, on le sait, mais pas de l'autre.
Si, sur l'entre ( gauche) le datagramme IP fait 1500 octets, il n'a pas de problmes pour tre
vhicul par Ethernet. Il remonte les couches de gauche et au niveau IP, redescend les
couches ( droite). l, il passe par PPPoE qui lui ajoute ses 8 octets. Le paquet devient trop
gros pour Ethernet.

Dans ce cas, plusieurs ventualits apparaissent.
Le paquet est fragment. En gros, il rentre une seule trame, il en ressort deux.
Cette mthode prsente quelques inconvnients:
o Le rseau va vhiculer deux fois plus de trames
o Il faudra rassembler les fragments la rception.
Le paquet est limin. Il peut alors se passer deux choses.
o Un signal ICMP est renvoy l'metteur pour lui signaler que la trame a t
rejete cause de sa longueur. (Fragmentation needed). L'metteur va alors
recommencer, avec des paquets plus petits, jusqu' ce que a passe.
C'est la mthode Path MTU Discovery , mthode de dcouverte du MTU
sur un chemin donn.
o Aucun signal ICMP n'est renvoy l'metteur, parce qu'ICMP est une source
de risques pour les routeurs. Beaucoup de firewals bloquent tout trafic ICMP
sans discernement (ce qui est une pratique dtestable). Dans ce cas, les paquets
n'atteindront jamais leur destination, et la source, n'tant pas informe de la
raison, finira par clturer la session.
Finalement, dans un cas concret :
Vous envoyez une requte un serveur HTTP (ou FTP). Votre requte arrive jusqu'au
serveur.
Le serveur vous renvoie les donnes. Ces donnes sont volumineuses et les
datagrammes vont probablement atteindre 1500 octets.
Lorsque ces donnes vont tre transportes par PPPoE, le volume de donnes va
passer plus de 1500 octets et le premier quipement qui devra le faire transiter
choisira l'une des trois mthodes indiques ci dessus.
Si c'est la troisime qui est choisie (on jette sans prvenir personne, ou, du moins, sans
pouvoir prvenir personne), la connexion TCP va se geler irrmdiablement.
Et voil le (sale) travail
Ce problme peut galement apparatre chez vous, si vous partagez votre connexion sur un
rseau priv. Votre routeur, quel qu'il soit, sera confront au mme inconvnient. Vous
risquez de devoir modifier le MTU de tous les htes de votre rseau priv. Nous verrons que
si la passerelle est sous Linux et utilise rp-pppoe, le problme pourra tre contourn.
Comment rsoudre le problme en amont
Grce MSS (Maximum Segment Size).
Nous sommes ici au niveau TCP. TCP prpare les paquets de donnes envoyer IP. En
agissant sur la taille de ces paquets, on peut viter les problmes au niveau du MTU.
Comme l'on sait que les couches infrieures vont ajouter jusqu' 40 octets aux donnes, si l'on
prend un MSS de 1460 octets, on est peu prs certain que la taille des donnes transportes
au niveau Ethernet ne dpassera pas 1500. Le MSS est tabli lors de l'initiation d'une
connexion TCP. Le client annonce un MSS typiquement de 1460 dans son premier paquet
SYN et le serveur rpond dans le SYN/ACK. La trace qui suit est prise sur un poste Windows
XP situ sur un LAN connect l'internet par une passerelle Sous Debian. Un client FTP
(Filezilla), se connecte sur un serveur FTP de l'internet.
Frame 1 (62 bytes on wire, 62 bytes captured)
Arrival Time: Jul 15, 2004 14:04:53.598297000
Time delta from previous packet: 0.000000000 seconds
Time since reference or first frame: 0.000000000 seconds
Frame Number: 1
Packet Length: 62 bytes
Capture Length: 62 bytes
Ethernet II, Src: 00:05:5d:47:f5:c5, Dst: 00:90:27:71:43:c7
Destination: 00:90:27:71:43:c7 (Intel_71:43:c7)
Source: 00:05:5d:47:f5:c5 (D-Link_47:f5:c5)
Type: IP (0x0800)
Internet Protocol, Src Addr: 192.168.0.10 (192.168.0.10), Dst Addr:
195.83.118.1 (195.83.118.1)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 48
Identification: 0x72da (29402)
Flags: 0x04 (Don't Fragment)
0... = Reserved bit: Not set
.1.. = Don't fragment: Set
### Le flag Don't fragment est mis, ce qui permet
ventuellement de dcouvrir
### le MTU, si tout se passe bien au niveau d'ICMP
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: TCP (0x06)
Header checksum: 0x8de6 (correct)
Source: 192.168.0.10 (192.168.0.10)
Destination: 195.83.118.1 (195.83.118.1)
Transmission Control Protocol, Src Port: kpop (1109), Dst Port: ftp (21),
Seq: 1814706075, Ack: 0, Len: 0
Source port: kpop (1109)
Destination port: ftp (21)
Sequence number: 1814706075
Header length: 28 bytes
Flags: 0x0002 (SYN)
0... .... = Congestion Window Reduced (CWR): Not set
.0.. .... = ECN-Echo: Not set
..0. .... = Urgent: Not set
...0 .... = Acknowledgment: Not set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..1. = Syn: Set
.... ...0 = Fin: Not set
Window size: 16384
Checksum: 0xa0e8 (correct)
Options: (8 bytes)
Maximum segment size: 1460 bytes
NOP
NOP
SACK permitted
Et le serveur rpond :
Frame 2 (62 bytes on wire, 62 bytes captured)
Arrival Time: Jul 15, 2004 14:04:53.638354000
Time delta from previous packet: 0.040057000 seconds
Time since reference or first frame: 0.040057000 seconds
Frame Number: 2
Packet Length: 62 bytes
Capture Length: 62 bytes
Ethernet II, Src: 00:90:27:71:43:c7, Dst: 00:05:5d:47:f5:c5
Destination: 00:05:5d:47:f5:c5 (D-Link_47:f5:c5)
Source: 00:90:27:71:43:c7 (Intel_71:43:c7)
Type: IP (0x0800)
Internet Protocol, Src Addr: 195.83.118.1 (195.83.118.1), Dst Addr:
192.168.0.10 (192.168.0.10)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 48
Identification: 0x0000 (0)
Flags: 0x04 (Don't Fragment)
0... = Reserved bit: Not set
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 49
Protocol: TCP (0x06)
Header checksum: 0x4fc1 (correct)
Source: 195.83.118.1 (195.83.118.1)
Destination: 192.168.0.10 (192.168.0.10)
Transmission Control Protocol, Src Port: ftp (21), Dst Port: kpop (1109),
Seq: 5846264, Ack: 1814706076, Len: 0
Source port: ftp (21)
Destination port: kpop (1109)
Sequence number: 5846264
Acknowledgement number: 1814706076
Header length: 28 bytes
Flags: 0x0012 (SYN, ACK)
0... .... = Congestion Window Reduced (CWR): Not set
.0.. .... = ECN-Echo: Not set
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..1. = Syn: Set
.... ...0 = Fin: Not set
Window size: 5840
Checksum: 0x94be (correct)
Options: (8 bytes)
Maximum segment size: 1452 bytes
NOP
NOP
SACK permitted
Donc nous serons d'accord sur un MSS de 1452 octets, ce qui donnera au sortir de la couche
IP un paquet d'un maximum de 1492 octets. On est bon pour PPPoE.
Il est intelligent ce serveur, il a compris tout seul que je me connectais via PPPoE ?
Non, ce n'est pas de l'intelligence, mais un gros bricolage opr en douce par le client PPPoE
de la passerelle. Lorsque le paquet passe par ppp0, le client PPPoE substitue cette valeur de
MSS celle que le serveur a annonc. Ainsi, le client du LAN agira en consquence.
Le client PPPoE de Debian est une manation de RP-PPPOE. La mme manipulation est donc
faite sur d'autres distributions, qui utilisent RP-PPPoE.
C'est pas trs propre, a ne plaira pas du tout IPsec, qui trouvera un paquet falsifi et ne le
laissera pas passer, mais dans le cas classique d'IP normal a rsout le problme sans qu'il
soit ncessaire d'intervenir sur tous les postes du LAN, du moins pour TCP. Cette mthode
permet de contourner le problme du path to MTU qui, comme nous l'avons vu plus haut,
ne fonctionne correctement que si ICMP n'est pas bloqu quelque part sur le chemin.
Pour les utilisateurs de GNU/Linux, il existe dans les dernires versions d'IPtables, une cible
particulire qui permet de raliser ce genre de travail sur le MSS. Je ne rsiste pas au plaisir
de vous citer un extrait de ce HOWTO :
Ce patch par Marc Boucher, ajoute une nouvelle target qui vous permet d'examiner et de
changer le MSS dans les paquets TCP SYN, pour contrler la taille maximum pour cette
connexion.
Comme l'explique Marc lui mme, c'est un hack, utilis pour rsoudre les problmes
engendrs par ces ISPs ttus comme des mules qui bloquent les paquets ICMP Fragmentation
Needed tort.
DNS
Comme : Domain Name System
La rsolution des noms
Tous les internautes vous le diront, l'URL est le gouvernail de la navigation sur le Net.
URL : Uniform Resource Locator /C'est la mthode d'accs un document distant. Un
lien hypertexte avec une syntaxe de la forme : <Type de
connexion>://<FQDN>/[<sous-rpertoire>]/.../<nom du document>. Le RFC
1034 dfinit les concepts de ce systme ;
FQDN : Full Qualified Domain Name. Le nom complet d'un hte, sur l'internet, c'est-
-dire de la machine jusqu'au domaine, en passant par les sous-domaines.
Les serveurs DNS
Ils sont en place pour permettre la rsolution de de FQDN en adresses IP (et rciproquement,
si ncessaire). En utilisation courante, nous exploitons un serveur DNS rcursif dont
l'adresse IP est gnralement fournie par DHCP ou RADIUS, suivant le cas. Ces serveurs ne
grent pas obligatoirement de zones particulires, mais savent effectuer les recherches
ncessaires dans une architecture arborescente que nous allons voir en dtail, pour rsoudre
n'importe quel nom d'hte.
Cette architecture arborescente est construite au niveau mondial et nous verrons que c'est une
petite merveille d'organisation.
Objectifs de ce chapitre
L'objectif avou est double :
fournir aux internautes non spcialistes les informations de base ncessaires la
comprhension de la rsolution des noms ;
donner des informations approfondies sur les mcanismes utiliss ceux qui
souhaitent comprendre plus en profondeur le fonctionnement de DNS.
Notions de base
Dcouverte du serveur DNS utilis
Donc, notre fournisseur d'accs nous propose une ou plusieurs adresses de serveurs DNS
rcursifs, et notre systme va les rcuprer lors de sa configuration IP. Pour connaitre ces
adresses, il faut savoir retrouver sa configuration. La faon de faire varie suivant le systme
d'exploitation utilis.
Le clicodrome Windows propose quelques chemins plus ou moins dtourns. Le plus simple
tant sans doute d'utiliser la commande nslookup dans une invite de commandes :
C:\Documents and Settings\chris>nslookup
Serveur par dfaut : dns1.proxad.net
Address: 212.27.40.240
Nous sommes ici dans le cas d'une machine sous Windows XP, connecte une FreeBox en
mode pont ethernet (nous n'exploitons pas les fonctions de routage). Il est galement
possible de rcuprer l'information avec la commande :
C:\Documents and Settings\chris>ipconfig /all

Configuration IP de Windows
...
Carte Ethernet Connexion au rseau local:
...
Serveurs DNS . . . . . . . . . . : 212.27.40.240
212.27.40.241
Pour les distributions GNU/Linux, l'information se trouve gnralement dans le fichier
/etc/resolv.conf :
# cat /etc/resolv.conf
nameserver 212.27.40.240
nameserver 212.27.40.241
Test de rsolution
Windows XP propose la commande nslookup, qui permet d'effectuer une rsolution
manuellement. Exemple :
C:\Documents and Settings\caleca>nslookup irp.nain-t.net
Serveur par dfaut : dns1.proxad.net
Address: 212.27.40.240

Rponse ne faisant pas autorit :
Nom : irp.nain-t.net
Address: 213.186.40.149
a fonctionne, et le Rponse ne faisant pas autorit est se mettre sous le coude, nous
comprendrons plus tard ce que cela veut dire.
Dans les systmes GNU/Linux, la commande nslookup n'est plus maintenue. Les outils
retenir sont host et dig.
# host irp.nain-t.net
irp.nain-t.net has address 213.186.40.149
Quel que soit le service que nous utilisons sur un rseau, navigateur web, client de
messagerie, IRC, ds lors que nous identifions le serveur interrog par son nom, le systme
devra effectuer une rsolution de ce nom, de manire trouver l'adresse IP correspondante, et
exploitera les services du serveur DNS, comme nous l'avons fait avec nslookup ou host.
Analyse d'un FQDN
Prenons un exemple un peu compliqu, comme www.education.gouv.fr ; en toute rigueur,
il serait plus correct d'crire www.education.gouv.fr. (avec un point final, subtile
diffrence).

la partie la plus gauche reprsente toujours un hte ;
la partie la plus droite reprsente toujours un domaine gnrique (TLD) ;
entre les deux, les ventuels sous-domaines et le domaine dpos de l'entit concerne.
Ainsi, un serveur (un hte), ici www appartiendrait un sous-domaine (education) du
domaine gouv, lui-mme tant un lment du domaine gnrique fr (la ralit n'est hlas pas
si simple, comme l'avenir va le montrer). Notons qu'il serait plus judicieux de parler d'un
nud ; en effet, un hte peut disposer de plusieurs interfaces rseau et donc disposer de
plusieurs adresses IP.
Nous avons donc une structure arborescente dont l'origine est le fameux point final, que l'on
omet gnralement, mais qui existe bel et bien et qui reprsente la racine de l'arbre. Nous
pouvons d'ailleurs utiliser la commande host comme ceci :
$ host www.education.gouv.fr.
www.education.gouv.fr is an alias for front.webedu.men.aw.atosorigin.com.
front.webedu.men.aw.atosorigin.com has address 160.92.130.142
Tiens, voil autre chose
www.education.gouv.fr ne serait pas un vrai nom , mais simplement un synonyme de
front.webedu.men.aw.atosorigin.com ? Encore une remarque se mettre sous le coude.
En effet, DNS prvoit qu'un hte (un nud) puisse s'appeler de diverses manires, parfois trs
diffrentes comme c'est le cas ici. L'claircissement viendra sans doute dans la suite de ce
chapitre.
Pourquoi serveur rcursif ?
Dans la suite de ce chapitre, nous allons voir d'un peu plus prs comment un serveur DNS est
structur et comment l'architecture arborescente d'un FQDN est en fait l'image d'une
arborescence de serveurs DNS spcialiss.
A priori, un serveur DNS rcursif n'a par lui-mme aucune rponse, du moins aucune rponse
qui fait autorit . en revanche il sait exactement rechercher qui et dans quel ordre il faut
interroger pour obtenir une rponse qui fait autorit . Comme en informatique, la paresse et
la mmoire sont deux qualits fondamentales, notre serveur DNS rcursif va conserver dans
sa mmoire pendant un certain temps les rsultats de recherche qu'il a obtenus et s'en
servira en priorit, pour avoir moins de travail. Nous tudierons tout ceci plus loin, mais cette
fonctionnalit explique dj la rponse ne faisant pas autorit vue plus haut. En effet,
lorsqu'un serveur DNS sert une rponse issue de son cache, il signale de cette manire qu'elle
ne vient pas d'un serveur de rfrence.
Notions avances
L'arborescence
Considrations gnrales
Par la pratique, nous savons que la partie la plus droite d'un FQDN est rgie par des usages
stricts. En effet, cette partie reprsente un Top Level Domain , Domaine de premier niveau
en franais. Il en existe un certain nombre, ils sont dfinis par l'ICANN (Internet Corporation
for Assigned Names and Numbers). Un article bien document sur Wikipdia vous donnera
plus de dtails.
A l'intrieur de chaque TLD, il est possible pour toute entreprise, association, personne
morale ou physique, d'enregistrer un nom de domaine. Il suffit d'en faire la demande auprs
d'un registar , bureau d'enregistrement en franais. Voir encore Wikipdia pour plus de
dtails. Le registar vrifiera l'unicit du domaine demand, les ventuelles conditions
d'obtention et se chargera des dmarches pour l'enregistrement du domaine. Le cout de
l'opration varie beaucoup en fonction du registar choisi.
Nous allons voir l'influence qu'a cette opration sur la structure du DNS.
La structure de DNS

Root-Servers
Nous avons au dpart une srie de serveurs DNS appels root-servers. Nous en trouvons la
liste et leur implantation dans le monde sur le site root-servers.org.
Ces serveurs ne sont pas rcursifs, ne savent pas rsoudre les FQDN, mais savent dire quels
serveurs sont spcialiss dans les divers TLDs.
Serveurs TLD
Ces serveurs DNS ne sont pas non plus rcursifs, mais pour un TLD donn, savent dire quels
sont les serveurs DNS qui grent un domaine appartenant ce TLD.
C'est ce niveau que le registar intervient techniquement. Une fois le nom de domaine
enregistr, le demandeur doit fournir l'adresse d'au moins un serveur DNS qui saura rsoudre
les noms dans le domaine en question et ce DNS doit tre enregistr sur les serveurs du TLD
choisi.
Manip.
Mais une petite exprience vaut mieux qu'un long discours. Nous allons utiliser notre outil
host pour chercher rsoudre le FQDN www.education.gouv.fr, non plus en posant la
question notre serveur DNS rcursif, mais en partant de la source, savoir un root-server
: 192.58.128.30, en utilisant la commande comme ceci :
host -v www.education.gouv.fr 192.58.128.30
le -v indique que l'on veut des dtails (verbose) ;
l'adresse IP en dernier argument indique quel serveur DNS nous voulons interroger.
$ host -v www.education.gouv.fr 192.58.128.30
Server: j.root-servers.net
Address: 192.58.128.30

Query about www.education.gouv.fr for record types A
Trying www.education.gouv.fr ...
Query failed, 0 answers, status: no error
Authority information:
fr 172800 IN NS E.EXT.NIC.fr
fr 172800 IN NS C.NIC.fr
fr 172800 IN NS B.EXT.NIC.fr
fr 172800 IN NS F.EXT.NIC.fr
fr 172800 IN NS A.NIC.fr
fr 172800 IN NS E.NIC.fr
fr 172800 IN NS D.EXT.NIC.fr
fr 172800 IN NS G.EXT.NIC.fr
Additional information:
A.NIC.fr 172800 IN A 192.93.0.129
A.NIC.fr 172800 IN AAAA 2001:660:3005:3:0:0:1:1
B.EXT.NIC.fr 172800 IN A 192.228.90.21
C.NIC.fr 172800 IN A 192.134.0.129
C.NIC.fr 172800 IN AAAA 2001:660:3006:4:0:0:1:1
D.EXT.NIC.fr 172800 IN A 204.152.184.85
D.EXT.NIC.fr 172800 IN AAAA 2001:4F8:0:2:0:0:0:8
E.EXT.NIC.fr 172800 IN A 193.176.144.6
E.NIC.fr 172800 IN A 194.57.253.1
F.EXT.NIC.fr 172800 IN A 194.146.106.46
G.EXT.NIC.fr 172800 IN A 204.61.216.39
www.education.gouv.fr A record currently not present at j.root-servers.net
J-root-servers.net ne rpond pas directement, comme nous pouvions nous en douter. En
revanche, il nous envoie la liste des serveurs DNS comptants dans le TLD fr. Reposons
donc la question au premier de la liste : a.nic.fr :
$ host -v www.education.gouv.fr 192.93.0.129
Server: a.nic.fr
Address: 192.93.0.129

Query about www.education.gouv.fr for record types A
Trying www.education.gouv.fr ...
Query failed, 0 answers, status: no error
Authority information:
education.gouv.fr 172800 IN NS ns4.atos.net
education.gouv.fr 172800 IN NS ns3.atos.net
www.education.gouv.fr A record currently not present at a.nic.fr
Cette rponse nous apprend deux choses :
gouv.fr est un domaine sectoriel , gr par l'afnic, et donc directement par les
serveurs .NIC.FR et il en va de mme pour des domaines descriptifs dfinis dans le
.fr ;
pour rsoudre des noms dans le domaine education.gouv.fr, il faut poser la
question ns4.atos.net ou ns3.atos.net.
Malheureusement, nous ne disposons pas cette fois-ci des Additionnal information et
n'avons pas l'adresse IP de ces serveurs. Il nous reste repartir du dbut avec une nouvelle
requte:
$ host -v ns4.atos.net 192.58.128.30
Server: j.root-servers.net
Address: 192.58.128.30

Query about ns4.atos.net for record types A
Trying ns4.atos.net ...
Query failed, 0 answers, status: no error
Authority information:
net 172800 IN NS J.GTLD-SERVERS.net
net 172800 IN NS K.GTLD-SERVERS.net
net 172800 IN NS G.GTLD-SERVERS.net
net 172800 IN NS M.GTLD-SERVERS.net
net 172800 IN NS C.GTLD-SERVERS.net
net 172800 IN NS H.GTLD-SERVERS.net
net 172800 IN NS D.GTLD-SERVERS.net
net 172800 IN NS B.GTLD-SERVERS.net
net 172800 IN NS L.GTLD-SERVERS.net
net 172800 IN NS A.GTLD-SERVERS.net
net 172800 IN NS F.GTLD-SERVERS.net
net 172800 IN NS E.GTLD-SERVERS.net
net 172800 IN NS I.GTLD-SERVERS.net
Additional information:
A.GTLD-SERVERS.net 172800 IN A 192.5.6.30
A.GTLD-SERVERS.net 172800 IN AAAA 2001:503:A83E:0:0:0:2:30
B.GTLD-SERVERS.net 172800 IN A 192.33.14.30
B.GTLD-SERVERS.net 172800 IN AAAA 2001:503:231D:0:0:0:2:30
C.GTLD-SERVERS.net 172800 IN A 192.26.92.30
D.GTLD-SERVERS.net 172800 IN A 192.31.80.30
E.GTLD-SERVERS.net 172800 IN A 192.12.94.30
F.GTLD-SERVERS.net 172800 IN A
192.35.51.30http://www.google.fr/
G.GTLD-SERVERS.net 172800 IN A 192.42.93.30
H.GTLD-SERVERS.net 172800 IN A 192.54.112.30
I.GTLD-SERVERS.net 172800 IN A 192.43.172.30
J.GTLD-SERVERS.net 172800 IN A 192.48.79.30
K.GTLD-SERVERS.net 172800 IN A 192.52.178.30
L.GTLD-SERVERS.net 172800 IN A 192.41.162.30
ns4.atos.net A record currently not present at j.root-servers.net
A peine plus avancs, interrogeons alors a.gtld-servers.net :
$ host -v ns4.atos.net 192.5.6.30
Server: a.gtld-servers.net
Address: 192.5.6.30

Query about ns4.atos.net for record types A
Trying ns4.atos.net ...
Query done, 1 answer, status: no error
The following answer is not authoritative:
ns4.atos.net 172800 IN A 193.56.46.248
Authority information:
atos.net 172800 IN NS ns3.atos.net
atos.net 172800 IN NS ns4.atos.net
Additional information:
ns3.atos.net 172800 IN A 160.92.121.6
ns4.atos.net 172800 IN A 193.56.46.248
Nous n'avons jamais t aussi proches de la solution finale. Une dernire question
ns4.atos.net dont nous connaissons dsormais l'adresse IP :
$ host www.education.gouv.fr 193.56.46.248
www.education.gouv.fr CNAME front.webedu.men.aw.atosorigin.com
front.webedu.men.aw.atosorigin.com A 160.92.130.142
Et voil le travail. Nous pouvons constater quel point il peut tre fastidieux et nous nous
flicitons de disposer d'un bon gros serveur DNS rcursif, qui fait tout ce travail notre place.
Car c'est exactement de cette manire qu'il s'y prend pour nous obtenir la rponse.
Les renseignements qu'il glane en effectuant cette recherche, il va les garder en mmoire et
s'en resservira pour d'ventuelles rsolutions futures. Nous verrons que pour cette raison, les
serveurs qui font autorit indiquent une dure de validit pour les informations qu'ils
donnent. Ainsi, les serveurs rcursifs devront rafraichir le contenu de leur cache en fonction
de dette dure de validit.
Construire un serveur DNS
Pourquoi faire ?
pour comprendre mieux comment a fonctionne ;
pour disposer d'une solution de secours si le(s) serveur(s) DNS de notre fournisseur
d'accs montre(nt) des signes de faiblesse ;
pour se crer un petit intranet sympa, mme avec un nom de domaine en bois qui
ne sera fonctionnel que sur notre LAN.
Les raisons sont-elles suffisantes ? Oui, alors allons-y. Nous avons bien un vieux PC qui
traine dans un coin et qui ne demande qu' reprendre du service. Nous y installons une Debian
(Lenny dans ce qui suit), sans aucune fioriture, le strict minimum, quoi. Avec bind9 et
quelques outils de base, nous ne dpasserons pas les 800 Mo sur le disque et 256 Mo de RAM
pourront faire l'affaire, si notre rseau local ne dpasse pas 100 postes
Bon gros avertissement
Ce que nous allons faire ici est destin l'usage exclusif de notre LAN. Aucune considration
de scurit ne sera aborde. Si le principe reste le mme pour la mise en place d'un serveur
DNS public, il faudra prendre en compte tous les risques d'agression et ils sont nombreux.
aptitude install bind9 bind9-host
Qu'avons-nous ajout sur notre machine ? Le trs clbre serveur DNS de chez ISC, nomm
bind, dans sa version 9 et la commande host.
Un simple cache
En l'tat, notre bind est fonctionnel, c'est un serveur DNS rcursif qui sait par lui-mme
rpondre toutes les demandes de rsolution de FQDN de l'internet. La preuve ?
# host -v www.altavista.fr 127.0.0.1
Trying "www.altavista.fr"
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29138
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
;www.altavista.fr. IN A

;; ANSWER SECTION:
www.altavista.fr. 7200 IN CNAME rc.yahoo.com.
rc.yahoo.com. 1800 IN CNAME rc.fy.b.yahoo.com.
rc.fy.b.yahoo.com. 300 IN A 206.190.60.37

;; AUTHORITY SECTION:
fy.b.yahoo.com. 300 IN NS yf1.yahoo.com.
fy.b.yahoo.com. 300 IN NS yf2.yahoo.com.

Received 134 bytes from 127.0.0.1#53 in 961 ms
Trying "rc.fy.b.yahoo.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15133
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;rc.fy.b.yahoo.com. IN AAAA

;; AUTHORITY SECTION:
fy.b.yahoo.com. 30 IN SOA yf1.yahoo.com. hostmaster.yahoo-
inc.com. 1233237548 30 30 86400 1800

Received 96 bytes from 127.0.0.1#53 in 30 ms
Trying "rc.fy.b.yahoo.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45688
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;rc.fy.b.yahoo.com. IN MX

;; AUTHORITY SECTION:
fy.b.yahoo.com. 30 IN SOA yf1.yahoo.com. hostmaster.yahoo-
inc.com. 1233237548 30 30 86400 1800

Received 96 bytes from 127.0.0.1#53 in 31 ms
L'emploi de l'option -v rend la rponse un peu indigeste, mais assez instructive.
Nous apprenons que www.altavista.fr. n'est qu'un alias de rc.yahoo.com., lui-mme
alias de rc.fy.b.yahoo.com. et que son adresse IP est 206.190.60.37.
En prime, nous apprenons que le domaine fy.b.yahoo.com. est gr par les serveurs DNS
yf1.yahoo.com. et yf2.yahoo.com., que www.altavista.fr. ne dispose pas d'adresse IP
v6, la rponse la question ;rc.fy.b.yahoo.com. IN AAAA aurait eu une rponse et enfin,
que le SOA pour ce domaine est yf1.yahoo.com.. C'est quoi un SOA ? Rappelez-moi d'en
parler plus loin dans ce chapitre si jamais j'oubliais.
Toutes ces informations, c'est notre bind nous qui les a trouves en se dbrouillant tout seul,
et en 961 millisecondes seulement ! Nous n'aurions pas fait mieux.
Bien sr nous pouvons lui poser une question plus simple (sans l'option -v) pour un nud qui
n'a rien voir :
# host www.google.fr 127.0.0.1
Using domain server:
Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

www.google.fr is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 209.85.129.147
www.l.google.com has address 209.85.129.99
www.l.google.com has address 209.85.129.104
C'est plus lisible, il y a moins d'informations. Remarquez qu'un seul nom dispose ici de
plusieurs adresses IP. C'est du round-robin (tourniquet en franais). A quoi a sert ?
Rappelez-moi d'en parler plus loin dans ce chapitre si jamais j'oubliais
Bref, notre bind sait parfaitement effectuer pour nous toute rsolution de FQDN, nous
pouvons dsormais nous passer des serveurs DNS rcursifs de notre fournisseur d'accs,
l'exception des clients d'Orange qui devront prendre quelques prcautions et l
encore, nous verrons pourquoi plus tard.
Par quel prodige ?
Notre installation de bind9 a produit une configuration par dfaut, minimaliste, qui permet au
serveur de fonctionner en mode rcursif. Sans entrer dans tous les dtails, allons y voir de plus
prs.
Tout se trouve (sur Debian) dans le rpertoire /etc/bind.
# cd /etc/bind
debvirt:/etc/bind# ls -l
total 44
-rw-r--r-- 1 root root 237 jan 2 18:19 db.0
-rw-r--r-- 1 root root 271 jan 2 18:19 db.127
-rw-r--r-- 1 root root 237 jan 2 18:19 db.255
-rw-r--r-- 1 root root 353 jan 2 18:19 db.empty
-rw-r--r-- 1 root root 270 jan 2 18:19 db.local
-rw-r--r-- 1 root root 2878 jan 2 18:19 db.root
-rw-r--r-- 1 root bind 907 jan 2 18:19 named.conf
-rw-r--r-- 1 root bind 165 jan 2 18:19 named.conf.local
-rw-r--r-- 1 root bind 572 jan 2 18:19 named.conf.options
-rw-r----- 1 bind bind 77 jan 29 14:16 rndc.key
-rw-r--r-- 1 root root 1317 jan 2 18:19 zones.rfc1918
Nous n'en avons pas parl jusqu'ici, mais il faut tout de mme en dire quelques mots, de la
rsolution inverse, celle qui consiste retrouver un nom d'hte partir de son adresse IP. Ce
service est peu utilis par le particulier (entendez par l l'internaute en gnral). Il l'est
cependant parfois par des services sur l'internet, comme par exemple SMTP, pour tenter de
lutter contre le spam. Pour cette raison, nous n'en dirons pas plus sur la question.
Voyons sans plus tarder le contenu de named.conf qui, de toute vidence, constitue le fichier
de configuration principal :
# cat named.conf
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in
/etc/bind/named.conf.local

include "/etc/bind/named.conf.options";

// prime the server with knowledge of the root servers
zone "." {
type hint;
file "/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
type master;
file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};

include "/etc/bind/named.conf.local";
Dj, nous constatons que ce fichier fait lui-mme appel deux autres fichiers de
configuration, named.conf.options et named.conf.local. Nous aurons modifier au
moins l'un d'entre eux. En revanche, named.conf ne devrait (sur Debian) jamais tre modifi,
sauf par les mises jour futures de la distribution.
A part ceci, nous observons des dclarations de zones, presques toutes destines la
rsolution inverse, l'exception de celle qui sont surlignes en vert.
La zone "localhost"
Pas bien utile en gnral, elle permet de rsoudre localhost :
# cat db.local
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
@ IN AAAA ::1
Le fichier db.local a une structure que nous aurons besoin de dtailler plus tard. Nous y
apprenons que localhost dispose des adresses 127.0.0.1 en IPv4 et ::1 en IPv6, ce que nous
savions probablement dj.
La zone "."
Plus intressant est le fichier db.root :
# cat db.root
; This file holds the information on root name servers needed to
; initialize cache of Internet domain name servers
; (e.g. reference this file in the "cache . <file>"
; configuration file of BIND domain name servers).
;
; This file is made available by InterNIC
; under anonymous FTP as
; file /domain/named.root
; on server FTP.INTERNIC.NET
; -OR- RS.INTERNIC.NET
;
; last update: Feb 04, 2008
; related version of root zone: 2008020400
;
; formerly NS.INTERNIC.NET
;
. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:BA3E::2:30
;
; formerly NS1.ISI.EDU
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 192.228.79.201
;
; formerly C.PSI.NET
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
;
; formerly TERP.UMD.EDU
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
;
; formerly NS.NASA.GOV
;
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
;
; formerly NS.ISC.ORG
;
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2f::f
;
; formerly NS.NIC.DDN.MIL
;
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::803f:235
;
; formerly NIC.NORDU.NET
;
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
;
; operated by VeriSign, Inc.
;
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30
J.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:C27::2:30
;
; operated by RIPE NCC
;
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fd::1
;
; operated by ICANN
;
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 199.7.83.42
;
; operated by WIDE
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
M.ROOT-SERVERS.NET. 3600000 AAAA 2001:dc3::35
; End of File
Il contient en effet toutes les informations sur les root-servers, sans quoi, notre bind
n'aurait rien pu faire. Notez que le ; est un signe de commentaire.
Le contenu de ce fichier volue peu dans le temps et les mises jour de la distribution
suffisent normalement le maintenir dans un tat satisfaisant. Notez que certains (mais peu
encore) des root-servers disposent d'une adresse IPv6.
Crer une zone
Tout ceci est bien, mais nous voudrions maintenant crer une zone pour notre intranet, avec
un nom de domaine en bois comme par exemple maison.mrs. Le TLD n'existe pas, le
domaine maison.mrs ne peut donc exister sur l'internet, mais il peut parfaitement fonctionner
sur notre LAN.
Pour ce faire, il nous faut tout de mme entrer un peu plus dans le dtail des informations que
peut donner un serveur DNS.
$TTL
Indique en secondes la dure de vie de l'information fournie. Les serveurs DNS rcursifs
conserveront en cache les informations rcoltes pendant la dure indique dans ce paramtre.
0 devrait indiquer que les valeurs ne doivent pas tre conserves en cache (utile pour les dyn
DNS mais c'est une autre histoire).
SOA
Start Of Authority. Si nous avons plusieurs serveurs DNS qui servent la mme zone, nous
avons vu l'exemple pour yahoo.com qui en a deux, mais il pourrait y en avoir plus, il y en a
un qui est le serveur maitre , les autres n'tant que des escalves , c'est dire de simples
rpliquas. L'administrateur met jour le maitre, qui notifiera ses esclaves (l'informaticien a
une tendance la paresse). Le champ SOA indique donc quel est le serveur maitre .
Nous pouvons d'ailleurs, au moyen de la commande host savoir rapidement toutes ces choses
:
# host -t ns yahoo.com
yahoo.com name server ns4.yahoo.com.
yahoo.com name server ns6.yahoo.com.
yahoo.com name server ns1.yahoo.com.
yahoo.com name server ns3.yahoo.com.
yahoo.com name server ns5.yahoo.com.
yahoo.com name server ns8.yahoo.com.
yahoo.com name server ns2.yahoo.com.
Tiens, il y a bien plus de deux Name Servers pour le domaine Yahoo.com, finalement Mais
tous n'ont pas forcment besoin d'tre rfrencs sur les serveurs du TLD com, deux suffisent.
Mais quel est dans cette liste le serveur maitre ?
# host -t soa yahoo.com
yahoo.com has SOA record ns1.yahoo.com. hostmaster.yahoo-inc.com.
2009012906 3600 300 1814400 600
C'est ns1.yahoo.com. et nous disposons galement d'autres informations, que nous allons
retrouver lors de la construction de notre zone maison . Nous avons l'assurance que ce
serveur fournira toujours la bonne information (sauf erreur de l'administrateur).
Comme nous allons le voir, le symbole @ n'a pas ici la signification habituelle at. Aussi,
l'adresse e-mail du responsable de la zone est marque : hostmaster.yahoo-inc.com.. Si
nous avons une remarque faire au responsable de la zone, nous adresserons le message
hostmaster@yahoo-inc.com.
Serial
Numro de srie qu'il faut incrmenter chaque modification de la zone. Il est d'usage de le
construire partir de la date de modification. Ainsi, dans l'exemple prcdent, nous pouvons
imaginer que le serveur a t mis jour le 29 janvier 2009, peut tre 6h GMT, ou alors ce
serait la sixime modification opre ce jour. Cette faon de faire est une recommandation,
mais pas une obligation. Un simple incrment suffit. Ce numro de srie permet aux serveurs
esclaves de savoir s'il y a eu ou non une modification de la zone depuis leur dernire
synchronisation.
Refresh
Indique en seconde le temps au bout duquel les serveurs esclaves , aussi appels
secondaires, devront demander rafraichir leur donnes pour cette zone. 3600 secondes dans
l'exemple, soit une heure.
Retry
Indique en secondes au bout de combien de temps un serveur esclave doit r-essayer de se
synchroniser si la tentative a chou aprs le temps refresh. Ici toutes les 300 secondes, soit
toutes les 5 minutes.
Expire
Si toutes les tentatives de synchronisation chouent, indique le temps (en secondes) au bout
duquel les serveurs secondaires devront considrer qu'ils ne savent plus rpondre aux requtes
concernant cette zone. Ici 1814400 secondes, soit 21 jours ! Mieux vaut donner une rponse
peut-tre fausse que de ne pas en donner du tout ?
Negative Cache TTL
Paramtre dont la signification est assez floue. Pour bind9, indique le temps pendant lequel
les caches (DNS rcursifs) conserverait l'information NXDOMAIN, le domaine n'existe pas
, lorsqu'un incident s'est produit.
NS, A, AAAA, CNAME et les autres
Le champ NS (Name Server) indique le nom d'un serveur de noms. Pour une zone donne, s'il
y a plusieurs serveurs de noms, il y aura plusieurs champs NS.
Le champ A (Address) fait correspondre un nom une adresse IPv4, alors que le champ
AAAA fera correspondre un nom une adresse IPv6.
Le champ CNAME (Common Name) fait correspondre un alias un vrai nom . Le vrai
nom doit disposer par ailleurs d'un champ A, dans la mme zone ou dans une autre, sur le
mme serveur ou sur un autre (nous en avons vu un exemple avec www.education.gouv.fr).
Il existe encore d'autres champs comme MX (Mail eXchanger), utile pour le protocole SMTP
ou TXT, (utile surtout, hlas, pour tunnelliser n'importe quoi dans du protocole DNS, mais
c'est une autre affaire).
Le symbole @
Dans un fichier de configuration de zone, ce symbole reprsente exactement le nom de
domaine de la zone. Par exemple, lorsque nous allons crer notre zone maison.mrs, crire :
maison.mrs. IN SOA ...
Nous pourrons crire :
@ IN SOA ...
La zone maison.mrs
Nous en savons assez pour crer notre zone maison . Notre serveur va s'appeler
debvirt.maison.mrs et dispose de l'adresse IP 192.168.0.254 :
Crons d'abord dans /etc/bind/ un fichier nomm par exemple : db.maison.mrs qui
contiendrait ceci :
$TTL 1600
@ IN SOA debvirt.maison.mrs. root.debvirt.maison.mrs. (
2009012901 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
1600 ) ; Negative Cache TTL
;
@ IN NS debvirt.maison.mrs.
@ IN A 192.168.0.254
debvirt IN A 192.168.0.254
test1 IN A 192.168.0.1
test2 IN CNAME test1
test3 IN CNAME irp.nain-t.net.
Ceci devrait permettre de rpondre aux requtes de type NS pour le domaine maison.mrs, de
rpondre aussi aux requtes de type A pour debvirt.maison.mrs et pour test1.maison.mrs,
constater aussi que les alias fonctionnent dans et hors du domaine.
Il nous faut maintenant indiquer bind que cette zone existe. Nous allons le faire dans le
fichier /etc/bind/named.conf.local :
zone "maison.mrs" {
type master;
file "/etc/bind/db.maison.mrs";
};
Enfin, nous redmarrons bind avec un /etc/init.d/bind9 restart et nous contrlons
# host -a maison.mrs
Trying "maison.mrs"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59474
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;maison.mrs. IN ANY

;; ANSWER SECTION:
maison.mrs. 1600 IN SOA debvirt.maison.mrs.
root.debvirt.maison.mrs. 2009012901 604800 86400 2419200 1600
maison.mrs. 1600 IN NS debvirt.maison.mrs.
maison.mrs. 1600 IN A 192.168.0.254

;; ADDITIONAL SECTION:
debvirt.maison.mrs. 1600 IN A 192.168.0.254

Received 123 bytes from 127.0.0.1#53 in 1 ms


# host test1.maison.mrs
test1.maison.mrs has address 192.168.0.1


# host test2.maison.mrs
test2.maison.mrs is an alias for test1.maison.mrs.
test1.maison.mrs has address 192.168.0.1


# host test3.maison.mrs
test3.maison.mrs is an alias for irp.nain-t.net.
irp.nain-t.net has address 213.186.40.149
Tout va bien, notre serveur DNS fonctionne parfaitement.
Conclusion
Encore une fois, cette configuration ne tient compte d'aucune considration scuritaire.
Cependant, nous avons un service rcursif pour les rsolutions sur l'internet et qui pourra
grer les noms dans notre intranet.
Note pour Orange
De longue date, ce petit problme existe. De nombreux clients utilisent les services de
smtp.wanadoo.fr pour envoyer leurs e-mails. Faisons avec notre beau bind une rsolution de
smtp.wanadoo.fr :
# host smtp.wanadoo.fr
smtp.wanadoo.fr has address 80.12.242.148
smtp.wanadoo.fr has address 193.252.22.65
smtp.wanadoo.fr has address 193.252.22.78
smtp.wanadoo.fr has address 193.252.22.92
smtp.wanadoo.fr has address 193.252.23.67
smtp.wanadoo.fr has address 80.12.242.9
smtp.wanadoo.fr has address 80.12.242.15
smtp.wanadoo.fr has address 80.12.242.53
smtp.wanadoo.fr has address 80.12.242.62
smtp.wanadoo.fr has address 80.12.242.82
smtp.wanadoo.fr has address 80.12.242.142
Voyons maintenant depuis une connexion Orange, qui utilise les serveurs DNS renseigns
par la connexion PPPoE :
# host smtp.wanadoo.fr
smtp.wanadoo.fr has address 193.252.22.74
smtp.wanadoo.fr has address 193.252.22.91
smtp.wanadoo.fr has address 193.252.23.66
smtp.wanadoo.fr has address 80.12.242.10
smtp.wanadoo.fr has address 80.12.242.16
smtp.wanadoo.fr has address 80.12.242.52
smtp.wanadoo.fr has address 80.12.242.61
smtp.wanadoo.fr has address 80.12.242.86
smtp.wanadoo.fr has address 80.12.242.141
smtp.wanadoo.fr has address 193.252.22.64
Ce ne sont pas les mmes Pourquoi ?
Il faut le demander aux administrateurs de wanadoo.fr. Toujours est-il que votre vaillant
Firefox (ou quivalent), si vous tes usagers de smtp.wanadoo.fr, ne parviendra pas poster
vos messages, la rsolution faite par notre cache personnel ne donnant pas les bons serveurs.
La solution est de crer sur notre bind une zone wanadoo.fr de type forward et d'y
indiquer les adresses IP des serveurs DNS fournis par la connexion Orange. La
documentation de bind indique comment raliser cette opration. Cette documentation
complte se trouve sur le site d'ISC (124 pages en anglais, pour la version 9.4, fournie avec
Lenny) dont la lecture est indispensable si l'on souhaite raliser un serveur public ou
simplement dcouvrir toutes les possibilits de l'outil.
psst ! le round-robin ?...
Comme nous l'avons vu, il arrive parfois qu' un FQDN corresponde plusieurs adresses IP
(parfois nombreuses, comme dans le cas de smtp.wanadoo.fr). Reprenons l'exemple plus
simple de www.google.fr, en posant trois fois de suite la mme question notre serveur :
d# host www.google.fr
www.google.fr is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 209.85.129.104
www.l.google.com has address 209.85.129.147
www.l.google.com has address 209.85.129.99

# host www.google.fr
www.google.fr is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 209.85.129.99
www.l.google.com has address 209.85.129.104
www.l.google.com has address 209.85.129.147

# host www.google.fr
www.google.fr is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 209.85.129.147
www.l.google.com has address 209.85.129.99
www.l.google.com has address 209.85.129.104
Nous observons une permutation circulaire dans l'ordre des rponses (tourniquet). Comme
l'application demandeuse prendra la premire rponse servie, si trois clients de notre serveur
veulent accder tour tour www.google.fr, ils utiliseront chacun une adresse IP diffrente
et donc probablement aboutiront un serveur diffrent. Ce systme est trs souvent utilis
pour rpartir simplement la charge sur plusieurs htes.
DHCP
Il s'agit d'un protocole qui permet dynamiquement d'attribuer une adresse IP un systme
informatique qui se connecte au rseau.
Le serveur DHCP fournit galement d'autres informations, comme la passerelle par dfaut et
le DNS (et ventuellement bien d'autres choses encore).
Ce systme, bien pratique lorsqu'il fonctionne correctement, vite l'utilisateur d'avoir
configurer manuellement sa pile IP. Il permet galement l'administrateur du rseau de
modifier son architecture sans avoir prvenir tous ses clients, ni se dplacer de poste en
poste.
Toutes nos machin-box ds lors qu'elles sont utilises en mode routeur fournissent cette
fonctionnalit, de faon plus ou moins labore. Nous verrons cependant ce protocole
travers le serveur DHCP d'ISC install, comme d'habitude, sur une Debian (Lenny).
La bonne comprhension de ce protocole implique un minimum de connaissances de TCP/IP.
Si vous ne les avez pas, lisez d'abord le chapitre TCP/IP(v4) .
Nous allons dans un premier temps construire un serveur DHCP et le tester avec des clients
sour GNU/Linux et mme aussi sous Windows, ne soyons pas plus sectaires que de raison.
La dernire page du chapitre permettra d'analyser dans le dtail ce qu'il se passe dans
l'obscurit d'un rseau IP et qui fait que a marche le plus souvent.
Le protocole DHCP
Position du problme
Lorsque vous connectez une machine un rseau Ethernet TCP/IP, cette machine, pour
fonctionner correctement, doit disposer :
D'une adresse IP unique dans votre rseau et appartenant au mme rseau logique que
toutes les autres machines du rseau en question,
un masque de sous rseau, le mme pour tous les htes du rseau,
une adresse de DNS, pour pouvoir rsoudre les noms des htes, surtout si votre rseau
est connect au Net,
l'adresse de la passerelle qui vous permet justement d'accder au Net. (Nous
supposerons que votre rseau domestique n'est pas suffisamment complexe pour
contenir de multiples sous-rseaux).
Si vous n'avez dj rien compris ce discours, alors il est ncessaire pour vous de lire d'abord
les chapitres sur TCP/IP(v4) et IP et le Routage.
Pour configurer vos htes locaux, vous avez trois possibilits :
vous utilisez zeroconf (rfc3927), la chose qui permet chaque nud d'un rseau de
s'auto-attribuer une adresse IP dans le bloc 169.254/16. Tout ce qu'il y a de plus
basique, ce systme remplit son office, mais ne permet aucune administration du
rseau ;
vous passez de machine en machine, avec un petit carnet et vous configurez chaque
fois tous les paramtres de la pile IP la main, en n'oubliant pas de tout marquer dans
votre carnet. Ce n'est pas le plus compliqu, ce qui est d'avantage gnant, c'est de ne
jamais oublier de noter toutes les modifications que vous pourriez tre amen faire
par la suite ;
vous installez un serveur DHCP sur votre rseau et vous dites vos clients d'aller
chercher toute leur configuration IP sur ce serveur. En gros, il remplacera votre carnet,
sera naturellement jour et vous vitera des dplacements.
Comme vous le voyez, le luxe de la troisime solution est tout de mme tentant, au point que
nous allons le mettre en uvre.
Que disent les livres ?
Les choses se passent avec le peu de moyens dont vous disposez:
votre adresse MAC que vous ne perdez jamais, puisqu'elle est crite en dur dans votre
interface Ethernet ;
le Broadcast ou Diffusion qui permet d'envoyer des trames toutes les
machines du rseau physique.
Le dialogue est dcrit de la manire suivante:

1. Lorsque le client DHCP dmarre, il n'a aucune connaissance du rseau, du moins, en
principe. Il envoie donc une trame DHCPDISCOVER , destine trouver un
serveur DHCP. Cette trame est un broadcast , donc envoy l'adresse
255.255.255.255. N'ayant pas encore d'adresse IP, il adopte provisoirement l'adresse
0.0.0.0. Comme ce n'est pas avec cette adresse que le DHCP va l'identifier, il fournit
aussi sa MAC Address . En ralit, 0.0.0.0 ne voulant rien dire, le systme devra
fonctionner uniquement avec les adresses MAC lors du premier dialogue. Autrement
dit, le client prsente son adresse MAC et effectue un broadcast ethernet sur
ff:ff:ff:ff:ff:ff ;
2. Le, ou les serveurs DHCP du rseau qui vont recevoir cette trame vont se sentir
concerns et rpondre par un DHCPOFFER .
Cette trame contient une proposition de bail et la MAC Address du client, avec
galement l'adresse IP du serveur. Tous les DHCP rpondent et le client normalement
accepte la premire rponse venue, sauf s'il a dj quelques exigences.
Le DHCPOFFER sera un broadcast (Ethernet) ou non, suivant le serveur DHCP
utilis. Nous aurons l'occasion d'observer tout ceci dans la dernire page de ce
chapitre.
3. Le client rpond alors par un DHCPREQUEST tous les serveurs (donc toujours en
Broadcast ) pour indiquer quelle offre il accepte.
4. Le serveur DHCP Concern rpond dfinitivement par un DHCPACK qui constitue
une confirmation du bail. L'adresse du client est alors marque comme utilise et ne
sera plus propose un autre client pour toute la dure du bail.
Dtails sur le serveur DHCP
Un serveur DHCP dispose d'une plage d'adresses distribuer ses clients. Il tient jour une
base de donnes des adresses dj utilises et utilises il y a peu (C'est ce qui explique que
l'on rcupre souvent la mme adresse, le DHCP ayant horreur des changements).
Lorsqu'il attribue une adresse, il le fait par l'intermdiaire d'un bail. Ce bail a normalement
une dure limite dans le temps. Sur un rseau d'entreprise o l'on dispose largement d'assez
d'adresses pour le nombre de postes et que ces derniers sont en service toute la journe, le bail
peut tre d'une semaine ou plus encore. Un bail long diminue le trafic rseau pour les
renouvlements
1)
qui ont lieu moins souvent. En revanche, plus le bail est long, plus
l'administrateur devra planifier longtemps l'avance toute modification de l'architecture de
son rseau.
Aprs expiration du bail, ou rsiliation par le client, les informations concernant ce bail
restent mmorises dans la base de donnes du serveur pendant un certain temps. Bien que
l'adresse IP soit disponible, elle ne sera pas attribue en priorit une autre machine. C'est ce
qui explique que l'on retrouve souvent la mme adresse d'une session l'autre.
Dtails sur le bail
Dans le bail, il y a non seulement une adresse IP pour le client, avec une dure de validit,
mais galement d'autres informations de configuration comme:
L'adresse d'un ou de plusieurs DNS (Rsolution de noms)
L'adresse de la passerelle par dfaut (pour sortir du rseau IP o le DHCP vous a
install).
L'adresse du serveur DHCP (nous allons voir pourquoi).
Cette liste est loin d'tre complte, il existe en effet une grande quantit d'options qui peuvent
tres transmises.
Lorsque le bail arrive environ la moiti de son temps de vie, le client va essayer de
renouveler ce bail, cette fois-ci en s'adressant directement au serveur qui le lui a attribu. Il n'y
aura alors qu'un DHCPREQUEST et un DHCPACK.
Si, au bout des 7/8e de la dure de vie du bail en cours, ce dernier n'a pu tre renouvel, le
client essayera d'obtenir un nouveau bail auprs d'un DHCP quelconque qui voudra bien lui
rpondre. Il pourra alors se faire que le client change d'adresse IP en cours de session.
Normalement, cette situation ne devrait pas se produire, sauf en cas de panne du DHCP.
Question subsidiaire
Il doit donc y avoir ncessairement un serveur DHCP par rseau physique et il doit disposer
d'une adresse IP dans la mme classe que celle qui constitue sa plage d'adresses ?
Non, pas ncessairement. Votre rseau physique peut tre form de plusieurs sous rseaux
logiques, avec des routeurs entre chaque sous rseau et le tout peut fonctionner avec un seul
serveur DHCP
Mais alors, comment la ngociation peut-elle se faire, puisque, normalement, un broadcast
n'est pas retransmis par les routeurs ?
Les requtes DHCP doivent pouvoir atteindre le serveur qui est situ sur un autre rseau
logique, elles doivent donc passer les routeurs, ce qui n'est pas possible. Il est alors ncessaire
d'installer sur un ou plusieurs routeurs un agent de relais qui va intercepter les requtes en
broadcast et les transmettre un serveur DHCP connu de cet agent.

C'est l'agent de relais situ sur la passerelle qui va faire l'intermdiaire et le client russira tout
de mme obtenir un bail, donn par un DHCP situ sur un autre rseau et transmis par
l'agent de relais.
Nous ne pousserons pas le luxe jusque l, mais la solution existe. Le serveur DHCP sera
mme capable d'envoyer des paramtres diffrents, suivant le sous rseau du client
1)
Depuis la rforme de 1990 de l'orthographe, il est conseill d'crire renouvlement
plutt que renouvellement
Serveur DHCP
Topologie du rseau
Nous allons prendre une configuration simple, avec une machine GNU/Linux qui va cumuler
plusieurs fonctions :
Passerelle entre le rseau local et l'internet (notre box ne sera ici qu'un simple
modem ADSL) ;
firewall ;
serveur DHCP ;
serveur DNS. (Pourquoi pas, puisqu'on est dans le luxe).

Les clients peuvent tre de tout type : Windows, Mac OS, GNU/Linux
dans l'exemple, la passerelle est construite avec Debian Lenny.
Nous allons donc installer sur la passerelle un serveur DHCP. Le DNS est tout fait
optionnel, mais ce serait bien qu'il y soit, il peut mme y tre dj, a n'est absolument pas
gnant. S'il n'y est pas encore, vous pourrez le rajouter par la suite.
Les fonctions de passerelle et de firewall ne sont pas non plus fondamentales, nous pourrions
nous contenter d'un serveur GNU/Linux, non connect au Net (mais qui peut le plus peut le
moins).
Nous pourrions mme ajouter un autre serveur au rseau local, charg du DNS et du DHCP et
ne laisser la passerelle que les fonctions de routage et de firewall.
Installation du serveur DHCP
Sur Debian, ceci se fait trs simplement en installant les paquetages dhcp3-common et dhcp3-
server. Dans la version Lenny de Debian, nous disposons de la version 3.1.1 du serveur. Il y
a un seul fichier de configuration : /etc/dhcp3/dhcpd.conf, que nous pourrons configurer
avec un diteur de texte, o travers l'interface Webmin. Ce que nous aurons faire est
suffisamment simple pour pouvoir le faire la main.
Configuration du serveur
Le principe
Comme nous l'avons vu plus haut, un serveur DHCP, en plus de fournir la configuration IP
de base (Adresse et masque), peut aussi transmettre un nombre plus ou moins grand de
paramtres supplmentaires. Nous aurons donc au moins deux choses configurer :
la rserve d'adresses dont le serveur pourra disposer pour les attribuer aux clients ;
les paramtres optionnels leur communiquer dans la foule, comme l'adresse d'un
DNS et de la passerelle par dfaut. Dans le cas d'un rseau domestique; ce sera
suffisant, mais il y a beaucoup d'autres options, plus ou moins spcifiques aux divers
systmes d'exploitation.
Nous avons vu qu'un seul serveur DHCP pouvait tre utilis pour plusieurs rseaux logiques
interconnects, pourvu que les interconnexions disposent d'un agent de relais DHCP. Dans un
tel cas, le serveur DHCP devra disposer d'au moins une tendue d'adresses IP par rseau
logique dont il aura la charge.
En ce qui concerne les options, nous disposons d'une architecture hirarchique :
Nous pouvons dfinir des options globales, qui seront les mmes pour tous les clients
du DHCP, tous sous rseaux confondus ;
nous pouvons dfinir galement des options propres chaque sous rseau, celles-ci
crasant les options globales, en cas de conflit ;
si l'on veut aller encore plus loin, sachez que DHCP3-server peut crer des groupes
distincts de machines dans un mme sous rseau et mme grer des clients de faon
individuelle. C'est un vrai serveur DHCP
Une configuration basique
Ce que nous voulons faire
Nous n'allons pas monter une usine gaz, c'est inutile pour un petit rseau domestique et a
n'apporte rien de plus la comprhension du protocole :
nous avons un seul rseau, avec des IP choisies dans la classe C prive 192.168.0.0,
donc avec un masque 255.255.255.0 ;
nous avons donc une passerelle par dfaut unique pour tous nos htes du rseau, dans
l'exemple, ce sera 192.168.0.252 ;
nous disposons enfin d'un DNS, galement unique pour tous les htes du rseau, il est
sur la mme machine, savoir 192.168.0.252. Le domaine que nous avons construit
sur notre rseau local s'appelle maison.mrs. Il n'a aucune ralit sur le Net, mais a
n'a pas d'importance, puisque c'est un domaine qui ne doit pas tre visible depuis le
Net ;
sur la totalit de la classe C disponible, nous allons rserver les adresses comprises
entre 192.168.0.64 et 192.168.0.127 pour les clients du rseau. Cette plage constituera
la rserve d'adresses que le DHCP pourra fournir aux clients. Bien entendu, nous
aurions pu en mettre plus, mais il faut toujours se garder quelques adresses sous le
coude, pour les machines configures manuellement, comme les serveurs que l'on
placerait sur le rseau ;
un dernier point important, c'est la dure de vie du bail que le DHCP va attribuer aux
clients. L'un des avantages de DHCP, c'est de pouvoir attribuer une configuration IP
qui ne sera valide que dans un laps de temps donn, charge pour le client de
demander le renouvlement de ce bail avant chaque expiration. Ce temps de vie pourra
aller de quelques minutes l'infini, suivant les besoins. Sur un rseau qui volue peu,
le bail peut tre sans problmes de quelques jours, quelques semaines, voire
plusieurs mois. Sur un rseau o les htes vont et viennent, il sera plus sage de ne
laisser vivre les configurations que quelques heures. Rptons-le, plus le bail est court,
plus le trafic gnr par DHCP devient important et plus la charge du serveur
augmente. Ceci dit, ce n'est pas un argument trs significatif sur un rseau ne
dpassant pas une dizaine de clients. Dans l'exemple, nous utiliserons une heure (3600
secondes).
Note importante
Le daemon dhcpd coute par dfaut sur toutes les interfaces rseau actives sur le serveur.
Ce n'est pas forcment souhaitable, c'est mme assez souvent ennuyeux.
Fort heureusement, ce comportement par dfaut peut tre modifi, mais pas dans le fichier de
configuration. Il faut utiliser un paramtre dans la ligne de commande qui va dmarrer dhcpd.
Dans le cas de Debian Lenny, il faut diter le fichier /etc/default/dhcp3-server. Il est
bien document et vous trouverez aisment la variable INTERFACES qu'il faut initialiser
avec le nom de la ou des interfaces qui doivent tres coutes. Dans notre exemple, nous
aurons :
INTERFACES="eth0"
Ce que nous crivons dans dhcpd.conf
# La ligne qui suit est ncessaire. Elle est en rapport avec
# la mise jour dynamique du DNS, que nous n'utiliserons pas
# pour l'instant.
ddns-update-style none;

# Ce serveur fait autorit sur le rseau
authoritative;

# Les options globales
option time-servers 192.168.0.252;
option domain-name "maison.mrs";
max-lease-time 3600;
default-lease-time 3600;
option domain-name-servers 192.168.0.252;
option subnet-mask 255.255.255.0;
option routers 192.168.0.252;

# le rseau 192.168.0.0/24, avec la rserve d'adresses dynamiques
subnet 192.168.0.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.0.64 192.168.0.127;
}
Cette configuration simplissime va suffire nos besoins.
Dans ce fichier, il y a des directives, qui sont obligatoires :
la directive ddns-update-style servira plus tard, ce sera la cerise sur le gteau, pour
ceux qui utilisent BIND 9 (le serveur DNS). Elle indique pour l'instant que nous ne
ferons pas de mise jour dynamique de DNS ;
Il existe une subtile diffrence entre les directives max-lease-time et default-
lease-time (DHCP est plein de subtilits, pas toujours ncessaires dans un
fonctionnement basique), la page man dhcpd.conf vous indiquera quelle est cette
diffrence. Contentons nous pour l'instant d'assigner la mme valeur aux deux, ici
3600 secondes.
Et des options qui seront dans la pratique, des paramtres de configuration optionnels. Ici :
domain-name-servers
qui attribuera aux htes une adresse de DNS. Dans l'exemple, notre DNS nous. Si
nous n'en avons pas, il faudra ici mettre l'IP du DNS de notre fournisseur d'accs.
Eventuellement, nous pouvons spcifier plusieurs DNS ;
domain-name
est vraiment optionnel, a permettra aux clients de savoir dans quel domaine ils sont
enregistrs ;
routers
c'est la passerelle par dfaut. Il pourrait y avoir plusieurs routeurs, mais tous les
systmes ne savent pas grer de faon efficace une information contenant plusieurs
passerelles.
Toutes les options qui figurent avant le paragraphe subnet 192.168.0.0 netmask
255.255.255.0 sont des options globales, il n'y a ici aucune option d'tendue (de sous-
rseau) de dfinie.
Cette configuration doit nous permettre d'tre efficient dans notre contexte. Il nous suffit de
lancer ou de relancer le serveur :
/etc/init.d/dhcpd restart
Et a devrait fonctionner.
Les clients DHCP
Tout systme d'exploitation (y compris MS Windows depuis l'antique version 95) dispose
d'un client DHCP dont le rle est de rechercher sur le rseau un serveur DHCP et de ngocier
avec lui une configuration IP cohrente.
Si le poste de travail est correctement configur, le client DHCP s'occupera de tout.
MS Windows
N'tant pas un fan de ces systmes en gnral (ni de Vista en particulier), nous nous
contenterons de la dmonstration sur un Windows XP Pro (SP3).
Configuration
Voici un moyen (parmi d'autres) d'y arriver. Celle-ci s'appelle la mthode en dix clics .
Tu cliques gauche sur Dmarrer et, condition d'avoir configur son machin de cette faon,
les favoris rseau apparaissent. Tu cliques droite sur les favoris rseau et tu cliques
gauche sur proprits.
Tout ceci doit faire apparaitre cette fentre :
L, tu
cliques droite sur la Connexion au rseau local et tu cliques gauche sur proprits.
Ceci t'amne : Tu
cliques deux fois de suite gauche sur Protocole Internet (TCP/IP). Tu es presque
arriv. Ici, il suffit de
cliquer gauche successivement sur Obtenir une adresse IP automatiquement, sur
Obtenir les adresses des serveurs DNS automatiquement et enfin sur OK. Et voil le
travail.
Contrle
Il existe une mthode, dite mthode en sept clics , qui permet de consulter sa configuration
IP. Nous allons en voir une autre dite mthode de la ligne de commande .
Tu ouvres une console DOS, aussi appele invite de commandes et tu tapes :
ipconfig
Nous obtenons alors l'essentiel de la configuration IP.
Si nous souhaitons plus de dtails, il faudra utiliser la commande :
ipconfig /all
Nous voyons ici toutes les informations concernant le bail dhcp obtenu. La mthode en sept
clics n'apporte strictement aucune information supplmentaire, elle permet juste de faire
travailler l'index et le majeur (ventuellement l'annulaire) de la main droite (habituellement),
au dtriment de tous les autres doigts.
GNU/Linux
Ici, nous sommes dans le bazar et suivant les distributions, les choses peuvent changer de
faon plus ou moins significative. Nous prendrons comme exemple une Debian Lenny et une
Ubuntu Jaunty dont les architectures restent trs proches puisque l'autre est drive de l'une.
GNU/Linux tant en perptuelle volution, les possibilits de configuration du rseau ont
suivi le mme chemin. Il existe en gros deux moyens de le faire :
des fichiers texte qui dcrivent la configuration de chaque interface, c'est la bonne
vieille mthode, encore tout fait d'actualit dans le cas de machines sdentaires
(poste de travail de bureau (Desktop) et encore plus de serveurs ;
un systme dynamique, NetworkManager, qui s'appuie lui-mme sur la couche HAL et
sur DBUS en environnement graphique, qui est bien pratique pour les postes portables
(Laptop), surtout lorsqu'ils sont quips d'une connexion WI-FI. NetworkManager
dispose d' applets adapts la plupart des environnements graphiques (GNOME,
KDE, XFCE). Ce projet, initi par RedHat en 2004 manque peut-tre encore un peu
de maturit, mais commence tre tout fait utilisable par une autre population que
celle des geeks .
NetworkManager
Commenons par le plus simple , c'est--dire la mthode o ce sont les autres qui
choisissent votre place (courant trs en vogue de nos jours). Un Desktop avec Ubuntu
9.04 (Jaunty) est connect au rseau o notre DHCP opre. Voici ce que a donne :
Tu cliques droite sur
l'applet puis gauche sur Informations de connexion (mthode en deux clics) et tu obtiens
:

Bien entendu, tout ceci fonctionne bien parce que les concepteurs d'Ubuntu Jaunty ont
correctement pens l'architecture de la distribution, que tous les paquets ncessaires ont t
installs et que les scripts de post-installation ont correctement configur tout a. Les trois
paquets essentiels, mais qui incluent beaucoup de dpendances, sont :
network-manager pour la gestion automatise des connexions actives ;
network-manager-gnome pour que l'applet soit prsent dans la zone de notification ;
dhcp3-client qui est le client DHCP probablement le plus courant, bien qu'il en
existe de nombreux autres. Car dans une architecture client/serveur, il faut un serveur
mais aussi un client.
A l'ancienne
Une mthode plus rustique, mais tout aussi efficace lorsque l'on est sdentaire, consiste
configurer le rseau au moyen de fichiers texte. Dans l'architecture Debian et drives, tout de
passe dans /etc/network/interfaces.
Nous sommes sur une Lenny sans interface graphique (pas de mthodes en X clics). Il nous
faut bien sr un client DHCP, pourquoi pas dhcp3-client qui est le choix par dfaut sur
Debian. En suite, nous pouvons crer ou modifier le fichier /etc/network/interfaces
comme ceci :
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
La traduction est assez intuitive : Nous voulons que eth0 soit active automatiquement et soit
configure par DHCP.
Aprs un dmarrage de notre Lenny, voyons o nous en sommes. Il existe plusieurs faons de
rcolter les informations :
ifconfig
Mthode traditionnelle :
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:16:36:51:5d:5a
inet adr:192.168.0.67 Bcast:192.168.0.255 Masque:255.255.255.0
adr inet6: 2a01:e35:2e52:9840:216:36ff:fe51:5d5a/64 Scope:Global
adr inet6: fe80::216:36ff:fe51:5d5a/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:134 errors:0 dropped:0 overruns:0 frame:0
TX packets:69 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:18211 (17.7 KiB) TX bytes:9947 (9.7 KiB)
Interruption:10 Adresse de base:0xc100
iproute
Plus moderne :
# ip addr ls dev eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:16:36:51:5d:5a brd ff:ff:ff:ff:ff:ff
inet 192.168.0.67/24 brd 192.168.0.255 scope global eth0
inet6 2a01:e35:2e52:9840:216:36ff:fe51:5d5a/64 scope global dynamic
valid_lft 86174sec preferred_lft 86174sec
inet6 fe80::216:36ff:fe51:5d5a/64 scope link
valid_lft forever preferred_lft forever
les logs
Si nous voulons vraiment savoir ce qu'il s'est pass au niveau DHCP, il suffit de consulter les
logs du client dhcp3-client qui se trouvent sur Debian dans
/var/lib/dhcp3/dhclient.eth0.leases :
# cat /var/lib/dhcp3/dhclient.eth0.leases
lease {
interface "eth0";
fixed-address 192.168.0.67;
option subnet-mask 255.255.255.0;
option routers 192.168.0.252;
option dhcp-lease-time 3600;
option dhcp-message-type 5;
option domain-name-servers 192.168.0.252;
option dhcp-server-identifier 192.168.0.252;
option netbios-name-servers 192.168.0.252;
option domain-name "maison.mrs";
renew 5 2009/05/08 08:38:00;
rebind 5 2009/05/08 09:05:37;
expire 5 2009/05/08 09:13:07;
}
Nous avons ici toutes les informations transmises. Notre systme est neuf , c'est la
premire fois que l'interface est configure. Comme nous sommes curieux, nous avons mis en
place un sniffeur (l'indispensable Wireshark), qui a captur le dialogue, mais nous verrons
a plus tard.
Les heures sont indiques en UTC.
La machine cliente a t dmarre 8h 12 UTC. Nous pouvons prendre une petite rcration.
Rendez-vous vers 8h 38 UTC.
lease {
interface "eth0";
fixed-address 192.168.0.67;
option subnet-mask 255.255.255.0;
option routers 192.168.0.252;
option dhcp-lease-time 3600;
option dhcp-message-type 5;
option domain-name-servers 192.168.0.252;
option dhcp-server-identifier 192.168.0.252;
option netbios-name-servers 192.168.0.252;
option domain-name "maison.mrs";
renew 5 2009/05/08 08:38:00;
rebind 5 2009/05/08 09:05:37;
expire 5 2009/05/08 09:13:07;
}
lease {
interface "eth0";
fixed-address 192.168.0.67;
option subnet-mask 255.255.255.0;
option routers 192.168.0.252;
option dhcp-lease-time 3600;
option dhcp-message-type 5;
option domain-name-servers 192.168.0.252;
option dhcp-server-identifier 192.168.0.252;
option netbios-name-servers 192.168.0.252;
option domain-name "maison.mrs";
renew 5 2009/05/08 09:05:03;
rebind 5 2009/05/08 09:30:30;
expire 5 2009/05/08 09:38:00;
}
Notre client DHCP a demand un renouvlement de son bail. Il le refera 9h 05 UTC etc.
Notre Wireshark n'a rien perdu de tout ceci, nous pouvons aller y voir de plus prs.
Analyse du protocole
Premier dmarrage de la station
Rsum de la capture
No. Time Source Destination Protocol
Info
1 66.901361 0.0.0.0 255.255.255.255 DHCP
DHCP Discover - Transaction ID 0xc0b5592f
2 66.901867 192.168.0.252 192.168.0.67 ICMP
Echo (ping) request
3 67.902846 192.168.0.252 192.168.0.67 DHCP
DHCP Offer - Transaction ID 0xc0b5592f
4 67.904780 0.0.0.0 255.255.255.255 DHCP
DHCP Request - Transaction ID 0xc0b5592f
5 67.930502 192.168.0.252 192.168.0.67 DHCP
DHCP ACK - Transaction ID 0xc0b5592f
1. Le client effectue une dcouverte de serveur DHCP. Il n'a pas encore d'adresse IP et
adopte donc l'adresse factice 0.0.0.0. En ralit c'est bien sr au niveau Ethernet que
les adresses seront significatives, l'analyse approfondie le montrera.
2. Le serveur (192.168.0.252) effectue un ping sur l'adresse 192.168.0.67, parce qu'il a
l'intention d'attribuer cette adresse au client. S'il recevait une rponse au ping, cela
voudrait dirue que cette adresse est dj en service sur le rseau, cause d'une
anomalie quelconque. Il n'y a pas de rponse au ping, ce qui est priori normal sur un
rseau normalement gr.
3. Le serveur offre une proposition au client.
4. Le client fait une contre-proposition. L'analyse dtaille va montrer qu'en principe,
elle est identique la proposition du serveur.
5. Le serveur accepte la contre-proposition. Le bail est donc valid par les deux
protagonistes.
Analyse dtaille
Discover
Frame 1 (342 bytes on wire, 342 bytes captured)
Arrival Time: May 8, 2009 10:13:07.933412000
[Time delta from previous captured frame: 66.901361000 seconds]
[Time delta from previous displayed frame: 66.901361000 seconds]
[Time since reference or first frame: 66.901361000 seconds]
Frame Number: 2
Frame Length: 342 bytes
Capture Length: 342 bytes
[Frame is marked: False]
[Protocols in frame: eth:ip:udp:bootp]
[Coloring Rule Name: UDP]
[Coloring Rule String: udp]
Ethernet II, Src: QuantaCo_51:5d:5a (00:16:36:51:5d:5a), Dst: Broadcast
(ff:ff:ff:ff:ff:ff)
En voil un joli broadcast ethernet...
Destination: Broadcast (ff:ff:ff:ff:ff:ff)
Address: Broadcast (ff:ff:ff:ff:ff:ff)
.... ...1 .... .... .... .... = IG bit: Group address
(multicast/broadcast)
.... ..1. .... .... .... .... = LG bit: Locally administered
address (this is NOT the factory default)
Source: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IP (0x0800)
Internet Protocol, Src: 0.0.0.0 (0.0.0.0), Dst: 255.255.255.255
(255.255.255.255)
Broadcast qui se retrouve sur la couche IP
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x10 (DSCP 0x04: Unknown DSCP; ECN:
0x00)
0001 00.. = Differentiated Services Codepoint: Unknown (0x04)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 328
Identification: 0x0000 (0)
Flags: 0x00
0... = Reserved bit: Not set
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: UDP (0x11)
Header checksum: 0x3996 [correct]
[Good: True]
[Bad : False]
Source: 0.0.0.0 (0.0.0.0)
Destination: 255.255.255.255 (255.255.255.255)
User Datagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67)
Source port: bootpc (68)
Destination port: bootps (67)
Length: 308
Checksum: 0x746b [correct]
[Good Checksum: True]
[Bad Checksum: False]
Bootstrap Protocol
Message type: Boot Request (1)
Hardware type: Ethernet
Hardware address length: 6
Hops: 0
Transaction ID: 0xc0b5592f
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0 (0.0.0.0)
Your (client) IP address: 0.0.0.0 (0.0.0.0)
Next server IP address: 0.0.0.0 (0.0.0.0)
Relay agent IP address: 0.0.0.0 (0.0.0.0)
Client MAC address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Server host name not given
Boot file name not given
Magic cookie: (OK)
Option: (t=53,l=1) DHCP Message Type = DHCP Discover
Option: (53) DHCP Message Type
Length: 1
Value: 01
Option: (t=55,l=12) Parameter Request List
Option: (55) Parameter Request List
Length: 12
Value: 011C02030F06770C2C2F1A79
1 = Subnet Mask
28 = Broadcast Address
2 = Time Offset
3 = Router
15 = Domain Name
6 = Domain Name Server
119 = Domain Search
12 = Host Name
44 = NetBIOS over TCP/IP Name Server
47 = NetBIOS over TCP/IP Scope
26 = Interface MTU
121 = Classless Static Route
End Option
Padding
Nous avons dans cette requte la liste des paramtres que le client souhaite recevoir, en plus
bien entendu de son adresse IP.
Cette capture est galement l'occasion de constater que DHCP utilise UDP, sur le port 67 pour
le client et le port 68 pour le serveur.
Ping
Frame 2 (62 bytes on wire, 62 bytes captured)
Arrival Time: May 8, 2009 10:13:07.933918000
[Time delta from previous captured frame: 0.000506000 seconds]
[Time delta from previous displayed frame: 0.000506000 seconds]
[Time since reference or first frame: 66.901867000 seconds]
Frame Number: 3
Frame Length: 62 bytes
Capture Length: 62 bytes
[Frame is marked: False]
[Protocols in frame: eth:ip:icmp:data]
[Coloring Rule Name: ICMP]
[Coloring Rule String: icmp]
Ethernet II, Src: D-Link_48:2b:84 (00:05:5d:48:2b:84), Dst:
QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Destination: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Source: D-Link_48:2b:84 (00:05:5d:48:2b:84)
Address: D-Link_48:2b:84 (00:05:5d:48:2b:84)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IP (0x0800)
Internet Protocol, Src: 192.168.0.252 (192.168.0.252), Dst: 192.168.0.67
(192.168.0.67)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 48
Identification: 0x0000 (0)
Flags: 0x04 (Don't Fragment)
0... = Reserved bit: Not set
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: ICMP (0x01)
Header checksum: 0xb83d [correct]
[Good: True]
[Bad : False]
Source: 192.168.0.252 (192.168.0.252)
Destination: 192.168.0.67 (192.168.0.67)
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
Code: 0 ()
Checksum: 0xd3c8 [correct]
Identifier: 0x2437
Sequence number: 0 (0x0000)
Data (20 bytes)

0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0010 00 00 00 00 ....
Data: 0000000000000000000000000000000000000000
Rien de bien particulier, un ping ICMP classique que le serveur fait sur l'adresse qu'il compte
fournir son client.
Offer
Frame 3 (342 bytes on wire, 342 bytes captured)
Arrival Time: May 8, 2009 10:13:08.934897000
[Time delta from previous captured frame: 1.000979000 seconds]
[Time delta from previous displayed frame: 1.000979000 seconds]
[Time since reference or first frame: 67.902846000 seconds]
Frame Number: 4
Frame Length: 342 bytes
Capture Length: 342 bytes
[Frame is marked: False]
[Protocols in frame: eth:ip:udp:bootp]
[Coloring Rule Name: UDP]
[Coloring Rule String: udp]
Ethernet II, Src: D-Link_48:2b:84 (00:05:5d:48:2b:84), Dst:
QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Ici, ce n'est plus du broadcast
Destination: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Source: D-Link_48:2b:84 (00:05:5d:48:2b:84)
Address: D-Link_48:2b:84 (00:05:5d:48:2b:84)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IP (0x0800)
Internet Protocol, Src: 192.168.0.252 (192.168.0.252), Dst: 192.168.0.67
(192.168.0.67)
Le serveur rpond au client sur sa potentielle future adresse IP.
Notez bien que le client ne la connait pas encore...
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x10 (DSCP 0x04: Unknown DSCP; ECN:
0x00)
0001 00.. = Differentiated Services Codepoint: Unknown (0x04)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 328
Identification: 0x0000 (0)
Flags: 0x00
0... = Reserved bit: Not set
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: UDP (0x11)
Header checksum: 0xb705 [correct]
[Good: True]
[Bad : False]
Source: 192.168.0.252 (192.168.0.252)
Destination: 192.168.0.67 (192.168.0.67)
User Datagram Protocol, Src Port: bootps (67), Dst Port: bootpc (68)
Source port: bootps (67)
Destination port: bootpc (68)
Length: 308
Checksum: 0x2a4d [correct]
[Good Checksum: True]
[Bad Checksum: False]
Bootstrap Protocol
Message type: Boot Reply (2)
Hardware type: Ethernet
Hardware address length: 6
Hops: 0
Transaction ID: 0xc0b5592f
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0 (0.0.0.0)
Your (client) IP address: 192.168.0.67 (192.168.0.67)
Next server IP address: 0.0.0.0 (0.0.0.0)
Relay agent IP address: 0.0.0.0 (0.0.0.0)
Client MAC address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Server host name not given
Boot file name not given
Magic cookie: (OK)
Option: (t=53,l=1) DHCP Message Type = DHCP Offer
Option: (53) DHCP Message Type
Length: 1
Value: 02
Option: (t=54,l=4) Server Identifier = 192.168.0.252
Option: (54) Server Identifier
Length: 4
Value: C0A800FC
Option: (t=51,l=4) IP Address Lease Time = 1 hour
Option: (51) IP Address Lease Time
Length: 4
Value: 00000E10
Option: (t=1,l=4) Subnet Mask = 255.255.255.0
Option: (1) Subnet Mask
Length: 4
Value: FFFFFF00
Option: (t=3,l=4) Router = 192.168.0.252
Option: (3) Router
Length: 4
Value: C0A800FC
Option: (t=15,l=10) Domain Name = "maison.mrs"
Option: (15) Domain Name
Length: 10
Value: 6D6169736F6E2E6D7273
Option: (t=6,l=4) Domain Name Server = 192.168.0.252
Option: (6) Domain Name Server
Length: 4
Value: C0A800FC
Option: (t=44,l=4) NetBIOS over TCP/IP Name Server = 192.168.0.252
Option: (44) NetBIOS over TCP/IP Name Server
Length: 4
Value: C0A800FC
End Option
Padding
Le serveur propose donc notre client une configuration complte, avec tous les paramtres
demands que le serveur est en tat de fournir.
Request
Frame 4 (342 bytes on wire, 342 bytes captured)
Arrival Time: May 8, 2009 10:13:08.936831000
[Time delta from previous captured frame: 0.001934000 seconds]
[Time delta from previous displayed frame: 0.001934000 seconds]
[Time since reference or first frame: 67.904780000 seconds]
Frame Number: 5
Frame Length: 342 bytes
Capture Length: 342 bytes
[Frame is marked: False]
[Protocols in frame: eth:ip:udp:bootp]
[Coloring Rule Name: UDP]
[Coloring Rule String: udp]
Ethernet II, Src: QuantaCo_51:5d:5a (00:16:36:51:5d:5a), Dst: Broadcast
(ff:ff:ff:ff:ff:ff)
Destination: Broadcast (ff:ff:ff:ff:ff:ff)
Address: Broadcast (ff:ff:ff:ff:ff:ff)
.... ...1 .... .... .... .... = IG bit: Group address
(multicast/broadcast)
.... ..1. .... .... .... .... = LG bit: Locally administered
address (this is NOT the factory default)
Source: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IP (0x0800)
Internet Protocol, Src: 0.0.0.0 (0.0.0.0), Dst: 255.255.255.255
(255.255.255.255)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x10 (DSCP 0x04: Unknown DSCP; ECN:
0x00)
0001 00.. = Differentiated Services Codepoint: Unknown (0x04)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 328
Identification: 0x0000 (0)
Flags: 0x00
0... = Reserved bit: Not set
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: UDP (0x11)
Header checksum: 0x3996 [correct]
[Good: True]
[Bad : False]
Source: 0.0.0.0 (0.0.0.0)
Destination: 255.255.255.255 (255.255.255.255)
User Datagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67)
Source port: bootpc (68)
Destination port: bootps (67)
Length: 308
Checksum: 0xd980 [correct]
[Good Checksum: True]
[Bad Checksum: False]
Bootstrap Protocol
Message type: Boot Request (1)
Hardware type: Ethernet
Hardware address length: 6
Hops: 0
Transaction ID: 0xc0b5592f
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0 (0.0.0.0)
Your (client) IP address: 0.0.0.0 (0.0.0.0)
Next server IP address: 0.0.0.0 (0.0.0.0)
Relay agent IP address: 0.0.0.0 (0.0.0.0)
Client MAC address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Server host name not given
Boot file name not given
Magic cookie: (OK)
Option: (t=53,l=1) DHCP Message Type = DHCP Request
Option: (53) DHCP Message Type
Length: 1
Value: 03
Option: (t=54,l=4) Server Identifier = 192.168.0.252
Option: (54) Server Identifier
Length: 4
Value: C0A800FC
Option: (t=50,l=4) Requested IP Address = 192.168.0.67
Option: (50) Requested IP Address
Length: 4
Value: C0A80043
Option: (t=55,l=12) Parameter Request List
Option: (55) Parameter Request List
Length: 12
Value: 011C02030F06770C2C2F1A79
1 = Subnet Mask
28 = Broadcast Address
2 = Time Offset
3 = Router
15 = Domain Name
6 = Domain Name Server
119 = Domain Search
12 = Host Name
44 = NetBIOS over TCP/IP Name Server
47 = NetBIOS over TCP/IP Scope
26 = Interface MTU
121 = Classless Static Route
End Option
Padding
Notre client effectue sa requte, toujours en broadcast. Il indique cependant :
l'adresse IP du serveur DHCP auprs duquel il fait la demande, vitant ainsi, s'il y a
d'autres serveurs, qu'ils poursuivent le dialogue ;
l'adresse IP qu'il accepte.
Il n'a pas d'autres exigences.
ACK
Frame 5 (342 bytes on wire, 342 bytes captured)
Arrival Time: May 8, 2009 10:13:08.962553000
[Time delta from previous captured frame: 0.025722000 seconds]
[Time delta from previous displayed frame: 0.025722000 seconds]
[Time since reference or first frame: 67.930502000 seconds]
Frame Number: 6
Frame Length: 342 bytes
Capture Length: 342 bytes
[Frame is marked: False]
[Protocols in frame: eth:ip:udp:bootp]
[Coloring Rule Name: UDP]
[Coloring Rule String: udp]
Ethernet II, Src: D-Link_48:2b:84 (00:05:5d:48:2b:84), Dst:
QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Destination: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Source: D-Link_48:2b:84 (00:05:5d:48:2b:84)
Address: D-Link_48:2b:84 (00:05:5d:48:2b:84)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IP (0x0800)
Internet Protocol, Src: 192.168.0.252 (192.168.0.252), Dst: 192.168.0.67
(192.168.0.67)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x10 (DSCP 0x04: Unknown DSCP; ECN:
0x00)
0001 00.. = Differentiated Services Codepoint: Unknown (0x04)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 328
Identification: 0x0000 (0)
Flags: 0x00
0... = Reserved bit: Not set
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: UDP (0x11)
Header checksum: 0xb705 [correct]
[Good: True]
[Bad : False]
Source: 192.168.0.252 (192.168.0.252)
Destination: 192.168.0.67 (192.168.0.67)
User Datagram Protocol, Src Port: bootps (67), Dst Port: bootpc (68)
Source port: bootps (67)
Destination port: bootpc (68)
Length: 308
Checksum: 0x274d [correct]
[Good Checksum: True]
[Bad Checksum: False]
Bootstrap Protocol
Message type: Boot Reply (2)
Hardware type: Ethernet
Hardware address length: 6
Hops: 0
Transaction ID: 0xc0b5592f
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 0.0.0.0 (0.0.0.0)
Your (client) IP address: 192.168.0.67 (192.168.0.67)
Next server IP address: 0.0.0.0 (0.0.0.0)
Relay agent IP address: 0.0.0.0 (0.0.0.0)
Client MAC address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Server host name not given
Boot file name not given
Magic cookie: (OK)
Option: (t=53,l=1) DHCP Message Type = DHCP ACK
Option: (53) DHCP Message Type
Length: 1
Value: 05
Option: (t=54,l=4) Server Identifier = 192.168.0.252
Option: (54) Server Identifier
Length: 4
Value: C0A800FC
Option: (t=51,l=4) IP Address Lease Time = 1 hour
Option: (51) IP Address Lease Time
Length: 4
Value: 00000E10
Option: (t=1,l=4) Subnet Mask = 255.255.255.0
Option: (1) Subnet Mask
Length: 4
Value: FFFFFF00
Option: (t=3,l=4) Router = 192.168.0.252
Option: (3) Router
Length: 4
Value: C0A800FC
Option: (t=15,l=10) Domain Name = "maison.mrs"
Option: (15) Domain Name
Length: 10
Value: 6D6169736F6E2E6D7273
Option: (t=6,l=4) Domain Name Server = 192.168.0.252
Option: (6) Domain Name Server
Length: 4
Value: C0A800FC
Option: (t=44,l=4) NetBIOS over TCP/IP Name Server = 192.168.0.252
Option: (44) NetBIOS over TCP/IP Name Server
Length: 4
Value: C0A800FC
End Option
Padding
Le serveur donne donc son accord pour le bail avec ses paramtres dfinitifs. Il n'y a plus ici
de broadcast, le serveur s'adresse en unicast son client.
Renouvlement
Lorsque nous sommes arriv l'heure renew, notre client va contacter le serveur DHCP :
No. Time Source Destination Protocol
Info
1 0.000000 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f

Frame 1 (342 bytes on wire, 342 bytes captured)
Arrival Time: May 8, 2009 10:38:01.936555000
[Time delta from previous captured frame: 0.000000000 seconds]
[Time delta from previous displayed frame: 0.000000000 seconds]
[Time since reference or first frame: 0.000000000 seconds]
Frame Number: 1
Frame Length: 342 bytes
Capture Length: 342 bytes
[Frame is marked: False]
[Protocols in frame: eth:ip:udp:bootp]
[Coloring Rule Name: UDP]
[Coloring Rule String: udp]
Ethernet II, Src: QuantaCo_51:5d:5a (00:16:36:51:5d:5a), Dst: D-
Link_48:2b:84 (00:05:5d:48:2b:84)
Destination: D-Link_48:2b:84 (00:05:5d:48:2b:84)
Address: D-Link_48:2b:84 (00:05:5d:48:2b:84)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Source: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IP (0x0800)
Internet Protocol, Src: 192.168.0.67 (192.168.0.67), Dst: 192.168.0.252
(192.168.0.252)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 328
Identification: 0x0000 (0)
Flags: 0x04 (Don't Fragment)
0... = Reserved bit: Not set
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: UDP (0x11)
Header checksum: 0xb715 [correct]
[Good: True]
[Bad : False]
Source: 192.168.0.67 (192.168.0.67)
Destination: 192.168.0.252 (192.168.0.252)
User Datagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67)
Source port: bootpc (68)
Destination port: bootps (67)
Length: 308
Checksum: 0x2eef [correct]
[Good Checksum: True]
[Bad Checksum: False]
Bootstrap Protocol
Message type: Boot Request (1)
Hardware type: Ethernet
Hardware address length: 6
Hops: 0
Transaction ID: 0xc0b5592f
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 192.168.0.67 (192.168.0.67)
Your (client) IP address: 0.0.0.0 (0.0.0.0)
Next server IP address: 0.0.0.0 (0.0.0.0)
Relay agent IP address: 0.0.0.0 (0.0.0.0)
Client MAC address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Server host name not given
Boot file name not given
Magic cookie: (OK)
Option: (t=53,l=1) DHCP Message Type = DHCP Request
Option: (53) DHCP Message Type
Length: 1
Value: 03
Option: (t=55,l=12) Parameter Request List
Option: (55) Parameter Request List
Length: 12
Value: 011C02030F06770C2C2F1A79
1 = Subnet Mask
28 = Broadcast Address
2 = Time Offset
3 = Router
15 = Domain Name
6 = Domain Name Server
119 = Domain Search
12 = Host Name
44 = NetBIOS over TCP/IP Name Server
47 = NetBIOS over TCP/IP Scope
26 = Interface MTU
121 = Classless Static Route
End Option
Padding
Et le serveur rpond :
No. Time Source Destination Protocol
Info
2 0.027503 192.168.0.252 192.168.0.67 DHCP
DHCP ACK - Transaction ID 0xc0b5592f

Frame 2 (342 bytes on wire, 342 bytes captured)
Arrival Time: May 8, 2009 10:38:01.964058000
[Time delta from previous captured frame: 0.027503000 seconds]
[Time delta from previous displayed frame: 0.027503000 seconds]
[Time since reference or first frame: 0.027503000 seconds]
Frame Number: 2
Frame Length: 342 bytes
Capture Length: 342 bytes
[Frame is marked: False]
[Protocols in frame: eth:ip:udp:bootp]
[Coloring Rule Name: UDP]
[Coloring Rule String: udp]
Ethernet II, Src: D-Link_48:2b:84 (00:05:5d:48:2b:84), Dst:
QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Destination: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Source: D-Link_48:2b:84 (00:05:5d:48:2b:84)
Address: D-Link_48:2b:84 (00:05:5d:48:2b:84)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IP (0x0800)
Internet Protocol, Src: 192.168.0.252 (192.168.0.252), Dst: 192.168.0.67
(192.168.0.67)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 328
Identification: 0x0000 (0)
Flags: 0x04 (Don't Fragment)
0... = Reserved bit: Not set
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: UDP (0x11)
Header checksum: 0xb715 [correct]
[Good: True]
[Bad : False]
Source: 192.168.0.252 (192.168.0.252)
Destination: 192.168.0.67 (192.168.0.67)
User Datagram Protocol, Src Port: bootps (67), Dst Port: bootpc (68)
Source port: bootps (67)
Destination port: bootpc (68)
Length: 308
Checksum: 0x6661 [correct]
[Good Checksum: True]
[Bad Checksum: False]
Bootstrap Protocol
Message type: Boot Reply (2)
Hardware type: Ethernet
Hardware address length: 6
Hops: 0
Transaction ID: 0xc0b5592f
Seconds elapsed: 0
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 192.168.0.67 (192.168.0.67)
Your (client) IP address: 192.168.0.67 (192.168.0.67)
Next server IP address: 0.0.0.0 (0.0.0.0)
Relay agent IP address: 0.0.0.0 (0.0.0.0)
Client MAC address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Server host name not given
Boot file name not given
Magic cookie: (OK)
Option: (t=53,l=1) DHCP Message Type = DHCP ACK
Option: (53) DHCP Message Type
Length: 1
Value: 05
Option: (t=54,l=4) Server Identifier = 192.168.0.252
Option: (54) Server Identifier
Length: 4
Value: C0A800FC
Option: (t=51,l=4) IP Address Lease Time = 1 hour
Option: (51) IP Address Lease Time
Length: 4
Value: 00000E10
Option: (t=1,l=4) Subnet Mask = 255.255.255.0
Option: (1) Subnet Mask
Length: 4
Value: FFFFFF00
Option: (t=3,l=4) Router = 192.168.0.252
Option: (3) Router
Length: 4
Value: C0A800FC
Option: (t=15,l=10) Domain Name = "maison.mrs"
Option: (15) Domain Name
Length: 10
Value: 6D6169736F6E2E6D7273
Option: (t=6,l=4) Domain Name Server = 192.168.0.252
Option: (6) Domain Name Server
Length: 4
Value: C0A800FC
Option: (t=44,l=4) NetBIOS over TCP/IP Name Server = 192.168.0.252
Option: (44) NetBIOS over TCP/IP Name Server
Length: 4
Value: C0A800FC
End Option
Padding
Notez que dans le dialogue, le client annonce cette fois-ci son adresse IP et que le serveur la
lui confirme. Toutes les autres options peuvent changer d'un bail l'autre, ce qui permet,
lorsque l'administrateur a planifi par exemple un changement d'adresse de passerelle ou de
DNS, de s'arranger pour que la modification se passe en douceur dans un laps de temps que
l'on peut estimer.
Ce renouvlement se fait entirement en mode unicast.
Le grain de sable
Tout ceci est parfait, mais imaginons que notre serveur DHCP tombe en panne. Que va-t-il se
produire ? Faisons la manip. Nous jouons un sale tour notre client en posant sur le serveur
DHCP la rgle IPtables :
iptables -A OUTPUT -d 192.168.0.67 -j DROP
Alors
Renew
A l'heure dite, le client va lancer un renew, mais le serveur ne rpond pas
Le client insiste :
No. Time Source Destination Protocol
Info
1 0.000000 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
2 4.995823 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
3 14.995826 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
4 29.995825 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
5 44.995826 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
6 51.995826 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
7 62.995841 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
8 74.995824 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
9 95.995830 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
10 116.995824 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
11 129.995829 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
12 148.995836 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
13 163.995835 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
14 177.995833 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
15 193.995844 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
16 211.995839 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
17 225.995830 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
...
Admirez la patience (obstination ?) de notre client qui va sans relche insister jusqu' :
No. Time Source Destination Protocol
Info
1 0.000000 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
2 15.000000 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
3 23.999995 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
4 39.999999 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
5 58.000005 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
6 78.999998 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
7 89.999997 192.168.0.67 192.168.0.252 DHCP
DHCP Request - Transaction ID 0xc0b5592f
8 111.000002 192.168.0.67 255.255.255.255 DHCP
DHCP Request - Transaction ID 0xc0b5592f
9 131.999996 192.168.0.67 255.255.255.255 DHCP
DHCP Request - Transaction ID 0xc0b5592f
10 151.999988 192.168.0.67 255.255.255.255 DHCP
DHCP Request - Transaction ID 0xc0b5592f
11 159.999990 192.168.0.67 255.255.255.255 DHCP
DHCP Request - Transaction ID 0xc0b5592f
Notre client change de tactique. Il n'interroge plus 192.168.0.252. Il a fini par se rendre
l'vidence : ce serveur est hors service. Il va alors, tout en conservant son adresse IP actuelle,
commencer une srie de requtes en broadcast, des fois qu'un bon admin aurait mis en place
un autre DHCP, mais avec une autre adresse IP.
Voyons le dtail des paquets 7 et 8 :
Frame 7 (342 bytes on wire, 342 bytes captured)
Arrival Time: May 8, 2009 16:25:50.932358000
[Time delta from previous captured frame: 10.999999000 seconds]
[Time delta from previous displayed frame: 10.999999000 seconds]
[Time since reference or first frame: 89.999997000 seconds]
Frame Number: 7
Frame Length: 342 bytes
Capture Length: 342 bytes
[Frame is marked: False]
[Protocols in frame: eth:ip:udp:bootp]
[Coloring Rule Name: UDP]
[Coloring Rule String: udp]
Ethernet II, Src: QuantaCo_51:5d:5a (00:16:36:51:5d:5a), Dst: D-
Link_48:2b:84 (00:05:5d:48:2b:84)
Destination: D-Link_48:2b:84 (00:05:5d:48:2b:84)
Address: D-Link_48:2b:84 (00:05:5d:48:2b:84)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Source: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IP (0x0800)
Internet Protocol, Src: 192.168.0.67 (192.168.0.67), Dst: 192.168.0.252
(192.168.0.252)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 328
Identification: 0x0000 (0)
Flags: 0x04 (Don't Fragment)
0... = Reserved bit: Not set
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 64
Protocol: UDP (0x11)
Header checksum: 0xb715 [correct]
[Good: True]
[Bad : False]
Source: 192.168.0.67 (192.168.0.67)
Destination: 192.168.0.252 (192.168.0.252)
User Datagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67)
Source port: bootpc (68)
Destination port: bootps (67)
Length: 308
Checksum: 0x27f7 [correct]
[Good Checksum: True]
[Bad Checksum: False]
Bootstrap Protocol
Message type: Boot Request (1)
Hardware type: Ethernet
Hardware address length: 6
Hops: 0
Transaction ID: 0xc0b5592f
Seconds elapsed: 1784
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 192.168.0.67 (192.168.0.67)
Your (client) IP address: 0.0.0.0 (0.0.0.0)
Next server IP address: 0.0.0.0 (0.0.0.0)
Relay agent IP address: 0.0.0.0 (0.0.0.0)
Client MAC address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Server host name not given
Boot file name not given
Magic cookie: (OK)
Option: (t=53,l=1) DHCP Message Type = DHCP Request
Option: (53) DHCP Message Type
Length: 1
Value: 03
Option: (t=55,l=12) Parameter Request List
Option: (55) Parameter Request List
Length: 12
Value: 011C02030F06770C2C2F1A79
1 = Subnet Mask
28 = Broadcast Address
2 = Time Offset
3 = Router
15 = Domain Name
6 = Domain Name Server
119 = Domain Search
12 = Host Name
44 = NetBIOS over TCP/IP Name Server
47 = NetBIOS over TCP/IP Scope
26 = Interface MTU
121 = Classless Static Route
End Option
Padding
Paquet 7, la requte est bien encore unicast. Dans la suivante :
Frame 8 (342 bytes on wire, 342 bytes captured)
Arrival Time: May 8, 2009 16:26:11.932363000
[Time delta from previous captured frame: 21.000005000 seconds]
[Time delta from previous displayed frame: 21.000005000 seconds]
[Time since reference or first frame: 111.000002000 seconds]
Frame Number: 8
Frame Length: 342 bytes
Capture Length: 342 bytes
[Frame is marked: False]
[Protocols in frame: eth:ip:udp:bootp]
[Coloring Rule Name: UDP]
[Coloring Rule String: udp]
Ethernet II, Src: QuantaCo_51:5d:5a (00:16:36:51:5d:5a), Dst: Broadcast
(ff:ff:ff:ff:ff:ff)
Destination: Broadcast (ff:ff:ff:ff:ff:ff)
Address: Broadcast (ff:ff:ff:ff:ff:ff)
.... ...1 .... .... .... .... = IG bit: Group address
(multicast/broadcast)
.... ..1. .... .... .... .... = LG bit: Locally administered
address (this is NOT the factory default)
Source: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
.... ...0 .... .... .... .... = IG bit: Individual address
(unicast)
.... ..0. .... .... .... .... = LG bit: Globally unique address
(factory default)
Type: IP (0x0800)
Internet Protocol, Src: 192.168.0.67 (192.168.0.67), Dst: 255.255.255.255
(255.255.255.255)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x10 (DSCP 0x04: Unknown DSCP; ECN:
0x00)
0001 00.. = Differentiated Services Codepoint: Unknown (0x04)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 328
Identification: 0x0000 (0)
Flags: 0x00
0... = Reserved bit: Not set
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: UDP (0x11)
Header checksum: 0x78aa [correct]
[Good: True]
[Bad : False]
Source: 192.168.0.67 (192.168.0.67)
Destination: 255.255.255.255 (255.255.255.255)
User Datagram Protocol, Src Port: bootpc (68), Dst Port: bootps (67)
Source port: bootpc (68)
Destination port: bootps (67)
Length: 308
Checksum: 0xe986 [correct]
[Good Checksum: True]
[Bad Checksum: False]
Bootstrap Protocol
Message type: Boot Request (1)
Hardware type: Ethernet
Hardware address length: 6
Hops: 0
Transaction ID: 0xc0b5592f
Seconds elapsed: 1805
Bootp flags: 0x0000 (Unicast)
0... .... .... .... = Broadcast flag: Unicast
.000 0000 0000 0000 = Reserved flags: 0x0000
Client IP address: 192.168.0.67 (192.168.0.67)
Your (client) IP address: 0.0.0.0 (0.0.0.0)
Next server IP address: 0.0.0.0 (0.0.0.0)
Relay agent IP address: 0.0.0.0 (0.0.0.0)
Client MAC address: QuantaCo_51:5d:5a (00:16:36:51:5d:5a)
Server host name not given
Boot file name not given
Magic cookie: (OK)
Option: (t=53,l=1) DHCP Message Type = DHCP Request
Option: (53) DHCP Message Type
Length: 1
Value: 03
Option: (t=55,l=12) Parameter Request List
Option: (55) Parameter Request List
Length: 12
Value: 011C02030F06770C2C2F1A79
1 = Subnet Mask
28 = Broadcast Address
2 = Time Offset
3 = Router
15 = Domain Name
6 = Domain Name Server
119 = Domain Search
12 = Host Name
44 = NetBIOS over TCP/IP Name Server
47 = NetBIOS over TCP/IP Scope
26 = Interface MTU
121 = Classless Static Route
End Option
Padding
Nous avons bien ici du broadcast, mais le reste de la requte reste inchang. Le client
conserve l'espoir de trouver un autre serveur DHCP qui lui renouvellera son bail actuel. Notre
client a chang de tactique l'heure rebind indique dans le bail prcdent.
Cependant notre rgle IPtables est encore plus obstine que notre client, il n'y a pas de
nouveau serveur DHCP sur le rseau et finalement, le bail expire l'heure expire :
Mort (et rsurection)
No. Time Source Destination Protocol
Info
1 0.000000 192.168.0.67 255.255.255.255 DHCP
DHCP Request - Transaction ID 0xc0b5592f
2 14.999984 192.168.0.67 255.255.255.255 DHCP
DHCP Request - Transaction ID 0xc0b5592f
3 24.999987 192.168.0.67 255.255.255.255 DHCP
DHCP Request - Transaction ID 0xc0b5592f
4 38.999972 192.168.0.67 255.255.255.255 DHCP
DHCP Request - Transaction ID 0xc0b5592f
5 47.999964 192.168.0.67 255.255.255.255 DHCP
DHCP Request - Transaction ID 0xc0b5592f
6 64.999972 192.168.0.67 255.255.255.255 DHCP
DHCP Request - Transaction ID 0xc0b5592f
7 71.045835 0.0.0.0 255.255.255.255 DHCP
DHCP Discover - Transaction ID 0xf4b2bf16
8 71.046413 192.168.0.252 192.168.0.67 DHCP
DHCP Offer - Transaction ID 0xf4b2bf16
9 71.046704 0.0.0.0 255.255.255.255 DHCP
DHCP Request - Transaction ID 0xf4b2bf16
10 71.115898 192.168.0.252 192.168.0.67 DHCP
DHCP ACK - Transaction ID 0xf4b2bf16
La trame 7 montre que notre client a perdu son adresse IP, mais il ne renonce toujours pas. Il
fait maintenant une recherche de DHCP (Discover) et l, le miracle se produit, il redcouvre
notre DHCP qui lui attribue alors un bail tout neuf. Contre toute attente, l'histoire finit bien.
Mais est-ce vraiment un miracle ?
En ralit, l'obstination de notre client a eu raison de celle de la rgle IPtables. En effet, notre
Netfilter ne laisse rien sortir vers 192.168.0.67, mais notre client a repris l'adresse factice
0.0.0.0 et Netfilter, leurr, laisse tomber son fromage. Notre client ne manque alors pas de
s'en saisir.
S'il s'tait agi d'une vraie panne de DHCP, il n'y aurait pas eu de fromage et notre client serait
rest le bec dans l'eau.
Conclusion
Nous avons pu constater ici que DHCP est un protocole extrmement opinitre et prudent. Le
client se laisse de la marge en cas d'accident et commence demander un renouvlement bien
avant l'heure d'expiration, en cas d'accident, il essaye de retrouver un autre serveur qui lui
renouvlerait son bail, et mme mort, il essaye encore.
Il n'aura pas chapp au lecteur attentif que, bien que le bail ait expir, le nouveau bail
rcupr par tromperie de Netfilter propose la mme adresse IP que la prcdente. Est-ce un
hasard ?
Pas du tout. En ralit le serveur garde en mmoire toutes les informations concernant les
baux qu'il distribue et dans toute la mesure du possible, cherchera attribuer la mme adresse
IP une adresse MAC donne. C'est gnralement le cas, sauf lorsqu'il y a pnurie d'adresses
IP. Le serveur est alors oblig de donner des adresses dj attribues, mais libres, de
nouveaux clients.
Nous n'avons pas vu en dtail toutes les possibilits de DHCP, mais ce chapitre a pu montrer
le principe de base. Un client peut avoir quelques exigences sur divers paramtres, qu'il va
alors annoncer dans sa requte. Le serveur pourra ou non satisfaire ces exigences une
ngociation plus ou moins serre pourra s'en suivre termine par une entente cordiale ou non.
Ce genre de situation reste cependant assez rare.
Pour tout savoir sur DHCP, le mieux est de poursuivre par la lecture des RFC 2131 :
Dynamic Host Configuration Protocol et aussi pourquoi pas, des RFC 2132 : DHCP
Options and BOOTP Vendor Extensions .
SMTP
Simple Mail Transfert Protocol
Un des protocoles les plus fondamentaux de l'Internet. Nous l'utilisons tous les jours et nous
sommes loin d'en connatre toutes les finesses
Lorsque j'ai dcid de construire cet expos, je n'avais pas une ide exacte de la galre dans
laquelle je me mettais. C'est exactement la mme que celle dans laquelle vous allez vous
mettre si vous poursuivez sa lecture (On ne pourra pas dire que je soigne ma publicit).
Vous continuez? Je vous aurai prvenu
Qu'allons nous voir au juste ?
L'objectif initial de ce chapitre tait double:
Dtailler un peu ce qu'il se passe lorsqu'on envoie un message, comment l'information
voyage et arrive chez le destinataire et comment s'y prendre pour que le destinataire
dispose d'une information lisible. Tout le monde n'utilise pas les mmes outils de
messagerie, les mmes systmes d'exploitation, le but tant tout de mme d'arriver
communiquer entre mondes diffrents.
Cette partie de l'expos, je la voulais simple et relativement complte. J'ai vite constat
que c'tait une gagere (prononcer [gazyr] Action, projet, opinion si trange, si
difficile, qu'on dirait un pari impossible tenir).
Cette partie l a donc explos en deux morceaux:
o L'un qui reste simple et traite en gros du transport SMTP et en dtail des
divers moyens de coder un message pour qu'il puisse passer par les tuyaux de
SMTP. Cette partie contient ce qui, mon sens, devrait tre connu de tout
internaute responsable, parce que c'est le fondement d'une tour de Babel
moderne. Autant vous dire que vous avez intrt lire au moins cette partie
o L'autre morceau reprend en dtail le transport SMTP, en s'appuyant sur une
analyse de trames lors d'un envoi de message et sur une mthode d'envoi de
message la Robinson Crusoe, avec TELNET, pour manipuler soi-mme les
commandes reconnues par le protocole SMTP.
Un troisime volet intressant consistait montrer comment construire un systme
autonome qui permette de poster des messages sans avoir utiliser le serveur propos
par votre fournisseur d'accs. C'est une opration priori trs simple raliser, mais
qui ncessite de connaitre un minimum les outils que l'on emploie, si l'on ne veut pas
courir le risque de jouer aux apprentis sorciers. L'exprience apprenant des choses,
dans cette version remise jour, j'ai choisi d'exposer la mise en uvre de systmes de
messagerie (Postfix, Qmail), dans des chapitres spars.
Les bases
Dans cette partie de l'expos, nous allons voir en dtail ce que tout internaute gagnerait
savoir, concernant la faon dont les e-mails voyagent, Quel est leur contenu exact, comment
les informations sont codes
Cette partie est donc divise en trois paragraphes :
la faon dont le message voyage, depuis l'metteur jusqu'au destinataire ;
une analyse dtaille de tout le contenu du message, y compris l'en-tte qui n'est pas
visible par dfaut dans les outils de messagerie courants ;
une explication de la faon dont le contenu du message est cod pour pouvoir tre
transport par SMTP.
Itinraire d'un message lectronique
Supposons un cas simple (et cependant courant).
Soit un utilisateur abonn chez truc et ayant pour adresse lectronique :
fred@truc.fr.
Soit un autre utilisateur abonn chez machin et ayant pour adresse lectronique
marc@machin.com.
truc dispose des serveurs :
o smtp.truc.fr
o pop.truc.fr
machin dispose des serveurs :
o smtp.machin.com
o pop.machin.com
Fred doit envoyer un message Marc.

1. Fred compose le message avec son outil de messagerie prfr, disons outlook
express. Il a des avantages: Il est gratuit et il est fait par Microsoft.
Une fois le message compos, Fred clique sur le bouton envoyer de son MUA
(comme Mail User Agent). Comme il a correctement configur son outil, le message
est envoy sur le serveur smtp.truc.fr (MTA, comme Mail Transfert Agent).
2. Le serveur smtp.truc.fr reoit le message, constate que le destinataire n'est pas dans
son domaine (sa destination). Il cherche alors un MTA dans le domaine machin.com et
le trouve (DNS est l pour a, entre autres choses). Il envoie le message
smtp.machin.com.
3. Le serveur smtp.machin.com reoit le message, constate que le destinataire est bien
dans son domaine (ses destinations). Il range alors le message dans la boite aux lettres
de Marc, par l'intermdiaire d'un composant appel MDA, comme Mail Delivery
Agent. Il y restera aussi longtemps qu'il le faudra, sans rien dire personne.
4. Un jour, Marc dcide de regarder s'il n'a pas de messages. Il envoie donc une requte
son serveur pop.machin.com, au moyen de son outil de messagerie prfr, par
exemple Thunderbird (un autre MUA). Il a des avantages: il est libre, gratuit et
n'est pas fait par Microsoft.
5. Le serveur pop consulte la boite aux lettres de Marc, constate qu'il y a un message
dedans.
6. Il l'envoie alors l'outil de messagerie de Marc qui, par dfaut, demandera
pop.machin.com de le supprimer de la boite aux lettres. Nous supposons ici que Marc,
ou plutt son MDA, utilise le protocole POP3. Mais c'est un comportement par dfaut,
il est possible de demander ne pas effacer les messages (mme avec POP3). Cette
fonction est utile lorsque l'on dsire consulter sa messagerie de divers endroits sans
avoir se renvoyer un message si on veut le relire ailleurs.
POP3 est un protocole de relve de courrier. Sans entrer ici dans les dtails, il en existe un
autre appel IMAP. D'ailleurs, tout ceci est tudi dans d'autres chapitres de ce site.
Mcanismes mis en jeu
SMTP (Simple Message Transfert Protocol)
C'est le protocole applicatif qui permet de transporter les messages sur l'Internet. Il sait
acheminer un message jusqu' une bote aux lettres, mais ne va pas plus loin.
Pour y arriver, il analyse dans un premier temps la partie de l'adresse situe droite du @ (
prononcer dans ce cas at ), pour trouver le domaine du destinataire. Si ce domaine le
concerne, il cherche alors la bote aux lettres du destinataire en regardant la partie de l'adresse
situe gauche du @. Si le domaine du destinataire ne le concerne pas, il va chercher le
serveur SMTP qui gre ce domaine, au moyen des champs MX du DNS du domaine
destinataire et transmet le message ce serveur.
POP3 (Post Office Protocol 3)
Ce protocole est exclusivement utilis pour le dialogue entre le client de messagerie et la bote
aux lettres. Il ne fait pas de transport sur l'Internet, il permet juste l'utilisateur de grer son
courrier. IMAP4 (Internet (ou Interactive ?) Mail (ou Message ?) Access Protocol version 4)
en est une alternative.
MUA, MTA, MDA et cetera
Un peu de jargon :
Le MUA (Mail User Agent), c'est le client de messagerie (Thunderbird, Outlook
Express, Eudora, Pegasus etc.).
Le MTA (Mail Transfert Agent) est prendre au sens large. Le courrier peut tre
achemin d'un point un autre par l'intermdiaire d'agents de transfert qui ne grent
pas de boites aux lettres, mais savent relayer le courrier d'un point un autre pour
atteindre le serveur supportant les boites aux lettres. En effet, l'exemple vu plus haut
est le plus simple que l'on puisse imaginer. Dans la pratique, le courrier peut transiter
par plusieurs MTA. Nous le verrons plus loin.
Le MDA (Mail Delivery Agent) aussi appel LDA (Local Delivery Agent) est le
service de remise du courrier dans les boites aux lettres des destinataires, une fois que
le courrier est arriv sur le MTA de destination. Le MTA transmet alors au MDA les
messages destins aux clients du domaine.
le MX (Mail eXchanger), n'est rien de plus qu'un MTA rfrenc sur les DNS, comme
nous le verrons plus loin.
Rcapitulons
Lorsque l'on rdige un courrier et qu'on le poste, on le fait avec le MUA qui le transmet au
MTA qu'on lui a signal dans la configuration (pour un abonn Free, c'est normalement
smtp.free.fr). C'est l'tape 1 du petit schma vu plus haut.
De MTA en MTA, le message voyage jusque sur le MTA qui a en charge la messagerie du
domaine du destinataire (tape 2). Il le passe alors (avec tous les autres messages entrant pour
ce domaine) au MDA qui distribue ce courrier entrant dans les boites aux lettres concernes
(tape 3).
Les tapes 4, 5 et 6 concernent le serveur POP (ou IMAP).
Dans les entrailles de l'e-mail
D'abord, en franais on ne dit pas e-mail , ni mail ; on dit ml (je t'envoie un ml, tu
m'envoies un ml, on s'envoie des mls), on peut dire galement courriel . Mais, pour la
bonne comprhension du texte, je continuerai crire e-mail .
Lorsque vous recevez un e-mail, votre MUA (maintenant qu'on sait ce que c'est) vous montre:
L'expditeur.
L'Objet (qu'il ne faut jamais oublier de remplir, c'est utile pour trier son courrier).
Le texte (ou corps) du message.
Mais votre e-mail contient toute une partie cache qui nous permet de savoir quel chemin
cet e-mail a suivi pour arriver dans votre bote aux lettres.
Cette partie, appele l'en-tte, n'est pas top secret , bien que non visible par dfaut. Vous
pouvez toujours la consulter avec votre MUA. Pour Thunderbird, menu Affichage/code
source du message . Pour Outlook Express, il y a longtemps que j'ai oubli.
Prenons un exemple

Return-Path: <christian.caleca@wxnxdoo.fr>
Received: from alisier.wxnxdoo.fr (smtp-rt-9.wxnxdoo.fr [193.252.19.55])
by mail.monaco.net (Pro-8.9.3/Pro-8.9.3) with ESMTP id SAA07439
for <eme13@enprovence.com>; Thu, 11 May 2000 18:20:10 +0200
Received: from mahonia.wxnxdoo.fr (193.252.19.58)
by alisier.wxnxdoo.fr; 11 May 2000 18:20:08 +0200
Received: from CHRIS (62.161.101.240)
by mahonia.wxnxdoo.fr; 11 May 2000 18:19:51 +0200
Message-ID: <000501bfbb64$afc796c0$0a00a8c0@maison.mrs>
From: "Christian CALECA" <christian.caleca@wxnxdoo.fr>
To: <eme13@enprovence.com>
Subject: test itineraire
Date: Thu, 11 May 2000 18:19:24 +0200
MIME-Version: 1.0
Content-Type: text/plain;
charset= "iso-8859-1"
Content-Transfer-Encoding: 8bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2919.6600
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600
Status:


Juste pour analyser l'en-tte
Toute la partie en gras constitue ce que l'on appelle l'en-tte, alors que la dernire ligne, le
message lui-mme, s'appelle le corps.
Note :
Pour viter de faire la partie trop belle aux robots renifleurs d'adresses e-mails, certains noms
de domaines ont t volontairement dgrads.
Dtail de l'en-tte
Tous les mots finis par : sont des champs qui ont une signification particulire, soit pour
les MTA, soit pour les MUA. Nous allons dtailler leur signification.
Return-Path:
C'est l'adresse qui sera utilise:
* Pour la rponse (la fonction rpondre l'expditeur)
* Le renvoi du message s'il ne peut arriver au destinataire.
Received:
Cette ligne est un peu particulire. Chaque MTA qui reoit le message y incrit
le nom du MTA qui le lui a envoy, ainsi que le sien. Il est ainsi possible de
retracer compltement la route qu'a suivi le message de l'expditeur jusqu'au
destinataire.
Message-ID:
C'est un identifiant unique du message. Il est attribu par le premier MTA qui
reoit le message (Protocole ESMTP: Extended SMTP).
From:
C'est l'adresse de l'expditeur. Elle est par dfaut recopie dans le return
path , sauf configuration diffrente du MUA de l'expditeur.
To: C'est l'adresse du (ou des) destinataire(s)
Subject: L'objet du message
Date: La date d'mission crite par le MUA de l'metteur
MIME-
Version:
Version du mode de codage des donnes. Cette information a tellement
d'importance que nous allons y consacrer toute une page.
Content-
Type:
Type de codage utilis.
charset= Jeu de caractres utilis.
Content-
Transfer-
Encoding:
Codage sur 7 ou 8 bits.
X-
Tous les champs commenant par X ne sont pas des champs officiels .
CHaque MUA est libre d'en ajouter autant qu'il veut. Leur contenu n'est pas
pris en compte par les MTA. Ainsi, il est illusoire de croire que le champ X-
Priority ait une quelconque importance dans la vitesse de transport du
message.
Cette liste de champs n'est pas complte. Il y en aurait pour trois pages les noncer tous
Utilit de l'en-tte
L'en-tte contient donc toutes les informations ncessaires pour:
Identifier l'auteur du message
Identifier le destinataire
Savoir qui il faut rpondre
Retrouver le chemin suivi par le message
Savoir comment a t cod ce message.
Des informations subsidiaires (champs X) qui ne sont pas utiliss par SMTP ni
ESMPT, mais qui permettent de donner des informations qui peuvent tre utiles,
comme le MUA qui a gnr le message.

Vertus et dfauts de SMTP
Ce protocole a la vertu d'tre particulirement solide , mais il est un peu ancien et il lui
manque quelques fonctionnalits qui seraient bien utiles aujourd'hui :
la scurisation de la transmission. Encore qu'une extension STARTTLS ait t
cre dans ce but (voir ce propos le site Scurisation des courriers lectroniques )
;
les possibilits de transmettre autre chose que du texte brut.
Ces deux limites peuvent tre contournes :
en chiffrant son message ;
en utilisant un artifice pour encoder tout type de document de telle manire que SMTP
croie que c'est du texte. Etudier ce systme ici nous mnerait trop loin. Si le sujet vous
intresse, consultez le chapitre sur le codage des caractres.
Nous allons tout de mme faire deux o trois observations utiles, pour comprendre mieux
comment il faut configurer son MUA pour tre lu correctement.
Les divers codages utilisant MIME
Bien que le codage des donnes soit trait plus en dtail ailleurs sur ce site, voyons tout de
mme rapidement quelques points importants.
Pour illustrer ceci, nous allons envoyer des messages avec Outlook Express et nous allons les
lire avec un outil rustique sous Linux : l'outil mail . Cet outil fonctionne en mode texte.
Plus rustique, vous n'aurez que Telnet.
Nota :
Les captures ne datent pas d'hier et elles utilisent Outlook Express qui n'est pas
recommandable, mais qui permet de mener bien la manip.
Codage Aucun ou plain/text
C'est--dire pas de codage particulier pour le texte. On envoie ce message :

Et l'on rcupre ceci ( la condition que votre console utilise ISO-8859-1):

C'est correct. L'en-tte indique que le contenu est du texte de type plain text encod sur 8
bits, avec un jeu de caractres ISO-8859-1 . Comme vous pouvez le constater, le texte est
parfaitement lisible. Il y a cependant un problme potentiel en voie de disparition: La plupart
des MTA utilisent un protocole ESMTP qui gre l'ASCII sur 8 bits, mais il peut encore exister
et l des vieux MTA qui mettront systmatiquement le bit7 0. Le problme devrait
aujourd'hui tre rarissime. Dans ce cas, la seule solution est d'utiliser des caractres du code
ASCII US, sans aucune lettre accentue.
Codage: quoted printable
Outlook express propose ce mode en texte brut . Essayons pour voir

Ben c'est pas terrible; les lettres accentues sont curieusement codes

En fait, dans ce mode de codage, les caractres qui peuvent tre cods sur 7 bits sont transmis
normalement, ceux qui ne le peuvent pas (bit 7 1) sont remplacs par = et la valeur du
code ASCII sur 8 bits exprim en hexadcimal.
A ne pas utiliser donc, si le destinataire ne dispose pas d'outil sachant dcoder du quoted
printable . Aujourd'hui, (20 juin 2008) cette faon de faire semble tre la mode sur la
configuration par dfaut de nombreux MUA. J'avoue ne pas en connaitre ni en comprendre la
raison.
Codage base 64
Outlook Express propose galement ce mode de codage, lorsque l'on choisit le texte brut .
On essaye

C'est catastrophique. Mail ne sait pas du tout dcoder le message

Aucun caractre n'est lisible.
Le codage HTML
Enfin, le meilleur pour la fin, le message en HTML.
Je ne voudrais pas ici dclencher une polmique inextinguible sur ce sujet brlant Mais
rappelons les faits.
Le texte pur, c'est bien, mais c'est de la gnration de edit , notepad et autres vi .
Autrement dit, aucun enrichissement possible du texte. Il peut pourtant tre utile de rdiger
ses messages avec quelques possibilits des traitements de texte, comme les notions de gras,
italique, soulign, mise en sur brillance etc. D'o l'ide d'crire ses messages en HTML qui
sait faire tout cela.
Mais voyons le rsultat :

Ici, pas de copie d'cran, tellement le rsultat est long:
Ce qui est en gras constitue les morceaux de l'en-tte.
Ce qui est surlign reprsente les spcificits du codage en HTML multipart
Ce qui est en bleu, c'est l'explication de ce qu'il se passe. (Ca ne fait pas partie du
message).
From christian.caleca@w-n-doo.fr Thu May 11 09:00:46 2000
Return-Path: <christian.caleca@w-n-doo.fr>
Delivered-To: chris@gateway2.maison.mrs
Received: from chris (chris.maison.mrs [192.168.0.10])
by gateway2.maison.mrs (Postfix) with SMTP id DB2D51BAAF
for <chris@gateway2.maison.mrs>; Thu, 11 May 2000 09:00:46 +0200
(CEST)
Message-ID: <003501bfbb16$8a226dd0$0a00a8c0@maison.mrs>
From: "Christian CALECA" <christian.caleca@w-n-doo.fr>
To: <chris@gateway2.maison.mrs>
Subject: codage HTML
Date: Thu, 11 May 2000 09:00:06 +0200
MIME-Version: 1.0
Content-Type: multipart/alternative;

# L'extension MIME indique ici que le message va tre cod en deux parties,
# de manire diffrente pour les deux parties...

boundary="----=_NextPart_000_0031_01BFBB27.4D9A74F0"

# Avec une balise que l'on aura du mal confondre
# avec le texte du message, quel qu'il soit.

X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2919.6600
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600

# C'est un message de format MIME en plusieurs parties.

------=_NextPart_000_0031_01BFBB27.4D9A74F0 # Premire balise
Content-Type: text/plain;
charset= iso-8859-1
Content-Transfer-Encoding: 8bit

Ici, c'est ce qu'on fait de mieux:


# Cette premire partie a t code de faon basique,
# celle qui, normalement, doit fonctioner avec n'importe quel MUA, nous
l'avons vu.

------=_NextPart_000_0031_01BFBB27.4D9A74F0 # Deuxime balise
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

# Mais "quoted-printable", ce n'est pas forcment un bon choix...
# Le plain text peut tre utilis dans le codage HTML

<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN >
<HTML><HEAD>
<META content=3D text/html; charset=3Diso-8859-1" =
http-equiv=3DContent-Type>
<META content=3D MSHTML 5.00.2919.6307 name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3DArial size=3D2>Ici, c'est ce qu'on fait de =
mieux:</FONT></DIV>
<DIV><FONT face=3DArial size=3D2>=E9=E8=E0=E7=F9=EE</FONT></DIV>
<DIV>&nbsp;</DIV></BODY></HTML>


# Tout ceci est du jargon HTML. Simple ici, parce qu'il n'y a aucune
fioriture !
# Ce paragraphe aurait t beaucoup plus long, si l'on avait mis des
couleurs,
# des tailles de polices diffrentes, et surtout un fond de papier.
# Notez que la seule partie signifiante de tout ceci est ce qui est
surlign en blanc


------=_NextPart_000_0031_01BFBB27.4D9A74F0-- # Dernire balise.
Notez qu'Outlook Express, malgr tout le mal que l'on peut en dire ici o l , a la politesse de
crer un paragraphe en plain text qui sera lisible par tout MUA. D'autres MUA n'ont
mme pas cette politesse.
Alors, pourquoi le HTML est-il proscrit par la netiquette ?
en tout premier lieu, hlas, un problme de scurit. Un document HTML peut
vhiculer des scripts malicieux ayant des comportements de virus ;
l'extrme longueur des messages gnrs, surtout si l'on s'amuse un peu trop avec les
gadgets. Ce gonflement de la taille du message est souvent pnalisant :
o pour l'espace disque de celui qu conserve les messages qu'il reoit ;
o la dure de chargement (pensez qu'il existe encore des internautes qui ne
disposent que d'un trs faible dbit) ;
La lisibilit aussi. La taille des polices tant fixe, un texte lisible sur un cran
800600 deviendra trs pnible lire sur un 12801024 ;
la plus lmentaire des politesses qui consiste s'assurer que l'on ne drange pas celui
qui l'on envoie ce message. Les drangements les plus vidents tant :
o L'impossibilit pour le destinataire de lire correctement le message, n'tant pas
outill pour (mais l, la rigueur, il peut ventuellement faire l'effort
d'utiliser des outils qui savent le faire, la politesse passe aussi par l) ;
o Le temps de chargement des messages et l'encombrement de la boite aux
lettres. C'est un argument qui me parait plus convaincant. Si vous tes en
dplacement, que vous vous connectez avec un portable sur une ligne RTC de
qualit douteuse, vous prfrerez assurment que les messages soient le plus
court possible ;
o certaines personnes reoivent plusieurs dizaines (centaines) de messages par
jour. Mme avec une bonne connexion, c'est mieux de faire court ;
o Le dernier argument est une synthse des autres, les boites aux lettres sont
souvent limites en taille par les fournisseurs d'accs, mme si cette taille
augmente priodiquement. Plus les messages sont longs, moins on peut en
mettre dedans. Les pices jointes sont d'ailleurs aussi pnalisantes, mais elles
sont parfois indispensables. L encore, c'est une question de discernement.
Conclusions
Par dfaut, postez en texte brut, plain text ou aucun codage avec Outlook
Express. En pratique, codez en ISO-8859-1 (ou en UTF-8, ventuellement, Bien que
ce soit l'avenir, tous les MUA ne savent pas forcment grer correctement cet
encodage) ;
ne postez en HTML qu'aux personnes qui vous l'ont permis, c'est plus poli ;
ne postez en HTML que si c'est vraiment utile, (faire simplement joli n'est pas
utile. Pour faire joli, faites une uvre d'art et envoyez la par la poste).
Voil. Vous ne pourrez plus dire maintenant que vous ne saviez pas pourquoi il fallait faire
attention au codage de vos messages
les Profondeurs
Les mcanismes de SMTP
Dans cette partie de l'expos, nous allons regarder ce qu'il se passe dans les profondeurs du
protocole SMTP.
L'analyse de trames
Comme d'habitude, rien ne vaut l'analyse des trames pour voir exactement ce qu'il se passe. Si
l'on arrive tout interprter, on est certain de ne rien laisser passer du protocole. Ici, l'analyse
est un peu longue, elle comporte deux parties:
La recherche de l'adresse du MTA du destinataire (recherche DNS classique )
La transmission du message selon le protocole SMTP, qui s'appuie sur TCP. Les
changes sont un peu plus compliqus qu'en UDP, employ pour la rsolution des
noms.
Envoyer un message la main
Il existe un petit outil appel telnet qui n'est rien d'autre qu'un terminal trivial en mode
texte. Il est cependant possible de faire beaucoup de choses avec telnet, pas toujours trs
simplement, je vous l'accorde. Avec telnet , il est possible de lire son courrier, d'en
envoyer, de lire les news et bien d'autres choses encore.
Nous allons envoyer un message avec telnet, ce qui nous obligera connaitre toutes les
commandes (du moins les plus importantes) du protocole SMTP.

Espionnage d'un envoi
Comme d'habitude, nous allons espionner l'envoi d'un e-mail avec notre sniffer prfr.
Rien de tel pour bien comprendre comment les choses se passent.
Enonc du problme
Depuis un poste du rseau priv, nous allons envoyer un message l'adresse
eme13@enprovence.com en employant notre serveur SMTP gateway1.maison.mrs .
Objectif de la manip
Si nous arrivons tracer toute la transaction, plus aucun dtail du protocole SMTP ne nous
chappera. Essayons pour voir.
Attention! C'est du TCP, a va tre long (mais a va tre bon )
Les trames rcupres
Ce qui est surlign en jaune est ce qui est le plus important.
Ce qui est en bleu est un commentaire.
Recherche de l'adresse du serveur SMTP du destinataire
Frame 3 (74 on wire, 74 captured)
...
Protocol: UDP (0x11)
Header checksum: 0x0a83 (correct)
Source: ca-ol-marseille-6-80.abo.w-n-doo.fr (62.161.101.80)
Destination: ns0.mrs.ftci.oleane.com (62.161.120.11) # Notre DNS
rgional
User Datagram Protocol
Source port: 1038 (1038)
Destination port: domain (53)
Length: 40
Checksum: 0xb005
Domain Name System (query)
Transaction ID: 0xea25
Flags: 0x0100 (Standard query)
0... .... .... .... = Query
.000 0... .... .... = Standard query
.... ..0. .... .... = Message is not truncated
.... ...1 .... .... = Do query recursively
Questions: 1
Answer RRs: 0
Authority RRs: 0
Additional RRs: 0
Queries
enprovence.com: type MX, class inet # Notez la nature de la
requte:
Name: enprovence.com # On demande un
enregistrement de type MX
Type: Mail exchange # (Mail Exchanger)
Class: inet
La trame 3 constitue donc une requte DNS pour trouver un Mail Exchanger valide pour le
domaine enprovence.com
Frame 4 (207 on wire, 207 captured)
...
Protocol: UDP (0x11)
Header checksum: 0x7fd6 (correct)
Source: ns0.mrs.ftci.oleane.com (62.161.120.11)
Destination: ca-ol-marseille-6-80.abo.w-n-doo.fr (62.161.101.80)
User Datagram Protocol
Source port: domain (53)
Destination port: 1038 (1038)
Length: 173
Checksum: 0xbffd
Domain Name System (response)
Transaction ID: 0xea25
Flags: 0x8180 (Standard query response, No error)
1... .... .... .... = Response
.000 0... .... .... = Standard query
.... .0.. .... .... = Server isn't an authority for domain
.... ..0. .... .... = Message is not truncated
.... ...1 .... .... = Do query recursively
.... .... 1... .... = Server can do recursive queries
.... .... .... 0000 = No error
Questions: 1
Answer RRs: 2
Authority RRs: 2
Additional RRs: 3
Queries
enprovence.com: type MX, class inet
Name: enprovence.com
Type: Mail exchange
Class: inet
Answers # La rponse de notre DNS concernant les MX
enprovence.com: type MX, class inet, preference 0, mx
mail.monaco.net
Name: enprovence.com
Type: Mail exchange
Class: inet
Time to live: 22 hours, 30 minutes, 40 seconds
Data length: 19
Preference: 0
Mail exchange: mail.monaco.net
enprovence.com: type MX, class inet, preference 1, mx
dns2.monaco.net
Name: enprovence.com
Type: Mail exchange
Class: inet
Time to live: 22 hours, 30 minutes, 40 seconds
Data length: 9
Preference: 1
Mail exchange: dns2.monaco.net

# Notez qu'il y en a deux, avec des niveaux de prfrence diffrents...
# Notez galement que les adresses IP n'ont pas t fournies...

Authoritative nameservers
enprovence.com: type NS, class inet, ns DNS1.monaco.net
Name: enprovence.com
Type: Authoritative name server
Class: inet
Time to live: 14 hours, 39 minutes, 58 seconds
Data length: 7
Name server: DNS1.monaco.net
enprovence.com: type NS, class inet, ns dns2.monaco.net
Name: enprovence.com
Type: Authoritative name server




Class: inet
Time to live: 14 hours, 39 minutes, 58 seconds
Data length: 2
Name server: dns2.monaco.net

# Mais tout de mme, la rponse intgre les noms des DNS impliqus dans
l'affaire.

Additional records
mail.monaco.net: type A, class inet, addr 194.79.150.9
Name: mail.monaco.net
Type: Host address
Class: inet
Time to live: 1 hour, 51 minutes, 41 seconds
Data length: 4
Addr: 194.79.150.9
dns2.monaco.net: type A, class inet, addr 194.79.150.2
Name: dns2.monaco.net
Type: Host address
Class: inet
Time to live: 13 hours, 11 minutes, 15 seconds
Data length: 4
Addr: 194.79.150.2
DNS1.monaco.net: type A, class inet, addr 194.79.150.9
Name: DNS1.monaco.net
Type: Host address
Class: inet
Time to live: 14 hours, 9 minutes, 50 seconds
Data length: 4
Addr: 194.79.150.9
Les Additional records , tout le monde semble s'en moquer. Pourtant, l'avenir va nous
montrer qu'ils nous feraient gagner en efficacit
Nous avons ici toutes les IP ncessaires Et pourtant Notez galement au passage la
diversit des fonctions de l'hte dns2.monaco.net, il est second MX et second NS.
Frame 5 (75 on wire, 75 captured)
...
Protocol: UDP (0x11)
Header checksum: 0x0a81 (correct)
Source: ca-ol-marseille-6-80.abo.w-n-doo.fr (62.161.101.80)
Destination: ns0.mrs.ftci.oleane.com (62.161.120.11)
User Datagram Protocol
Source port: 1038 (1038)
Destination port: domain (53)
Length: 41
Checksum: 0x3994
Domain Name System (query)
Transaction ID: 0xea26
Flags: 0x0100 (Standard query)
0... .... .... .... = Query
.000 0... .... .... = Standard query
.... ..0. .... .... = Message is not truncated
.... ...1 .... .... = Do query recursively
Questions: 1
Answer RRs: 0
Authority RRs: 0
Additional RRs: 0
Queries
mail.monaco.net: type A, class inet
Name: mail.monaco.net
Type: Host address
Class: inet
Et voil Si le systme avait tenu compte des additional records , la question n'aurait pas
t pose.
Frame 6 (171 on wire, 171 captured)
...
Protocol: UDP (0x11)
Header checksum: 0x7fed (correct)
Source: ns0.mrs.ftci.oleane.com (62.161.120.11)
Destination: ca-ol-marseille-6-80.abo.w-n-doo.fr (62.161.101.80)
User Datagram Protocol
Source port: domain (53)
Destination port: 1038 (1038)
Length: 137
Checksum: 0xab21
Domain Name System (response)
Transaction ID: 0xea26
Flags: 0x8180 (Standard query response, No error)
1... .... .... .... = Response
.000 0... .... .... = Standard query
.... .0.. .... .... = Server isn't an authority for domain
.... ..0. .... .... = Message is not truncated
.... ...1 .... .... = Do query recursively
.... .... 1... .... = Server can do recursive queries
.... .... .... 0000 = No error
Questions: 1
Answer RRs: 1
Authority RRs: 2
Additional RRs: 2
Queries
mail.monaco.net: type A, class inet
Name: mail.monaco.net
Type: Host address
Class: inet
Answers
mail.monaco.net: type A, class inet, addr 194.79.150.9
...

Authoritative nameservers # Plus la liste des DNS ayant autorit
MONACO.NET: type NS, class inet, ns DNS1.MONACO.NET
...
MONACO.NET: type NS, class inet, ns DNS2.MONACO.NET
...
Additional records
DNS1.MONACO.NET: type A, class inet, addr 194.79.150.9
...
DNS2.MONACO.NET: type A, class inet, addr 194.79.150.2
...
Nous avons l'adresse de mail.monaco.net, mais nous la connaissions dj
Frame 7 (75 on wire, 75 captured)
...
Protocol: UDP (0x11)
Header checksum: 0x0a80 (correct)
Source: ca-ol-marseille-6-80.abo.w-n-doo.fr (62.161.101.80)
Destination: ns0.mrs.ftci.oleane.com (62.161.120.11)
User Datagram Protocol
Source port: 1038 (1038)
Destination port: domain (53)
Length: 41
Checksum: 0x6692
Domain Name System (query)
Transaction ID: 0xea27
Flags: 0x0100 (Standard query)
0... .... .... .... = Query
.000 0... .... .... = Standard query
.... ..0. .... .... = Message is not truncated
.... ...1 .... .... = Do query recursively
Questions: 1
Answer RRs: 0
Authority RRs: 0
Additional RRs: 0
Queries
dns2.monaco.net: type A, class inet
Name: dns2.monaco.net
Type: Host address
Class: inet
Encore une question futile
Frame 8 (166 on wire, 166 captured)
...
Protocol: UDP (0x11)
Header checksum: 0x7fec (correct)
Source: ns0.mrs.ftci.oleane.com (62.161.120.11)
Destination: ca-ol-marseille-6-80.abo.w-n-doo.fr (62.161.101.80)
User Datagram Protocol
Source port: domain (53)
Destination port: 1038 (1038)
Length: 132
Checksum: 0xd9dd
Domain Name System (response)
Transaction ID: 0xea27
Flags: 0x8180 (Standard query response, No error)
1... .... .... .... = Response
.000 0... .... .... = Standard query
.... .0.. .... .... = Server isn't an authority for domain
.... ..0. .... .... = Message is not truncated
.... ...1 .... .... = Do query recursively
.... .... 1... .... = Server can do recursive queries
.... .... .... 0000 = No error
Questions: 1
Answer RRs: 1
Authority RRs: 2
Additional RRs: 2
Queries
dns2.monaco.net: type A, class inet
Name: dns2.monaco.net
Type: Host address
Class: inet
Answers
dns2.monaco.net: type A, class inet, addr 194.79.150.2
...
Authoritative nameservers
MONACO.NET: type NS, class inet, ns DNS1.MONACO.NET
...
MONACO.NET: type NS, class inet, ns dns2.monaco.net
...
Additional records
DNS1.MONACO.NET: type A, class inet, addr 194.79.150.9
...
dns2.monaco.net: type A, class inet, addr 194.79.150.2
...
Avec sa rponse pertinente, certes, mais qui ne nous apprend rien de nouveau
A ce niveau, nous disposons :
Des adresses des deux changeurs de courrier pour le domaine enprovence.com
(dont nous avons appris au passage qu'il tait hberg Monaco)
Des adresses des serveurs de noms pour ce domaine.
Normalement, nous devrions attaquer le transfert du message, en commenant par le MX qui
a la meilleure prfrence. S'il ne rpond pas, nous passerons l'autre.
La ngociation SMTP
Frame 9 (74 on wire, 74 captured)
...
Protocol: TCP (0x06)

# Notez que l'on est maintenant en mode connect...

Header checksum: 0x28de (correct)
Source: ca-ol-marseille-6-80.abo.w-n-doo.fr (62.161.101.80)
Destination: dns1.monaco.net (194.79.150.9)

# Ca ne vous choque pas?
# On aurait pu s'attendre ce que ce soit avec mail.monaco.net que le
dialogue
# s'initie (c'est lui qui a la meilleure prfrence)...
# Mais regardez attentivement les adresses IP, et vous verrez que,
surprise:
# mail.monaco.net n'est autre que dns1.monaco.net

Transmission Control Protocol, Src Port: 1027, Dst Port: smtp(25),
Seq:2161513038, Ack: 0
Source port: 1027 (1027)
Destination port: smtp (25)
Sequence number: 2161513038
Header length: 40 bytes
Flags: 0x0002 (SYN)
..0. .... = Urgent: Not set
...0 .... = Acknowledgment: Not set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..1. = Syn: Set
.... ...0 = Fin: Not set
Window size: 32120
Checksum: 0x8248
Options: (20 bytes)
Maximum segment size: 1460 bytes
SACK permitted
Time stamp: tsval 5420137, tsecr 0
NOP
Window scale: 0 bytes

Nous allons faire maintenant un petit bond en avant. L'analyse dtaille de ce qui suit
s'apparente plus une tude du protocole TCP, ce qui sort de notre sujet et qui est trait
ailleurs sur ce site.
Juste pour constater que les e-mails circulent en clair sur le rseau et que n'importe quel
sniffer peut les interprter, je vous suggre d'aller directement voir la trame 45

Frame 45 (706 on wire, 706 captured)
...

Protocol: TCP (0x06)
Header checksum: 0x2654 (correct)
Source: ca-ol-marseille-6-80.abo.w-n-doo.fr (62.161.101.80)
Destination: dns1.monaco.net (194.79.150.9)
Transmission Control Protocol, Src Port:1027, Dst Port:smtp(25,
Seq:2161513153, Ack:2324999158
Source port: 1027 (1027)
Destination port: smtp (25)
Sequence number: 2161513153
Acknowledgement number: 2324999158
Header length: 20 bytes
Flags: 0x0018 (PSH, ACK)
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 1... = Push: Set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 32120
Checksum: 0xfb10
Data (652 bytes)

0 00d0 7972 5c00 0020 af07 1a3d 0800 4500 ..yr\.. ...=..E.
10 02b4 15a6 4000 4006 2654 3ea1 6550 c24f ....@.@.&T>.eP.O
20 9609 0403 0019 80d6 12c1 8a94 abf6 5018 ..............P.
30 7d78 fb10 0000 5265 6365 6976 6564 3a20 }x....Received:
40 6672 6f6d 2063 6872 6973 2028 6368 7269 from chris (chri
50 732e 6d61 6973 6f6e 2e6d 7273 205b 3139 s.maison.mrs [19
60 322e 3136 382e 302e 3130 5d29 0d0a 0962 2.168.0.10])...b
70 7920 6761 7465 7761 7931 2e6d 6169 736f y gateway1.maiso
80 6e2e 6d72 7320 2850 6f73 7466 6978 2920 n.mrs (Postfix)
90 7769 7468 2053 4d54 5020 6964 2032 4131 with SMTP id 2A1
a0 3832 3130 3239 410d 0a09 666f 7220 3c65 821029A...for <e
b0 6d65 3133 4065 6e70 726f 7665 6e63 652e me13@enprovence.
c0 636f 6d3e 3b20 4d6f 6e2c 2032 3220 4d61 com>; Mon, 22 Ma
d0 7920 3230 3030 2032 303a 3238 3a30 3520 y 2000 20:28:05
e0 2b30 3230 3020 2843 4553 5429 0d0a 4d65 +0200 (CEST)..Me
f0 7373 6167 652d 4944 3a20 3c30 3035 3430 ssage-ID: <00540
100 3162 6663 3431 6224 3735 3132 6361 3330 1bfc41b$7512ca30
110 2430 6130 3061 3863 3040 6d61 6973 6f6e $0a00a8c0@maison
120 2e6d 7273 3e0d 0a46 726f 6d3a 2022 4368 .mrs>..From: "Ch
130 7269 7374 6961 6e20 4341 4c45 4341 2220 ristian CALECA"
140 3c63 6872 6973 7469 616e 2e63 616c 6563 <christian.calec
150 6140 7761 6e61 646f 6f2e 6672 3e0d 0a54 a@w-n-doo.fr>..T
160 6f3a 203c 656d 6531 3340 656e 7072 6f76 o: <eme13@enprov
170 656e 6365 2e63 6f6d 3e0d 0a53 7562 6a65 ence.com>..Subje
180 6374 3a20 7465 7374 2053 4d54 500d 0a44 ct: test SMTP..D
190 6174 653a 204d 6f6e 2c20 3232 204d 6179 ate: Mon, 22 May
1a0 2032 3030 3020 3230 3a32 373a 3539 202b 2000 20:27:59 +
1b0 3032 3030 0d0a 4d49 4d45 2d56 6572 7369 0200..MIME-Versi
1c0 6f6e 3a20 312e 300d 0a43 6f6e 7465 6e74 on: 1.0..Content
1d0 2d54 7970 653a 2074 6578 742f 706c 6169 -Type: text/plai
1e0 6e3b 0d0a 0963 6861 7273 6574 3d22 6973 n;...charset="is
1f0 6f2d 3838 3539 2d31 220d 0a43 6f6e 7465 o-8859-1"..Conte
200 6e74 2d54 7261 6e73 6665 722d 456e 636f nt-Transfer-Enco
210 6469 6e67 3a20 3762 6974 0d0a 582d 5072 ding: 7bit..X-Pr
220 696f 7269 7479 3a20 330d 0a58 2d4d 534d iority: 3..X-MSM
230 6169 6c2d 5072 696f 7269 7479 3a20 4e6f ail-Priority: No
240 726d 616c 0d0a 582d 4d61 696c 6572 3a20 rmal..X-Mailer:
250 4d69 6372 6f73 6f66 7420 4f75 746c 6f6f Microsoft Outloo
260 6b20 4578 7072 6573 7320 352e 3030 2e32 k Express 5.00.2
270 3931 392e 3636 3030 0d0a 582d 4d69 6d65 919.6600..X-Mime
280 4f4c 453a 2050 726f 6475 6365 6420 4279 OLE: Produced By
290 204d 6963 726f 736f 6674 204d 696d 654f Microsoft MimeO
2a0 4c45 2056 352e 3030 2e32 3931 392e 3636 LE V5.00.2919.66
2b0 3030 0d0a 0d0a 736e 6966 660d 0a0d 0a2e 00....sniff.....
2c0 0d0a ..
Et voil Sans prcautions particulires, les messages circulent en clair sur le rseau au
moment de leur mission vers leur(s) destinataire(s). Il vaut mieux le savoir. Nous verrons
galement dans le protocole POP3 que le message circule galement en clair, avec en plus, le
mot de passe du client, au moment de sa lecture.
Pour finir, voici l'en-tte du message tel qu'il est dpos dans la Bote aux lettres
eme13@enprovence.com. Vous pouvez clairement y voir le chemin emprunt par le message.
Comme chaque MTA complte l'en-tte en y insrant des lignes son dbut, il faudra lire de
bas en haut.
Return-Path: <christian.caleca@w-n-doo.fr>

# 2/ Mon SMTP, ct Internet, envoie le message au SMTP du destinataire

Received: from gateway1.maison.mrs
(IDENT:postfix@ca-ol-marseille-6-80.abo.w-n-doo.fr
[62.161.101.80])
by mail.monaco.net (Pro-8.9.3/Pro-8.9.3) with ESMTP id UAA24841
for <eme13@enprovence.com>; Mon, 22 May 2000 20:28:13 +0200

# 1/ Mon poste de travail envoie le message sur mon SMTP, ct rseau ocal

Received: from chris (chris.maison.mrs [192.168.0.10])
by gateway1.maison.mrs (Postfix) with SMTP id 2A1821029A
for <eme13@enprovence.com>; Mon, 22 May 2000 20:28:05 +0200 (CEST)

Message-ID: <005401bfc41b$7512ca30$0a00a8c0@maison.mrs>
From: "Christian CALECA" <christian.caleca@w-n-doo.fr>
To: <eme13@enprovence.com>
Subject: test SMTP
Date: Mon, 22 May 2000 20:27:59 +0200
MIME-Version: 1.0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2919.6600
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600
Status:

sniff
Pour les plus dmunis... Telnet
Envoi du message
Pour ceux qui aiment bien comprendre, envoyons maintenant un message avec TELNET. La
manip est faite partir du poste Linux, parce que le client Telnet est tout de mme plus
efficace que celui fourni par windows, mais c'est possible aussi depuis un poste windows.
Comme nous savons maintenant que le MX de enprovence.com n'est autre que
dns1.monaco.net, nous allons nous adresser directement lui.

1. La ligne 1 dmarre le client Telnet sur le serveur de messagerie dont on a trouv le
nom grce au sniff , sur le port 25 (port officiel d'coute des MTA). On aurait
pu le trouver galement avec NSLOOKUP.
2. Les lignes 2, 3 et 4 indiquent que la connexion Telnet est correcte.
3. La ligne 5 (220 mail.monaco.net) est un message de bienvenue du serveur.
4. La ligne 6 (MAIL FROM) est la premire commande que nous entrons. Elle donne
l'adresse de l'metteur du message. Suivant les rgles de scurit du MTA, cette
adresse pourra ne pas tre accepte.
5. La ligne 7 (250 ) indique que l'metteur est accept.
6. La ligne 8 (RCPT TO:) est la deuxime commande. Elle donne l'adresse du
destinataire du message.
7. La ligne 9 (250) indique que le destinataire est accept.
8. la ligne 10 (DATA) est encore une commande, elle indique que nous allons
transmettre le message proprement dit.
9. La ligne 11 (354) est une rponse indiquant comment il faut envoyer le texte du
message.
10. La ligne 12 constitue le texte du message envoy
11. La ligne 13 (.) indique la fin du message.
12. La ligne 14 (250) indique que le message est accept.
13. La ligne 15 (QUIT) est une commande pour indiquer au MTA que l'on a fini.
14. La ligne 16 (221) nous indique que le MTA a ferm la connexion.
Notez que nous n'avons pas ici respect totalement le protocole, principalement en omettant la
commande HELO ou mieux : EHLO. Certains MTA n'aiment pas la grossiret.
Analyse du rsultat
Voici le texte complet (en-tte comprise) du message tel que le destinataire le reoit:
Return-Path: <christian.caleca@w-n-doo.fr>

# C'est l'adresse de l'metteur envoye avec la commande MAIL FROM:

Received: from ca-ol-marseille-15-205.abo.w-n-doo.fr
(IDENT:root@ca-ol-marseille-15-205.abo.w-n-doo.fr
[213.56.62.205])

# C'est la machine avec laquelle le message a t envoy

by mail.monaco.net (Pro-8.9.3/Pro-8.9.3) with SMTP id TAA08106
for eme13@enprovence.com; Thu, 25 May 2000 19:43:56 +0200

# C'est l'adresse du destinataire envoye avec la commande RCPT TO:

Date: Thu, 25 May 2000 19:43:56 +0200
From: christian.caleca@w-n-doo.fr
Message-Id: <200005251743.TAA08106@mail.monaco.net>
X-Authentication-Warning: mail.monaco.net:
IDENT:root@ca-ol-marseille-15-205.abo.w-n-doo.fr [213.56.62.205]
didn't use HELO protocol

# Ici, c'est une info ajoute par le MTA mail.monaco.net: Il prvient qu'il
y a
# quelqu'un de grossier dans la chane
# d'envoi du message, il n'a pas utilis le protocole HELO.

Status:

le texte du message
Quelques remarques
1. HELO, la commande manquante qui a gnr le X-Authentification-Warning , est
prvue dans le protocole. Nous aurions pu l'envoyer au dbut du dialogue.
L'administrateur de mail.monaco.net aurait pu se vexer et rejeter le message.
2. L'en-tte est trs incomplte. A titre de comparaison, vous avez plus bas le mme
message envoy normalement avec Outlook Express, par l'intermdiaire du MTA
de wanadoo (smtp.wanadoo.fr). C'est tout simplement parce que l'en-tte est construite
au cours du voyage par :
le MUA metteur ;
les MTA qui font transiter le message ;
le MTA destinataire ;
le MDA peut aussi ajouter ses commentaires.
Nous aurions pu les introduire nous-mme dans la petite manip vue plus haut. Certains MTA
essayent plus ou moins de reconstruire les champs manquants, d'autres non.
Au passage, il faut noter que l'en-tte n'est donc pas une lment ncessaire au transport.
Seuls les contenus de MAIL FROM: et RCPT TO: sont indispensables au transport. Seul le
contenu de EHLO est requis par le protocole, mme si certains MTA ne le considrent pas
comme indispensable.
Autrement dit, le contenu de l'en-tte, vis--vis de SMTP n'est que du contenu, d'ailleurs
transmis dans la commande DATA au mme tire que le contenu du message. La
consquence est qu'il est parfaitement possible de forger compltement une partie de l'en-tte,
de la faon la plus fantaisiste qui soit. Qui n'a jamais reu de message envoy par lui-mme
l'insu de son plein gr ?
Conclusions
Le processus d'envoi d'un e-mail par SMTP peut donc se dcouper en deux phases bien
distinctes:
Une recherche DNS sur les MX (Mail Exchanger) concerns par le domaine du
destinataire (enprovence.com dans l'exemple).
Un dialogue entre le MTA trouv et le client, suivant le protocole SMTP pour
transfrer le message.
Il n'est pas obligatoire que le message transite directement de votre serveur SMTP
celui du destinataire. Dans notre manipulation avec Telnet, nous avons contact
directement le MX du destinataire, lorsque nous envoyons le mme message avec un
MUA, il sera plus long, comme le montrent les exemples suivants:
Envoy par smtp.wanadoo.fr
Return-Path: <christian.caleca@w-n-doo.fr>

# Dernier MTA, celui qui gre la BAL du destinataire.

Received: from camelia.wanadoo.fr (smtp-rt-10.wanadoo.fr
[193.252.19.59])
by mail.monaco.net (Pro-8.9.3/Pro-8.9.3) with ESMTP id
OAA16616
for <eme13@enprovence.com>; Sat, 27 May 2000 14:35:27 +0200


# Second MTA, toujours chez Wanadoo. Le premier n'est donc qu'un agent
de relais

Received: from amyris.wanadoo.fr (193.252.19.150)
by camelia.wanadoo.fr; 27 May 2000 14:08:11 +0200

# Premier MTA, celui sur lequel le MUA poste le message

Received: from chris (62.161.101.80)
by amyris.wanadoo.fr; 27 May 2000 14:07:57 +0200
Message-ID: <00a001bfc7d4$2cf01930$0a00a8c0@maison.mrs>
From: "Christian CALECA" <christian.caleca@w-n-doo.fr>
To: <eme13@enprovence.com>
Subject:
Date: Sat, 27 May 2000 14:07:48 +0200
MIME-Version: 1.0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2919.6600
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600
Status: O

Le texte du message
Le chemin ici est le suivant:
amyris.wanadoo.fr
camelia.wanadoo.fr
mail.monaco.net
Notez que n'apparait pas smtp.wanadoo.fr, du moins sous ce nom l.
Envoy maintenant avec notre MTA personnel sur Gateway1
Return-Path: <christian.caleca@w-n-doo.fr>
Received: from gateway1.maison.mrs
(IDENT:postfix@ca-ol-marseille-6-80.abo.wanadoo.fr
[62.161.101.80])
by mail.monaco.net (Pro-8.9.3/Pro-8.9.3) with ESMTP id
PAA17676
for <eme13@enprovence.com>; Sat, 27 May 2000 15:29:23 +0200
Received: from chris (chris.maison.mrs [192.168.0.10])
by gateway1.maison.mrs (Postfix) with SMTP id A38181105F
for <eme13@enprovence.com>; Sat, 27 May 2000 15:29:15 +0200
(CEST)
Message-ID: <000901bfc7df$884e4ad0$0a00a8c0@maison.mrs>
From: "Christian CALECA" <christian.caleca@w-n-doo.fr>
To: <eme13@enprovence.com>
Subject:
Date: Sat, 27 May 2000 15:29:06 +0200
MIME-Version: 1.0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2919.6600
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6600
Status: RO

Texte du message.
Le chemin ici est le suivant:
gateway1.maison.mrs (notre MTA Postfix)
mail.monaco.net
Ici, le message a directement t transmis depuis notre MTA vers celui du destinataire.
Ceci veut dire qu'il est parfaitement possible sur de grosses architectures, de crer des MTA
qui ne font que relayer du courrier d'un point un autre, sans grer de destinataires locaux
(pas de MDA).
Fiabilit, scurit
SMTP est un trs vieux protocole. C'est le RFC 821 qui en dfinit les bases, en 1982. A cette
date, les connexions taient rares, peu fiables et le souci premier tait d'assurer un transport
sans pertes. Depuis, les conditions ont bien chang et la scurit, qui n'avait pas t prise en
compte, devient un souci majeur.
ESMTP a ajout quelques fonctionnalits importantes, comme le support du codage sur 8 bits,
les types MIME et aussi la possibilit de chiffrer la connexion.
Extended SMTP
Aujourd'hui, tous les serveurs SMTP sont en ralit des serveurs ESMTP. Pour le vrifier,
utilisons la commande EHLO plutt que HELO :
$ telnet cyrus.bts.eme 25
Trying 192.168.10.7...
Connected to cyrus.bts.eme.
Escape character is '^]'.
220 cyrus.nain-t.net ESMTP Experimental
HELO machin.nain-t.net
250 cyrus.nain-t.net
quit
221 2.0.0 Bye
Pas grand chose comme informations, si ce n'est que nous disposons d'un serveur ESMTP (et
encore, cette information tant dans la bannire, elle n'est pas d'une grande fiabilit).
~$ telnet cyrus.bts.eme 25
Trying 192.168.10.7...
Connected to cyrus.bts.eme.
Escape character is '^]'.
220 cyrus.nain-t.net ESMTP Experimental
EHLO machin.nain-t.net
250-cyrus.nain-t.net
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
La commande EHLO nous permet d'obtenir quelques informations sur la capacit du serveur.
Parmi les plus intressantes, nous constatons que Postfix sait grer le 8 bits MIME (le
contraire serait fcheux, mais ici, nous en avons la confirmation) et accepte la commande
starttls.
Chiffrement
les volutions du protocole SMTP permettent de chiffrer la connexion de deux manires
lgrement diffrentes. SMTPS se contente de passer le dialogue SMTP dans une connexion
SSL. L'autre mthode, plus actuelle, consiste invoquer la commande STARTTLS.
Si la mise en uvre d'une commande STARTTLS entre un MUA et un serveur SMTP est assez
simple, elle devient plus complique entre deux serveurs SMTP, du fait que les certificats des
serveurs doivent tre signs par une racine de confiance accepte par le partenaire. Aussi, il
est rare qu'un chiffrement ait lieu entre deux MTA. Ce qui veut dire que votre message circule
en clair sur l'internet.
STARTTLS comme SSL offrent tout de mme l'avantage pour le client de masquer son login,
lorsqu'il a besoin de le transmettre (accs IMAP, POP3 ou mme SMTP si le MTA requiert
une authentification du client).
POP3
Le protocole POP3 (Post Office Protocol) a un objectif trs spcifique: Permettre
l'utilisateur de relever son courrier depuis un hte qui ne contient pas sa boite aux lettres.
Entendez par l : Depuis un hte qui n'est pas celui o le SMTP stocke les messages entrants
pour son compte, ce qui est le cas de la trs large majorit des internautes.
Autant dire que la plus grosse partie du travail est ralise par SMTP, vu plus en dtails dans
les chapitres SMTP et SMTP/IMAP en pratique .
POP3 (Egalement IMAP4), sont donc des protocoles dont l'unique fonction est de grer
distance cette file d'attente, prsente sur le serveur SMTP qui rceptionne vos messages.
IMAP est plus performant, mais aussi plus complexe.
Dans ce chapitre nous allons voir :
Comment fonctionne POP3
Comment exploiter ce protocole avec un outil aussi rudimentaire que Telnet
Fonctionnement
La philosophie du courrier lectronique sur un rseau
Les utilisateurs qui ne connaissent que les O.S. Microsoft ont souvent du mal assimiler les
principes de la messagerie, parce que cette notion n'existe pas nativement dans les rseaux
Microsoft. Windows 95/98 n'taient pas des systmes multi utilisateurs, mme s'ils ont fait
parfois semblant. Windows NT/2000/XP/Vista sont des systmes multi utilisateurs (NT 4
disposait d'ailleurs d'un vague systme de messagerie, compltement propritaire et qui n'est,
sauf erreur de ma part, plus support par MS).
Sur un hte Linux, mme isol, un utilisateur a la possibilit de laisser un e-mail un autre
utilisateur.
Un cas simple
Imaginons le cas fort simple de deux htes Linux connects en rseau:

Il y a trois utilisateurs sur ce rseau: Jim, Jules et Alfred. Jules et Alfred travaillent toujours
sur la mme machine, Jim travaille tantt sur l'une, tantt sur l'autre; il dispose donc d'un
compte d'utilisateur sur chacune des deux machines.
Chaque utilisateur dispose d'au moins une adresse lectronique, sauf Jim qui en a deux.
Jim Jules Alfred
jim@jules.maison.mrs
jim@alfred.maison.mrs
jules@jules.maison.mrs alfred@alfred.maison.mrs
Ca n'est peut-tre pas la meilleure faon de fonctionner, mais c'est comme a que les choses
se passent par dfaut: Tout utilisateur disposant d'un compte sur un hte dispose par la mme
occasion d'une boite aux lettres sur cet hte.
Chaque utilisateur pourra envoyer un message un autre utilisateur, Jim pourra en recevoir
sur l'un ou l'autre des deux htes (ce qui n'est pas forcment le plus simple pour lui). Jusque
l, c'est SMTP qui se charge des acheminements.
S'il n'y a rien de plus, Jim devra aller sur jules.maison.mrs pour lire ses courriers adresss
jim@jules.maison.mrs et aller sur alfred.maison.mrs pour lire ses courriers adresss
jim@alfred.maison.mrs
On aimerait (surtout lui) pouvoir relever le courrier dans les deux boites depuis l'un
quelconque des htes. C'est l qu'intervient POP3. Si le service POP3 est install sur les deux
htes, Jim pourra relever son courrier depuis n'importe quel hte dans l'une ou l'autre de ses
boites aux lettres.
Un cas un peu moins simple
Jim s'est offert un portable sous Windows. Ce genre de dispositif, par dfaut, ne dispose pas
d'autre chose que d'Outlook Express qui n'est rien de plus qu'un MUA. Il n'y a pas de systme
de messagerie sous Windows. Il peut tout de mme se connecter au rseau.

Et il peut, non seulement envoyer des messages Jules, Alfred et lui-mme en employant
jules.maison.mrs ou jim.maison.mrs comme serveur SMTP (si les systmes GNU/Linux
sont correctement configurs pour ce mode de fonctionnement), mais il peut aussi relever ses
messages aussi bien sur jules.maison.mrs que sur jim.maison.mrs grce toujours POP3,
la condition bien entendu qu'un serveur POP3 soit install sur chacune de ces machines. Ses
deux adresses lectroniques resteront utilisables tant que Jim sera un utilisateur connu sur les
htes Linux.
Conclusion
Si nous reportons ce principe sur l'Internet, nous nous trouvons avec quelque chose de
similaire:

Lorsque vous vous inscrivez chez votre FAI, vous disposez d'un compte sur leur serveur (la
situation peut tre un peu plus complique, mais elle revient au mme en ce qui nous
concerne). Bien videmment, vous disposez de droits trs limits, mais suffisants pour utiliser
au moins le systme de messagerie.
Dans un cas simple, ce serveur vous servira de relais SMTP et abritera galement votre
messagerie, c'est normal, vous avez un compte dessus. Le service POP3 vous permettra de
relever votre courrier distance. Vous tes dans la situation de Jim, avec son portable.
Description simplifie du fonctionnement
Post Office Protocol est trs simple, mme rudimentaire; il est toutefois largement suffisant
pour des cas classiques de gestion de boites aux lettres.
Le principe consiste ouvrir entre le client et le serveur une connexion TCP. Par la suite, le
serveur POP3 est capable de rpondre un certain nombre de commandes. Nous verrons le
dtail de ces commandes plus loin.
Vos messages sont contenus sur le serveur dans une file, un fichier unique pour tous les
messages, si le stockage est de type Mailbox. On ne peut pas faire plus simple. POP3 est
capable de les dlimiter, de les compter, de calculer leur taille, d'extraire tout ou partie de
chaque message, de supprimer un message et c'est peu prs tout. Tout le reste de la gestion
de vos messages, celle que vous voyez dans votre client : Messages isols dans des fichiers
indpendants, rpertoires de stockage personnaliss pour le tri et l'archivage, s'effectue sur
votre poste et non pas sur le serveur (ce qui n'est pas le cas d'IMAP, comme nous le verrons
plus loin).
POP3 n'assure donc qu'un service minimum:
Permettre au client d'extraire une copie complte ou partielle de chaque message
prsent dans la file d'attente.
Supprimer tel ou tel message dans la file
Remettre la file d'attente en ordre en supprimant les trous crs par la destruction des
messages.
La page suivante va nous aider mieux comprendre le principe, en dtaillant les
commandes de POP3.
POP3 tourne sous la forme d'un dmon qui coute par dfaut sur le port 110.
Dans le cambouis
Voici un exemple de file d'attente de messages. La machine est dans un placard. Elle tourne
24/7 et fait office de serveur et de passerelle internet sur un rseau local. chris est l'utilisateur
qui reoit tous les messages de notification du systme. Nous regardons ici la file d'attente de
ses messages avant qu'il ne soit all les lire. La file d'attente se trouve dans le fichier
/var/spool/mail/chris, il s'agit d'un systme trs basique, les messages sont stocks dans
un seul fichier, c'est le format mbox, le plus ancien, du temps o IMAP n'existait pas encore :
~# cat /var/spool/mail/chris
From MAILER_DAEMON Thu Apr 12 18:09:09 2007
Date: Thu, 12 Apr 2007 18:09:09 +0200
From: Mail System Internal Data <MAILER-DAEMON@betelgeuse>
Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA
Message-ID: <1176394149@betelgeuse>
X-IMAP: 1101374946 0000018214 NonJunk
Status: RO

This text is part of the internal format of your mail folder, and is not
a real message. It is created automatically by the mail system software.
If deleted, important folder data will be lost, and it will be re-created
with the data reset to initial values.

From logcheck@lair.nain-t.net Sat Jul 19 06:02:38 2008
Return-Path: <logcheck@lair.nain-t.net>
X-Original-To: root
Delivered-To: root@lair.nain-t.net
Received: by lair.nain-t.net (Postfix, from userid 110)
id 0278628B8; Sat, 19 Jul 2008 06:02:34 +0200 (CEST)
To: root@lair.nain-t.net
Subject: betelgeuse.maison.mrs 2008-07-19 06:02 System Events
Message-Id: <20080719040235.0278628B8@lair.nain-t.net>
Date: Sat, 19 Jul 2008 06:02:34 +0200 (CEST)
From: logcheck@lair.nain-t.net (logcheck system account)

This email is sent by logcheck. If you wish to no-longer receive it,
you can either deinstall the logcheck package or modify its
configuration file (/etc/logcheck/logcheck.conf).

System Events
=-=-=-=-=-=-=
etc. etc. etc.

From prof@nain-t.net Sat Jul 19 13:54:10 2008
Return-Path: <prof@nain-t.net>
X-Original-To: root
Delivered-To: root@lair.nain-t.net
Received: by lair.nain-t.net (Postfix, from userid 0)
id CCD3D10169; Sat, 19 Jul 2008 13:54:05 +0200 (CEST)
To: root@lair.nain-t.net
Subject: [Fail2Ban] ssh: banned 82.17.104.168
Message-Id: <20080719115406.CCD3D10169@lair.nain-t.net>
Date: Sat, 19 Jul 2008 13:54:05 +0200 (CEST)
From: prof@nain-t.net (root)

Hi,

The IP 82.17.104.168 has just been banned by Fail2Ban after
6 attempts against ssh.


Here are more information about 82.17.104.168:

Lines containing IP:82.17.104.168 in /var/log/auth.log

Jul 19 13:40:48 betelgeuse sshd[27763]: Did not receive identification
string from 82.17.104.168
Jul 19 13:52:33 betelgeuse sshd[27801]: Invalid user admin from
82.17.104.168
Jul 19 13:52:35 betelgeuse sshd[27803]: Invalid user test from
82.17.104.168
Jul 19 13:52:42 betelgeuse sshd[27807]: Invalid user ghost from
82.17.104.168
Jul 19 13:53:00 betelgeuse sshd[27815]: Invalid user guest from
82.17.104.168
Jul 19 13:53:01 betelgeuse sshd[27817]: Invalid user ghost from
82.17.104.168
Jul 19 13:53:03 betelgeuse sshd[27819]: Invalid user magnos from
82.17.104.168


Regards,

Fail2Ban

From prof@nain-t.net Sat Jul 19 15:29:34 2008
Return-Path: <prof@nain-t.net>
X-Original-To: chris
Delivered-To: chris@lair.nain-t.net
Received: by lair.nain-t.net (Postfix, from userid 0)
id D908F10169; Sat, 19 Jul 2008 15:29:33 +0200 (CEST)
To: chris@lair.nain-t.net
Subject: Message test
Message-Id: <20080719132933.D908F10169@lair.nain-t.net>
Date: Sat, 19 Jul 2008 15:29:33 +0200 (CEST)
From: prof@nain-t.net (root)

Juste pour montrer comment les messages sont rangs
dans la file d'attente de type "mbox"
Il s'agit bien d'un unique fichier qui contient quatre messages, surligns chacun d'une couleur
diffrente. Nous sommes bien dans le cas d'un systme mbox.
1. le premier message n'en est pas un. C'est juste un avertissement pour rappeler que ce
fichier ne doit pas tre dtruit.
2. le second est un compte rendu des vnements de la journe prcdente. Il est ici
volontairement tronqu, pour simplifier la lecture.
3. le troisime est une alerte envoye par le service fail2ban qui est charg de reprer
les tentatives de connexion distance qui chouent. Ici, Monsieur 82.17.104.168 a
tent une attaque par dictionnaire et s'est fait reprer et bloquer la cinquime
tentative.
4. le dernier message est juste un exemple, envoy par prof chris pour toffer un peu
la file d'attente.
Nous verrons avec le protocole IMAP qu'il existe une autre faon de stocker les messages,
chacun dans un fichier spar. C'est le format Maildir, plus utilis dans le cas de serveurs
IMAP, mais aussi utilisable avec les serveurs POP3 actuels.
Les commandes de POP3
Commande Fonction
USER
Il s'agit de l'identifiant du titulaire du compte. En rgle gnrale la partie
gauche du @ dans l'adresse lectronique.
PASS Le mot de passe fourni par le FAI
STAT
Donne le nombre de messages prsents dans la file d'attente, ainsi que le volume
total des messages en octets.
LIST
Donne la liste des messages en attente, avec pour chaque message: * Son numro
d'ordre dans la file * Sa taille en octets
UIDL Analogue LIST, mis part qu'elle retourne non pas la taille du message mais
un identificateur unique
RETR n Permet de rcuprer la totalit du message n dans la file d'attente.
DELE n
Dtruit le message n dans la file d'attente. le numro d'ordre des messages
suivants demeure inchang jusqu' la fin de la session.
TOP n x
Permet de rcuprer les x premires lignes du message n. Les ligne d'en-tte
ne sont pas comptabilises. Cette commande est le plus souvent utilise pour
rcuprer l'en-tte complet et la premire ligne du message, x ne pouvant tre
gal 0.
LAST
Permet de connaitre le numro d'ordre du dernier message auquel on a accd.
(Utile avec une session TELNET).
RSET
Cette commande permet d'annuler toutes les commandes de destruction de
messages envoyes pendant la session. En fait, les commandes DELE ne sont
rendues effectives que si la session a proprement t ferme (commande QUIT
accepte). Cette mthode permet donc d'annuler les oprations d'effacement dans
la session en cours.
NOOP Cette commande sert ne rien faire.
QUIT
Clture la session en cours. Le serveur ferme alors la session TCP et fait le
mnage dans la file d'attente, en fonction des ordres DELE qui ont t donns.
Pour plus de dtails sur les commandes POP3, consultez la rfc1939
Il y a trs peu de commandes, mais elles sont suffisantes pour relever sa boite aux lettres. La
plupart des MUA (cliants de messagerie) ne les utilisent mme pas toutes.
Exprience avec TELNET
Il est donc tout fait possible, si l'on connat le jeu de commandes ci-dessus, d'ausculter sa
boite aux lettres avec un terminal TELNET. Voici des extraits d'une trace enregistre avec un
terminal TELNET, connect sur le port 110 du serveur pop install sur notre passerelle :
~# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user chris
+OK
pass epikoi
+OK Logged in.
Nous avons utilis les commandes user et pass pour nous identifier, le serveur nous a
reconnu et accepte la connexion.
stat
+OK 3 6694
list
+OK 3 messages:
1 4997
2 1217
3 480
.
Nous avons utilis la commande stat, ce qui nous apprend qu'il y a 3 messages (rappelez-
vous, le premier n'est pas un vrai message), puis la commande list qui ne fait que nous
donner les numros d'ordre et la taille en octets de chaque message.
top 1 1
+OK
Return-Path: <logcheck@lair.nain-t.net>
X-Original-To: root
Delivered-To: root@lair.nain-t.net
Received: by lair.nain-t.net (Postfix, from userid 110)
id 0278628B8; Sat, 19 Jul 2008 06:02:34 +0200 (CEST)
To: root@lair.nain-t.net
Subject: betelgeuse.maison.mrs 2008-07-19 06:02 System Events
Message-Id: <20080719040235.0278628B8@lair.nain-t.net>
Date: Sat, 19 Jul 2008 06:02:34 +0200 (CEST)
From: logcheck@lair.nain-t.net (logcheck system account)

This email is sent by logcheck. If you wish to no-longer receive it,
.
top 2 1
+OK
Return-Path: <prof@nain-t.net>
X-Original-To: root
Delivered-To: root@lair.nain-t.net
Received: by lair.nain-t.net (Postfix, from userid 0)
id CCD3D10169; Sat, 19 Jul 2008 13:54:05 +0200 (CEST)
To: root@lair.nain-t.net
Subject: [Fail2Ban] ssh: banned 82.17.104.168
Message-Id: <20080719115406.CCD3D10169@lair.nain-t.net>
Date: Sat, 19 Jul 2008 13:54:05 +0200 (CEST)
From: prof@nain-t.net (root)

Hi,
.
top 3 1
+OK
Return-Path: <prof@nain-t.net>
X-Original-To: chris
Delivered-To: chris@lair.nain-t.net
Received: by lair.nain-t.net (Postfix, from userid 0)
id D908F10169; Sat, 19 Jul 2008 15:29:33 +0200 (CEST)
To: chris@lair.nain-t.net
Subject: Message test
Message-Id: <20080719132933.D908F10169@lair.nain-t.net>
Date: Sat, 19 Jul 2008 15:29:33 +0200 (CEST)
From: prof@nain-t.net (root)

Juste pour montrer comment les messages sont rangs
.
Nous utilisons trois fois la commande top en ne demandant qu'une seule ligne du message, et
rcuprons ainsi les en-ttes de chacun des trois messages.
dele 3
+OK Marked to be deleted.
list
+OK 2 messages:
1 4997
2 1217
.
Nous avons utilis la commande dele pour supprimer le 3
eme
message, puis la commande
list qui n'indique plus que les deux premiers messages.
rset
+OK
list
+OK 3 messages:
1 4997
2 1217
3 480
.
Nous nous ravisons et utilisons la commande rset pour annuler toutes les commandes
d'effacement que nous aurions pu envoyer prcdemment. La commande list r affiche 3
messages.
retr 3
+OK 480 octets
Return-Path: <prof@nain-t.net>
X-Original-To: chris
Delivered-To: chris@lair.nain-t.net
Received: by lair.nain-t.net (Postfix, from userid 0)
id D908F10169; Sat, 19 Jul 2008 15:29:33 +0200 (CEST)
To: chris@lair.nain-t.net
Subject: Message test
Message-Id: <20080719132933.D908F10169@lair.nain-t.net>
Date: Sat, 19 Jul 2008 15:29:33 +0200 (CEST)
From: prof@nain-t.net (root)

Juste pour montrer comment les messages sont rangs
dans la file d'attente de type "mbox"
.
quit
+OK Logging out.
Connection closed by foreign host.
La commande retr permet ici d'afficher la totalit du 3
eme
message et la commande quit met
fin la session.
Notez que lorsque POP3 renvoie des donnes, par exemple avec la commande list, la
dernire ligne envoye est toujours une ligne commenant par un point .. C'est la convention
du protocole pour indiquer au client que le serveur a fini d'envoyer des donnes et que le
client peut passer la commande suivante.
Que retrouverions-nous sur le serveur, si nous ouvrons une nouvelle connexion ?
:~# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user chris
+OK
pass epikoi
+OK Logged in.
list
+OK 3 messages:
1 4997
2 1217
3 480
.
quit
+OK Logging out.
Exactement la mme chose. Autrement dit, si nous n'effaons pas explicitement les messages
sur le serveur, ils y restent, mme si nous les lisons.
POP3 et les MUA
POP3 est un protocole simple. Pourtant la plupart des clients de messagerie (Thunderbird,
Outlook etc.) ne l'exploitent pas pleinement.
Gnralement notre client de messagerie effectue par dfaut, la suite des oprations suivante :
ouverture de la session POP3 ;
identification du client (user et pass) ;
rcupration en local puis effacement de tous les messages prsents sur le serveur
(list, retr, dele) ;
Gnralement, il est au moins possible de demander au MUA de laisser une copie sur le
serveur (la commande dele n'est plus envoye). Dans ce cas, le MUA tient jour (en
principe) une liste des index de messages dj lus, de manire ne pas les rcuprer
nouveau chaque session.
Il faut bien noter que dans tous les cas, les messages lus sont copis en local, mme s'ils ne
sont pas dtruits sur le serveur.
Utiliser POP3 lorsque l'on est amen lire sa messagerie depuis plusieurs postes n'est pas
bien pratique. Il faut en effet prvoir une stratgie qui permette d'effacer les messages sur le
serveur une fois que l'on est assur de les avoir rcuprs sur chaque poste.
De plus, les messages sont dupliqus sur chaque poste client utilis, il faut les re-trier sur
chaque poste, etc. IMAP va beaucoup nous aider dans ce cas.
IMAP
Internet Mail Access Protocol est un protocole de relve des messages lectroniques,
fonctionnellement comparable POP.
Il prsente toutefois de nombreux avantages et l'on peut se demander pourquoi il n'est pas plus
souvent utilis.
Ce chapitre essaye de montrer les avantages de ce protocole et les limites des actuels clients
de messagerie.
Pour y arriver, nous utiliserons comme d'habitude des outils de base :
Telnet, le terminal tout faire,
Ethereal, le sniffeur habituel.
Thunderbird, un client de messagerie issu du projet Mozilla. Il existe pour les plate
formes Windows, GNU/Linux et Mac OS X. Vous le trouverez sur le site du projet
Mozilla.
Nous utiliserons des serveurs IMAP locaux, Dovecot principalement, comme indiqu dans le
chapitre SMTP/IMAP en pratique .
Prsentation gnrale
Initialement, IMAP reprsentait un acronyme de : Interactive Message Access Protocol .
Le nom a t modifi en Internet Message Access Protocol Pour tenir compte des derniers
ajouts au protocole (actuellement en version 4 rvision 1).
Il est dfini par le RFC 2060, remplac par le RFC 3501.
Pourquoi IMAP4 ?
Puisqu'on a POP3 ...
POP3 remplit tout fait son rle de relve de courrier, nous l'avons vu. Alors pourquoi
changer ?
POP3 permet de travailler en modes hors-ligne et dconnect , autrement dit, il est
possible :
De rapatrier tous ses messages en local et de les effacer du serveur, ce qui permet
d'interrompre la connexion et de grer ses messages localement (mode hors-ligne ),
de faire la mme chose, mais en rapatriant une copie locale des messages, laissant les
messages originaux sur le serveur (mode dconnect ).
Le mode hors-ligne est tout fait utilisable si l'on ne gre sa messagerie que depuis un
seul poste de travail, ce qui n'est pas toujours le cas.
Le mode dconnect permet quant lui une gestion depuis plusieurs postes, mais pose
tout de mme le problme de la purge du serveur. En effet, il faudra bien faire de la place de
temps en temps si l'on ne veut pas voir sa bote exploser. Et les messages une fois dtruits sur
le serveur ne pourront plus y tre remis autrement qu'en se les renvoyant.
Lorsque l'on est dans des conditions de connexion difficiles, POP3 se rvle peu puissant pour
se tirer d'embarras si un message volumineux se trouve dans la file. Il est possible, en
exploitant toutes les finesses de POP3, d'liminer ce message ou du moins de ne pas le
rapatrier, mais peu de MUA savent grer ces possibilits et le message non lu reprsentera
toujours un cueil, chaque consultation.
Mais avec IMAP4 ...
Ici, le protocole autorise des manipulations infiniment plus souples. De plus, et c'est
probablement l le point le plus dcisif, les messages peuvent tre entirement grs en restant
sur le serveur. IMAP propose en effet les possibilits suivantes :
Lecture des objets des messages seulement (sans le corps) ;
cration de dossiers sur le serveur ;
dplacement de messages sur le serveur d'un dossier l'autre, sans avoir rapatrier
tout le message en local ;
effacement de message sans l'avoir lu ;
lecture des messages en les laissant sur le serveur ;
marquage des messages sur le serveur. Par exemple, vous lisez un message sur un
poste client A, lorsque vous ouvrez votre messagerie sur un poste client B, le message
apparaitra comme lu. Il y a d'autres marqueurs que nous verrons plus loin ;
il est possible, si votre fournisseur de service le permet, de poser sur le serveur des
filtres qui classeront vos messages leur arrive sur le serveur. Ainsi, en ouvrant une
session IMAP, vous trouverez vos messages dj tris dans les bons dossiers.
Cette notion de dossiers de stockage sur le serveur n'est absolument pas exploitable en POP3,
qui ne sait lire que le contenu de INBOX, le point d'entre des nouveaux messages.
Toutes ces possibilits ncessitent bien entendu d'tre connect en permanence, donc en mode
interactif, d'o le nom initial du protocole.
Mais IMAP fait encore plus, dans la mesure o les modes hors-ligne et dconnect
sont galement possibles.
Ce qu'IMAP4 sait faire
consulter seulement les objets des messages,
effacer, dplacer des messages sans les lire, ventuellement avec des rgles de tri
automatiques,
rapatrier en local certains messages et pas d'autres, en faisant une copie ou un
dplacement, ventuellement avec des rgles de tri automatiques,
recopier sur le serveur des messages que vous avez en local,
et bien d'autres choses encore.
Vous le voyez, il semble n'y avoir aucune bonne raison de ne pas passer IMAP, mme si
tous les MUA n'exploitent pas pleinement les possibilits de ce protocole.
Alors pourquoi POP3 encore ?
S'il ne semble y avoir que de bonnes raisons de passer IMAP, il y en a aussi (mais sont-elles
bonnes ?) pour rester sur POP3.
IMAP4 est un protocole beaucoup plus compliqu que POP3 et pour cause, il est plus
puissant. Cette complexit relative amne plusieurs effets ngatifs :
tous les fournisseurs de services Internet ne proposent pas encore de serveur IMAP, et
ceux qui en proposent, pour des raisons diverses, les amputent parfois de certaines de
leurs possibilits,
rares sont les clients de messagerie (MUA) qui grent toutes les possibilits offertes
par IMAP4, si l'on se limite ce que sait faire POP3, alors, autant utiliser POP3,
garder tous ses messages sur le serveur, mme bien classs dans divers dossiers n'a pas
que des avantages, l'espace disponible est souvent limit et le stockage sur le serveur
va rapidement remplir cet espace, encore que cette situation volue rapidement. Il
faudra donc adopter des stratgies de purge qui restreindront les avantages du systme.
Mais nous sommes ici pour parler d'IMAP4. Pas moins de 25 commandes alors que POP3
n'en propose que 12. Nous ne les verrons pas toutes en dtail, le but tant d'avantage de
comprendre l'intrt du protocole que de le manipuler avec telnet.
Dmonstration
Les configurations utilises
Pour cette dmonstration, nous disposons de deux serveurs IMAP diffrents. Nous nous
contenterons de les utiliser pour une premire approche des possibilits de ce protocole.
Note : Cette dmonstration date un peu, mais elle reste d'actualit.
UW-IMAP
Un serveur dvelopp l'universit de Washington, install pour l'occasion sur mon poste de
travail. Le serveur SMTP utilis est Postfix. La machine s'appelle potiquement
pchris2.maison.mrs.
Ce serveur utilise le format MAILBOX .
Cyrus
Un serveur dvelopp l'universit de Carnegie Mellon, install sur une Debian Etch . Le
SMTP employ ici est galement Postfix. La machine s'appelle cyrus.nain-t.net.
Ce serveur utilise le format MAILDIR .
Les tests
Configuration du client (MUA)
Sur chacune de ces machines, un compte de messagerie est cr :
testimap@pchris2.maison.mrs pour le serveur Uw-imap,
testimap@cyrus.nain-t.net pour le serveur Cyrus.
Un client de messagerie, Thunderbird , est install sur la machine : pchris2.maison.mrs, qui
fonctionne sous Ubuntu.
Nous allons crer ces deux comptes sur Thunderbird :

Deux remarques immdiates :
Les deux comptes contiennent dj deux dossiers, Inbox et Trash ,
sur pchris2 (uw-imap) les deux dossiers sont au mme niveau de hirarchie, alors que
sur cyrus, Trash est un sous dossier de Inbox . Cette subtilit trouvera son
explication plus loin dans cet expos.
Cration de rpertoires
Ceci n'est pas un cours sur l'emploi de Thunderbird. Nous nous dispenserons donc de
dvelopper le mode opratoire.
Thunderbird aime bien disposer de rpertoires supplmentaires :
Sent, pour stocker les messages envoys,
Drafts, pour stocker les brouillons,
Templates, pour stocker les modles.
Nous allons les crer pour chaque compte, sur les serveurs respectifs.

Encore deux remarques :
Avec uw-imapd, il n'est pas possible de crer ces dossiers dans Inbox , tous les
dossiers sont obligatoirement au mme niveau de hirarchie,
avec Cyrus, les dossiers ne peuvent tre crs que dans Inbox (ou dans un sous
dossier de inbox ). Il est possible de construire une arborescence complexe, mme
si ce n'est pas forcment souhaitable.
Rception d'un premier mail
Nous avons plus de moyens que vous ne pensez. Depuis une quatrime machine (Windows,
celle l, mais qui utilise aussi Thunderbird), nous envoyons un message sur ces deux comptes
:

Bien entendu, a fonctionne et nous retrouvons sur pchris2 ce message dans chaque BAL :

Manipulations diverses
Voyons un peu la configuration de notre Thunderbird :

Par dfaut, Thunderbird place une copie des messages envoys dans le dossier Sent , sur le
serveur IMAP du compte employ. Vrifions a en rpondant ce premier message depuis le
compte sur gw2 :

Il y est.
Le dossier Sent est bien sur le serveur IMAP de gw2.maison.mrs et le message envoy s'y
trouve bien. Nous allons le vrifier tout de suite, puisque nous avons le serveur sous la main :
/home/testimap# ls -la
total 28
drwxr-xr-x 2 testimap nogroup 4096 Dec 20 10:53 .
drwxrwsr-x 6 root staff 4096 Nov 30 16:42 ..
-rw-r--r-- 1 testimap nogroup 28 Dec 20 10:20 .mailboxlist
-rw------- 1 testimap nogroup 513 Dec 20 10:19 Drafts
-rw------- 1 testimap nogroup 1190 Dec 20 10:53 Sent
-rw------- 1 testimap nogroup 513 Dec 20 10:20 Templates
-rw------- 1 testimap nogroup 513 Dec 20 10:03 Trash
Nous avons bien quatre fichiers qui correspondent aux quatre dossiers crs et un cinquime,
cach, qui s'appelle .mailboxlist. Etant d'un naturel curieux, impossible de rsister l'envie de
regarder son contenu :
/home/testimap# cat .mailboxlist
Trash
Drafts
Sent
Templates
Un peu dcevant Il ne contient que la liste des noms des rpertoires.
Voyons maintenant le contenu du fichier Sent :
sysop:/home/testimap# cat Sent
From MAILER-DAEMON Sat Dec 20 10:20:02 2003
Date: 20 Dec 2003 10:20:02 +0100
From: Mail System Internal Data <MAILER-DAEMON@sysop.eme-enseignement.fr>
Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA
X-IMAP: 1071912002 0000000000
Status: RO

This text is part of the internal format of your mail folder, and is not
a real message. It is created automatically by the mail system software.
If deleted, important folder data will be lost, and it will be re-created
with the data reset to initial values.

From testimap@sysop.eme-enseignement.fr Sat Dec 20 10:53:12 2003 +0100
Status: R
X-Status:
X-Keywords:
Message-ID: <3FE41C07.1030504@gw2.maison.mrs>
Date: Sat, 20 Dec 2003 10:53:11 +0100
From: testimap-gw2 <testimap@gw2.maison.mrs>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6b) Gecko/20031205
Thunderbird/0.4
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: Christian Caleca <christian.caleca@free.fr>
Subject: Re: un premier test IMAP
References: <3FE4192C.7040107@free.fr>
In-Reply-To: <3FE4192C.7040107@free.fr>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

Christian Caleca wrote:

> Coucou.

Bien reu :)
Intressons nous pour l'instant ce qui est surlign : c'est bien le texte de la rponse faite.
Il n'a bien entendu pas chapp votre sagacit que le dossier Inbox n'est pas ici. C'est
tout simplement qu'il est ailleurs. Il est dans le spool de messagerie, directement aliment par
le SMTP, via l'agent de distribution local (MDA). Avec EXIM vous le trouverez dans
/var/spool/mail
sysop:/var/spool/mail# ls
chris testimap
Profitons-en pour voir ce qu'il y a dedans :
sysop:/var/spool/mail# cat testimap
From christian.caleca@free.fr Sat Dec 20 10:40:53 2003
Return-path: <christian.caleca@free.fr>
Envelope-to: testimap@gw2.maison.mrs
Received: from pchris.maison.mrs ([192.168.0.10] helo=free.fr)
by sysop.eme-enseignement.fr with esmtp (Exim 3.35 #1 (Debian))
id 1AXdbQ-0000u2-00; Sat, 20 Dec 2003 10:40:52 +0100
Message-ID: <3FE4192C.7040107@free.fr>
Date: Sat, 20 Dec 2003 10:41:00 +0100
From: Christian Caleca <christian.caleca@free.fr>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6b)
Gecko/20031205 Thunderbird/0.4
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: testimap@gw2.maison.mrs, testimap@cyclope.maison.mrs
Subject: un premier test IMAP
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
X-IMAPbase: 1071913280 2
Status: RO
X-Status: DA
X-Keywords:
X-UID: 1

Coucou.
Le message que l'on a reu. C'est rconfortant.
Suppression d'un message dans Inbox
Le message initial n'ayant pas d'intrt, nous allons le dtruire. Nous devrions thoriquement
le retrouver dans la poubelle (Trash):

Tout va bien, tout se passe comme prvu.
Comme ce message n'a toujours pas d'intrt, mme dans la poubelle, nous vidons aussi la
poubelle.
Bien. Vous tes bien assis ? Alors, allons vrifier tout a sur le serveur :
/home/testimap# cat Trash

From MAILER-DAEMON Sat Dec 20 11:07:13 2003
Date: 20 Dec 2003 11:07:13 +0100
From: Mail System Internal Data <MAILER-DAEMON@sysop.eme-enseignement.fr>
Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA
Message-ID: <1071914833@sysop.eme-enseignement.fr>
X-IMAP: 1071911016 0000000001
Status: RO

This text is part of the internal format of your mail folder, and is not
a real message. It is created automatically by the mail system software.
If deleted, important folder data will be lost, and it will be re-created
with the data reset to initial values.

From christian.caleca@free.fr Sat Dec 20 10:40:53 2003
Return-path: <christian.caleca@free.fr>
Envelope-to: testimap@gw2.maison.mrs
Received: from pchris.maison.mrs ([192.168.0.10] helo=free.fr)
by sysop.eme-enseignement.fr with esmtp (Exim 3.35 #1 (Debian))
id 1AXdbQ-0000u2-00; Sat, 20 Dec 2003 10:40:52 +0100
Message-ID: <3FE4192C.7040107@free.fr>
Date: Sat, 20 Dec 2003 10:41:00 +0100
From: Christian Caleca <christian.caleca@free.fr>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6b)
Gecko/20031205 Thunderbird/0.4
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: testimap@gw2.maison.mrs, testimap@cyclope.maison.mrs
Subject: un premier test IMAP
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
Status: RO
X-Status: A
X-Keywords:

Coucou.
Ca c'est c.. ennuyeux. Bien qu'effac, le message y est toujours !
Et dans le spool, le premier message reu, puis effac, y est-il toujours lui aussi ?
sysop:/var/spool/mail# cat testimap

From christian.caleca@free.fr Sat Dec 20 10:40:53 2003
Return-path: <christian.caleca@free.fr>
Envelope-to: testimap@gw2.maison.mrs
Received: from pchris.maison.mrs ([192.168.0.10] helo=free.fr)
by sysop.eme-enseignement.fr with esmtp (Exim 3.35 #1 (Debian))
id 1AXdbQ-0000u2-00; Sat, 20 Dec 2003 10:40:52 +0100
Message-ID: <3FE4192C.7040107@free.fr>
Date: Sat, 20 Dec 2003 10:41:00 +0100
From: Christian Caleca <christian.caleca@free.fr>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6b)
Gecko/20031205 Thunderbird/0.4
X-Accept-Language: en-us, en
MIME-Version: 1.0
To: testimap@gw2.maison.mrs, testimap@cyclope.maison.mrs
Subject: un premier test IMAP
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
X-IMAPbase: 1071913280 2
Status: RO
X-Status: DA
X-Keywords:
X-UID: 1

Coucou.
Oui
Ca voudrait dire que petit petit, l'espace allou va s'encombrer de dchets et au final, la BAL
va exploser alors mme qu'elle sera considre comme vide ?
La rponse est oui, si l'on ne prend pas une prcaution supplmentaire : le compactage des
dossiers.
En cliquant sur Inbox du bouton droit et en faisant Compact This Folder et en rptant la
mme opration sur Trash , nous allons remdier au problme :
/var/spool/mail# ls -l
total 48
-rw-rw---- 1 testimap mail 0 Dec 20 11:33 testimap
Le fichier existe toujours, mais fait 0 octets, ce qui prouve qu'il est vide.
Il est donc primordial, avec IMAP, de penser compacter rgulirement les dossiers de la
messagerie.
Dplacement de messages
Nous allons crer pour le compte sur gw2.maison.mrs une rgle de filtrage qui va dplacer
tout message contenant le mot trier dans un dossier spcial intitul demotri et cr
cet effet.

et nous envoyons un message :

Et chez le destinataire :

Ca fonctionne. Le seul fait de lire sa messagerie va faire que le message sera dplac dans le
dossier demotri sans qu'il ait t au pralable rapatri chez le client.
On efface ce message sans intrt, on vide la poubelle et au bout du compte, notre BAL
contiendra toujours trois exemplaires de ce message, invisibles, mais bien prsents :
Dans Inbox, parce que le dplacement n'est en ralit qu'une copie suivie d'un
effacement,
dans demotri,
dans Trash.
Pensez donc compacter les dossiers souvent
Plus fort encore, nous allons crer une rgle de tri qui fera que, lorsqu'un message
destination de testimap@cyclope.maison.mrs contient le mot distant dans son objet, il
faudra le dplacer dans le rpertoire demotri du compte testimap@gw2.maison.mrs.
Autrement dit, nous allons dplacer un message d'un serveur l'autre.

Rptons-le, cette rgle est crite pour le compte [testimap@cyclope.maison.mrs !
Envoi du message :

Et rception :

Le cas d'un gros message encombrant.
Vous tes perdu quelque part de l'autre ct de la fracture numrique et ne disposez que d'une
mchante connexion RTC qui plafonne 28800 bps et qui se dconnecte toutes les cinq
minutes, cause de la mauvaise qualit de votre ligne tlphonique. Je peux vous indiquer des
endroits en France o c'est comme a que a se passe.
Comme dans ce cas, vous avez pris la prcaution de faire afficher la taille des messages, vous
constatez que celui-ci fait 805 Ko, qu'avec votre connexion pourrie, vous n'arriverez jamais
le tlcharger, IMAP vous sauve.
En effet, ce stade, le message n'est pas tlcharg en local. Aussi longtemps que vous ne
cliquerez pas dessus du bouton gauche, il ne se tlchargera pas.
Cliquez donc dessus du bouton droit, demandez de le dplacer dans le dossier
Lire_plus_tard , que vous avez cr cet effet. Le dplacement aura lieu sans que le message
ne soit tlcharg localement. Vous pourrez alors aller le lire plus tard, lorsque vous aurez
retrouv une connexion de bonne qualit.
Premires conclusions
Si cette dmonstration ne vous a pas convaincu de l'intrt d'IMAP, c'est que vous n'avez pas
besoin de consulter votre messagerie depuis des machines diffrentes, que vous tes
suffisamment sr de la fiabilit de votre machine locale pour ne pas souhaiter conserver vos
messages importants sur le serveur de votre fournisseur, que vous n'avez jamais t confront
au blocage de votre messagerie parce que vous avez une connexion tellement minable qu'un
gros message ne peut jamais tre rapatri cause des dconnexions.
IMAP propose beaucoup de fonctionnalits, c'est une autre affaire que d'en disposer avec son
MUA. Thunderbird gre bien mieux l'IMAP que ne le fait Outlook Express, par exemple, qui
ne sait pas appliquer de rgles de filtrage sur les dossiers IMAP. Cependant, il n'est pas parfait
non plus. Il n'est pas possible par exemple de dfinir simplement une rgle de tri en fonction
de la taille des messages.
Pourquoi avons-nous fait ces manipulations surtout avec UW-imap ? Parce que c'est le
serveur dont la structure est la plus simple. Mais rassurez-vous, nous aurons l'occasion de voir
Cyrus plus en dtails dans tard.
De ce que nous avons vu pour l'instant, retenons que Cyrus offre plus de souplesse dans
l'organisation des rpertoires que ne le fait UW-imap. Nous verrons plus loin que ce n'est pas
son seul avantage. Mais en ce qui concerne le protocole IMAP lui-mme, les deux serveurs se
comportent de la mme manire.
Les commandes d'IMAP
Entrons maintenant qans le vif du sujet. Il y a quelques RFCs qui dfinissent IMAP4 tel qu'il
est utilis actuellement. Les voici :
RFC Titre Commentaire
2060
INTERNET MESSAGE ACCESS PROTOCOL -
VERSION 4rev1
Pour mmoire
2087 IMAP4 QUOTA extension

3501
INTERNET MESSAGE ACCESS PROTOCOL -
VERSION 4rev1
Obsoletes: 2060
3502
Internet Message Access Protocol (IMAP) -
MULTIAPPEND Extension
3691
Internet Message Access Protocol (IMAP) UNSELECT
command
4314 IMAP4 Access Control List (ACL) Extension

4315
Internet Message Access Protocol (IMAP) - UIDPLUS
extension
4466 Collected Extensions to IMAP4 ABNF
Updates: 2088, 2342, 3501,
3502, 3516
4469
Internet Message Access Protocol (IMAP)
CATENATE Extension
Updates: 3501, 3502
4978 The IMAP COMPRESS Extension

5032 WITHIN Search Extension to the IMAP Protocol Updates: 3501
Et voici la liste des commandes, avec les RFC qui y font rfrence.
Commande RFC
APPEND RFC 3501, RFC 3502, RFC 4466, RFC 4469
AUTHENTICATE RFC 3501
CAPABILITY RFC 3501
CHECK RFC 3501
CLOSE RFC 3501
COMPRESS RFC 4978
COPY RFC 3501
CREATE RFC 3501, RFC 4466
DELETE RFC 3501
DELETEACL RFC 4314
EXAMINE RFC 3501, RFC 4466
EXPUNGE RFC 3501
FETCH RFC 3501, RFC 4466
GETACL RFC 4314
GETQUOTA RFC 2087
GETQUOTAROOT RFC 2087
LIST RFC 3501
LISTRIGHTS RFC 4314
LOGIN RFC 3501
LOGOUT RFC 3501
LSUB RFC 3501
MYRIGHTS RFC 4314
NOOP RFC 3501
RENAME RFC 3501, RFC 4466
SEARCH RFC 3501, RFC 5032
SELECT RFC 3501, RFC 4466
SETACL RFC 4314
SETQUOTA RFC 2087
STARTTLS RFC 3501
STATUS RFC 3501
STORE RFC 3501, RFC 4466
SUBSCRIBE RFC 3501
UID RFC 3501, RFC 4315, RFC 4466
UNSELECT RFC 3691
UNSUBSCRIBE RFC 3501
X<atom> RFC 3501
Au minimum, le RFC 3501 gagne tre lu pour mieux comprendre ce qui suit. Les
commandes en gras seront plus particulirement observes.
Petit dialogue en IMAP
Suit un dialogue tout
simple, entre le MUA Thunderbird et un serveur IMAP (Dovecot) configur pour accepter les
changes en plaintext. Le compte lu n'a pas de dossiers particuliers, part la corbeille
(Trash). Il n'y a pas de nouveaux messages dans la boite. On peut difficilement faire plus
simple, comme le montre l'illustration.

No. Time Source Destination Protocol
Info
4 0.000665 janus.maison.mrs pchris.maison.mrs IMAP
Response: * OK Dovecot ready.
5 0.010322 pchris.maison.mrs janus.maison.mrs IMAP
Request: 1 capability
7 0.010724 janus.maison.mrs pchris.maison.mrs IMAP
Response: * CAPABILITY IMAP4rev1 SASL-IR SORT THREAD=REFERENCES MULTIAPPEND
UNSELECT LITERAL+ IDLE CHILDREN NAMESPACE LOGIN-REFERRALS QUOTA STARTTLS
AUTH=PLAIN
8 0.056690 pchris.maison.mrs janus.maison.mrs IMAP
Request: 2 authenticate plain
9 0.057215 janus.maison.mrs pchris.maison.mrs IMAP
Response: +
10 0.057487 pchris.maison.mrs janus.maison.mrs IMAP
Request: AHN5c29wQG1haXNvbi5tcnMAd3preHJsZQ==
12 1.748651 janus.maison.mrs pchris.maison.mrs IMAP
Response: 2 OK Logged in.
13 1.749334 pchris.maison.mrs janus.maison.mrs IMAP
Request: 3 namespace
15 1.750784 janus.maison.mrs pchris.maison.mrs IMAP
Response: * NAMESPACE (("" ".")) NIL NIL
16 1.752712 pchris.maison.mrs janus.maison.mrs IMAP
Request: 4 lsub "" "*"
17 1.753294 janus.maison.mrs pchris.maison.mrs IMAP
Response: * LSUB () "." "Trash"
18 1.754174 pchris.maison.mrs janus.maison.mrs IMAP
Request: 5 list "" "INBOX"
19 1.754645 janus.maison.mrs pchris.maison.mrs IMAP
Response: * LIST (\HasNoChildren) "." "INBOX"
20 1.762273 pchris.maison.mrs janus.maison.mrs IMAP
Request: 6 select "INBOX"
21 1.763705 janus.maison.mrs pchris.maison.mrs IMAP
Response: * FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
22 1.764358 pchris.maison.mrs janus.maison.mrs IMAP
Request: 7 getquotaroot "INBOX"
23 1.765468 janus.maison.mrs pchris.maison.mrs IMAP
Response: * QUOTAROOT "INBOX" ""
24 1.765912 pchris.maison.mrs janus.maison.mrs IMAP
Request: 8 UID fetch 1:* (FLAGS)
25 1.767333 janus.maison.mrs pchris.maison.mrs IMAP
Response: * 1 FETCH (FLAGS (\Seen) UID 1)
26 1.774399 pchris.maison.mrs janus.maison.mrs IMAP
Request: 9 IDLE
27 1.775210 janus.maison.mrs pchris.maison.mrs IMAP
Response: + idling
29 8.352640 pchris.maison.mrs janus.maison.mrs IMAP
Request: DONE
30 8.352984 janus.maison.mrs pchris.maison.mrs IMAP
Response: 9 OK Idle completed.
31 8.353243 pchris.maison.mrs janus.maison.mrs IMAP
Request: 10 close
32 8.354027 janus.maison.mrs pchris.maison.mrs IMAP
Response: 10 OK Close completed.
33 8.354250 pchris.maison.mrs janus.maison.mrs IMAP
Request: 11 logout
34 8.354431 janus.maison.mrs pchris.maison.mrs IMAP
Response: * BYE Logging out
35 8.354688 janus.maison.mrs pchris.maison.mrs IMAP
Response: 11 OK Logout completed.
Pas moins de 11 commandes sont envoyes au serveur. Regardons-les de plus prs.
Commande Description
capability demande la liste des possibilits que le serveur supporte.
authenticate
indique au serveur un mcanisme d'authentification. Si le serveur supporte le
mcanisme d'authentification demand, il excute un change protocolaire
d'authentification afin d'authentifier et identifier le client. Il est aussi possible
d'utiliser la commande login, plus rudimentaire car elle ne supporte que le nom
d'utilisateur et son mot de passe en texte clair.
namespace
Pour aller vite, cette commande retourne ce qu'il faut pour que l'utilisateur puisse
connaitre les dossiers auxquels il peut accder et souscrire, ce qui peut inclure
les dossiers partags, prvus dans le protocole IMAP
lsub
permet d'obtenir partir d'un point de rfrence la liste de dossiers auxquels le
client a souscrit (qu'il dsire voir dans son client).
list permet d'obtenir partir d'un point de rfrence la liste de dossiers existants
select
slectionne une boite aux lettres, ainsi les messages dans la boite aux lettres sont
accessibles. Cette commande renvoie le nombre total de messages (EXISTS), et
le nombre de nouveaux messages (RECENT)
getquotaroot
Comme son nom le laisse penser, cette commande renvoie l'tat d'occupation de
l'espace allou, lorsque les quotas sont activs sur le serveur IMAP
uid
s'utilise avec les commandes COPY, FETCH, STORE ou encore SEARCH. Son
utilit est de renvoyer un index unique plutt qu'un numro de squence, comme
le feraient les commandes COPY, FETCH, STORE et SEARCH
fetch
cette commande dispose d'une syntaxe assez complexe. il est possible d'obtenir
par elle de nombreuses informations sur un message ou un lot de messages.
Dans l'exemple, Thunderbird se contente de rcuprer les drapeaux attachs
chaque message prsent dans INBOX
idle
lorsque le serveur supporte cette commande, il permet au client d'tre inform en
temps rel de l'arrive de nouveaux messages
close
assez similaire EXPUNGE, cette commande dtruit de faon dfinitive tous les
messages qui ont le drapeau deleted. Elle ne renvoie pas de compte rendu,
comme le fait EXPUNGE. Thunderbird n'envoie pas cette commande par dfaut. Il
faut le lui indiquer dans sa configuration avance, comme expliqu dans cette
astuce
logout Logout met fin la session IMAP
Comme nous n'allons pas coder un client IMAP, nous n'irons pas beaucoup plus loin. Il est
vivement recommand, si l'on dsire approfondir ce protocole, de s'installer un serveur SMTP
et un serveur IMAP et de jouer avec par l'entremise de Telnet. Nous allons d'ailleurs avoir
dans la suite un petit aperu de la complexit de ce jeu.
Points de repre
Encore une fois, rien ne vaut la lecture du RFC 3501 (ce ne sera pas faute d'avoir insist).
Voici tout de mme quelques points forts du protocole.
Port par dfaut
Un serveur IMAP coute par dfaut sur le port 143. Si l'on n'utilise ni TLS ni IMAPS,
l'change se fait en texte clair (y compris ventuellement le nom d'utilisateur et le mot de
passe) et Telnet permet de jouer aux MUAs les plus volus.
Syntaxe
Premier point, les commandes doivent tre indexes, contrairement POP. Autrement dit,
chaque commande doit tre prcde d'un index unique. Ceci permet dans certaines
conditions d'envoyer au serveur une nouvelle commande alors que l'on n'a pas encore reu la
rponse de la prcdente.
Les flags
Les commandes peuvent tre envoyes en caractres majuscules ou en minuscules. Il vaut
mieux le faire en majuscules.
\Seen Le message a t lu
\Answered Il a t rpondu au message
\Flagged Le message est marqu pour lui donner une attention perticulire
\Deleted
Le message est supprim pour que plus tard un EXPUNGE ou un CLOSE puisse le
supprimer physiquement sur le serveur
\Draft Le message n'a pas t entirement compos. Il est marqu en tant que brouillon
\Recent
Le message est arriv dans cette boite aux lettres aprs la dernire consultation de
celle-ci. Les sessions ultrieures ne verront pas l'tat \Recent pour ce message. Ce
drapeau ne peut tre modifi par le client. S'il n'est pas possible de dterminer si
oui ou non, cette session est la premire session a tre notifie du message, alors
ce message DEVRA (SHOULD) tre considr comme rcent
Quelques commandes utiles
Il existe des commandes qui peuvent tre utilises sans authentification pralable (trs peu) et
d'autres qui ne peuvent l'tre qu'aprs avoir t authentifi.
CAPABILITY
C'est une commande importante, elle permet au client de savoir ce dont le serveur est capable.
Tous les serveurs IMAP n'ont pas les mmes possibilits. Cette commande peut tre envoye
au serveur avant l'authentification. Il est mme recommand de le faire, de manire choisir
le moyen d'authentification le plus appropri. Exemples :
un serveur uw-imapd
10 capability
* CAPABILITY IMAP4REV1 LITERAL+ IDLE UIDPLUS NAMESPACE CHILDREN MAILBOX-
REFERRALS BINARY
UNSELECT ESEARCH WITHIN SCAN SORT THREAD=REFERENCES THREAD=ORDEREDSUBJECT
MULTIAPPEND
SASL-IR LOGIN-REFERRALS STARTTLS LOGINDISABLED
10 OK CAPABILITY completed
un serveur Dovecot
10 capability
* CAPABILITY IMAP4rev1 SASL-IR SORT THREAD=REFERENCES MULTIAPPEND UNSELECT
LITERAL+
IDLE CHILDREN NAMESPACE LOGIN-REFERRALS QUOTA STARTTLS AUTH=PLAIN
10 OK CAPABILITY completed
un autre serveur Dovecot, configur diffremment
10 capability
* CAPABILITY IMAP4rev1 SASL-IR SORT THREAD=REFERENCES MULTIAPPEND UNSELECT
LITERAL+
IDLE CHILDREN NAMESPACE LOGIN-REFERRALS STARTTLS AUTH=PLAIN
10 OK CAPABILITY completed
un serveur Courier-imapd
10 capability
* CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT
THREAD=REFERENCES
SORT QUOTA IDLE ACL ACL2=UNION STARTTLS LOGINDISABLED
10 OK CAPABILITY completed
un serveur Cyrus-imapd
10 capability
* CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ MAILBOX-REFERRALS NAMESPACE
UIDPLUS ID
NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT
THREAD=ORDEREDSUBJECT
THREAD=REFERENCES ANNOTATEMORE IDLE STARTTLS LOGINDISABLED
10 OK Completed
Notez STARTTLS et LOGINDISABLED. L'une permet de passer en mode chiffr, l'autre indique
que la commande LOGIN qui passe le nom d'utilisateur et le mot de passe en clair n'est pas
accepte par le serveur.
LSUB et LIST
Ces deux commandes permettent de savoir quels sont les rpertoires souscrits et existants.
Exemple :
* OK Dovecot ready.
10 login chris@maison.mrs epikoi
10 OK Logged in.
20 lsub "*" "*"
* LSUB () "." "Trash"
20 OK Lsub completed.
30 list "*" "*"
* LIST (\HasNoChildren) "." "Trash"
* LIST (\HasNoChildren) "." "INBOX"
30 OK List completed.
40 unsubscribe "Trash"
40 OK Unsubscribe completed.
50 lsub "*" "*"
50 OK Lsub completed.
60 list "*" "*"
* LIST (\HasNoChildren) "." "Trash"
* LIST (\HasNoChildren) "." "INBOX"
60 OK List completed.
70 logout
* BYE Logging out
70 OK Logout completed.
Connection closed by foreign host.
Au dbut de la session, LSUB dit que chris@maison.mrs est abonn au dossier Trash. La
commande LIST indique qu'il y a un autre dossier : INBOX. Mais celui-ci l'utilisateur est
obligatoirement abonn.
La commande UNSUBSCRIBE permet de se dsabonner Trash. En effet la commande LSUB
n'indique plus rien, ce qui ne veut pas dire que le dossier n'existe plus, puisque la commande
LIST l'affiche toujours.
SELECT
Permet de slectionner un dossier et d'avoir un compte rendu de son contenu. Pour les
besoins, envoyons un message chris@maison.mrs et manipulons un peu :
20 select INBOX
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags
permitted.
* 6 EXISTS
* 1 RECENT
* OK [UNSEEN 5] First unseen.
* OK [UIDVALIDITY 1216295789] UIDs valid
* OK [UIDNEXT 7] Predicted next UID
20 OK [READ-WRITE] Select completed.
Le fait de slectionner INBOX nous apprend principalement que dedans il y a :
6 messages ;
1 est RECENT ;
le premier message non lu a l'index 5.
UID et FETCH
Pour en savoir plus, il faut utiliser ce couple infernal, avec la bonne syntaxe. Ici, nous voulons
juste avoir le dtail des FLAGS pour tous les messages prsents dans INBOX :
30 uid fetch 1:* (FLAGS)
* 1 FETCH (FLAGS (\Seen) UID 1)
* 2 FETCH (FLAGS (\Seen) UID 2)
* 3 FETCH (FLAGS (\Seen) UID 3)
* 4 FETCH (FLAGS (\Seen) UID 4)
* 5 FETCH (FLAGS () UID 5)
* 6 FETCH (FLAGS (\Recent) UID 6)
30 OK Fetch completed.
Ce qui nous apprend que :
les messages 1 4 ont t lus ;
le message 5 tait dj prsent lors de la dernire consultation, mais n'a pas t lu ;
le message 6 est Recent. Il n'tait pas prsent lors de la dernire consultation.
Est-ce dire que le seul fait d'ouvrir une session IMAP peut changer des flags ? Absolument.
La preuve :
40 logout
40 OK Logout completed.
Connection closed by foreign host.
chris@pchris2:~$ telnet janus.maison.mrs 143
Trying 192.168.0.18...
Connected to janus.maison.mrs.
Escape character is '^]'.
* OK Dovecot ready.
10 login chris@maison.mrs epikoi
10 OK Logged in.
20 select "INBOX"
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags
permitted.
* 6 EXISTS
* 0 RECENT
* OK [UNSEEN 5] First unseen.
* OK [UIDVALIDITY 1216295789] UIDs valid
* OK [UIDNEXT 7] Predicted next UID
20 OK [READ-WRITE] Select completed.
30 uid fetch 1:* (FLAGS)
* 1 FETCH (FLAGS (\Seen) UID 1)
* 2 FETCH (FLAGS (\Seen) UID 2)
* 3 FETCH (FLAGS (\Seen) UID 3)
* 4 FETCH (FLAGS (\Seen) UID 4)
* 5 FETCH (FLAGS () UID 5)
* 6 FETCH (FLAGS () UID 6)
30 OK Fetch completed.
Le seul fait d'avoir ferm la session IMAP puis d'en avoir ouvert une autre fait que le message
6 n'est plus Recent. Soyons clairs. Ceci ne veut pas dire qu'il a t lu. Un message lu a le flag
Seen La preuve :
40 uid FETCH 6 BODY[HEADER]
* 6 FETCH (UID 6 FLAGS (\Seen) BODY[HEADER] {811}
Return-Path: <root@janus.nain-t.net>
Delivered-To: chris@maison.mrs
Received: from localhost (localhost [127.0.0.1])
by janus.nain-t.net (Postfix) with ESMTP id C47C64000B3
for <chris@maison.mrs>; Sun, 20 Jul 2008 17:58:32 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at janus.nain-t.net
Received: from janus.nain-t.net ([127.0.0.1])
by localhost (janus.nain-t.net [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id UPxwk-p3hN85 for <chris@maison.mrs>;
Sun, 20 Jul 2008 17:58:17 +0200 (CEST)
Received: by janus.nain-t.net (Postfix, from userid 0)
id C886740009C; Sun, 20 Jul 2008 17:58:17 +0200 (CEST)
To: chris@maison.mrs
Subject: test IMAP
Message-Id: <20080720155817.C886740009C@janus.nain-t.net>
Date: Sun, 20 Jul 2008 17:58:17 +0200 (CEST)
From: root@janus.nain-t.net (root)

)
40 OK Fetch completed.
40 uid fetch 1:* (FLAGS)
* 1 FETCH (FLAGS (\Seen) UID 1)
* 2 FETCH (FLAGS (\Seen) UID 2)
* 3 FETCH (FLAGS (\Seen) UID 3)
* 4 FETCH (FLAGS (\Seen) UID 4)
* 5 FETCH (FLAGS () UID 5)
* 6 FETCH (FLAGS (\Seen) UID 6)
40 OK Fetch completed.
uid FETCH 6 BODY[HEADER] signifie que l'on souhaite lire le texte du message d'index 6,
mais seulement son en-tte. Cette demande fait que par la suite, le message 6 est marqu
comme Seen.
STARTTLS
Cette commande permet de ngocier entre le client et le serveur une mthode de chiffrement
des donnes changes. Le serveur doit prsenter un certificat (avec sa cl publique) et le
client doit accepter ce certificat. Soit automatiquement parce qu'il est sign par une autorit de
confiance connue, soit manuellement. STARTTLS employ avant AUTHANTICATE permet
de chiffrer aussi la procdure de login. Il n'est que trop conseill d'utiliser cette mthode si le
serveur le permet.
Supprimer un message
Vous avez bien lu jusqu'au bout tous les RFCs impliqus dans le protocole IMAP et vous avez
compris qu'il n'y a pas de commande simple prvue pour supprimer un message. La
commande DELETE s'applique des dossiers, pas des messages. Comment faire alors ? Il y a
deux tapes franchir, et il est absolument fondamental d'en comprendre le principe !
(Notez le).
Marqu avec \Deleted
Il faut utiliser la commande STORE pour placer sur le message vis le flag \Deleted :
50 store 6 +FLAGS (\Deleted)
* 6 FETCH (FLAGS (\Deleted \Seen))
50 OK Store completed.
60 uid fetch 1:* (FLAGS)
* 1 FETCH (FLAGS (\Seen) UID 1)
* 2 FETCH (FLAGS (\Seen) UID 2)
* 3 FETCH (FLAGS (\Seen) UID 3)
* 4 FETCH (FLAGS (\Seen) UID 4)
* 5 FETCH (FLAGS () UID 5)
* 6 FETCH (FLAGS (\Deleted \Seen) UID 6)
60 OK Fetch completed.
Vous l'avez compris, ceci n'a rien effac du tout. Nous avons juste ajout le flag \Deleted au
message d'index 6. Dans les MUA graphiques, cette opration peut tre diversement
visualise :
le message semble avoir disparu, ce qui est une trs mauvaise approche, car
l'utilisateur non averti peut penser lgitimement que le message est dtruit.
le message apparait barr, mais est toujours visible. C'est probablement la meilleure
approche.
Devinez laquelle choisissent la plupart des MUA ? La premire bien sr. Non contents de a,
ils crent automatiquement un rpertoire Trash dans lequel ils copient les messages
marqus comme effacs. Moralit, l'utilisateur (non averti) croit faire du mnage, en fait, il
ajoute des copies de messages en plus dans son espace, en attendant de vider la poubelle.
Ce dtail a son importance lorsque l'on a atteint le quota fix par le fournisseur du service.
Refaire un peu de place peut s'avrer impossible si l'on n'a pas compris ce fonctionnement.
EXPUNGE ou CLOSE
EXPUNGE a pour mission de dtruire physiquement tous les messages marqus \Deleted dans
le dossier courant. CLOSE fait la mme chose en refermant le dossier courant. Exemple :
70 close
70 OK Close completed.
80 select "INBOX"
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags
permitted.
* 5 EXISTS
* 0 RECENT
* OK [UNSEEN 5] First unseen.
* OK [UIDVALIDITY 1216295789] UIDs valid
* OK [UIDNEXT 7] Predicted next UID
80 OK [READ-WRITE] Select completed.
90 uid fetch 1:* (FLAGS)
* 1 FETCH (FLAGS (\Seen) UID 1)
* 2 FETCH (FLAGS (\Seen) UID 2)
* 3 FETCH (FLAGS (\Seen) UID 3)
* 4 FETCH (FLAGS (\Seen) UID 4)
* 5 FETCH (FLAGS () UID 5)
90 OK Fetch completed.
Le message d'index 6, qui tait marqu \Deleted bien disparu de INBOX. EXPUNGE et
CLOSE sont de vrais effaceurs.
Malheureusement, les MUA communs n'emploient pas par dfaut n'i l'un ni l'autre de ces
effaceurs. Thunderbird peut le faire si on le lui demande, mais il faut passer par la
configuration avance et ce n'est pas trivial pour l'utilisateur (non averti).
Jouons un peu
Ami lecteur, pour toi de vrifier que tu as bien assimil tout ceci le temps maintenant est
venu. Pour t'aider dans cette qute, une petite preuve voici. Une suite de commandes IMAP
va suivre. A toi ce qui est fait, de comprendre et d'expliquer .
Etat initial
Notre compte se prsente comme ceci dans Thunderbird :
Il y a donc 3 messages dans INBOX.
Jeu de commandes
Nous nous connectons avec Telnet sur le serveur et envoyons les commandes suivantes :
10 login chris@maison.mrs epikoi
10 OK Logged in.
20 list "*" "*"
* LIST (\HasNoChildren) "." "Trash"
* LIST (\HasNoChildren) "." "INBOX"
20 OK List completed.
30 create Dossier_1
30 OK Create completed.
40 create Dossier_1.SousDossier_1
40 OK Create completed.
50 create INBOX.Rangement
50 OK Create completed.
60 subscribe INBOX.Rangement
60 OK Subscribe completed.
70 subscribe Dossier_1
70 OK Subscribe completed.
80 subscribe Dossier_1.SousDossier_1
80 OK Subscribe completed.
90 select INBOX
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags
permitted.
* 3 EXISTS
* 0 RECENT
* OK [UNSEEN 1] First unseen.
* OK [UIDVALIDITY 1216295789] UIDs valid
* OK [UIDNEXT 10] Predicted next UID
90 OK [READ-WRITE] Select completed.
100 rename Dossier_1 Archive
100 OK Rename completed.
110 list "*" "*"
* LIST (\HasNoChildren) "." "Trash"
* LIST (\HasChildren) "." "INBOX"
* LIST (\HasChildren) "." "Archive"
* LIST (\HasNoChildren) "." "INBOX.Rangement"
* LIST (\HasNoChildren) "." "Archive.SousDossier_1"
110 OK List completed.
120 rename Archive.SousDossier_1 Archive.2007-2008
120 OK Rename completed.
130 uid fetch 1:* (FLAGS)
* 1 FETCH (FLAGS () UID 7)
* 2 FETCH (FLAGS () UID 8)
* 3 FETCH (FLAGS () UID 9)
130 OK Fetch completed.
140 copy 1:2 Archive.2007-2008
140 OK Copy completed.
150 copy 3 INBOX.Rangement
150 OK Copy completed.
160 store 1:3 +FLAGS (\Deleted)
* 1 FETCH (FLAGS (\Deleted))
* 2 FETCH (FLAGS (\Deleted))
* 3 FETCH (FLAGS (\Deleted))
160 OK Store completed.
170 expunge
* 3 EXPUNGE
* 2 EXPUNGE
* 1 EXPUNGE
170 OK Expunge completed.
180 logout
* BYE Logging out
180 OK Logout completed.
Connection closed by foreign host.
Ami lecteur, peux-tu prvoir ce que le client va dsormais trouver dans son Thunderbird, la
prochaine ouverture ?
Etat final

Ami lecteur, avais-tu vu le pige ?
Reprenons avec Telnet :
10 login chris@maison.mrs epikoi
10 OK Logged in.
20 lsub "*" "*"
* LSUB () "." "INBOX.Rangement"
* LSUB () "." "Dossier_1"
* LSUB () "." "Dossier_1.SousDossier_1"
20 OK Lsub completed.
Ce n'est pas parce que l'on a renomm les dossiers, que les abonnements ont t mis jour. Il
faut le faire manuellement :
30 unsubscribe Dossier_1
30 OK Unsubscribe completed.
40 unsubscribe Dossier_1.SousDossier_1
40 OK Unsubscribe completed.
50 list "*" "*"
* LIST (\HasNoChildren) "." "Trash"
* LIST (\HasChildren) "." "INBOX"
* LIST (\HasChildren) "." "Archive"
* LIST (\HasNoChildren) "." "INBOX.Rangement"
* LIST (\HasNoChildren) "." "Archive.2007-2008"
50 OK List completed.
60 subscribe Archive
60 OK Subscribe completed.
70 subscribe Archive.2007-2008
70 OK Subscribe completed.
80 logout
* BYE Logging out
80 OK Logout completed.
Voil qui devrait aller mieux :
Nettement. Les dossiers sont jour et leur contenu aussi.
Puisque nous y sommes et puisque nous avons la main sur le serveur (Dovecot, en
l'occurrence)
janus:/home/virtual/mail/maison.mrs/chris/Maildir# ls -la
total 44
drwx------ 9 vmail vmail 4096 2008-07-20 19:31 .
drwx------ 3 vmail vmail 20 2008-07-17 13:56 ..
drwx------ 5 vmail vmail 56 2008-07-20 19:10 .Archive
drwx------ 5 vmail vmail 148 2008-07-20 19:35 .Archive.2007-2008
drwx------ 2 vmail vmail 6 2008-07-20 19:21 cur
-rw------- 1 vmail vmail 144 2008-07-20 19:21 dovecot.index
-rw------- 1 vmail vmail 20480 2008-07-20 19:21 dovecot.index.cache
-rw------- 1 vmail vmail 2984 2008-07-20 19:23 dovecot.index.log
-rw------- 1 vmail vmail 377 2008-07-20 19:05 dovecot-uidlist
drwx------ 5 vmail vmail 148 2008-07-20 19:36 .INBOX.Rangement
-rw------- 1 vmail vmail 138 2008-07-20 19:21 maildirsize
drwx------ 2 vmail vmail 6 2008-07-20 19:05 new
-rw------- 1 vmail vmail 42 2008-07-20 19:31 subscriptions
drwx------ 2 vmail vmail 6 2008-07-20 19:05 tmp
drwx------ 5 vmail vmail 148 2008-07-20 19:04 .Trash
Notez les analogies, mais INBOX n'y est pas ?
C'est normal. En fait, Dovecot range dans new les message qui ne sont pas encore \Seen et
dans cur les messages \Seen. INBOX est donc en ralit un faux dossier qui reprsente le
contenu de new et de cur.
Nous sommes dans une architecture de type Maildir la plus courante pour faire de l'IMAP.
Dovecot, comme Courier-imap rangent les messages peu prs de la mme manire. En
revanche, Cyrus-imap utilise une autre stratgie, mais pour le client comme pour le protocole,
ceci importe peu.
Conclusion
Tout ceci avait pour but de montrer la supriorit d'IMAP sur son concurrent POP3. Sa plus
grande complexit aussi.
IMAPS, tout comme POP3S, utilisent une connexion entirement chiffre ds le dpart, mais
les protocoles demeurent identiques. IMAP, tout comme POP3, peut implmenter la
commande STARTTLS, qui met en uvre un chiffrement, mais aprs tablissement de la
connexion. De plus, comme il y a ngociation, si le client invoque STARTTLS et que le
serveur ne sait pas y rpondre, il est possible de continuer sans chiffrement (suivant la
configuration du MUA).
IMAPS n'utilise pas le port 143, mais le port 993.
SMTP/IMAP en pratique
Avertissement
Cette suite de chapitres est avant tout destine montrer les diverses facettes d'un systme de
messagerie, de plus en plus complet. Elle n'a pas la prtention de fournir des solutions
directement applicables en production, mais plutt de prsenter des pistes de recherche pour
obtenir une solution qui rponde aux besoins.
L'tude tant progressive, les derniers chapitres, principalement Postfix, Cyrus, etc. et
Mailing lists font appel des notions vues dans les chapitres prcdents
Problmatique
Mettre en uvre un systme complet de messagerie est une aventure un peu complique.
Si l'on souhaite disposer d'un systme complet, capable d'envoyer des mails et aussi d'en
recevoir pour un ou plusieurs domaines, il faudra galement tenir compte des protocoles
POP3 et IMAP et installer ce qui va avec.
Il existe dans le monde libre de nombreuses solutions, nous en verrons quelques-unes :
Postfix pour le SMTP avec un serveur POP/IMAP comme Dovecot, pour grer un seul
domaine ;
Postfix avec le serveur POP/IMAP nomm Cyrus, pour grer plusieurs domaines ;
Qmail, avec Vpopmail et Ezmlm, galement pour grer plusieurs domaines et fournir
aussi des listes de diffusion.
Bien sr, de nombreuses autres combinaisons sont possibles, principalement si l'on doit
galement tenir compte d'une trs forte monte en charge et d'une tolrance de panne trs
faible.
A savoir d'abord
Qu'attendons-nous ?
Un serveur SMTP en production doit tre capable de faire au moins ceci :

1. depuis le rseau de son entreprise, nous devons pouvoir envoyer des messages aux
comptes de messagerie dont nous avons la gestion.
2. depuis le rseau de son entreprise, nous devons pouvoir envoyer des messages au reste
du monde.
3. le reste du monde doit pouvoir envoyer des messages aux comptes de messagerie dont
nous avons la gestion.
4. nous ne devons ventuellement servir de relais que dans certains cas bien spcifiques :
o vers des domaines qui nous l'ont expressment demand ;
o ventuellement, pour des clients qui ont un compte que nous grons, et qui
souhaitent utiliser notre SMTP comme relais. Dans un tel cas, il faut bien
entendu mettre en place une stratgie stricte de contrle des clients autoriss.
En aucun cas nous ne devons pouvoir servir de relais ouvert, c'est--dire que n'importe qui
puisse utiliser notre service SMTP pour envoyer des messages n'importe o.
Les restrictions imposes
Si techniquement il est possible de faire tout ceci, le dveloppement du spam et les
parades qui sont d'usage (plus ou moins pertinent) sur l'internet vont amener quelques
restrictions.
Blocage du port 25
Vous disposez d'un accs que votre fournisseur a brid. En effet, la solution simple, efficace
(et contraire l'thique de l'internet) que votre fournisseur d'accs a mis en place consiste
vous interdire toute connexion TCP vers le port 25, hormis vers le serveur SMTP officiel
de votre fournisseur.
Dans un tel cas, vous ne pourrez pas faire grand chose, part un serveur tampon pour l'envoi
de vos messages vers le reste du monde. Si votre fournisseur est dans ce cas et qu'il n'y a pas
moyen pour vous de faire dbloquer le port 25, abandonnez toute envie de grer vous-mme
votre messagerie ou changez de fournisseur.
Les BlackLists
Il existe sur la possibilit, nous le verrons, de crer ou d'utiliser des listes d'exclusion. Ces
listes contiennent des adresses IP ou des blocs CIDR d'adresses IP qui sont senses
reprsenter des SMTP malpropres . Certains n'hsitent pas mettre dans ces listes toutes
les adresses IP qui sont utilises par les fournisseurs d'accs pour leurs clients.
Il n'y a pas de parade. Si l'hbergeur du domaine de messagerie @truc.com utilise une
blacklist o vous tes rfrenc, vous ne pourrez envoyer par vous-mme aucun message
@truc.com. Il vous faudra alors passer par le SMTP officiel de votre fournisseur (en priant
pour que celui-ci ne soit pas aussi blacklist).
Adresse de l'metteur
Une saine prcaution (drisoire toutefois) est de contrler que l'adresse de l'metteur (valeur
de from: dans le dialogue SMTP) est @unDomaineConnuSurLe.net. Ceci est gnralement
du ressort de vos utilisateurs qui doivent disposer d'une adresse e-mail valide.
Cohrence DNS
Lors du dialogue entre votre serveur SMTP et celui du destinataire, votre serveur se prsente
par son nom (valeur helo ou ehlo dans le dialogue SMTP). Le serveur destinataire peut
effectuer plusieurs contrles :
le domaine annonc existe-t-il vraiment (contrle DNS) ?
le rdns (recherche DNS inverse) donne-t-il quelque chose de cohrent ? Autrement
dit, si votre serveur se prsente comme smtp.mondomaine.tld avec l'adresse IP
xx.yy.zz.tt, est-ce qu'une recherche rdns aboutit :
o un nom de machine dans le domaine mondomaine.tld ?
o un nom de machine gal smtp.mondomaine.tld ?
o une machine enregistre comme MX (Mail Exchanger) pour le domaine
mondomaine.tld ?
Si votre fournisseur d'accs vous permet de personnaliser votre rdns, vous pouvez rendre tout
ceci cohrent.
Sender Policy Framework
Ce trs controvers systme de contrle utilise un champ particulier dans les DNS, qui permet
d'indiquer quelles sont les htes autoriss envoyer des messages pour le domaine dont nous
avons la charge. Dans la mesure o vous pouvez crer cette entre sur vos DNS, faites-le le
moins salement possible
Les messages entrants
Nous ne devons pas laisser entrer n'importe quoi. Plusieurs cas peuvent se produire :
1. nous sommes sur un rseau local ou d'entreprise, le ou les blocs d'adresses IP utilises
sur ce rseau sont connus, nous disposons d'un ou de plusieurs domaines (au sens
DNS du terme), les htes qui disposent d'une de ces adresses peuvent priori sans
restrictions utiliser notre serveur SMTP pour envoyer des messages des utilisateurs
@nos_domaines, depuis un hte situ sur notre rseau ;
2. les mmes utilisateurs, lorsqu'ils sont sur notre rseau, doivent pouvoir utiliser notre
SMTP pour envoyer des messages, au reste du monde ;
3. le reste du monde ne doit pouvoir accder notre SMTP que pour y dposer des
messages destination de nos domaines ;
4. les utilisateurs, qui ont un compte de messagerie dans l'un de nos domaines aimeraient
pouvoir utiliser notre SMTP pour envoyer des messages au reste du monde, mme s'ils
ne sont pas connects sur notre rseau. Ceci ne sera pas forcment possible, ne serait-
ce qu' cause des restrictions que certains fournisseurs (la majorit) mettent sur le port
25 ;
5. en aucun cas le monde ne doit pouvoir utiliser notre SMTP pour relayer des
messages ailleurs dans le monde
6.Postfix deBase
7. Ici, nous allons juste installer un serveur Postfix, qui permettra essentiellement
d'envoyer des e-mails depuis notre LAN vers le reste du monde. Nous ne nous
occuperons pas trop de la rception, hormis quelques comptes locaux administratifs.
8. Dans une telle configuration, les utilisateurs qui sont susceptibles de recevoir des
messages sont tous titulaires d'un compte local, ce qui simplifie grandement la gestion
des botes aux lettres et leur accs pour la rcupration des messages. A la limite, nous
n'aurions mme pas besoin d'installer de serveur POP ou IMAP et d'ailleurs, nous ne le
ferons pas dans ce chapitre.
9. Ce qui est ncessaire
10. Pour travailler proprement, nous disposons d'un nom de domaine officiel, enregistr et
tout. Par exemple, le domaine nain-t.net . Ceci sous-entend que nous disposons
d'un DNS public qui gre cette zone.
11. Il nous faut une connexion l'internet, avec une adresse IP qui, de prfrence, ne
change jamais.
12. Il nous faut enfin une machine pour installer le tout.
Anatomie de Postfix
Anatomie de Postfix
Postfix est un systme de messagerie trs modulaire. Vous avez ci-dessous le schma
fonctionnel dont nous allons essayer d'analyser grossirement le fonctionnement. Tout ce qui
suit peut tre considr comme une traduction libre de la documentation officielle du produit.
Le site officiel de Postfix se trouve l'adresse www.postfix.org, avec un site en franais qui
reprend la quasi totalit du site officiel.

Les files d'attente de Postfix
Il y a cinq files d'attente pour les messages :
1. maildrop qui reoit les messages posts localement (depuis l'hte lui-mme).
2. incoming qui reoit aussi bien les messages posts localement que ceux qui
arrivent du rseau (lorsque par exemple nous utilisons cet hte comme serveur smtp
pour notre rseau local). Les messages qui arrivent dans cette file ont dj subi
quelques traitements que nous dtaillerons plus loin.
3. active est la file qui contient les messages en cours d'envoi.
4. deferred (diffr), contient les messages qui, pour une raison ou une autre, n'ont pu
tre envoys. Le protocole SMTP prvoit en effet de ne pas jeter systmatiquement les
messages qui n'ont pu tre envoys. Les messages classs dans deferred subiront
plusieurs tentatives d'envoi en tant rinjects dans active
5. mailbox est la file d'attente des messages destins aux utilisateurs locaux. nous
verrons plus loin son utilit exacte.
Ceux qui souhaitent une description plus dtaille du fonctionnement de Postfix pourront
avantageusement se tourner vers Prsentation de l'architecture de Postfix .
Rception d'un e-mail
Lorsqu'un
message arrive dans le systme Postfix, quelle que soit son origine, son premier arrt se fait
dans incoming . La figure ci contre montre les composants qui sont invoqus lors de
l'arrive d'un nouveau message.
Origine du message
Le Message est post localement.
Le programme Postfix sendmail (ne pas confondre avec le MTA concurrent) le dpose
dans la file maildrop d'o il est retir par le service pickup . Ce service effectue
quelques contrles sanitaires dans le but de protger le reste du systme Postfix. Dans le
but d'viter des accidents, les permissions du rpertoire contenant maildrop sont telles que
tout le monde peut y crire, mais aucun utilisateur ne peut en effacer le contenu.
Le message vient du rseau
Le serveur SMTP Postfix reoit le message et effectue quelques contrles sanitaires ,
toujours dans le but de protger le reste du systme Postfix. Le serveur SMTP peut tre
configur pour implmenter des contrles UCE (Unsollicited Commercial Email) sur la base
d'une liste noire locale o issue du rseau, de vrifications sur les DNS (domaine de
l'expditeur) o d'autres requtes sur les informations concernant l'metteur.
Traitement du message
Le message n'est pas livrable
Un e-mail est gnr automatiquement par le systme Postfix dans le but de renvoyer ce
message son expditeur. Ce sont les daemons bounce (rebond) o defer (livraison)
qui annoncent la mauvaise nouvelle.
Un e-mail est galement gnr automatiquement par le systme Postfix dans le but de
prvenir le responsable de la messagerie en cas de problme. Le systme Postfix peut tre
configur pour alerter en cas de problme de protocole SMTP, de violation de rgles de
scurit UCE etc. (Ce chemin est indiqu sur le graphique par la flche sans label).
Le message est livrable
Le message est transmis par l'agent de livraison local soit par l'intermdiaire d'une entre de la
base de donne des alias au niveau du systme, soit par le fichier .forward au niveau
de l'utilisateur. Nous reviendrons sur ces notions un peu complexes dans la configuration de
Postfix.
Le daemon cleanup implmente le dernier traitement du message. Il ajoute le champ
Form: et d'autres en-ttes dans le message, arrange les adresses de rponses dans le format
user@fully.qualified.domain et optionnellement extrait les adresses des destinataires de
l'en-tte. Le daemon cleanup insre le rsultat dans une seule file d'attente: incoming
et notifie le queue manager (qmgr sur le schma complet) de l'arrive d'un nouveau
message. Le daemon cleanup peut tre configur pour transformer les adresses sur la base
des tables de consultation canonical et virtual . Nous verrons galement cel dans la
configuration de Postfix.
Sur la requte du daemon cleanup , le daemon trivial-rewrite r crit les adresses dans
le format standard user@fully.qualified.domain .
Livraison du message
Chaque fois
qu'un message est dpos dans la file d'attente incoming , l'tape suivante consiste le
livrer. La figure ci contre montre les principaux composants de la fonction de livraison de
Postfix.
Le gestionnaire de file d'attente est le cur du systme de messagerie Postfix. Il contacte les
agents de livraison local , smtp ou pipe (les anglophones ont un langage parfois
quivoque. Faire un pipe sur une queue ) et envoie une demande de livraison avec le
chemin d'accs au fichier qui contient la file d'attente, l'adresse de l'expditeur, le nom de
l'hte qui il faut livrer si la destination n'est pas locale, et une o plusieurs adresses de
destinataires.
Le gestionnaire maintient une file d'attente deferred spare pour chaque message qui n'a
pas pu tre livr, de manire ce qu'un compte-rendu de livraison trop volumineux ne vienne
pas ralentir l'accs des autres files.
Le gestionnaire maintient une petite file d'attente active avec juste quelques messages
prts pour la livraison. active agit comme une petite fentre sur les files d'attentes
incoming ou deferred . Cette mthode vite au gestionnaire de faire des dbordements de
mmoire si le serveur est fortement charg.
Optionnellement, le gestionnaire fait rebondir le message pour les destinataires qui sont
rfrencs dans la table relocated . Cette table contient des informations sur les utilisateurs
qui ont chang d'adresse.
Sur la demande du gestionnaire de file d'attente, le daemon trivial-rewrite rsout les
destinations. Par dfaut, il fait uniquement la distinction entre les destinations locales o
distantes. Des informations de routage additionnelles peuvent tre spcifies dans la table
transport .
Sur la demande du gestionnaire de file d'attente, les daemons bounce et defer gnrent
des rapports de non-livraison lorsqu'un message ne peut tre achemin, soit cause d'une
erreur non rcuprable, soit parce que le destinataire n'est pas joignable pendant une dure
trop longue.
L'agent local de la livraison sait grer les botes aux lettres de type UNIX, les bases de
donnes du type alias de sendmail (le MTA concurrent), les fichiers de type .forward de
l'utilisateur. De multiples agents locaux de livraison peuvent tre excuts en parallle, mais
la livraison en parallle au mme utilisateur est habituellement limite.
En mme temps que l'agent de livraison sendmail , l'agent de livraison local
implmente l'interface utilisateur familire de sendmail (le MTA concurrent).
L'agent de la livraison locale a des possibilits pour utiliser d'autres moyens de livraison
locale : vous pouvez le configurer pour livrer aux fichiers de bote aux lettres dans les
rpertoires locaux d'utilisateur, et vous pouvez mme le configurer pour dlguer la livraison
de bote aux lettres une commande externe telle que le programme populaire procmail .
Le client smtp recherche une liste d'changeurs de courrier pour l'hte de destination, trie la
liste par prfrence, et essaye chaque adresse alternativement jusqu' ce qu'il trouve un
serveur qui rpond. Sur un systme postfix charg, vous verrez plusieurs processus de client
de smtp fonctionner en parallle.
Le pipe est l'interface de sortie vers d'autres transports de courrier (Le programme
sendmail est l'interface d'entre). Le systme de courrier Postfix peut par exemple livrer du
courrier par l'intermdiaire du protocole UUCP. Ce protocole vnrable est encore largement
rpandu. Par dfaut, Postfix comprend des adresses de type bang path (Rassurez-vous, ici
on parle de SMTP, pas de UUCP qui n'est plus de mise sur Internet, mais seulement dans des
rseaux privs).
Conclusion
Si vous avez eu le courage de lire cette page jusqu'ici, vous tes un brave. Si en plus, vous
avez tout compris, alors vous tes remarquable!
Pour rsumer la situation, disons que Postfix sait faire les choses suivantes:
Recevoir du courrier depuis le rseau, (cette fonction nous intresse),
recevoir du courrier depuis l'hte local, (pourquoi ne pas s'en servir?),
acheminer du courrier dont la destination est ailleurs, (c'est exactement ce que nous
cherchons faire),
acheminer du courrier localement, (pourquoi pas?),
dans tout ces processus, Postfix est capable de modifier quelque peu les en-ttes de
messages. Ca n'a pas beaucoup d'intrt pour nous, sauf dans le cas o nous utiliserons
l'hte de Postfix pour expdier du courrier.
Il y a tout de mme un dtail qu'il ne faut pas laisser dans l'ombre: Postfix n'est pas un serveur
POP ni IMAP. Mme s'il sait livrer du courrier local, il ne sait pas grer les botes aux lettres
pour des clients distants. Si l'on veut raliser cette opration, il faudra ajouter un autre
logiciel, ce que nous n'allons d'ailleurs pas nous priver de faire
Installation et essais
Nous faisons ici une installation de base, qui sera avant tout destine pouvoir envoyer nos e-
mails vers le monde et accessoirement grer quelques boites-aux-lettres de service, juste pour
voir comment Postfix gre les messages entrants. Nous n'attendons pas ici de messages
provenant de l'internet.
Plate-forme de tests
Nous avons donc une machine nomme cyrus.nain-t.net (vous comprendrez beaucoup plus
loin pourquoi elle se nomme comme ceci). Elle est anime par une Debian stable (Etch
l'heure o ces lignes sont crites).
Le domaine nain-t.net est un vrai domaine, ne l'oublions pas, ceci aura son importance
dans la suite.
aptitude install postfix
Lors du post-install, vous pouvez laisser Postfix non configur , mais le choix de Site
Internet vous permettra de disposer d'une base de configuration.
Configuration deBase
Il y a deux fichiers importants dans la configuration de postfix et quelques autres dont
l'importance varie en fonction de ce que l'on souhaite faire.
master.cf
Ce fichier contient des informations diverses sur le comportement de Postfix et sa faon de
faire rsider les diffrents daemons en mmoire. Nous ne nous en occuperons pas pour
l'instant.
main.cf
Ce fichier contient la configuration principale de Postfix. Dans le cadre de ce que nous
voulons faire ici, c'est le seul qu'il nous faudra manipuler dans un premier temps.
Voici ce que nous mettons dans /etc/postfix/main.cf ( peine modifi par rapport ce
que l'on obtient en choisissant le mode site internet ) :
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
myhostname = cyrus.nain-t.net
myorigin = $myhostname
mydestination = $myhostname, localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
relayhost =
mynetworks = 127.0.0.0/8 192.168.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
Ce qui est surlign en bleu concerne TLS, ne nous en proccupons pas pour l'instant, nous
n'aurons pas l'occasion de nous en servir ici.
Pour ce qui est surlign en jaune :
myhostname reprsente le nom pleinement qualifi du serveur (le nom qui sera utilis
dans le protocole SMTP avec la commande HELO ou EHLO et aussi pour la
construction de l'en-tte des messages passant par le MTA) ;
la valeur de myorigin est ici identique celle de myhostname ;
mydestination indique pour quel(s) domaine(s) notre Postfix est le destinataire final.
Ici, les adresses considres comme locales seront de la forme @cyrus.nain-t.net
ou de la forme @localhost ;
mynetworks indique quelles sont les adresses IP qui sont autorises se connecter ce
MTA. Ici, l'adresse locale et le rseau local (192.168.0.0/24 dans l'exemple).
Pour ce qui est surlign en blanc, le fichier /etc/aliases a son importance, que nous verrons
plus tard.
Envoi local
Pour envoyer un message localement, il faut un utilisateur local, qui dispose d'un compte
Unix. Nous en crons un qui s'appellera prof
adduser prof
Je vous passe les dtails de la cration de ce compte. Ensuite, il nous faut un outil minimal
pour poster un message. mail fait partie du paquet mailx. Donc, si ce n'est dj fait :
aptitude install mailx
Enfin, root va envoyer un message prof :
# mail prof
Subject: test Postfix en local
Bonjour Prof
.
Cc:
Dans le fichier de logs /var/log/mail.info (Sur Debian), nous lisons :
Jun 1 18:09:01 cyrus postfix/pickup[19600]: AF6D367D9E: uid=0 from=<root>
Jun 1 18:09:01 cyrus postfix/cleanup[19681]: AF6D367D9E: message-
id=<20080601160901.AF6D367D9E@cyrus.nain-t.net>
Jun 1 18:09:01 cyrus postfix/qmgr[19601]: AF6D367D9E:
from=<root@cyrus.nain-t.net>, size=327, nrcpt=1 (queue active)
Jun 1 18:09:01 cyrus postfix/local[19683]: AF6D367D9E:
to=<prof@cyrus.nain-t.net>, orig_to=<prof>, relay=local, delay=0.07,
delays=0.04/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
Jun 1 18:09:01 cyrus postfix/qmgr[19601]: AF6D367D9E: removed
Les logs disent que tout s'est bien pass. Notez que lors de la manipulation, nous n'avons pas
indiqu de domaine de destination (pas de @quelquechose). Postfix en a dduit qu'il s'agissait
d'utilisateurs locaux et a donc complt avec le contenu de $myorigin.
Mais o est-ce pass ce message ? Dans /var/mail/ (sur Debian) :
# ls -l /var/mail
total 4
-rw------- 1 prof mail 465 2008-06-01 18:09 prof
Voyons :
# cat /var/mail/prof
From root@cyrus.nain-t.net Sun Jun 1 18:09:01 2008
Return-Path: <root@cyrus.nain-t.net>
X-Original-To: prof
Delivered-To: prof@cyrus.nain-t.net
Received: by cyrus.nain-t.net (Postfix, from userid 0)
id AF6D367D9E; Sun, 1 Jun 2008 18:09:01 +0200 (CEST)
To: prof@cyrus.nain-t.net
Subject: test Postfix en local
Message-Id: <20080601160901.AF6D367D9E@cyrus.nain-t.net>
Date: Sun, 1 Jun 2008 18:09:01 +0200 (CEST)
From: root@cyrus.nain-t.net (root)

Bonjour Prof
C'est bien lui. Le travail de Postfix pour la livraison locale s'arrte l.
Comme nous sommes curieux, que se passerait-il si root envoyait un message un compte
local qui n'existe pas ?
# mail machin
Subject: test foireux
il n'y a personne ici
.
Cc:
Et voyons les logs :
Jun 1 18:30:54 cyrus postfix/pickup[19719]: 74C0167D9E: uid=0 from=<root>
Jun 1 18:30:54 cyrus postfix/cleanup[19723]: 74C0167D9E: message-
id=<20080601163054.74C0167D9E@cyrus.nain-t.net>
Jun 1 18:30:54 cyrus postfix/qmgr[19717]: 74C0167D9E:
from=<root@cyrus.nain-t.net>, size=329, nrcpt=1 (queue active)
Jun 1 18:30:54 cyrus postfix/local[19725]: 74C0167D9E:
to=<machin@cyrus.nain-t.net>, orig_to=<machin>, relay=local,
delay=0.07,delays=0.04/0.01/0/0.01, dsn=5.1.1, status=bounced (unknown
user: "machin")
Jun 1 18:30:54 cyrus postfix/cleanup[19723]: 80E9767D9F: message-
id=<20080601163054.80E9767D9F@cyrus.nain-t.net>
Jun 1 18:30:54 cyrus postfix/qmgr[19717]: 80E9767D9F: from=<>, size=2093,
nrcpt=1 (queue active)
Jun 1 18:30:54 cyrus postfix/bounce[19726]: 74C0167D9E: sender non-
delivery notification: 80E9767D9F
Jun 1 18:30:54 cyrus postfix/qmgr[19717]: 74C0167D9E: removed
Jun 1 18:30:54 cyrus postfix/local[19725]: 80E9767D9F:
to=<root@cyrus.nain-t.net>, relay=local, delay=0.02, delays=0.01/0/0/0,
dsn=2.0.0, status=sent (delivered to mailbox)
Jun 1 18:30:54 cyrus postfix/qmgr[19717]: 80E9767D9F: removed
C'est du travail srieux. Comme le destinataire local n'a pas pu tre trouv par Postfix (par le
service local , en fait), Postfix (le service bounce , en ralit) a envoy une notification
l'expditeur (root). Nous devons nous attendre trouver un fichier /var/mail/root :
# cat /var/mail/root
From MAILER-DAEMON Sun Jun 1 18:30:54 2008
Return-Path: <>
X-Original-To: root@cyrus.nain-t.net
Delivered-To: root@cyrus.nain-t.net
Received: by cyrus.nain-t.net (Postfix)
id 80E9767D9F; Sun, 1 Jun 2008 18:30:54 +0200 (CEST)
Date: Sun, 1 Jun 2008 18:30:54 +0200 (CEST)
From: MAILER-DAEMON@cyrus.nain-t.net (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
To: root@cyrus.nain-t.net
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="74C0167D9E.1212337854/cyrus.nain-t.net"
Message-Id: <20080601163054.80E9767D9F@cyrus.nain-t.net>

This is a MIME-encapsulated message.

--74C0167D9E.1212337854/cyrus.nain-t.net
Content-Description: Notification
Content-Type: text/plain; charset=us-ascii

This is the mail system at host cyrus.nain-t.net.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

The mail system

<machin@cyrus.nain-t.net> (expanded from <machin>): unknown user: "machin"

--74C0167D9E.1212337854/cyrus.nain-t.net
Content-Description: Delivery report
Content-Type: message/delivery-status

Reporting-MTA: dns; cyrus.nain-t.net
X-Postfix-Queue-ID: 74C0167D9E
X-Postfix-Sender: rfc822; root@cyrus.nain-t.net
Arrival-Date: Sun, 1 Jun 2008 18:30:54 +0200 (CEST)

Final-Recipient: rfc822; machin@cyrus.nain-t.net
Original-Recipient: rfc822; machin
Action: failed
Status: 5.1.1
Diagnostic-Code: X-Postfix; unknown user: "machin"

--74C0167D9E.1212337854/cyrus.nain-t.net
Content-Description: Undelivered Message
Content-Type: message/rfc822

Received: by cyrus.nain-t.net (Postfix, from userid 0)
id 74C0167D9E; Sun, 1 Jun 2008 18:30:54 +0200 (CEST)
To: machin@cyrus.nain-t.net
Subject: test foireux
Message-Id: <20080601163054.74C0167D9E@cyrus.nain-t.net>
Date: Sun, 1 Jun 2008 18:30:54 +0200 (CEST)
From: root@cyrus.nain-t.net (root)

il n'y a personne ici

--74C0167D9E.1212337854/cyrus.nain-t.net--
Tout ceci appelle deux remarques importantes :
1. Le message de notification signale qu'il y a un postmaster@cyrus.nain-t.net . Ce
compte n'existe pas et il n'est pas forcment bon qu'il existe rellement. Cependant, il
faudrait pouvoir traiter les messages pour postmaster , en les envoyant quelqu'un
d'autre. root par exemple ?
2. root reoit des messages, c'est bien et c'est mal. Root a d'autres choses faire que
d'ouvrir son compte pour lire une messagerie. Nous ne sommes pas ici sous certains
systmes peu scuriss et l'identit root , nous le savons, ne doit tre utilise que
lorsque c'est absolument ncessaire, certainement pas pour consulter des messages.
Il serait bon que les messages adresss root soient redirigs sur un compte sans
privilges particuliers. Comment raliser ceci ?
Les alias
Ici entre en scne le fichier /etc/alias. Ce fichier va expliquer Postfix que certains
destinataires locaux (et seulement locaux) peuvent tre redirigs sur d'autres destinataires
locaux (ou distants).
Nous allons faire ceci :
les messages pour postmaster seront transmis root ;
les messages pour root seront transmis prof (puisque prof qui n'a pas de
privilges particuliers.
Ainsi un message envoy root sera dirig sur prof et un message pour postmaster sera dirig
sur root, donc sur prof.
Nous crons (ou modifions) le fichier /etc/aliases comme ceci :
# cat aliases
postmaster: root
root: prof
C'est bien, mais Postfix n'utilisera pas ce fichier. Il lui faudra un fichier format comme
indiqu dans main.cf :
alias_maps = hash:/etc/aliases
L'utilitaire postalias
1)
, va le faire pour nous :
# postalias hash:/etc/aliases
Ce qui a cr un fichier /etc/aliases.db, qui n'est pas un simple fichier texte.
Voyons maintenant en envoyant un message postmaster :
# mail postmaster
Subject: essai d'aliases
postmaster -> prof
.
Cc:
Le message est bien envoy postmaster et dans les logs :
Jun 1 19:33:28 cyrus postfix/pickup[19719]: B43F467D9E: uid=0 from=<root>
Jun 1 19:33:28 cyrus postfix/cleanup[19777]: B43F467D9E: message-
id=<20080601173328.B43F467D9E@cyrus.nain-t.net>
Jun 1 19:33:28 cyrus postfix/qmgr[19717]: B43F467D9E:
from=<root@cyrus.nain-t.net>, size=333, nrcpt=1 (queue active)
Jun 1 19:33:28 cyrus postfix/local[19779]: B43F467D9E:
to=<prof@cyrus.nain-t.net>, orig_to=<postmaster>, relay=local, delay=0.06,
delays=0.04/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
Jun 1 19:33:28 cyrus postfix/qmgr[19717]: B43F467D9E: removed
Je vous laisse vrifier dans /var/mail/prof.
Voil une bonne chose de faite.
Envoi ailleurs
Notre Postfix saurait-il envoyer des messages des destinataires dans d'autres domaines ?
Bien entendu, c'est un vrai serveur SMTP, il sait le faire.
Cependant, lutte anti-spam obligeant, nous allons rencontrer quelques difficults.
Heureusement, nous avons un vrai domaine et la possibilit chez notre fournisseur d'accs
de personnaliser le reverse dns
Exemple avant personnalisation :
~$ host cyrus.nain-t.net
lair.nain-t.net has address 82.229.45.192

~$ host 82.229.41.192
192.45.229.82.in-addr.arpa domain name pointer smg13-1-82-229-45-
192.fbx.proxad.net.
C'est pas trs bon. Il vaudrait bien mieux avoir :
~$ host 82.229.41.132
192.45.229.82.in-addr.arpa domain name pointer cyrus.nain-t.net.
Et nous allons voir pourquoi.
# mail irp@eme-enseignement.fr
Subject: Test distant
Avec de la chance...
on va passer.
.
Cc:
Et dans les logs :
Jun 1 20:00:15 cyrus postfix/pickup[19719]: C736067D9E: uid=0 from=<root>
Jun 1 20:00:15 cyrus postfix/cleanup[19783]: C736067D9E: message-
id=<20080601180015.C736067D9E@cyrus.nain-t.net>
Jun 1 20:00:15 cyrus postfix/qmgr[19717]: C736067D9E:
from=<root@cyrus.nain-t.net>, size=343, nrcpt=1 (queue active)
Jun 1 20:02:46 cyrus postfix/smtp[19791]: C736067D9E: to=<irp@eme-
enseignement.fr>, relay=mx3.ovh.net[213.186.33.73]:25, delay=150,
delays=0.01/0.01/60/90, dsn=2.0.0, status=sent (250 ok 1212343362 qp 10101)
Jun 1 20:02:46 cyrus postfix/qmgr[19717]: C736067D9E: removed
C'est pass, mais au bout de 2 minutes 30
Comme wireshark tait justement l, nous allons savoir pourquoi :
No. Time Source Destination Protocol
Info
1 0.000000 192.168.0.15 213.186.33.73 TCP
40953 > smtp [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=1433613 TSER=0 WS=5
2 0.056990 213.186.33.73 192.168.0.15 TCP
smtp > 40953 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460 TSV=48788396
TSER=1433613 WS=9
3 0.057057 192.168.0.15 213.186.33.73 TCP
40953 > smtp [ACK] Seq=1 Ack=1 Win=5856 Len=0 TSV=1433627 TSER=48788396
4 60.158023 213.186.33.73 192.168.0.15 SMTP
Response: 220 mx1.ovh.net mx3.ovh.net mx0.ovh.net. You connect to
mail14.ha.ovh.net ESMTP
5 60.158074 192.168.0.15 213.186.33.73 TCP
40953 > smtp [ACK] Seq=1 Ack=82 Win=5856 Len=0 TSV=1448653 TSER=48803421
6 60.158336 192.168.0.15 213.186.33.73 SMTP
Command: EHLO cyrus.nain-t.net
7 60.216044 213.186.33.73 192.168.0.15 TCP
smtp > 40953 [ACK] Seq=82 Ack=27 Win=6144 Len=0 TSV=48803436 TSER=1448653
8 60.216096 213.186.33.73 192.168.0.15 SMTP
Response: 250-mx1.ovh.net mx3.ovh.net mx0.ovh.net. You connect to
mail14.ha.ovh.net
9 60.216655 192.168.0.15 213.186.33.73 SMTP
Command: MAIL FROM:<root@cyrus.nain-t.net> SIZE=580
10 60.310846 213.186.33.73 192.168.0.15 TCP
smtp > 40953 [ACK] Seq=268 Ack=115 Win=6144 Len=0 TSV=48803460 TSER=1448667
11 150.278169 213.186.33.73 192.168.0.15 SMTP
Response: 250 ok. I do not like your reverse.
12 150.278436 192.168.0.15 213.186.33.73 SMTP
Command: Received: from [127.0.0.1] (localhost.nain-t.net [127.0.0.1])
13 150.341513 213.186.33.73 192.168.0.15 TCP
smtp > 40953 [ACK] Seq=327 Ack=704 Win=7168 Len=0 TSV=48825967 TSER=1471183
14 150.357314 213.186.33.73 192.168.0.15 SMTP
Response: 250 ok 1212331928 qp 21627
15 150.357489 213.186.33.73 192.168.0.15 SMTP
Response: 221 mx1.ovh.net mx3.ovh.net mx0.ovh.net. You connect to
mail14.ha.ovh.net
16 150.357929 192.168.0.15 213.186.33.73 TCP
40953 > smtp [RST, ACK] Seq=704 Ack=431 Win=6912 Len=0 TSV=1471203
TSER=48825971
Aprs tablissement de la connexion TCP (trames 1 3) qui se passe normalement, nous
voyons que :
1. Entre les trames 3 et 4, nous avons 60 secondes d'attente
2. Entre les trames 10 et 11, nous avons 90 secondes d'attente
3. Le message de la trame 11 I do not like your reverse n'est pas trs poli, mais
explicite
Clairement, le MX d'OVH met quelques doutes sur la lgitimit de notre MTA et nous fait
perdre du temps volontairement. Le but poursuivi tant le suivant :
Le jeu d'un spammer , c'est d'envoyer un maximum de messages en un minimum de temps.
Si chaque message doit mettre 2 minutes 30 passer, ce n'est pas intressant, le spammer
laisse tomber.
Nous ne sommes pas des spammers et nous souhaitons ne pas trop perdre de temps dans
l'envoi de nos messages. Aussi allons-nous faire ce qu'il faut pour gagner la confiance du MX
OVH. Puisque notre nom de domaine existe et que notre fournisseur d'accs nous permet de
personnaliser le rdns , arrangeons nous pour que la recherche inverse sur notre adresse IP
renvoie non pas smg13-1-82-229-45-192.fbx.proxad.net, mais cyrus.nain-t.net.
Nous en profitons pour mettre proprement jour les informations dns. nous devons avoir :
1. un enregistrement A qui indique l'adresse IP (publique, bien sr) de notre serveur ;
2. un enregistrement MX qui indique le nom de notre MTA. Nous lui mettons la priorit
minimale, pour la suite des oprations. Pour l'instant, nous ne grons pas de boites-
aux-lettres @nain-t.net hormis quelques comptes administratifs, donc nous ne
devrions rien recevoir de l'internet ( part du spam, ventuellement) ;
Une fois le rdsn mis jour:
Jun 2 09:20:06 cyrus postfix/pickup[3926]: A91E2EEA7: uid=0 from=<root>
Jun 2 09:20:06 cyrus postfix/cleanup[3932]: A91E2EEA7: message-
id=<20080602072006.A91E2EEA7@cyrus.nain-t.net>
Jun 2 09:20:06 cyrus postfix/qmgr[3924]: A91E2EEA7: from=<root@cyrus.nain-
t.net>, size=319, nrcpt=1 (queue active)
Jun 2 09:20:07 cyrus postfix/smtp[3934]: A91E2EEA7: to=<irp@eme-
enseignement.fr>, relay=mx3.ovh.net[213.186.33.73]:25, delay=0.9,
delays=0.21/0.1/0.24/0.35, dsn=2.0.0, status=sent (250 ok 1212391203 qp
8008)
Jun 2 09:20:07 cyrus postfix/qmgr[3924]: A91E2EEA7: removed
C'est bien mieux.
1)
Nous aurions pu aussi utiliser la commande newaliases sans arguments, la condition que
le fichier d'aliases soit indiqu dans la configuration de Postfix avec le paramtre
alias_database, ce qui est notre cas prsent
Bilan
Envoi de messages
Nous savons envoyer des messages vers le reste du monde, si le reste du monde veut bien
accepter notre serveur. Malgr toutes nos prcautions, il peut se faire que notre serveur soit
rejet dans certains domaines destinataires. Dans un tel cas, il faudra faire relayer les
messages ce domaine par le serveur SMTP de notre fournisseur d'accs. Ceci peut se raliser
en utilisant le paramtre transport_maps. Plus radical, nous pouvont tout faire relayer par le
MTA de notre fournisseur d'accs, en l'indiquant avec le paramtre relayhost.
Nous ne grons pas de boites aux lettres dans notre domaine, hormis le compte administratif
qui va collecter les messages mis par les divers services tournant sur notre hte. Du fait de
notre liste d'alias /etc/aliases, tous ces messages doivent se retrouver dans la mme boite.
Il nous faudra crer des boites aux lettres et installer un moyen d'y accder distance.
Nous verrons tout ceci dans la prochaine tape.
Rception des messages
Nous avons vu ce ces messages sont stocks au format mailbox (tous les messages la
suite, dans un seul fichier). Ce n'est pas terrible, de nos jours o le nombre d'entres dans les
catalogues des systmes de fichiers n'est plus trop un problme. Il vaudrait mieux exploiter le
format Maildir, o chaque message est stock dans un fichier diffrent.
Nous n'avons pas install de serveur POP ni IMAP, ce qui fait que le compte administratif
n'est consultable que localement. Il nous faudra prvoir quelque chose de plus souple.
Les botes-aux-lettres ncessitent l'existence d'un compte Unix correspondant. Pas bien
pratique et mme dangereux, si dans l'avenir nous devons crer de nombreuses botes. a
deviendra mme impossible si nous devons grer plusieurs domaines de messagerie sur le
mme serveur. Ce serait pas mal que l'on puisse crer des botes et les stocker sur la machine
sans pour autant devoir crer un compte Unix. Pour le faire, il faudra que Postfix puisse, d'une
manire ou d'une autre avoir conscience de l'existence de ces botes, il faudra aussi que nos
futurs serveurs POP ou IMAP aient un moyen d'identifier ces utilisateurs pour leur donner
l'accs leur bote.
Etape suivante
Nous allons passer au format Maildir , plus sympatique,et installer un serveur POP/IMAP.
Nous avons le choix :
Dovecot est un excellent serveur, plein de possibilits bien qu'encore jeune ;
la suite Courier propose tout ce qu'il faut pour faire un serveur POP/IMAP de qualit
;
Cyrus est un peu usine gaz , mais propose normment de fonctionnalits. Nous
garderons celui-ci pour la fin.
Dans l'tape suivante, Dovecot fera parfaitement l'affaire.
Question philosophique
Dans cet exemple trs simple d'utilisation de Postfix, 13 lignes suffisent configurer le MTA,
si l'on omet les quelques lignes concernant TLS que nous avons laisses dans la configuration,
mais sans les utiliser.
Les tapes suivantes vont nous montrer que Postfix est bien plus configurable et propose bien
plus de possibilits, mais au prix d'un fichier de configuration qui va progressivement
s'allonger et se compliquer.
Le secret de l'apparente simplicit de cet exemple rside dans les paramtres par dfaut de
Postfix. Une trs grande quantit de paramtres est dfinie notre place de faon implicite
(invisible dans le fichier de configuration) d'o l'apparente grande simplicit de l'exemple.
L'inconvnient d'une telle approche est que l'on peut acqurir le sentiment que la
configuration d'un MTA est facile, ce qui n'est pas du tout le cas. Nous mettons ici une
confiance aveugle dans des choix de paramtrage faits notre place par l'quipe du projet
Postfix. Nous pouvons nous le permettre, ce choix tant tout fait judicieux, mais mieux vaut
le savoir. Si nous nous arrtons ici, nous devons tre conscients que nous ne savons encore
pratiquement rien de Postfix.
Postfix et Dovecot
Notre postfix deBase remplit sa mission d'envoi de messages dans le monde, ne reoit pas
encore de messages venant du monde, mais il est tout de mme le destinataire des messages
administratifs (ceux qu'envoient les divers services qui tournent sur notre machine).
Pour l'instant, il les stocke au format mailbox (Tous les messages dans un seul fichier).
C'est lourd grer, lorsque l'on efface un message on ne fait rien de bien fonctionnel, le
fichier garde sa taille. Il faut alors compresser le fichier pour qu'il perde du poids, tout ceci
n'est pas trs pratique.
De plus nous allons employer surtout IMAP, qui aime le format Maildir .
A l'issue de cette installation, nous disposerons d'un systme que l'on peut dposer dans un
placard (ventil, tout de mme), qui saura envoyer nos messages, et sur lequel la boite aux
lettres administrative pourra tre consulte et gre distance. Il sera mme possible de crer
quelques comptes pour des utilisateurs, mais avec l'ennui que ces derniers devront possder
un compte Unix. Les risques seront ventuellement minimiss en n'attribuant pas de shell
ces comptes.
Nous pourrons alors commencer envisager de recevoir des messages pour ces comptes
depuis le monde.
Bien entendu, du moment que l'on attend des messages qui viennent de l'internet, il faudra
envisager des mesures de scurit, de lutte anti-spam, anti-virus etc.
Enfin, soyons fous, pourquoi ne pas envisager de permettre notre systme de relayer les
messages depuis l'internet vers l'internet, mais condition bien sr que l'utilisateur se soit
d'abord authentifi (pas de relais ouvert, tout de mme) ?
Configuration de Postfix
Passer Maildir
Premire chose faire, passer au format Maildir . C'est extrmement simple, il suffit
d'ajouter une ligne notre /etc/postfix/main.cf :
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
myhostname = cyrus.nain-t.net
myorigin = $myhostname
mydestination = $myhostname, localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
relayhost =
mynetworks = 127.0.0.0/8 192.168.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
home_mailbox = Maildir/
Essayons :
mail prof
Subject: Test Maildir
Nous passons a Maildir
.
Cc:
Dans les logs :
Jun 3 14:22:58 cyrus postfix/pickup[20275]: 26D4D67D9E: uid=0 from=<root>
Jun 3 14:22:58 cyrus postfix/cleanup[20287]: 26D4D67D9E: message-
id=<20080603122258.26D4D67D9E@cyrus.nain-t.net>
Jun 3 14:22:58 cyrus postfix/qmgr[20273]: 26D4D67D9E:
from=<root@cyrus.nain-t.net>, size=329, nrcpt=1 (queue active)
Jun 3 14:22:58 cyrus postfix/local[20289]: 26D4D67D9E:
to=<prof@cyrus.nain-t.net>, orig_to=<prof>, relay=local, delay=0.05,
delays=0.03/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)
Jun 3 14:22:58 cyrus postfix/qmgr[20273]: 26D4D67D9E: removed
Tout s'est bien pass. Mais o est all notre message ? Est-il toujours dans /var/mail/ ? Non.
Tout se passe dsormais dans le rpertoire de l'utilisateur :
# su prof
prof@cyrus:~/Maildir/new$ cd ~

prof@cyrus:~$ ls
Maildir

prof@cyrus:~$ cd Maildir/
prof@cyrus:~/Maildir$ ls
cur new tmp

prof@cyrus:~/Maildir$ cd new/
prof@cyrus:~/Maildir/new$ ls
1212495778.V306I7b467M188615.cyrus

prof@cyrus:~/Maildir/new$ cat 1212495778.V306I7b467M188615.cyrus
Return-Path: <root@cyrus.nain-t.net>
X-Original-To: prof
Delivered-To: prof@cyrus.nain-t.net
Received: by cyrus.nain-t.net (Postfix, from userid 0)
id 26D4D67D9E; Tue, 3 Jun 2008 14:22:58 +0200 (CEST)
To: prof@cyrus.nain-t.net
Subject: Test Maildir
Message-Id: <20080603122258.26D4D67D9E@cyrus.nain-t.net>
Date: Tue, 3 Jun 2008 14:22:58 +0200 (CEST)
From: root@cyrus.nain-t.net (root)

Nous passons a Maildir
prof@cyrus:~/Maildir/new$
Dans le home de l'utilisateur, Postfix a cr un rpertoire Maildir. Dedans, il y a 3
rpertoires : cur, new et tmp. C'est dans new que Postfix range les messages entrants, un
message par fichier. /var/mail/prof n'a plus de service.
Reste maintenant installer Dovecot, pour permettre d'exploiter distance le contenu de
~/Maildir, par l'entremise d'IMAP et ventuellement POP3.
Installation de Dovecot
Dovecot est fourni dans toutes les bonnes distributions GNU/Linux (et Debian en est une).
# aptitude search dovecot
p dovecot-common - secure mail server that supports mbox
and maildir mailboxes
p dovecot-imapd - secure IMAP server that supports mbox
and maildir mailboxes
p dovecot-pop3d - secure POP3 server that supports mbox
and maildir mailboxes
Dovecot est donc fourni sous la forme de trois paquets. Nous sommes ici pour tre curieux,
donc nous allons essayer aussi bien le POP3 que l'IMAP, (cependant, vous essayerez tout seul
les possibilits de POP3 si le cur vous en dit) :
# aptitude install dovecot-common dovecot-imapd dovecot-pop3d
Lecture des listes de paquets... Fait
Construction de l'arbre des dpendances... Fait
Lecture de l'information d'tat tendu
Initialisation de l'tat des paquets... Fait
Lecture des descriptions de tches... Fait
Construction de la base de donnes des tiquettes... Fait
Les NOUVEAUX paquets suivants vont tre automatiquement installs :
dovecot-common libmysqlclient15off libpq4 libsqlite3-0 mysql-common
Les NOUVEAUX paquets suivants vont tre installs :
dovecot-common dovecot-imapd dovecot-pop3d libmysqlclient15off libpq4
libsqlite3-0 mysql-common
0 paquets mis jour, 6 nouvellement installs, 0 enlever et 0 non mis
jour.
Il est ncessaire de tlcharger 3999ko d'archives. Aprs dpaquetage,
8377ko seront utiliss.
Voulez-vous continuer ? [Y/n/?]
...
Paramtrage de dovecot-common (1.0.rc15-2etch4) ...
adduser : Attention : ce rpertoire personnel n'appartient pas
l'utilisateur que vous tes en train de crer.
Ajout de l'utilisateur dovecot au groupe mail ...
Termin.
Creating generic self-signed certificate: /etc/ssl/certs/dovecot.pem
(replace with hand-crafted or authorized one if needed).

Paramtrage de dovecot-imapd (1.0.rc15-2etch4) ...
Bon. Pourquoi des choses qui parlent de mysql, de sqlite et de papier hyginique ?
Alors D'abord, libpq n'a rien voir avec le rouleau de papier, c'est une librairie cliente de
PostgreSQL, l'autre base de donnes populaire dans le monde GNU. Donc, clairement,
Dovecot sait utiliser des bases de donnes SQL (Postfix aussi d'ailleurs). Ici, nous n'en aurons
pas besoin, mais l'usage d'une base de donnes est bien pratique lorsque nous avons plusieurs
domaines grer ainsi qu'un grand nombre d'utilisateurs, qui n'ont pas de compte Unix
associ. Il s'agit de la gestion de domaines virtuels que nous aborderons dans le chapitre
suivant.
Configuration de Dovecot
Contenu de dovecot-common
C'est dans ce paquets que se trouve la structure de configuration :
# dpkg -L dovecot-common
/.
/etc
/etc/ssl
/etc/ssl/certs
/etc/ssl/private
/etc/dovecot
/etc/dovecot/dovecot.conf
/etc/dovecot/dovecot-ldap.conf
/etc/dovecot/dovecot-sql.conf
/etc/pam.d
/etc/pam.d/dovecot
/etc/init.d
/etc/init.d/dovecot
/usr
/usr/sbin
/usr/sbin/dovecot
/usr/sbin/dovecotpw
/usr/share
...
/usr/share/doc
...
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/maildirmake.dovecot.1.gz
/usr/lib
...
/usr/bin
/usr/bin/maildirmake.dovecot
/var
...
Non seulement nous avons sql, mais il semble bien que ldap soit aussi utilisable
A vue de nez, c'est /etc/dovecot/dovecot.conf qui va nous tre le plus utile pour ce que
nous avons faire. Ce fichier est assez particulier :
il sert aussi de documentation ;
il indique assez clairement les paramtres de configuration pris par dfaut par les
services dovecot.
En ralit, nous aurons trs peu de choses y mettre. Une premire lecture rapide nous laisse
entendre que :
il faudra indiquer quels services nous voulons activer (pop3 et imap dans un premier
temps) ;
il faudra donner le chemin aux rpertoires Maildir des utilisateurs ;
il faudra indiquer quelle mthode nous choisissons pour authentifier les utilisateurs.
Peut-tre que Debian a dj fait pas mal de travail notre place ?
# cat dovecot.conf | egrep -v -e '^[[:blank:]]*#|^$'
protocols =
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_privileged_group = mail
protocol imap {
}

protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
auth default {
mechanisms = plain
passdb pam {
}
userdb passwd {
}
user = root
}
dict {
}
plugin {
}
A priori, pour ce que nous avons faire, c'est presque bon :
mcanisme d'authentification en texte clair ;
le systme utilisera PAM pour vrifier le mot de passe de l'utilisateur qui se connecte.
Dovecot a install un fichier dovecot dans /etc/pam.d dans ce but ;
c'est le fichier passwd qui sera utilis comme base de donne des utilisateurs. De ce
fait, l'utilisateur sous le compte duquel dovecot va effectuer l'authentification devra ici
tre root.
Voyez le dovecot.conf d'usine pour tous les dtails sur les divers modes d'authentification
possibles.
Dans un premier temps, nous n'avons donc qu' complter la ligne protocols comme suit :
protocols = pop3 imap
En ce qui concerne l'accs aux ~/Maildir, c'est l'option par dfaut, donc pas besoin de le
spcifier.
Dmarrage
# /etc/init.d/dovecot restart
Restarting mail server: dovecot.
# netstat -a | grep :pop
tcp 0 0 *:pop3 *:* LISTEN

# netstat -a | grep :imap
tcp 0 0 *:imap2 *:* LISTEN
Il est l'coute.
Essais IMAP
Une fois dbarrass de ses commentaires, le fichier dovecot.conf semble trs simple. Ne
nous y trompons pas, il l'est encore une fois cause des options par dfaut (qui sont en trs
grand nombre ici).
Premier exemple amusant, nous allons tester par telnet (car bien entendu, nous connaissons
par cur les commandes du protocole IMAP), en local, puis distance.
En local A distance

~# telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Dovecot ready.
20 capability
* CAPABILITY IMAP4rev1 SASL-IR SORT
THREAD=REFERENCES
MULTIAPPEND UNSELECT
LITERAL+ IDLE
CHILDREN NAMESPACE
LOGIN-REFERRALS
STARTTLS AUTH=PLAIN
20 OK Capability completed.
40 login prof epikoi
40 OK Logged in.
60 logout
* BYE Logging out
60 OK Logout completed.
Connection closed by foreign host.







chris@pchris2:~$ telnet cyrus.nain-
t.net 143
Trying 192.168.0.18...
Connected to cyrus.nain-t.net.
Escape character is '^]'.
* OK Dovecot ready.
20 capability
* CAPABILITY IMAP4rev1 SASL-IR SORT
THREAD=REFERENCES
MULTIAPPEND UNSELECT
LITERAL+ IDLE
CHILDREN NAMESPACE
LOGIN-REFERRALS
STARTTLS LOGINDISABLED
20 OK Capability completed.
40 login prof epikoi
* BAD [ALERT] Plaintext
authentication
is disabled, but your
client sent
password in plaintext
anyway.
If anyone was
listening,
the password was
exposed.
40 NO Plaintext authentication
disabled.
60 logout
* BYE Logging out
60 OK Logout completed.
Connection closed by foreign host.

Par dfaut, l'authentification en mode plaintext fonctionne en local, mais pas distance.
Bien entendu, il est possible de modifier ce comportement, mais ce n'est pas souhaitable.
Vrifions tout ceci avec Thunderbird, sur un poste du rseau. Configurons notre oiseau du
tonnerre pour aller lire la boite-aux-lettres de prof sur cyrus.nain-t.net et vrifions que la
lecture n'est possible qu' certaines conditions :

Ben oui, nous tions prvenus. Il est temps de changer ces habitudes et de venir un systme
chiffr. IMAP TLS utilise le mme port que IMAP, mais envoie la commande STARTTLS pour
dbuter un chiffrement de la communication, tandis que IMAP SSL utilise un autre port et
chiffre tout l'ensemble de la communication. Il s'agit d'un autre service, part entire, que
nous n'avons d'ailleurs pas dmarr, il s'agit de IMAPS. Essayons de cocher TLS, si
possible ou mme TLS Dans les paramtres de scurit des paramtres du serveur du
compte IMAP que nous avons cr dans notre Thunderbird, et voyons :

Ici, a devient srieux. Nous sommes en mode chiffr, Cyrus nous envoie son certificat, mais
il n'est pas sign par une racine de confiance. Dovecot a cr un certificat auto-sign lors de
son installation. Voyons ce certificat :

Si nous devions faire du travail de pro, il nous faudrait obtenir un certificat pour Cyrus, sign
par une racine de confiance. Nous nous en passerons ici et nous accepterons de faon
dfinitive ce certificat. Eventuellement, nous verrons comment raliser une autorit racine
maison et signer nos certificats avec. L'interface TinyCA permet avec Openssl de raliser
ces choses assez simplement.

Nous retrouvons bien le message envoy prof il y a dj quelques temps.
Nous ne sommes pas ici pour tudier IMAP, c'est dj fait ailleurs. Il n'est donc pas utile de
vrifier que la connexion IMAP est bien chiffre pour tout ce qui concerne le login et les
donnes, ni que le dialogue IMAP est bien correct. a fonctionne, a nous suffira ici.
C'est du Maildir, nous pouvons crer distance autant de dossiers dans des dossiers qu'il sera
ncessaire pour bien classer nos messages. C'est un vrai serveur IMAP quoi.
Et d'o viennent donc ces certificats, utiliss avec STARTTLS ? Des options par dfaut
Mais lisez donc le dovecot.conf d'usine !
Plus de BALs...
Pour la beaut du geste, et aussi pour constater que ce n'est pas forcment bien pratique, nous
allons crer un compte de messagerie pour un utilisateur lambda.
Il faut un compte Unix, mais cet utilisateur lambda n'a pas besoin de shell, il ne doit pas
pouvoir lancer de commandes sur cyrus. Il doit juste disposer d'un rpertoire dans lequel
Postfix dposera la structure Maildir et les messages entrants et dans lequel Dovecot ira
rcuprer ces messages pour les prsenter au client.
Cration du compte
# adduser --shell /bin/false lambda
Nous avons bien dans /etc/passwd :
lambda:x:1002:1002:,,,:/home/lambda:/bin/false
Il n'y a plus qu' essayer, avec notre oiseau du tonnerre, d'envoyer un message lambda :

Et dans les logs :
Jun 3 16:41:11 cyrus postfix/smtpd[20702]: connect from
unknown[192.168.10.47]
Jun 3 16:41:11 cyrus postfix/smtpd[20702]: 8FB3567D9D:
client=unknown[192.168.10.47]
Jun 3 16:41:11 cyrus postfix/cleanup[20707]: 8FB3567D9D: message-
id=<48455808.5070500@nain-t.net>
Jun 3 16:41:11 cyrus postfix/qmgr[20273]: 8FB3567D9D: from=<prof@nain-
t.net>, size=529, nrcpt=1 (queue active)
Jun 3 16:41:11 cyrus postfix/smtpd[20702]: disconnect from
unknown[192.168.10.47]
Jun 3 16:41:11 cyrus postfix/local[20708]: 8FB3567D9D:
to=<lambda@cyrus.nain-t.net>, relay=local, delay=0.05,
delays=0.03/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
C'est pass dirait-on. Vrifions aprs avoir cr un compte pour lambda dans notre oiseau :

Notez que nous avons d utiliser l'adresse lambda@cyrus.nain-t.net pour que a
fonctionne. Si nous avions utilis lambda@nain-t.net, Postfix aurait mal ragi :

Dans les logs :
Jun 3 16:50:40 cyrus postfix/smtpd[20716]: connect from
unknown[192.168.10.47]
Jun 3 16:50:40 cyrus postfix/smtpd[20716]: NOQUEUE: reject: RCPT from
unknown[192.168.10.47]: 554 5.7.1 <lambda@nain-t.net>: Relay access denied;
from=<prof@nain-t.net> to=<lambda@nain-t.net> proto=ESMTP
helo=<[192.168.10.47]>
Jun 3 16:51:09 cyrus postfix/smtpd[20716]: disconnect from
unknown[192.168.10.47]
Tout simplement parce que notre postfix ne sait pas que tout le domaine nain-t.net fait partie
de ses destinations :
mydestination = $myhostname, localhost
Modifions comme ceci :
mydestination = $mydomain, $myhostname, localhost
Et dsormais, les adresses lambda@nain-t.net et prof@nain-t.net deviennent des
destinations valides pour notre cyrus.
Recevoir du monde
Nous pouvons maintenant commencer envisager de recevoir des messages depuis le monde
vers nos comptes @nain-t.net.
Nous devons dj nous assurer que le DNS qui gre le domaine nain-t.net rpond
correctement une requte de type MX :
# host -t MX nain-t.net
nain-t.net mail is handled by 1 cyrus.nain-t.net.
C'est le cas. Il va falloir tout de mme prvoir quelques mesures sanitaires en consquence.
Remarque propos de Bind
Bind9, Le serveur de noms quasi universellement utilis sur l'internet prsente une petite
restriction qu'il est important de souligner. En effet, il ne supporte pas que le nom d'hte
indiqu comme MX soit un alias, autrement dit un CNAME.
Evitez donc les ennuis et ne faites pas quelque chose comme :
truc.machin.net. IN A 192.168.0.5
cyrus.machin.net. IN CNAME truc.machin.net.
machin.net. IN MX 1 cyrus.machin.net.
Mais plutt :
cyrus.machin.net. IN A 192.168.0.5
truc.machin.net. IN CNAME cyrus.machin.net.
machin.net. IN MX 1 cyrus.machin.net.
Le silence est d'or
La bannire d'accueil
Est-il bien ncessaire que notre postfix s'annonce de manire si explicite ? Non. Seul le nom
d'hte est obligatoire. Notre Postfix se prsente actuellement comme ceci :
$ telnet cyrus.nain-t.net 25
Trying 192.168.10.7...
Connected to cyrus.nain-t.net.
Escape character is '^]'.
220 cyrus.nain-t.net ESMTP Postfix (Debian/GNU)
Ce n'est pas ncessaire d'indiquer tout le monde que nous utilisons Postfix sur une Debian.
Modifions notre smtp_banner en fonction :
smtpd_banner = $myhostname ESMTP Experimental
Et vrifions :
$ telnet cyrus.nain-t.net 25
Trying 192.168.10.7...
Connected to cyrus.nain-t.net.
Escape character is '^]'.
220 cyrus.nain-t.net ESMTP Experimental
C'est mieux, c'est plus discret, c'est moins extraverti.
La commande vrfy
SMTP prvoit la commande vrfy <username> qui permet un client de savoir si un
utilisateur existe ou non dans le domaine :
vrfy lambda
252 2.0.0 lambda
vrfy truc
550 5.1.1 : Recipient address rejected: User unknown in local recipient
table
Cette commande est bien utile pour des besoins de mise au point, mais quoi bon donner aux
spammers un moyen simple de trouver ce genre d'informations ?
disable_vrfy_command = yes
va arranger a :
vrfy lambda
502 5.5.1 VRFY command is disabled
La politesse, Bordel !
On se prsente...
SMTP prvoit que les MTA sont polis. Ils se prsentent avec la commande EHLO (ou
HELO). Il est possible d'jecter simplement les malpolis en indiquant Postfix que :
smtpd_helo_required = yes
Voyons :
$ telnet cyrus.nain-t.net 25
Trying 192.168.10.7...
Connected to cyrus.nain-t.net.
Escape character is '^]'.
220 cyrus.nain-t.net ESMTP Experimental
MAIL FROM: <machin@truc.com>
503 5.5.1 Error: send HELO/EHLO first
Un dialogue bcbg
Postfix permet de placer des restrictions plus ou moins serres lors du dialogue SMTP,
principalement sur les commandes MAIL FROM: et RCPT TO:, ainsi que sur l'adresse IP du
client.
smtpd client restrictions
Le paramtre smtpd_client_restrictions permet de contrler qui se connecte notre
MTA. Par dfaut, ce paramtre n'applique aucune restriction.
Nous pouvons vrifier que les clients ne sont pas rfrencs sur des blacklists rputes :
smtpd_client_restrictions =
permit_mynetworks, # Nous faisons
confiance aux clients de notre rseau
reject_rbl_client blackholes.easynet.nl, # mais pas ceux qui
sont "blacklists"
reject_rbl_client cbl.abuseat.org,
reject_rbl_client proxies.blackholes.wirehub.net,
reject_rbl_client bl.spamcop.net,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client dnsbl.njabl.org,
reject_rbl_client list.dsbl.org,
permit
Les rgles sont lues de gauche droite (de haut en bas dans notre faon de l'crire) et la
premire rgle vrifie est la bonne. Les autres sont donc ignores. Ici, les rseaux spcifis
dans $mynetworks sont permis et dans ce cas, le filtrage n'ira pas plus loin. En revanche, si le
client qui se connecte n'est pas dans $mynetworks, Postfix va vrifier qu'il n'est rfrenc
dans aucune des blacklists indiques avant de lui permettre (permit en fin de liste) de se
connecter.
Le principe de ces listes est simple. Postfix va effectuer une requte dns inverse (rdns) partir
de l'adresse IP du client, inverse et appose au domaine annonc de la liste noire :
$ host 95.57.127.82.sbl.spamhaus.org
Si la rponse est :
Host 95.57.127.82.sbl.spamhaus.org not found: 3(NXDOMAIN)
C'est que l'adresse 82.127.57.95 n'est pas rfrence. Si au contraire, la rponse est :
95.57.127.82.sbl.spamhaus.org has address 82.127.57.95
C'est que l'adresse 82.127.57.95 est rfrence. Le client sera alors rejet.
Nous pouvons utiliser plusieurs blacklists, au dtriment des ressources consommes sur le
serveur, au risque de voir ces clients rejets par erreur Le postmaster doit donc rester
attentif.
smtpd sender restrictions
La commande MAIL FROM: doit indiquer l'adresse (de messagerie) de l'metteur du message.
Nous pouvons vrifier certaines choses ce niveau et nous allons le faire, par l'intermdiaire
de la directive smtpd_sender_restrictions :
smtpd_sender_restrictions =
permit_mynetworks, # Nous faisons
confiance aux clients de notre rseau
reject_non_fqdn_sender, # machin@chose ne
passera pas
reject_unknown_sender_domain, # machin@truc.tld ne
passera pas
permit
smtpd recipient restrictions
Ces restrictions touchent ce qu'il y a dans la commande RCPT TO:. La valeur par dfaut
(permit_mynetworks, reject_unauth_destination) est acceptable, mais il est possible de
restreindre d'avantage. Voyez la documentation de Postfix officielle ou sa traduction en
franais pour plus de dtails.
Vrifions...
Nous avons dsormais un main.cf qui ressemble ceci :
smtpd_banner = $myhostname ESMTP Experimental
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_sender_restrictions =
permit_mynetworks,
reject_non_fqdn_sender
reject_unknown_sender_domain,
permit

smtpd_client_restrictions =
permit_mynetworks,
reject_rbl_client blackholes.easynet.nl,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client proxies.blackholes.wirehub.net,
reject_rbl_client bl.spamcop.net,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client dnsbl.njabl.org,
permit

biff = no
append_dot_mydomain = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
myhostname = cyrus.nain-t.net
myorigin = $myhostname
mydestination = $mydomain, $myhostname, localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
relayhost =
mynetworks = 127.0.0.0/8 192.168.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
home_mailbox = Maildir/
Depuis un client de l'internet, nous allons, en passant par le SMTP du fournisseur de ce client,
envoyer un message lambda@nain-t.net. Observons les logs sur cyrus.nain-t.net :
Jun 4 11:24:54 cyrus postfix/smtpd[21077]: connect from
smtp21.orange.fr[80.12.242.49]
Jun 4 11:24:55 cyrus postfix/smtpd[21077]: B230A67D9D:
client=smtp21.orange.fr[80.12.242.49]
Jun 4 11:24:55 cyrus postfix/cleanup[21082]: B230A67D9D: message-
id=<48465F65.4020809@eme-enseignement.fr>
Jun 4 11:24:55 cyrus postfix/smtpd[21077]: disconnect from
smtp21.orange.fr[80.12.242.49]
Jun 4 11:24:55 cyrus postfix/qmgr[21075]: B230A67D9D: from=, size=1243,
nrcpt=1 (queue active)
Jun 4 11:24:55 cyrus postfix/local[21083]: B230A67D9D: to=, relay=local,
delay=0.98, delays=0.96/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to
maildir)
Jun 4 11:24:55 cyrus postfix/qmgr[21075]: B230A67D9D: removed
C'est bon a.
Allons lire ce message avec notre oiseau du tonnerre, via Dovecot (code source du message) :
Return-Path: <christian.caleca@exe-enxeignexent.fr>
X-Original-To: lambda@nain-t.net
Delivered-To: lambda@nain-t.net
Received: from smtp21.orange.fr (smtp21.orange.fr [80.12.242.49])
by cyrus.nain-t.net (Postfix) with ESMTP id B230A67D9D
for <lambda@nain-t.net>; Wed, 4 Jun 2008 11:24:54 +0200 (CEST)
Received: from me-wanadoo.net (localhost [127.0.0.1])
by mwinf2121.orange.fr (SMTP Server) with ESMTP id 46CF01C004ED
for <lambda@nain-t.net>; Wed, 4 Jun 2008 11:24:54 +0200 (CEST)
Received: from jupiter.eme.org (LSt-Amand-152-32-18-95.w82-
127.abo.wanadoo.fr [82.127.57.95])
by mwinf2121.orange.fr (SMTP Server) with ESMTP id 2EDE51C0044A
for <lambda@nain-t.net>; Wed, 4 Jun 2008 11:24:54 +0200 (CEST)
X-ME-UUID: 20080604092454192.2EDE51C0044A@mwinf2121.orange.fr
Received: from [172.16.129.250] (p-caleca.eme.org [172.16.129.250])
by jupiter.eme.org (Postfix) with ESMTP id C61C81E3
for <lambda@nain-t.net>; Wed, 4 Jun 2008 11:24:53 +0200 (CEST)
Message-ID: <48465F65.4020809@eme-enseignement.fr>
Date: Wed, 04 Jun 2008 11:24:53 +0200
From: Christian Caleca <christian.caleca@exe-enxeignexent.fr>
User-Agent: Thunderbird 2.0.0.14 (Windows/20080421)
MIME-Version: 1.0
To: lambda@nain-t.net
Subject: Test lointain
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

Et a passe :p
Notre MTA est devenu aussi MX et nous pouvons dsormais recevoir des messages depuis le
monde.
Amavis
Pour river leur clou aux virus et autres spams
Nous avons dj pas mal protg notre serveur, mais tout de mme
les virus peuvent encore passer ;
les blacklists ne suffisent pas limiter le spam.
L'idal serait de pouvoir connecter notre Postfix des outils comme Clamav et Spamassassin,
pour amliorer encore notre bien-tre. Amavis est l pour rpondre cette question.
Amavis va servir de glue pour passer les
messages entrants des filtres comme Clamav et Spamassassin. Nous allons mettre CLamav
l'uvre. Spamassassin.
Le module smtpd va se connecter Amavis par une connexion TCP sur le port 10024 par
dfaut. Lorsqu'un message entrera sur smtpd, ce dernier le transmettra au service amavisd.
Celui-ci va filtrer le message en le passant Clamav (et Spamassassin s'il est en tat de
fonctionner).
Amavis va alors retransmettre un message smtpd toujours par une connexion TCP, sur le
port 10025 par dfaut. Ce message retransmis pourra avoir plusieurs formes suivant le cas :
1. le message est sain, il est retransmis tel quel.
2. le message contient un virus. Dans ce cas, Amavis mettra le message en quarantaine,
enverra une notification au destinataire pour l'avertir qu'un message vrol lui a t
envoy et ventuellement une notification l'envoyeur pour lui signaler que son
message n'a pas t remis. L'administrateur du site pourra galement tre notifi.
3. le message est suppos tre un spam, il est alors marqu comme tel, puis remis dans la
chaine de distribution. Il est en effet malvenu de dtruire ce qui est suppos tre un
spam, la dtection tant toujours approximative (faux positifs). Suivant le score
que spamassassin aura attribu au message, l'attitude pourra tout de mme voluer.
Ainsi un message recevant un score sans appel pourra tre tout de mme dtruit.
Clamav et accessoires
Debian stable c'est bien, mais a vieillit parfois assez mal. Ce n'est souvent pas trs gnant,
sauf pour des applications comme Clamav ou Spamassassin. Le dpt volatile est l pour
pallier cet inconvnient. Il y a toute une srie de miroirs dans le monde, choisissez celui qui
vous convient et ajoutez-le votre source.list.
Il faut installer :
# aptitude search clamav | grep ^i
i clamav - anti-virus utility for Unix -
command-line
i A clamav-base - anti-virus utility for Unix - base
package
i clamav-daemon - anti-virus utility for Unix - scanner
daem
i A clamav-freshclam - anti-virus utility for Unix - virus
databa
i clamav-testfiles - anti-virus utility for Unix - test
files
i A libclamav4 - anti-virus utility for Unix - library
Clamav-testfiles est optionnel, il fournit des fichiers de test.
Spamassassin
Spamassassin mriterait lui seul tout un chapitre. Nous nous contenterons ici de la
configuration par dfaut, juste pour vrifier que notre montage fonctionne.
Amavisd-new
Passons la glue :
~# aptitude install amavisd-new
Lecture des listes de paquets... Fait
Construction de l'arbre des dpendances... Fait
Lecture de l'information d'tat tendu
Initialisation de l'tat des paquets... Fait
Lecture des descriptions de tches... Fait
Construction de la base de donnes des tiquettes... Fait
Les NOUVEAUX paquets suivants vont tre automatiquement installs :
libarchive-tar-perl libarchive-zip-perl libberkeleydb-perl libcompress-
zlib-perl libconvert-binhex-perl
libconvert-tnef-perl libconvert-uulib-perl libio-multiplex-perl libio-
stringy-perl libio-zlib-perl
libmailtools-perl libmime-perl libnet-cidr-perl libnet-server-perl
libtimedate-perl libunix-syslog-perl
Les NOUVEAUX paquets suivants vont tre installs :
amavisd-new libarchive-tar-perl libarchive-zip-perl libberkeleydb-perl
libcompress-zlib-perl
libconvert-binhex-perl libconvert-tnef-perl libconvert-uulib-perl libio-
multiplex-perl libio-stringy-perl
libio-zlib-perl libmailtools-perl libmime-perl libnet-cidr-perl libnet-
server-perl libtimedate-perl
libunix-syslog-perl
0 paquets mis jour, 17 nouvellement installs, 0 enlever et 0 non mis
jour.
Il est ncessaire de tlcharger 1772ko d'archives. Aprs dpaquetage,
5468ko seront utiliss.
Voulez-vous continuer ? [Y/n/?]
...
Ce n'est pas parce que c'est install que a va coller tout seul. Nous avons un
/usr/share/doc/amavisd-new/README.postfix.gz qui va bien nous aider l'interfacer
avec Postfix.
Configuration d'Amavis
La configuration d'amavisd-new sur Debian est une chose finalement assez amusante faire.
Tout est dans /etc/amavis/conf.d
# ls -l /etc/amavis/conf.d/
total 56
-rw-r--r-- 1 root root 1458 2007-02-24 19:30 01-debian
-rw-r--r-- 1 root root 692 2007-02-24 19:30 05-domain_id
-rw-r--r-- 1 root root 235 2007-02-24 19:30 05-node_id
-rw-r--r-- 1 root root 13907 2007-02-24 19:30 15-av_scanners
-rw-r--r-- 1 root root 554 2007-02-24 19:30 15-content_filter_mode
-rw-r--r-- 1 root root 9187 2007-02-24 19:30 20-debian_defaults
-rw-r--r-- 1 root root 573 2007-02-24 19:30 25-amavis_helpers
-rw-r--r-- 1 root root 2130 2007-02-24 19:30 30-template_localization
-rw-r--r-- 1 root root 1223 2008-06-23 14:19 50-user
Bref, il y en a dans tous les coins, nous de nous y retrouver.
Comme dans toute critique d'un bon roman suspense ou d'un bon jeu d'action, il faut
bien se garder de dflorer l'intrique, aussi vous laisserais-je le soin de vous y retrouver
Juste un ou deux indices cependant, histoire de ne dcourager personne :
tous les fichiers de configuration sont lus, les un aprs les autres, par ordre
alphabtique ;
lorsqu'une directive de configuration est donne plusieurs fois dans des fichiers
diffrents, c'est la dernire lue qui a raison ;
le fichier 50-user est, en l'tat, le dernier tre lu ;
tous les autres sont susceptibles d'tre modifis lors d'une mise jour d'amavisd-new.
Tirez-en les conclusions qui s'imposent.
Antivirus et Antispam
En lisant le fichier /etc/amavis/conf.d/15-content_filter_mode, vous comprendrez
probablement que pour activer l'appel de l'antivirus et de l'antispam :
use strict;

# You can modify this file to re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Uncomment the two lines below to enable it back
#

#@bypass_virus_checks_maps = (
# \%bypass_virus_checks, \@bypass_virus_checks_acl,
\$bypass_virus_checks_re);


#
# Default SPAM checking mode
# Uncomment the two lines below to enable it back
#

#@bypass_spam_checks_maps = (
# \%bypass_spam_checks, \@bypass_spam_checks_acl,
\$bypass_spam_checks_re);

1; # insure a defined return
Nous allons bien nous garder de le faire, mais allons plutt ajouter ces lignes dans 50-user :
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl,
\$bypass_virus_checks_re);
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl,
\$bypass_spam_checks_re);
Tags artistiques
Il y a un fichier bien intressant lire : /etc/amavis/conf.d/20-debian_defaults, car il
contient bon nombre de paramtres de configuration d' Amavis. Dans les grandes lignes,
mieux vaut garder cette configuration, sauf que :
1. si vous dsirez que les tags poss par spamassassin soient systmatiquement ajouts
dans les en-ttes de messages, a n'ira pas ;
2. si vous voulez que les spams ne soient jamais limins, mais simplement marqus
comme tels, a n'ira pas non plus ;
3. si par la suite, vous souhaitez, comme nous le ferons dans le chapitre suivant, utiliser
des domaines virtuels vos tags risquent de ne jamais apparatre.
En effet, Amavisd-new ne retranscrit les tags de spamassassin que pour les messages
destination des domaines rfrencs dans la variable (liste) @local_domains_acl.
De plus, la variable $sa_kill_level_deflt dfinit le score partir duquel nous sommes
surs qu'un message est un spam, et la variable $final_spam_destiny indique quoi faire de
ce message dans pareil cas.
Dans la configuration par dfaut (allez fouiller dans /etc/amavis/conf.d/20-
debian_defaults), vous constaterez que si un message obtient un score >= 100, il est
D_BOUNCE ce qui veut dire qu'il est mis en quarantaine locale et que le destinataire ne
reoit rien. Certes, un score de 100 est assez significatif mais tout de mme, peut-tre
souhaiterez-vous vous montrer plus libral.
La variable @local_domains_acl telle qu'elle est configure devrait faire l'affaire ici, mais
n'ira pas dans le cas de domaines virtuels. Vrifiez tout de mme, en cas de refus de tags de la
part d'amavis, de vrifier que le problme ne vient pas de l. La configuration suivante :
@local_domains_acl = ( "." );
Permettra d'effectuer le marquage des tags antispam quel que soit le domaine de destination.
Enfin, les variables $sa_tag_level_deflt et $sa_tag2_level_deflt ont leur importance
sur la faon dont le message est marqu, de mme que $sa_spam_subject_tag a un effet
direct sur l'esthtique du message remis.
Voici un exemple de 50-user
#
# Place your configuration directives here. They will override those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file
#
#@local_domains_acl = ( "." ); # ventuellement, en cas de soucis

@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl,
\$bypass_virus_checks_re);

@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl,
\$bypass_spam_checks_re);

$sa_tag_level_deflt = -9999; # note minimale pour ajouter les tags X-
Spam... l'en-tte des emails
# ici, nous sommes peu prs surs que le
tag sera toujours prsent
$sa_tag2_level_deflt = 5.0; # note minimale pour ajouter le tag X-
Spam-Flag: YES
# et modifier l'objet
$sa_kill_level_deflt = 100; # note partir de laquelle les mails sont
traits comme dfinis
# par la variable $final_spam_destiny (ici
ils sont accepts)
$sa_spam_subject_tag = '[SPAM]'; # chaine ajoute l'objet de l'email
$final_spam_destiny = D_PASS;

# Pour ne pas en dire trop sur les armes employes
$X_HEADER_LINE = "spam & virus filtering at $mydomain";


#------------ Do not modify anything below this line -------------
1; # insure a defined return
Configuration de Postfix
Jusqu' prsent, nous avons pu viter de toucher master.cf. Maintenant, il va falloir y aller.
Ce fichier de configuration permet essentiellement de configurer les divers services fournis
par Postfix, ainsi que des services annexes que l'on peut lui rattacher. En gros, c'est un outil
pour faire de la chirurgie dans l'architecture de Postfix. Il est donc recommand d'y aller avec
prcautions.
Nous allons juste faire ce qui est dit dans la documentation d'amavisd-new :
Dans master.cf
Il faut ajouter ceci la fin du fichier :
#
# Amavisd-new
#
smtp-amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20

127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o mynetworks=127.0.0.0/8,,[::1]/128
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o
receive_override_options=no_header_body_checks,no_unknown_recipient_checks
Ces deux paragraphes vont permettre la cration des points d'accrochage entre le module
smtpd de Postfix et le daemon Amavisd. De plus, il faudra modifier le fichier main.cf pour
indiquer Postfix que smtpd doit se connecter Amavisd.
Les options (-o) indiques ici surchargeront ventuellement celles qui seraient donnes dans
main.cf pour les services en question, c'est dire d'une part smtp-amavis et d'autre part le
service smtpd attach amavis sur le port 10025.
Dans main.cf
Il y a juste une ligne ajouter :
content_filter=smtp-amavis:[127.0.0.1]:10024
Enfin, comme le dit la documentation de Amavisd-new, il faut ajouter l'utilisateur clamav
sous l'identit duquel le service de l'antivirus (clamd) tourne, au groupe amavis :
# usermod -a -G amavis clamav
Vrifications
Aprs avoir relanc amavis et forc Postfix relire sa configuration, vrifions que Amavisd-
new tourne, Postfix (et Dovecot) aussi :
~# netstat -tap
Connexions Internet actives (serveurs et tablies)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat
PID/Program name
tcp 0 0 localhost:10024 *:* LISTEN
4280/amavisd (master)
tcp 0 0 localhost:10025 *:* LISTEN
2532/master
...
tcp 0 0 *:imap2 *:* LISTEN
3536/dovecot
tcp 0 0 *:smtp *:* LISTEN
2532/master
Nous envoyons un message test@nain-t.net et regardons l'en-tte du message reu :
Return-Path: <machin@chose.truc>
Received: from cyrus.nain-t.net ([unix socket])
by cyrus.nain-t.net (Cyrus v2.2.13-Debian-2.2.13-10) with LMTPA;
Mon, 23 Jun 2008 14:20:47 +0200
X-Sieve: CMU Sieve 2.2
Received: from localhost (localhost [127.0.0.1])
by cyrus.nain-t.net (Postfix) with ESMTP id B1DC080FF274
for <test@nain-t.net>; Mon, 23 Jun 2008 14:20:47 +0200 (CEST)
X-Virus-Scanned: spam & virus filtering at cyrus.nain-t.net
X-Spam-Score: 0.644
X-Spam-Level:
X-Spam-Status: No, score=0.644 tagged_above=-9999 required=5
tests=[AWL=0.644]
Received: from cyrus.nain-t.net ([127.0.0.1])
by localhost (cyrus.nain-t.net [127.0.0.1]) (amavisd-new, port
10024)
with ESMTP id D38UlkWl4ypt for <test@nain-t.net>;
Mon, 23 Jun 2008 14:20:40 +0200 (CEST)
Received: from smtp20.orange.fr (smtp20.orange.fr [193.252.22.29])
by cyrus.nain-t.net (Postfix) with ESMTP id 26C1880FF273
for <test@nain-t.net>; Mon, 23 Jun 2008 14:20:39 +0200 (CEST)
Received: from me-wanadoo.net (localhost [127.0.0.1])
by mwinf2018.orange.fr (SMTP Server) with ESMTP id 1DA561C00046
for <test@nain-t.net>; Mon, 23 Jun 2008 14:20:37 +0200 (CEST)
Received: from jupiter.chose.truc (LSt-Amand-152-32-18-95.w82-
127.abo.wanadoo.fr [82.127.57.95])
by mwinf2018.orange.fr (SMTP Server) with ESMTP id F39901C000BA
for <test@nain-t.net>; Mon, 23 Jun 2008 14:20:36 +0200 (CEST)
X-ME-UUID: 20080623122036997.F39901C000BA@mwinf2018.orange.fr
Received: from [172.16.129.245] (test-desktop.chose.truc [172.16.129.245])
by jupiter.chose.truc (Postfix) with ESMTP id 8977EEA3
for <test@nain-t.net>; Mon, 23 Jun 2008 14:20:36 +0200 (CEST)
Message-ID: <485F9514.4000807@eme-enseignement.fr>
Date: Mon, 23 Jun 2008 14:20:36 +0200
From: machin <machin@chose.truc>
User-Agent: Thunderbird 2.0.0.14 (X11/20080505)
MIME-Version: 1.0
To: test@nain-t.net
Subject: test des tags
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

a taggue.
Si nous avions le temps, nous pourrions aussi envoyer un message identique celui qui est
fourni en exemple de spam avec spamassassin, pour constater que le travail est bien fait. De
mqme, nous pouvons aussi envoyer un exemple de virus fourni avec Clamav et constater
qu'il est mis en quarantaine et non transmis au destinataire
Enfin, il faut s'assurer que le dossier de quarantaine ne va pas exploser. Peut-tre faut-il crire
un script qui nettoie les messages trop vieux, ou mme crer une poubelle sans fond
(/dev/null) ?
Remarque
Il n'y a pas qu'Amavis qui permette l'interaction de Postfix avec des filtres de messages. Il y a
aussi MailScanner. Sa mthode de rattachement Postfix est bien plus simple (peut-tre
mme un peu simpliste), mais pour ce que nous avons fait ici, MailScanner aurait pu suffire.
Relais nomade
Il nous manque juste une fonctionnalit intressante : celle de pouvoir utiliser notre
cyrus.nain-t.net pour envoyer nos messages, lorsque nous sommes en errance.
Les fournisseurs d'accs en effet, ont l'habitude (lgitime) de rserver leur SMTP leurs
clients. Si bien que lorsque nous sommes en dplacements, nous devons reconfigurer notre
MUA en fonction de fournisseur dont on utilise les services. Ce n'est pas bien pratique. Si
notre SMTP cyrus pouvait accepter de faire le relais pour nous, quel que soit le fournisseur
par lequel nous nous connectons, sans pour autant devenir un open relay ce serait parfait.
Le RFC 2476 va venir notre secours. Nous allons ouvrir un MSA (Message Submission
Agent) sur notre Postfix qui est prvu pour.
Le principe, assez tortueux, va tre le suivant. Nos utilisateurs disposent d'un couple
login/password pour accder leur boite aux lettres via dovecot-imapd. Nous allons utiliser
SASL, de manire faire authentifier les utilisateurs sur le SMTP par le mme couple
login/password, en s'appuyant sur dovecot-auth. SASL est une grande chose que nous
manipulerons de manire plus muscle dans la solution suivante.
Simple Authentication and Security Layer porte assez mal son nom. Nous n'allons que
l'effleurer ici en demandant Dovecot d'assurer le rle de serveur SASL et Postfix celui du
client. Normalement Postfix sait parler SASL avec Dovecot :
# postconf -a
cyrus
dovecot
Configuration de Dovecot
Nous devons avoir dans les mandres de /etc/dovecot/dovecot.conf, au paragraphe auth
default quelque chose comme ceci :
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
Ce qui veut dire que le serveur SASL implment dans Dovecot va couter sur un socket unix
plac dans la cage de Postfix (/var/spool/postfix), et que ce socket sera accessible en
lecture comme en criture par l'utilisateur postfix .
Pour vous aider y voir plus clair, voici le fichier complet, dbarrass de ses commentaires :
protocols = pop3 imap
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_privileged_group = mail
protocol imap {
}

protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
auth default {
mechanisms = plain login
passdb pam {
}
userdb passwd {
}
user root
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
dict {
}
plugin {
}
Relancez Dovecot.
Configuration de Postfix
Il va falloir agir sur les deux fichiers main.cf et master.cf.
Sur main.cf
Nous devons prciser le type sasl employ (dovecot), ainsi que l'emplacement du socket du
daemon d'authentification de Dovecot (que nous avons plac dans
/var/spool/postfix/private/auth). Ceci se traduit par l'ajout de ces deux lignes :
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
(Le chemin vers le socket est donn de faon relative de manire ce qu'il soit indpendant
du chemin de mise en cage de Postfix).
Nous avons donc finalement :
smtpd_banner = $myhostname ESMTP Experimental
disable_vrfy_command = yes
smtpd_helo_required = yes

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

smtpd_sender_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit

smtpd_client_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_rbl_client blackholes.easynet.nl,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client proxies.blackholes.wirehub.net,
reject_rbl_client bl.spamcop.net,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client dnsbl.njabl.org,
permit

content_filter=smtp-amavis:[127.0.0.1]:10024

biff = no
append_dot_mydomain = no
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
myhostname = cyrus.nain-t.net
myorigin = $myhostname
mydestination = $mydomain, $myhostname, localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
relayhost =
mynetworks = 127.0.0.0/8 192.168.0.0/24 192.168.10.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
home_mailbox = Maildir/
Sur master.cf
Nous devons activer la submission qui ne l'est pas par dfaut, en dcommentant les lignes
correspondantes et en ajoutant une option :
...
#
==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
#
==========================================================================
smtp inet n - - - - smtpd
submission inet n - - - - smtpd
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
...
Les options transmises au service smtpd vont surcharger pour ce service, dont le nom est
submission (et celui-ci seulement) celles qui seraient fournies dans main.cf. Nous avons ici
3 options :
1. oblige utiliser TLS (commande STARTTLS) avant l'authentification.
2. active l'authentification en utilisant SASL.
3. seuls les clients authentifis par SASL peuvent se connecter.
4. surcharge pour la submission les options par dfaut qui sont :
smtpd_recipient_restrictions = permit_mynetworks,
reject_unauth_destination. Postfix n'acceptera de relayer les message que pour
les clients authentifis.
En effet, il ne s'agit pas dans ce cas d'autoriser my nesworks mais uniquement les
utilisateurs authentifis par SASL et de rejeter tous les autres, non selement pour le relais
mais aussi pour les destinations locales. En bref, le MTA ne sera utilisable que pour les
personnes qui disposent d'un compte local.
Aprs avoir relanc Postfix, si nous configurons notre
oiseau comme ceci.
Une fois les formalits d'acceptation du certificat du serveur (qui n'est toujours pas sign par
une racine de confiance), et de fourniture du mot de passe de l'utilisateur lambda , cyrus
devrait accepter de relayer n'importe o.
Vrification (de routine) :
Jun 5 16:22:09 cyrus postfix/smtpd[26816]: connect from LSt-Amand-152-32-
18-95.w82-127.abo.wanadoo.fr[82.127.57.95]
Jun 5 16:22:09 cyrus postfix/smtpd[26816]: C92D967DA4: client=LSt-Amand-
152-32-18-95.w82-127.abo.wanadoo.fr[82.127.57.95], sasl_method=PLAIN,
sasl_username=lambda
Jun 5 16:22:10 cyrus postfix/cleanup[26811]: C92D967DA4: message-
id=<4847F690.1020505@eme-enseignement.fr>
Jun 5 16:22:10 cyrus postfix/qmgr[26780]: C92D967DA4: from=, size=590,
nrcpt=1 (queue active)
Jun 5 16:22:10 cyrus postfix/smtpd[26813]: connect from
localhost[127.0.0.1]
Jun 5 16:22:10 cyrus postfix/smtpd[26813]: 1CC6167DA5:
client=localhost[127.0.0.1]
Jun 5 16:22:10 cyrus postfix/smtpd[26816]: disconnect from LSt-Amand-152-
32-18-95.w82-127.abo.wanadoo.fr[82.127.57.95]
Jun 5 16:22:10 cyrus postfix/cleanup[26811]: 1CC6167DA5: message-
id=<4847F690.1020505@eme-enseignement.fr>
Jun 5 16:22:10 cyrus postfix/smtpd[26813]: disconnect from
localhost[127.0.0.1]
Jun 5 16:22:10 cyrus amavis[25917]: (25917-05) Passed CLEAN,
[82.127.57.95] [82.127.57.95] -> , Message-ID: <4847F690.1020505@eme-
enseignement.fr>, mail_id: l3UEHAo7xlK9, Hits: -, queued_as: 1CC6167DA5,
130 ms
Jun 5 16:22:10 cyrus postfix/smtp[26812]: C92D967DA4: to=,
relay=127.0.0.1[127.0.0.1]:10024, delay=0.46, delays=0.32/0/0.01/0.13,
dsn=2.6.0, status=sent (250 2.6.0 Ok, id=25917-05, from
MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 1CC6167DA5)
Jun 5 16:22:10 cyrus postfix/qmgr[26780]: C92D967DA4: removed
Jun 5 16:22:10 cyrus postfix/qmgr[26780]: 1CC6167DA5: from=, size=1038,
nrcpt=1 (queue active)
Jun 5 16:22:20 cyrus postfix/smtp[26818]: 1CC6167DA5: to=,
relay=mail.grenouille.com[213.186.35.33]:25, delay=10,
delays=0.07/0.01/6.8/3.6, dsn=2.0.0, status=sent (250 ok 1212675740 qp
4369)
Jun 5 16:22:20 cyrus postfix/qmgr[26780]: 1CC6167DA5: removed
Bilan
Nous disposons d'une solution tout fait exploitable, si nous avons peu de comptes grer et
un seul domaine de messagerie. Dovecot est un serveur POP/IMAP de bonne facture et qui
peut aller bien au del de ce que nous lui avons demand ici. Au train o vont les choses, il
pourra sans doute rapidement rivaliser avec le serveur Cyrus que nous verrons dans la
solution suivante.
Nous aurions galement pu utiliser courier-imap. Il est plus lourd que Dovecot et ne se
justifie pas forcment ici, mais la solution n'est pas carter.
Il nous manque juste la gestion de comptes de messagerie qui ne ncessite pas de crer un
compte unix, et la possibilit de grer plusieurs domaines de messagerie. C'est ce que nous
allons faire dans le chapitre suivant.
A propos du MDA
Nous avons utilis ici un MDA interne Postfix. Nous pouvons aussi utiliser un MDA plus
configurable, comme procmail, qui permet par exemple de crer des rgles de filtrage
personnalises pour chaque compte. Procmail peut ainsi dposer directement les messages
dans des dossiers IMAP ddis en fonctions de critres de tri. Il suffit dans ce cas d'ajouter la
ligne :
mailbox_command = /usr/bin/procmail -a "$EXTENSION"
notre main.cf, puis d'crire des fichiers .procmailrc dans le rpertoire des utilisateurs.
Procmail dispose d'un langage de script trs puissant, mais peu intuitif.
Dovecot propose galement un MDA. Dans un cas comme celui que nous traitons ici (sans
domaines virtuels), nous aurions pu nous en servir en plaant dans main.cf la ligne :
mailbox_command = /usr/lib/dovecot/deliver
Dovecot dispose d'un plug-in qui permet alors de filtrer les messages au niveau du MDA en
utilisant le langage sieve
1)
.
Si c'est ce MDA (nomm aussi LDA dans la documentation Dovecot) qui est utilis, quelques
ajouts doivent tre faits dans le fichier de configuration de Dovecot.
Quelques paramtres spcifiques la configuration de deliver :
protocol lda {
postmaster_address = postmaster@nain-t.net
mail_plugin_dir = /usr/lib/dovecot/modules/lda
sendmail_path = /usr/lib/sendmail
mail_plugins = cmusieve
}
Et une ligne pour spcifier deliver que l'on souhaite utiliser le format Maildir (en effet, la
ligne qui le spcifie dans main.cf de Postfix ne sert plus rien puisque l'on utilise plus le
MDA de Postfix) :
mail_location = maildir:~/Maildir
En ce qui concerne l'emploi de sieve, Dovecot distribu par Debian ne permet pas
l'utilisateur de placer ses scripts autrement que par FTP ou SSH pour l'instant. Sur ce point,
nous verrons que dans l'tat actuel (au 26 juin 2008), Cyrus conserve une longueur d'avance.
1)
Sieve est un langage normalis, plus facilement comprhensible que celui de procmail, mais
moins puissant. Les MDA qui l'implmentent compltement proposent un service qui permet
l'utilisateur de placer facilement ses rgles de tri sur le serveur, en utilisant par exemple un
webmail comme Squirrelmail
Postfix, Dovecot, etc.
Notre solution Postfix + Dovecot fonctionne, mais ne gre qu'un seul domaine de messagerie.
Les utilisateurs titulaires d'un compte de messagerie doivent disposer d'un compte Unix.
Mme sans shell, cette solution devient vite lourde grer.
Nous allons ici ajouter la gestion de comptes virtuels, sans aucun rapport donc avec les
comptes Unix. Il y a plusieurs faons de raliser cette opration, la faon la plus souple tant
sans doute de stocker les informations de ces comptes dans une base de donnes ou un
annuaire.
Nous ferons ici appel MySQL et une interface de gestion libre : Postfix Admin.
Pour le reste, continuons avec Postfix et Dovecot.
Nous allons utiliser les possibilits qu'offre Postfix pour la gestion des domaines virtuels, en
s'appuyant sur une base de donnes MySQL.
Dovecot s'appuiera galement sur cette base, proposera un serveur SASL pour Postfix comme
nous l'avons vu dans le chapitre prcdent, mais il ira chercher les informations dans MySQL
et non pas dans les comptes Unix.
Nous utiliserons le MDA de Dovecot, pour profiter du langage Sieve pour le filtrage des
messages.
Postfix Admin
Postfix Admin est une interface en PHP qui permet principalement de grer une base de
donnes qui contiendra toutes les informations ncessaires la maintenance de comptes
virtuels. Postfix Admin n'impose pas de serveur POP/IMAP spcifique. Dovecot ou Courier-
imap Pourront tre utiliss, nous continuerons avec Dovecot.
Postfix Admin semble activement maintenu. La version utilise ici est la 2.2.0 d'avril 2008.
Bien que ne faisant ce jour (17 juiller 2008) pas partie des distributions Debian, il existe sur
le site officiel du projet un paquet Debian que nous allons utiliser. Les dpendances sont
minimes : Dpend: apache2, libapache2-mod-php5 ou php5-cgi ou php5, Mysql-server.
Autant de composants dont nous aurons besoin par ailleurs.
Installation
Suivant les rgles Debian, le logiciel s'installe dans /usr/share/postfixadmin, installe dans
/etc/apache2/conf.d un fichier nomm postfixadmin rduit sa plus simple expression :
# BEGIN FOR POSTFIXADMIN
Alias /postfixadmin /usr/share/postfixadmin
# END FOR POSTFIXADMIN
Et dans /etc/postfixadmin le fichier config.inc.php qu'il conviendra de modifier
manuellement, mais avant tout, il faut lire /usr/share/doc/postfixadmin/INSTALL.TXT
Cration de la base
Nous allons commencer par crer la base de donnes et l'utilisateur qui va avec :
CREATE DATABASE vmail;
CREATE USER 'vmail'@'localhost' IDENTIFIED BY 'epikoi';
GRANT ALL PRIVILEGES ON `vmail` . * TO 'vmail'@'localhost';
Configuration
Le fichier /etc/postfixadmin/config.inc.php est assez long, bien document et il faut le
lire jusqu'au bout
Voici pour fixer les ides, une version dbarrasse de ses commentaires. Ce qui est surlign
est particulirement important, mais encore une fois, prenez le temps de lire (et
ventuellement modifier) ce fichier jusqu'au bout.
<?php
if (ereg ("config.inc.php", $_SERVER['PHP_SELF']))
{
header ("Location: login.php");
exit;
}

$CONF['configured'] = true;
$CONF['postfix_admin_url'] = 'http://cyrus.nain-t.net/postfixadmin';
$CONF['postfix_admin_path'] = '/usr/share/postfixadmin';
$CONF['default_language'] = 'fr';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'vmail';
$CONF['database_password'] = 'epikoi';
$CONF['database_name'] = 'vmail';
$CONF['database_prefix'] = '';
$CONF['database_tables'] = array (
'admin' => 'admin',
'alias' => 'alias',
'config' => 'config',
'domain' => 'domain',
'domain_admins' => 'domain_admins',
'log' => 'log',
'mailbox' => 'mailbox',
'vacation' => 'vacation',
'vacation_notification' => 'vacation_notification',
);

$CONF['admin_email'] = 'sysop@nain-t.net';
$CONF['smtp_server'] = 'localhost';
$CONF['smtp_port'] = '25';
$CONF['encrypt'] = 'md5crypt';
$CONF['min_password_length'] = 5;
$CONF['generate_password'] = 'NO';
$CONF['show_password'] = 'yes';
$CONF['page_size'] = '10';
$CONF['default_aliases'] = array (
'abuse' => 'sysop@nain-t.net',
'hostmaster' => 'sysop@nain-t.net',
'postmaster' => 'sysop@nain-t.net',
'webmaster' => 'sysop@nain-t.net'
);

$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '2000';
$CONF['quota'] = 'NO';
$CONF['quota_multiplier'] = '1024000';
$CONF['transport'] = 'NO';
$CONF['transport_options'] = array (
'virtual', // for virtual accounts
'local', // for system accounts
'relay' // for backup mx
);

$CONF['transport_default'] = 'virtual';
$CONF['vacation'] = 'NO';
$CONF['vacation_domain'] = 'autoreply.nain-t.net';
$CONF['vacation_control'] ='YES';
$CONF['vacation_control_admin'] = 'YES';
$CONF['alias_control'] = 'NO';
$CONF['alias_control_admin'] = 'NO';
$CONF['special_alias_control'] = 'NO';
$CONF['alias_goto_limit'] = '0';
$CONF['backup'] = 'YES';
$CONF['sendmail'] = 'YES';
$CONF['logging'] = 'YES';
$CONF['fetchmail'] = 'YES';
$CONF['fetchmail_extra_options'] = 'NO';
$CONF['show_header_text'] = 'NO';
$CONF['header_text'] = ':: Postfix Admin ::';
$CONF['user_footer_link'] = "http://cyrus.nain-t.net/postfixadmin";
$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'Return to nain-t.net';
$CONF['footer_link'] = 'http://nain-t.net';
$CONF['welcome_text'] = <<


Mise feu
Il faut maintenant, aprs avoir demand l'Apache de relire sa configuration, ce que le script
postinstall du paquet postfixadmin n'a pas fait, d'aller sur l'URL de votre installation. Ici :
http://cyrus.nain-t.net/postfixadmin/setup.php
De corriger les ventuels erreurs constates, de crer le compte du super administrateur et
enfin de renommer ou dtruire le fichier /usr/share/postfixadmin/setup.php.
Postfixadmin devrait tre en tat de fonctionner, hormis l'envoi de messages puisque nous
n'avons pas encore configur Postfix en fonction.

Base de donnes
La base de donnes a t construite lors du setup . Elle contient les tables admin, alias,
config, domain, domain_admins, fetchmail, log, mailbox, vacation et vacation_notification.
Crons le domaine nain-t.net et le compte sysop@nain-t.net et regardons un peu :
mysql> select * from alias;
+-----------------------+------------------+------------+------------------
---+---------------------+--------+
| address | goto | domain | created
| modified | active |
+-----------------------+------------------+------------+------------------
---+---------------------+--------+
| abuse@nain-t.net | sysop@nain-t.net | nain-t.net | 2008-07-15
16:15:31 | 2008-07-15 16:15:31 | 1 |
| hostmaster@nain-t.net | sysop@nain-t.net | nain-t.net | 2008-07-15
16:15:31 | 2008-07-15 16:15:31 | 1 |
| postmaster@nain-t.net | sysop@nain-t.net | nain-t.net | 2008-07-15
16:15:31 | 2008-07-15 16:15:31 | 1 |
| webmaster@nain-t.net | sysop@nain-t.net | nain-t.net | 2008-07-15
16:15:31 | 2008-07-15 16:15:31 | 1 |
| sysop@nain-t.net | sysop@nain-t.net | nain-t.net | 2008-07-15
16:16:01 | 2008-07-15 16:16:01 | 1 |
+-----------------------+------------------+------------+------------------
---+---------------------+--------+
Dans la table alias nous retrouvons les alias dfinis dans la configuration, et sysop@nain-
t.net qui pointe sur lui-mme.
mysql> select * from mailbox;
+------------------+------------------------------------+------------------
+-------------------+-------+------------+---------------------+-----------
----------+--------+
| username | password | name
| maildir | quota | domain | created | modified
| active |
+------------------+------------------------------------+------------------
+-------------------+-------+------------+---------------------+-----------
----------+--------+
| sysop@nain-t.net | $1$b05611fa$K.98vXKRWNG5Xr97dlkcp1 | sysop
| nain-t.net/sysop/ | 0 | nain-t.net | 2008-07-15 16:16:01 | 2008-07-15
16:16:01 | 1 |
+------------------+------------------------------------+------------------
+-------------------+-------+------------+---------------------+-----------
----------+--------+
Dans la table mailbox nous trouvons pas mal de choses :
username contient l'adresse du compte ;
name contient la partie gauche de l'adresse ;
domain contient le nom du domaine virtuel (partie droite de l'adresse) ;
password contient le mot de passe chiffr en MD5-CRYPT ;
maildir contient le chemin relatif du rpertoire Maildir de l'utilisateur.
mysql> select * from domain;
+------------+----------------+---------+-----------+----------+-------+---
--------+----------+---------------------+---------------------+--------+
| domain | description | aliases | mailboxes | maxquota | quota |
transport | backupmx | created | modified | active |
+------------+----------------+---------+-----------+----------+-------+---
--------+----------+---------------------+---------------------+--------+
| ALL | | 0 | 0 | 0 | 0 |
NULL | 0 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | 1 |
| nain-t.net | Domaine public | 0 | 0 | 0 | 0 |
virtual | 0 | 2008-07-15 16:15:31 | 2008-07-15 16:15:31 | 1 |
+------------+----------------+---------+-----------+----------+-------+---
--------+----------+---------------------+---------------------+--------+
La table ''domain'' contient essentiellement la liste des domaines virtuels
crs.
Configurer Dovecot
Avertissement
Dovecot offre la particularit d'avoir un fichier de configuration particulirement mouvant.
D'une version l'autre, des paramtres apparaissent et disparaissent rgulirement. Ceci a
beau tre normal, le logiciel est jeune et la version 1.0 ne date que d'avril 2007, en est la
version 1.1.1 le 22 juin 2008, et n'est distribu qu'en version 1.0rc15 dur Debian Etch.
Esprons que les choses vont maintenant se stabiliser.
La configuration annonce ici n'est donc rpute valable que pour Dovecot 1.0 rc15.
Par rapport la configuration vue au chapitre prcdent, nous n'avons pas normment de
modifications apporter. Dovecot devra principalement :
trouver les utilisateurs et les identifier partir des informations de la base de donnes
et non plus du fichier /etc/passwd ;
il devra galement trouver l'emplacement du rpertoire Maildir de chaque compte dans
la base de donnes ;
il devra offrir Postfix un transport non plus local mais virtuel.
Prparatifs
Commenons par crer un groupe et un utilisateur vmail, sans shell, qui disposera d'un
rpertoire /home/virtual/mail. Les UID et GID = 500 peuvent prendre une autre valeur
disponible. Nous aurons besoin de cette valeur plus tard.
groupadd -g 500 vmail
useradd -g vmail -u 500 vmail -d /home/virtual/mail -s /bin/false -m
Accs la base
Il y a dans /etc/dovecot un fichier abondamment document qui s'appelle dovecot-
sql.conf. Nous devons commencer par celui-ci.
Fichier /etc/dovecot/dovecot-sql.conf dbarrass de ses commentaires :
driver = mysql
connect = host=localhost dbname=vmail user=vmail password=epikoi
default_pass_scheme = MD5
password_query = SELECT password FROM mailbox WHERE username = '%u'
1. driver permet d'indiquer le type de la base.
2. connect donne les indications ncessaires pour se connecter cette base.
3. default_pass_scheme indique le mode de chiffrement des mots de passe. MD5 pour
la version 1.0rc15, mais attention, c'est MD5-CRYPT partir de la version 1.0rc16 et
jusqu' la prochaine fois.
4. password_query permet de rcuprer le mot de passe de l'utilisateur %u.
Dovecot
Le fichier dovecot.conf, dbarrass de ses commentaires, devrait ressembler ceci :
protocols = imap imaps pop3 pop3s
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/virtual/mail/%d/%n/Maildir

protocol imap {
}

protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
postmaster_address = sysop@nain-t.net
hostname = cyrus.nain-t.net
mail_plugin_dir = /usr/lib/dovecot/modules/lda
sendmail_path = /usr/lib/sendmail
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = cmusieve
}
auth default {
mechanisms = plain
passdb pam {
}
passdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
userdb passwd {
}
userdb static {
args = uid=vmail gid=vmail home=/home/virtual/mail/%d/%n
}

user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
group = vmail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = vmail
}
}
}
dict {
}
plugin {
}
Nous avons essentiellement ajout ce qu'il fallait pour que Dovecot sache reconstituer le
chemin absolu des Maildir et utilise les requtes SQL dcrites dans dovecot-sql.conf pour
trouver le mot de passe.
Le paragraphe userdb static permet de dfinir de faon statique (c'est notre mode de
fonctionnement) les UID et GID de l'utilisateur virtuel (vmail), ainsi qu'un rpertoire home.
Notez que nous aurons ainsi :
le rpertoire Maildir, celui o les messages vont venir se stocker, dfini comme
/home/virtual/mail/%d/%n/Maildir ;
le rpertoire home du compte sera quant lui /home/virtual/mail/%d/%n, ce qui est
une structure similaire celle que nous avions avec des vrais comptes Unix.
Le paragraphe master dans socket listen dfinit un socket qui sera ncessaire par la
suite, lorsque nous utiliserons le deliver de Dovecot pour le transport virtuel.
Vrifications
Nous devirons dj vrifier que l'utilisateur sysop@nain-t.net peut se connecter en IMAP et
tre authentifi :
# telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Dovecot ready.
10 login sysop@nain-t.net epikoi
10 OK Logged in.
20 logout
* BYE Logging out
20 OK Logout completed.
Connection closed by foreign host.
Et dans les logs /var/log/mail.info :
Jul 15 18:30:22 cyrus dovecot: Dovecot v1.0.rc15 starting up
Jul 15 18:30:23 cyrus dovecot: auth-worker(default): mysql: Connected to
localhost (vmail)
Jul 15 18:30:45 cyrus dovecot: ssl-build-param: SSL parameters regeneration
completed
Jul 15 18:31:05 cyrus dovecot: imap-login: Login: user=<sysop@nain-t.net>,
method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, secured
Jul 15 18:31:50 cyrus dovecot: IMAP(sysop@nain-t.net): Disconnected: Logged
out
Une bonne chose de faite.
Allons faire un tour dans /home/virtual/mail :
cyrus:/home/virtual/mail# ls -l
total 0
drwx------ 3 vmail vmail 18 2008-07-15 18:40 nain-t.net
Ce rpertoire, c'est Dovecot qui l'a cr lorsque sysop s'est connect pour la premire fois. Il
est fort ce Dovecot. Mais voyons plus loin :
cyrus:/home/virtual/mail# cd nain-t.net/
cyrus:/home/virtual/mail/nain-t.net# ls -l
total 0
drwx------ 5 vmail vmail 36 2008-07-15 18:40 sysop
Et encore plus loin :
cyrus:/home/virtual/mail/nain-t.net# cd sysop/Maildir
cyrus:/home/virtual/mail/nain-t.net/sysop/Maildir# ls -l
total 0
drwx------ 2 vmail vmail 6 2008-07-15 18:40 cur
drwx------ 2 vmail vmail 6 2008-07-15 18:40 new
drwx------ 2 vmail vmail 6 2008-07-15 18:40 tmp
Toute la structure a t construite. Notez que le tout appartient vmail.
Configurer Postfix
Pour Postfix, a va tre un peu plus compliqu. Nous avons vu jusqu'ici des configurations
assez simples de Postfix, principalement grce ses paramtres par dfaut. La liste des
paramtres de Postfix est assez impressionnante. Pour s'en convaincre, un postconf montrera
tous ces paramtres, avec leurs valeurs par dfaut si elles n'ont pas t surcharges dans
main.cf. Il y a actuellement pas moins de 525 paramtres
Nous allons surtout nous intresser aux paramtres spcifiques la configuration virtuelle .
En effet Postfix est conu pour grer les domaines virtuels. Il n'y a que 15 paramtres
spcifiques, qui commencent tous par le mot virtual :
virtual_alias_domains = $virtual_alias_maps
virtual_alias_expansion_limit = 1000
virtual_alias_maps = $virtual_maps
virtual_alias_recursion_limit = 1000
virtual_destination_concurrency_limit =
$default_destination_concurrency_limit
virtual_destination_recipient_limit = $default_destination_recipient_limit
virtual_gid_maps =
virtual_mailbox_base =
virtual_mailbox_domains = $virtual_mailbox_maps
virtual_mailbox_limit = 51200000
virtual_mailbox_lock = fcntl
virtual_mailbox_maps =
virtual_minimum_uid = 100
virtual_transport = virtual
virtual_uid_maps =
virtual_uid_maps et virtual_gid_maps reprsentent respectivement l'UID et le
GID de l'utilisateur qui doit accder ces botes virtuelles, vmail (500:500) dans notre
cas ;
virtual_minimum_uid est l'UID minimum utiliser lorsque l'on utilise plusieurs
identits pour la remise du courrier. Nous ne ferons pas aussi compliqu, tous nos
comptes virtuels sont grs par l'utilisateur vmail et la valeur 500 conviendra
parfaitement ;
virtual_transport indique le LDA (MDA) utilis pour la remise du courrier virtuel.
Comme pour la remise locale, Postfix possde un agent de livraison, mais nous
utiliserons celui de Dovecot ;
virtual_mailbox_base indique la base du chemin d'accs aux rpertoires des
comptes virtuels. Chez nous : /home/virtual/mail ;
virtual_mailbox_domain donnera la liste des domaines virtuels grs, rcuprer
dans MySQL ;
virtual_mailbox_maps fournit le chemin relatif au Maildir ( ajouter
virtual_mailbox_base) rcuprer dans MySQL ;
virtual_alias_maps, les alias, rcuprer dans MySQL ;
Postfix et MySQL
Pour que Postfix puisse causer MySQL et rciproquement, il y a plusieurs choses faire :
apprendre Postfix le langage SQL ;
trouver un lieu o les deux interlocuteurs peuvent communiquer. Postfix est en cage et
MySQL non. Il y a trois faons de contourner ce problme :
o placer le socket Unix de MySQL dans la cage de Postfix, mais ce n'est pas une
trs bonne solution. MySQL ne communiquera pas qu'avec Postfix ;
o utiliser non pas un socket Unix mais un socket rseau. a fonctionne, mais
peut-tre pas de faon aussi rapide qu'un socket Unix ;
o utiliser le service proxy de Postfix, qui est justement l pour permettre de
passer des informations entre la cage de Postfix et le reste du systme.
Les requtes SQL
Tout d'abord, il faut installer le paquet postfix-mysql
aptitude install postfix-mysql
Ensuite, il faut rdiger des fichiers qui permettront Postfix d'interroger MySQL sur les
domaines, les alias et les boites aux lettres qu'il a en charge.
Les domaines virtuels
Dans la table domains nous avons la liste des domaines virtuels grer. Postfixadmin prvoit
divers drapeaux :
l> select * from domain;
+------------+----------------+---------+-----------+----------+-------+---
--------+----------+---------------------+---------------------+--------+
| domain | description | aliases | mailboxes | maxquota | quota |
transport | backupmx | created | modified | active |
+------------+----------------+---------+-----------+----------+-------+---
--------+----------+---------------------+---------------------+--------+
| ALL | | 0 | 0 | 0 | 0 |
NULL | 0 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | 1 |
| nain-t.net | Domaine public | 0 | 0 | 0 | 0 |
virtual | 0 | 2008-07-15 16:15:31 | 2008-07-15 16:15:31 | 1 |
+------------+----------------+---------+-----------+----------+-------+---
--------+----------+---------------------+---------------------+--------+
backupmx permet de savoir si le serveur doit agir pour ce domaine en tant que
destination (valeur 0) ou en tant que relais, c'est dire en MX de backup (valeur 1)
;
active permet de dsactiver (valeur 0) un domaine sans pour autant le dtruire.
Nous crons un fichier /etc/postfix/db/mysql_virtual_domains_maps.cf qui permettra
Postfix d'interroger MySQL sur ce point et qui sera de la forme :
user = vmail
password = epikoi
hosts = localhost
dbname = vmail
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '0' and
active = '1'
Les alias
De la mme manire, crons un fichier /etc/postfix/db/mysql_virtual_alias_maps.cf
dont le contenu sera le suivant :
user = vmail
password = epikoi
hosts = localhost
dbname = vmail
query = SELECT goto FROM alias WHERE address='%s' and active = '1'
Les boites aux lettres
Enfin, les chemins d'accs aux rpertoires Maildir. Un fichier
/etc/postfix/db/mysql_virtual_mailbox_maps.cf :
user = vmail
password = epikoi
hosts = localhost
dbname = vmail
query = SELECT CONCAT(maildir, 'Maildir/') FROM mailbox WHERE username='%s'
and active = '1'
le proxy de Postfix
Le service proxy de Postfix s'utilise assez simplement. Il faut cependant l'informer des
lectures de paramtres qu'il doit prendre en charge. Commenons par voir quelle est sa
configuration par dfaut :
proxy_read_maps = $local_recipient_maps,
$mydestination,
$virtual_alias_maps,
$virtual_alias_domains,
$virtual_mailbox_maps,
$virtual_mailbox_domains,
$relay_recipient_maps,
$relay_domains,
$canonical_maps,
$sender_canonical_maps,
$recipient_canonical_maps,
$relocated_maps,
$transport_maps $mynetworks
Nous allons donc maintenant modifier dans /etc/postfix/main.cf les trois paramtres qui
nous concernent :
virtual_alias_maps =
proxy:mysql:/etc/postfix/db/mysql_virtual_alias_maps.cf
virtual_mailbox_domains =
proxy:mysql:/etc/postfix/db/mysql_virtual_domains_maps.cf
virtual_mailbox_maps =
proxy:mysql:/etc/postfix/db/mysql_virtual_mailbox_maps.cf
Sans oublier les UID et GID de l'utilisateur vmail :
virtual_minimum_uid = 500
virtual_uid_maps = static:500
virtual_gid_maps = static:500
Ni la partie commune du chemin d'accs aux Maildirs :
virtual_mailbox_base = /home/virtual/mail
Vrification
Nous allons utiliser l'agent de livraison virtual de Postfix pour faire un essai. C'est possible
avec Dovecot. virtual est mme capable de crer un Maildir qui n'existe pas encore.
Nous envoyons un message sysop@nain-t.net :
~# mail sysop@nain-t.net
Subject: test postfix virtuel
c'est bon
.
Cc:
Tout en observant les logs :
Jul 16 10:29:02 cyrus postfix/pickup[2953]: F186C4006BF: uid=0 from=<root>
Jul 16 10:29:02 cyrus postfix/cleanup[2982]: F186C4006BF: message-
id=<20080716082901.F186C4006BF@cyrus.nain-t.net>
Jul 16 10:29:02 cyrus postfix/qmgr[2954]: F186C4006BF:
from=<root@cyrus.nain-t.net>, size=320, nrcpt=1 (queue active)
Jul 16 10:29:05 cyrus postfix/smtpd[2990]: connect from
localhost[127.0.0.1]
Jul 16 10:29:05 cyrus postfix/smtpd[2990]: 609494012E5:
client=localhost[127.0.0.1]
Jul 16 10:29:05 cyrus postfix/cleanup[2982]: 609494012E5: message-
id=<20080716082901.F186C4006BF@cyrus.nain-t.net>
Jul 16 10:29:05 cyrus postfix/smtpd[2990]: disconnect from
localhost[127.0.0.1]
Jul 16 10:29:05 cyrus amavis[2137]: (02137-02) Passed CLEAN,
<root@cyrus.nain-t.net> -> <sysop@nain-t.net>, Message-ID:
<20080716082901.F186C4006BF@cyrus.nain-t.net>, mail_id: z4aQN+eLCjhF, Hits:
0.43, queued_as: 609494012E5, 3384 ms
Jul 16 10:29:05 cyrus postfix/smtp[2986]: F186C4006BF: to=<sysop@nain-
t.net>, relay=127.0.0.1[127.0.0.1]:10024, delay=3.6,
delays=0.21/0.03/0.01/3.4, dsn=2.6.0, status=sent (250 2.6.0 Ok, id=02137-
02, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 609494012E5)
Jul 16 10:29:05 cyrus postfix/qmgr[2954]: F186C4006BF: removed
Jul 16 10:29:05 cyrus postfix/qmgr[2954]: 609494012E5:
from=<root@cyrus.nain-t.net>, size=763, nrcpt=1 (queue active)
Jul 16 10:29:05 cyrus postfix/virtual[2992]: 609494012E5: to=<sysop@nain-
t.net>, relay=virtual, delay=0.31, delays=0.15/0.07/0/0.08, dsn=2.0.0,
status=sent (delivered to maildir)
Jul 16 10:29:05 cyrus postfix/qmgr[2954]: 609494012E5: removed
Et nous devons retrouver le message sa place :
:~# cd /home/virtual/mail/nain-t.net/sysop/Maildir/new/
cyrus:/home/virtual/mail/nain-t.net/sysop/Maildir/new# ls
1216196945.V305I3400083M657329.cyrus
cyrus:/home/virtual/mail/nain-t.net/sysop/new# cat
1216196945.V305I3400083M657329.cyrus
Return-Path: <root@cyrus.nain-t.net>
X-Original-To: sysop@nain-t.net
Delivered-To: sysop@nain-t.net
Received: from localhost (localhost [127.0.0.1])
by cyrus.nain-t.net (Postfix) with ESMTP id 609494012E5
for <sysop@nain-t.net>; Wed, 16 Jul 2008 10:29:05 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at cyrus.nain-t.net
Received: from cyrus.nain-t.net ([127.0.0.1])
by localhost (cyrus.nain-t.net [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id z4aQN+eLCjhF for <sysop@nain-t.net>;
Wed, 16 Jul 2008 10:29:02 +0200 (CEST)
Received: by cyrus.nain-t.net (Postfix, from userid 0)
id F186C4006BF; Wed, 16 Jul 2008 10:29:01 +0200 (CEST)
To: sysop@nain-t.net
Subject: test postfix virtuel
Message-Id: <20080716082901.F186C4006BF@cyrus.nain-t.net>
Date: Wed, 16 Jul 2008 10:29:01 +0200 (CEST)
From: root@cyrus.nain-t.net (root)

c'est bon
Transport dovecot
Le transport virtual fonctionne, mais avec, nous perdons quelques fonctionnalits propres
Dovecot :
l'utilisation de Sieve ;
la gestion des quotas, si nous dsirons la mettre en uvre. En effet, Postfix ne gre pas
les quotas, son auteur estimant que ce n'est pas aux MTA de le faire.
Dovecot, nous l'avons vu dans le chapitre prcdent, propose l'outil
/usr/lib/dovecot/deliver. Cet outil peut tre aussi bien utilis pour le transport local que
pour le transport virtuel. Il n'est d'ailleurs pas inutile et mme conseill de lire la
documentation de Dovecot ce sujet, ainsi que son intgration avec Postfix
Nous ajoutons donc dans /etc/postfix/master.cf les lignes suivantes :
#
# Dovecot deliver
#
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d
${recipient}
Et dans /etc/postfix/main.cf :
# Virtual transport Dovecot
dovecot_destination_recipient_limit = 1
virtual_transport = dovecot
Nous demandons Postfix de recharger sa configuration avec un postfix reload des
familles et nous essayons :
# mail sysop@nain-t.net
Subject: test transport virtuel dovecot
c'est encore bon
.
Cc:
Les logs :
Jul 16 11:07:13 janus postfix/pickup[3029]: C59184006BF: uid=0 from=
Jul 16 11:07:13 janus postfix/cleanup[3076]: C59184006BF: message-
id=<20080716090713.C59184006BF@janus.nain-t.net>
Jul 16 11:07:13 janus postfix/qmgr[3030]: C59184006BF: from=, size=337,
nrcpt=1 (queue active)
Jul 16 11:07:15 janus postfix/smtpd[3083]: connect from
localhost[127.0.0.1]
Jul 16 11:07:15 janus postfix/smtpd[3083]: 74FAA4000B3:
client=localhost[127.0.0.1]
Jul 16 11:07:15 janus postfix/cleanup[3076]: 74FAA4000B3: message-
id=<20080716090713.C59184006BF@janus.nain-t.net>
Jul 16 11:07:15 janus postfix/qmgr[3030]: 74FAA4000B3: from=, size=780,
nrcpt=1 (queue active)
Jul 16 11:07:15 janus amavis[2137]: (02137-03) Passed CLEAN, -> , Message-
ID: <20080716090713.C59184006BF@janus.nain-t.net>, mail_id: TmCa1TrEXu4h,
Hits: 0.626, queued_as: 74FAA4000B3, 1732 ms
Jul 16 11:07:15 janus postfix/smtp[3079]: C59184006BF: to=,
relay=127.0.0.1[127.0.0.1]:10024, delay=2, delays=0.17/0.03/0.01/1.7,
dsn=2.6.0, status=sent (250 2.6.0 Ok, id=02137-03, from
MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 74FAA4000B3)
Jul 16 11:07:15 janus postfix/qmgr[3030]: C59184006BF: removed
Jul 16 11:07:15 janus postfix/smtpd[3083]: disconnect from
localhost[127.0.0.1]
Jul 16 11:07:15 janus deliver(sysop@nain-t.net):
msgid=<20080716090713.C59184006BF@janus.nain-t.net>: saved mail to INBOX
Jul 16 11:07:15 janus postfix/pipe[3084]: 74FAA4000B3: to=, relay=dovecot,
delay=0.26, delays=0.09/0.02/0/0.15, dsn=2.0.0, status=sent (delivered via
dovecot service)
Jul 16 11:07:15 janus postfix/qmgr[3030]: 74FAA4000B3: removed
Le message est remis, avec dovecot, cette fois-ci, pour la livraison virtuelle.
Plus avec Dovecot
Dovecot peut tre complt par l'utilisation de plug-ins . Voir la page qui y est consacre.
Sieve
Si nous dsirons utiliser Sieve, il nous faut utiliser le plug-in cmusieve, que nous avons
d'ailleurs dj invoqu dans la configuration de Dovecot :
protocol lda {
postmaster_address = sysop@maison.mrs
hostname = janus.maison.mrs
mail_plugin_dir = /usr/lib/dovecot/modules/lda
sendmail_path = /usr/lib/sendmail
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = cmusieve
}
Mais ce n'est pas tout, il faut aussi que le compte virtuel dispose d'un home . Nous l'avons
dj fait aussi dans la configuration de Dovecot :
userdb static {
args = uid=vmail gid=vmail home=/home/virtual/mail/%d/%n
}
cmusieve va alors chercher un script sieve s'il existe, dans le fichier .dovecot.sieve, situ
dans le home du compte virtuel (ici, /home/virtual/mail/<domaine>/<utilisateur>).
Malheureusement, Dovecot n'implmente pas, du moins dans la version que nous utilisons, de
protocole ManageSieve, qui permettrait simplement l'utilisateur de charger ses scripts Sieve.
Lire la documentation de Dovecot ManageSieve Server pour avoir toutes les informations.
A moins de donner un accs ftp aux utilisateurs, ce sera donc l'administrateur de placer les
scripts En attendant la version 2.0 de Dovecot, moins de reconstruire un Dovecot patch.
Les quotas
Le problme des quotas est surtout pineux avec IMAP. Un peu moins avec POP si le client
ne choisit pas de garder une copie des messages sur le serveur.
Philosophie
Les quotas se grent galement au moyen d'un plug-in. Comme il s'agit d'un problme de
bord, personne ne sait exactement qui incombe la gestion de ces quotas. Est-ce le MTA, le
serveur POP/IMAP, le systme de fichiers du serveur ?
Wietse Zweitze Venema, le concepteur de Postfix, a une position tout fait claire : ce n'est
pas au MTA de le grer. D'autres MTA comme EXIM le font cependant. Le File System
doit savoir le faire, mais ici a se passe au niveau du systme d'exploitation et le client de
messagerie n'a pas accs aux informations du systme. C'est pourtant lui qui a besoin de
connaitre cette information, puisque c'est lui de grer son espace de stockage.
Que se passe-t-il lorsque l'espace rserv au stockage des mails est entirement occup ? Le
MDA (LDA) ne peut (le File System le lui interdit) ou ne doit (il a la consigne de grer
l'espace occup) pas accepter de prendre en charge de nouveaux messages.
1. Les nouveaux messages entrants doivent tre refuss par le MTA, en notifiant
l'expditeur.
2. Le destinataire doit tre inform, par un moyen ou un autre, que sa boite dborde.
Nous avons bel et bien au moins deux composants qui sont dans le coup, si ce n'est trois, avec
le File System.
Comment prvenir le destinataire que sa boite est pleine En lui envoyant un message ? Il
n'entrera pas dans la boite puisqu'elle est pleine Il faut donc anticiper un peu et envoyer des
alertes avant que a ne dborde.
Comment prvenir l'metteur du message de la non remise ?
1. soit le MTA gre directement ;
2. soit il reoit l'information du MDA qui gre le quota ;
3. soit il reoit l'information du MDA qui reoit l'information du File System.
Clairement, c'est si le MTA qui gre qu'il y a le moins d'intermdiaires, au moins du ct des
messages de notification.
O la mcanique en rajoute
La plupart des MUA grent de faon assez vilaine l'effacement des messages. Le chapitre sur
IMAP vous en dira plus sur la question. Bref rsum :
un message effac doit tre marqu comme tel, mais non dtruit. Il reste dans le
dossier o il a t effac ;
pour dtruire physiquement un message, il faut envoyer au serveur IMAP la
commande EXPUNGE. Les messages marqus comme effacs sont alors effectivement
dtruits par le File System.
La grande majorit des MUA utilise la corbeille (Trash) comme un dossier de classement :
le message effac est marqu comme effac (protocole oblige) ;
il est copi dans la corbeille.
L'effacement d'un message se traduit donc par l'augmentation du volume de donnes ! (sans
compter les MUA qui ne font jamais de expunge automatique. Voir l'astuce avec
Thunderbird).
Tout ceci se traduit pour l'utilisateur non spcialiste un pige dont il ne sait sortir. Sa boite est
pleine et comme elle est pleine, il ne peut plus effacer de messages par les moyens
habituellement utiliss.
Le plug-in
Le plug-in de Dovecot est relativement souple et non moins relativement phmre. La
lecture de sa documentation montre clairement qu'il n'est pas encore stabilis ( l'heure des
versions 1.x). Noua allons donc l'utiliser dans le cadre de la version 1.0pre15 dont nous
disposons.
Puisque nous sommes au format Maildir, nous utiliserons le standard Maildir++, qui permet
de fixer non seulement un espace de stockage maximum mais aussi un nombre maximum de
messages stocks. Nous n'utiliserons pas cette seconde limitation.
Au paragraphe plugin de dovecot.conf il faut ajouter ceci, en modifiant ventuellement
les valeurs :
plugin {
# 20 MB + 10000 messages quota limit
quota = maildir:storage=20480
}
Ceci fixera un quota par dfaut pour toutes les boites aux lettres soumises au quota. Nous
verrons qu'il est possible de surcharger ces valeurs individuellement. un storage=0 fera qu'il
n'y aura pas de quota.
De plus, il faut indiquer pour chaque protocole que l'on utilise le quota :
protocol imap {
mail_plugins = quota imap_quota
}

protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
mail_plugins = quota
}
protocol lda {
postmaster_address = sysop@maison.mrs
hostname = janus.maison.mrs
mail_plugin_dir = /usr/lib/dovecot/modules/lda
sendmail_path = /usr/lib/sendmail
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = cmusieve quota
}
Pour le protocole IMAP, imap_quota permet au MUA d'tre inform du taux d'occupation :

Pour surcharger les valeurs par dfaut, nous pouvons exploiter userdb, c'est dire notre base
de donnes. Postfixadmin a d'ailleurs prvu un champ spcifique dans la table mailbox :
mysql> select username, quota from mailbox;
+------------------+-------+
| username | quota |
+------------------+-------+
| sysop@nain-t.net | 0 |
+------------------+-------+
Nous devons dsormais lire toutes les informations de l'utilisateur dans la base. Autrement
dit, dans, dovecot.conf, le paragraphe :
userdb static {
args = uid=vmail gid=vmail home=/home/virtual/mail/%d/%n
}
Doit tre remplac par :
userdb sql {
args = /etc/dovecot/dovecot-sql.conf
}
Et donc, notre fichier dovecot-sql.conf va devoir tenir compte de cette nouvelle requte
qu'il faut ajouter :
user_query = SELECT CONCAT('/home/virtual/mail/',maildir, 'Maildir/') as
home, 500 AS uid, 500 AS gid,CONCAT('maildir:storage=', quota) as quota
FROM mailbox WHERE username = '%u'
CONCAT('/home/virtual/mail/',maildir, 'Maildir/') parce que la base
construite par postfixadmin ne contient que le chemin relatif du rpertoire de
l'utilisateur et qu'il faut indiquer le chemin absolu du rpertoire Maildir ;
CONCAT('maildir:storage=', quota) parce que la base ne contient que la valeur
nuprique, alors qu'il faut transmettre Dovecot la chane de paramtrage complte.
Postfixadmin et les quotas
Postfixadmin peut grer les valeurs de quotas dans la table mailbox. Cependant, dans un
souci de simplification probablement, la valeur saisie doit tre exprime en Mio
1)
et elle est
convertie (de faon approximative) en octets dans la base. Ainsi, lorsque nous mettons 4 dans
le formulaire de postfixadmin, celui-ci crit 4096000 dans la base. Comme le plug-in quota
demande des valeurs en Kio, notre requte SQL est donc revoir comme ceci :
user_query = SELECT CONCAT('/home/virtual/mail/',maildir, 'Maildir/') as
home, 500 AS uid, 500 AS gid, CONCAT('maildir:storage=', floor(quota/1000))
as quota FROM mailbox WHERE username = '%u'
Voil qui commence faire une belle requte.
1)
Mga octet informatique = 1024 Kio, le Kio tant lui-mme un Kilo octet informatique =
1024 octets
Bilan d'tape
Postfixadmin
Postfix Admin permet de crer simplement une base de donnes avec assez d'informations
pour raliser une gestion de domaines virtuels. Nous n'avons pas exploit la possibilit de
dfinir un domaine en backup , mais c'est facilement ralisable (voir plus bas). La gestion
des alias fonctionne, il est possible d'attribuer plusieurs cibles au mme alias, ce qui peut
permettre la cration de mini listes de diffusion.
Il est possible d'utiliser aussi bien Dovecot que Courier-imap pour le serveur POP/IMAP.
Si la configuration de PHP le permet, il est possible de lancer des scripts shell la cration de
comptes, la suppression de comptes et de domaines, de manire faire le mnage dans
le rpertoire /home/virtual/mail dans notre cas.
Il est enfin possible, lors de la cration de comptes, de crer automatiquement des dossiers
imap supplmentaires.
Dovecot
Dovecot est un serveur POP/IMAP trs prometteur, mais encore jeune et sa configuration
n'est pas encore compltement stabilise, ce qui oblige tre trs attentif en cas de mise
jour. La version vournie avec Debian Etch n'est qu'une release candidate , il est cependant
assez simple d'effectuer un rtro portage (backport) de la version v1.0.14, fournie dans Debian
Lenny. Dans ce cas, il faut bien sr recompiler le paquet source. Cette technique oblige
l'administrateur beaucoup de vigilance sur les publications de mises jour de scurit,
puisqu'elles ne seront plus prises en charge par apt. Dovecot est un logiciel qui, pour l'instant,
volue trop vite pour des distributions comme Debian.
Dovecot fournit un service SASL d'authentification pour Postfix, ce qui permet simplement
de grer les clients itinrants sur le port submission.
Enfin, Dovecot sait utiliser aussi bien une base de donnes SQL qu'un annuaire LDAP.
Bonus
En complment, la gestion des MX Backups pour certains domaines virtuels.
Postfixadmin met un drapeau dans la table domain qui permet de savoir si un domaine est une
destination finale ou un backup . Rappelez-vous :
# cat mysql_virtual_domains_maps.cf
user = vmail
password = epikoi
hosts = localhost
dbname = vmail
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '0' and
active = '1'
Il nous suffit de crer dans /etc/postfix/db/ un fichier mysql_relay_domains_maps.cf
trs semblable :
user = vmail
password = epikoi
hosts = localhost
dbname = vmail
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1' and
active = '1'
Et d'ajouter la ligne suivante dans notre main.cf :
relay_domains = $mydestination
proxy:mysql:/etc/postfix/db/mysql_relay_domains_maps.cf
Postfix, Cyrus, etc.
Pour passer l'tape suprieure, celle qui consiste pouvoir facilement grer :
plusieurs domaines de messagerie sur la mme structure ;
plusieurs centaines de comptes de messagerie ;
les alias ;
les redirections ;
d'autres choses encore
il va nous falloir quelque chose d'un peu plus sophistiqu. Nous allons voir pourquoi dans le
dtail, il est intressant de construire une structure qui dispose de :
1. une interface graphique un peu conviviale pour grer les domaines, les comptes, etc.
2. une base de donnes qui contienne toutes les informations concernant les comptes,
leur(s) alias, leur(s) redirection(s), les mots de passe associs aux comptes ;
3. un serveur POP et/ou IMAP capable de s'appuyer sur cette base pour authentifier les
clients, capable aussi de grer plusieurs domaines de messagerie ;
4. un MTA qui sache chercher les informations dont il a besoin dans cette base de
donnes, capable aussi de refiler simplement les messages destins aux comptes dont
nous avons la charge.
Ce qui existe
L'interface graphique
Il n'existe pas une infinit d'interfaces dans le monde libre. L'usage d'une telle interface n'est
certes pas une obligation, un jeu de scripts en ligne de commande peut parfaitement faire
l'affaire, mais dans le cas d'un wrapper en php par exemple, il faudra choisir le reste des
composants en fonction.
1. Qmailadmin, par exemple, imposera le choix de Qmail + Vpopmail + ezmlm. Ce peut
tre un bon choix, si l'on est satisfait par Qmail (voir ailleurs sur ce site) ;
2. Postfix.admin en PHP implique, comme son nom l'indique, l'emploi de Postfix, mais
aussi de MySQL et d'un serveur POP/IMAP comme Dovecot ou Courier. A voir si l'on
ne veut pas de Cyrus ;
3. Open-Xchange est bien plus qu'une simple interface de gestion de messagerie, il s'agit
d'une solution complte de travail collaboratif. Cette solution s'appuie sur Postfix,
MySQL et Cyrus pour la partie messagerie ;
4. Openmailadmin prsente un intrt certain, mais ncessite une version rcente de
PHP5 (Debian Lenny). Ce choix induit Postfix, MySQL et Cyrus, trs proche donc de
la solution adopte ici ;
5. Web-Cyradm est galement une interface graphique en php. Bien que ce projet ne
semble pas jouir d'une vitalit exemplaire, il offre les fonctionnalits ncessaires. Sa
licence GPL permettra aussi de l'adapter en toute libert chacun des besoins
spcifiques. Ce sera notre choix final.
Les bases de donnes
MySQL ne se prsente plus. Mais il est possible d'envisager l'emploi d'autres solutions,
comme PostgreSQL ou encore l'annuaire OpenLDAP.
Un annuaire LDAP n'est pas une chose facile grer. A moins de vouloir y centraliser
d'autres informations que celles rserves la messagerie, comme les comptes utilisateurs, les
carnets d'adresses etc. ce n'est sans doute pas la solution idale.
Serveurs POP et IMAP
Il en existe de nombreux. Les plus connus et aussi les plus utiliss sont probablement :
Dovecot, dj vu sur ce site dans le chapitre 020postfix2 . C'est sans doute un
excellent choix ;
Courier-imap fait partie de la suite courier-mta, il en est le constituant probablement
le plus employ. Idal avec Qmail et tout fait exploitable avec Postfix ;
Cyrus imap est une solution lourde mais riche. Il gre compltement les domaines et
tout l'archivage des messages. Il suffit d'indiquer au MTA comment lui transmettre les
messages locaux. De plus, Cyrus permet la mise en place de dossiers partags IMAP
et de serveurs de news. Ces composants sont surtout intressants dans le cadre du
travail collaboratif.
Les MTA
L encore il y a du choix :
Courier-mta. Je n'en connais que le composant Courier-imap et ne saurais comparer
cette solution aux autres ;
Qmail, expos ailleurs sur ce site. La stratgie de licence et de dveloppement adopte
par son auteur en fait une solution pnible maintenir. Dommage
Exim est le MTA propos par dfaut sur les distributions Debian. Il est hautement
configurable, mais pas trs simplement. Sa conception monolithique peut dplaire,
mais il n'est pas connu pour ses failles de scurit. Ce peut tre un choix judicieux ;
Postfix est certainement le MTA qui a la meilleure presse. Il est flexible, plutt
facilement configurable, monte bien en charge et son architecture lui permet d'avoir la
rputation d'une grande robustesse.
Laissons reposer Sendmail en paix. Il existe encore d'autres solutions, mais celles-ci sont
certainement les plus utilises.
Le choix propos
Soyons clairs. Le choix propos ici n'est pas forcment le meilleur. Nous l'avons vu, le
contexte, les gots personnels, les ventuelles volutions du systme peuvent amener
d'autres choix.
1. Cyrus est un serveur POP/IMAP de qualit, qui prsente de nombreuses possibilits,
des outils de maintenance efficaces, et, si nous envisageons d'voluer vers des
solutions de travail collaboratif comme Open Xchange, un choix pertinent ;
2. Postfix est un MTA de qualit, modulaire, relativement facile configurer, galement
choisi dans la solution Open Xchange ;
3. MySQL est une base de donnes rpute et facile maintenir ;
4. Web-cyradm est conu justement pour exploiter ces composants
Reste mettre tout ceci en pratique. Il nous faudra aussi quelques accessoires comme SASL,
PAM, TLS pour l'authentification et la scurisation. Egalement un Apache et les librairies PHP
pour l'interface d'administration.
Web-Cyradm
Nous sommes sur une Debian Etch (test aussi sur Lenny), dj pourvue de :
1. Apache-mpm-prefork (php oblige) version 2.2.3 ;
2. php5 version 5.2.0 ;
3. Mysql version 5.0.32.
Tout ceci est en tat de marche.
Web-cyradm utilise la variable LANGUAGE si elle est dfinie sur notre systme, pour choisir la
langue. Cette variable d'environnement n'est pas dfinie par dfaut sur Debian. Si nous
voulons un web-cyradm en franais, il faut ajouter la ligne :
LANGUAGE="fr_FR:fr:en_GB:en"
Dans le fichier /etc/environment. A noter que dans ce cas, il faudre utiliser la version trunk
de web-cyradm, que nous aurons plac quelque part sur notre machine (dans /var/www/wc
dans l'exemple, pour faire simple).
Attention. J'ai rencontr un problme avec la version svn-5.5 si la variable LANGUAGE est
dfinie. Elle fonctionne cependant mais en anglais seulement, si cette variable n'est pas
dfinie.
Cration de la base
Nous retrouvons dans /var/www/wc/scripts deux scripts SQL qui vont nous permettre de
crer la base de donnes MySQL. Notez qu'il y a aussi ce qu'il faut pour utiliser PostgreSQL).
insertuser_mysql.sql Va crer un utilisateur et une base de donnes pour notre systme de
messagerie. Il y a bien sr quelques modifications apporter de manire ne pas utiliser les
paramtres par dfaut :
le nom de la base ;
le nom de l'utilisateur qui manipulera cette base ;
le mot de passe de cet utilisateur.
use mysql;
# Cre l'utilisateur et son mot de passe, sans aucun droit en gnral
INSERT INTO user (Host, User, Password, Select_priv, Insert_priv,
Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv,
Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv,
Index_priv, Alter_priv) VALUES ('localhost', 'mail', PASSWORD('epikoi'),
'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N');

# Accorde l'utilisateur les droits ncessaires sur la base
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv,
Delete_priv, Create_priv, Drop_priv, Grant_priv, References_priv,
Index_priv, Alter_priv) VALUES ('localhost', 'mail', 'mail', 'Y', 'Y', 'Y',
'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y ');
flush privileges;

# Cre la base et l'utilisateur associ
create database mail;
Nous sommes rests trs imaginatifs, la base et l'utilisateur s'appellent mail, avec un mot de
passe dsormais classique : epikoi.
create_mysql.sql va construire les tables de la base et y mettre quelques informations
vitales (rendrez-vous la fin du script) :
# phpMyAdmin MySQL-Dump
# version 2.2.6
# http://phpwizard.net/phpMyAdmin/
# http://www.phpmyadmin.net/ (download page)
#
# Host: localhost
# Generation Time: Nov 04, 2002 at 01:44 AM
# Server version: 3.23.52
# PHP Version: 4.2.3
# Database : `mail`
# --------------------------------------------------------

#
# Table structure for table `accountuser`
#

CREATE TABLE accountuser (
username varchar(255) binary NOT NULL default '',
password varchar(50) binary NOT NULL default '',
prefix varchar(50) NOT NULL default '',
domain_name varchar(255) NOT NULL default '',
imap int(10) NOT NULL default '1',
pop int(10) NOT NULL default '1',
sieve int(10) NOT NULL default '1',
smtpauth int(10) NOT NULL default '1',
UNIQUE KEY username (username)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Table structure for table `adminuser`
#

CREATE TABLE adminuser (
username varchar(50) binary NOT NULL default '',
password varchar(50) binary NOT NULL default '',
type int(11) NOT NULL default '0',
SID varchar(255) NOT NULL default '',
home varchar(255) NOT NULL default '',
PRIMARY KEY (username)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Table structure for table `settings`
#

CREATE TABLE settings (
`username` varchar(50) binary NOT NULL default '',
`style` varchar(50) NOT NULL default 'default',
`maxdisplay` int(4) NOT NULL default '15',
`warnlevel` int(3) NOT NULL default '90',
PRIMARY KEY (username)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Table structure for table `alias`
#

CREATE TABLE alias (
alias varchar(255) NOT NULL default '',
dest longtext,
username varchar(50) NOT NULL default '',
status int(11) NOT NULL default '1',
PRIMARY KEY (alias)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Table structure for table `domain`
#

CREATE TABLE domain (
domain_name varchar(255) NOT NULL default '',
prefix varchar(50) NOT NULL default '',
maxaccounts int(11) NOT NULL default '20',
quota int(10) NOT NULL default '20000',
domainquota int(10) NOT NULL default '0',







transport varchar(255) NOT NULL default 'cyrus',
freenames enum('YES','NO') NOT NULL default 'NO',
freeaddress enum('YES','NO') NOT NULL default 'NO',
folders varchar(255) NOT NULL default '',
PRIMARY KEY (domain_name),
UNIQUE KEY prefix (prefix)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Table structure for table `domainadmin`
#

CREATE TABLE domainadmin (
domain_name varchar(255) NOT NULL default '',
adminuser varchar(255) NOT NULL default ''
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Table structure for table `search`
#

CREATE TABLE search (
search_id varchar(255) NOT NULL default '',
search_sql text NOT NULL,
perpage int(11) NOT NULL default '0',
timestamp timestamp(14) NOT NULL,
PRIMARY KEY (search_id),
KEY search_id (search_id)
) TYPE=MyISAM;
# --------------------------------------------------------

#
# Table structure for table `virtual`
#

CREATE TABLE virtual (
alias varchar(255) NOT NULL default '',
dest longtext,
username varchar(50) NOT NULL default '',
status int(11) NOT NULL default '1',
KEY alias (alias)
) TYPE=MyISAM;

CREATE TABLE log (
id int(11) NOT NULL auto_increment,
msg text NOT NULL,
user varchar(255) NOT NULL default '',
host varchar(255) NOT NULL default '',
time datetime NOT NULL default '2000-00-00 00:00:00',
pid varchar(255) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;

INSERT INTO adminuser (username, password) VALUES ('admin',
ENCRYPT('epikoi'));
INSERT INTO domainadmin (domain_name,adminuser) VALUES ('*','admin');
INSERT INTO accountuser (username, password) VALUES ('cyrus',
ENCRYPT('epikoi'));
INSERT INTO `settings` ( `username` , `style` , `maxdisplay` , `warnlevel`
) VALUES ( 'admin', 'default', '15', '90');

ALTER TABLE `log` ADD INDEX `idx_log_user` ( `user` );
Dans adminuser nous plaons ce qu'il faut pour pouvoir par la suite ouvrir une session sur
web-cyradm. Le couple admin/epikoi n'a aucun rapport avec un quelconque utilisateur de la
messagerie, c'est juste un loggin qui permet d'utiliser web-cyradm.
Dans accountuser nous crons cyrus/epikoi. Ce loggin va permettre l'administration de
cyrus. Il est en principe inconnu de tous, c'est une affaire entre web-cyradm et cyrus.
Bien entendu, ces loggins sont personnaliser avant de crer la base.
Il suffit maintenant de faire :
mysql -u root -p < insertuser_mysql.sql
pour crer l'utilisateur mail et sa base associe, puis
mysql mail -u mail -p < create_mysql.sql
pour peupler un minimum cette base.
Accs la base
web-cyradm pouvant utiliser aussi bien MySQL que PostgreSQL, le concepteur a utilis une
couche d'abstraction (hlas obsolte aujourd'hui), mais qui est pour l'instant encore disponible,
il s'agit de Pear::DB. Un :
aptitude install php-pear
pear install DB
Rsoudra le problme (avec le warning qui va bien), si vous avez bien entendu install ce
qu'il faut pour utiliser Pear.
Configuration de web-cyradm
Il faut encore configurer l'interface. Dans /var/www/wc/config, il y a un fichier
conf.php.dist, qu'il va falloir copier en conf.php et modifier quelque peu :
# The Cyrus login stuff
$CYRUS = array(
'HOST' => 'localhost',
'PORT' => 143,
'ADMIN' => 'cyrus',
'PASS' => 'epikoi'
);

/* DB_TYPE

Possible Values are:
o mysql
o pgsql

To operate a mailsystem with postgreSQL you will need a patch for
Postfix.

Other Databases need to be supported by PAM and postfix
*/

$DB = array(
'TYPE' => 'mysql',
'USER' => 'mail',
'PASS' => 'epikoi',
'PROTO' => 'unix', // set to "tcp" for TCP/IP
'HOST' => 'localhost',
'NAME' => 'mail'
);

$DB['DSN'] = sprintf('%s://%s:%s@%s+%s/%s', $DB['TYPE'], $DB['USER'],
$DB['PASS'], $DB['PROTO'],
$DB['HOST'], $DB['NAME']);

# Where should web-cyradm write its log to?
$LOG_DIR = "/var/log/web-cyradm/";

/* Log level
Possible values are (from quiet to verbose):
ERR - only internal errors
WARN - failed login, security violation
INFO - all login and logout
DEBUG - all possible information
*/
$LOG_LEVEL = "INFO";

# The default timeout in seconds for a session, after that you have to
login again
$SESS_TIMEOUT = 1000;

# The default quota sets the default quota for new accounts
$DEFAULT_QUOTA = 2000000;

# The default domain quota sets the quota for new domains
# 0 = No quota
$DEFAULT_DOMAIN_QUOTA = 0;

# On what quota level mark accounts on accounts list (in %)
$QUOTA_WARN_LEVEL = 90;

# Defines if passwords are encrypted or not.
# Valid Values:
# - plain 0 No encription is used
# - crypt 1 (shadow compatible encription)
# - mysql 2 (MySQL PASSWORD function)
# - md5 3 (MD5 digest)
$CRYPT = "crypt";

# web-cyradm is compatible with cyrus-imapd-2.0.16 (and earlier?)
# however, if you are using 2.1.x and wish to use email addresses
# with .'s in them such as 'john.doe@mydomain.com' you can set this
# option DOMAIN_AS_PREFIX to '1'. NOTE: you also have to add this
# line to your imapd.conf file:
#### imapd.conf: ####
#unixhierarchysep: yes

####
$DOMAIN_AS_PREFIX = 1;


# EXPERIMENTAL
# If you are using cyrus imap 2.2.x and wish to use usernames like
# email addresses you can set option DOMAIN_AS_PREFIX to '1' and
# FQUN to '1'. NOTE: you also have to add this lines to your
# imapd.conf file:
#### imapd.conf: ####
# unixhierarchysep: yes
# virtdomains: yes
####
$FQUN = 1;

# At the moment, web-cyradm supports two methods of password change:
# - through sql
# - poppassd
# sql is the default
$PASSWORD_CHANGE_METHOD = "sql";

# Turn up error reporting level. This overrides settings in your php.ini
#
# E_ALL - All errors and warnings
# E_ERROR - fatal run-time errors
# E_WARNING - run-time warnings (non-fatal errors)
# E_PARSE - compile-time parse errors
# E_NOTICE - run-time notices (these are warnings which often
result
# from a bug in your code, but it's possible that it
was
# intentional (e.g., using an uninitialized variable
and
# relying on the fact it's automatically initialized to
an
# empty string)
# E_CORE_ERROR - fatal errors that occur during PHP's initial startup
# E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's
# initial startup
# E_COMPILE_ERROR - fatal compile-time errors
# E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
# E_USER_ERROR - user-generated error message
# E_USER_WARNING - user-generated warning message
# E_USER_NOTICE - user-generated notice message

error_reporting(E_ERROR);

$VERSION="0.5.5-Beta1";

# Define reserved Emailadresses (Separated by comma):
$RESERVED="postmaster,root";

$TEMPLATE[0]="default";
$TEMPLATE[1]="green";

Nous allons utiliser cyrus 2.2 et ses possibilits natives de gestion des domaines virtuels. Il
existe en effet deux possibilits pour grer ces domaines virtuels :
1. demander Cyrus (2.2) de le faire lui-mme. Dans ce cas, un utilisateur aura comme
nom d'utilisateur son adresse e-mail complte, la manire de Qmail-Vpopmail ;
2. faire l'ancienne avec tous les comptes dans un seul domaine, et des alias qui iront
pointer dessus. Dans ce cas, l'utilisateur qui aurait par exemple l'adresse
machin@chose.tld n'aurait en fait qu'un alias, pointant sur une vraie bote
d'adresse, disons, chose.tld-machin@domaineunique.tld et son nom d'utilisateur
serait dans ce cas chose.tld-machin.
Nous choisissons la premire solution.
Notre web-cyradm n'est pas encore en tat de fonctionner, mais nous pouvons dj vrifier
que l'interface fonctionne :

Puis une fois la session ouverte :

A ce niveau, nous ne pouvons pas faire grand chose de plus, puisque cyrus n'est pas encore en
place.
S A S L
Simple Authentication and Security Layer.
Mthode d'authentification utilisable avec les protocoles fonctionnant en mode connect,
dfinie dans les RFC 2222, 2245 et 2444. Voir aussi GSSAPI. (Dfinition du Jargon Franais).
Contrairement ce que le nom pourrait laisser entendre, SASL est tout sauf simple mettre
en pratique. L'objectif n'tant pas d'en devenir des spcialistes, nous l'utiliserons dans un cas
de figure qui rpond la question.
Cyrus va avoir besoin d'authentifier ses clients. Postfix probablement aussi, suivant ce que
nous lui demanderons de faire.
SASL va fournir un serveur saslauthd que les applications (Cyrus et probablement Postfix)
yront interroger chaque fois qu'il sera ncessaire d'authentifier un utilisateur.
saslauthd est capable d'interroger de faons trs diverses diffrents lments capables de lui
fournir les informations requises. Ici, nous allons utiliser saslauthd de manire ce qu'il
s'appuie sur PAM, qui lui-mme s'appuiera sur notre base MySQL. Vous comprenez aisment
la souplesse que peut apporter ce type de fonctionnement, si nous dsirons remplacer MySQL
par quelque chose d'autre.
Saslauthd
Installation
Il faut installer le paquet sasl2-bin, qui fera installer les dpendances ncessaires. donc :
aptitude install sasl2-bin libsasl2-modules
Et laissons faire.
Configuration
Il y a un simple fichier manipuler : /etc/default/saslauthd, car saslauthd n'a pas de
fichier de configuration, tout est dans la ligne de commande.
Le fichier doit ressembler ceci :
#
# Settings for saslauthd daemon
#

# Should saslauthd run automatically on startup? (default: no)
START=yes

# Which authentication mechanisms should saslauthd use? (default: pam)

# Notez la somme de possibilits offertes

# Available options in this Debian package:
# getpwent -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam -- use PAM
# rimap -- use a remote IMAP server
# shadow -- use the local shadow password file
# sasldb -- use the local sasldb database file
# ldap -- use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="pam"

# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS=""

# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5

# Other options (default: -c)
# See the saslauthd man page for information about these options.
#
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
# Note: See /usr/share/doc/sasl2-bin/README.Debian
OPTIONS="-c -r -m /var/spool/postfix/var/run/saslauthd"
Dans les options, il y en a deux qui sont fondamentales ici :
le -r Combine the realm with the login (with an @ sign in between). e.g. login:
foo realm: bar will get passed as login: foo@bar. . Avec nos options, nous
aurons dans notre base de donnes l'adresse complte de l'utilisateur en guise de nom
d'utilisateur ;
nous allons utiliser un socket unix pour communiquer avec saslauthd. Il se trouve
que les composants de Postfix impliqus seront en cage (chroot) dans
/var/spool/postfix. Nous devons donc modifier le chemin d'accs par dfaut ce
socket, pour que les composants de Postfix puissent y accder, c'est le but de la partie
-m /var/spool/postfix/var/run/saslauthd. Il ne faudra donc pas oublier de
crer cette arborescence. Autant le faire tout de suite (mme si Postfix n'est pas encore
install) :
mkdir -p /var/spool/postfix/var/run/saslauthd
Nous en avons fini avec saslauthd, nous pouvons mme le dmarrer :
/etc/init.d/saslauthd start
et vrifier qu'il est en service comme nous le lui avons demand :
# ps aux | grep saslauthd
root 2266 0.0 0.1 7212 980 ? Ss 15:20 0:00
/usr/sbin/saslauthd -a pam -c -r -m /var/spool/postfix/var/run/saslauthd -n
5
root 2267 0.0 0.3 7256 1564 ? S 15:20 0:00
/usr/sbin/saslauthd -a pam -c -r -m /var/spool/postfix/var/run/saslauthd -n
5
root 2268 0.0 0.1 7212 540 ? S 15:20 0:00
/usr/sbin/saslauthd -a pam -c -r -m /var/spool/postfix/var/run/saslauthd -n
5
root 2269 0.0 0.0 7212 360 ? S 15:20 0:00
/usr/sbin/saslauthd -a pam -c -r -m /var/spool/postfix/var/run/saslauthd -n
5
root 2270 0.0 0.0 7212 360 ? S 15:20 0:00
/usr/sbin/saslauthd -a pam -c -r -m /var/spool/postfix/var/run/saslauthd -n
5
Et PAM ?
Lorsque cyrus-imapd va s'adresser saslauthd, il faudra que pam sache qui interroger et
comment le faire. Nous aurons crer un fichier nomm imap dans /etc/pam.d. Nous le
ferons lorsque nous aurons install cyrus-imapd-2.2, qui va en placer un qu'il nous faudra
modifier.
Cyrus-imapd
Ici, a va tre un peu plus long et aussi un peu plus dlicat.
Installation
Nous voulons proposer IMAP mais aussi POP3 ? Nous avons installer deux paquets, les
dpendances ncessaires suivront :
aptitude install cyrus-imapd-2.2 cyrus-pop3d-2.2
Pour plus de confort, installons aussi quelques paquets recommands :
aptitude install cyrus-clients-2.2 cyrus-doc-2.2
Nous devrions disposer de tout ce qui est ncessaire.
Configuration
Nous avons deux fichiers sur lesquels il nous faut intervenir
Cyrus.conf
Cyrus est un outil trs puissant, qui sait rpartir les botes aux lettres sur plusieurs serveurs.
Notre objectif n'est pas de concurrencer le premier fournisseur d'accs de France, nous
resterons plus humbles et n'utiliserons pas ces fonctionnalits.
Dans l'exemple qui suit, nous activons POP3 et IMAP. Nous opourrions aussi activer POP3S
et IMAP4 et mme aussi un serveur de type usenet (nntp, en installant en plus cyrus-nntpd-
2.2) si nous voulons, mais web-cyradm ne grera pas ce dernier.
# Debian defaults for Cyrus IMAP server/cluster implementation
# see cyrus.conf(5) for more information
#
# All the tcp services are tcpd-wrapped. see hosts_access(5)
# $Id: cyrus.conf 567 2006-08-14 18:19:32Z sven $

START {
# do not delete this entry!
recover cmd="/usr/sbin/ctl_cyrusdb -r"

# this is only necessary if idlemethod is set to "idled" in
imapd.conf
#idled cmd="idled"

# this is useful on backend nodes of a Murder cluster
# it causes the backend to syncronize its mailbox list with
# the mupdate master upon startup
#mupdatepush cmd="/usr/sbin/ctl_mboxlist -m"

# this is recommended if using duplicate delivery suppression
delprune cmd="/usr/sbin/cyr_expire -E 3"
# this is recommended if caching TLS sessions
tlsprune cmd="/usr/sbin/tls_prune"
}

# UNIX sockets start with a slash and are absolute paths
# you can use a maxchild=# to limit the maximum number of forks of a
service
# you can use babysit=true and maxforkrate=# to keep tight tabs on the
service
# most services also accept -U (limit number of reuses) and -T (timeout)
SERVICES {
# --- Normal cyrus spool, or Murder backends ---
# add or remove based on preferences
imap cmd="imapd -U 30" listen="imap" prefork=0
maxchild=100
#imaps cmd="imapd -s -U 30" listen="imaps" prefork=0
maxchild=100
pop3 cmd="pop3d -U 30" listen="pop3" prefork=0
maxchild=50
#pop3s cmd="pop3d -s -U 30" listen="pop3s" prefork=0
maxchild=50
#nntp cmd="nntpd -U 30" listen="nntp" prefork=0
maxchild=100
#nntps cmd="nntpd -s -U 30" listen="nntps" prefork=0
maxchild=100

# At least one form of LMTP is required for delivery
# (you must keep the Unix socket name in sync with imap.conf)
#lmtp cmd="lmtpd" listen="localhost:lmtp" prefork=0
maxchild=20
#lmtpunix cmd="lmtpd" listen="/var/run/cyrus/socket/lmtp"
prefork=0 maxchild=20
lmtpunix cmd="lmtpd"
listen="/var/spool/postfix/cyrussock/lmtp" prefork=0 maxchild=20
# ----------------------------------------------

# useful if you need to give users remote access to sieve
# by default, we limit this to localhost in Debian
sieve cmd="timsieved" listen="localhost:sieve" prefork=0
maxchild=100

# this one is needed for the notification services
#notify cmd="notifyd" listen="/var/run/cyrus/socket/notify"
proto="udp" prefork=1
notify cmd="notifyd"
listen="/var/spool/postfix/cyrussock/notify" proto="udp" prefork=1

# --- Murder frontends -------------------------
# enable these and disable the matching services above,
# except for sieve (which deals automatically with Murder)

# mupdate database service - must prefork at least 1
# (mupdate slaves)
#mupdate cmd="mupdate" listen=3905 prefork=1
# (mupdate master, only one in the entire cluster)
#mupdate cmd="mupdate -m" listen=3905 prefork=1

# proxies that will connect to the backends
#imap cmd="proxyd" listen="imap" prefork=0 maxchild=100
#imaps cmd="proxyd -s" listen="imaps" prefork=0
maxchild=100
#pop3 cmd="pop3proxyd" listen="pop3" prefork=0 maxchild=50
#pop3s cmd="pop3proxyd -s" listen="pop3s" prefork=0
maxchild=50
#lmtp cmd="lmtpproxyd" listen="lmtp" prefork=1 maxchild=20
# ----------------------------------------------
}

EVENTS {
# this is required
checkpoint cmd="/usr/sbin/ctl_cyrusdb -c" period=30

# this is only necessary if using duplicate delivery suppression
delprune cmd="/usr/sbin/cyr_expire -E 3" at=0401

# this is only necessary if caching TLS sessions
tlsprune cmd="/usr/sbin/tls_prune" at=0401

# indexing of mailboxs for server side fulltext searches

# reindex changed mailboxes (fulltext) approximately every other
hour
#squatter_1 cmd="/usr/bin/nice -n 19 /usr/sbin/squatter -s"
period=120

# reindex all mailboxes (fulltext) daily
#squatter_a cmd="/usr/sbin/squatter" at=0517
}
Ici encore, les sockets unix sont dplacer dans la cage de Postfix si nous voulons les utiliser
(et nous voudrons).
Imapd.conf
Plus spcifique imap, voici ce fichier, dbarrass de ses commentaires d'usine :
configdirectory: /var/lib/cyrus
defaultpartition: default
partition-default: /var/spool/cyrus/mail
altnamespace: no

# rappelez-vous, lors de la configuration de web-cyradm...
unixhierarchysep: yes
virtdomains: yes

# Vous avez bien un domaine dans lequel se trouve le serveur ?

lmtp_downcase_rcpt: yes
allowanonymouslogin: no
popminpoll: 1
autocreatequota: 0
umask: 077
sieveusehomedir: false
sievedir: /var/spool/sieve
hashimapspool: true
allowplaintext: yes
sasl_mech_list: PLAIN

# Comment exploiter SASL (et son socket unix)
sasl_pwcheck_method: saslauthd
sasl_saslauthd_path: /var/spool/postfix/var/run/saslauthd/mux
sasl_auto_transition: no

# Nous verrons comment faire du TLS proprement plus tard
tls_ca_path: /etc/ssl/certs
tls_session_timeout: 1440
tls_cipher_list: TLSv1+HIGH:!aNULL:@STRENGTH

# Et n'oublions pas l'emplacement des sockets
lmtpsocket: /var/spool/postfix/cyrussock/lmtp

idlemethod: poll
idlesocket: /var/spool/postfix/cyrussock/idle
notifysocket: /var/spool/postfix/cyrussock/notify

syslog_prefix: cyrus
allowusermoves: yes

# Enfin, il faut dclarer au moins un administrateur
admins: cyrus
imap_admins: cyrus
sieve_admins: cyrus
Rappelez-vous que nous avons dans notre base MySQL un administrateur nomm cyrus. Le
paramtre unixhierarchysep: yes indique Cyrus qu'il doit utiliser le sparateur / plutt
que le . qui est sa configuration par dafaut, et qui a l'inconvnient que le . n'est plus utilisable
dans les noms d'utilisateurs. Dans la configuration choisie, il est indispensable de pouvoir
mettre des points dans les noms d'utilisateurs.
N'oublions pas :
mkdir -p /var/spool/postfix/cyrussock
Notez que cette configuration n'a que valeur d'exemple. Consultez le imapd.conf d'usine
pour avoir plus d'informations. Consultez aussi le manuel : man imapd.conf ( ) pour tous
les paramtres possibles.
Bon. Et PAM ?
Ne l'oublions pas. Dans /etc/pam.d, nous avons le fichier imap modifier comme suit :
auth sufficient pam_mysql.so user=mail passwd=epikoi host=localhost db=mail
table=accountuser usercolumn=username passwdcolumn=password crypt=1
account required pam_mysql.so user=mail passwd=epikoi host=localhost
db=mail table=accountuser usercolumn=username passwdcolumn=password crypt=1
Les parties surlignes sont modifier en fonction de votre personnalisation bien sr.
Il ne faut pas oublier non plus d'installer ce qu'il faut pour que PAM puisse utiliser MySQL :
aptitude install libpam-mysql
Vrifications
L'outil testsaslauthd va nous permettre de vrifier que l'utilisateur cyrus est authentifi :
# testsaslauthd -u cyrus -p epikoi -f
/var/spool/postfix/var/run/saslauthd/mux
0: OK "Success."
Web-cyradm devrait maintenant nous permettre de crer des domaines et des comptes dans
ces domaines.

C'est fait.

Crons maintenant un compte de test :


Voil qui est fait.

Vrification avec l'outil cyradm en ligne de commande :
aptitude install cyrus-admin-2.2
Puis :
# cyradm --user cyrus --server localhost
Password:
localhost> lm
user/test@nain-t.net (\HasNoChildren)
localhost> lam user/test@nain-t.net
test@nain-t.net lrswipcda
cyrus lrswipcda
localhost> exit
a marche. Il faudra quand mme approfondir un peu cet outil. Faites m'y penser si
j'oubliais
En gros, la BAL est bien cre, l'utilisateur test@nain-t.net a tous les droits dessus et
l'administrateur cyrus aussi (ncessaire pour l'administration par le compte cyrus).
Et l'utilisateur test@nain-t.net est-il bien authentifi par saslauthd ?
# testsaslauthd -u test@nain-t.net -p epikoi -f
/var/spool/postfix/var/run/saslauthd/mux
0: OK "Success."
Impeccable, il pourra donc accder sa BAL avec son MUA favori.
Vrification avec telnet :
# telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK openmailadmin Cyrus IMAP4 v2.2.13-Debian-2.2.13-14+b1 server ready
10 login test@nain-t.net epikoi
10 OK User logged in
20 logout
* BYE LOGOUT received
20 OK Completedhttp://smartsieve.sourceforge.net/
Connection closed by foreign host.
Il ne reste plus qu' injecter des messages l dedans avec Postfix, et notre solution sera
presque oprationnelle. Il restera s'occuper un peu de la scurit de l'ensemble.
Sieve
Il s'agit d'un langage de de filtrage d'e-mails, comparable dans sa fonctionnalit au langage de
scripts de procmail. Son avantage est d'tre normalis dans le RFC 5228. Son inconvnient est
d'tre sans doute moins puissant que le langage procmail.
La souplesse de Sieve vient du fait que l'utilisateur peut placer sur le serveur des rgles de
filtrage, sans pour autant disposer d'un compte unix. Il existe plusieurs moyens de le faire :
un plug-in dans squirrelmail : avelsieve ;
le composant Ingo de la suite horde (non testt);
Smartsieve est un projet autonome en PHP ddi cette tche.
Pour des raisons de scurit, il est prfrable de limiter le service timsieved l'coute de
localhost, ce qui est le cas par dfaut dans la distribution Debian. Extrait du
/etc/cyrus.conf :
SERVICES {
...
# ----------------------------------------------

# useful if you need to give users remote access to sieve
# by default, we limit this to localhost in Debian
sieve cmd="timsieved" listen="localhost:sieve" prefork=0
maxchild=100
...
}
Les scripts vont dans /usr/spool/sieve/ o ils sont rangs avec la mme logique que les
boites aux lettres.
De plus, pour que l'utilisateur puisse manipuler ses scripts sieve, il faudra que PAM dispose
dans /etc/pam.d/ d'un fichier nomm sieve et, dans l'immdiat, identique imap.
Note importante
Suppression d'un message
Lors de la suppression d'un message dans la boite de rception, le protocole IMAP prvoit que
le message est marqu comme effac, mais n'est pas supprim. Pour supprimer dfinitivement
un message, c'est dire pour l'effacer physiquement sur le serveur, il faut utiliser la
commande expunge. Il se trouve que cette procdure est gre trs diversement suivant le
MUA employ.
Le plus souvent, le fait d'effacer un message se traduit pas :
le marquage dudit message comme effac ;
la copie du message dans le rpertoire Trash (la poubelle).
Autrement dit : Effacer un message revient le recopier dans un autre rpertoire. En
croyant gagner de la place, on en perd. Plutt que de longs discours, voyons ceci sur un
exemple. La boite aux lettres de sysop@nain-t.net est vide :
cyrus:/var/spool/cyrus/mail/domain/n/nain-t.net/s/user/sysop# ls -l
total 20
-rw------- 1 cyrus mail 4 2008-07-12 20:42 cyrus.cache
-rw------- 1 cyrus mail 199 2008-07-11 15:43 cyrus.header
-rw------- 1 cyrus mail 76 2008-07-12 20:42 cyrus.index
drwx------ 2 cyrus mail 4096 2008-07-12 23:14 Sent
drwx------ 2 cyrus mail 4096 2008-07-12 23:13 Trash
Les rpertoires Sent et Trash le sont galement.
sysop@nain-t.net reoit un message :
cyrus:/var/spool/cyrus/mail/domain/n/nain-t.net/s/user/sysop# ls -l
total 24
-rw------- 1 cyrus mail 1270 2008-07-12 23:18 16.
-rw------- 1 cyrus mail 740 2008-07-12 23:18 cyrus.cache
-rw------- 1 cyrus mail 199 2008-07-11 15:43 cyrus.header
-rw------- 1 cyrus mail 136 2008-07-12 23:18 cyrus.index
drwx------ 2 cyrus mail 4096 2008-07-12 23:14 Sent
drwx------ 2 cyrus mail 4096 2008-07-12 23:13 Trash
Nous retrouvons bien le message sans le rpertoire se sysop. La poubelle est toujours vide.
sysop lit son message, puis le supprime avec son thunderbird favori. Dans son MUA, le
message a disparu, mais il se retrouve dans la corbeille. Voyons le rsultat dans son rpertoire
:
cyrus:/var/spool/cyrus/mail/domain/n/nain-t.net/s/user/sysop# ls -l
total 24
-rw------- 2 cyrus mail 1270 2008-07-12 23:18 16.
-rw------- 1 cyrus mail 740 2008-07-12 23:18 cyrus.cache
-rw------- 1 cyrus mail 199 2008-07-11 15:43 cyrus.header
-rw------- 1 cyrus mail 136 2008-07-12 23:21 cyrus.index
drwx------ 2 cyrus mail 4096 2008-07-12 23:14 Sent
drwx------ 2 cyrus mail 4096 2008-07-12 23:21 Trash
cyrus:/var/spool/cyrus/mail/domain/n/nain-t.net/s/user/sysop# ls -l Trash/
total 16
-rw------- 2 cyrus mail 1270 2008-07-12 23:18 19.
-rw------- 1 cyrus mail 740 2008-07-12 23:21 cyrus.cache
-rw------- 1 cyrus mail 199 2008-07-11 16:00 cyrus.header
-rw------- 1 cyrus mail 136 2008-07-12 23:21 cyrus.index
Nous retrouvons bien un message dans Trash, mais le message se trouve toujours dans le
rpertoire racine (INBOX). En gros, sysop n'a fait que recopier le message dans Trash.
sysop vide la corbeille :
cyrus:/var/spool/cyrus/mail/domain/n/nain-t.net/s/user/sysop# ls -l
total 24
-rw------- 1 cyrus mail 1270 2008-07-12 23:18 16.
-rw------- 1 cyrus mail 740 2008-07-12 23:18 cyrus.cache
-rw------- 1 cyrus mail 199 2008-07-11 15:43 cyrus.header
-rw------- 1 cyrus mail 136 2008-07-12 23:21 cyrus.index
drwx------ 2 cyrus mail 4096 2008-07-12 23:14 Sent
drwx------ 2 cyrus mail 4096 2008-07-12 23:26 Trash
cyrus:/var/spool/cyrus/mail/domain/n/nain-t.net/s/user/sysop# ls -l Trash/
total 12
-rw------- 1 cyrus mail 4 2008-07-12 23:26 cyrus.cache
-rw------- 1 cyrus mail 199 2008-07-11 16:00 cyrus.header
-rw------- 1 cyrus mail 76 2008-07-12 23:26 cyrus.index
Le message a disparu dans Trash, mais il est toujours prsent dans la racine du rpertoire
de sysop (INBOX) !. Pour le faire disparaitre, sysop doit utiliser la commande compacter
, en cliquant du bouton droit sur courrier entrant :
cyrus:/var/spool/cyrus/mail/domain/n/nain-t.net/s/user/sysop# ls -l
total 20
-rw------- 1 cyrus mail 4 2008-07-12 23:30 cyrus.cache
-rw------- 1 cyrus mail 199 2008-07-11 15:43 cyrus.header
-rw------- 1 cyrus mail 76 2008-07-12 23:30 cyrus.index
drwx------ 2 cyrus mail 4096 2008-07-12 23:14 Sent
drwx------ 2 cyrus mail 4096 2008-07-12 23:26 Trash
Cette remarque s'applique tous les dossiers que sysop aura pu crer ( l'exception de la
poubelle, qui est systmatiquement purge lorsqu'elle est vide) y compris le dossier Sent
(messages envoys).
Il est donc important que les utilisateurs en prennent conscience, faute de quoi leur quota sera
atteint sans qu'ils ne comprennent pourquoi.
Il est possible de demander Thunderbird de purger automatiquement le rpertoire INBOX
lorsqu'il est referm, mais cette opration ne purgera que le rpertoire INBOX et pas les autres.
La bonne pratique consiste ne pas utiliser la corbeille mais demander Thunderbird de
marquer les messages comme effacs ce qui est le comportement normal, prvu par
IMAP. De cette manire le message apparait barr, n'est pas recopi dans Trash et ne
disparait effectivement dans l'affichage du MUA que lors de l'envoi de la commande
compacter .
Postfix avec cyrus
Nous avons dj pas mal parl de ce MTA. Par rapport la solution Postfix plus Dovecot
dj vue, nous avons quelques modifications apporter :
1. Expliquer Postfix qu'il doit dsormais remettre les messages locaux cyrus ;
2. lire certaines informations dans les tables de MySQL :
o ses destinations ;
o les alias ;
o les redirections ;
3. vrifier l'authentification des utilisateurs, quand c'est ncessaire, par SASL en utilisant
les services de saslauthd ;
Comme il y a pas mal de nouveauts, nous allons reprendre progressivement, en partant de la
configuration deBase.
Pour master.cf :
#
# Postfix master process configuration file. For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
#
==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
#
==========================================================================
smtp inet n - - - - smtpd
#submission inet n - - - - smtpd
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#smtps inet n - - - - smtpd
# -o smtpd_tls_wrappermode=yes
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
#628 inet n - - - - qmqpd
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - n 300 1 qmgr
#qmgr fifo n - - 300 1 oqmgr
tlsmgr unix - - - 1000? 1 tlsmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
trace unix - - - - 0 bounce
verify unix - - - - 1 verify
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - - - - smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay unix - - - - - smtp
-o smtp_fallback_relay=
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - - - - showq
error unix - - - - - error
retry unix - - - - - error
discard unix - - - - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - - - - lmtp
anvil unix - - - - 1 anvil
scache unix - - - - 1 scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent. See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
# See the Postfix UUCP_README file for configuration details.
#
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail
($recipient)
#
# Other external delivery methods.
#
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender
$recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store
${nexthop} ${user} ${extension}
mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}
Pour main.cf :
# See /usr/share/postfix/main.cf.dist for a commented, more complete
version


# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = cyrus.nain-t.net
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $myhostname
mydestination = nain-t.net, $myhostname, localhost.nain-t.net, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
Config. minimale
Dans un premier temps, nous allons juste expliquer Postfix qu'il doit transmettre les
messages considrs comme locaux (mydestination) cyrus, par l'intermdiaire du socket
unix cr par cyrus. De plus, comme les utilisateurs sont des utilisateurs qui n'ont pas de
compte unix, nous devons reconsidrer la faon dont Postfix value l'existence des utilisateurs
locaux. En effet, par dfaut, Postfix regarde le contenu du fichier passwd.
Nous ajoutons donc ces deux lignes notre main.cf :
mailbox_transport = lmtp:unix:/cyrussock/lmtp
local_recipient_maps =
1. la premire ligne indique que le transport local doit se faire par le protocole lmtp via
un socket unix qui se trouve dans le rpertoire (mis en cage) /cyrussock/lmtp ;
2. la seconde indique Postfix qu'il n'a pas se soucier de vrifier l'existence du compte
local. Ce n'est pas gravissime pour l'instant, cyrus le fera de toutes manires. Dans
l'avenir, si Postfix peut s'en assurer lui-mme ce ne sera pas plus mal en termes de
ressources utilises.
Et nous assurons que le domaine nain-t.net est bien dans nos destinations :
mydestination = nain-t.net, cyrus.nain-t.net, cyrus.nain-t.net,
localhost.nain-t.net, localhost
Aprs avoir forc la reconfiguration de postfix (postfix reload), envoyons un message
test@nain-t.net :
# mail test@nain-t.net
Subject: test 0
config mini
.
Cc:
Et voyons dans les logs (/var/log/mail.info) :
Jun 16 10:15:06 cyrus postfix/pickup[8271]: 7CC2E4800D3C: uid=0 from=<root>
Jun 16 10:15:06 cyrus postfix/cleanup[8277]: 7CC2E4800D3C: message-
id=<20080616081506.7CC2E4800D3C@cyrus.nain-t.net>
Jun 16 10:15:06 cyrus postfix/qmgr[8272]: 7CC2E4800D3C:
from=<root@cyrus.nain-t.net>, size=323, nrcpt=1 (queue active)
Jun 16 10:15:06 cyrus cyrus/lmtpunix[8281]: Delivered:
<20080616081506.7CC2E4800D3C@cyrus.nain-t.net> to mailbox: nain-
t.net!user.test
Jun 16 10:15:06 cyrus postfix/lmtp[8280]: 7CC2E4800D3C: to=<test@nain-
t.net>, relay=cyrus.nain-t.net[/cyrussock/lmtp], delay=0.3,
delays=0.06/0.01/0.03/0.2, dsn=2.1.5, status=sent (250 2.1.5 Ok)
Jun 16 10:15:06 cyrus postfix/qmgr[8272]: 7CC2E4800D3C: removed
Jun 16 10:22:32 cyrus cyrus/ctl_cyrusdb[8292]: checkpointing cyrus
databases
Jun 16 10:22:32 cyrus cyrus/ctl_cyrusdb[8292]: done checkpointing cyrus
databases
C'est bon signe. Mais comment cyrus a-t-il gr la chose ?
Tout dmarre dans /var/spool/cyrus/mail :
:/var/spool/cyrus/mail# ls
a b c d domain e f g h i j k l m o q r s stage. t v w x
y z
Le rpertoire domain nous attire :
:/var/spool/cyrus/mail# cd domain/
:/var/spool/cyrus/mail/domain# ls
n
Un seul rpertoire, qui s'appelle n (comme nain-t ?) :
:/var/spool/cyrus/mail/domain# cd n/
:/var/spool/cyrus/mail/domain/n# ls
nain-t.net
Ah oui, c'est bien reng n'est-ce pas ?
:/var/spool/cyrus/mail/domain/n# cd nain-t.net/
:/var/spool/cyrus/mail/domain/n/nain-t.net# ls
t
Un seul rpertoire t (comme test ?) :
:/var/spool/cyrus/mail/domain/n/nain-t.net# cd t
:/var/spool/cyrus/mail/domain/n/nain-t.net/t# ls
user
:/var/spool/cyrus/mail/domain/n/nain-t.net/t# cd user/
:/var/spool/cyrus/mail/domain/n/nain-t.net/t/user# ls
test
Oui
:/var/spool/cyrus/mail/domain/n/nain-t.net/t/user# cd test/
:/var/spool/cyrus/mail/domain/n/nain-t.net/t/user/test# ls
1. cyrus.cache cyrus.header cyrus.index
Le fichier 1. a l'air intressant :
:/var/spool/cyrus/mail/domain/n/nain-t.net/t/user/test# cat 1.
Return-Path: <root@cyrus.nain-t.net>
Received: from cyrus.nain-t.net ([unix socket])
by cyrus (Cyrus v2.2.13-Debian-2.2.13-14+b1) with LMTPA;
Mon, 16 Jun 2008 10:15:06 +0200
X-Sieve: CMU Sieve 2.2
Received: by cyrus.nain-t.net (Postfix, from userid 0)
id 7CC2E4800D3C; Mon, 16 Jun 2008 10:15:06 +0200 (CEST)
To: test@nain-t.net
Subject: test 0
Message-Id: <20080616081506.7CC2E4800D3C@cyrus.nain-t.net>
Date: Mon, 16 Jun 2008 10:15:06 +0200 (CEST)
From: root@cyrus.nain-t.net (root)


config mini
C'est lui. Voyons avec telnet si nous pouvons y accder en imap :
# telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK cyrus Cyrus IMAP4 v2.2.13-Debian-2.2.13-14+b1 server ready
01 login test@nain-t.net epikoi
01 OK User logged in
02 list "*" "*"
* LIST (\HasNoChildren) "/" "INBOX"
02 OK Completed (0.000 secs 2 calls)
03 select INBOX
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)]
* 1 EXISTS
* 1 RECENT
* OK [UNSEEN 1]
* OK [UIDVALIDITY 1213600558]
* OK [UIDNEXT 2]
03 OK [READ-WRITE] Completed
04 fetch 1 BODY[HEADER]
* 1 FETCH (FLAGS (\Recent \Seen) BODY[HEADER] {530}
Return-Path:
Received: from cyrus.nain-t.net ([unix socket])
by cyrus (Cyrus v2.2.13-Debian-2.2.13-14+b1) with LMTPA;
Mon, 16 Jun 2008 10:15:06 +0200
X-Sieve: CMU Sieve 2.2
Received: by cyrus.nain-t.net (Postfix, from userid 0)
id 7CC2E4800D3C; Mon, 16 Jun 2008 10:15:06 +0200 (CEST)
To: test@nain-t.net
Subject: test 0
Message-Id: <20080616081506.7CC2E4800D3C@cyrus.nain-t.net>
Date: Mon, 16 Jun 2008 10:15:06 +0200 (CEST)
From: root@cyrus.nain-t.net (root)

)
04 OK Completed (0.000 sec)
05 fetch 1 BODY[TEXT]
* 1 FETCH (BODY[TEXT] {13}
config mini
)
05 OK Completed (0.000 sec)
06 logout
* BYE LOGOUT received
06 OK Completed
Connection closed by foreign host.
Tout va pour le mieux. Mais pour ces premiers essais, nous avons d indiquer que nain-
t.net tait dans mydestination en dur , dans main.cf. Ce n'est videmment pas la
bonne solution. Il nous faut trouver le moyen de dire Postfix qu'il doit chercher ces
informations dans la base de donnes MySQL.
Postfix et MySQL
Postfix sait dialoguer avec MySQL, la condition d'installer le paquet postfix-mysql (Il
existe galement postfix-pgsql pour PostgreSQL et postfix-ldap pour les annuaires
LDAP).
aptitude install postfix-mysql
Pour mydestination
Dans notre base mail, nous avons une table domain. Voyons ce qu'il y a dedans :
# mysql mail -u mail -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 73
Server version: 5.0.51a-6 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> select * from domain;
+-------------+------------+-------------+---------+-------------+---------
--+-----------+-------------+---------+
| domain_name | prefix | maxaccounts | quota | domainquota |
transport | freenames | freeaddress | folders |
+-------------+------------+-------------+---------+-------------+---------
--+-----------+-------------+---------+
| nain-t.net | nain-t.net | 10000 | 2000000 | 0 | cyrus
| NO | YES | |
+-------------+------------+-------------+---------+-------------+---------
--+-----------+-------------+---------+
1 row in set (0.00 sec)
Donc, une requte du genre :
mysql> select domain_name from domain;
devrait faire l'affaire :
+-------------+
| domain_name |
+-------------+
| nain-t.net |
+-------------+
1 row in set (0.00 sec)
Il suffit de trouver le moyen de dire Postfix qu'il doit lire ses destinations en faisant cette
requte dans la base de donnes.
Nous allons crer un fichier /etc/postfix/db/mydestination.cf qui aura cette forme
(ancienne syntaxe) :
hosts = 127.0.0.1
user = mail
password = epikoi
dbname = mail
table = domain
select_field = domain_name
where_field = domain_name
C'est assez clair pour ne pas trop s'tendre sur le sujet. Le seul point approfondir un peu est
la directive hosts = 127.0.0.1. En effet, si nous mettons la place hosts = localhost,
Postfix va en dduire que puisque la base est locale, il faut y accder par un socket Unix (que
MySQL place par dfaut dans /var/run/mysqld/mysqld.sock) et a ne fonctionnera tout
simplement pas. Pourquoi ? Parce que Postfix est en cage dans /var/spool/postfix !!
Soit nous dplaons ce socket dans la cage, comme nous l'avons fait pour cyrus et
saslauthd au risque de perturber d'autres applications qui utiliseraient MySQL ;
soit il nous faut passer par un socket rseau, c'est ce que comprend Postfix si nous
indiquons une adresse IP dans le paramtre hosts ;
soit, enfin, nous adoptons la mme stratgie que dans le chapitre prcdent, savoir
utiliser le service proxy de Postfix qui est l pour rsoudre ces problmes.
A vous de voir en fonction de votre contexte. Ici le choix du socket rseau est juste fait pour
montrer que a fonctionne aussi.
Les versions modernes (2.2 et plus) de Postfix comprennent une syntaxe plus compacte et
plus proche de SQL :
hosts = 127.0.0.1
user = mail
password = epikoi
dbname = mail
query = SELECT domain_name FROM domain WHERE domain_name = '%s'
Puis il faut modifier dans /etc/postfix/main.cf la ligne mydestination comme suit :
mydestination = mysql:/etc/postfix/db/mydestination.cf
Un postfix reload et un essai :
# mail test@nain-t.net
Subject: test 1
mydestination dans MySQL
.
Cc:
Et dans les logs :
Jun 16 11:51:52 cyrus postfix/pickup[8408]: 4418E4800D3C: uid=0 from=<root>
Jun 16 11:51:52 cyrus postfix/cleanup[8414]: 4418E4800D3C: message-
id=<20080616095152.4418E4800D3C@cyrus.nain-t.net>
Jun 16 11:51:52 cyrus postfix/qmgr[8409]: 4418E4800D3C:
from=<root@cyrus.nain-t.net>, size=336, nrcpt=1 (queue active)
Jun 16 11:51:52 cyrus cyrus/lmtpunix[8418]: Delivered:
<20080616095152.4418E4800D3C@cyrus.nain-t.net> to mailbox: nain-
t.net!user.test
Jun 16 11:51:52 cyrus postfix/lmtp[8417]: 4418E4800D3C: to=<test@nain-
t.net>, relay=cyrus.nain-t.net[/cyrussock/lmtp], delay=0.28,
delays=0.06/0.01/0.04/0.18, dsn=2.1.5, status=sent (250 2.1.5 Ok)
Jun 16 11:51:52 cyrus postfix/qmgr[8409]: 4418E4800D3C: removed
Jun 16 11:52:32 cyrus cyrus/ctl_cyrusdb[8419]: checkpointing cyrus
databases
Jun 16 11:52:32 cyrus cyrus/ctl_cyrusdb[8419]: done checkpointing cyrus
databases
Bon. Mais c'est bien un truc qui marche de faon intelligente ?
# mail test@machin.net
Subject: test 2
domaine inconnu dans notre base
.
Cc:
Et dans les logs ?
Jun 16 11:56:31 cyrus postfix/pickup[8408]: 3A5254800D3C: uid=0 from=<root>
Jun 16 11:56:31 cyrus postfix/cleanup[8431]: 3A5254800D3C: message-
id=<20080616095631.3A5254800D3C@cyrus.nain-t.net>
Jun 16 11:56:31 cyrus postfix/qmgr[8409]: 3A5254800D3C:
from=<root@cyrus.nain-t.net>, size=327, nrcpt=1 (queue active)
Jun 16 11:56:38 cyrus postfix/smtp[8433]: 3A5254800D3C: host
mx00.1and1.co.uk[212.227.15.150] refused to talk to me: 550 RBL rejection:
local dynamic IP address 82.243.80.13
Jun 16 11:56:38 cyrus postfix/smtp[8433]: 3A5254800D3C: host
mx01.1and1.co.uk[212.227.15.134] refused to talk to me: 550 RBL rejection:
local dynamic IP address 82.243.80.13
Jun 16 11:56:38 cyrus postfix/smtp[8433]: 3A5254800D3C: host
mx00.1and1.co.uk[212.227.15.134] refused to talk to me: 550 RBL rejection:
local dynamic IP address 82.243.80.13
Jun 16 11:56:38 cyrus postfix/smtp[8433]: 3A5254800D3C: host
mx00.1and1.co.uk[212.227.15.169] refused to talk to me: 550 RBL rejection:
local dynamic IP address 82.243.80.13
Jun 16 11:56:38 cyrus postfix/smtp[8433]: 3A5254800D3C:
to=<test@machin.net>, relay=mx01.1and1.co.uk[212.227.15.150]:25, delay=7.5,
delays=0.06/0.01/7.5/0, dsn=4.0.0, status=deferred (host
mx01.1and1.co.uk[212.227.15.150] refused to talk to me: 550 RBL rejection:
local dynamic IP address 82.243.80.13)
Ben oui, le domaine machin.net existe Postfix a donc essay de contacter les MX
correspondants, preuve que Postfix a bien compris que machin.net n'tait pas dans ses
destinations.
Au passage, observons que les MX de 1and1.co.uk ne prennent pas de gants et blacklistent
toutes les adresses IP dites dynamiques c'est--dire celles qui sont attribues aux divers
fournisseurs d'accs. Ceci veut dire que mme avec un Postfix compltement configur et
rfrenc comme tel sur l'internet, nous ne passerons pas dans certains domaines. Merci aux
administrateurs totalitaires
Mais revenons nos moutons, car nous n'avons pas encore fini
Pour les alias
Rappelons-le, un alias est une vraie fausse adresse. Autrement dit, une adresse qui ne
correspond pas une vraie bote, mais qui pointe sur une autre adresse qui, elle, en a une.
Avec notre web-cyradm, crons dans le domaine nain-t.net un alias : aliastest@nain-
t.net et faisons le pointer sur l'adresse test@nain-t.net
C'est dans la table virtual que a se passe :
mysql> select * from virtual;
+----------------------+------------------+------------------+--------+
| alias | dest | username | status |
+----------------------+------------------+------------------+--------+
| test@nain-t.net | test@nain-t.net | test@nain-t.net | 1 |
| aliastest@nain-t.net | test@nain-t.net | nain-t.net | 1 |
+----------------------+------------------+------------------+--------+
2 rows in set (0.00 sec)
Il est peu prs clair que si la destination de test@nain-t.net est bien test@nain-t.net,
pour aliastest@nain-t.net, la destination n'est pas aliastest@nain-t.net mais toujours
test@nain-t.net.
D'ailleurs, cyrus n'est pas du tout au courant de tout a :
# cyradm --user cyrus --server localhost
Password:
localhost> lm
user/test@nain-t.net (\HasNoChildren)
localhost>
La seule BAL existante est bien test@nain-t.net.
Moralit, nous avons bien les informations dans la base, mais comme nous n'avons pas
expliqu Postfix qu'il fallait en tenir compte, il n'effectuera pas la rcriture d'adresse de
destination et le message sera refus par cyrus. Je vous laisse faire la manip si vous n'tes pas
convaincu, personnellement, j'ai mieux faire.
Il faut agir sur la paramtre virtual_alias_maps, par le biais d'une requte SQL bien sentie
:
mysql> SELECT dest FROM virtual WHERE alias = 'aliastest@nain-t.net' AND
status ='1';
+-----------------+
| dest |
+-----------------+
| test@nain-t.net |
+-----------------+
1 row in set (0.00 sec)
(Si status est diffrent de 1, c'est que l'alias est dsactiv, il ne faut donc pas en tenir
compte).
Il ne reste plus qu' mettre a dans un fichier /etc/postfix/db/virtual-alias.cf
(directement dans la nouvelle syntaxe) :
hosts = 127.0.0.1
user = mail
password = epikoi
dbname = mail
query = SELECT dest FROM virtual WHERE alias = '%s' AND status ='1'
et ajouter main.cf la ligne :
virtual_alias_maps = mysql:/etc/postfix/db/virtual-alias.cf
(Forcer postfix reload)
Essayons :
# mail aliastest@nain-t.net
Subject: test alias
redirection OK
.
Cc:
Et voir les logs :
Jun 16 14:15:14 cyrus postfix/pickup[8683]: BF7E04800D3C: uid=0 from=<root>
Jun 16 14:15:14 cyrus postfix/cleanup[8689]: BF7E04800D3C: message-
id=<20080616121514.BF7E04800D3C@cyrus.nain-t.net>
Jun 16 14:15:14 cyrus postfix/qmgr[8684]: BF7E04800D3C:
from=<root@cyrus.nain-t.net>, size=335, nrcpt=1 (queue active)
Jun 16 14:15:15 cyrus cyrus/lmtpunix[8695]: Delivered:
<20080616121514.BF7E04800D3C@cyrus.nain-t.net> to mailbox: nain-
t.net!user.test
Jun 16 14:15:15 cyrus postfix/lmtp[8694]: BF7E04800D3C: to=<test@nain-
t.net>, orig_to=<aliastest@nain-t.net>, relay=cyrus.nain-
t.net[/cyrussock/lmtp], delay=0.3, delays=0.06/0.01/0.04/0.18, dsn=2.1.5,
status=sent (250 2.1.5 Ok)
Jun 16 14:15:15 cyrus postfix/qmgr[8684]: BF7E04800D3C: removed
C'est explicite. Dtail intressant : nous rcuprons l'en-tte du message reu et stock par
cyrus (nous savons maintenant o le trouver) :
Return-Path: <root@cyrus.nain-t.net>
Received: from cyrus.nain-t.net ([unix socket])
by cyrus (Cyrus v2.2.13-Debian-2.2.13-14+b1) with LMTPA;
Mon, 16 Jun 2008 14:15:14 +0200
X-Sieve: CMU Sieve 2.2
Received: by cyrus.nain-t.net (Postfix, from userid 0)
id BF7E04800D3C; Mon, 16 Jun 2008 14:15:14 +0200 (CEST)
To: aliastest@nain-t.net
Subject: test alias
Message-Id: <20080616121514.BF7E04800D3C@cyrus.nain-t.net>
Date: Mon, 16 Jun 2008 14:15:14 +0200 (CEST)
From: root@cyrus.nain-t.net (root)

redirection OK
Constatez que dans l'en-tte du message reu, le champ To: contient toujours
aliastest@nain-t.net et non test@nain-t.net.
Pour les redirections
D'abord, quelle diffrence entre une redirection (forward) et un alias ?
Le but du jeu dans le cas d'une redirection, est de renvoyer un message destin une vraie
adresse (qui dispose d'une BAL) vers une autre adresse, pas ncessairement dans le mme
domaine d'ailleurs. Il y a donc ici la possibilit de conserver une copie du message redirig
dans la bote initiale.
Autrement, il n'y a aucune diffrence, comme nous allons le voir.
Avec notre web-cyradm, nous crons un second domaine : autredomaine.net et dedans,
nous crons un compte test@autredomaine.fr. Voyons la base :
mysql> select * from domain;
+------------------+------------------+-------------+---------+------------
-+-----------+-----------+-------------+---------+
| domain_name | prefix | maxaccounts | quota | domainquota
| transport | freenames | freeaddress | folders |
+------------------+------------------+-------------+---------+------------
-+-----------+-----------+-------------+---------+
| nain-t.net | nain-t.net | 10000 | 2000000 | 0
| cyrus | NO | YES | |
| autredomaine.net | autredomaine.net | 10 | 2000000 | 0
| cyrus | NO | YES | |
+------------------+------------------+-------------+---------+------------
-+-----------+-----------+-------------+---------+
2 rows in set (0.00 sec)


mysql> select * from accountuser;
+-----------------------+---------------+------------------+---------------
---+------+-----+-------+----------+
| username | password | prefix | domain_name
| imap | pop | sieve | smtpauth |
+-----------------------+---------------+------------------+---------------
---+------+-----+-------+----------+
| cyrus | ep5LE34pgfO7Q | |
| 1 | 1 | 1 | 1 |
| test@nain-t.net | ep5LE34pgfO7Q | nain-t.net | nain-t.net
| 1 | 1 | 1 | 1 |
| test@autredomaine.net | ep5LE34pgfO7Q | autredomaine.net |
autredomaine.net | 1 | 1 | 1 | 1 |
+-----------------------+---------------+------------------+---------------
---+------+-----+-------+----------+
3 rows in set (0.00 sec)
Maintenant, en accdant au compte de test@nain-t.net par web-cyradm, nous crons une
redirection vers test@autredomaine.net, en conservant une cpie du message :

La preuve que c'est pareil qu'un alias, nous retrouvons la modification dans la table virtual :
mysql> select * from virtual;
+-----------------------+---------------------------------------+----------
-------------+--------+
| alias | dest | username
| status |
+-----------------------+---------------------------------------+----------
-------------+--------+
| test@nain-t.net | test@nain-t.net |
test@nain-t.net | 1 |
| aliastest@nain-t.net | test@nain-t.net | nain-
t.net | 1 |
| test@nain-t.net | test@autredomaine.net,test@nain-t.net |
| 1 |
| test@autredomaine.net | test@autredomaine.net |
test@autredomaine.net | 1 |
+-----------------------+---------------------------------------+----------
-------------+--------+
4 rows in set (0.00 sec)
Donc, priori, nous n'avons rien modifier dans la configuration de Postfix, les redirections
devraient tre oprationnelles. Vrifions :
# mail test@nain-t.net
Subject: premier essai forward
a roule
.
Cc:
Les logs :
Jun 16 14:54:30 cyrus postfix/pickup[8683]: 961684800D3C: uid=0 from=<root>
Jun 16 14:54:30 cyrus postfix/cleanup[8733]: 961684800D3C: message-
id=<20080616125430.961684800D3C@cyrus.nain-t.net>
Jun 16 14:54:30 cyrus postfix/qmgr[8684]: 961684800D3C:
from=<root@cyrus.nain-t.net>, size=336, nrcpt=2 (queue active)
Jun 16 14:54:30 cyrus cyrus/lmtpunix[8741]: Delivered:
<20080616125430.961684800D3C@cyrus.nain-t.net> to mailbox:
autredomaine.net!user.test
Jun 16 14:54:30 cyrus postfix/lmtp[8739]: 961684800D3C:
to=<test@autredomaine.net>, orig_to=<test@nain-t.net>, relay=cyrus.nain-
t.net[/cyrussock/lmtp], delay=0.38, delays=0.07/0.02/0.05/0.24, dsn=2.1.5,
status=sent (250 2.1.5 Ok)
Jun 16 14:54:31 cyrus cyrus/lmtpunix[8742]: Delivered:
<20080616125430.961684800D3C@cyrus.nain-t.net> to mailbox: nain-
t.net!user.test
Jun 16 14:54:31 cyrus postfix/lmtp[8740]: 961684800D3C: to=<test@nain-
t.net>, relay=cyrus.nain-t.net[/cyrussock/lmtp], delay=0.46,
delays=0.07/0.03/0.11/0.24, dsn=2.1.5, status=sent (250 2.1.5 Ok)
Jun 16 14:54:31 cyrus postfix/qmgr[8684]: 961684800D3C: removed
C'est bon. Et est-ce que c'est rcursif ? Autrement dit, si j'envoie un message
aliastest@nain-t.net, comment a va se passer ?
Jun 16 15:02:08 cyrus postfix/pickup[8683]: 3807A4800D3C: uid=0 from=<root>
Jun 16 15:02:08 cyrus postfix/cleanup[8746]: 3807A4800D3C: message-
id=<20080616130208.3807A4800D3C@cyrus.nain-t.net>
Jun 16 15:02:08 cyrus postfix/qmgr[8684]: 3807A4800D3C:
from=<root@cyrus.nain-t.net>, size=343, nrcpt=2 (queue active)
Jun 16 15:02:08 cyrus cyrus/lmtpunix[8752]: Delivered:
<20080616130208.3807A4800D3C@cyrus.nain-t.net> to mailbox:
autredomaine.net!user.test
Jun 16 15:02:08 cyrus postfix/lmtp[8750]: 3807A4800D3C:
to=<test@autredomaine.net>, orig_to=<aliastest@nain-t.net>,
relay=cyrus.nain-t.net[/cyrussock/lmtp], delay=0.45,
delays=0.06/0.01/0.06/0.32, dsn=2.1.5, status=sent (250 2.1.5 Ok)
Jun 16 15:02:08 cyrus cyrus/lmtpunix[8753]: Delivered:
<20080616130208.3807A4800D3C@cyrus.nain-t.net> to mailbox: nain-
t.net!user.test
Jun 16 15:02:08 cyrus postfix/lmtp[8751]: 3807A4800D3C: to=<test@nain-
t.net>, orig_to=<aliastest@nain-t.net>, relay=cyrus.nain-
t.net[/cyrussock/lmtp], delay=0.47, delays=0.06/0.03/0.13/0.26, dsn=2.1.5,
status=sent (250 2.1.5 Ok)
Jun 16 15:02:08 cyrus postfix/qmgr[8684]: 3807A4800D3C: removed
a fonctionne de manire rcursive. Il a oubli d'tre bte ce Postfix.
Techniquement, nous sommes en place part un petit dtail. Quid des messages
administratifs, envoys root, postmaster, MAILER_DAEMON et autres noms de services ?
Envoyons un message root pour voir :
# mail root
Subject: vla autre chose
a va coincer...
.
Cc:
Les logs
Jun 16 15:09:47 cyrus postfix/pickup[8683]: 6AB974800D3C: uid=0 from=<root>
Jun 16 15:09:47 cyrus postfix/cleanup[8776]: 6AB974800D3C: message-
id=<20080616130947.6AB974800D3C@cyrus.nain-t.net>
Jun 16 15:09:47 cyrus postfix/qmgr[8684]: 6AB974800D3C:
from=<root@cyrus.nain-t.net>, size=342, nrcpt=1 (queue active)
Jun 16 15:09:47 cyrus postfix/smtp[8778]: 6AB974800D3C:
to=<root@cyrus.nain-t.net>, orig_to=<root>, relay=none, delay=0.08,
delays=0.06/0.02/0/0, dsn=5.4.4, status=bounced (Host or domain name not
found. Name service error for name=cyrus.nain-t.net type=AAAA: Host not
found)
Jun 16 15:09:47 cyrus postfix/cleanup[8776]: 7ECA94800D3F: message-
id=<20080616130947.7ECA94800D3F@cyrus.nain-t.net>
Jun 16 15:09:47 cyrus postfix/qmgr[8684]: 7ECA94800D3F: from=<>, size=2340,
nrcpt=1 (queue active)
Jun 16 15:09:47 cyrus postfix/bounce[8779]: 6AB974800D3C: sender non-
delivery notification: 7ECA94800D3F
Jun 16 15:09:47 cyrus postfix/qmgr[8684]: 6AB974800D3C: removed
Jun 16 15:09:47 cyrus postfix/smtp[8778]: 7ECA94800D3F:
to=<root@cyrus.nain-t.net>, relay=none, delay=0.03, delays=0.02/0/0/0,
dsn=5.4.4, status=bounced (Host or domain name not found. Name service
error for name=cyrus.nain-t.net type=AAAA: Host not found)
Jun 16 15:09:47 cyrus postfix/qmgr[8684]: 7ECA94800D3F: removed
Ici, Postfix ne s'en sort pas parce que root n'est pas une adresse. Il en conclut ( juste titre)
que c'est le root local et donc reconstruit une adresse prsentable en ajoutant
@{$myhostname}, ici cyrus.nain-t.net. Une fois cette adresse construite, il ne sait plus
trop comment la router, car il ne sait pas que c'est une destination locale (mydestination) et il
ne sait pas non plus trouver un MX qui fasse l'affaire.
Notez au passage le ping-pong en perspective : root@cyrus.nain-t.net envoie un message
root@cyrus.nain-t.net, qui n'est pas livrable, et la notification part donc dans la BAL de
l'expditeur, soit root@cyrus.nain-t.net Mais Postfix s'en tire trs bien et n'insiste
(heureusement) pas sur les double-bounce.
Une solution possible pour rgler cette question est de crer une BAL sysop@nain-t.net par
exemple, et d'utiliser le fichier /etc/aliases pour rediriger tous les messages administratifs
(locaux) vers cette bote :
# cat /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
www-data: root
ftp: root
abuse: root
noc: root
security: root
clamav: root
amavis: root
cyrus: root

root: sysop@nain-t.net
La technique est simple, tous les noms d'oiseaux susceptibles de recevoir des messages locaux
sont redirigs sur root qui, en fin de compte, est redirig sur sysop@nain-t.net.
Notez que cette table existait dj mais ne contenait rien, ou rien d'intressant, mais tait dj
rfrence dans le main.cf :
...
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
...
Reste la passer la moulinette du postalias :
postalias /etc/aliases
Ce qui va crer un nouveau fichier /etc/alias.db
Puis nous vrifions que tous les noms d'hte local figurent dans mydestination en plus des
destinations tires de MySQL :
mydestination = cyrus.nain-t.net, localhost.nain-t.net, localhost,
mysql:/etc/postfix/db/mydestination.cf
Et de forcer Postfix revoir sa configuration :
postfix reload
(N'oublions pas de crer la bote sysop@nain-t.net avant d'essayer) :
# mail security
Subject: test redirections locales
a marche.
.
Cc:
Jun 16 16:32:22 cyrus postfix/pickup[8937]: 657C64800D3C: uid=0 from=<root>
Jun 16 16:32:22 cyrus postfix/cleanup[8953]: 657C64800D3C: message-
id=<20080616143222.657C64800D3C@cyrus.nain-t.net>
Jun 16 16:32:22 cyrus postfix/qmgr[8938]: 657C64800D3C:
from=<root@cyrus.nain-t.net>, size=350, nrcpt=1 (queue active)
Jun 16 16:32:22 cyrus cyrus/lmtpunix[8957]: Delivered:
<20080616143222.657C64800D3C@cyrus.nain-t.net> to mailbox: nain-
t.net!user.sysop
Jun 16 16:32:22 cyrus postfix/lmtp[8956]: 657C64800D3C: to=<sysop@nain-
t.net>, orig_to=<security>, relay=cyrus.nain-t.net[/cyrussock/lmtp],
delay=0.32, delays=0.08/0.01/0.04/0.19, dsn=2.1.5, status=sent (250 2.1.5
Ok)
Jun 16 16:32:22 cyrus postfix/qmgr[8938]: 657C64800D3C: removed
Remarques
1. Comme Postfix dispose maintenant du moyen de savoir si une adresse virtuelle existe
ou non, par le biais de virtual_alias_maps, nous pouvons retirer la ligne
local_recipient_maps = du main.cf.
2. La configuration dcrite ici ne fonctionnera totalement qu' la condition que nous
ayons choisi de faire grer les domaines virtuels par Cyrus.
3. Nous n'avons pour l'instant pas utilis les services de SASL dans Postfix. Ils ne sont
en effet ncessaires que si Postfix doit authentifier ses clients. Pour l'instant, seul l'hte
local peut tre client de Postfix : mynetworks = 127.0.0.0/8
[::ffff:127.0.0.0]/104 [::1]/128. Si les notations IPv6 vous gnent
([::ffff:127.0.0.0]/104 [::1]/128), ignorez-les ou mieux, reportez-vous au
chapitre idoine.
4. Se poser quelques questions sur la scurit de l'ensemble ne sera pas forcment une
mauvaise ide.
5.Postfix avec SASL
6. Profitons des acquis
7. Nous allons faire une synthse de ce qui a t vu avec Postfix + Dovecot pour aboutir
un main.cf de cette forme :
8. smtpd_banner = $myhostname ESMTP Experimental
9.
10. disable_vrfy_command = yes
11. smtpd_helo_required = yes
12. smtpd_sender_restrictions =
13. permit_mynetworks,
14. reject_non_fqdn_sender
15. reject_unknown_sender_domain,
16. permit
17.
18. smtpd_client_restrictions =
19. permit_mynetworks,
20. reject_rbl_client blackholes.easynet.nl,
21. reject_rbl_client cbl.abuseat.org,
22. reject_rbl_client proxies.blackholes.wirehub.net,
23. reject_rbl_client bl.spamcop.net,
24. reject_rbl_client sbl.spamhaus.org,
25. reject_rbl_client dnsbl.njabl.org,
26. permit
27.
28. biff = no
29.
30. append_dot_mydomain = no
31.
32. # Uncomment the next line to generate "delayed mail" warnings
33. #delay_warning_time = 4h
34.
35. # TLS parameters
36. smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
37. smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
38. smtpd_use_tls=yes
39. smtpd_tls_session_cache_database =
btree:${data_directory}/smtpd_scache
40. smtp_tls_session_cache_database =
btree:${data_directory}/smtp_scache
41.
42. # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc
package for
43. # information on enabling SSL in the smtp client.
44.
45. myhostname = cyrus.nain-t.net
46. myorigin = $myhostname
47. mydestination = $myhostname, localhost.nain-t.net, localhost,
mysql:/etc/postfix/db/mydestination.cf
48. alias_maps = hash:/etc/aliases
49. alias_database = hash:/etc/aliases
50. myorigin = $myhostname
51. relayhost =
52. mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
53. mailbox_size_limit = 0
54. recipient_delimiter = +
55. inet_interfaces = all
56. inet_protocols = all
57.
58. virtual_alias_maps = mysql:/etc/postfix/db/virtual-alias.cf
59.
60. mailbox_transport = lmtp:unix:/cyrussock/lmtp
61. Modifions master.cf comme dj vu, pour utiliser le port submission :
62. #
63. # Postfix master process configuration file. For details on the
format
64. # of the file, see the master(5) manual page (command: "man 5
master").
65. #
66. # Do not forget to execute "postfix reload" after editing this
file.
67. #
68. #
=====================================================================
=====
69. # service type private unpriv chroot wakeup maxproc command +
args
70. # (yes) (yes) (yes) (never) (100)
71. #
=====================================================================
=====
72. smtp inet n - - - - smtpd
73. submission inet n - - - - smtpd
74. -o smtpd_sasl_auth_enable=yes
75. -o smtpd_client_restrictions=permit_sasl_authenticated,reject
76. -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
77. #smtps inet n - - - - smtpd
78. # -o smtpd_tls_wrappermode=yes
79. # -o smtpd_sasl_auth_enable=yes
80. # -o smtpd_client_restrictions=permit_sasl_authenticated,reject
81. # -o milter_macro_daemon_name=ORIGINATING
82. #628 inet n - - - - qmqpd
83. pickup fifo n - - 60 1 pickup
84. cleanup unix n - - - 0 cleanup
85. qmgr fifo n - n 300 1 qmgr
86. #qmgr fifo n - - 300 1 oqmgr
87. tlsmgr unix - - - 1000? 1 tlsmgr
88. rewrite unix - - - - - trivial-
rewrite
89. bounce unix - - - - 0 bounce
90. defer unix - - - - 0 bounce
91. trace unix - - - - 0 bounce
92. verify unix - - - - 1 verify
93. flush unix n - - 1000? 0 flush
94. proxymap unix - - n - - proxymap
95. proxywrite unix - - n - 1 proxymap
96. smtp unix - - - - - smtp
97. # When relaying mail as backup MX, disable fallback_relay to avoid
MX loops
98. relay unix - - - - - smtp
99. -o smtp_fallback_relay=
100. # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
101. showq unix n - - - - showq
102. error unix - - - - - error
103. retry unix - - - - - error
104. discard unix - - - - - discard
105. local unix - n n - - local
106. virtual unix - n n - - virtual
107. lmtp unix - - - - - lmtp
108. anvil unix - - - - 1 anvil
109. scache unix - - - - 1 scache
110. #
111. #
====================================================================
112. # Interfaces to non-Postfix software. Be sure to examine the manual
113. # pages of the non-Postfix software to find out what options it
wants.
114. #
115. # Many of the following services use the Postfix pipe(8) delivery
116. # agent. See the pipe(8) man page for information about
${recipient}
117. # and other message envelope options.
118. #
====================================================================
119. #
120. # maildrop. See the Postfix MAILDROP_README file for details.
121. # Also specify in main.cf: maildrop_destination_recipient_limit=1
122. #
123. maildrop unix - n n - - pipe
124. flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
125. #
126. # See the Postfix UUCP_README file for configuration details.
127. #
128. uucp unix - n n - - pipe
129. flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail
($recipient)
130. #
131. # Other external delivery methods.
132. #
133. ifmail unix - n n - - pipe
134. flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop
($recipient)
135. bsmtp unix - n n - - pipe
136. flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -
f$sender $recipient
137. scalemail-backend unix - n n - 2 pipe
138. flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-
store ${nexthop} ${user} ${extension}
139. mailman unix - n n - - pipe
140. flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-
mailman.py
141. ${nexthop} ${user}
142. Mais pour utiliser SASL ici, il va nous falloir crer un fichier
/etc/postfix/sasl/smtpd.conf de la forme :
143. pwcheck_method: saslauthd
144. mech_list: PLAIN LOGIN
145. minimum_layer: 0
146. saslauthd_path: /var/run/saslauthd/mux
147. Pour tre tout fait explicite, il faudrait aussi ajouter dans le fichier main.cf
les deux lignes suivantes :
148. smtpd_sasl_type = cyrus
149. smtpd_sasl_path = smtpd
150. Il se trouve que ce sont les valeurs par dfaut, mais mieux vaut le dire de faon
explicite.
151. Ce n'est pas tout saslauthd, lorsqu'il dmarre peut attribuer des droits assez
particuliers au rpertoire dans lequel se trouve le mux (observ l'heure o ces lignes
sont crites, sur une Debian Lenny) :
152. # ls -l /var/spool/postfix/var/run
153. total 0
154. drwxrwxr-x 2 cyrus postfix 19 jun 12 16:47 cyrus
155. drwx--x--- 2 root sasl 88 jun 17 16:47 saslauthd
156. Si bien que l'utilisateur postfix ne peut accder au mux de saslauthd et donc,
l'authentification choue systmatiquement. Pas question de modifier quoi que ce soit
ces droits, ils sont restaurs chaque redmarrage de saslauthd.
157. Dans ce cas, une solution est donc d'intgrer l'utilisateur postfix au groupe
sasl :
158. # usermod -a -G sasl postfix
159. Vrification :
160. # groups postfix
161. postfix sasl
162. Et PAM ?
163. Parce que SASL, c'est bien, mais il fait appel PAM. Nous avons un fichier
imap dans /etc/pam.d/, mais nous n'en avons pas pour smtp ou si nous en avons un,
il n'est sans doute pas bon. Nous devons utiliser le mme processus que pour imap,
donc dans un premier temps, un :
164. # cp /etc/pam.d/imap /etc/pam.d/smtp
165. Devrait faire l'affaire pour l'instant.
166. Redmarrage de Postfix, et la connexion sur le port submission avec
authentification doit fonctionner
Questions de scurit
Reste encore traiter quelques points de dtail.
1. Web-cyradm pose des drapeaux dans la base de donnes. Nous n'avons pas tenu
compte de ces indicateurs qui devraient permettre d'autoriser ou non tel ou tel
utilisateur :
o recevoir des messages ;
o en envoyer ;
o accder sa boite aux lettres ;
o utiliser le langage Sieve ;
2. L'utilisateur cyrus a tous les droits sur tous les comptes de messagerie. Peut-on limiter
cet utilisateur ne pouvoir se connecter que localement ?
3. Le fait d'utiliser saslauthd avec PAM implique que les authentifications passent en
clair sur le rseau. Le moyen simple de contourner ce problme est d'employer
systmatiquement TLS, aussi bien pour les connexions IMAP/POP3 que pour les
connexions SMTP de la part de nos utilisateurs.
4. Il faut combattre autant que l'on peut les virus et les spams. Nous avons dj vu
comment le faire, mais n'avons pas encore implment la solution ici.
5. web-cyradm, c'est bien, mais il faut ajouter plusieurs choses sur notre serveur, qui
peuvent apporter des risques :
o apache ;
o php ;
o le code php de web-cyradm.
Contrler finement les accs
Si nous prenons le temps de bien regarder l'interface de web-cyradm, et aussi la structure des
tables MySQL associe, nous constatons qu'il existe par compte cr quatre flags qui sont
:
imap, qui devrait permettre d'autoriser ou non l'accs du compte au protocole IMAP ;
pop, idem pour le protocole POP ;
sieve, idem pour Sieve ;
smtpauth, idem pour l'authentification SMTP (Port submission ) ;
smtp, idem pour la livraison des messages entrants.
Nous n'avons pas vraiment tenu compte de ces flags . Pour imap, pop, sieve et smtpauth, il
s'agit d'autoriser ou non l'authentification, donc il faut agir sur saslauthd, donc sur PAM, donc
sur les fichiers correspondants dans /etc/pam.d/.
Le jour o vous trouverez une documentation sur les syntaxes possibles dans les fichiers de
configuration de PAM avec MySQL, vous pourrez vrifier que l'on peut faire ceci :
Pour imap
Nous modifions le fichier /etc/pam.d/imap comme ceci : (droulez bin les lignes jusqu'au
bout) :
auth sufficient pam_mysql.so user=mail passwd=epikoi host=localhost db=mail
table=accountuser usercolumn=username passwdcolumn=password
where=accountuser.imap=1 crypt=1
account required pam_mysql.so user=mail passwd=epikoi host=localhost
db=mail table=accountuser usercolumn=username passwdcolumn=password
where=accountuser.imap=1 crypt=1
Pour pop
Mme mthode, mais avec le flag pop. Le fichier /etc/pam.d/pop doit ressembler ceci
:
auth sufficient pam_mysql.so user=mail passwd=epikoi host=localhost db=mail
table=accountuser usercolumn=username passwdcolumn=password
where=accountuser.pop=1 crypt=1
account required pam_mysql.so user=mail passwd=epikoi host=localhost
db=mail table=accountuser usercolumn=username passwdcolumn=password
where=accountuser.pop=1 crypt=1
Pour sieve
Le fichier /etc/pam.d/sieve :
auth sufficient pam_mysql.so user=mail passwd=epikoi host=localhost db=mail
table=accountuser usercolumn=username passwdcolumn=password
where=accountuser.sieve=1 crypt=1
account required pam_mysql.so user=mail passwd=epikoi host=localhost
db=mail table=accountuser usercolumn=username passwdcolumn=password
where=accountuser.sieve=1 crypt=1
Pour Submission
Et enfin le fichier /etc/pam.d/smtp :
auth sufficient pam_mysql.so user=mail passwd=epikoi host=localhost db=mail
table=accountuser usercolumn=username passwdcolumn=password
where=accountuser.smtpauth=1 crypt=1
account required pam_mysql.so user=mail passwd=epikoi host=localhost
db=mail table=accountuser usercolumn=username passwdcolumn=password
where=accountuser.smtpauth=1 crypt=1
Pour les destinataires
Ici, ce n'est pas PAM qui va intervenir, mais le fichier /etc/postfix/db/virtual-
alias.cf, avec son flag status. Ceci est dj pris en compte puisque nous avons la requte :
query = SELECT dest FROM virtual WHERE alias = '%s' AND status ='1'
Restreindre l'utilisateur cyrus
Dans notre configuration actuelle, l'utilisateur cyrus peut se connecter distance et utiliser par
exemple l'outil cyradm sur le serveur distant, ce qui prsente un danger potentiel.
Il est cependant possible d'utiliser plusieurs fichiers de configuration diffrents, suivant
certains cas. Pour raliser ceci, il faut se plonger un peu plus profondment dans le
cyrus.conf :
SERVICES {
# --- Normal cyrus spool, or Murder backends ---
# add or remove based on preferences
imap cmd="imapd -U 30" listen="imap" prefork=0
maxchild=100
#imaps cmd="imapd -s -U 30" listen="imaps" prefork=0
maxchild=100
pop3 cmd="pop3d -U 30" listen="pop3" prefork=0
maxchild=50
#pop3s cmd="pop3d -s -U 30" listen="pop3s" prefork=0
maxchild=50
#nntp cmd="nntpd -U 30" listen="nntp" prefork=0
maxchild=100
#nntps cmd="nntpd -s -U 30" listen="nntps" prefork=0
maxchild=100
La ligne pointe dit en franais que :
la commande invoque pour le service imap est imapd, le process pouvant tre utilis
par 30 nouvelles connexions avant d'tre dtruit (et remplac par un autre) ;
le process va couter sur le port imap (143) de toutes les interfaces rseau
(puisqu'aucune n'est spcifie) et il peut, au besoin, y avoir jusqu' 100 processus fils
de crs.
La documentation est assez parcimonieuse, mais le manuel de cyrus.conf indique qu'il est
possible :
d'indiquer explicitement le chemin complet d'accs au fichier de configuration pour un
process donn.
de restreindre l'coute (listen) une seule interface rseau ;
Ainsi, si l'on modifie cyrus.conf comme suit :
SERVICES {
# --- Normal cyrus spool, or Murder backends ---
# add or remove based on preferences
imap cmd="imapd -U 30" listen="192.168.10.7:imap"
prefork=0 maxchild=100
imaplocal cmd="imapd -U 30 -C /etc/imapd-local.conf"
listen="127.0.0.1:imap" prefork=0 maxchild=100
#imaps cmd="imapd -s -U 30" listen="imaps" prefork=0
maxchild=100
pop3 cmd="pop3d -U 30" listen="pop3" prefork=0
maxchild=50
#pop3s cmd="pop3d -s -U 30" listen="pop3s" prefork=0
maxchild=50
#nntp cmd="nntpd -U 30" listen="nntp" prefork=0
maxchild=100
#nntps cmd="nntpd -s -U 30" listen="nntps" prefork=0
maxchild=100
Nous aurons :
1. une instance de imapd (nomme imap), qui n'coutera que sur l'interface connecte au
rseau (adresse IP de l'interface) et qui utilisera le fichier de configuration par
dfaut(/etc/imapd.conf) ;
2. une instance de imapd (nomme imaplocal), qui n'coutera que sur l'interface locale
(adresse IP 127.0.0.1) et qui utilisera le fichier de configuration explicite
/etc/imapd-local.conf.
Nous allons donc copier notre imapd.conf dans imapd-local.conf, puis nous
commenterons la ligne admins: cyrus dans imapd-conf. l'utilisateur cyrus pourra toujours
se connecter distance, mais n'aura plus les droits d'administration.
Utiliser TLS
Aussi bien Cyrus que Postfix supportent la commande STARTTLS, qui permet au client :
de recevoir un certificat du serveur ;
d'tablir une connexion chiffre entre le client et le serveur.
Ainsi le login, bien que transmis en clair, circulera travers la connexion chiffre.
Il est donc possible de forcer les utilisateurs utiliser TLS au tout au moins le leur permettre.
Les forcer, bien que plus totalitaire, est tout de mme plus sr pour tout le monde.
Nous allons faire a peu prs bien, en crant des certificats signs par une autorit racine
de confiance : la notre. TinyCA fera tout fait l'affaire. Nous ralisons une CA pour le
domaine nain-t, puis crons un certificat serveur pour cyrus.nain-t.net. Ensuite, nous
exportons ce certificat sous le nom de cyrus.nain-t.net.cert et la cl prive associe, sans
protection par mot de passe, sous le nom de cyrus.nain-t.net.key, ainsi que le certificat de
l'autorit sous le nom de Root_nain-t.net-cacert.pem. Enfin, nous les plaons l'endroit
habituel (/etc/ssl/certs pour le certificat et /etc/ssl/private pour la cl prive), en
attribuant les bons droits :
cyrus:/etc/ssl/certs# chmod 644 cyrus.nain-t.net.cert Root_nain-t.net-
cacert.pem
cyrus:/etc/ssl/private# chown root:ssl-cert cyrus.nain-t.net.key
cyrus:/etc/ssl/private# chmod 640 cyrus.nain-t.net.key
Pour Postfix
Dans notre main.cf, nous avons dj la ligne :
smtpd_use_tls=yes
Qui fait que TLS est possible. Des certificats de tests sont mme dj disponibles (snakeoil).
Pour utiliser les ntres, remplaons les lignes :
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Par celles-ci :
smtpd_tls_cert_file=/etc/ssl/certs/cyrus.nain-t.net.cert
smtpd_tls_key_file=/etc/ssl/private/cyrus.nain-t.net.key
smtpd_tls_CAfile=/etc/ssl/certs/Root_nain-t.net-cacert.pem
Si nous voulons obliger les clients sur le port submission utiliser TLS, il nous faut modifier
master.cf comme suit :
submission inet n - - - - smtpd
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
Pour Cyrus-imapd
Nous allons d'abord ajouter ces lignes dans /etc/imapd.conf :
tls_cert_file: /etc/ssl/certs/cyrus.nain-t.net.cert
tls_key_file: /etc/ssl/private/cyrus.nain-t.net.key
tls_ca_file: /etc/ssl/certs/Root_nain-t.net-cacert.pem
tls_ca_path: /etc/ssl/certs
tls_session_timeout: 1440
tls_cipher_list: TLSv1+HIGH:!aNULL:@STRENGTH
En suite, nous allons vrifier que cyrus peut bien lire les certificats et la cl.
Habituellement, tout le monde peut lire les certificats (644), mais en ce qui concerne les cls,
il n'y a que root et les membres du groupe ssl-cert qui le peuvent. Nous avons respect cette
rgle lorsque nous avons ajout nos certificats et notre cl. DOnc il nous faut mettre cyrus
dans le groupe ssl-cert.
A quel(s) groupe(s) cyrus appartient-il ?
# groups cyrus
cyrus : mail sasl
Il faut bien ajouter cyrus ssl-cert :
usermod -a -G ssl-cert cyrus
Nous relanons cyrus et TLS devrait fonctionner.
Pour empcher que les utilisateurs puissent ouvrir de session sans utiliser TLS, il faut dans
imapd.conf mettre :
allowplaintext: no
A la place de allowplaintext: yes
Ceci aura pour effet de rendre impossible le login sans chiffrement de la connexion.
Il est galement possible de n'ouvrir que imaps pour l'extrieur, en conservant imaplocal,
ncessaire pour l'administration de cyrus.
Amavis
il suffit de reprendre ce qui a t vu dans le chapitre Postfix + Dovecot :
installer clamav ;
installer spammassassin (et le configurer correctement) ;
installer amavisd-new ;
configurer Postfix pour qu'il dialogue avec amavisd-new.
Interface web
Web-cyradm va nous servir grer les comptes. S'il n'y avait que a, un jeu de scripts bien
sentis ferait sans doute tout aussi bien l'affaire, mais nous dsirons fournir nos utilisateurs
deux fonctionnalits intressantes :
un webmail ;
une interface pour crer ses scripts sieve.
Alors, Apache et php se justifient, mais il n'y a rien de bien scuris l dedans. Peut-tre faire
tourner web-cyradm dans un virtualhost dont l'accs serait contrl, et utiliser https en plus
?
limites du systme
Si nous avons toutes les informations ncessaires prsentes dans la base mail, cyrus utilise sa
propre base pour la gestion des botes aux lettres. Suivant les manipulations, il peut se faire
que bes BALs qui ont t supprimes dans la base MySQL soient restes dans Cyrus. Ce n'est
pas trs grave, puisque vis--vis de Postfix, ces botes n'existant plus, leur destination sera
refuse (si l'on a bien supprim la ligne local_recipient_maps = dans main.cf) et ne
recevront plus de messages. De mme, elles ne seront plus accessibles ni en imap ni en pop,
sasl s'appuyant sur MySQL.
Pour rester propre, il faudra tout de mme vrifier de temps en temps que la synchronisation
des comptes est correcte.
Mailing lists
Il ne manque plus notre systme qu'un gestionnaire de listes de diffusion.
L'objectif tant de pouvoir crer des listes hautement configurables, le tout dans des domaines
virtuels, le choix se portera sans doute sur Mailman ou Sympa.
Mailman n'est pas conu pour la gestion de domaines virtuels. Il y a certes des astuces pour y
arriver tout de mme, mais Sympa m'est apparu plus souriant. Aussi allons-nous nous
intresser plutt ce dernier.
Sympa permettra l'usage des domaines virtuels, tels que nous les avons vu dans les deux
chapitres prcdents, bien qu'il soit bien sr tout fait possible de l'utiliser pour grer les
listes d'un seul et unique domaine. Cette tude s'appuie sur le chapitre prcdent Postfix,
Cyrus, etc., cause de la base MySQL employe, mais pourra tre adapte au cas de la base
MySQL employe avec PostfixAdmin.
Le principe gnral
Nous savons dsormais que par dfaut, lorsque Postfix par un moyen ou un autre, identifie
une adresse comme tant locale ( vrai domaine ou domaines virtuels), il transmet le
message au MDA, pour qu'il le range dans la boite aux lettres du destinataire.
Dans le cas d'une liste de diffusion qui, premire vue, dispose d'une adresse locale, Postfix
ne devra pas transmettre le message au MDA, mais au robot de gestion des listes. Quelle que
soit l'adresse de la liste, Postfix devra remettre le message au mme robot, qui se chargera de
le diffuser sur la liste adquate, en suivant la politique de gestion de la liste en question.

1. Le message entrant doit et peut tre relay vers un autre MTA
2. Le message entrant concerne une livraison dans une boite aux lettres locale, il est
remis au MDA.
3. Le message entrant concerne une liste de diffusion, il est remis au robot des listes de
diffusion.
4. Le robot crera le ou les messages ncessaires en fonction de l'entre reue, et
injectera sa sortie dans l'entre du MTA.
Il nous faudra donc mettre en place un mcanisme cohrent avec ce que nous avons dj, et
qui permette d'indiquer le bon transport local, suivant qu'il s'agit d'une adresse de boite aux
lettres ou de liste de diffusion.
Si la rsolution de ce problme est plus ou moins complexe, suivant le nombre de listes cres
et aussi suivant le nombre de domaines hbergs.
Un peu plus de piment ?
Pour compliquer un peu les choses, le travail d'un robot de liste ne se borne pas dupliquer
l'entre sur tous les inscrits la liste.
En effet, il existe des rgles de gestion pour une liste donne et le robot doit suivre ces rgles :
l'metteur du message est-il autoris poster sur cette liste ?
la liste est-elle modre ?
o si oui,
s'agit-il d'un message entrant ?
est-ce une autorisation de diffuser un message modr ?
o si non,
le destinataire est-il habilit poster ?
est-ce une demande d'inscription ?
est-ce une demande de rsiliation ?
est-ce une demande administrative ?
Suivant la finesse de gestion, le nombre de cas grer est plus ou moins important et les
ractions du robot de mme.
Pour ce faire, le robot cre plusieurs adresses pour une liste donne. Prenons le cas d'une liste
qui s'appellerait liste1@nain-t.net. Nous aurons au final avec (cas du robot Sympa) les
adresses :
1. liste1@nain-t.net
2. liste1-request@nain-t.net
3. liste1-editor@nain-t.net
4. liste1-subscribe@nain-t.net
5. liste1-unsubscribe@nain-t.net
6. liste1-bounce@nain-t.net
Nous voyons bien que la cration d'une nouvelle liste entraine des modifications dans la
configuration de Postfix, qui devra appliquer le bon transport aux adresses associes cette
nouvelle liste. Sympa tout comme Mailman, proposent une aide acceptable la rsolution de
cette problmatique, du moins tant que nous ne grons pas de domaines virtuels. C'est ce
niveau que l'on peut tre amen srieusement se demander si Qmail,Vpopmail et EZmlm,
avec Qmailadmin qui centralise toute la gestion de l'usine de faon bien homogne n'est pas
finalement une bonne solution, mme si la construction de cette usine n'est pas une sincure

Etat des lieux
Nous avons une interface (web-cyradm) qui ne sait que grer les comptes de messagerie (en
PHP). Nous allons avoir une autre interface, qui ne sait grer que les listes de diffusion (en
Python pour Mailman et en Perl pour Sympa) et ce, en ignorant la configuration du MTA ds
lors que l'on a grer des domaines virtuels.
Autant dire que nous devons non seulement renoncer disposer d'une interface de gestion
homogne, mais en plus nous rsoudre intervenir plus ou moins en profondeur sur la
configuration du MTA en mettant les mains directement dans le cambouis.
Quelques solutions
Une solution simple, sale et catastrophique en cas de spam, consisterait dire :
nous crons un sous domaine ddi aux listes, par exemple lists.nain-t.net;
tout ce qui entre destination de ce sous-domaine est automatiquement dirig vers le
robot des listes.
Pour Contre
Une seule rgle par domaine virtuel nous
permet de crer autant de listes qu'on le
souhaite dans ce domaine, sans plus
toucher la configuration du MTA
Le MTA ne gre pas les fausses adresses de listes,
c'est au robot de le faire. En cas de spam sur le
sous-domaine avec des adresses forges
alatoirement, le robot sera soumis rude preuve.
Comment viter cet inconvnient ? Crer une rgle spcifique pour chaque liste de diffusion.
Pour Contre
Une adresse de liste (une famille
d'adresses, en fait) ne sera accepte
par le MTA que si elle est connue de
lui. Le robot ne recevra que des
messages lgitimes.

Il n'est plus ncessaire de crer un
sous domaine ddi aux listes.
Il faut revenir sur la configuration du MTA chaque
cration ou destruction d'une liste. Nous devrons le
faire directement dans les fichiers de configuration de
Postfix, ce qui obligera faire intervenir un
administrateur systme.
La dernire solution consisterait modifier le code des scripts de gestion des listes de manire
automatiser la configuration de Postfix, ce qui en plus de ncessiter des comptences de
programmation, interdirait la mise jour simple des scripts partir des paquets de la
distribution.
Dans ce qui suit, nous choisirons la mthode de mise en uvre la plus simple, mme si ce
n'est pas forcment la meilleure.
Mise en place de Sympa
Nous allons utiliser Sympa, qui sait grer les domaines virtuels. Entendons par l qu'il est
assez simple de disposer d'une interface de gestion des listes pour chaque domaine virtuel,
permettant ainsi de dlguer la gestion des listes un listmaster diffrent pour chaque
domaine virtuel hberg.
Sympa est un robot prouv, qui est fourni dans la distribution Debian. Il dispose d'une
documentation abondante et relativement comprhensible. Il sait grer un grand nombre de
listes, avec un grand nombre d'abonns, propose une gestion fine des autorisations de
diffusion comme des modes d'abonnement ( chaque message, un rsum priodique, de
priodicit paramtrable)
Note : Sympa n'est pas un gadget, c'est un robot de diffusion trs complexe et son installation
peut prsenter quelques difficults.
Installation deBase
Dans cette installation, il n'y aura pas de domaines virtuels. La machine hte s'appelle
cyrus.nain-t.net, elle gre les messages pour le domaine nain-t.net et nos listes seront
@lists.nain-t.net. Il faut bien commencer par le dbut.
Nous allons utiliser l'interface web de Sympa. Le module fastcgi d'apache est fortement
recommand (il est dans le dpt non-free, la licence prsentant quelques restrictions) :
aptitude install libapache2-mod-fastcgi
De plus, MySQL est ncessaire, mais nous l'avons dj.
Puis nous installons Sympa, qui a beaucoup de dpendances :
aptitude install sympa
Nous utiliserons wwsympa, mais pas SOAP. Nous choisissons comme nom de domaine
principal lists.nain-t.net. Il est donc ncessaire, si la machine s'appelle autrement
(cyrus.nain-t.net dans notre cas), d'avoir un CNAME dans notre (nos) DNS.
# host lists.nain-t.net
lists.nain-t.net is an alias for cyrus.nain-t.net.
cyrus.nain-t.net has address 82.243.85.42
Le script d'installation pose un certain nombre de questions auxquelles il vaut mieux rpondre
correctement, mais il n'y a rien de dfinitif puisque la configuration sera par la suite
modifiable dans /etc/sympa/sympa.conf. De plus, ce script doit pouvoir crer pour vous la
base MySQL ncessaire.
Vrifications
A l'issue de l'installation, nous devons retrouver quelques lments remarquables :
/etc/sympa est le rpertoire de configuration. Il y a dedans un certain nombre de
choses dont :
o sympa.conf qui est le fichier de configuration principal du robot ;
o wwsympa.conf pour la configuration de l'interface CGI ;
o topics.conf qui contient la liste de classement par thme
1)
des listes que
nous pourrons crer. Son contenu est modifier en fonction des besoins ;
/etc/mail/sympa.aliases est un fichier pour le moment vide, mais qui va se
peupler avec la cration de listes. Il est ncessaire que l'utilisateur sympa puisse y
pntrer et y crire. Vrifiez donc que sympa est bien propritaire du rpertoire
/etc/mail
Ce fichier d'alias, si l'on dcide de l'utiliser, va nous imposer un mode de configuration de
Postfix qui n'est pas optimal, mais qui nous vitera de devoir intervenir sur main.cf chaque
cration ou suppression de liste de diffusion.
Voici un exemple de fichier sympa.conf :
## Configuration file for Sympa
## many parameters are optional (defined in src/Conf.pm)
## refer to the documentation for a detailed list of parameters

###\\\\ Directories and file location ////###

## Directory containing mailing lists subdirectories
home /var/lib/sympa/expl

## Directory for configuration files ; it also contains scenari/ and
templates/ directories
etc /etc/sympa

## File containing Sympa PID while running.
## Sympa also locks this file to ensure that it is not running more than
once. Caution : user sympa need to write access without special privilegee.
pidfile /var/run/sympa/sympa.pid

## Umask used for file creation by Sympa
umask 027

## The main spool containing various specialized spools
## All spool are created at runtime by sympa.pl
spool /var/spool/sympa

## Incoming spool
queue /var/spool/sympa/msg

## Bounce incoming spool
queuebounce /var/spool/sympa/bounce

###\\\\ Syslog ////###

## The syslog facility for sympa
## Do not forget to edit syslog.conf
syslog `/bin/cat /etc/sympa/facility`

## Communication mode with syslogd is either unix (via Unix sockets) or
inet (use of UDP)
log_socket_type unix

## Log intensity
## 0 : normal, 2,3,4 for debug
log_level 0

###\\\\ General definition ////###

## Main robot hostname
domain lists.nain-t.net

## Listmasters email list comma separated
## Sympa will associate listmaster privileges to these email addresses
(mail and web interfaces). Some error reports may also be sent to these
addresses.
listmaster sysop@nain-t.net

## Local part of sympa email adresse
## Effective address will be [EMAIL]@[HOST]
email sympa

## Default lang (cs | de | el | en_US | fr | hu | it | ja_JP | nl | oc |
pt_BR | tr)
lang fr

## Who is able to create lists
## This parameter is a scenario, check sympa documentation about scenarios
if you want to define one
create_list public_listmaster

## Secret used by Sympa to make MD5 fingerprint in web cookies secure
## Should not be changed ! May invalid all user password
cookie `/bin/cat /etc/sympa/cookie`

###\\\\ Errors management ////###

## Bouncing email rate for warn list owner
#bounce_warn_rate 20

## Bouncing email rate for halt the list (not implemented)
## Not yet used in current version, Default is 50
#bounce_halt_rate 50

## Task name for expiration of old bounces
#expire_bounce_task daily

## Welcome message return-path
## If set to unique, new subcriber is removed if welcome message bounce
#welcome_return_path unique

###\\\\ MTA related ////###

## Path to the MTA (sendmail, postfix, exim or qmail)
## should point to a sendmail-compatible binary (eg: a binary named
'sendmail' is distributed with Postfix)
sendmail /usr/sbin/sendmail

## Maximum number of recipients per call to Sendmail. The
nrcpt_by_domain.conf file allows a different tuning per destination domain.
nrcpt 25

## Max. number of different domains per call to Sendmail
avg 10

## Max. number of Sendmail processes (launched by Sympa) running
simultaneously
## Proposed value is quite low, you can rise it up to 100, 200 or even 300
with powerfull systems.
maxsmtp 40

###\\\\ Pluggin ////###

## Path to the antivirus scanner engine
## supported antivirus : McAfee/uvscan, Fsecure/fsav, Sophos, AVP and Trend
Micro/VirusWall
#antivirus_path /usr/local/uvscan/uvscan

## Antivirus pluggin command argument
#antivirus_args --secure --summary --dat /usr/local/uvscan

###\\\\ S/MIME pluggin ////###

## Path to OpenSSL
## Sympa knowns S/MIME if openssl is installed
#openssl /usr/local/bin/openssl

## The directory path use by OpenSSL for trusted CA certificates
#capath /etc/sympa/ssl.crt

## This parameter sets the all-in-one file where you can assemble the
Certificates of Certification Authorities (CA)
#cafile /usr/local/apache/conf/ssl.crt/ca-bundle.crt

## User CERTs directory
ssl_cert_dir /var/lib/sympa/x509-user-certs

## Password used to crypt lists private keys
#key_passwd your_password

###\\\\ Web interface ////###

## Sympa's main page URL
wwsympa_url http://lists.nain-t.net/wws

## Supported languages for the user interface
supported_lang en_US,fr,

#-- Database configuration begin
# DO NOT REMOVE SURROUNDING COMMENTS

# DO NOT EDIT BY HAND
# USE dpkg-reconfigure -plow sympa TO RECONFIGURE

## Database driver (DBD)
db_type mysql

## Name of your database
db_name sympa

## Your database hostname
db_host localhost

## Username to connect to the DB
db_user sympa

## Password for the user
db_passwd epikoi

#-- Database configuration end
Les passages surligns reprsentent les paramtres indiqus lors du droulement du script
d'installation.
Vous dsirerez sans doute aussi modifier le titre de l'interface cgi de sympa. Il faut dans ce cas
modifier dans le fichier wwsimpa.conf :
## Title of main web page
title Les listes de nain-t.net
Aprs toute modification de la configuration de sympa, il faut relancer sympa et apache.
Apache
Autant prvoir l'avenir et prparer un serveur virtuel, qui rpondra dans un premier temps au
doux nom de lists.nain-t.net et qui sera configur pour faire fonctionner proprement
wwsympa.fcgi
Dans /etc/apache2/sites-avalable/, nous crons par exemple un fichier nomm sympa
qui contient quelque chose comme ceci :
<VirtualHost *>
ServerAdmin webmaster@nain-t.net
DocumentRoot /var/www/lists.net
ServerName lists.nain-t.net
<Directory /usr/lib/cgi-bin/sympa>
SetHandler fastcgi-script
</Directory>
Alias /static-sympa /var/lib/sympa/static_content
Alias /icons /usr/share/sympa/icons
<Directory /var/lib/sympa/static_content>
Order allow,deny
Allow from all
</directory>
ScriptAlias /wws /usr/lib/cgi-bin/sympa/wwsympa.fcgi
</VirtualHost>
Puis :
# a2ensite sympa
pour crer le lien dans le rpertoire /etc/apache2/sites-enabled (Nous somme toujours
sous Debian n'est-ce pas), et enfin :
# apache2 graceful
pour actualiser Apache. Une connexion sur http://lists.nain-t.net/wws devrait nous
montrer l'interface de notre gestionnaire de liste.
Attention ! Il pourra se faire que www-data n'ait pas le droit de lecture sur les feuilles de style
qui se trouvent dans /var/lib/sympa/static_content/css.
Enfin, pour que ce soit encore plus propre, nous pouvons prvoir une page d'accueil
index.html que nous mettrons dans la racine de notre domaine virtuel, qui redirigera
automatiquement sur le script cgi :
<html>
<head>
<meta http-equiv="refresh" content="0; url=wws/">
</head>
<body>
</body>
</html>
C'est parti
2)
:

Prsentation rapide
Nous n'allons pas entrer dans les dtails du fonctionnement de sympa. Cependant il y a
quelques choses savoir pour pouvoir dmarrer :
l'interface anonyme que nous voyons ici ne permet pas de faire grand chose, ce
n'est rien d'autre qu'un portail qui permet aux visiteurs de consulter la liste des listes de
diffusions dclares comme publiques, et ventuellement de demander s'abonner
certaines d'entre elles ;
dans notre sympa.conf, nous avons dclar sysop@nain-t.net comme tant le
listmaster, mais nous ne l'avons pas pour autant enregistr dans la base de donnes.
La procdure suivre est donc celle-ci :
o s'inscrire sur le site avec l'adresse sysop@nain-t.net, ce qui provoquera
l'envoi d'un message sur cette adresse, contenant un mot de passe ;
o s'identifier sur le portail avec l'adresse sysop@nain-t.net et le mot de passe
reu.
L'identification fera alors apparaitre plus de fonctionnalits sur le portail, principalement dans
ce cas, les outils d'administration des listes :

D'une manire gnrale, tout abonn une liste et qui se sera enregistr sur le site disposera
d'un login lui permettant d'accder au portail avec des droits adapts sa fonction :
simple abonn ;
propritaire d'une liste ;
modrateur ;
administrateur des listes.
Sympa est hautement configurable tous les niveaux. En passant un peu( voire beaucoup) de
temps consulter la documentation, il doit tre possible d'arriver maitriser ce robot.
Et a marche ?
Non, bien sr. Pour l'instant, il est possible de :
s'inscrire sur le site ;
crer une liste (ou demander sa cration si l'on n'est pas listmaster ) ;
recevoir les notifications de Sympa associes ces actions.
Sympa est fait pour fonctionner avec la plupart des MTA connus Sendmail, Postfix, Exim et
mme Qmail. A ce titre, son installation ne prend gure d'initiative concernant la
configuration du MTA. Mme si une liste est cre, elle ne pourra pas fonctionner, Postfix
n'tant pas au courant de son existence.
La seule chose qui est faite lors de la cration d'une liste (test0 dans notre exemple), c'est
l'ajout de quelques alias dans /etc/mail/sympa.aliases :
# cat /etc/mail/sympa.aliases
## List aliases used for the sympa mailing-list manager
#------------------------------ test0: list alias created 04 Jul 2008
test0: "| /usr/lib/sympa/bin/queue test0@lists.nain-t.net"
test0-request: "| /usr/lib/sympa/bin/queue test0-request@lists.nain-t.net"
test0-editor: "| /usr/lib/sympa/bin/queue test0-editor@lists.nain-t.net"
#test0-subscribe: "| /usr/lib/sympa/bin/queue test0-subscribe@lists.nain-
t.net"
test0-unsubscribe: "| /usr/lib/sympa/bin/queue test0-
unsubscribe@lists.nain-t.net"
test0-owner: "| /usr/lib/sympa/bin/bouncequeue test0@lists.nain-t.net"
Ah tiens, pourquoi l'alias concernant le traditionnel subscribe est-il mis en commentaire ?
Sans doute pour amener les gens utiliser plutt l'interface cgi. Mais comment revenir sur ce
paramtrage si nous le souhaitons ? C'est un secret, qui vous sera rvl plus tard
/usr/lib/sympa/bin/queue, c'est, l'quivalent du MDA, mais pour les messages
destination de la liste de diffusion. Autrement dit, nous devons, avec ce qui est crit dans ce
fichier, arriver ce que Postfix comprenne que les messages adresss :
test0@lists.nain-t.net
test0-request@lists.nain-t.net
test0-editor@lists.nain-t.net
test0-unsubscribe@lists.nain-t.net
Soient non pas transmis Cyrus, mais au programme /usr/lib/sympa/bin/queue de
Sympa. De mme, les messages test0-owner@lists.nain-t.net devront tre transmis au
programme /usr/lib/sympa/bin/bouncequeue
Ce fichier est donc un fichier d'alias classique, qu'il faut transmettre Postfix par la directive
alias_maps, en plus des alias dj indiqus :
alias_maps = hash:/etc/aliases, hash:/etc/mail/sympa.aliases
Oui mais voil, le fichier index /etc/mail/sympa.aliases.db n'a sans doute pas t cr
et dans les logs de sympa, aprs cration de la liste, un message d'erreur doit l'indiquer.
Pourquoi tant de haine ?
Lorsque nous crons une nouvelle liste avec l'interface cgi, /etc/mail/sympa.aliases est
mis jour, puis un petit utilitaire, aliaswrapper est invoqu pour lancer la commande
newaliases, charge de synchroniser sympa.aliases.db avec sympa.aliases.db.
Il y a (au moins) deux raisons pour lesquelles ce dispositif peut ne pas fonctionner :
newaliases prend l'identit du propritaire du fichier source traiter qui est ici
sympa. Sympa doit donc pouvoir crire dans /etc/mail. Ceci a dj t dit plus haut ;
newaliases traite le fichier spcifi par le paramtre de configuration
alias_database dans main.cf de Postfix. Hors, qu'avons nous dans le main.cf ?
alias_database = hash:/etc/aliases
Qu'il nous faut donc remplacer par :
alias_database = hash:/etc/mail/sympa.aliases
Si ces deux points sont vrifis, le wwsympa.fcgi devrait dans l'avenir grer correctement les
alias qu'il cre. En attendant, un :
postalias /etc/mail/sympa.aliases
devrait permettre de rendre notre liste0 (presque) oprationnelle. Car sommes nous certains
que Postfix va reconnaitre la destination @lists.nain-t.net comme locale ?
Pour anticiper un peu sur l'avenir (peupl de domaines virtuels), plutt que de l'indiquer en
dur dans le paramtre mydestination, voyons si ce ne serait pas possible de piquer
l'information dans la base de donnes MySQL ncessaire Sympa, elle y est certainement.
Une investigation rapide dans la base montre que :
mysql> select robot_admin from admin_table;
+------------------+
| robot_admin |
+------------------+
| lists.nain-t.net |
+------------------+
1 row in set (0.01 sec)
Donc, un fichier que nous appellerons par exemple
/etc/postfix/db/lists_destinations.cf qui contiendrait ceci :
hosts = 127.0.0.1
user = sympa
password = epikoi
dbname = sympa
query = SELECT robot_admin FROM admin_table WHERE robot_admin = '%s' limit
1
Le limit 1 est ncessaire car sans cette limite, si nous crons n listes dans le domaine nain-
t.net, la requte sortira n occurrences. Il ne reste plus qu' ajouter l'appel ce fichier dans
notre main.cf :
mydestination = $myhostname,
localhost, localhost.localdomain,
mysql:/etc/postfix/db/mydestination.cf,
mysql:/etc/postfix/db/lists_destinations.cf
Et de demander Postfix de relire sa configuration.
(Le fichier /etc/postfix/db/mydestination.cf a t vu dans Postfix avec Cyrus ).
Rsum d'intervention
Nous nous sommes assurs que sympa sait lire et crire dans /etc/mail et nous avons
modifi /etc/mostfix/main.cf comme suit :
alias_maps = hash:/etc/aliases, hash:/etc/mail/sympa.aliases
alias_database = hash:/etc/mail/sympa.aliases
Puis nous avons synchrinis le hash des alias gnrs par sympa avec la commande :
postalias /etc/mail/sympa.aliases
Ceci ne devrait plus tre ncessaire par la suite.
Enfin, nous avons agi sur le mydestination de Postfix en crant un fichier de requte
/etc/postfix/db/lists_destinations.cf sur la base MySQL de Sympa :
hosts = 127.0.0.1
user = sympa
password = epikoi
dbname = sympa
query = SELECT robot_admin FROM admin_table WHERE robot_admin = '%s' limit
1
et avons modifi le paramtre mydestination dans notre main.cf comme ceci :
mydestination = $myhostname,
localhost, localhost.localdomain,
mysql:/etc/postfix/db/mydestination.cf,
mysql:/etc/postfix/db/lists_destinations.cf
C'est tout ?
Si nous n'avons pas de listes grer dans d'autres domaines oui, mais ce n'est pas le cas. Il
nous reste voir comment raliser une configuration fonctionnelle pour plusieurs domaines.
1)
Sympa permet de classer les listes de diffusion par thmes. Une liste de thmes est fournie
par dfaut dans le fichier topics.conf mais ne conviendra sans doute pas nos attentes. Il
convient donc de le modifier selon nos besoins, en respectant sa syntaxe qui est d'une grande
simplicit
2)
Le lecteur attentif et qui chercherait raliser l'installation constatera que le Sympa illustr
ici est en version 5.3.4 alors que Debian Etch fournit la version 5.2.3. Nous verrons plus loin
comment raliser ceci. L'opration permet de disposer d'une version de Sympa qui gre
correctement UTF-8, ce qui n'est pas le cas de la 5.2.3.
Domaines virtuels Sympa
Le but
L'objectif est double :
pouvoir crer des listes de diffusion dans les domaines de messagerie que nous grons.
Par exemple, si nous avons aussi grer les domaines @machin.net et @chose.net, il
faut que nous puissions crer des listes @lists.machin.net et @lists.chose.net, comme
nous l'avons fait avec @lists.nain-t.net ;
offrir une interface de gestion des listes propre chaque domaine.
Sympa est prvu pour a et nous aurons assez peu de choses faire. L'ide est similaire celle
des domaines virtuels d'Apache. Allons-y progressivement.
La mthode
Etape 1
Nous commenons par crer dans /etc/sympa un sous rpertoire que nous nommerons
comme le domaine de listes crer. Exemple :
mkdir /etc/sympa/lists.machin.net
Dans ce rpertoire, il faudra crer un fichier nomm robot.conf assez similaire
/etc/sympa/sympa.conf
Faisons simple :
## This is a sample config file for a Virtual Robot in Sympa

## This hostname will be compared with 'SERVER_NAME' ENV var in
wwsympa.fcgi
## To deduce which Virtual Robot is being queried
http_host lists.machin.net

## Listmasters email addresses
listmaster sysop@machin.net

## Title for the ML service
## It is displayed as a title in the web interface
title Les listes de machin.net

create_list listmaster

## The default action when entering the web interface
## Can be 'lists', 'home' or 'which'
default_home home
Rendons sympa propritaire de tout ceci :
chown -R sympa:sympa /etc/sympa/lists.machin.net
La premire tape est finie. Le fichier est assez comprhensible. Les options indiques dedans
viennent surcharger ou complter celles qui sont dans /etc/sympa/sympa.conf. Ainsi,
sysop@machin.net sera listmaster @lists.machin.net mais attention, le ou les listmasters
dfinis dans le domaine principal (ici @lists.nain-t.net) le seront aussi @lists.machin.net. En
revanche, sysop@machin.net ne sera pas listmaster dans le domaine principal, ni dans les
autres domaines virtuels, sauf mension contraire dans les robots.conf (ou sympa.conf).
Le domaine principal est hirarchiquement suprieur tous les domaines virtuels que nous
pourrons crer par la suite.
Etape 2
SI vous allez faire un tour dans /var/lib/sympa/expl, vous constaterez que sympa y range
des choses concernant les lites du domaine principal. Suivant la mme logique nous allons y
crer un rpertoire du nom de notre nouveau domaine :
mkdir /var/lib/sympa/expl/lists.machin.net
chown sympa:sympa /var/lib/sympa/expl/lists.machin.net
Sympa pourra y stocker ses petites affaires concernant les listes @lists.machin.net
Etape 3
Il faut que le domaine machin.net soit enregistr sur nos DNS de manire ce qu'ils sachent :
rsoudre lists.machin.net ;
indiquer un MX pour le domaine machin.net ;
indiquer un MX pour le sous-domaine lists.machin.net.
Voici un exemple minimal pour la zone machin.net :
$ttl 38400
@ IN SOA cyrus. sysop.bts.net. (
2008060702
10800
3600
604800
38400 )
machin.net. IN NS cyrus.machin.net.
MX 10 cyrus
cyrus.machin.net. IN A 192.168.10.7

lists.machin.net. MX 10 cyrus
lists IN A 192.168.10.7
Etape 4
Il faut que notre Apache rponde correctement http://lists.machin.net Pour a, il suffit
d'ajouter le paramtre ServerAlias lists.machin.net notre serveur virtuel et demander
l'Apache de relire sa configuration :
apache2ctl graceful
Etape 5
A ce niveau, nous pouvons envisager de crer des listes @lists.machin.net, mais la diffusion
des messages ne se fera pas, Postfix n'est pas encore compltement au courant.
Il est dj inform de deux choses :
la destination lists.machin.net est acquise, puisque elle va venir par la base
MySQL de sympa ;
les alias dans /etc/mail/sympa.aliases vont tre automatiquement crs par le script cgi,
mais voyons un peu
#------------------------------ test0: list alias created 04 Jul 2008
test0: "| /usr/lib/sympa/bin/queue test0@lists.nain-t.net"
test0-request: "| /usr/lib/sympa/bin/queue test0-request@lists.nain-t.net"
test0-editor: "| /usr/lib/sympa/bin/queue test0-editor@lists.nain-t.net"
#test0-subscribe: "| /usr/lib/sympa/bin/queue test0-subscribe@lists.nain-
t.net"
test0-unsubscribe: "| /usr/lib/sympa/bin/queue test0-
unsubscribe@lists.nain-t.net"
test0-owner: "| /usr/lib/sympa/bin/bouncequeue test0@lists.nain-t.net"
#------------------------------ liste0: list alias created 04 Jul 2008
lists.machin.net-liste0: "| /usr/lib/sympa/bin/queue
liste0@lists.machin.net"
lists.machin.net-liste0-request: "| /usr/lib/sympa/bin/queue liste0-
request@lists.machin.net"
lists.machin.net-liste0-editor: "| /usr/lib/sympa/bin/queue liste0-
editor@lists.machin.net"
#lists.machin.net-liste0-subscribe: "| /usr/lib/sympa/bin/queue liste0-
subscribe@lists.machin.net"
lists.machin.net-liste0-unsubscribe: "| /usr/lib/sympa/bin/queue liste0-
unsubscribe@lists.machin.net"
lists.machin.net-liste0-owner: "| /usr/lib/sympa/bin/bouncequeue
liste0@lists.machin.net"
Dans le domaine principal, test0 correspond bien la partie utilisateur de l'adresse
test0@lists.nain-t.net. Ce n'est en revanche pas le cas dans notre domaine virtuel o il
faudra faire correspondre lists.machin.net-liste0 la partie utilisateur de
liste0@lists.machin.net
L'astuce consiste utiliser une expression rgulire que Postfix consultera pour
reconnatre ces alias virtuels. Nous crons donc par exemple un fichier
/etc/postfix/sympa_virtual_regexp qui contiendra cette ligne :
/^(.*)@lists\.machin\.net$/ lists.machin.net-$1
Vous ne lisez pas les expressions rgulire dans le texte ? Dommage
Tout ce qui commence (^) par n'importe quel motif ((.*)) suivi de @lists.machin.net sans
plus rien aprs ($) sera remplac par lists.machin.net- suivi du premier (et unique) motif
($1) trouv dans la partie gauche. Exemple :
Dans liste0@lists.machin.net, le motif, c'est liste0. Le tout sera donc remplac par
lists.machin.net-liste0, nous retombons bien sur nos pattes.
Il ne nous reste plus qu' modifier dans le main.cf le paramtre virtual_alias_maps
comme ceci :
virtual_alias_maps = mysql:/etc/postfix/db/virtual-alias.cf,
regexp:/etc/postfix/sympa_virtual_regexp
Et demander Postfix de relire sa configuration. Tout devrait maintenant tre oprationnel.
Bilan
Ces cinq tapes ne seront refaire qu' chaque cration d'un nouveau domaine virtuel. Par la
suite la gestion des listes dans ces domaines virtuels ne ncessitera aucune modification sur
Postfix ni sur Cyrus, qui n'est pas concern.
Compte tenu de la souplesse de Postfix, d'autres approches sont possibles bien entendu, mais
elles ncessiteront beaucoup plus d'interventions sur la configuration de Postfix, moins de
modifier le script alias_manager.pl fourni avec Sympa, et probablement d'autres scripts
aussi.
Plus loin avec Sympa
Versions de Sympa
Debian a pour habitude de faire passer la stabilit avant l'innovation. Ce choix a pour
consquence de disposer de versions logicielles parfois dpasses. Ainsi, au 8 juillet 2008, La
distribution Debian stable (Etch) propose Sympa 5.2.3 (annonce en dcembre 2006), les
versions Testing (Lenny) et Unstable (Sid) proposent la version 5.3.4 (annonce en
novembre 2007), alors que sur le site de Sympa La version 5.4.3 a t annonce le 2 mai
2008). Il est clair que compte tenu de la frquence des mises jour de Sympa, il n'est pas
possible d'envisager de voir empaquet une version trs rcente sur une distribution prouve.
La version 5.2.3 est parfaitement exploitable et l'on peut s'en contenter. Le principal avantage
de passer la version 5.3.4 est de disposer du support UTF-8. Il y a plusieurs autres
amliorations, mais qui concernent principalement la configuration avance de Sympa qui
n'est pas aborde ici. Voyez le changelog pour les dtails.
Il est possible d'installer proprement une version 5.3.4 sur une Etch en effectuant un
backport du paquet Debian issu de Lenny. Nous n'entrerons pas dans les dtails, une
mthode possible est de placer dans /etc/apt/sources.list deb-src
http://mir2.ovh.net/debian/ etch main non-free contrib
deb-src http://security.debian.org/ etch/updates main contrib non-free
En changeant ventuellement de miroir, de rcuprer le paquet source sympa et de le
recompiler sur Etch. Le paquet binaire de Lenny ne peut s'installer tel quel cause d'une
dpendance la libc6. Les autres dpendances sont compatibles avec la distribution Etch,
l'exception de deux paquets qui n'existent pas :
libmime-charset-perl ;
libmime-encwords-perl.
Ces deux paquets binaires peuvent tre rcuprs sur Lenny et installs sur Etch.
Il faudra cependant rester attentif aux correctifs de scurit qui pourraient apparaitre sur ces
trois paquets, puisqu'ils chapperont aux mises jour normales de la distribution.
Personnaliser Sympa
Nous avons dj parl du fichier topics.conf qui contient les rubriques de classement des
listes, mais beaucoup d'autres choses sont modifiables dans Sympa. Voici quelques pistes de
recherche pour ceux qui dsireraient approfondir le fonctionnement de ce gestionnaire de
listes.
Dans le rpertoire /usr/share/sympa se trouvent quelques fichiers intressants, dont un
nomm README , qui est court mais qui en dit long :
Because next installation of Sympa will overwrite this directory, if
you need to customize configuration files, then :
1/ copy desired files to /etc/sympa directory
2/ customize these copied files
Parce que la prochaine installation de Sympa va craser le contenu de ce rpertoire, si vous
avez besoin de personnaliser les fichiers de configuration, alors :
1. copiez les fichiers dsirs dans le rpertoire /etc/sympa ;
2. modifiez ces copies de fichiers.
Un list-subscribe ?
Copiez le fichier /usr/share/sympa/list_aliases.tt2 dans /etc/sympa et dcommentez
les lignes :
#------------------------------ [% list.name %]: list alias created [% date
%]
[% IF is_default_domain -%]
[% list.name %]: "| /usr/lib/sympa/bin/queue [% list.name %]@[% list.domain
%]"
[% list.name %]-request: "| /usr/lib/sympa/bin/queue [% list.name %]-
request@[% list.domain %]"
[% list.name %]-editor: "| /usr/lib/sympa/bin/queue [% list.name %]-
editor@[% list.domain %]"
#[% list.name %]-subscribe: "| /usr/lib/sympa/bin/queue [% list.name %]-
subscribe@[% list.domain %]"
[% list.name %]-unsubscribe: "| /usr/lib/sympa/bin/queue [% list.name %]-
unsubscribe@[% list.domain %]"
[% list.name %][% return_path_suffix %]: "| /usr/lib/sympa/bin/bouncequeue
[% list.name %]@[% list.domain %]"
[% ELSE -%]
[% list.domain %]-[% list.name %]: "| /usr/lib/sympa/bin/queue [% list.name
%]@[% list.domain %]"
[% list.domain %]-[% list.name %]-request: "| /usr/lib/sympa/bin/queue [%
list.name %]-request@[% list.domain %]"
[% list.domain %]-[% list.name %]-editor: "| /usr/lib/sympa/bin/queue [%
list.name %]-editor@[% list.domain %]"
#[% list.domain %]-[% list.name %]-subscribe: "| /usr/lib/sympa/bin/queue
[% list.name %]-subscribe@[% list.domain %]"
[% list.domain %]-[% list.name %]-unsubscribe: "| /usr/lib/sympa/bin/queue
[% list.name %]-unsubscribe@[% list.domain %]"
[% list.domain %]-[% list.name %][% return_path_suffix %]: "|
/usr/lib/sympa/bin/bouncequeue [% list.name %]@[% list.domain %]"
[% END -%]
Modles de listes
Les modles de listes prsents sur le formulaire de cration ne vous conviennent pas ?
L, c'est un peu plus compliqu, mais le rpertoire
/usr/share/sympa/create_list_templates/ contient ce qu'il y a modifier. Commencez
par copier ce rpertoire dans /etc/sympa, armez vous de patience, de la documentation et
voyez comment rendre cette liste plus personnelle. Attention, modifier ces fichiers n'est pas
forcment anodin.
TT2
D'une manire gnrale, les fichiers avec une extension .tt2 sont des templates qui
utilisent le Template Toolkit. Si vous avez quelques journes tuer, c'est l'occasion
Cadeau bonus
Pour ceux qui ne seraient pas satisfaits de la faon dont nous avons interfac Sympa avec
Postfix, voici une autre piste qui prserve d'avantage les ressources systme en cas de spam
storm .
Les transports
Nous le savons, il est possible de dfinir des transports particuliers dans le fichier master.cf
de postfix.
Nous pouvons en dfinir un certain nombre qui font rfrence
/usr/lib/sympa/bin/queue. Voici ce que nous pouvons ajouter dans notre master.cf :
#
# Les pipes sympa
# ou
# Les transports du gestionnaire de listes sympa
#
sympalist unix - n n - - pipe
flags=RF user=sympa argv=/usr/lib/sympa/bin/queue ${user}@${extension}
symparequest unix - n n - - pipe
flags=RF user=sympa argv=/usr/lib/sympa/bin/queue ${user}-
request@${extension}
sympaeditor unix - n n - - pipe
flags=RF user=sympa argv=/usr/lib/sympa/bin/queue ${user}-
editor@${extension}
sympasubscribe unix - n n - - pipe
flags=RF user=sympa argv=/usr/lib/sympa/bin/queue ${user}-
subscribe@${extension}
sympaunsubscribe unix - n n - - pipe
flags=RF user=sympa argv=/usr/lib/sympa/bin/queue ${user}-
unsubscribe@${extension}
sympabounce unix - n n - - pipe
flags=RF user=sympa argv=/usr/lib/sympa/bin/bouncequeue
${user}@${extension}
Nous reconnaissons des syntaxes assez proches de celles que nous avons vues dans
/etc/mail/sympa.aliases. Il nous faudra raliser une map des transports emprunter
suivant l'adresse du message envoyer Sympa.
Alias virtuels
Nous allons exploiter les proprits des extensions d'adresses, avec le recipient_delimiter
:
recipient_delimiter = +
Ainsi que les possibilits de rcriture d'adresses avec les alias virtuels de Postfix. La
comprhension de ce mcanisme n'est pas d'une grande simplicit, il faut bien le dire.
Extension d'adresse
Si nous crivons quelque chose comme truc+bidule@undomaine.quelconque, la partie
gauche du @ va tre spare en deux :
la partie gauche du + (truc) sera rcupre dans la variable ${user} ;
la partie droite du + (bidule) sera rcupre dans la variable ${extension}.
Compte tenu des transports que nous avons crs dans master.cf, nous voyons bien que cette
possibilit va nous servir.
Alias virtuels
Une table d'alias, nous l'avons compris force, permet de remplacer une adresse par une
autre. Nous pouvons exploiter les expressions rgulires dans ces tables, et n'allons pas nous
en priver. Crons par exemple un fichier /etc/postfix/sympa_virtual_aliases qui
contiendrait, compte tenu de nos essais prcdents, ceci :
/^(sympa|listmaster)\@lists\.nain-t\.net$/ $1+lists.nain-
t.net@sympalist.
/^(liste1)-(request|editor|owner|subscribe|unsubscribe)\@lists\.nain-
t\.net$/ $1+lists.nain-t.net@sympa$2.
/^(liste1)\@lists\.nain-t\.net$/ $1+lists.nain-t.net@sympalist.

/^(sympa|listmaster)\@lists\.machin\.net$/
$1+lists.machin.net@sympalist.
/^(liste1)-
(request|editor|owner|subscribe|unsubscribe)\@lists\.machin\.net$/
$1+lists.machin.net@sympa$2.
/^(liste1)\@lists\.machin\.net$/ $1+lists.machin.net@sympalist.
Vous ne lisez toujours pas les expressions rgulires dans le texte ? Tant pis pour vous.
Soit une adresse qui serait par exemple liste1-unsubscribe@lists.machin.net. Elle sera
remplace par liste1+lists.machin.net@sympaunsubscribe. Curieux comme adresse non
?
Mais attendons la suite, nous comprendrons mieux plus tard.
Transport la carte
Crons un fichier nomm par exemple /etc/postfix/sympa_transport_maps qui
contiendrait ceci :
/^.*\@sympalist$/ sympalist:
/^.*\@symparequest$/ symparequest:
/^.*\@sympaeditor$/ sympaeditor:
/^.*\@sympasubscribe$/ sympasubscribe:
/^.*\@sympaunsubscribe$/ sympaunsubscribe:
/^.*\@sympaowner$/ sympabounce:
(Oui ! Encore des expressions rgulires).
Par exemple, un message desitin une adresse qui aurait dans sa partie domaine ( droite
du @ la valeur sympaunsubscribe et seulement cette valeur, sera transmise au transport
sympaunsubscribe.
Reprenons notre exemple prcdent.
1. Postfix a reu un message pour liste1-unsubscribe@lists.machin.net ;
2. cette adresse a donc t transforme en
liste1+lists.machin.net@sympaunsubscribe cause de la table d'alias virtuels ;
3. la table des transports dit qu'un message dont l'adresse du destinataire se termine par
sympaunsubscribe doit tre transmise au transport du mme nom ;
4. le transport en question (/usr/lib/sympa/bin/queue que nous connaissons dj) va
donc recevoir un message avec une adresse de destination de la forme ${user}-
unsubscribe@${extension}.
Notre ${user}, c'est liste1 ;
notre ${extension}, c'est lists.machin.net.
L'adresse communique au transport est donc finalement liste1-
unsubscribe@lists.machin.net. Astucieux non ? Je vous rassure, votre serviteur n'a pas
invent un truc aussi compliqu (et aussi efficace). Il s'est content de le trouver ici.
Et finalement...
Dans postfix, part ajouter les transports dans master.cf, il faut invoquer le rcipient-
delimiter :
recipient_delimiter = +
Invoquer la carte des transports :
transport_maps=regexp:/etc/postfix/sympa_transport_maps
Invoquer la table des alias virtuels :
virtual_alias_maps = mysql:/etc/postfix/db/virtual-alias.cf,
regexp:/etc/postfix/sympa_virtual_aliases
Avantage
Cette mthode limine les expressions plus gnriques que nous avions employes dans la
premire solution, vitant ainsi d'envoyer du spam sympa (ce qui ne l'est pas), Postfix
refusant directement ces messages qui ne sont plus pour lui dans ses destinataires connus.
Autrement dit, contrairement la solution d'origine o un message
albert@lists.machin.net aurait t transmis Sympa et c'est sympa qui l'aurait rejet, ici,
c'est Postfix qui va le rejeter directement.
Inconvnient
A chaque cration d'une nouvelle liste, il faudra intervenir manuellement sur le fichier
/etc/postfix/sympa_virtual_aliases car les alias construits par alias_manager.pl ne
sont ici d'aucune utilit.
Comme ce script utilise des templates tt2 il reste peut-tre un espoir pour qu'un expert
trouve un modle qui apporte une rponse la question. Faute de quoi, il faut crire un autre
script pour automatiser cette tche.
FTP
Pourquoi s'intresser FTP ?
Le protocole FTP est probablement le protocole applicatif le plus complexe, et aussi le moins
utilis au maximum de ses capacits. Il est mme malheureusement bien souvent ignor.
Il est intressant d'tudier FTP au moins pour les raisons suivantes :
C'est le protocole le plus sr pour faire du tlchargement de fichiers, mme si cette
opration peut aussi tre ralise avec HTTP ;
cependant, ce protocole peut poser problme lorsqu'on l'utilise travers un filtre de
paquets (pare-feu) en qualit de client, et encore plus en qualit de serveur, et il est
toujours meilleur de comprendre le problme et de le rsoudre que d'abandonner ;
si l'on souhaite placer un serveur FTP accessible travers un pare-feu filtre de
paquets, en faisant du port forwarding sur le pare-feu, il devient impratif de bien
comprendre le processus, faute de quoi, les transferts FTP resteront probablement
bloqus un moment o un autre. C'est pourtant une solution bien pratique pour
rendre accessible distance certaines de nos donnes sans passer par un tiers de
confiance (ou pas).
Que peut-on faire avec FTP ?
Parmi les applications les plus frquentes :
tlchargement de fichiers depuis un serveur vers le client (Download),
tlchargement de fichiers depuis le client vers un serveur (Upload), par exemple pour
la mise jour des pages web personnelles.
Mais il est possible de faire d'autres choses encore :
bien que cette mthode soit de moins en moins utilise, FTP peut servir envoyer un
document imprimer sur une imprimante distante, l'imprimante faisant alors office de
serveur,
un client FTP peut effectuer des transferts de fichiers entre deux serveurs distants.
Bien que cette possibilit soit peu intressante pour l'internaute moyen, a reste une
fonctionnalit importante pour les administrateurs de sites distants.
Qu'allons nous voir exactement ?
Nous commencerons par tudier FTP sous l'angle de l'utilisateur, en manipulant des clients
FTP connects des serveurs fonctionnels. Nous pourrons ainsi observer quelques points
particuliers de ce protocole particulirement dlicat.
Nous mettrons ensuite en place un serveur FTP, ce qui nous permettra de rendre disponibles
certaines de nos donnes distance.
Enfin, nous verrons comment scuriser ce serveur de manire viter les intrusions si les
donnes ont un aspect confidentiel.
Utilisons FTP
De moins en moins d'internautes utilisent FTP, il en existe mme qui ignorent jusqu' son
existence.
FTP reste pourtant un protocole de transfert de fichier puissant et efficace, parfaitement
interoprable. Son seul dfaut est qu'il ncessite d'en connaitre un peu le fonctionnement,
puisqu'il faut un minimum configurer son client pour en profiter au mieux. La mme
remarque s'applique d'ailleurs POP et IMAP, un webmail n'amenant se poser aucune
question, il n'y a rien configurer (mais tellement moins efficace qu'un vrai MUA, surtout
lorsque l'on dispose de plusieurs boites aux lettres).
Mais revenons FTP. Du point de vue de l'utilisateur, il faut remarquer les modes de transfert
de donnes actif et passif et leurs implications sur le paramtrage du pare-feu, c'est sans doute
le point le plus important. Il est aussi important de savoir que FTP n'est par dfaut pas
scuris, que la connexion normale (utilisateur identifi), laisse passer en clair le nom
d'utilisateur ainsi que le mot de passe, mais qu'il existe des extensions FTP qui permettent le
chiffrement.
Dans cette partie, nous verrons tous ces points en utilisant principalement le client FTP
filezilla dont il existe une version pour la plupart des plate-formes.
Les bases de FTP
Le cas le plus classique
Un client (utilisateur FTP) va se servir de ce protocole, pour faire du transfert de fichiers
(upload ou download) sur un serveur FTP.
Il existe une multitude de logiciels clients en mode graphique pour raliser ces oprations.
Passons sur les fonctions FTP implmentes dans les navigateurs web (Internet Explorer,
Mozilla), qui ne sont pas toujours trs pratiques.
Clients Windows
Vous serez probablement surpris de constater le nombre impressionnant de clients FTP
disponibles, le plus souvent en shareware (Windows oblige). Il en existe cependant au
moins un sous licence GPL : Filezilla. En plus d'tre sous licence GPL, ce logiciel est
galement localis en franais, ce qui ne gte rien.
A noter galement le module complmentaire de Firefox : FireFTP qui offre ce navigateur
de vritables fonctions de client FTP.
Clients GNU/Linux
Nous avons gftp , naturellement sous licence GPL, mais galement le mme FileZilla port
sur GNU/Linux et aussi Mac OS X. Bien entendu, le module FireFTP de Firefox reste
d'actualit.
Autres possibilits
Il existe enfin des utilitaires FTP en ligne de commande, aussi bien sous Windows que sous
Linux. Il sont certainement moins conviviaux, mais pas forcment moins puissants. L'outil en
ligne de commande lftp est sans doute le plus abouti. Les utilisateurs de MS Windows devront
s'en passer.
Dans la suite, nous utiliserons donc le client Filezilla :

Les clients FTP graphiques ont tous plus ou moins la mme prsentation. Ici, nous nous
sommes connects au serveur mir1.ovh.net de faon anonyme. Nous aurons l'occasion de
revenir sur ce mode de connexion.
La partie gauche reprsente l'arborescence locale et la partie droite, celle du serveur FTP.
Le principe de base
Le client ouvre une session FTP sur un serveur. Il existe une grande quantit de serveurs FTP
publics. Un serveur FTP requiert une identification du client. Il existe souvent un compte
anonyme , qui donne accs en lecture seule dans la partie publique du serveur, mais il existe
galement des parties prives o les clients disposant d'un compte peuvent accder en criture
sur certains rpertoires de l'arborescence. C'est le cas, par exemple, pour les mises jour de
pages web personnelles.

La premire chose que l'on constate, c'est que, contrairement d'autres protocoles comme
HTTP, nous allons ici utiliser au moins deux canaux distincts :
L'un pour l'change des commandes du protocole,
l'autre pour le transfert des donnes elle-mmes. Il est possible d'ouvrir plusieurs
canaux de donnes simultanment,si le serveur l'autorise, par exemple si l'on souhaite
rcuprer plusieurs fichiers sur un serveur.
Le client FTP (partie de droite), par l'intermdiaire de l'interface utilisateur, va cacher les
diverses commandes du protocole FTP par des manipulations plus conviviales, en proposant
l'utilisateur une vision des choses similaire un gestionnaire de fichiers. Avec des clics et des
glisser/dposer l'utilisateur exploitera FTP sans en connaitre la multitude de commandes.
L'autre cas
Un utilisateur pourra
exploiter FTP pour transfrer depuis son poste de travail des fichiers d'un serveur distant un
autre serveur distant, sans que les donnes ne transitent par sa machine, ce qui est fort
intressant si l'on travaille depuis une connexion faible dbit pour passer des donnes
volumineuses d'une machine une autre, ces dernires tant quant--elles connectes par des
liens haut dbit. Cependant, cette opration ne sera possible que si les serveurs FTP
l'acceptent (FXP), ce qui n'est pas souvent le cas, pour des raisons de scurit et nous n'en
parlerons pas d'avantage ici.
Modes Actif et Passif
Le meilleur moyen pour comprendre FTP n'est probablement pas la lecture des RFC mais
plutt l'exprimentation, du moins dans un premier temps. Nous allons donc mettre en uvre
FTP, voir comment les choses se passent et vrifier seulement aprs que c'est bien conforme
ce qui est dit dans les Livres.
Les manipulations sont faites depuis un poste client connect un LAN, lui-mme connect
l'Internet par une passerelle NAT GNU/Linux. Un sniffeur est plac sur le poste client lui-
mme, il aurait pu l'tre sur la passerelle.
Il faut bien prendre le problme par un bout pour le dcortiquer, mme si pour l'instant, nous
ne savons rien ou pas grand chose de FTP. Nous sommes donc obligs de faire appel un
paramtrage du client, sans trop savoir pourquoi on va le faire comme a. Nous y reviendrons
par la suite.
Le protocole FTP supporte deux manires de fonctionner, peine diffrentes, mais la
diffrence est d'importance, surtout lorsque l'on doit traverser un pare-feu par filtrage de
paquets. Ce sont les modes actif et passif.
Pour l'instant, contentons-nous de dire que si l'on doit passer un pare-feu, il vaut mieux
utiliser le mode passif, car le mode actif risque de se solder rapidement par un chec. Ceci dit,
le pare-feu utilis ici est construit avec Iptables, qui sait parfaitement reconnaitre du FTP actif
et le laisser passer sans encombre si nous lui en avons donn la consigne. Nous allons donc
commencer par ce mode l.
Le rsultat de la manipulation qui suit n'est plus tout jeune, les noms des htes et du fichier
tlcharg ne sont plus d'actualit, mais le protocole, lui, n'a pas chang et l'exemple est
toujours valide.
Nous avions cr une connexion au serveur ftp.oleane.fr, parcouru son arborescence, et
tlcharg le fichier /pub/doc/rfc/rfc765.txt.
Ce que montre le sniffeur
Avertissement
L'tude qui va suivre est assez longue, voire laborieuse. Munissez-vous de temps, de
friandises et de boissons, parce que nous allons rester coincs ici pendant un petit moment
Pour vous viter de faire plusieurs aller-retours sur la page, j'ai essay d'organiser cette tude
de faon la plus linaire possible, c'est ce qui rend ce paragraphe trs long. Allons-y.
tablissement de la connexion pour les commandes
No. Time Source Destination Protocol Info
1 0.000000 192.168.0.10 194.2.0.36 TCP 1175 > ftp [SYN]
2 0.022327 194.2.0.36 192.168.0.10 TCP ftp > 1175 [SYN, ACK]
3 0.022356 192.168.0.10 194.2.0.36 TCP 1175 > ftp [ACK]
tablissement d'une connexion TCP entre le client (192.168.0.10:1175) et le serveur
(192.2.0.36:21). Le port 21 est le port standard d'coute des commandes FTP. Nous trouvons
ici le classique dialogue [SYN], [SYN,ACK], [ACK]. Etait-il ncessaire de le signaler ? FTP
s'appuie bien entendu sur un mode connect (TCP).
Pour savoir que le port nomm ftp est bien le port 21, il suffit d'aller regarder dans le dtail
de la trame 1 par exemple :
Frame 1 (62 bytes on wire, 62 bytes captured)
...
Transmission Control Protocol, Src Port: 1175 (1175), Dst Port: ftp
(21)
Source port: 1175 (1175)
Destination port: ftp (21)
...
Mais passons la suite
4 0.055680 194.2.0.36 192.168.0.10 FTP Response: 220 ProFTPD
1.2.0pre10 Server (ProFTPD)
[ftp.oleane.net]
Le serveur entame le dialogue propre au protocole FTP en se prsentant. Chaque rponse
commence par un nombre, optionnellement suivi d'un commentaire. La rponse 220 signifie :
Service disponible pour nouvel utilisateur .
Vous aurez l'occasion de constater dans la suite quel point les systmes informatiques savent
tre civiliss. Le serveur se prsente, par la mme occasion.
5 0.057744 192.168.0.10 194.2.0.36 FTP Request: USER anonymous
Le client se prsente aussi en indiquant son nom. Comme nous avons fait un accs anonyme,
nous utilisons le nom conventionnel anonymous. Nous n'aurons droit qu' un accs en lecture.
Si nous avions dispos d'un compte d'utilisateur, nous aurions un identifiant personnel (nom
d'utilisateur et mot de passe) qui nous permettrait ventuellement de disposer d'un droit
d'accs en criture dans un rpertoire de l'arborescence.
6 0.078527 194.2.0.36 192.168.0.10 TCP ftp > 1175 [ACK]
7 0.081892 194.2.0.36 192.168.0.10 FTP Response: 331 Anonymous
login ok, send your complete
e-mail address
as password.
Le serveur accepte les accs anonymes. Ce n'est pas une obligation, certains serveurs ne le
font pas. En gnral, en accs anonyme, l'adresse e-mail du client utilisateur est employe
comme mot de passe, mais tout ce qui a vaguement une forme d'adresse e-mail est
gnralement accept.
8 0.084076 192.168.0.10 194.2.0.36 FTP Request: PASS
anon@localhost
La preuve, Filezilla envoie un laconique anon@localhost et tout va fonctionner quand
mme
PASS est une commande FTP, c'est l'abrviation de Password.
9 0.108851 194.2.0.36 192.168.0.10 FTP Response: 230-Welcome,
archive user
anonymous@ca-
marseille-51-107.abo.wanadoo.fr!
La preuve La rponse 230 veut dire : Session ouverte . Notons tout de mme que le
serveur a ici effectu une requte reverse DNS sur notre adresse IP, d'o la rponse
anonymous@ca-marseille-51-107.abo.wanadoo.fr.
11 0.109313 192.168.0.10 194.2.0.36 TCP 1175 > ftp [ACK]
12 0.109914 194.2.0.36 192.168.0.10 FTP Response: 230-The local
time is:
Sat Jan 11
10:32:57 2003
13 0.110341 194.2.0.36 192.168.0.10 FTP Response: 230-
14 0.110365 192.168.0.10 194.2.0.36 TCP 1175 > ftp [ACK]
15 0.131452 194.2.0.36 192.168.0.10 FTP Response: 230-For
informations about
this archive
service,
or to report
problems,
Le serveur nous donne son heure locale, qui peut tre utile si l'on devait signaler un problme
l'administrateur du service.
16 0.141903 192.168.0.10 194.2.0.36 FTP Request: PWD
Le client envoie la commande PWD qui signifie : Print Working Directory
17 0.172747 194.2.0.36 192.168.0.10 FTP Response: 257 "/" is
current directory.
Nous sommes la racine de l'arborescence du serveur FTP. Le code 257 signifie Chemin
cr .
O en sommes-nous ?
Nous avons initi une connexion FTP avec le serveur. Nous nous sommes identifi comme un
utilisateur anonyme et nous nous retrouvons dans la racine de l'arborescence du serveur FTP.
Nous avons vu quelques commandes FTP : USER, PASS, PWD et quelques codes de
rponse. Jusqu'ici, c'tait relativement simple, nous n'avons transmis que des commandes et
des rponses ces commandes. Maintenant, a va commencer se compliquer, parce que
nous allons faire aussi transiter des donnes.
18 0.176308 192.168.0.10 194.2.0.36 FTP Request: PORT
192,168,0,10,4,152
Premire commande curieuse : PORT 192.168.0.10,4,152, qui ncessite quelques
explications.
PORT, c'est une commande. Le client signale qu'il voudrait utiliser un port particulier
;
192.168.0.10, l'adresse du client et notons bien que nous voyons ici une adresse IP
prive, non routable sur l'internet,
4,152, c'est la notation d'un numro de port, crit la mode des adresses IP, c'est dire
sous forme de deux octets, dont chaque octet est exprim en valeur dcimale. Dans la
pratique, ceci veut dire que le port spcifi sera 4 x 256 + 152 = 1176
La suite va nous indiquer plus clairement qui va servir ce port.
19 0.198149 194.2.0.36 192.168.0.10 FTP Response: 200 PORT command
successful.
Le serveur rpond qu'il est d'accord. 200 signifie : Commande conclue .
20 0.200751 192.168.0.10 194.2.0.36 FTP Request: TYPE A
La commande TYPE indique au serveur quel type de donnes sont attendues. Le type A
signale que l'on attend du texte ASCII.
21 0.223387 194.2.0.36 192.168.0.10 FTP Response: 200 Type set to
A.
Le serveur est toujours d'accord.
22 0.225874 192.168.0.10 194.2.0.36 FTP Request: LIST
La commande LIST qui signifie que le client attend la liste des objets prsents dans le
rpertoire courant (l'quivalent de la commande DIR de MSDOS ou ls de UNIX).
Attention !!!
Ce qu'il va se passer maintenant rclame beaucoup d'attention. Rappelons-nous :
Que nous sommes en mode Actif,
Que le client a demand l'usage du port 1176
23 0.247769 194.2.0.36 192.168.0.10 TCP ftp-data > 1176 [SYN]
24 0.247826 192.168.0.10 194.2.0.36 TCP 1176 > ftp-data [SYN, ACK]
25 0.264940 194.2.0.36 192.168.0.10 TCP ftp > 1175 [ACK]
26 0.267461 194.2.0.36 192.168.0.10 TCP ftp-data > 1176 [ACK]
Le serveur FTP initie une nouvelle connexion FTP (trames 23,24 et 26). Mais vous avez bien
vu, c'est le serveur qui initie la connexion, autrement dit, il agit comme un client TCP, et c'est
le client FTP qui va agir comme un serveur TCP, c'est dire qu'il va rester l'coute de son
port 1176. Cette particularit est due au mode actif. Le client FTP est actif, parce qu'ici, ce
sera lui le serveur (au sens TCP).
Mais comment 192.168.0.10, c'est une adresse prive, comment le serveur FTP d'Olane
peut-il joindre une adresse prive, non routable par dfinition ?
Notre sniffeur se situe sur le poste client. Si nous l'avions plac sur le routeur NAT, nous
aurions observ d'autres adresses, l'adresse publique du routeur la place de 192.168.0.10.
C'est srement un coup du Netfilter. Il est fort ce Netfilter
Il est fort mais tout de mme il faut l'aider. Netfilter sait faire du suivi de connexion, c'est--
dire dans son jargon identifier des connexions RELATED (relatives une connexion dj
existante). Il sait le faire avec de l'aide de modules spcifiques pour des protocoles o il est
ncessaire d'analyser le dialogue au niveau de l'application.
Netfilter travaille normalement au niveau Internet (IP), des modules particuliers peuvent se
charger automatiquement pour la gestion du transport (TCP/UDP) si le filtrage ncessite de
s'intresser aux ports utiliss. Quelques modules spciaux peuvent permettre d'analyser le
contenu au niveau Application, c'est ce qui nous intresse ici avec les modules nf-
conntrack-ftp et nf-nat-ftp, mais il faut charger explicitement ces modules la main
ou au moment de l'init. C'est ce qui a t fait sur le routeur NAT utilis ici.
C'est le module nf-nat-ftp qui permet ici de remplacer la vole l'adresse locale (prive) du
client par celle publique de la passerelle, et d'effectuer l'opration inverse sur les rponses du
serveur.
Si nous n'avons pas les moyens de disposer d'un tel outil sur le routeur NAT, le mode actif ne
pourra fonctionner, nous devrons nous contenter du mode passif o le serveur FTP est aussi
serveur sur les canaux de donnes.
Rsumons nous
A ce stade, nous avons deux connexions TCP ouvertes :
192.168.0.10:1175 194.2.0.36:21. Cette connexion sert faire passer les
commandes et les rponses ces commandes, 194.2.0.36 est le serveur, au sens TCP,
c'est lui qui coute sur son port 21 ce que le client FTP lui raconte, c'est le canal de
commande
194.2.0.36:20 192.168.0.10:1176. Cette connexion va servir faire passer les
donnes. Ici, la liste du rpertoire racine du serveur FTP vers le client FTP, qui agit
comme un serveur TCP. Ce sera le canal de donnes.
27 0.299444 194.2.0.36 192.168.0.10 FTP Response: 150 Opening
ASCII mode data
connection for
file list.
Le serveur FTP rpond 150, c'est dire : Statut de fichier vrifi, ouverture de canal de
donnes en cours .
28 0.303502 194.2.0.36 192.168.0.10 FTP-DATA FTP Data: 75 bytes
29 0.305993 194.2.0.36 192.168.0.10 FTP-DATA FTP Data: 699 bytes
30 0.306052 192.168.0.10 194.2.0.36 TCP 1176 > ftp-data [ACK]
31 0.306101 194.2.0.36 192.168.0.10 FTP Response: 226-Transfer
complete.
Normalement, c'est bien le catalogue de la racine du serveur FTP qui a t envoye vers le
client FTP. Nous pouvons le vrifier en regardant par exemple les donnes contenues dans la
trame 29. Ce n'est pas trs lisible, mais c'est bien a. Je vous demande de me croire sur parole,
inutile de charger encore d'avantage cette page dj lourde. :
La rponse 226 signifie : Fermeture du canal de donnes. Service termin .
32 0.306117 192.168.0.10 194.2.0.36 TCP 1175 > ftp [ACK]
33 0.306470 194.2.0.36 192.168.0.10 FTP Response: 226 Quotas off
34 0.307484 192.168.0.10 194.2.0.36 TCP 1176 > ftp-data [FIN, ACK]
35 0.338378 194.2.0.36 192.168.0.10 TCP ftp-data > 1176 [ACK]
Comme c'tait prvu, 192.168.0.10:1176 met fin la connexion TCP qui a servi de support au
canal de donnes. C'est le client FTP qui met fin cette connexion.
36 0.457543 192.168.0.10 194.2.0.36 TCP 1175 > ftp [ACK]
37 2.447889 192.168.0.10 194.2.0.36 FTP Request: CWD pub
Nous sommes de nouveau sur le canal de commandes et le client FTP demande changer de
rpertoire. CWD voulant dire : Change Working Directory . Nous allons dans le rpertoire
pub. Ce qui va maintenant suivre va ressembler ce que nous venons de voir. Je vous laisse la
totalit des trames pour deux raisons :
Nous permettre de vrifier que vous avez bien compris le mcanisme, parce que je ne
vais pas tout rpter,
permettre d'observer un dtail qui n'est pas sans importance
38 2.471233 194.2.0.36 192.168.0.10 FTP Response: 250 CWD command
successful.
39 2.473782 192.168.0.10 194.2.0.36 FTP Request: PWD
40 2.499085 194.2.0.36 192.168.0.10 FTP Response: 257 "/pub" is
current directory.
41 2.502415 192.168.0.10 194.2.0.36 FTP Request: PORT
192,168,0,10,4,153
42 2.524624 194.2.0.36 192.168.0.10 FTP Response: 200 PORT command
successful.
43 2.527863 192.168.0.10 194.2.0.36 FTP Request: TYPE A
44 2.549182 194.2.0.36 192.168.0.10 FTP Response: 200 Type set to
A.
45 2.551642 192.168.0.10 194.2.0.36 FTP Request: LIST
46 2.572805 194.2.0.36 192.168.0.10 TCP ftp-data > 1177 [SYN]
47 2.572856 192.168.0.10 194.2.0.36 TCP 1177 > ftp-data [SYN, ACK]
48 2.585185 194.2.0.36 192.168.0.10 TCP ftp > 1175 [ACK]
49 2.593535 194.2.0.36 192.168.0.10 TCP ftp-data > 1177 [ACK]
Selon le mme mcanisme que celui vu plus haut, un nouveau canal de donnes est ouvert,
mais le client FTP utilise un nouveau port : 1177, cette fois-ci. C'est un dtail qui a son
importance
En effet, dans le cas o nous avons beaucoup de fichiers transfrer, nous allons utiliser
beaucoup de ports successivement. Pour calculer des firewalls qui ne sont pas statefull ,
ceci ne simplifiera pas les choses.
50 2.595535 194.2.0.36 192.168.0.10 FTP Response: 150 Opening
ASCII mode data
connection for
file list.
51 2.625058 194.2.0.36 192.168.0.10 FTP-DATA FTP Data: 59 bytes
52 2.627332 194.2.0.36 192.168.0.10 FTP-DATA FTP Data: 718 bytes
53 2.627375 192.168.0.10 194.2.0.36 TCP 1177 > ftp-data [ACK]
54 2.629615 194.2.0.36 192.168.0.10 FTP Response: 226-Transfer
complete.
55 2.629654 192.168.0.10 194.2.0.36 TCP 1175 > ftp [ACK]
56 2.630203 194.2.0.36 192.168.0.10 FTP Response: 226 Quotas off
57 2.652599 194.2.0.36 192.168.0.10 FTP-DATA FTP Data: 1229 bytes
58 2.652668 192.168.0.10 194.2.0.36 TCP 1177 > ftp-data [ACK]
59 2.654073 192.168.0.10 194.2.0.36 TCP 1177 > ftp-data [FIN, ACK]
60 2.700163 194.2.0.36 192.168.0.10 TCP ftp-data > 1177 [ACK]
Bien, nous n'allons pas poursuivre plus longtemps le cheminement dans les sous rpertoires,
d'autant qu' chaque niveau, le catalogue devient de plus en plus volumineux.
87 11.063406 192.168.0.10 194.2.0.36 FTP
Request: CWD rfc
...
95 11.177496 192.168.0.10 194.2.0.36 FTP
Request: LIST
...
Et un grand saut plus loin :
413 29.719734 192.168.0.10 194.2.0.36 FTP Request: PWD
414 29.741101 194.2.0.36 192.168.0.10 FTP Response: 257
"/pub/doc/rfc"
is current
directory.
Nous arrivons enfin dans le bon rpertoire
415 29.912570 192.168.0.10 194.2.0.36 TCP 1180 >; ftp [ACK]
416 30.584219 192.168.0.10 194.2.0.36 FTP Request: TYPE A
417 30.605939 194.2.0.36 192.168.0.10 FTP Response: 200 Type set to
A.
418 30.609380 192.168.0.10 194.2.0.36 FTP Request: PORT
192,168,0,10,4,157
419 30.635498 194.2.0.36 192.168.0.10 FTP Response: 200 PORT
command successful.
420 30.639387 192.168.0.10 194.2.0.36 FTP Request: RETR rfc765.txt
421 30.660814 194.2.0.36 192.168.0.10 TCP ftp-data > 1181 [SYN]
422 30.660867 192.168.0.10 194.2.0.36 TCP 1181 > ftp-data [SYN,
ACK]
423 30.676003 194.2.0.36 192.168.0.10 TCP ftp > 1180 [ACK]
424 30.683263 194.2.0.36 192.168.0.10 TCP ftp-data > 1181 [ACK]
425 30.684698 194.2.0.36 192.168.0.10 FTP Response: 150 Opening
ASCII mode data
connection for
rfc765.txt (146641 bytes).
426 30.685450 194.2.0.36 192.168.0.10 FTP-DATA FTP Data: 2 bytes
427 30.687400 194.2.0.36 192.168.0.10 FTP-DATA FTP Data: 716 bytes
Nous ouvrons encore un nouveau canal de donnes, nous en sommes maintenant au port
1181, donnes de type A toujours (ASCII) et utilisons la commande RETR (Retrieve) pour
transfrer le fichier rfc765.txt depuis le serveur FTP vers le client FTP.
Certains lecteurs l'il acr auront remarqu que le port utilis par le client FTP sur le canal
de commande a chang depuis le dbut de la session. Pour une raison parasite, il y a eu une
re-connexion au serveur la fin de la transmission du catalogue de /pub/doc/rfc, re-
connexion qui a entrain l'ouverture d'un nouveau canal de commande, sans que le prcdent
ne soit ferm.
428 30.687446 192.168.0.10 194.2.0.36 TCP 1181 > ftp-data [ACK]
429 30.710881 194.2.0.36 192.168.0.10 FTP-DATA FTP Data: 1400 bytes
430 30.712372 194.2.0.36 192.168.0.10 FTP-DATA FTP Data: 1400 bytes
431 30.712414 192.168.0.10 194.2.0.36 TCP 1181 > ftp-data [ACK]
...
Les donnes commencent venir, il y en a pour un moment. Nous nous retrouvons la fin du
fichier :
614 33.613493 192.168.0.10 194.2.0.36 TCP 1181 > ftp-data [FIN,
ACK]
615 33.636771 194.2.0.36 192.168.0.10 TCP ftp-data > 1181 [ACK]
Voil, c'est fini. nous arrtons la transaction avec le serveur FTP :
616 36.666211 192.168.0.10 194.2.0.36 TCP 1175 > ftp [FIN, ACK]
617 36.686973 194.2.0.36 192.168.0.10 TCP ftp > 1175 [ACK]
618 36.689259 194.2.0.36 192.168.0.10 TCP ftp > 1175 [FIN, ACK]
619 36.689275 192.168.0.10 194.2.0.36 TCP 1175 > ftp [ACK]
620 38.511841 192.168.0.10 194.2.0.36 TCP 1180 > ftp [FIN, ACK]
621 38.530529 194.2.0.36 192.168.0.10 TCP ftp > 1180 [ACK]
622 38.533514 194.2.0.36 192.168.0.10 TCP ftp > 1180 [FIN, ACK]
623 38.533552 192.168.0.10 194.2.0.36 TCP 1180 > ftp [ACK]
Toutes les connexions TCP encore ouvertes sont fermes, y compris le canal de commande
initialement ouvert (port 1175).
Qu'avons-nous appris ?
Dj beaucoup de choses :
nous avons mis en vidence la prsence du canal de commande et du canal de
donnes, placs sur des connexions TCP diffrentes,
nous avons, dans ce cas de FTP en mode actif, observ que, pour la cration du canal
de donnes, le client FTP :
o indique au serveur un numro de port ;
o se met l'coute sur ce port (fonction serveur TCP ) ;
o le serveur FTP va quant lui, utiliser le port 20 pour ce canal de donnes et
agir en client TCP.Ce dtail est extrmement important. Il explique la raison
pour laquelle le FTP actif ne fonctionne pas correctement sur des filtres de
paquets qui interdisent tout paquet SYN depuis le Net vers la zone protge.
Nous avons vu en effet qu'ici, le serveur FTP initie une nouvelle connexion
TCP sur le client FTP (ne nous mlangez pas les pdales entre FTP et TCP).
De plus, si le routeur fait du NAT, comme c'est souvent le cas, a ne va pas
tre simple de savoir qui s'adresse cette nouvelle connexion. N'oublions pas
que nous regardons ici ce qu'il se passe derrire le NAT. Le serveur FTP, qui
est sur le Net, n'a aucune connaissance de l'IP relle de son client. Pour lui, son
interlocuteur, c'est le routeur NAT lui-mme, vu du ct Internet, ceci est le
travail de Netfilter et des modules du kernel spcialiss dans le traitement de
FTP, associs une rgle qui laisse entrer les nouvelles connexion identifies
comme RELATED ;
nous avons vu galement quelques commandes FTP ainsi que quelques codes de
rponses ;
enfin, nous avons vu un type de transfert, le type A, qui correspond de l'ASCII. Mais
tout fichier n'est pas forcment de l'ASCII. que va-t-il se passer si le fichier
transporter est, par exemple, une image jpg ?
Bien qu' ce niveau, si vous tes toujours l, vous pouvez commencer lire ces fameuses rfc
765 avec quelques chances d'y comprendre quelque chose, vous sentez bien, n'est-ce pas, qu'il
y aurait encore quelques manipulations intressantes faire
Plus en profondeur
Ici, nous allons voir quelques points importants :
Le mode passif ;
le transfert de fichiers contenant autre chose que du texte ;
un transfert en upload.
Le mode Passif
La premire chose faire, lorsque l'on prend en main un client FTP, c'est de trouver quel
endroit l'on peut lui expliquer qu'il doit fonctionner en mode actif ou passif.
Nous n'allons pas nous lancer dans une tude dtaille de Filezilla qui nous mnerait trop loin.
Disons simplement que la plupart des clients FTP proposent :
la possibilit d'une connexion rapide o l'on indique le nom du serveur et
ventuellement ses nom d'utilisateur et mot de passe ;
la cration d'une liste de sites FTP pour un usage rpt ;
une configuration par dfaut, qui est applique aux connexions rapides et sert de base
la configuration d'un site enregistr dans la liste ;
une configuration personnalise pour chaque site FTP rfrenc dans la liste.
Nous nous bornerons pour l'instant visiter la configuration par dfaut de Filezilla (version
3.5.2 GNU/Linux), dans le menu dition/Paramtres pour forcer le mode passif :

Le mode passif est recommand uniquement parce qu'il fonctionne plus facilement
derrire un routeur NAT. En ralit, les serveurs FTP prfrent le mode actif qui est pour eux
moins consommateur de ressources.
Il serait intressant de discuter des configurations particulires que l'on peut appliquer aux
modes actif et passif, mais c'est peut-tre encore un peu tt.
Voyons ce que donne le mme tlchargement, mais en mode passif :
No. Time Source Destination Protocol Info
...
L'ouverture de session FTP est faite, la connexion de commandes est tablie, le client envoie
la premire commande PWD
20 10.588511 192.168.0.10 194.2.0.36 FTP Request: PWD
21 10.609876 194.2.0.36 192.168.0.10 FTP Response: 257 / is
current directory.
Jusqu'ici, tout tait pareil, mais voyons la suite :
22 10.613105 192.168.0.10 194.2.0.36 FTP Request: PASV
Cette nouvelle commande indique au serveur FTP que nous souhaitons fonctionner en mode
passif.
23 10.661077 194.2.0.36 192.168.0.10 FTP Response: 227 Entering
Passive Mode (194,2,0,36,17,77).
Le serveur accepte (227 veut dire : Passage en mode passif ), et indique un numro de port,
ici 17 x 256 + 77 = 4429
24 10.663545 192.168.0.10 194.2.0.36 FTP Request: TYPE A
25 10.693712 194.2.0.36 192.168.0.10 FTP Response: 200 Type set to
A.
26 10.697611 192.168.0.10 194.2.0.36 FTP Request: LIST
27 10.698306 192.168.0.10 194.2.0.36 TCP 1870 > 4429 [SYN]
Voyez ici comment la connexion TCP destine supporter le canal de donnes est cre. Ce
n'est plus le serveur FTP qui, depuis son port 20 initie une connexion vers le client FTP, mais
le client FTP qui ouvre une connexion TCP sur le port que lui a indiqu le serveur, la suite
de la commande PASV.
28 10.731631 194.2.0.36 192.168.0.10 TCP ftp > 1869 [ACK]
29 10.736716 194.2.0.36 192.168.0.10 TCP 4429 > 1870 [SYN, ACK]
30 10.736751 192.168.0.10 194.2.0.36 TCP 1870 > 4429 [ACK]
31 10.757437 194.2.0.36 192.168.0.10 FTP Response: 150 Opening
ASCII mode data
connection for
file list
32 10.761018 194.2.0.36 192.168.0.10 FTP-DATA FTP Data: 75 bytes
...
Le reste ne prsente pas de nouveauts particulires. Notons qu'ici, c'est le serveur qui indique
sur quel port il attend la prochaine connexion pour le transfert de donnes, et non plus le
client FTP, comme nous l'avons vu en mode actif.
Ici, le suivi de connexion FTP n'est plus ncessaire sur la passerelle NAT/pare-feu.
Que pouvons-nous en conclure ?
Dans le mode passif, le client FTP est toujours client TCP. A charge pour le serveur FTP
d'ouvrir de nouveaux ports sur lesquels il sera encore serveur TCP, pour le support des canaux
de donnes. Le client FTP n'est jamais serveur TCP. Simplifie la vie pour le passage des
filtres de paquets, mais alourdit la charge des serveurs FTP.
Chaque fois que ce sera possible, surtout si nous travaillons sur des petits serveurs FTP ,
utilisons plutt le mode actif.
Le transfert non ASCII
C'est la deuxime chose qu'il faut savoir paramtrer sur son client FTP, parce qu'en principe,
c'est lui qui dcide. Nous avons bien vu que c'tait lui qui envoyait la commande TYPE.
Toujours sur Filezilla :

Ce client FTP est vraiment trs bien fait Toujours dans le menu Edition/paramtres ,
allons dans Paramtres de transfert/ASCII/Binaire et voyons. Par dfaut, notre client est
paramtr pour faire une dtection automatique, en fonction de l'extension du fichier. Comme
nous avons tlcharg un fichier txt, il a choisi automatiquement le mode ASCII. Nous
pouvons forcer un mode. Bien entendu, si nous forons le mode ASCII, les fichiers non
ASCII arriveront corrompus. Il n'y a pas ici de mcanisme de type MIME pour faire de
l'encodage base 64 par exemple.
Si nous devons forcer un mode, forons le mode binaire, qui fonctionnera avec tout type de
fichier, mais pas forcment de manire optimale.
Quelles diffrences ?
Juste un petit morceau de sniff :
No. Time Source Destination Protocol Info
...
418 57.591410 192.168.0.10 194.2.0.36 FTP Request: TYPE I
Le type demand est maintenant I et non plus A
419 57.612530 194.2.0.36 192.168.0.10 FTP Response: 200 Type set to
I.
420 57.615147 192.168.0.10 194.2.0.36 FTP Request: PASV
421 57.635511 194.2.0.36 192.168.0.10 FTP Response: 227 Entering
Passive Mode (194,2,0,36,18,136).
422 57.640090 192.168.0.10 194.2.0.36 FTP Request: RETR rfc765.txt
423 57.640783 192.168.0.10 194.2.0.36 TCP 1111 > 4744 [SYN]
424 57.679211 194.2.0.36 192.168.0.10 TCP 4744 > 1111 [SYN, ACK]
425 57.679269 192.168.0.10 194.2.0.36 TCP 1111 > 4744 [ACK]
426 57.684695 194.2.0.36 192.168.0.10 TCP ftp > 1105 [ACK]
427 57.699374 194.2.0.36 192.168.0.10 FTP Response: 150 Opening
BINARY mode data
connection for
rfc765.txt (146641 bytes).
Le serveur rpond qu'il ouvre le fichier en mode binaire et non plus ASCII
428 57.722806 194.2.0.36 192.168.0.10 FTP-DATA FTP Data: 1412 bytes
429 57.724012 194.2.0.36 192.168.0.10 FTP-DATA FTP Data: 1412 bytes
...
Les RFC 959 expliquent d'ailleurs la chose aux paragraphes 3.1.1.1 et 3.1.1.3
O le serveur engueule le client
Encore un test hors d'age, mais qui reste intressant. Un upload :
En utilisant un autre client FTP, ici, ce sera le client gFTP sous GNU/Linux
En utilisant un autre serveur FTP, ici, le serveur perso-ftp.wanadoo.fr.
En effet, chaque client FTP a ses petites habitudes et chaque serveur aussi
Une fois de plus, nous allons tudier dans le dtail cet change.
No. Time Source Destination Protocol Info
93 1.620013 192.168.0.254 193.252.18.14 TCP 32781 > ftp [SYN]
94 1.650006 193.252.18.14 192.168.0.254 TCP ftp > 32781 [SYN, ACK]
95 1.650162 192.168.0.254 193.252.18.14 TCP 32781 > ftp [ACK]
Ouverture du canal de contrle
96 2.228519 193.252.18.14 192.168.0.254 FTP Response: 220 pwp-ftp2
FTP server
(@(#)Version
: 3-2-2 2002/08/21) ready.
97 2.228698 192.168.0.254 193.252.18.14 TCP 32781 > ftp [ACK]
98 2.229021 192.168.0.254 193.252.18.14 FTP Request: USER dupond
99 2.256639 193.252.18.14 192.168.0.254 TCP ftp > 32781 [ACK]
100 2.261983 193.252.18.14 192.168.0.254 FTP Response: 331
PagePerso login ok, send your passwd.
101 2.262205 192.168.0.254 193.252.18.14 FTP Request: PASS dupont
102 2.388503 193.252.18.14 192.168.0.254 TCP ftp > 32781 [ACK]
103 2.388952 193.252.18.14 192.168.0.254 FTP Response: 230 User
dupond logged in.

Access restrictions apply.
Identification du client. Notons que le couple dupond/dupont circule en clair !
104 2.389150 192.168.0.254 193.252.18.14 FTP Request: TYPE I
105 2.414035 193.252.18.14 192.168.0.254 FTP Response: 200 Type set
to I.
gFTP, quand on lui dit : Mode binaire , il fait mode binaire , mme pour la rcupration
de la liste du rpertoire.
106 2.414241 192.168.0.254 193.252.18.14 FTP Request: PWD
107 2.433222 193.252.18.14 192.168.0.254 FTP Response: 257 /pub
is current directory.
108 2.438940 192.168.0.254 193.252.18.14 FTP Request: PORT
192,168,0,254,128,14
109 2.462881 193.252.18.14 192.168.0.254 FTP Response: 200 PORT
command successful.
110 2.463200 192.168.0.254 193.252.18.14 FTP Request: LIST -aL
111 2.582733 193.252.18.14 192.168.0.254 TCP ftp > 32781 [ACK]
Mais il demande des dtails. Les options a et L permettent d'obtenir les noms
commenant par un point (entres caches) ainsi que la taille et les attributs de chaque entre
du rpertoire.
112 2.757014 193.252.18.14 192.168.0.254 TCP ftp-data > 32782 [SYN]
113 2.757157 192.168.0.254 193.252.18.14 TCP 32782 > ftp-data [SYN,
ACK]
114 2.774846 193.252.18.14 192.168.0.254 TCP ftp-data > 32782 [ACK]
Ouverture du canal de donnes.
115 2.775365 193.252.18.14 192.168.0.254 FTP Response: 150 Opening
BINARY mode data connection
for /bin/ls.
116 2.808833 193.252.18.14 192.168.0.254 FTP-DATA FTP Data: 520 bytes
117 2.808916 193.252.18.14 192.168.0.254 TCP ftp-data > 32782 [FIN,
ACK]
118 2.808983 192.168.0.254 193.252.18.14 TCP 32782 > ftp-data [ACK]
119 2.809821 192.168.0.254 193.252.18.14 TCP 32782 > ftp-data [FIN,
ACK]
120 2.822139 192.168.0.254 193.252.18.14 TCP 32781 > ftp [ACK]
121 2.835875 193.252.18.14 192.168.0.254 TCP ftp-data > 32782 [ACK]
Le canal de donnes est ferm d'un commun accord.
122 2.844263 193.252.18.14 192.168.0.254 FTP Response: 226-Transfer
complete.
123 2.844383 192.168.0.254 193.252.18.14 TCP 32781 > ftp [ACK]
126 6.738405 192.168.0.254 193.252.18.14 FTP Request: PORT
192,168,0,254,128,15
127 6.760458 193.252.18.14 192.168.0.254 FTP Response: 200 PORT
command successful.
128 6.760606 192.168.0.254 193.252.18.14 TCP 32781 > ftp [ACK]
129 6.760844 192.168.0.254 193.252.18.14 FTP Request: STOR
/pub/ie6_proxy_1.gif
Le client va envoyer son fichier.
130 6.886677 193.252.18.14 192.168.0.254 TCP ftp > 32781 [ACK]
131 6.923111 193.252.18.14 192.168.0.254 TCP ftp-data > 32783 [SYN]
132 6.923242 192.168.0.254 193.252.18.14 TCP 32783 > ftp-data [SYN,
ACK]
133 6.947755 193.252.18.14 192.168.0.254 TCP ftp-data > 32783 [ACK]
Un nouveau canal de donnes est ouvert.
134 6.948206 193.252.18.14 192.168.0.254 FTP Response: 150 Opening
BINARY mode data connection
for
/pub/ie6_proxy_1.gif.
135 6.959283 192.168.0.254 193.252.18.14 FTP-DATA FTP Data: 1412 bytes
136 6.960470 192.168.0.254 193.252.18.14 FTP-DATA FTP Data: 1412 bytes
137 6.982307 192.168.0.254 193.252.18.14 TCP 32781 > ftp [ACK]
Et le transfert dmarre.
138 6.986320 193.252.18.14 192.168.0.254 TCP ftp-data > 32783 [ACK]
139 6.987578 192.168.0.254 193.252.18.14 FTP-DATA FTP Data: 1412 bytes
140 6.988767 192.168.0.254 193.252.18.14 FTP-DATA FTP Data: 1412 bytes
141 6.999923 193.252.18.14 192.168.0.254 TCP ftp-data > 32783 [ACK]
142 7.001176 192.168.0.254 193.252.18.14 FTP-DATA FTP Data: 1412 bytes
143 7.002388 192.168.0.254 193.252.18.14 FTP-DATA FTP Data: 1412 bytes
144 7.123111 193.252.18.14 192.168.0.254 TCP ftp-data > 32783 [ACK]
145 7.124365 192.168.0.254 193.252.18.14 FTP-DATA FTP Data: 1412 bytes
146 7.125555 192.168.0.254 193.252.18.14 FTP-DATA FTP Data: 1412 bytes
147 7.126746 192.168.0.254 193.252.18.14 FTP-DATA FTP Data: 1412 bytes
148 7.314251 193.252.18.14 192.168.0.254 TCP ftp-data > 32783 [ACK]
149 7.315529 192.168.0.254 193.252.18.14 FTP-DATA FTP Data: 1412 bytes
150 7.315885 192.168.0.254 193.252.18.14 FTP-DATA FTP Data: 372 bytes
151 7.315950 192.168.0.254 193.252.18.14 TCP 32783 > ftp-data [FIN,
ACK]
152 7.502913 193.252.18.14 192.168.0.254 TCP ftp-data > 32783 [ACK]
153 7.680958 193.252.18.14 192.168.0.254 TCP ftp-data > 32783 [ACK]
154 7.713910 193.252.18.14 192.168.0.254 TCP ftp-data > 32783 [ACK]
155 7.714014 193.252.18.14 192.168.0.254 FTP Response: 226 Transfer
complete.
156 7.714093 193.252.18.14 192.168.0.254 TCP ftp-data > 32783 [FIN,
ACK]
157 7.714166 192.168.0.254 193.252.18.14 TCP 32781 > ftp [ACK]
158 7.714232 192.168.0.254 193.252.18.14 TCP 32783 > ftp-data [ACK]
Le transfert est termin, le canal de donnes est ferm.
159 7.714542 192.168.0.254 193.252.18.14 FTP Request: SITE CHMOD 744
/pub/ie6_proxy_1.gif
160 7.765540 193.252.18.14 192.168.0.254 FTP Response: 200 CHMOD
command successful.
161 7.802347 192.168.0.254 193.252.18.14 TCP 32781 > ftp [ACK]
Le monde Unix
Le client gFTP demande au serveur de changer les attributs du fichier. 744, ce qui signifie que
le propritaire a tous les droits et que les autres ne peuvent que lire.
162 8.334702 192.168.0.254 193.252.18.14 FTP Request: PORT
192,168,0,254,128,16
163 8.355047 193.252.18.14 192.168.0.254 FTP Response: 200 PORT
command successful.
164 8.355196 192.168.0.254 193.252.18.14 TCP 32781 > ftp [ACK]
165 8.355366 192.168.0.254 193.252.18.14 FTP Request: LIST -aL
166 8.435637 193.252.18.14 192.168.0.254 TCP ftp-data > 32784 [SYN]
167 8.435767 192.168.0.254 193.252.18.14 TCP 32784 > ftp-data [SYN,
ACK]
168 8.457199 193.252.18.14 192.168.0.254 TCP ftp-data > 32784 [ACK]
169 8.457363 193.252.18.14 192.168.0.254 FTP Response: 150 Opening
BINARY mode data connection
for /bin/ls.
170 8.464111 193.252.18.14 192.168.0.254 FTP-DATA FTP Data: 591 bytes
171 8.464194 193.252.18.14 192.168.0.254 TCP ftp-data > 32784 [FIN,
ACK]
172 8.464262 192.168.0.254 193.252.18.14 TCP 32784 > ftp-data [ACK]
173 8.465013 192.168.0.254 193.252.18.14 TCP 32784 > ftp-data [FIN,
ACK]
174 8.492369 192.168.0.254 193.252.18.14 TCP 32781 > ftp [ACK]
175 8.494386 193.252.18.14 192.168.0.254 TCP ftp-data > 32784 [ACK]
176 8.511638 193.252.18.14 192.168.0.254 FTP Response: 226-Transfer
complete.
Rien de bien nouveau, le client rafraichit la liste des entres du rpertoire courant.
177 8.511763 192.168.0.254 193.252.18.14 TCP 32781 > ftp [ACK]
178 14.584417 192.168.0.254 193.252.18.14 TCP 32781 > ftp [FIN, ACK]
179 14.603193 193.252.18.14 192.168.0.254 TCP ftp > 32781 [ACK]
Le client ferme alors le canal de contrle, sans autre forme de procs
180 14.603616 193.252.18.14 192.168.0.254 FTP Response: 221 You
could at least say goodbye.
Et se fait jeter par le serveur qui, habitu la politesse, est choqu de ne pas lire une formule
du genre au revoir et merci
181 14.603731 192.168.0.254 193.252.18.14 TCP 32781 > ftp [RST]
Mais le client rpond en gros va te faire f [RST] indiquant au serveur qu'il parle devant
une porte ferme, affichant ouvertement sa grossiret.
Ca y est ? Nous avons tout vu ?
Non. FTP sait encore faire d'autres choses que nous n'avons pas vues ici, mais nous avons pu
observer l'essentiel :
Le transfert binaire ou ASCII. C'est une notion qu'il faut connatre si l'on ne veut pas
risquer de perdre beaucoup de temps. Si l'on peut transfrer n'importe quoi en mode
binaire sans trop de risques, il n'en va pas de mme si l'on essaye de transfrer en
mode ASCII un fichier qui n'est pas du texte.
Les modes Actif et Passif. La notion est elle aussi essentielle, surtout s'il y a un pare-
feu filtrage de paquets non configur pour autoriser le mode actif, c'est dire le
mode o le client FTP se retrouve serveur TCP sur le canal de donnes.
Nous avons vu avec suffisamment de prcision le mcanisme des canaux de
commandes et de donnes, en modes actif et passif, pour pouvoir configurer avec
quelques espoir de russite un firewall du genre GNU/Linux avec Netfilter.
Nous n'avons pas vu en revanche :
Comment utiliser FTP pour faire de l'impression distante,
comment utiliser FTP travers un serveur PROXY ou un proxy SOCKS, mais ces
problmes ne sont pas spcifiquement du ressort de FTP et ne peuvent se rencontrer
qu'en entreprise.
Enfin, nous n'avons pas vu certains modes de transfert que FTP sait faire, relatifs la
compression des donnes et la reprise en cas d'incident, mais pour utiliser ces
possibilits, encore faut-il disposer d'un client qui sache les grer.
Finalement, nous n'avons pas fait non plus de transfert de fichier de serveur serveur
avec un client distant. Pour mener bien cette tche, il vous faudra :
o Un client FTP qui sache faire ce genre d'oprations (gftp en mode graphique,
lftp en ligne de commande). Sous Windows, je n'en ai trouv qu'un :
FlashFXP, qui n'est pas libre ;
o des serveurs FTP qui acceptent ce genre d'oprations.
Si vous voulez en savoir d'avantage sur FTP, vous n'avez plus d'autre choix que de lire les
RFC 959.
Jouons avec Pure-ftpd
Aprs nous tre intresss FTP du ct du client, nous allons le faire du ct du serveur.
Disposer chez soi d'un petit serveur FTP peut rendre quelques services.
Bien entendu, il n'est pas question de mettre en place un vrai serveur public au bout d'une
connexion ADSL, mme de bonne qualit. Le A du DSL indiquant clairement que le dbit de
notre serveur sera forcment lamentable, compar un serveur hberg chez un fournisseur
de services. Mais la location d'un serveur ddi chez un fournisseur de service reprsente un
certain budget.
Cependant, pouvoir disposer d'un accs des donnes personnelles o que l'on se trouve,
mme si l'on a oubli sa cl USB peut prsenter un rel intrt.
Nous aurons ainsi l'occasion de nous intresser au paramtrage d'un serveur FTP, son accs
en modes passif ou actif, qu'il soit plac sur la machine faisant aussi office de routeur NAT ou
mme derrire le NAT. Nous aurons mme l'occasion de tester ce serveur en accs IPv6.
Enfin, nous aborderons FTPES, qui ajoute la cryptographie notre systme, apportant par l
un peu de confidentialit si le besoin s'en fait sentir (rappelons nous que les dupond/dupont
vus plus haut ne sont pas discrets).
Pure-FTPD sera l'heureux lu pour nos manipulations.
Installation de base
Jouons un peu avec ce serveur FTP. Ce sera l'occasion de voir plus en dtails les commandes
du protocole. Pour les besoins de cette manipulation, une machine virtuelle fera l'affaire.
Lorsque nous aurons fait le tour du problme, nous pourrons placer notre serveur o ce sera le
plus judicieux.
L'hte virtuel a pour adresse IP 192.168.10.76 et fonctionne avec une Debian squeeze. Pour
tout dire, il s'agit d'un DomU Xen, hberg sur Une Debian squeeze xnifie .
Ce rseau est accessible par le rseau 192.168.0.0/24 o se trouve le poste de travail (Ubuntu
10.10, en attendant de passer Arch Linux).
Il n'y a pas ici de NAT, ni d'un ct ni de l'autre, il y a juste un tunnel OpenVpn entre les deux
rseaux IP, si vous voulez tout savoir.
Voici la vraie installation :
Mais qui fonctionnellement peut se rsumer ainsi :
Nous avons donc fonctionnellement
deux rseaux IP 192.168.10.0/24 et 192.168.0.0/24 simplement routs entre eux. Le
tunnel peut tre omis, mais si nous voulons le dtail d'un tcptraceroute :
Tracing the path to 192.168.10.76 on TCP port 21 (ftp), 30 hops max
1 192.168.0.254 0.168 ms 0.143 ms 0.185 ms
2 192.168.25.3 47.686 ms 46.795 ms 46.018 ms
3 192.168.10.76 [open] 45.906 ms 47.400 ms 50.886 ms
Installation
C'est simple :
aptitude install pure-ftpd
Qui installe aussi pure-ftpd-common. Il y a d'autres versions de ce serveur :
# aptitude search pure-ftpd
p mysqmail-pure-ftpd-logger - real-time logging system in MySQL -
Pure-FTPd traffic-logger
i pure-ftpd - Secure and efficient FTP server
i A pure-ftpd-common - Pure-FTPd FTP server (Common Files)
p pure-ftpd-ldap - Secure and efficient FTP server with
LDAP user authentication
p pure-ftpd-mysql - Secure and efficient FTP server with
MySQL user authentication
p pure-ftpd-postgresql - Secure and efficient FTP server with
PostgreSQL user authentication
Nous n'allons pas monter une usine gaz et les identifications des utilisateurs fournies par le
paquet pure-ftpd nous suffisent largement. Les logs dans un simple fichier texte suffiront
galement.
L'installation se termine par le dmarrage du serveur en mode standalone avec la ligne de
commande :
Starting ftp server: Running: /usr/sbin/pure-ftpd -l pam -8 UTF-8 -E -O
clf:/var/log/pure-ftpd/transfer.log -u 1000 -B
Quelques mots propos de pure-ftpd
Ce serveur, dans sa version vanilla n'est pas prvu pour s'appuyer sur un fichier de
configuration. Cette dernire se fait par une liste d'arguments, ce qui explique cette ligne de
commande un peu incantatoire. Le mainteneur du paquet Debian a toutefois jug ncessaire,
pour rester dans l'harmonie Debian, de crer un wrapper qui lit un tas de fichiers situs
dans /etc/pure-ftpd/ ainsi qu'un fichier /etc/default/pure-ftpd-common. Ce wrapper
ne fait que construire la ligne de commande ncessaire au dmarrage de pure-ftpd.
Comme nous n'utiliserons pas ce serveur de faon intensive, nous le ferons fonctionner plutt
travers le super-serveur inetd. Pour cette raison, nous ne nous intresserons pas plus que a
la particularit Debian.
Analysons tout de mme la ligne de commande construite par dfaut lors de l'installation :
-l pam indique que l'authentification des utilisateurs se fait travers PAM. Peut-tre
choisirons-nous quelque chose de plus simple ;
-8 UTF-8 n'est pas documente mais elle semble vouloir indiquer que l'on souhaite
utiliser UTF-8 ;
-E interdit les connexions anonymes ;
-O clf:/var/log/pure-ftpd/transfer.log permet d'indiquer o et avec quel
format le serveur va consigner les transferts de fichiers effectus. Ici, dans un format
similaire celui d'Apache ;
-u 1000 interdit aux utilisateurs dont l'uid est infrieure 1000 de se connecter au
serveur, autrement dit, les comptes systme ;
-B dmarre le serveur en tche de fond (sera inutile pour nous).
Pure-ftpd propose plusieurs mthodes d'identification des utilisateurs. PAM en est une, mais
si nous souhaitons isoler les comptes FTP des comptes locaux, mieux vaut utiliser une logique
d'utilisateurs virtuels. Sans aller jusqu' une base SQL ou un annuaire LDAP, notre serveur
propose une mthode maison , gre avec un outil pure-pw que nous utiliserons.
Apriori, nous ne souhaitons pas crer de zone publique (connexions anonymes).
Il pourra tre ncessaire d'tudier quelques techniques pour prserver cette pauvre bande
passante : Nombre limit de connexions simultanes, nombre limit d'utilisateurs simultans,
limitation du dbit des transferts
Nous savons que par dfaut FTP laisse passer en clair les identifiants des utilisateurs. Peut-
tre faudra-t-il envisager de mettre en uvre TLS.
Nous mettrons en place un filtrage de paquets (Netfilter) sur le serveur virtuel, il faudra
l'adapter pour que FTP fonctionne correctement.
Mode opratoire
Dans un premier temps, nous allons dsactiver le dmarrage en mode daemonized . Pour
les essais, nous ferons dmarrer le serveur dans un shell et lorsque nous aurons arrt une
configuration convenable, nous configurerons inetd pour qu'il prenne en charge notre serveur
FTP.
Recherche d'une configuration
L'authentification
Le support des utilisateurs virtuels se fait par un fichier de structure assez similaire au
/etc/passwd. Il est maintenu par la commande pure-pw.
Comme ces utilisateurs sont virtuels, ils n'ont aucune existence sur le systme. il est
ncessaire de crer un compte systme que le serveur pourra emprunter pour effectuer les
oprations de lecture et d'criture pour le compte de ces utilisateurs virtuels. Un seul compte
utilisateur suffit, si l'on veut rester simple, chaque utilisateur virtuel disposant de son propre
espace, dans lequel il est emprisonn (chroot).
Prparation du systme
Commenons par arrter le serveur standalone :
# /etc/init.d/pure-ftpd stop
Puis modifions /etc/default/pure-ftpd-common comme suit :
STANDALONE_OR_INETD=inetd
De cette manire, le script init ne cherchera plus dmarrer pure-ftpd comme un service.
Nous allons maintenant crer un groupe ftpgroup :
# groupadd ftpgroup
Nous crons un utilisateur ftpuser qui appartient ce groupe, qui n'a pas de rpertoire par
dfaut, qui n'a pas de shell et qui n'a pas non plus de mot de passe :
# useradd -g ftpgroup -d /dev/null -s /bin/false ftpuser
Nous crons un rpertoire qui contiendra les rpertoires des utilisateurs virtuels :
# mkdir /home/ftpusers
Cration d'un compte virtuel
Avec la commande pure-pw crons un compte test :
# pure-pw useradd test -u ftpuser -d /home/ftpusers/test
Cette commande ncessitera d'entrer un mot de passe pour notre utilisateur test. Nous
pouvons vrifier :
# pure-pw show test

Login : test
Password : $1$GrGl3h50$VHP8e646FLXfk7qUUnA7G1
UID : 1001 (ftpuser)
GID : 1001 (ftpgroup)
Directory : /home/ftpusers/test/./
Full name :
Download bandwidth : 0 Kb (unlimited)
Upload bandwidth : 0 Kb (unlimited)
Max files : 0 (unlimited)
Max size : 0 Mb (unlimited)
Ratio : 0:0 (unlimited:unlimited)
Allowed local IPs :
Denied local IPs :
Allowed client IPs :
Denied client IPs :
Time restrictions : 0000-0000 (unlimited)
Max sim sessions : 0 (unlimited)
Tout ceci laisse entendre qu'il est possible de configurer finement chaque compte virtuel. Il
sera intressant de lire le manuel de pure-pw Le mot de passe est chiffr, mieux vaut donc
ne pas l'oublier, ou alors il faudra en gnrer un nouveau (pure-pw permet de le faire); cet
utilisateur empruntera bien le compte systme ftpuser pour ses oprations de
lecture/criture, son rpertoire de base sera bien /home/ftpusers/, le ./ qui suit signifie
qu'il sera prisonnier de son rpertoire, ce que nous ne manquerons pas de vrifier.
Ce n'est pas tout. Pure-pw a cr (par dfaut) un fichier /etc/pure-ftpd/pureftpd.passwd,
mais pure-ftpd n'utilisara pas directement ce fichier pour l'authentification. Pour des raisons
de rapidit, il faut crer un fichier format spcialement, toujours avec la commande pure-pw
:
# pure-pw mkdb
qui cre, toujours par dfaut, un fichier /etc/pure-ftpd/pureftpd.pdb.
Premier test
Nous dmarrons le serveur avec les options suivantes :
# pure-ftpd -j -l puredb:/etc/pure-ftpd/pureftpd.pdb
-j fera que le rpertoire de l'utilisateur sera automatiquement cr s'il n'existe pas dj
;
-l indique le mode d'authentification (puredb) et le fichier consulter.
Nous pouvons dans une autre console, observer deux choses :
# ps aux | grep pure
root 23658 0.0 0.3 24888 1668 pts/0 S+ 18:44 0:00 pure-ftpd
(SERVER)
et :
# netstat -laputen | grep pure
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 0 71232
23658/pure-ftpd (SE
tcp6 0 0 :::21 :::* LISTEN 0 71234
23658/pure-ftpd (SE
Nous avons un serveur qui tourne (c'est tant mieux), sous l'identit root (oups ?) et qu'il
coute sur toutes les interfaces, aussi bien en IPv4 qu'en IPv6.
Avec notre FileZilla nous nous connections au serveur 192.168.10.76 avec comme
identifiant test et son mot de passe et nous voyons dans le liste du haut :
Statut : Connexion 192.168.10.76:21...
Statut : Connexion tablie, attente du message d'accueil...
Rponse : 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------
-
Rponse : 220-You are user number 1 of 50 allowed.
Rponse : 220-Local time is now 18:30. Server port: 21.
Rponse : 220-IPv6 connections are also welcome on this server.
Rponse : 220 You will be disconnected after 15 minutes of inactivity.
Commande : USER test
Rponse : 331 User test OK. Password required
Commande : PASS ********
Rponse : 230-User test has group access to: ftpgroup
Rponse : 230 OK. Current directory is /
Commande : OPTS UTF8 ON
Rponse : 200 OK, UTF-8 enabled
Statut : Connect
Statut : Rcupration du contenu du dossier...
Commande : PWD
Rponse : 257 "/" is your current location
Statut : Succs de la lecture du contenu du dossier
Tout s'est bien pass. Sur le serveur, le dossier a t cr (par ftpuser) :
# ls -l /home/ftpusers/
total 4
drwxr-xr-x 2 ftpuser ftpgroup 4096 1 janv. 18:30 test
Si nous essayons de remonter dans l'arborescence (..), nous avons :
Statut : Rcupration du contenu du dossier...
Commande : CDUP
Rponse : 250 OK. Current directory is /
Commande : PWD
Rponse : 257 "/" is your current location
Statut : Succs de la lecture du contenu du dossier
CDUP (Change Directory UP) pour aller vers le rpertoire parent a bien t excute, mais
test est rest prisonnier de son rpertoire.
Tant que notre client est connect, revoyons un peu :
# ps aux | grep pure
root 23658 0.0 0.3 24888 1672 pts/0 S+ 18:44 0:00 pure-ftpd
(SERVER)
ftpuser 23666 0.0 0.2 37540 1480 pts/0 S+ 18:49 0:00 pure-ftpd
(IDLE)
root 23667 0.0 0.1 37512 1000 pts/0 S+ 18:49 0:00 pure-ftpd
(PRIV)
et :
# netstat -laputen | grep pure
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 0
71232 23658/pure-ftpd (SE
tcp 0 0 192.168.10.76:21 192.168.0.16:34924 ESTABLISHED 0
71309 23666/pure-ftpd (ID
tcp6 0 0 :::21 :::* LISTEN 0
71234 23658/pure-ftpd (SE
Nous avons un nouveau service qui tourne sous l'identit ftpuser, en mode IDLE parce que
nous ne faisons rien de particulier en ce moment et un troisime service (PRIV).
Le service IDLE a bien tabli une connexion en IPv4 entre le client (192.168.0.16:34924) et le
serveur (192.168.10.76:21). Autrement dit, les changes entre client et serveur vont se faire
sous l'identit ftpuser (ouf !).
Tout ceci est plutt encourageant.
Affinons la configuration
Pas de FTP anonyme
Pure-ftpd accepte par dfaut les connexions anonymes, si un utilisateur nomm ftp existe,
avec son rpertoire /home/ftp. Si ces conditions ne sont pas remplies, il n'y aura pas d'accs
anonyme possible. Cependant, mieux vaut signaler explicitement que l'on n'en veut pas, avec
le paramtre -E.
Protger la bande passante
Depuis l'avnement de l'internet haut dbit (1998 peu prs), le dbit upload a
toujours t infrieur au dbit download , considrant que l'internaute est un consommateur
et pas un acteur (ce qui est hlas trop souvent vrai). Il nous faut nous contenter en moyenne de
100 Ko/s en upload, et il faut bien voir que notre upload sera le dbit maximal de notre
serveur FTP qui ne sera donc pas une bte de course. Qui plus est, si le serveur doit
fonctionner alors qu'il y a des clients actifs sur notre rseau local, il faudra partager cette
bande passante drisoire.
Si nous voulons faire simple, nous pouvons limiter le dbit du serveur avec le paramtre -T.
Cette option peut limiter les dbits up et down . Les limites sont donnes en Ko/s,
spars par un :. Par exemple, -T :60 ne limitera pas l'upload sur le serveur, mais limitera le
download 60 Ko/s.
Ce paramtre s'applique tous les utilisateurs. Nous avons suggr qu'il est possible de faire
plus fin en dfinissant des limites chaque utilisateur, avec la commande pure-pw.
Le lecteur attentif aura pu constater que, par dfaut, le serveur accepte 50 clients simultans.
Il est sans doute judicieux de limiter ce nombre, avec le paramtre -c. De mme qu'il est
possible de limiter le nombre de connexions simultanes par client (paramtre -C).
Au final, notre ligne de commende pourrait tre de la forme :
# pure-ftpd -j -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -T :30 -c 3 -C 2
Les logs
Par dfaut, pure-ftpd va envoyer ses logs sur le syslog. Si l'on souhaite rcuprer ces logs
dans un fichier spar, il faudra donc configurer notre systme de logs.
Il existe cependant le paramtre -O (dj vu plus haut) qui permet de crer un fichier propre
aux transferts. Par exemple -O clf:/var/log/pure-ftpd/transfer.log comme fait par
dfaut dans l'installation Debian. Dans ce cas, les transferts seront consigns dans ce fichier.
Le reste des informations que pure-ftpd pourrait envoyer seront rechercher dans les
messages du syslog.
TLS
Pure-ftpd sait faire du FTPES (FTP over explicit TLS/SSL). Dans cette configuration, les
connexions sont chiffres par TLS, ce qui vite entre autres le passage de l'authentification en
clair.
Le systme est simple (et peu souple). Il faut crer un certificat x509 qui doit
obligatoirement s'appeler pure-ftpd.pem et se trouver dans /etc/ssl/private/. Pour le
construire, il faut bien sr avoir install openssl et utiliser la commande suivante :
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout
/etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
Ce certificat auto-sign sera donc valide 7300 jours, c'est peut-tre beaucoup
Generating a 2048 bit RSA private key
....................................................................+++
...........................................................................
.......................................+++
writing new private key to '/etc/ssl/private/pure-ftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:BdR
Locality Name (eg, city) []:Marseille
Organization Name (eg, company) [Internet Widgits Pty Ltd]:IRP
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:ftp.nain-t.net
Email Address []:irp@nain-t.net
Il faudra aussi :
# chmod 600 /etc/ssl/private/pure-ftpd.pem
Enfin, le paramtre -Y spcifiera l'utilisation de TLS. Pour la suite des manipulations, nous
adopterons -Y 1 qui laisse le choix au client d'utiliser ou non TLS. -Y 2 n'autorisera pas les
connexions sans TLS.
Test
Pour tester TSL, mieux vaut crer dans le gestionnaire de sites de FileZilla :
FTPES est donc un mode de transfert FTP explicitement scuris. Ce mode introduit des
commandes supplmentaires qui dont dfinies dans les RFC 2228 : This document defines
extensions to the FTP specification STD 9, RFC 959, FILE TRANSFER PROTOCOL
(FTP) (October 1985). These extensions provide strong authentication, integrity, and
confidentiality on both the control and data channels with the introduction of new optional
commands, replies, and file transfer encodings.
La connexion suivant ce mode fera apparaitre :
Si nous acceptons ce certificat, la connexion s'tablit et dans la fentre du protocole nous
observons :
Statut : Connexion 192.168.10.76:21...
Statut : Connexion tablie, attente du message d'accueil...
Rponse : 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------
-
Rponse : 220-You are user number 1 of 3 allowed.
Rponse : 220-Local time is now 17:32. Server port: 21.
Rponse : 220-This is a private system - No anonymous login
Rponse : 220-IPv6 connections are also welcome on this server.
Rponse : 220 You will be disconnected after 15 minutes of inactivity.
Commande : AUTH TLS
Rponse : 234 AUTH TLS OK.
Statut : Initialisation TLS...
Statut : Vrification du certificat...
Commande : USER test
Statut : Connexion TLS/SSL tablie.
Rponse : 331 User test OK. Password required
Commande : PASS ********
Rponse : 230-Your bandwidth usage is restricted
Rponse : 230-User test has group access to: ftpgroup
Rponse : 230 OK. Current directory is /
Commande : SYST
...
Le client FileZilla rclame une authentification TLS, qui lui est accorde, et la connexion TLS
est tablie avant le passage du mot de passe. Nous pouvons d'ailleurs vrifier avec notre
wireshark habituel :
No. Time Source Destination Protocol
Info
1 0.000000 192.168.0.16 192.168.10.76 TCP
41198 > ftp [SYN] Seq=0 Win=5840 Len=0 MSS=1460 TSV=348647 TSER=0 WS=7
2 0.045419 192.168.10.76 192.168.0.16 TCP
ftp > 41198 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1368 TSV=106073221
TSER=348647 WS=5
3 0.045442 192.168.0.16 192.168.10.76 TCP
41198 > ftp [ACK] Seq=1 Ack=1 Win=5888 Len=0 TSV=348651 TSER=106073221
4 0.101193 192.168.10.76 192.168.0.16 FTP
Response: 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
5 0.101210 192.168.0.16 192.168.10.76 TCP
41198 > ftp [ACK] Seq=1 Ack=320 Win=6912 Len=0 TSV=348657 TSER=106073234
6 0.101333 192.168.0.16 192.168.10.76 FTP
Request: AUTH TLS
7 0.148394 192.168.10.76 192.168.0.16 TCP
ftp > 41198 [ACK] Seq=320 Ack=11 Win=5792 Len=0 TSV=106073246 TSER=348657
8 0.150079 192.168.10.76 192.168.0.16 FTP
Response: 234 AUTH TLS OK.
9 0.150989 192.168.0.16 192.168.10.76 FTP
Request:
\026\003\002\000O\001\000\000K\003\002O\005\322\335\335d\2319U4\303[8\311\2
64\223\304\320\025\030\244\357\271d\202\330\361\373Rg)@\000\000$\0003\000E\
0009\000\210\000\026\0002\000D\0008\000\207\000\023\000f\000/\000A\0005\000
\204\000
10 0.215860 192.168.10.76 192.168.0.16 FTP
Response:
\026\003\001\000J\002\000\000F\003\001O\005\322\335H\315\246\005\351[\346.\
263\033\301`\030\216"7\324gba|\021\350\307*+\201\267
\3648Y\335\257\204,.\334\253C\232x\f\217\265\2351.T0Vo\370\235\206\267I\333
\231yY\0003\000\026\003\001\004V\v\000\004R\000\004O\000\004L0\202\004H0\20
2\0030\240\003\002\001\002\002\t\000\237s\0326\002\241\304y0
11 0.218216 192.168.10.76 192.168.0.16 FTP
Response: \033\343:2
\374f\226%\360E\031\322j\240#\316\303\244\252\337\260\001\221\247U\363\224\
223\030\302q\005HG\200\367\0166\2640\016\341\337M\2550\004\211$N\245\376E\2
27\302PK\332\270\006\250zL\211&-
\346\263\264\022\377i\221\201\315\202\032z\253B\356y\233i\317IjU\337d\031'\
016{\020G\022\246\351Y\317\210\276u\35395hC\001\000\001\323\345\000\021.\03
2l\332\214\3600x\025\255\300\327\374\342\343+\275\332\005\234\220!\376`\255
\210\370\021"\243\301P\261gF#L\253\341\3465\313>\265FV\200Qs\365\253\274s\3
56D,X'
12 0.218229 192.168.0.16 192.168.10.76 TCP
41198 > ftp [ACK] Seq=95 Ack=2071 Win=12544 Len=0 TSV=348669 TSER=106073260
13 0.226760 192.168.0.16 192.168.10.76 FTP
Request:
\026\003\001\000\206\020\000\000\202\000\200\b\322Xk\344O\275\330\251\032\2
57?\241\251\243!\361\250\001z9\342\342\205\346\241\0356\347V?\v\a\242\277\2
66+\027\242`}\300W\231\240\234&\357\v\3113\001v/&\211\023aRP
14 0.226773 192.168.0.16 192.168.10.76 FTP
Request: \024\003\001\000\001\001
15 0.227819 192.168.0.16 192.168.10.76 FTP
Request:
\026\003\001\0000H\232_k%t\232=,\324\251\026\035\277\262F\224C\005\270>\355
\225h\234R\221\177\266z\317\233W\310p\261\255\036\275l\367\212#\3378\323\27
1\027
16 0.276986 192.168.10.76 192.168.0.16 TCP
ftp > 41198 [ACK] Seq=2071 Ack=240 Win=6880 Len=0 TSV=106073279 TSER=348670
17 0.279681 192.168.10.76 192.168.0.16 FTP
Response:
\024\003\001\000\001\001\026\003\001\0000\350%k\216\327\226|N\au\203o\272\0
33\333V\233b\2226Eg\002\332o\302`\206\230\032\tUKrR\217$u\254z9c\357\002\23
3K\f=
18 0.281552 192.168.0.16 192.168.10.76 FTP
Request:
\027\003\001\000\260\332\316[\341R`5\332\233\vU\365\275\033\306a.h\251A\031
0\a\201\347rI<)b\312-
0.r\361\200\266\255\254\276\367\323\a\332xe\365\331\206\334U\301\300#q:\342
>\2525\243j\274J\336\220\022@\221b\373\240\202-C?,~\003VE\334\242
19 0.331704 192.168.10.76 192.168.0.16 FTP
Response:
\027\003\001\000@o\a+\303\333)l+XZ\260\260\243|)/f\304Kv\262S`\274\273\304\
200\316\215u\264\tR\000\231\240\021v
20 0.331923 192.168.0.16 192.168.10.76 FTP
Request: \027\003\001\001\020\2518:\203K:y\343:\t\016R\002?+_\340F
F\005lO\267*\252\274\202p\325\2746Q$3\310\335\252\261\v\371\037\313\344e\20
7\027\3633\2244\334\021I\205gHVn\315*\bj\331\0230\203\314\200i\231\314u'-
\315\321\271F#\336\243\353\242GT:\vy\235\251\032\216\324\202\026\t[\361\217
/\020\a\376]\252\247\306\240\205\225\215K\350<\274\307K\301M\333\024/nn\342
,\}k\247\360m\271\245G\372\216\222\021\336\264\251c\b\326\020\t\237\346\366
u\217\257\305\201\034[{\\202\376H!w\332>\351\301
21 0.389619 192.168.10.76 192.168.0.16 FTP
Response:
\027\003\001\000@B\314\337\266\312\225\027\f\220U\265fx\244\026\330Y\307\24
0\213n\251\272\300\002\372\307\232I\355\360T\317\301{,\320\265\006\225T\002
'h\000\220\361k\270\337.\330\276\2309F\203)\366\336\246e\310]
22 0.391778 192.168.10.76 192.168.0.16 FTP
Response:
\027\003\001\000P\023\326\265\242\326V\0005\360\235g\003\323\331x\3370\376\
335\036\234S-,\342\310y\224\262/!Pv\232\250|\350\3538ue\341\257\006-
i\232o\v\260\265\177\372\322n\265$2\235\a,\320\245\024\005I\306\335?\366t\2
50\324u\221\326\200\354x\231
23 0.393748 192.168.10.76 192.168.0.16 FTP
Response:
\027\003\001\000@\244\377\364\215\375\212\346\241\306\257\224\326\307\321\3
46\242n\271!K?^\244\220i]\276\312\\340\316N(\017
G\220j\177\004M\334D\177\267\324\027\312\t\203\351\036\344c\240M\314\300\36
4Tt&\341\245
24 0.394575 192.168.0.16 192.168.10.76 TCP
41198 > ftp [ACK] Seq=751 Ack=2422 Win=12544 Len=0 TSV=348686
TSER=106073307
25 0.394665 192.168.0.16 192.168.10.76 FTP
Request:
\027\003\001\000@\315>k\375\375*\357\035\262^~\224\311M\322\332\270uW\307\0
35\356P\b\256\317\313\000\b\215}\322\273?\300kN\f\244h\376g(O\334VeU\322\31
0\262\236O\323\027\374g\323M):\254\265\177
26 0.444358 192.168.10.76 192.168.0.16 FTP
Response: \027\003\001\0000-
\216#1H\234\266\355\244\036\311\f?\320\237x\226\246\005\330p\252(\035\223\2
420\243S\316\372\b~'[\325r\302\361\322\254\034\002\243\215\361\300\377
27 0.444560 192.168.0.16 192.168.10.76 FTP
Request:
\027\003\001\000\240\3166\351\033\372a\271\025\177,\213\255\020\206\000Z\34
4\334\243\2631\035\236o]\365\222`\233V
28 0.493829 192.168.10.76 192.168.0.16 FTP
Response:
\027\003\001\0000\212y\017\v\245\237\252O\246\zh*0\364\037\233\241`%a\261\3
21I\f}9z\354-QMH\236K\222#\336I\326H\212~/\227\026X
29 0.493986 192.168.0.16 192.168.10.76 FTP
Request: \027\003\001\000\340\024d,D\244;\250\236{\326\217h-
H+\240\206eA\307\375u\027\311\216\232\363\202\243\246\377\343\371\263\003Z\
033Fj\326\363X]\272\265\241=;\257|\226\350\351P\320\215Q-
\200]\004\256q\2206?\350\370ca\257\246'{\223j\v\003\300\311\274\033\217\025
\346k\216\353$\251V\327\355\240\262\261Q\236\377H\341\370\022\312\3333\340\
212LI\000\212\354\370
H\373\342\035\2756\336&?\372k\232:\231\266\372qQ\206"N\345qzv2\344bR\342\37
5\242E\226$
30 0.544508 192.168.10.76 192.168.0.16 FTP
Response:
\027\003\001\000P\004u\357\003\344\262\232\252\3209vZL\024\222\016\260\270>
5\016\256\271Z\274\251\376p\344FU\236-\263\211\210u\301\035\206C\361_-
\237\225\351]\271FR\017\027\222\201\032\225@\317\351tN@\252\337]hH\266\243\
312\360\340:k\3600
31 0.577128 192.168.0.16 192.168.10.76 TCP
41198 > ftp [ACK] Seq=1214 Ack=2613 Win=12544 Len=0 TSV=348705
TSER=106073345
A partir du moment o Response: 234 AUTH TLS OK, tous les changes FTP sont chiffrs.
Il faut s'en souvenir Dans le cas d'un mode passif, la Commande : PORT
192,168,0,16,159,10 va tre chiffre. Si a ne pose pas de problme au client FTP qui sait
le dchiffrer, le conntrack de Netfilter risque d'avoir plus de mal s'il est sollicit.
FTP et Netfilter
Mettons en place un pare-feu sur l'hte du serveur FTP. Ce n'est pas une ncessit absolue si
un autre pare-feu se trouve en amont, mais ce sera l'occasion de mieux comprendre le suivi de
connexion en FTP et de comprendre aussi pourquoi ce suivi ne peut tre ralis si les
transferts sont chiffrs (FTPES).
SSH sinon rien
Au dpart, sur l'hte du serveur (une seule interface eth0), nous posons ceci :
# iptables-save
# Generated by iptables-save v1.4.8 on Mon Jan 23 11:26:11 2012
*filter
:INPUT DROP [1:76]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:76]
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT
Par dfaut, rien ne peut entrer par aucune interface. Il est quand mme judicieux de laisser
passer SSH (port 22) et de laisser tout entrer sur lo (du moins pour ce qui nous intresse ici).
FTP et son suivi de connexion
Dans de telles conditions, FTP ne peut bien entendu pas fonctionner. Nous allons ajouter ces
deux rgles :
iptables -A INPUT -p tcp --dport 21 -m state --state
NEW,RELATED,ESTABLISHED -j ACCEPT
ceci afin de laisser entrer les connexions des clients FTP sur le port 21
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
ceci afin d'avoir des chances de laisser passer les connexions DATA relatives aux commandes
FTP lances par le client. Mais le suivi de connexions sur FTP est, nous l'avons vu, assez
particulier pour ncessiter le chargement d'un module spcialis :
modprobe nf-conntrack-ftp
Autrefois, ce module s'appelait ip-conntrack-ftp. Ce nom est aujourd'hui (30/01/2012)
devenu un alias et donc toujours utilisable, mais autant adopter l'appellation actuelle.
Il n'y a pas ici de NAT puisque nous sommes toujours dans le cas de deux rseaux locaux
routs entre eux. Au final, nous avons :
# iptables-save
# Generated by iptables-save v1.4.8 on Mon Jan 23 11:42:34 2012
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:76]
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW,RELATED,ESTABLISHED
-j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
Et, en ce qui concerne les modules de suivi :
# lsmod | grep conntrack
nf_conntrack_ipv4 9833 2
nf_defrag_ipv4 1139 1 nf_conntrack_ipv4
xt_conntrack 2407 1
x_tables 12845 4 xt_state,xt_tcpudp,xt_conntrack,ip_tables
nf_conntrack_ftp 5505 0
nf_conntrack 46311 4
nf_conntrack_ipv4,xt_state,xt_conntrack,nf_conntrack_ftp
Essais FTP
Essayons maintenant une connexion FTP active :
Statut : Connexion 192.168.10.76:21...
Statut : Connexion tablie, attente du message d'accueil...
Rponse : 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------
-
Rponse : 220-You are user number 1 of 3 allowed.
Rponse : 220-Local time is now 11:48. Server port: 21.
Rponse : 220-This is a private system - No anonymous login
Rponse : 220-IPv6 connections are also welcome on this server.
Rponse : 220 You will be disconnected after 15 minutes of inactivity.
Commande : USER test
Rponse : 331 User test OK. Password required
Commande : PASS ********
Rponse : 230-Your bandwidth usage is restricted
Rponse : 230-User test has group access to: ftpgroup
Rponse : 230 OK. Current directory is /
Commande : SYST
Rponse : 215 UNIX Type: L8
Commande : FEAT
Rponse : 211-Extensions supported:
Rponse : EPRT
Rponse : IDLE
Rponse : MDTM
Rponse : SIZE
Rponse : REST STREAM
Rponse : MLST
type*;size*;sizd*;modify*;UNIX.mode*;UNIX.uid*;UNIX.gid*;unique*;
Rponse : MLSD
Rponse : AUTH TLS
Rponse : PBSZ
Rponse : PROT
Rponse : UTF8
Rponse : TVFS
Rponse : ESTA
Rponse : PASV
Rponse : EPSV
Rponse : SPSV
Rponse : ESTP
Rponse : 211 End.
Commande : OPTS UTF8 ON
Rponse : 200 OK, UTF-8 enabled
Statut : Connect
Statut : Rcupration du contenu du dossier...
Commande : PWD
Rponse : 257 "/" is your current location
Commande : TYPE I
Rponse : 200 TYPE is now 8-bit binary
Commande : PORT 192,168,0,16,171,235
Rponse : 200 PORT command successful
Commande : MLSD
Rponse : 150 Connecting to port 44011
Rponse : 226-Options: -a -l
Rponse : 226 8 matches total
Statut : Succs de la lecture du contenu du dossier
a marche. Essayons maintenant en mode passif :
Statut : Connexion 192.168.10.76:21...
Statut : Connexion tablie, attente du message d'accueil...
Rponse : 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------
-
Rponse : 220-You are user number 1 of 3 allowed.
Rponse : 220-Local time is now 11:51. Server port: 21.
Rponse : 220-This is a private system - No anonymous login
Rponse : 220-IPv6 connections are also welcome on this server.
Rponse : 220 You will be disconnected after 15 minutes of inactivity.
Commande : USER test
Rponse : 331 User test OK. Password required
Commande : PASS ********
Rponse : 230-Your bandwidth usage is restricted
Rponse : 230-User test has group access to: ftpgroup
Rponse : 230 OK. Current directory is /
Commande : OPTS UTF8 ON
Rponse : 200 OK, UTF-8 enabled
Statut : Connect
Statut : Rcupration du contenu du dossier...
Commande : PWD
Rponse : 257 "/" is your current location
Statut : Succs de la lecture du contenu du dossier
a fonctionne aussi. Pas vraiment tonnant, le conntrack de Netfilter fait son travail,
grce la ligne :
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Essais FTPES
Essayons en FTPES mode actif :
Statut : Connexion 192.168.10.76:21...
Statut : Connexion tablie, attente du message d'accueil...
Rponse : 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------
-
Rponse : 220-You are user number 1 of 3 allowed.
Rponse : 220-Local time is now 11:58. Server port: 21.
Rponse : 220-This is a private system - No anonymous login
Rponse : 220-IPv6 connections are also welcome on this server.
Rponse : 220 You will be disconnected after 15 minutes of inactivity.
Commande : AUTH TLS
Rponse : 234 AUTH TLS OK.
Statut : Initialisation TLS...
Statut : Vrification du certificat...
Commande : USER test
Statut : Connexion TLS/SSL tablie.
Rponse : 331 User test OK. Password required
Commande : PASS ********
Rponse : 230-Your bandwidth usage is restricted
Rponse : 230-User test has group access to: ftpgroup
Rponse : 230 OK. Current directory is /
Commande : SYST
Rponse : 215 UNIX Type: L8
Commande : FEAT
Rponse : 211-Extensions supported:
Rponse : EPRT
Rponse : IDLE
Rponse : MDTM
Rponse : SIZE
Rponse : REST STREAM
Rponse : MLST
type*;size*;sizd*;modify*;UNIX.mode*;UNIX.uid*;UNIX.gid*;unique*;
Rponse : MLSD
Rponse : AUTH TLS
Rponse : PBSZ
Rponse : PROT
Rponse : UTF8
Rponse : TVFS
Rponse : ESTA
Rponse : PASV
Rponse : EPSV
Rponse : SPSV
Rponse : ESTP
Rponse : 211 End.
Commande : OPTS UTF8 ON
Rponse : 200 OK, UTF-8 enabled
Commande : PBSZ 0
Rponse : 200 PBSZ=0
Commande : PROT P
Rponse : 200 Data protection level set to "private"
Statut : Connect
Statut : Rcupration du contenu du dossier...
Commande : PWD
Rponse : 257 "/" is your current location
Commande : TYPE I
Rponse : 200 TYPE is now 8-bit binary
Commande : PORT 192,168,0,16,136,97
Rponse : 200 PORT command successful
Commande : MLSD
Rponse : 150 Connecting to port 34913
Rponse : 226-Options: -a -l
Rponse : 226 7 matches total
Statut : Succs de la lecture du contenu du dossier
Pas de soucis. Mais en mode passif :
Statut : Connexion 192.168.10.76:21...
Statut : Connexion tablie, attente du message d'accueil...
Rponse : 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------
-
Rponse : 220-You are user number 1 of 3 allowed.
Rponse : 220-Local time is now 12:00. Server port: 21.
Rponse : 220-This is a private system - No anonymous login
Rponse : 220-IPv6 connections are also welcome on this server.
Rponse : 220 You will be disconnected after 15 minutes of inactivity.
Commande : AUTH TLS
Rponse : 234 AUTH TLS OK.
Statut : Initialisation TLS...
Statut : Vrification du certificat...
Commande : USER test
Statut : Connexion TLS/SSL tablie.
Rponse : 331 User test OK. Password required
Commande : PASS ********
Rponse : 230-Your bandwidth usage is restricted
Rponse : 230-User test has group access to: ftpgroup
Rponse : 230 OK. Current directory is /
Commande : SYST
Rponse : 215 UNIX Type: L8
Commande : FEAT
Rponse : 211-Extensions supported:
Rponse : EPRT
Rponse : IDLE
Rponse : MDTM
Rponse : SIZE
Rponse : REST STREAM
Rponse : MLST
type*;size*;sizd*;modify*;UNIX.mode*;UNIX.uid*;UNIX.gid*;unique*;
Rponse : MLSD
Rponse : AUTH TLS
Rponse : PBSZ
Rponse : PROT
Rponse : UTF8
Rponse : TVFS
Rponse : ESTA
Rponse : PASV
Rponse : EPSV
Rponse : SPSV
Rponse : ESTP
Rponse : 211 End.
Commande : OPTS UTF8 ON
Rponse : 200 OK, UTF-8 enabled
Commande : PBSZ 0
Rponse : 200 PBSZ=0
Commande : PROT P
Rponse : 200 Data protection level set to "private"
Statut : Connect
Statut : Rcupration du contenu du dossier...
Commande : PWD
Rponse : 257 "/" is your current location
Commande : TYPE I
Rponse : 200 TYPE is now 8-bit binary
Commande : PASV
Rponse : 227 Entering Passive Mode (192,168,10,76,252,141)
Commande : MLSD
Erreur : Dlai d'attente expir
Erreur : chec lors de la rcupration du contenu du dossier
Ici, a coince au moment d'utiliser un canal de DATA. Conntrack n'a pas pu voir passer les
informations relatives au port passif et n'a pas pu grer le RELATED cause du chiffrement.
A ma connaissance il n'y a pas de solution du ct de Netfilter. Il existe cependant une
solution de contournement que nous allons voir maintenant.
FTPES en mode passif
Si l'on souhaite que le serveur fonctionne en FTPES passif, il faut abandonner le suivi de
connexion, indiquer au serveur une plage de ports ouvrir en mode passif et de laisser entrer
les paquets NEW par ces ports. Ceci ne prsente pas un trs gros danger dans la mesure o :
nous n'aurons pas beaucoup de connexions DATA simultanes, il n'est donc pas
ncessaire d'ouvrir une grande plage ;
ces ports seront normalement ferms en dehors d'une connexion DATA qui en
utiliserait.
Spcifier les ports
Nous avons une configuration -c3 -C2 ce qui laisse entendre deux connexions DATA par
client, avec deux clients simultans. Nous ne devrions pas avoir besoin de plus de 4 ports,
nous allons en prvoir 10 avec le paramtre -p 65525:65535 qui indique assez clairement
que le serveur choisira un port disponible sur la plage [65525,65535], ce qui nous donne une
ligne de commande :
pure-ftpd -j -lpuredb:/etc/pure-ftpd/pureftpd.pdb -E -T:30 -c3 -C2 -Y1 -p
65525:65535
Ouvrir les ports concerns
Il faut le dire Netfilter :
iptables -A INPUT -p tcp --dport 65525:65535 -m state --state
NEW,ESTABLISHED -j ACCEPT
Vrification
Connexion en FTPES mode passif :
Statut : Connexion 192.168.10.76:21...
Statut : Connexion tablie, attente du message d'accueil...
Rponse : 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------
-
Rponse : 220-You are user number 1 of 3 allowed.
Rponse : 220-Local time is now 15:13. Server port: 21.
Rponse : 220-This is a private system - No anonymous login
Rponse : 220-IPv6 connections are also welcome on this server.
Rponse : 220 You will be disconnected after 15 minutes of inactivity.
Commande : USER test
Rponse : 331 User test OK. Password required
Commande : PASS ********
Rponse : 230-Your bandwidth usage is restricted
Rponse : 230-User test has group access to: ftpgroup
Rponse : 230 OK. Current directory is /
Commande : OPTS UTF8 ON
Rponse : 200 OK, UTF-8 enabled
Statut : Connect
Statut : Rcupration du contenu du dossier...
Commande : PWD
Rponse : 257 "/" is your current location
Commande : TYPE I
Rponse : 200 TYPE is now 8-bit binary
Commande : PASV
Rponse : 227 Entering Passive Mode (192,168,10,76,102,168)
Commande : MLSD
Rponse : 150 Accepted data connection
Rponse : 226-Options: -a -l
Rponse : 226 7 matches total
Statut : Succs de la lecture du contenu du dossier
Statut : Dconnect du serveur
Statut : Connexion 192.168.10.76:21...
Statut : Connexion tablie, attente du message d'accueil...
Rponse : 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------
-
Rponse : 220-You are user number 1 of 3 allowed.
Rponse : 220-Local time is now 15:22. Server port: 21.
Rponse : 220-This is a private system - No anonymous login
Rponse : 220-IPv6 connections are also welcome on this server.
Rponse : 220 You will be disconnected after 15 minutes of inactivity.
Commande : AUTH TLS
Rponse : 234 AUTH TLS OK.
Statut : Initialisation TLS...
Statut : Vrification du certificat...
Commande : USER test
Statut : Connexion TLS/SSL tablie.
Rponse : 331 User test OK. Password required
Commande : PASS ********
Rponse : 230-Your bandwidth usage is restricted
Rponse : 230-User test has group access to: ftpgroup
Rponse : 230 OK. Current directory is /
Commande : SYST
Rponse : 215 UNIX Type: L8
Commande : FEAT
Rponse : 211-Extensions supported:
Rponse : EPRT
Rponse : IDLE
Rponse : MDTM
Rponse : SIZE
Rponse : REST STREAM
Rponse : MLST
type*;size*;sizd*;modify*;UNIX.mode*;UNIX.uid*;UNIX.gid*;unique*;
Rponse : MLSD
Rponse : AUTH TLS
Rponse : PBSZ
Rponse : PROT
Rponse : UTF8
Rponse : TVFS
Rponse : ESTA
Rponse : PASV
Rponse : EPSV
Rponse : SPSV
Rponse : ESTP
Rponse : 211 End.
Commande : OPTS UTF8 ON
Rponse : 200 OK, UTF-8 enabled
Commande : PBSZ 0
Rponse : 200 PBSZ=0
Commande : PROT P
Rponse : 200 Data protection level set to "private"
Statut : Connect
Statut : Rcupration du contenu du dossier...
Commande : PWD
Rponse : 257 "/" is your current location
Commande : TYPE I
Rponse : 200 TYPE is now 8-bit binary
Commande : PASV
Rponse : 227 Entering Passive Mode (192,168,10,76,196,229)
Commande : MLSD
Erreur : Dlai d'attente expir
Erreur : chec lors de la rcupration du contenu du dossier
Statut : Connexion 192.168.10.76:21...
Statut : Connexion tablie, attente du message d'accueil...
Rponse : 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------
-
Rponse : 220-You are user number 1 of 3 allowed.
Rponse : 220-Local time is now 15:54. Server port: 21.
Rponse : 220-This is a private system - No anonymous login
Rponse : 220-IPv6 connections are also welcome on this server.
Rponse : 220 You will be disconnected after 15 minutes of inactivity.
Commande : AUTH TLS
Rponse : 234 AUTH TLS OK.
Statut : Initialisation TLS...
Statut : Vrification du certificat...
Commande : USER test
Statut : Connexion TLS/SSL tablie.
Rponse : 331 User test OK. Password required
Commande : PASS ********
Rponse : 230-Your bandwidth usage is restricted
Rponse : 230-User test has group access to: ftpgroup
Rponse : 230 OK. Current directory is /
Commande : OPTS UTF8 ON
Rponse : 200 OK, UTF-8 enabled
Commande : PBSZ 0
Rponse : 200 PBSZ=0
Commande : PROT P
Rponse : 200 Data protection level set to "private"
Statut : Connect
Statut : Rcupration du contenu du dossier...
Commande : PWD
Rponse : 257 "/" is your current location
Commande : TYPE I
Rponse : 200 TYPE is now 8-bit binary
Commande : PASV
Rponse : 227 Entering Passive Mode (192,168,10,76,255,248) Donc le
port 65528
Commande : MLSD
Rponse : 150 Accepted data connection
Rponse : 226-Options: -a -l
Rponse : 226 7 matches total
Statut : Succs de la lecture du contenu du dossier
a fonctionne sans surprise, mais sans le conntrack.
Mise en production
Puisque nous avons rsolu peu prs tous les problmes, nous pouvons envisager de fixer
tout ceci pour que le fonctionnement perdure aprs redmarrage de la machine. Nous sommes
toujours ici dans la configuration simplifie :

Netfilter
Nous devons nous assurer que les rgles Iptables seront restaures. Une solution pas vilaine
consiste sauvegarder les rgles en place :
mkdir /etc/iptables
iptables-save > /etc/iptables/rules
Et de les recharger lorsque l'interface eth0 est active. Nous devons aussi charger le module
nf-conntrack-ftp. Tout ceci peut tre fait avec un script plac dans /etc/network/if-
up.d/ (Sur Debian et drives) :
# cat /etc/network/if-up.d/netfilter
#! /bin/sh
if [ "$IFACE" = eth0 ]; then
/sbin/modprobe nf-conntrack-ftp
/sbin/iptables-restore < /etc/iptables/rules
fi
Ne pas oublier de rendre ce script excutable et ventuellement l'amliorer pour par exemple
s'assurer que tout s'est bien pass.
Inetd
Il nous faut ajouter dans le fichier /etc/inetd.conf la ligne suivante :
ftp stream tcp nowait root /usr/sbin/pure-ftpd -j -lpuredb:/etc/pure-
ftpd/pureftpd.pdb -E -T:30 -c3 -C2 -Y1 -p 65525:65535
Puis demander inetd de recharger sa configuration.
Tout devrait fonctionner, du moins en IPv4.
Et IPv6 ?
Pure-ftpd sait le faire, c'est clairement indiqu dans sa documentation et nous aurions pu le
tester lorsqu'il tait dmarr la main dans un shell.
Ici cependant, a ne fonctionnera pas, non pas cause du Pure-ftpd mais du service inetd
qui par dfaut ne fonctionne qu'en IPv4. Cependant, la version fournie avec squeeze supporte
IPv6 si on le lui demande poliment.
La mthode polie tant d'ajouter cette ligne dans inetd.conf :
ftp stream tcp6 nowait root /usr/sbin/pure-ftpd -j -lpuredb:/etc/pure-
ftpd/pureftpd.pdb -E -T:30 -c3 -C2 -Y1 -p 65525:65535
Et depuis le Net ?
Jusqu'ici, nous avons travaill sur des nuds situs sur des rseaux privs, routs entre eux.
Une sorte de gros rseau local donc. Mais si les nuds doivent se joindre par l'internet, il y
aura de nouveaux problmes rgler.
Probablement que dans tous les cas, les clients seront placs derrire un routeur NAT muni
d'un pare-feu
FTP sur la passerelle
Si le serveur est plac sur la passerelle elle-mme, il n'y aura pas de problmes
supplmentaires du ct du serveur, il faudra juste adapter les rgles IPtables de la passerelle
comme nous l'avons vu plus haut.
FTP dans le LAN
Si le serveur est plac derrire le routeur NAT, deux cas de figure seront alors possibles :
IPv6
La passerelle se comporte en routeur NAT en IPv4 et en simple pont en IPv6. Dans ce cas,
l'hte du serveur FTP peut disposer d'une adresse IPv6 publique et il n'y a toujours pas de
problmes.
Notons que nous avons tudi le filtrage en IPv4 seulement. Il serait dcent d'en faire autant
en IPv6 dans un tel cas.
Malheureusement, IPv6 est loin d'tre dploy chez tous les fournisseurs d'accs ( l'heure o
ces lignes sont crites), ce qui rend la solution moins intressante.
IPv4
Il va falloir faire de la redirection de port (DNAT) sur la passerelle. Pas de problmes pour le
canal de contrle (port 21), mais c'est une autre affaire pour les canaux de DATA. La page
suivante va dtailler ce cas de figure.
Derrire un routeur NAT
Architecture du montage
Notre architecture devient un peu plus complique puisque :
le client FTP est derrire un routeur NAT ;
le serveur lui aussi se trouve derrire un routeur NAT.
Ce qui nous donne :

Ct client
Sur la passerelle du client (GNU/Linux avec iptables), nous avons charg les modules nf-
conntrack-ftp et nf-nat-ftp, ncessaires pour que le client puisse utiliser le mode actif.
Notons que dans un cas de figure comme celui-ci, si nous comptons sur le suivi de connexion
pour rsoudre nos problmes de connexions RELATED, celui-ci sera mis en uvre :
pour le mode passif ct serveur ;
pour le mode actif ct client.
En nous souvenant de ce qui a dj t vu propos du suivi de connexion en FTPES, nous
pouvons prvoir une impasse
Ct serveur
Dans cette configuration, l'adresse IP(v4) du serveur sera une adresse prive. Or de l'extrieur,
la seule adresse accessible sera l'IP publique attribue par le fournisseur d'accs.
La premire ide qui vient l'esprit est donc de rediriger en DNAT le port 21 du routeur sur
l'adresse IP du serveur.
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 21 -j DNAT --to-
destination 192.168.10.76
Pouvons-nous prvoir
le comportement ? Une requte arrivant sur xxx.yyy.zzz.ttt port 21 va tre redirige sur notre
serveur. Il rpondra la requte. Ct canal de contrle, il ne devrait pas y avoir de
problmes.
Mode actif
Dans ce mode, o le client FTP devient serveur pour les DATA, le serveur ne devrait pas
poser de problmes, s'il reoit l'adresse IP publique du routeur NAT du client. S'il y a un
problme, il faudra donc chercher le rsoudre du ct du client, mais avec les modules de
suivi de connexion du protocole FTP de Netfilter, nous avons nos chances.
Essai en FTP
Si nous utilisons le mode actif, le client enverra son adresse et un port pour que pure-ftpd
puisse ouvrir une connexion TCP et a devrait fonctionner. Vrifions dans le compte-rendu de
FileZilla :
Statut : Connexion 82.243.80.13:21...
...
Commande : OPTS UTF8 ON
Rponse : 200 OK, UTF-8 enabled
Statut : Connect
Statut : Rcupration du contenu du dossier...
Commande : PWD
Rponse : 257 "/" is your current location
Commande : TYPE I
Rponse : 200 TYPE is now 8-bit binary
Commande : PORT 192,168,0,16,204,129
Rponse : 200 PORT command successful
Commande : MLSD
Rponse : 150 Connecting to port 52353
Rponse : 226-Options: -a -l
Rponse : 226 7 matches total
Statut : Succs de la lecture du contenu du dossier
Le client, en mode actif envoie son adresse IP prive et pourtant, tout fonctionne. Miracle ?
Comment la passerelle ct serveur peut-elle interprter une adresse IP prive qu'il ne sait pas
router ?
Sniffons sur la passerelle du serveur (Tshark, la version en ligne de commande de Wireshark
est notre ami)
...
19 0.386311 82.229.41.132 82.243.80.13 FTP
Request: TYPE I
20 0.386608 82.243.80.13 82.229.41.132 FTP
Response: 200 TYPE is now 8-bit binary
21 0.435339 82.229.41.132 82.243.80.13 FTP
Request: PORT 82,229,41,132,143,22
22 0.435765 82.243.80.13 82.229.41.132 FTP
Response: 200 PORT command successful
...
25 0.522738 82.243.80.13 82.229.41.132 FTP
Response: 150 Connecting to port 36630
Ce que l'on voit passer ici n'est plus l'adresse IP prive du client, mais l'adresse publique de sa
passerelle.
Il est fort ce netfilter
Il est fort, certes, mais i ne fait pas de miracles. Les modules nf-conntrack-ftp et surtout
nf-nat-ftp dans le cas prsent peuvent analyser et modifier le contenu des datagrammes
FTP parce qu'ils ne sont pas chiffrs.
Essai en FTPES
Est-ce bien la peine ? Netfilter ne pourra pas faire son travail sur du FTP chiffr. Essayez si
vous ne me croyez pas. Vous obtiendrez dans le FileZilla un message du type :
Commande : PORT 192,168,0,16,186,176
Rponse : 500 I won't open a connection to 192.168.0.16 (only to
82.229.41.132)
82.229.41.132, c'est ici l'adresse publique du routeur du client.
Mme message que si les modules nf-conntrack-ftp et nf-nat-ftp n'taient pas chargs
sur le routeur NAT du client, soit dit en passant.
Existe-t-il un contournement ? Rien de propre. Sauf si j'ai rat quelque chose, nous devrons
nous passer du mode actif en FTPES dans cette topologie.
Le mode passif
Nous avons dj vu ce qu'il se passe ct serveur. Sur le routeur NAT du serveur, il faudra
donc aussi rediriger les ports que nous avons spcifi dans la configuration de pure-ftpd :
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 65525:65535 -j DNAT --
to-destination 192.168.10.76
Cette solution sera acceptable dans la mesure o il n'y a qu'un seul serveur FTP derrire le
NAT.
Essai en FTP
Ici, nous risquons de rencontrer un problme du fait que dans ce mode, le serveur va prsenter
son adresse IP qui est ici prive donc, non route. FileZilla sait contourner cette erreur,
mais nous allons lui dire de ne pas le faire :
Ce qui nous permettra de mettre en vidence cette erreur :
Commande : PASV
Rponse : 227 Entering Passive Mode (192,168,10,76,255,251)
Statut : Le serveur a envoy une rponse passive avec une adresse non
routable. chec du mode passif.
Erreur : chec lors de la rcupration du contenu du dossier
Comment corriger cette erreur ? Il y a deux faons de faire, dont une que nous avons dj
rencontre ct client pour le mode actif :
Netfilter, au secours !
En chargeant les modules nf-conntrack-ftp et nf-nat-ftp, nous avons nos chances :
Commande : PASV
Rponse : 227 Entering Passive Mode (82,243,80,13,255,245)
Commande : MLSD
Rponse : 150 Accepted data connection
Rponse : 226-Options: -a -l
Rponse : 226 6 matches total
Statut : Succs de la lecture du contenu du dossier
Et a fonctionne. Le conntrack corrige la vole. C'est bien, surtout si le routeur NAT du
serveur rcupre une adresse IP publique qui change dans le temps, mais il est clair qu'en
mode FTPES, ceci ne fonctionnera plus.
Dans pure-ftpd
Il est parfaitement possible de demander pure-ftpd d'exposer l'adresse IP publique de sa
passerelle, lorsqu'il travaille en mode passif. Cette solution ne sera acceptable que si cette
passerelle dispose d'une adresse IP publique fixe, bien entendu.
Nous modifions la ligne de commande comme suit (elle commence devenir vraiment
longue) dans /etc/inetd.conf :
ftp stream tcp4 nowait root /usr/sbin/pure-ftpd -j -lpuredb:/etc/pure-
ftpd/pureftpd.pdb -E -T:30 -c3 -C2 -Y1 -p 65525:65535 -P 82.243.80.13
Cette opration va perturber le fonctionnement du suivi de connexions FTP de Netfilter,
aussi bien sur le serveur lui-mme que sur son routeur NAT. Sur le routeur, ce n'est pas
important puisque les ports rservs au mode passif sont dj explicitement redirigs.
Sur le serveur lui-mme, en revanche nous avons actuellement :
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW,RELATED,ESTABLISHED
-j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Il nous faut maintenant ouvrir explicitement les ports 65525 65535 cause du suivi de
connexion rendu inoprant :
iptables -A INPUT -i eth1 -p tcp --dport 65525:65535 -j ACCEPT
Nous rechargeons la configuration de inetd et nous essayons :
Commande : PASV
Rponse : 227 Entering Passive Mode (82,243,80,13,255,248)
Commande : MLSD
Rponse : 150 Accepted data connection
Rponse : 226-Options: -a -l
Rponse : 226 6 matches total
Statut : Succs de la lecture du contenu du dossier
Tout va bien.
Essai en FTPES
Avec les modifications apportes aux rgles iptables du ct du serveur, le suivi de
connexion n'est plus ncessaire. Du ct du client, en mode passif, il n'y a pas besoin de suivi
de connexion spcifique FTP. Nous pouvons nous attendre ce que tout fonctionne
correctement :
Commande : AUTH TLS
Rponse : 234 AUTH TLS OK.
...
Commande : PASV
Rponse : 227 Entering Passive Mode (82,243,80,13,255,245)
Commande : MLSD
Rponse : 150 Accepted data connection
Rponse : 226-Options: -a -l
Rponse : 226 6 matches total
Statut : Succs de la lecture du contenu du dossier
Pas de mauvaise surprise.
Bilan
Si nous donnons la priorit l'usage du FTPES qui offre le chiffrement de la connexion, dans
une telle topologie o le serveur comme les clients se trouvent derrire des routeurs NAT, la
seule solution est de faire du FTP passif.
Bien entendu, en IPv6 tout devient plus simple puisqu'il n'y a plus de NAT nulle part. Un jour
peut-tre ?
En attendant rsumons les configurations des divers protagonistes :
Serveur FTP
Les lignes de commande dans inetd (IPv4 et IPv6) :
ftp stream tcp4 nowait root /usr/sbin/pure-ftpd -j -
lpuredb:/etc/pure-ftpd/pureftpd.pdb -E -T:30 -c3 -C2 -Y1 -p
65525:65535 -P 82.243.80.13
ftp stream tcp6 nowait root /usr/sbin/pure-ftpd -j -
lpuredb:/etc/pure-ftpd/pureftpd.pdb -E -T:30 -c3 -C2 -Y1 -p
65525:65535
les rgles Iptables :
# iptables-save

# Generated by iptables-save v1.4.8 on Sun Jan 29 11:46:57 2012
*nat
:PREROUTING ACCEPT [1255:400710]
:POSTROUTING ACCEPT [715:52251]
:OUTPUT ACCEPT [715:52251]
COMMIT
# Completed on Sun Jan 29 11:46:57 2012
# Generated by iptables-save v1.4.8 on Sun Jan 29 11:46:57 2012
*filter
:INPUT DROP [400:95800]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [884:74191]
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -m state --state
NEW,RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 65525:65535 -j ACCEPT
COMMIT
Le suivi de connexion est rest en place pour permettre la connexion en mode FTP
actif (sans chiffrement) ;
les modules chargs pour le suivi de connexion FTP :
# lsmod | grep ftp

nf_conntrack_ftp 5505 0
nf_conntrack 46311 6
iptable_nat,nf_nat,nf_conntrack_ipv4,xt_state,xt_conntrack,nf_conntra
ck_ftp
Routeur NAT du FTP
les rgles Iptables relatives au fonctionnement du FTP :
# iptables-save

# Generated by iptables-save v1.4.8 on Sun Jan 29 11:56:26 2012
*nat
:PREROUTING ACCEPT [3838277:231166320]
:POSTROUTING ACCEPT [916200:55004844]
:OUTPUT ACCEPT [47781:3326346]
...
-A PREROUTING -i eth0 -p tcp -m tcp --dport 21 -j DNAT --to-
destination 192.168.10.76
-A PREROUTING -i eth0 -p tcp -m tcp --dport 65525:65535 -j DNAT --to-
destination 192.168.10.76
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
...
les modules de suivi de connexion ne sont pas ncessaires pour ce qui nous intresse
ici, compte tenu des rgles Iptables mises en place. Il peut cependant tre utile de les
charger si par ailleurs des clients du mme rseau souhaitent faire du FTP actif sur
l'internet :
# lsmod | grep ftp

nf_nat_ftp 1999 0
nf_conntrack_ftp 5505 1 nf_nat_ftp
nf_nat 13276 3 nf_nat_ftp,ipt_MASQUERADE,iptable_nat
nf_conntrack 46327 7
nf_nat_ftp,nf_conntrack_ftp,ipt_MASQUERADE,iptable_nat,nf_nat,nf_conn
track_ipv4,xt_state
Routeur NAT des clients
Il n'y a rien de spcial, part optionnellement charger les modules de suivi de connexion nf-
conntrack-ftp et nf-nat-ftp pour autoriser le FTP actif, aussi bien sur notre serveur que
sur d'autres, situs quelque part sur l'internet.
Nous supposons que par ailleurs, Iptables configure correctement la passerelle pour autoriser
les connexions RELATED et ESTABLISHED venant de l'internet dans le routage NAT.
Rappel important
Souvenons-nous que les modules de suivi de connexion nf-conntrack-ftp et nf-nat-ftp
sont dans l'incapacit totale de faire leur travail en prsence d'un flux chiffr (FTPES). La
consquence principale est que mme si le serveur FTP est install directement sur une
passerelle et peut donc tre atteint sans DNAT, le client derrire un routeur NAT n'aura pas de
possibilit d'y accder en FTPES actif.
Une autre piste
Une solution intressante, mais qui sort du cadre de cette tude sur FTP consiste tablir un
tunnel chiffr, par exemple entre la passerelle du rseau contenant le serveur FTP et le poste
du client :
Dans ce cas, le tunnel tant lui-mme chiffr, rien n'interdirait d'abandonner FTPES au profit
de FTP, ce qui simplifierait le problme. Dans une telle topologie, le client pourrait mme
travers son tunnel accder tous les nuds de son rseau priv. Une solution comme openvpn
supporte trs bien de passer un routeur NAT, encore faudra-t-il que les pare-feux laissent
passer le tunnel. Mais tout ceci est une autre histoire .
HTTP
Introduction
Il ne sera pas question ici de dcortiquer en profondeur les rouages du HTTP. Nous allons
plutt nous intresser certains aspects du surf . En effet, s'il constitue la pratique la plus
courante sur le Net, (avec la messagerie), il n'en prsente pas moins beaucoup de cts qui
peuvent sembler mystrieux .
Les crateurs de sites web rivalisent d'ingniosit pour raliser des pages sophistiques, qui
mettent en uvre beaucoup de techniques priphriques au protocole lui-mme. Nous ne
dtaillerons pas toutes ces techniques, nous essayerons simplement de les prsenter et de les
dmystifier
On parle beaucoup du respect de la vie prive sur le Net. Nous verrons d'un peu plus prs les
petites indiscrtions qui sont pratiques par ci par l.
Nous verrons galement comment les documents sont demands et reus, quelle est la part de
travail du navigateur du client et celle du serveur du fournisseur d'informations.
Nous verrons galement quelles techniques sont utilises pour acclrer la navigation, aussi
bien du ct du client (cache local) que de celui du fournisseur d'accs (serveurs proxy).
Le serveur proxy mrite quelque attention. En effet, c'est un peu le couteau suisse de
l'interconnexion entre un rseau local et le Net, beaucoup de rseaux locaux d'entreprise
n'offrent l'accs au Net qu' travers un proxy, pour diverses raisons dont nous verrons les plus
importantes.
Evitons dj une confusion
HTTP (Hyper Text Transfert Protocol) est un protocole destin transfrer du texte
(ou des fichiers quelconques, s'ils sont dfinis par un format MIME) depuis un serveur
vers un client. Initialement, il s'agissait bien de texte, sans illustrations, avec juste
quelques possibilits d'enrichissement. Ceux qui utilisent un systme GNU/Linux
pourront essayer un navigateur en mode texte comme Lynx ;
HTML (Hyper Text Markup Language) est un langage de description de document.
Outre les possibilits d'enrichissement du texte comme les attributs gras, italique,
soulign, les diffrents niveaux de titre, il offre la bien connue possibilit de dfinir
des hyperliens entre documents ou parties de documents.
Mme s'il est clair que HTTP et HTML voient leurs destins intimement lis, il s'agit bien de
deux choses diffrentes
HTTP est rsolument orient fourniture de documentation . Entendons par l que le but
recherch est clairement (du moins initialement) de permettre un client de trouver le
document qui l'intresse parmi la multitude d'informations stockes sur des serveurs dont le
rle est de publier ces documents l'intention de qui les cherche. HTTP gnre un flux de
donnes pratiquement exclusivement dans le sens du serveur vers le client.
Aujourd'hui, la situation est un peu moins claire. Les usagers de l'internet prennent une part de
plus en plus active dans la cration de contenu. Historiquement, la mise jour du contenu d'un
serveur HTTP se fait par un autre protocole : FTP (File Transfert Protocol). Cette mthode
prsente deux inconvnients :
Ce n'est pas d'une trs grande souplesse d'usage ;
Lorsqu'un site est maintenu par plusieurs auteurs, la gestion des mises jour peut
devenir dlicate.
Microsoft a ouvert le feu avec FrontPage, outil de cration de documents HTML trs intuitif,
permettant de mettre en ligne ses documents sur un serveur HTTP maison , pourvu des
fameuses extensions FrontPage . Il s'agit d'Internet Information Services, assez connu
pour ses trous de scurit, du moins ses dbuts. L'extrme simplicit d'emploi du couple
FrontPage/IIS est malheureusement handicape par ces deux points fondamentaux:
Cette solution, propritaire, oblige n'utiliser que les technologies Microsoft, si l'on
dsire profiter de tous les avantages offerts ;
Les difficults maitriser la scurit de cette solution, surtout sur un serveur public.
Des alternatives libres apparaissent, qui tendent intgrer HTTP des fonctions de transfert
de fichiers du client vers le serveur, ainsi que des mcanismes de gestion efficace des mises
jour. Ces solutions manquent toutefois encore de maturit et prsentent elles aussi parfois de
graves inconvnients pour la scurit des serveurs accs public. Aussi, nous passons d'une
poque o le contenu d'une page HTML tait crit en dur de faon statique, avec un outil
spcialis ou non, une poque o le html est gnr la vole par le serveur, de faon
dynamique, partir d'informations stockes dans des bases de donnes o dans des fichiers
texte, comme c'est le cas pour ce site. Dans un tel cas, les donnes sont mise jour par des
formulaires HTML et envoys au serveur par la mthode POST que nous verrons plus
loin.
Du point de vue du client, peu importe que les pages soient statiques o dynamiques, ce qu'il
reoit est toujours du HTML.
Regardons en arrire
Historiquement, il a exist avant l'explosion du couple HTTP/HTML un autre outil permettant
de servir simplement et efficacement des documents, il s'agissait du systme Gopher :
Du nom de l'cureuil amricain, aussi appel spermophile , vivant dans un ddale de
galeries. Le logiciel permettait de se promener dans le labyrinthe de l'Internet. Gofer signifie
aussi en argot amricain Go for , qui veut dire va chercher , et dsignant un garon de
courses. ( Rheingold).
Que les amoureux de l'histoire du Net se reportent au jargon franais , (d'o la dfinition
ci-dessus a t tire, voir aussi le Wikipdia). Disons simplement que ce protocole n'a pas
survcu parce qu'il tait propritaire . En effet il appartenait l'universit du Minnesota,
qui menaait de rclamer des royalties pour son emploi. La rplique fut immdiate Gopher
est mort.
1)

Regardons en avant
Aujourd'hui, HTTP est certainement le protocole le plus utilis sur le Net et probablement le
plus simple. C'est aussi certainement celui qui l'on demande le plus. N'oublions pas qu'il est
initialement conu pour transporter du texte, avec des hyperliens. Or, que ne lui faisons nous
pas transporter Avec l'avnement du haut dbit, les pages s'alourdissent et embarquent
chaque jour des fioritures de plus en plus labores, ncessitant des plug-ins gnralement
propritaires (Flash, Shockwave, Real, etc.).
1)
Vous savez comment sont ces idalistes libertaires : Il suffit que l'on cherche leur imposer
une marque de proprit pour qu'immdiatement, ils ralisent un systme de remplacement
libre et souvent plus efficace que l'original. D'autres exemples biens connus, comme les
formats GIF (propritaire) et PNG (libre), certains systmes d'exploitation que je ne
nommerai pas (observez bien le pluriel) et d'autres comme Linux, FreeBSD, OpenBSD
Notions de base
Quels mcanismes sont mis en uvre dans le surf ?
HTTP est donc un protocole somme toute assez simple par lui mme. Ce qui complique la
comprhension de l'ensemble des processus mis en uvre, c'est toute l'intelligence qui est
ajoute, tant du ct serveur que du ct client.
Au dpart, un client envoie une requte un serveur HTTP et celui-ci y rpond. Toute la
difficult vient de deux aspects qui sont indpendants du protocole HTTP lui-mme :
Le traitement de l'information pratiqu par le serveur avant d'envoyer le rsultat de la
requte.
Le traitement de l'information pratiqu par le client avant d'afficher le rsultat de la
requte.

Ct serveur
Lorsqu'une requte arrive sur le serveur, elle peut concerner :
Une simple page HTML statique (le suffixe de la page tant alors gnralement
.htm ou .html). Tout son contenu est dj dfini en HTML et le serveur n'a qu'
l'envoyer tel quel, au client. Dans cette configuration, un site web est fortement
ressemblant au contenu d'un livre, il est crit une fois pour toutes. Toute modification
doit faire l'objet d'une rdition.
Une page HTML dont certains lments sont dynamiques , c'est--dire qu'ils sont
construits partir de sources d'informations diverses au moment de l'envoi au client.
Ces mthodes ont pour but de produire deux fournitures d'informations typiquement
impossibles raliser simplement avec des pages purement statiques:
o Des informations qui sont le rsultat d'un calcul partir d'lments que le
client a transmis au serveur dans sa requte.
o Des informations issues d'une base de donnes mise jour par un moyen
quelconque. Ces informations peuvent voluer tout instant et leur affichage
via HTTP ncessite leur intgration en temps rel dans le document.
o On peut bien entendu imaginer un document dont le contenu intgre les deux
exercices prcdents.
Plusieurs possibilits existent pour raliser de telles oprations :
Les excutables CGI (Common Gateway Interface).
Ces excutables construisent intgralement un flux HTML au moment de leur appel.
Cette technique, la plus ancienne, n'est pas forcment la meilleure. Les excutables
peuvent tre crits dans un langage compil comme C ou dans un langage interprt
comme Perl, Python, Java, voire PHP (bien qu'il n'ait pas t initialement conu pour
cet usage). L'excutable est droul sur le serveur lui-mme (ou sur un autre, mais ce
n'est qu'un dtail).
Des langages plus spcialiss comme PHP, JSP ou ASP.
Active Server Pages est une technologie Microsoft, alors que Personal Home Page est
une technologie libre. Les deux sont sensiblement identiques au niveau des concepts,
mais pas de la syntaxe.
Ces technologies sont dites Server Side , c'est dire que les traitements sur l'information
sont effectus sur le serveur.
L'avantage du server side est que le code HTML reu par le client est du HTML pur, ce
qui veut dire qu' priori, tout navigateur peut l'afficher correctement, sans trop de prcautions
particulires de la part de l'auteur du site, si ce n'est au niveau de leur compatibilit avec les
standards.
L'inconvnient est que le serveur voit sa charge augmenter dans des proportions qui peuvent
tre considrables et qu'en cas de connexion lente, la navigation devient vite pnible, lorsqu'il
y a beaucoup de traitement d'informations introduites par le client, comme des calculs
excuts partir de donnes issues d'un formulaire.
Ct client
De ce ct l aussi, des traitements d'informations peuvent tre utiles :
Contrler par exemple la validit des informations saisies dans un formulaire, avant de
les envoyer au serveur. Ceci vite des allers-retours inutiles en cas de saisie errone.
Effectuer un traitement local de certaines informations pour afficher un rsultat. Un
exemple serait d'inclure une calculette dans une page web, cette calculette travaillant
uniquement chez le client, sans jamais rien envoyer au serveur (nous verrons cet
exemple plus loin).
Raliser toutes sortes d'oprations susceptibles de rendre les pages visites plus
vivantes, en introduisant des animations, des menus droulants et toutes sortes de
gadgets propres gayer (de faon plus ou moins heureuse) une page web.
L encore, les donnes peuvent tre traites, de diverses manires.
Les JavaScripts.
Ces petits applicatifs, transmis dans le document HTML, sont excuts ct client par
le navigateur. Malheureusement, chaque navigateur a une notion plus ou moins
personnelle de l'interprtation de JavaScript et c'est un vritable casse-tte pour le
concepteur que d'crire des scripts qui fonctionnent sur la totalit des navigateur
existants, mme si un effort de standardisation a t entrepris sur les dernires versions
(Internet Explorer 6 et plus, Mozilla Mais il en existe beaucoup d'autres).
Les VBScripts.
C'est la mme philosophie que pour le JavaScript, part que c'est du Visual Basic,
proprit de Microsoft, qui ne fonctionne donc que sur Internet Explorer. Si la solution
peut paraitre intressante sur un Intranet, o l'on maitrise l'installation des postes
clients, elle est bien entendu proscrire sur l'internet.
Les composants ActiveX qui sont des excutables compils, qui ne peuvent s'excuter
eux aussi que dans Internet Explorer, c'est galement une technologie propritaire de
Microsoft. Trs intressante sur le principe, elle n'est en pratique utilisable de faon
acceptable que sur un intranet.
Les applets Java qui sont comparables aux composants ActiveX, mais qui ont des
chances de s'excuter correctement sur tout navigateur, si une machine virtuelle Java
est installe. Ces deux technologies prsentent malheureusement de gros risques de
scurit.
Les plug-in
Ce sont des composants enfichables qui tendent les possibilits intrinsques des
navigateurs, comme l'affichage de documents flash par exemple.
Les avantages sont de deux sortes :
Tout traitement de donnes ralis localement est rapide et sans surcharge pour le
serveur.
Les effets d'animation, comme les menus droulants ou les bandeaux dfilants ne
peuvent tre que raliss localement.
Les inconvnients viennent des incompatibilits entre navigateurs et des trous de scurit
introduits par des excutables tlchargs sur le client, issus d'origines qui peuvent tre
malveillantes.
Il n'est pas forcment ais pour un surfeur de faire prcisment la part des choses dans tous
ces mcanismes qui peuvent se combiner avec plus ou moins de complexit (et de bonheur)
au fil des sites visits.
Pour vous aider mieux vous y retrouver, des exemples simples sont donns plus loin.
Quelques notions supplmentaires
Le codage MIME
(Multipurpose Internet Mail Extension. Format de messages de l'internet permettant de
dcouper un message en plusieurs parties et d'y inclure des donnes non-ASCII, savoir du
son, des images..)
Dfinition emprunte au Jargon Franais .
HTTP, un peu comme SMTP, ne sait pas nativement transporter autre chose que du texte. Il
est bien connu de tous que le web propose aussi autre chose, comme des images (jpg, gif,
png), des animations et des documents aux formats plus ou moins particuliers (pdf, mpg,
doc, xls, odt, ods). Client et serveur doivent se mettre d'accord sur un moyen de coder ces
information (serveur) et de les dcoder (client) pour les afficher quand c'est possible, ou en
proposer le tlchargement. Dans tous les cas, ces donnes non textuelles doivent tre codes
et dcodes de faon cohrente.
Les cookies
Les cookies ne sont pas une mauvaise invention, c'est leur utilisation qui est parfois dtourne
des fins contestables.
Contrairement ce que l'on peut penser, Il n'existe pas de mmoire dans la navigation
web. Plus exactement, la notion de session n'existe pas (mais a vient). Pour bien
comprendre, prenons un exemple simple : Vous entrez sur un site priv qui ncessite une
authentification (nom d'utilisateur et mot de passe) A priori, sans l'aide des cookies, vous
seriez probablement amen vous identifier chaque nouvelle page. Aujourd'hui d'autres
techniques que le cookie sont dveloppes pour rpondre cette question. Il n'en demeure pas
moins que le cookie montre encore son utilit dans bien des cas.
Le principe est simple : Une fois authentifi, le serveur va dposer chez vous un cookie
contenant des informations qu'il peut ensuite aller relire chaque ouverture d'une nouvelle
page, pendant toute la dure de vie de ce cookie.
Normalement, il n'y a que le serveur qui a dpos un cookie qui peut aller le relire
(ventuellement un autre serveur du mme domaine). Malheureusement, certains ont trouv
des moyens pour extorquer aux clients des cookies dont ils ne sont pas l'origine, ce qui
constitue un risque de scurit, suivant les informations stockes dans ce cookie.
Le passage par un proxy
Nous allons profiter de l'occasion pour tordre le cou une confusion trop souvent rpandue
entre deux mthodes qui permettent toutes deux l'accs au Net pour un rseau local :
Le routeur NAT d'un ct.
Le routeur NAT agit au niveau IP. Il fonctionne pour tous les protocoles applicatifs
comme HTTP, FTP, mais aussi POP, IMAP, SMTP etc. (voir les chapitres ddis :
Partage de connexion et NetFilter et IPtables), puisqu'il agit au niveau IP.
Le proxy de l'autre.
Le serveur proxy travaille, lui, au niveau du protocole applicatif lui-mme. Un serveur
proxy n'assure aucun routage au niveau IP. En franais, on appelle a un serveur
mandataire.
Pour l'exemple nous mettrons en uvre un serveur proxy libre sous Linux : le trs clbre
SQUID dans le chapitre qui lui est ddi : Squid et SquidGuard.
Le protocole HTTP
Les versions du protocole
Les versions les plus utilises actuellement sont les versions 1.0 et 1.1, l'volution suivante
tant le XHTML qui apporte avant tout un peu plus de rigueur dans la syntaxe et un peu plus
de cohrence avec le XML, mais le principe reste exactement le mme.
La version 1.1 de HTML introduit quelques commandes supplmentaires, comme nous le
verrons plus bas. La version 1.0 reste toutefois utilisable dans la plupart des cas actuellement.
Remarque prliminaire :
une page est en principe dfinie par un URI (Unified Ressource Identifier). On dit aussi URL
(Unified Ressource Locator). Par exemple : http://www.debian.org/doc/manuals/reference/ch-
preface.fr.html. Nous savons que dans cet URI, il y a trois morceaux :
http:
qui indique quel protocole nous allons employer ;
//www.debian.org
Qui est sens reprsenter le serveur web contenant l'information que l'on recherche ;
/doc/manuals/reference/ch-preface.fr.html
qui reprsente le chemin complet de la page visite dans l'arborescence du serveur
concern.
Pourtant, si nous indiquons comme URI http://www.debian.org , il manque toute la partie
correspondant au nom de la page. Cependant, nous arrivons bien visualiser quelque chose
Tout simplement, parce que le serveur est paramtr pour ajouter /index.html s'il n'y a pas
le nom de la page. Ainsi, http://www.debian.org est quivalent
http://www.debian.org/index.html.
La dmonstration
Nous allons voir tout ceci travers quelques manipulations trs simples.
Pour raliser cette dmonstration, un serveur web Apache est install sur mon rseau priv.
L'hte s'appelle potiquement : linux.maison.mrs
Il contient une unique page html nomme index.html. C'est la page qui est servie par dfaut
(Les manipulatons datent de 2002, sur un apache 1.3 et une distribution d'poque (Mandrake),
mais ici, le temps ne fait rien l'affaire).
1 On fait comme tout le monde...
Commenons par faire ce que tout le monde fait : Utiliser son navigateur favori pour visiter
cette page. Voici l'allure de cette trs belle page, telle qu'on l'obtient avec Internet Explorer :

A titre indicatif, en voici le code HTML, tel qu'on peut l'obtenir en affichant le source depuis
le navigateur :
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv= "Content-Type" content= "text/html; charset=iso-8859-1">
</head>

<body bgcolor= #FFFFFF text= #000000 >
<p>Hello world.</p>
<p><img src="images/tux.gif" width= "97" height= "115"></p>
</body>
</html>
Les puristes constateront que ce code n'est plus du tout conforme aux recommandations du
W3C, mais la philosophie reste inchange.
2 On fait avec Telnet...
Essayons d'aller plus loin en trouvant un moyen de faire la main ce que le navigateur fait
automatiquement.
Nous sommes sur un protocole applicatif bas sur TCP et, dans ce cas l, il est gnralement
possible d'utiliser Telnet pour tudier un peu les commandes
La commande GET
Nous ouvrons une session telnet sur le serveur HTTP de linux.maison.mrs (Un serveur web
coute par convention sur le port 80).
telnet linux.maison.mrs 80

Trying 192.168.0.253...
Connected to linux.maison.mrs (192.168.0.253)
Escape character is '^]'.
La session est ouverte. Utilisons maintenant la commande GET
GET / HTTP/1.0
Nous la faisons en protocole 1.0, c'est un peu plus simple. Deux return pour valider Et
voici qu'arrive la rponse du serveur. Cette partie constitue l'en-tte, systmatiquement
envoye par le serveur :
HTTP/1.1 200 OK
Date: Wed, 08 May 2002 14:26:57 GMT
Server: Apache-AdvancedExtranetServer/1.3.23
(Mandrake Linux/4mdk) auth_ldap/1.6.0 mod_ssl/2.8.7 OpenSSL/0.9.6c
PHP/4.1.2
Last-Modified: Sun, 14 Apr 2002 09:29:32 GMT
ETag: "57d44-116-3cb94bfc"
Accept-Ranges: bytes
Content-Length: 278
Connection: close
Content-Type: text/html
Le serveur sait faire du HTTP 1.1. C'est un Apache version 1.3.23. Il annonce galement ce
qu'il sait faire :
Authentification par annuaire LDAP
Secure Socket Layer en OpenSSL version 0.9.6c
Interprtation de code PHP version 4.1.2
Il indique galement La date GMT de dernire modification du document demand, qu'il
mettra fin la connexion TCP la fin de l'envoi, et que le document fourni est au format
MIME : text/html
Et voici le document proprement dit :
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv= "Content-Type" content= "text/html; charset=iso-8859-1">
</head>

<body bgcolor= #FFFFFF text= #000000 >
<p>Hello world.</p>
<p><img src="images/tux.gif" width= "97" height= "115"></p>
</body>
</html>
Le message Connection closed by foreign host., issu de Telnet, indique que, par
dfaut, la connexion est interrompue par le serveur la fin de l'envoi du document. L'option
Connection: Keep-Alive aurait vit cette dconnexion. Entendons-nous bien sur ce point :
Nous parlons de la connexion TCP et en aucune faon d'une session au niveau de
l'application.
Bien ! Mais l'image ? Essayons de l'avoir
telnet linux.maison.mrs 80

Trying 192.168.0.253...
Connected to linux.maison.mrs (192.168.0.253).
Escape character is '^]'.

GET /images/tux.gif HTTP/1.0
Trying 192.168.0.253...

Connected to linux.maison.mrs (192.168.0.253).
Escape character is '^]'.

HTTP/1.1 200 OK
Date: Wed, 08 May 2002 14:44:17 GMT
Server: Apache-AdvancedExtranetServer/1.3.23
(Mandrake Linux/4mdk) auth_ldap/1.6.0 mod_ssl/2.8.7 OpenSSL/0.9.6c
PHP/4.1.2
Last-Modified: Sun, 14 Apr 2002 09:29:32 GMT
ETag: cf98a-a20-3cb94bfc
Accept-Ranges: bytes
Content-Length: 2592
Connection: close

Content-Type: image/gif
GIF89aas????/IHGHI??2i???gp:<f??HLv???
?rI?
(''}y|]?8:}?
y}X_!? hn??N4??XXZ?W????98;hgjx??Y^ZXbE?
Lhh?NE?4XYyU<????...
...
Connection closed by foreign host.
L, il ne fallait tout de mme pas s'attendre des miracles, avec une console en mode texte.
On a bien reu l'image, le type MIME (image/gif) est bien signal, mais il n'est pas possible
de la visualiser avec telnet.
3 On espionne avec le sniffeur...
Comment travaille le navigateur ?
Il a fait exactement la mme chose que nous :
Il appelle la page d'accueil GET / HTTP/1.0 (ventuellement HTTP/1.1, mais alors,
suivant la dfinition de cette version HTTP, il devra au moins envoyer aussi le nom
d'hte du serveur interrog).
Une fois la page reue, il va chercher dedans tous les URI, ici celui de l'image, et va
les appeler avec un GET. Dans le cas de l'image, il devra la recomposer, ce qui lui est
possible parce qu'il connat le format d'encodage gif.
Il affiche alors la page, dans son intgralit.
Premire observation de la conversation
Nous appelons la page avec Internet Explorer et le sniffeur va enregistrer ce qu'il se passe.
Les trames surlignes sont celles qui sont propres HTTP. Mais n'oublions pas que HTTP
s'appuie sur TCP, raison pour laquelle les autres trames existent :
No. Time Source Destination Proto Info
1 0.000000 192.168.0.10 192.168.0.253 TCP 1282 > 80 [SYN]
2 0.000163 192.168.0.253 192.168.0.10 TCP 80 > 1282 [SYN, ACK]
3 0.000565 192.168.0.10 192.168.0.253 TCP 1282 > 80 [ACK]
4 0.001410 192.168.0.10 192.168.0.253 HTTP GET / HTTP/1.1
5 0.001487 192.168.0.253 192.168.0.10 TCP 80 > 1282 [ACK]
6 0.068550 192.168.0.253 192.168.0.10 HTTP HTTP/1.1 200 OK
7 0.098435 192.168.0.10 192.168.0.253 HTTP GET /images/tux.gif HTTP/1.1
8 0.098593 192.168.0.253 192.168.0.10 TCP 80 > 1282 [ACK]
9 0.099450 192.168.0.253 192.168.0.10 HTTP HTTP/1.1 200 OK
10 0.099724 192.168.0.253 192.168.0.10 HTTP Continuation
11 0.102794 192.168.0.10 192.168.0.253 TCP 1282 > 80 [ACK]
12 0.102915 192.168.0.253 192.168.0.10 HTTP Continuation
13 0.280331 192.168.0.10 192.168.0.253 TCP 1282 > 80 [ACK]
La trame 4 reprsente la premire requte du client
La trame 6 renvoie le document demand, c'est dire la page d'accueil du site.
La trame 7 indique une requte supplmentaire pour l'image
Les trames 9, 10 et 12 reprsentent l'envoi par le serveur de l'image demande. Les
donnes sont trop volumineuses pour entrer dans une seule trame. Ici, il en faut trois.
La premire requte HTTP
Pour cette premire analyse, je laisse volontairement la totalit de la trame, afin de bien
montrer que HTTP est un protocole application , qui s'appuie sur TCP/IP, lui-mme
s'appuyant sur Ethernet dans cet exemple. Avec une connexion PPPoE, on aurait une couche
supplmentaire introduite par PPP
Frame 4 (380 on wire, 380 captured)
Arrival Time: Apr 13, 2002 16:07:10.266248000
Time delta from previous packet: 0.000861000 seconds
Time relative to first packet: 0.001408000 seconds
Frame Number: 4
Packet Length: 380 bytes
Capture Length: 380 bytes

Ethernet II
Destination: 00:00:b4:bb:5d:ee (00:00:b4:bb:5d:ee)
Source: 00:20:18:b9:49:37 (00:20:18:b9:49:37)
Type: IP (0x0800)


Internet Protocol, Src Addr: 192.168.0.10, Dst Addr: 192.168.0.253
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 366
Identification: 0xc99c
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: TCP (0x06)
Header checksum: 0xad95 (correct)
Source: 192.168.0.10 (192.168.0.10)
Destination: 192.168.0.253 (192.168.0.253)

Transmission Control Protocol, Src Port: 2752, Dst Port: 80
Source port: 2752 (2752)
Destination port: 80 (80)
Sequence number: 1135843004
Next sequence number: 1135843330
Acknowledgement number: 2485285689
Header length: 20 bytes
Flags: 0x0018 (PSH, ACK)
0... .... = Congestion Window Reduced (CWR): Not set
.0.. .... = ECN-Echo: Not set
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 1... = Push: Set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 17520
Checksum: 0x6ec7 (correct)

Hypertext Transfer Protocol
GET / HTTP/1.1\r\n La version du protocole HTTP
utilis.
Suivent les informations
supplmentaires qu'envoie le client au serveur...
Accept: image/gif, Les images gif...
image/x-xbitmap, Les images bitmap (bmp par
exemple)
image/jpeg, Les images jpeg...
image/pjpeg,
application/vnd.ms-powerpoint, Les trois lignes qui suivent
application/vnd.ms-excel, Reprsentent des informations
dont l'intrt
application/msword, peut paraitre contestable...
*/*\r\n
Accept-Language: fr\r\n Nous parlons franais...
Accept-Encoding: gzip, deflate\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n
Host: linux.maison.mrs\r\n Celle-ci est indispensable au
protocole v1.1
Connection: Keep-Alive\r\n Notez qu'IE demande garder
la connexion
\r\n
Si IE se permet d'annoncer au monde entier que les composants principaux de MS Office sont
prsents sur ma machine, ce n'est pas dans le but de moucharder . Si vous dsirez
tlcharger des documents .doc, .xls ou .ppt, ces documents devront tre transfrs par le
serveur au format MIME, comme une image gif ou jpg. Internet Explorer informe qu'il
accepte ce type de documents. Dans la pratique, tous les navigateurs les acceptent, mais vous
proposeront seulement de les enregistrer en tant que fichiers. Ici, IE indique qu'il est capable
de les afficher lui-mme.
La page d'accueil arrive
Frame 6 (710 on wire, 710 captured)
...
Hypertext Transfer Protocol
HTTP/1.1 200 OK\r\n
Date: Sun, 14 Apr 2002 09:30:12 GMT\r\n
Server: Apache-AdvancedExtranetServer/1.3.23 (Mandrake Linux/4mdk)
auth_ldap/1.6.0
mod_ssl/2.8.7
OpenSSL/0.9.6c
PHP/4.1.2\r\n
Last-Modified: Sun, 14 Apr 2002 09:29:32 GMT\r\n
ETag: 57d44-116-3cb94bfc \r\n
Accept-Ranges: bytes\r\n
Content-Length: 278\r\n
Keep-Alive: timeout=15, max=100\r\n
Connection: Keep-Alive\r\n
** Content-Type: text/html\r\n
** \r\n

Data (278 bytes)
0000 3c 68 74 6d 6c 3e 0d 0a 3c 68 65 61 64 3e 0d 0a <html>..<head>..
0010 3c 74 69 74 6c 65 3e 55 6e 74 69 74 6c 65 64 20 <title>Untitled
0020 44 6f 63 75 6d 65 6e 74 3c 2f 74 69 74 6c 65 3e Document</title>
0030 0d 0a 3c 6d 65 74 61 20 68 74 74 70 2d 65 71 75 ..<meta http-equ
0040 69 76 3d 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 iv="Content-Type
0050 22 20 63 6f 6e 74 65 6e 74 3d 22 74 65 78 74 2f "content="text/
0060 68 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d 69 73 html; charset=is
0070 6f 2d 38 38 35 39 2d 31 22 3e 0d 0a 3c 2f 68 65 o-8859-1">..</he
0080 61 64 3e 0d 0a 0d 0a 3c 62 6f 64 79 20 62 67 63 ad>....<body bgc
0090 6f 6c 6f 72 3d 22 23 46 46 46 46 46 46 22 20 74 olor="#FFFFFF" t
00a0 65 78 74 3d 22 23 30 30 30 30 30 30 22 3e 0d 0a ext="#000000">..
00b0 3c 70 3e 48 65 6c 6c 6f 20 77 6f 72 6c 64 2e 0d <p>Hello world..
00c0 0a 3c 2f 70 3e 0d 0a 3c 70 3e 3c 69 6d 67 20 73 .</p>..<p><img s
00d0 72 63 3d 22 69 6d 61 67 65 73 2f 74 75 78 2e 67 rc="images/tux.g
00e0 69 66 22 20 77 69 64 74 68 3d 22 39 37 22 20 68 if" width="97" h
00f0 65 69 67 68 74 3d 22 31 31 35 22 3e 0d 0a 3c 2f eight="115">..</
0100 70 3e 0d 0a 3c 2f 62 6f 64 79 3e 0d 0a 3c 2f 68 p>..</body>..</h
0110 74 6d 6c 3e 0d 0a tml>..
C'est au navigateur de se dbrouiller pour aller chercher les donnes de cette image, partir
des rfrences fournies. Tous ceux qui pratiquent le HTML le savent bien
Ceci justifie la prsence de la requte de la trame 7 :
Frame 7 (298 on wire, 298 captured)
...
Hypertext Transfer Protocol
GET /images/tux.gif HTTP/1.1\r\n Appel d'une rfrence relative
Accept: */*\r\n
Referer: http://linux.maison.mrs\r\n Depuis la page indique, ce qui
aboutit
la rfrence absolue:

http://linux.maison.mrs/images/tux.gif
Accept-Language: fr\r\n
Accept-Encoding: gzip, deflate\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n
Host: linux.maison.mrs\r\n
Connection: Keep-Alive\r\n
\r\n
Le serveur envoie les donnes partir de la trame 9 :
Frame 9 (1514 on wire, 1514 captured)
....
Hypertext Transfer Protocol
HTTP/1.1 200 OK\r\n
Date: Sun, 14 Apr 2002 09:30:12 GMT\r\n
Server: Apache-AdvancedExtranetServer/1.3.23 (Mandrake Linux/4mdk)
auth_ldap/1.6.0
mod_ssl/2.8.7
OpenSSL/0.9.6c
PHP/4.1.2\r\n
Last-Modified: Sun, 14 Apr 2002 09:29:32 GMT\r\n
ETag: cf98a-a20-3cb94bfc \r\n
Accept-Ranges: bytes\r\n
Content-Length: 2592\r\n
Keep-Alive: timeout=15, max=99\r\n
Connection: Keep-Alive\r\n
Content-Type: image/gif\r\n
\r\n
Data (1082 bytes)

0000 47 49 46 38 39 61 61 00 73 00 e6 00 00 04 04 05 GIF89aa.s.......
0010 a4 85 2f 49 48 47 a3 48 49 ed c8 10 c5 a4 32 9b ../IHG.HI.....2.
0020 69 07 ba 85 0e be 67 70 a9 3a 3c 85 66 1d d7 a5 i.....gp.:<.f...
0030 15 c4 48 4c a7 76 0c 8b 88 8d e8 e8 fc b8 88 94 ..HL.v..........
...
Conclusions
Nous avons vu quelques choses intressantes :
Le navigateur, en gros, fait ce que nous avons fait avec Telnet, quelques dtails prs
:
o Il envoie un certain nombre d'informations que nous n'avons pas envoyes
avec notre Telnet. Parmi celles-ci, Host: linux.maison.mrs, c'est dire le nom
du serveur, qui est le seul paramtre obligatoire pour HTTP 1.1, facultatif en
HTTP 1.0 ;
o Il se dbrouille tout seul pour appeler tous les documents ncessaires
l'affichage correct de cette page (ici l'image de Tux), et reconstitue
correctement cette image pour l'afficher.
Le coup du cache...
Puisque nous y sommes, profitons en pour observer un comportement intressant du
navigateur : La mise en cache des pages consultes.
L'internaute ferme son navigateur. Quelques instants plus tard, il l'ouvre nouveau et rclame
la mme page. Que va-t-il se passer ?
No. Time Source Destination Proto Info
1 0.000000 192.168.0.10 192.168.0.253 TCP 2632 > 80 [SYN]
2 0.000144 192.168.0.253 192.168.0.10 TCP 80 > 2632 [SYN, ACK]
3 0.000540 192.168.0.10 192.168.0.253 TCP 2632 > 80 [ACK]
4 0.001342 192.168.0.10 192.168.0.253 HTTP GET / HTTP/1.1
5 0.001461 192.168.0.253 192.168.0.10 TCP 80 > 2632 [ACK]
6 0.004186 192.168.0.253 192.168.0.10 HTTP HTTP/1.1 304 Not Modified
7 0.200392 192.168.0.10 192.168.0.253 TCP 2632 > 80 [ACK]
La rponse n'est pas la mme que dans le cas prcdent. Voyons ceci de plus prs
La requte
Frame 4 (336 on wire, 336 captured)
...
Hypertext Transfer Protocol
GET / HTTP/1.1\r\n
Accept: */*\r\n
Accept-Language: fr\r\n
Accept-Encoding: gzip, deflate\r\n
If-Modified-Since: Sat, 13 Apr 2002 13:40:06 GMT\r\n Cette ligne
n'apparaissait pas dans la requte prcdente...

If-None-Match: "57d44-d2-3cb83536"\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n
Host: linux.maison.mrs\r\n
Connection: Keep-Alive\r\n
\r\n
Internet Exlorer demande au serveur la page, si elle a t modifie depuis la date de son
prcdent chargement, tout simplement parce qu'il a conserv en cache cette page que nous
avons dj demande il n'y a pas si longtemps.
La rponse
Frame 6 (327 on wire, 327 captured)
...
Hypertext Transfer Protocol
HTTP/1.1 304 Not Modified\r\n
Date: Sat, 13 Apr 2002 13:53:52 GMT\r\n
Server: Apache-AdvancedExtranetServer/1.3.23 (Mandrake Linux/4mdk)
auth_ldap/1.6.0 mod_ssl/2.8.7 OpenSSL/0.9.6c PHP/4.1.2\r\n
Connection: Keep-Alive\r\n
Keep-Alive: timeout=15, max=100\r\n
ETag: "57d44-d2-3cb83536"\r\n
\r\n
Le serveur s'est content de rpondre que la page n'a pas t modifie
Le navigateur va donc rafficher la page qu'il a conserve en cache. Cette mthode de travail
prsente deux particularits:
Le temps d'affichage est considrablement raccourci lorsque l'on navigue dans un site,
puisque les pages dj charges ne le sont gnralement plus si l'on revient dessus.
L'espace requis pour le cache gonfle considrablement et peut occuper jusqu'
plusieurs dizaines de Mo sur votre disque
Mfiez vous des effets de bord du cache local ! Il existe de nombreux cas o le contrle sur la
modification n'est pas efficace. Votre navigateur affichera alors une version obsolte de la
page. Ceci est surtout gnant pour les dveloppeurs de sites.
Un procd analogue est galement employ par les serveurs proxy.
Toutes les commandes de HTTP 1.0
La comprhension de la navigation ne ncessite pas la connaissance de toutes les commandes,
loin de l. Aussi, nous ne les verrons pas en dtail.
La commande HEAD. Cette commande, qui existe galement en v1.0, permet de ne
demander au serveur que l'en-tte, sans le document.
La commande GET. Nous l'avons dj vue, ce n'est pas la peine d'y revenir, si ce
n'est pour rappeler que l'option Host: doit imprativement figurer dans la
commande, pour tre accepte par le serveur en version 1.1, mais pas en version 1.0.
La commande POST. C'est la commande qui permet d'envoyer des donnes au
serveur, gnralement par l'intermdiaire d'un formulaire.
Et HTTP 1.1 ?
Il propose quelques commandes supplmentaires, comme :
OPTIONS qui permet d'interroger le serveur sur les options disponibles.
TRACE qui est en quelque sorte une commande de dbogage
DELETE qui permet de dtruire un fichier sur le serveur (gnralement dsactive,
vous vous en doutez)
PUT Qui permet d'crire des fichiers sur le serveur, gnralement dsactive
galement.
Ces deux dernires commandes sont introduites pour permettre une mise jour des sites
distants via HTTP.
Les pages actives
Nous allons maintenant jouer un peu avec quelques possibilits qui font parfois peur
Vous divulguez plus d'informations que vous ne croyez...
Voici un exemple simple de ce qu'un serveur HTTP reoit de votre part comme informations
caches et qu'il est donc capable d'exploiter, comme ici par exemple juste pour vous les
afficher:
Votre Adresse IP (publique) 81.241.126.46
Le nom de votre machine telle
qu'elle est connue sur le Net
46.126-241-81.adsl-dyn.isp.belgacom.be
La faon dont vous vous
prsentez en tant que client
HTTP
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0)
Gecko/20100101 Firefox/27.0
La version de protocole HTTP
utilise
HTTP/1.1
Les types MIME
text/html,
application/xhtml+xml,
application/xml;q=0.9,
*/*;q=0.8
Le document qui vous a conduit http://irp.nain-t.net/doku.php/210http:20_le_protocole
jusqu'ici
Miracle ?
Pas le moins du monde. Cette page est dynamique. Les informations qu'elle contient sont
construites la vole par le serveur, avant de vous l'envoyer. La technologie utilise est ici
PHP. Les informations affiches ci-dessus sont obtenues partir des variables
d'environnement que votre navigateur envoie chaque commande GET.
PHP n'est qu'un moyen de construire une page HTML dynamique qui vous renvoie ces
informations, a aurait aussi pu tre fait avec un script CGI (dans les limites de ce que permet
l'hbergeur).
Si vous regardez le source de cette page, vous n'y trouverez que du HTML
Les formulaires...
Les formulaires ont pour but de permettre au client d'envoyer des donnes au serveur. A
charge pour lui de les traiter correctement. Leur emploi va du simple log in la
composition de documents trs sophistiqus, et hlas aussi parfois, l'envoi d'informations
qui ont t rcupres sur votre systme votre insu.
Un formulaire peut envoyer ses donnes de deux manires :
Par la mthode GET
Avec cette mthode, les donnes sont envoyes dans l'URI de la page qui sera appele lorsque
vous cliquerez sur envoyer .
Dans le formulaire ci-dessous :
Le champ de saisie de texte s'appelle saisie1 .
Le bouton s'appelle B1 .
mettez l dedans ce qu'il vous passe par la tte (40
caractres maximum) :

Puis, cliquez sur le bouton Demander

Par la mthode POST .
A premire vue, les donnes sont envoyes de faon invisible .
Dans le formulaire ci dessus :
Le champ de saisie de texte s'appelle saisie2 .
Le bouton s'appelle B2 .
remettez l dedans ce qu'il vous passe par la tte (40

caractres maximum) :
Puis, cliquez sur le bouton Poster

Le dlicat cas des cookies
Un cookie, c'est un petit fichier qu'un serveur HTTP peut crire (et lire) sur votre machine par
l'intermdiaire de votre navigateur. L'objectif initial n'est en rien malicieux et peut mme vous
rendre service. Nous l'avons dj vu, HTTP ne gre pas le concept de session. Une session,
c'est une priode pendant laquelle un certain contexte reste constant, mme si vous y faites
des choses diffrentes. Par exemple, vous entrez dans un lieu protg par une porte fermant
cl. Vous ouvrez cette porte au moyen de la cl. Une fois rentr dans ce lieu, vous pouvez y
faire tout ce qui est autoris et vous n'aurez plus besoin de la cl, jusqu' ce que vous soyez
sorti.
HTTP ne sait pas faire cela et ne conserve aucune mmoire du pass si ce n'est l'URI de la
page d'o vous venez. C'est un peu faible, surtout si l'on doit grer des identifications de
personnes, par exemple. Dans ces cas l, un cookie permettra de contourner le problme en
permettant au serveur de retrouver chaque page des informations crites dans ce cookie.
Un exemple trivial
Le formulaire suivant vous permet de saisir une information dans un formulaire et de
l'envoyer avec la mthode POST (a aurait t pareil avec la mthode GET, d'ailleurs).
La diffrence par rapport aux exemples prcdents, c'est que la page qui va tre appele
l'envoi des donnes de ce formulaire va crire un cookie contenant cette donne sur votre
machine (sauf si vous avez interdit votre navigateur d'accepter les cookies).
mettez dans cette case une information quelconque (40
caractres maximum) :

Puis, cliquez sur le bouton Envoyer

Explications
Comme vous en avez l'habitude, cette trace correspond un exemple excut sur mon
installation et non la manipulation que vous tes en train de faire
Ce n'est pas la mthode POST employe dans le formulaire qui va crire le cookie dans la
mmoire de votre navigateur, mais bien la page que ce formulaire invoque,
form_cookie1.php dans notre cas.
Commenons par un aperu sommaire
No. Time Source Destination Proto Info
La page des exemples est appele...
8 0.443083 192.168.0.10 192.168.0.251 HTTP GET /http/exemple1.php
HTTP/1.1
9 0.443425 192.168.0.251 192.168.0.10 TCP 80 > 2349 [ACK]
Elle rentre...
10 0.470220 192.168.0.251 192.168.0.10 HTTP HTTP/1.1 200 OK
11 0.471471 192.168.0.251 192.168.0.10 HTTP Continuation
12 0.471874 192.168.0.10 192.168.0.251 TCP 2349 > 80 [ACK]
13 0.473661 192.168.0.251 192.168.0.10 HTTP Continuation
14 0.474914 192.168.0.251 192.168.0.10 HTTP Continuation
15 0.474943 192.168.0.10 192.168.0.251 TCP 2349 > 80 [ACK]
16 0.476205 192.168.0.251 192.168.0.10 HTTP Continuation
17 0.476246 192.168.0.251 192.168.0.10 HTTP Continuation
18 0.476730 192.168.0.10 192.168.0.251 TCP 2349 > 80 [ACK]
Le formulaire avec la valeur du cookie est envoy...
19 8.621094 192.168.0.10 192.168.0.251 HTTP POST /http/post_cookie1.php
HTTP/1.1
La premire page de rponse est envoye par le serveur (c'est elle qui
crit le cookie).
20 8.642651 192.168.0.251 192.168.0.10 HTTP HTTP/1.1 200 OK
21 8.750822 192.168.0.10 192.168.0.251 TCP 2349 > 80 [ACK]
La page de vrification du cookie est demande par un GET "normal"...
22 11.101585 192.168.0.10 192.168.0.251 HTTP GET /http/post_cookie2.php
HTTP/1.1
Elle est envoye par le serveur.
23 11.122099 192.168.0.251 192.168.0.10 HTTP HTTP/1.1 200 OK
24 11.258788 192.168.0.10 192.168.0.251 TCP 2349 > 80 [ACK]
Plus en dtails...
La trame 8 ne prsente pas d'intrt particulier, elle reprsente l'appel de la page
d'exemples exemple1.php.
Les trames 10 17 reprsentent quant elles l'arrive de cette page. Elle est longue et
ncessite plusieurs trames.
La trame 19 commence nous intresser. Elle correspond l'envoi du formulaire
relatif aux cookies:
Frame 19 (439 on wire, 439 captured)
...
Hypertext Transfer Protocol
POST /http/post_cookie1.php HTTP/1.1\r\n
Accept: */*\r\n
Referer: http://gw2.maison.mrs/http/exemple1.php\r\n
Accept-Language: fr\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Accept-Encoding: gzip, deflate\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n
Host: gw2.maison.mrs\r\n
Content-Length: 25\r\n
Connection: Keep-Alive\r\n
Cache-Control: no-cache\r\n
\r\n

Data (25 bytes)
0000 73 61 69 73 69 65 33 3d 63 6f 6f 6b 69 65 26 42 saisie3=cookie&B
0010 33 3d 45 6e 76 6f 79 65 72 3=Envoyer
La trame 20 est intressante parce qu'elle met en vidence l'envoi du cookie du serveur
au client :
Frame 20 (1473 on wire, 1473 captured)
...
Hypertext Transfer Protocol
HTTP/1.1 200 OK\r\n
Date: Sun, 21 Apr 2002 13:11:11 GMT\r\n
Server: Apache-AdvancedExtranetServer/1.3.22
(Mandrake Linux/1.1mdk) PHP/4.0.6 mod_ssl/2.8.5
OpenSSL/0.9.6b\r\n
X-Powered-By: PHP/4.0.6\r\n
Set-Cookie: VotreCookie=cookie; expires=Sun, 21-Apr-02 13:13:11 GMT\r\n
Le cookie a un identificateur : VotreCookie et une valeur : cookie
Keep-Alive: timeout=15, max=99\r\n
Connection: Keep-Alive\r\n
Transfer-Encoding: chunked\r\n
Content-Type: text/html\r\n
\r\n

Data (1051 bytes)
Vient ensuite le document lui-mme...
0000 34 30 66 0d 0a 3c 68 74 6d 6c 3e 0d 0a 0d 0a 3c 40f..<html>....<
0010 68 65 61 64 3e 0d 0a 3c 6d 65 74 61 20 68 74 74 head>..<meta htt
...
La trame 22 montre comment votre navigateur renvoie docilement votre cookie au
serveur chaque requte qu'il effectuera sur ce serveur.
Rappelons que la page post_cookie1.php ne prsente aucun formulaire, aucun
champ de saisie ni rien qui puisse vous laisser penser que la prochaine requte va
transmettre des informations au serveur.
Frame 22 (481 on wire, 481 captured)
...
Hypertext Transfer Protocol
GET /http/post_cookie2.php HTTP/1.1\r\n
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/vnd.ms-excel,
application/msword, */*\r\n
Referer: http://gw2.maison.mrs/http/post_cookie1.php\r\n
Accept-Language: fr\r\n
Accept-Encoding: gzip, deflate\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n
Host: gw2.maison.mrs\r\n
Connection: Keep-Alive\r\n
Cookie: VotreCookie=cookie\r\n
Voil votre cookie qui est envoy votre insu.
\r\n
La trame 23 prsente un intrt tout de mme, parce qu'elle montre que le cookie
n'apparait pas directement.
Entendez par l que le serveur ayant reu ce cookie va en faire ce qu'il veut. Ici, il se
contente d'en afficher le contenu dans la page. C'est une page active, construite par
PHP. Rappelez-vous que votre navigateur, dans ce cas, reoit du HTML tout ce qu'il y
a de plus passif . Pas de script si l'auteur n'en a pas dcid autrement.
Tout navigateur capable d'afficher du HTML affichera correctement cette page, mme
s'il ne sait absolument pas traiter les scripts.
Frame 23 (1127 on wire, 1127 captured)
...
Hypertext Transfer Protocol
HTTP/1.1 200 OK\r\n
Date: Sun, 21 Apr 2002 13:11:14 GMT\r\n
Server: Apache-AdvancedExtranetServer/1.3.22 (Mandrake Linux/1.1mdk)
PHP/4.0.6 mod_ssl/2.8.5 OpenSSL/0.9.6b\r\n
X-Powered-By: PHP/4.0.6\r\n
Keep-Alive: timeout=15, max=98\r\n
Connection: Keep-Alive\r\n
Transfer-Encoding: chunked\r\n
Content-Type: text/html\r\n
\r\n

Data (774 bytes)
0000 32 66 61 0d 0a 3c 68 74 6d 6c 3e 0d 0a 0d 0a 3c 2fa..<html>....<
0010 68 65 61 64 3e 0d 0a 3c 6d 65 74 61 20 68 74 74 head>..<meta htt
0020 70 2d 65 71 75 69 76 3d 22 43 6f 6e 74 65 6e 74 p-equiv="Content
0030 2d 4c 61 6e 67 75 61 67 65 22 20 63 6f 6e 74 65 -Language" conte
0040 6e 74 3d 22 66 72 22 3e 0d 0a 3c 6d 65 74 61 20 nt="fr">..<meta
0050 68 74 74 70 2d 65 71 75 69 76 3d 22 43 6f 6e 74 http-equiv="Cont
0060 65 6e 74 2d 54 79 70 65 22 20 63 6f 6e 74 65 6e ent-Type" conten
0070 74 3d 22 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 t="text/html; ch
0080 61 72 73 65 74 3d 77 69 6e 64 6f 77 73 2d 31 32 arset=windows-12
0090 35 32 22 3e 0d 0a 3c 6d 65 74 61 20 6e 61 6d 65 52">..<meta name
00a0 3d 22 47 45 4e 45 52 41 54 4f 52 22 20 63 6f 6e ="GENERATOR" con
00b0 74 65 6e 74 3d 22 4d 69 63 72 6f 73 6f 66 74 20 tent="Microsoft
00c0 46 72 6f 6e 74 50 61 67 65 20 34 2e 30 22 3e 0d FrontPage 4.0">.
00d0 0a 3c 6d 65 74 61 20 6e 61 6d 65 3d 22 50 72 6f .<meta name="Pro
00e0 67 49 64 22 20 63 6f 6e 74 65 6e 74 3d 22 46 72 gId" content="Fr
00f0 6f 6e 74 50 61 67 65 2e 45 64 69 74 6f 72 2e 44 ontPage.Editor.D
0100 6f 63 75 6d 65 6e 74 22 3e 0d 0a 3c 74 69 74 6c ocument">..<titl
0110 65 3e 52 e9 73 75 6c 74 61 74 20 64 65 20 6c 61 e>R.sultat de la
0120 20 6d 61 6e 69 70 3c 2f 74 69 74 6c 65 3e 0d 0a manip</title>..
0130 3c 21 2d 2d 6d 73 74 68 65 6d 65 2d 2d 3e 3c 6c <!--mstheme--><l
0140 69 6e 6b 20 72 65 6c 3d 22 73 74 79 6c 65 73 68 ink rel="stylesh
0150 65 65 74 22 20 68 72 65 66 3d 22 66 69 6c 65 3a eet" href="file:
0160 2f 2f 2f 47 3a 2f 44 4f 43 55 4d 45 7e 31 2f 63 ///G:/DOCUME~1/c
0170 68 72 69 73 2f 4c 4f 43 41 4c 53 7e 31 2f 54 65 hris/LOCALS~1/Te
0180 6d 70 2f 46 72 6f 6e 74 50 61 67 65 54 65 6d 70 mp/FrontPageTemp
0190 44 69 72 2f 6d 73 74 68 65 6d 65 2f 74 61 62 73 Dir/mstheme/tabs
01a0 2f 74 61 62 73 31 31 31 31 2e 63 73 73 22 3e 0d /tabs1111.css">.
01b0 0a 3c 6d 65 74 61 20 6e 61 6d 65 3d 22 4d 69 63 .<meta name="Mic
01c0 72 6f 73 6f 66 74 20 54 68 65 6d 65 22 20 63 6f rosoft Theme" co
01d0 6e 74 65 6e 74 3d 22 74 61 62 73 20 31 31 31 31 ntent="tabs 1111
01e0 2c 20 64 65 66 61 75 6c 74 22 3e 0d 0a 3c 6d 65 , default">..<me
01f0 74 61 20 6e 61 6d 65 3d 22 4d 69 63 72 6f 73 6f ta name="Microso
0200 66 74 20 42 6f 72 64 65 72 22 20 63 6f 6e 74 65 ft Border" conte
0210 6e 74 3d 22 6e 6f 6e 65 22 3e 0d 0a 3c 2f 68 65 nt="none">..</he
0220 61 64 3e 0d 0a 0d 0a 3c 62 6f 64 79 3e 0d 0a 0d ad>....<body>...
0230 0a 3c 68 31 3e 52 e9 73 75 6c 74 61 74 20 64 65 .<h1>R.sultat de
0240 20 6c 61 20 6d 61 6e 69 70 3a 3c 2f 68 31 3e 0d la manip:</h1>.
0250 0a 3c 70 3e 0d 0a 56 6f 74 72 65 20 63 6f 6f 6b .<p>..Votre cook
0260 69 65 20 65 78 69 73 74 65 20 74 6f 75 6a 6f 75 ie existe toujou
0270 72 73 20 65 74 20 63 6f 6e 74 69 65 6e 74 20 6c rs et contient l
0280 61 20 76 61 6c 65 75 72 20 3a 20 3c 62 3e 3c 75 a valeur : <b><u
0290 3e 63 6f 6f 6b 69 65 3c 2f 75 3e 3c 2f 62 3e 0d >cookie</u></b>.
02a0 0a 3c 2f 70 3e 0d 0a 0d 0a 3c 68 32 3e 4d 61 69 .</p>....<h2>Mai
02b0 73 20 71 75 65 20 73 27 65 73 74 2d 69 6c 20 70 s que s'est-il p
02c0 61 73 73 e9 20 64 61 6e 73 20 74 6f 75 74 20 e7 ass. dans tout .
02d0 61 20 3f 3c 2f 68 32 3e 0d 0a 3c 70 3e 26 6e 62 a ?</h2>..<p>&nb
02e0 73 70 3b 3c 2f 70 3e 0d 0a 0d 0a 3c 2f 62 6f 64 sp;</p>....</bod
02f0 79 3e 0d 0a 0d 0a 3c 2f 68 74 6d 6c 3e 0d 0a 0d y>....</html>...
0300 0a 30 0d 0a 0d 0a .0....
Conclusions
Nous avons vu quelques exemples de ce que l'on peut faire avec :
Un client qui envoie des donnes volontairement ou non, un serveur.
Un serveur qui exploite ces donnes au moyen de scripts, ici en PHP.
Nous n'avons pas vu ce que pourrait faire un script CGI, mais ce serait du mme ordre. Toutes
ces dmonstrations sont donc axes sur du server side . Le client envoie les donnes et
reoit du HTML statique. C'est le serveur qui traite les donnes reues et agit en fonction.
Dans tout ce que nous avons vu ici, le dynamisme des pages venait exclusivement du
serveur, et le client se contente d'envoyer des requtes et des donnes pour voir le contenu des
pages se modifier. La page suivante va vous donner quelques exemples simples de Java
scripts qui s'excutent ct client, donc sur votre machine.
Scripts clients
Dans cette page, tout ce qu'il va se passer va se passer sur votre machine, il n'y aura aucun
change avec le serveur
Comme c'est du javascript, malgr mes efforts pour tester sur divers navigateurs, il se peut
que sur le votre, ces dmonstrations soient un flop
Les alertes
Il est possible de dclencher un pop-up d'alerte, ou de demande de confirmation, ou mme
encore de saisie d'un paramtre, par simple action sur une page. Voici un exemple d'alerte
dclenche par un bouton :
Ouvrir une fentre
Cet exemple ouvre une simple fentre au contenu statique. Il est possible d'ouvrir une fentre
quelconque, bien sr.
Voici l'exemple :
Faire des calculs
Ce dernier exemple ouvre une fentre contenant elle-mme un script assez complet, qui
permet de faire des calculs et d'en afficher le rsultat de faon compltement locale, dans
votre navigateur :
Conclusions
Bien entendu, il est possible de raliser beaucoup de choses avec des scripts et cette page
pourrait tre bien plus longue.
J'espre que tout ceci vous aura permis de voir plus clairement :
Comment une page HTML est envoye d'un serveur vers un client.
Comment le contenu de cette page peut tre construit :
o Avec un contenu fig (HTML crit une fois pour toutes, la manire d'un
livre).
o Avec un contenu construit la vole par le serveur (nous avons vu quelques
exemples avec PHP)
o Avec un contenu calcul localement par votre navigateur (quelques exemples
de JavaScripts).
Encore une fois, rien n'interdit de mlanger les deux mthodes et de construire sur le serveur
des pages dynamiques en PHP, par exemple, qui contiennent du javascript. Cette mthode
permet d'ailleurs, puisque le navigateur peut tre identifi ct serveur, d'envoyer un script qui
soit compatible avec le navigateur du client. La mthode est assez lourde, mais efficace.
Le proxy HTTP
Principe de base
Le principe de base consiste dire :
Lorsque je dsire obtenir un document, je ne vais pas le demander la source. Je vais le
demander mon serveur proxy. Celui-ci ira chercher le document ma place et me le
transmettra sa rception. Au passage, il le gardera en mmoire un certain temps , si bien
que si un autre client redemande dans cette priode le mme document, le proxy n'aura pas
besoin de retourner le chercher la source. Ceci ne fonctionne correctement que pour les
documents statiques, bien entendu. Pour les documents de type ASP, JSP ou PHP, la mise en
tampon est beaucoup plus problmatique.
Ce type de fonctionnement, o le client s'adresse systmatiquement au proxy pour obtenir une
page quelconque sur le web a fait traduire proxy server par serveur mandataire .
Notez que dans cette dmarche, le client est au courant de l'existence du proxy, il va donc
envoyer une requte adapte la situation, qui n'est pas tout fait la mme que dans le cas o
il s'adresserait directement la cible. Nous le verrons en dtail un peu plus loin.
Les avantages
Optimisation de la bande passante
Imaginons un cas simple :
nous sommes dans un lyce technique, les tudiants qui sont dans un laboratoire,
disposent chacun d'un poste informatique. Tous ces postes sont en rseau local, avec
un accs l'Internet partag par un routeur NAT ;
tous les tudiants doivent consulter un document, disons, chez Texas Instrument ;
il y a 14 postes, il y aura 14 requtes identiques vers le serveur de TI et 14 envois de
documents identiques vers les clients.
Nous remplaons le routeur NAT par un serveur Proxy. Dans ce cas :
la premire requte sera transmise par le proxy vers le serveur de TI ;
les 13 autres seront servies directement par le cache du proxy.
Un seul transfert de page depuis le serveur Texas Instruments vers le rseau local en remplace
14.
Surveillance et filtrage de l'accs au Net
Parmi nos 14 lves, il y en aura bien un qui aura l'ide, en passant, d'aller faire un petit tour
sur par exemple http://www.canalcharme.com ou pire. N'y voyez pas de puritanisme de ma
part, juste un souci d'efficacit dans le travail et une obligation lgale de protection des
mineurs
Avec un routeur NAT, le filtrage va tre difficile, parce que le seul moyen simple
serait de filtrer au niveau de l'IP du serveur.
Avec un proxy comme SQUID, qui travaille au niveau HTTP et qui voit donc passer
les URI, il existera une foule de solutions qui permettront un filtrage :
o par mot cl sur les URL ;
o par bannissement de domaines ou d'URI rfrencs dans une base de donnes.
Les inconvnients
Parce qu'il y en a tout de mme
La dure de vie du cache et les mauvais paramtrages entranent que les documents
reus peuvent ne plus tre jour.
A multiplier les proxy en chane, on amplifie ce problme et on court aussi le risque de
recevoir des documents falsifis. En effet, s'il est intressant de monter un proxy en
tte d'un rseau local, il faut savoir que les FAI peuvent en utiliser aussi, de faon plus
ou moins transparente (nous verrons a plus loin). Un serveur proxy, a peut tre
pirat et bricol
Le client doit tre au courant...
Il faut commencer par paramtrer son
navigateur Internet pour qu'il fasse appel un proxy. Nous comprendrons mieux pourquoi en
analysant le rseau.
Pour Firefox, c'est assez simple :
Menu Edition sous GNU/Linux ou Outils sous Windows, commande Prfrences
, Option Avanc , onglet Rseau : Utilisez le bouton Paramtres de la connexion.

Ne faites pas confiance aux systmes automatiss dans la mesure du possible et indiquez
plutt explicitement les paramtres du proxy :
Son adresse IP (ou son URL) ;
Le port sur lequel il travaille (3128 est le port par dfaut pour SQUID).
Vous pouvez ventuellement spcifier des proxy diffrents suivant les protocoles et dans
quelles conditions vous voulez viter le proxy.
Voil. Si le proxy est bien configur, a devrait fonctionner
Que se passe-t-il, en fait ?
Le plus souvent...
Un proxy est plac entre un rseau local priv et un accs Internet. La configuration est alors
la suivante :

Le proxy dispose de deux adresses :
l'une dans le rseau priv (192.168.0.253 dans l'exemple) ;
l'autre sur le rseau du FAI (80.8.128.5 dans l'exemple).
Le proxy isole compltement le rseau priv de l'internet. Il ne servira que de serveur
mandataire pour les requtes HTTP (ventuellement aussi FTP). Avec la floraison de services
webmail propose par les fournisseurs de services, cette configuration peut permettre l'accs
aux trois services les plus utiliss sur le Net :
le surf (HTTP) ;
le tlchargement de fichiers (FTP) ;
le courrier, pris en charge par l'interface webmail du FAI.
Si l'on se contente de ces trois services, il n'est alors pas ncessaire d'installer de routeur NAT,
le proxy suffit. Mais comprenons nous bien : Seuls les protocoles HTTP et FTP passeront,
sauf cas de proxy plus particuliers, ce qui n'est pas l'objet de cette prsentation.
Dans la dmonstration qui suit :

Le montage adopt n'est pas obligatoirement le plus utile. Il n'y a d'ailleurs pas de connexion
Internet mise en uvre ici. Ce montage est juste fait pour illustrer le travail du proxy, lorsqu'il
est utilis.
Notez bien que 192.168.0.251 (qui est en fait ma passerelle NAT vers le Net, bien que cette
fonction ne serve pas ici), est galement mon DNS, a va se voir dans l'exemple.
Premier cas : Sans le proxy
Le client va demander la page d'accueil du site hberg sur le serveur HTTP. Il va le faire
directement :
No. Source Destination Protocol Info
4 192.168.0.10 192.168.0.251 HTTP GET / HTTP/1.1
6 192.168.0.251 192.168.0.10 HTTP HTTP/1.1 200 OK
7 192.168.0.10 192.168.0.251 HTTP GET /tbm.htm HTTP/1.1
8 192.168.0.251 192.168.0.10 HTTP HTTP/1.1 200 OK
9 192.168.0.251 192.168.0.10 HTTP Continuation
11 192.168.0.251 192.168.0.10 HTTP Continuation
16 192.168.0.10 192.168.0.251 HTTP GET /home.htm HTTP/1.1
18 192.168.0.251 192.168.0.10 HTTP HTTP/1.1 200 OK
19 192.168.0.251 192.168.0.10 HTTP Continuation
23 192.168.0.10 192.168.0.251 HTTP GET /banniere.htm HTTP/1.1
24 192.168.0.251 192.168.0.10 HTTP HTTP/1.1 200 OK
25 192.168.0.251 192.168.0.10 HTTP Continuation
etc...
J'ai volontairement fait disparatre les trames SYN, ACK de TCP, qui ne nous apportent rien
dans la comprhension de l'change. Nous voyons clairement que l'change se fait entre le
client et le serveur HTTP.
Second cas : Avec le proxy
Nous paramtrons maintenant notre client pour qu'il utilise le proxy 192.168.0.253. Nous
vidons le cache du navigateur et refaisons notre requte. Le proxy est galement tout neuf
son cache est parfaitement vide.
No. Source Destination Protocol Info
4 192.168.0.10 192.168.0.253 HTTP GET http://gw2.maison.mrs/
HTTP/1.0
La requte a t faite au proxy et non pas la cible qui est
192.168.0.251...
Le proxy, cherche alors l'IP de la cible : (192.168.0.251 est aussi DNS
dans l'exemple).
Notez que le client envoie ici dans sa requte l'URI complet de la
cible convoite
6 192.168.0.253 192.168.0.251 DNS Standard query A
gw2.maison.mrs
7 192.168.0.251 192.168.0.253 DNS Standard query response A
192.168.0.251
Puis transmet la requte la cible...
11 192.168.0.253 192.168.0.251 HTTP GET / HTTP/1.0
La cible rpond au proxy :
13 192.168.0.251 192.168.0.253 HTTP HTTP/1.1 200 OK
qui retransmet au client:
15 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK
et ainsi de suite...
16 192.168.0.10 192.168.0.253 HTTP GET
http://gw2.maison.mrs/tbm.htm HTTP/1.0
18 192.168.0.253 192.168.0.251 HTTP GET /tbm.htm HTTP/1.0
20 192.168.0.251 192.168.0.253 HTTP HTTP/1.1 200 OK
22 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK
23 192.168.0.251 192.168.0.253 HTTP Continuation
25 192.168.0.253 192.168.0.10 HTTP Continuation
26 192.168.0.251 192.168.0.253 HTTP Continuation
28 192.168.0.251 192.168.0.253 HTTP Continuation
31 192.168.0.253 192.168.0.10 HTTP Continuation
35 192.168.0.10 192.168.0.253 HTTP GET
http://gw2.maison.mrs/banniere.htm HTTP/1.0
37 192.168.0.253 192.168.0.251 HTTP GET /banniere.htm HTTP/1.0
41 192.168.0.10 192.168.0.253 HTTP GET
http://gw2.maison.mrs/home.htm HTTP/1.0
46 192.168.0.253 192.168.0.251 HTTP GET /home.htm HTTP/1.0
48 192.168.0.251 192.168.0.253 HTTP HTTP/1.1 200 OK
49 192.168.0.251 192.168.0.253 HTTP Continuation
51 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK
52 192.168.0.253 192.168.0.10 HTTP Continuation
54 192.168.0.251 192.168.0.253 HTTP HTTP/1.1 200 OK
56 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK
57 192.168.0.251 192.168.0.253 HTTP Continuation
etc...
Bien. Pour l'instant, c'est plutt nettement plus compliqu et plus lourd qu'une requte directe.
Notez au passage que le proxy (Squid dans ce cas), cause HTTP 1.0 et non HTTP 1.1.
Nous pouvons suivre les vnements travers les logs du serveur SQUID :
192.168.0.10 TCP_MISS/200 1421 GET http://gw2.maison.mrs/ -
DIRECT/192.168.0.251 text/html
192.168.0.10 TCP_MISS/200 4365 GET http://gw2.maison.mrs/tbm.htm -
DIRECT/192.168.0.251 text/html
192.168.0.10 TCP_MISS/200 1513 GET http://gw2.maison.mrs/banniere.htm -
DIRECT/192.168.0.251 text/html
192.168.0.10 TCP_MISS/200 4228 GET http://gw2.maison.mrs/home.htm -
DIRECT/192.168.0.251 text/html
etc...
Le TCP_MISS indique que le proxy n'a pas la rponse en cache et qu'il va donc la chercher la
source (DIRECT)
Mais maintenant, le cache du proxy n'est pas vide, il contient dsormais ces documents. Nous
allons le vrifier immdiatement en :
vidant le cache local du navigateur ;
effectuant nouveau la mme requte.
No. Source Destination Protocol Info
4 192.168.0.10 192.168.0.253 HTTP GET http://gw2.maison.mrs/
HTTP/1.0
6 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK
7 192.168.0.10 192.168.0.253 HTTP GET
http://gw2.maison.mrs/tbm.htm HTTP/1.0
8 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK
9 192.168.0.253 192.168.0.10 HTTP Continuation
11 192.168.0.253 192.168.0.10 HTTP Continuation
16 192.168.0.10 192.168.0.253 HTTP GET
http://gw2.maison.mrs/banniere.htm HTTP/1.0
18 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK
19 192.168.0.253 192.168.0.10 HTTP Continuation
24 192.168.0.10 192.168.0.253 HTTP GET
http://gw2.maison.mrs/home.htm HTTP/1.0
26 192.168.0.253 192.168.0.10 HTTP HTTP/1.0 200 OK
27 192.168.0.253 192.168.0.10 HTTP Continuation
etc...
Et l, nous constatons que le dialogue s'effectue uniquement entre le client et le proxy.
Autrement dit, le proxy sert au client la totalit des requtes, il n'y a plus aucun change
entre le proxy et le serveur HTTP.
Vrifions les logs :
192.168.0.10 TCP_MEM_HIT/200 1430 GET http://gw2.maison.mrs/ - NONE/-
text/html
192.168.0.10 TCP_MEM_HIT/200 4374 GET http://gw2.maison.mrs/tbm.htm -
NONE/- text/html
192.168.0.10 TCP_MEM_HIT/200 1522 GET http://gw2.maison.mrs/banniere.htm -
**NONE/- text/html
192.168.0.10 TCP_MEM_HIT/200 4237 GET http://gw2.maison.mrs/home.htm -
NONE/- text/html
etc...
TCP_MEM_HIT veut dire que non seulement la rponse est en cache (HIT) mais qu'elle est en
mmoire (MEM). Il n'y a donc pas d'interrogation en amont (NONE).
Notez qu'il aurait pu se passer autre chose. Ici, la requte initiale et la seconde requte du
client taient spares par un intervalle de temps trs court. Si cet intervalle avait augment, le
document ne se serait peut-tre plus trouv dans le cache mmoire, mais dans le cache disque,
et il aurait pu se faire que le proxy aille s'assurer auprs du serveur source que son contenu
local tait encore valide. La stratgie est assez logique :
un document qui vient d'tre tlcharg par le proxy a toutes les chances d'tre
toujours valide. Il est donc possible de le resservir directement, sans prcautions
particulires ;
un document qui a t tlcharg il y a dj quelques temps, risque d'avoir t modifi.
Il convient donc de s'assurer d'abord auprs du serveur source que le document n'a pas
t modifi depuis ;
un document qui a t tlcharg il y a trop longtemps est dtruit du cache du proxy.
au prochain appel, il faudra le tlcharger nouveau.
Les notions de vient d'tre , il y a dj quelques temps et il y a trop longtemps sont
bien entendu subjectives et c'est l'administrateur du proxy de les valuer efficacement.
Il y a tout de mme quelques exceptions ces rgles :
les documents actifs , nous l'avons dj dit, tels que les pages PHP, ASP, JSP ou
qui viennent de scripts CGI ;
les documents passifs , mais qui contiennent un champ expire dans leur en-tte.
Ce champ, assez peu utilis, permet au concepteur d'une page de forcer l'attitude d'un
proxy son gard.
Finalement...
Lorsque la connexion entre le rseau local et le Net se fait par un lien factur la dure ou au
volume transmis, le gain financier peut tre apprciable.
Lorsque la connexion au Net se fait par un lien faible dbit, le gain en temps peut galement
tre trs apprciable.
Nous ne le verrons pas ici dans le dtail, mais les possibilits de contrle d'accs au Net sont
plus grandes et plus simples mettre en uvre avec un proxy qu'avec un routeur. De mme,
la scurit du rseau local est plus facilement assure, si le serveur proxy n'est vraiment qu'un
proxy. La solution du proxy n'est cependant pas la panace et il convient de bien analyser
toutes les solutions possibles un problme donn avant d'en choisir une.
Le proxy transparent
Dans ce que nous avons vu, la prsence du proxy est connue des utilisateurs du rseau, ils
doivent configurer leur navigateur pour pouvoir l'utiliser.
Il est possible de forcer les utilisateurs passer par le proxy en bloquant le port 80 sur la
passerelle par dfaut. L'exprience montre qu'il n'est pas toujours simple de l'expliquer aux
utilisateurs, surtout lorsqu'ils sont visiteurs occasionnels.
Techniquement, nous l'avons vu dans les analyses des trames, le client HTTP s'adresse
explicitement au proxy et place dans sa requte GET l'URI complet de la cible vise. C'est pour
forcer ce type de comportement qu'il faut paramtrer correctement le client HTTP.
L'autre mthode, c'est de laisser le client HTTP dans l'ignorance de l'existence du proxy. Il va
alors excuter un GET normal sur l'adresse IP de la cible vise. Pour forcer le passage par
le proxy, la passerelle devra alors rediriger cette requte sur le serveur proxy et ce dernier
devra savoir retrouver l'adresse de la cible, ailleurs que dans la commande GET, surtout si le
client parle HTTP 1.0. La configuration du proxy doit donc tenir compte de ce mode de
fonctionnement.
Squid sait fonctionner en mode transparent , il suffit de le lui demander poliment.
Avantages
Plus de configuration du client HTTP, donc plus rien de technique expliquer aux
utilisateurs.
L'utilisateur occasionnel (visiteur par exemple), n'aura pas bricoler son client HTTP en
entrant et en sortant de votre rseau. Mme si pour lui, cette opration est triviale, elle reste
tout de mme contraignante.
Inconvnients
La tentation est grande alors d'oublier de prvenir les utilisateurs qu'ils passent par un proxy et
que donc, outre les ventuels dcalages entre les pages servies et les pages jour, toute leur
activit se trouve enregistre dans les logs.
Un proxy transparent ne peut fonctionner que sur un seul port et uniquement pour HTTP :
les clients qui visent des serveurs sur le port 81 par exemple, passeront directement
(ou ne pourront pas passer du tout si votre firewall le leur interdit) ;
pas de proxy transparent pour FTP ;
pas de proxy HTTPS (encore que l'on peut s'interroger sur son utilit dans ce cas).
Conclusion
Le serveur proxy peut tre une trs bonne solution pour partager un accs internet au niveau
application, ce qui permet d'effectuer un filtrage au niveau du protocole lui-mme.
Indispensable lorsque l'on doit donner l'accs des mineurs, dans le cadre scolaire par
exemple.
Une mise en pratique est analyse dans le chapitre Squid et SquidGuard dans ce but.
SNMP
Comme son nom voudrait le faire croire, Simple Network Management Protocol est un
protocole simple destin grer des quipements informatiques, distance ou non.
Ce n'est probablement pas un protocole primordial pour un petit rseau local, nous verrons
tout de mme qu'il peut rendre quelques services.
Il permet principalement de :
visualiser une quantit pouvant tre impressionnante d'informations concernant le
matriel, les connexions rseaux, leur tat de charge ;
modifier le paramtrage de certains composants ;
alerter l'administrateur en cas d'vnements considrs comme graves ;
et d'autres choses encore
Le tout distance, via le rseau. Bref, grce ce protocole, un administrateur peut avoir la
maitrise de tout son rseau et de son parc informatique, sans quitter son bureau climatis (les
bureaux des administrateurs sont toujours climatiss, cause du matriel informatique qui ne
supporte pas bien la chaleur).
Miraculeux ? Pas vraiment. Simple ? Pas vraiment non plus.
SNMP est-il vraiment un protocole incontournable pour l'administrateur ? N'y a-t-il pas
d'alternatives ?
La rponse est toute personnelle, n'engage que moi et j'en assume toute la responsabilit :
L'administrateur doit pouvoir se passer de snmp dans la plupart des cas, d'autres outils
existent et qui rendent les services habituellement souhaits, souvent avec moins de risques de
scurit et plus de souplesse. Ces outils, comme l'excellent zabbix pour ne citer que lui,
proposent des agents installables sur la plupart des OS connus, qui sont souvent aussi
efficaces sinon plus, que les agents snmp. Nous verrons d'ailleurs que la configuration d'un
agent snmp sur GNU/Linux n'est pas si simple.
snmp trouve toutefois sa place dans de nombreux cas, commencer par certaines boites
noires qui proposent un agent snmp et ne permettent pas d'y installer d'autres agents, comme
les switchs, les points d'accs wi-fi et autres routeurs. Il est galement relativement facile,
pour peu que l'on ait assimil un tant soit peu ce protocole, de dvelopper un outil de
supervision s'appuyant sur les agents snmp, nous en verrons un tout petit exemple pour
illustrer le propos.
Au final, il n'est pas inutile de connaitre ce protocole si l'on a faire de la supervision.
Ce chapitre n'est pas destin aux administrateurs qui souhaitent maitriser ce protocole, mais
plutt aux curieux qui voudraient le dcouvrir et le mettre en uvre dans des situations
simples.
Le principe
Prsentation gnrale
Une machine informatique, quelle que soit sa fonction, a gnralement beaucoup de choses
dire. Elle le dit le plus souvent discrtement, si bien que peu de gens l'entendent.
La plupart de ses utilisateurs ne l'coute pas, sauf quand elle se met hurler ou faire la
gueule, ce qui est tout de mme assez rare. Elle hurle de diverses faons, une alarme sonore,
par exemple, lorsqu'elle est en surchauffe, un cran bleu pour Windows, lorsque le noyau se
plante irrmdiablement, elle fait la gueule, par exemple, lorsqu'elle refuse simplement de
dmarrer Le reste du temps, elle chuchote divers indicateurs d'tat, et certaines remarques,
qu'elle consigne gnralement dans les logs, sorte de journaux intimes, que, finalement, assez
peu de gens consultent.
Les administrateurs sont les seuls s'y intresser. Vous serez peut-tre surpris de voir quel
point votre machine vous parle. Dans Windows, vous avez au moins quatre journaux, que
vous pouvez rendre plus ou moins verbeux, mais c'est bien sr sous GNU/Linux que vous
dcouvrirez le mieux tout ce qu'une machine a dire. L'objectif tant ici de parler de SNMP,
nous n'entrerons pas plus dans ces dtails. Sachez, si ce n'est pas encore le cas, que sous
GNU/Linux, vous avez deux rpertoires fortement intressants :
/var/log qui contient tous les journaux tenus par votre machine,
/proc qui est en fait un espace RAM dans lequel vous retrouverez une infinit de
compteurs, d'indicateurs, de variables, drapeaux et autres choses encore.
Il y a enfin des informations dont le systme ne se soucie pas obligatoirement, mais qui
existent, remontes directement par le firmware
1)
, comme par exemple la temprature du
processeur, la vitesse de rotation des ventilateurs.
Dans tout ceci, il y a une foule d'informations qui intressent les administrateurs et dont ils
aimeraient disposer distance via le rseau. Il est clair que lorsque le parc contient plusieurs
centaines de machines, c'est tout de mme plus agrable de disposer de toutes les informations
en temps rel et de faon centralise.
De plus, l'administrateur peut apprcier de pouvoir rgler tel ou tel paramtre sans avoir se
dplacer sur le site de la machine concerne.
SNMP est exactement conu pour rpondre ces besoins.
Un agent sur chaque quipement
Chaque quipement que l'on voudra manager distance devra disposer d'un agent SNMP.
Cet agent est un serveur, c'est dire qu'il reste l'coute d'un port particulier : le port UDP
161.
La principale fonction de cet agent est de rester l'coute des ventuelles requtes que
l'administrateur lui enverra. Lorsqu'il recevra une requte, il y rpondra, s'il y est autoris.
Plus exactement, il rpondra si la requte est mise par une entit autorise. Autrement dit, cet
agent est l pour couter des requtes et y rpondre.
L'agent devra ventuellement pouvoir agir sur l'environnement local, si l'administrateur
souhaite modifier un paramtre.
Par ailleurs, l'agent SNMP pourra ventuellement mettre des alertes de sa propre initiative,
s'il a t configur pour cette besogne. Par exemple, il pourra mettre une alerte si le dbit sur
une interface rseau atteint une valeur considre par l'administrateur comme critique. Il peut
y avoir une multitude d'alertes possibles, suivant la complexit de l'agent. La temprature du
processeur, le taux d'occupation des disques durs, le taux d'occupation CPU
On pourra trouver des agents SNMP sur des htes (ordinateurs) mais aussi sur des routeurs,
des ponts, des switches
Un manager sur la station d'administration
L'administrateur, sur sa machine d'administration, dispose d'un outil dit manager . C'est
avant tout un client, dans la mesure o c'est lui qui envoie les requtes aux divers agents
SNMP du rseau. Il devra aussi disposer d'une fonction serveur, car il doit rester l'coute des
alertes que les divers quipements sont susceptibles d'mettre tout moment.
Un petit dessin Tous les quipements disposent d'un agent SNMP, la station
d'administration dispose du manager :

Dans un tel cas, l'administrateur peut, en thorie, observer le comportement de la totalit de
son rseau depuis sa station d'administration. C'est vrai pour un LAN, c'est aussi vrai pour un
WAN (entendez par l que l'quipement administrer peut se trouver gographiquement trs
loin).
Les boites noires (routeurs, switches) sont quipes ventuellement d'un agent SNMP
(c'est une question de prix).
Pour les serveurs et les stations il existe probablement un logiciel installer, quel que soit le
systme (srieux). Pour GNU/Linux : NET-SNMP (ou UCD-SNMP), Windows XP
professionnel et suivants (versions serveur fortiori) permettent d'installer un agent SNMP.
Le Manager dispose d'un serveur qui reste l'coute, sur le port UDP 162, des ventuels
signaux d'alarme (traps). Certains logiciels de supervision utilisant SNMP sont clbres dans
le monde du logiciel propritaire (commercial, privateur etc.), qui n'ont pas d'quivalent dans
le monde du logiciel libre.
En revanche, il reste parfaitement possible d'exploiter SNMP dans le bon vieux mode de la
ligne de commande, avec des outils plus eye candy comme MRTG, RRDTool, CACTI ou
mme Zabbix (qui peut faire d'autres choses aussi, avec un agent spcifique), ou avec des
scripts qui feront exactement ce que l'on dsire, si besoin est.
Pratiquement...
Juste pour donner un exemple, voyons ce que a donne, si, depuis une machine GNU/Linux,
nous interrogeons l'agent SNMP d'une station Windows XP (ou Vista, ou Seven).
Nous ralisons ceci avec un outil dont GNU/Linux a le secret, et que nous verrons plus loin.
Sa particularit est de produire une sortie strictement illisible pour le non initi. Il s'agit de
snmpwalk.
Le but n'est pas ici de tout comprendre mais juste de donner une ide des informations que
l'on peut obtenir. La sortie faisant 1577 lignes, nous n'en verrons que quelques-unes.
# Quelques infos sur la machine et son OS :
SNMPv2-MIB::sysDescr.0 = STRING: Hardware: x86 Family 15 Model 2 Stepping 4
AT/AT COMPATIBLE - Software: Windows 2000 Version 5.1
(Build 2600 Uniprocessor Free)
...
# Le type de carte rseau :
IF-MIB::ifDescr.2 = STRING: D-Link DFE-528TX PCI Adapter
- Miniport d'ordonnancement de paquets
...
#Quelques infos sur la configuration IP :
IP-MIB::ipAdEntAddr.127.0.0.1 = IpAddress: 127.0.0.1
IP-MIB::ipAdEntAddr.192.168.0.10 = IpAddress: 192.168.0.10
IP-MIB::ipAdEntIfIndex.127.0.0.1 = INTEGER: 1
IP-MIB::ipAdEntIfIndex.192.168.0.10 = INTEGER: 2
IP-MIB::ipAdEntNetMask.127.0.0.1 = IpAddress: 255.0.0.0
IP-MIB::ipAdEntNetMask.192.168.0.10 = IpAddress: 255.255.255.0
...
RFC1213-MIB::ipRouteNextHop.0.0.0.0 = IpAddress: 192.168.0.250
...
#Les ressources de mmoire de masse :
HOST-RESOURCES-MIB::hrStorageDescr.2 = STRING: C:\ Label: Serial Number
d803c0ad
HOST-RESOURCES-MIB::hrStorageDescr.3 = STRING: D:\
HOST-RESOURCES-MIB::hrStorageDescr.4 = STRING: E:\ Label:DATA Serial
Number 10822ea3
HOST-RESOURCES-MIB::hrStorageDescr.5 = STRING: F:\
HOST-RESOURCES-MIB::hrStorageDescr.6 = STRING: G:\ Label:ZIP-100 Serial
Number 1de00d03
...
# Les imprimantes installes :
HOST-RESOURCES-MIB::hrDeviceDescr.1 = STRING: HP DeskJet 600
HOST-RESOURCES-MIB::hrDeviceDescr.2 = STRING: HP DeskJet 550C
...
# Les services en cours d'excution :
HOST-RESOURCES-MIB::hrSWRunName.1516 = STRING: rundll32.exe"
HOST-RESOURCES-MIB::hrSWRunName.1520 = STRING: OLFSNT40.EXE"
HOST-RESOURCES-MIB::hrSWRunName.1820 = STRING: NAVAPW32.EXE"
HOST-RESOURCES-MIB::hrSWRunName.1836 = STRING: spampal.exe"
HOST-RESOURCES-MIB::hrSWRunName.2016 = STRING: rundll32.exe"
HOST-RESOURCES-MIB::hrSWRunName.2128 = STRING: msimn.exe"
...
# Les applications installes !!!
HOST-RESOURCES-MIB::hrSWInstalledName.9 = STRING: Ethereal 0.9.8"
HOST-RESOURCES-MIB::hrSWInstalledName.10 = STRING: Exodus Jabber Client
(remove only)"
HOST-RESOURCES-MIB::hrSWInstalledName.11 = STRING: FileZilla (remove
only)"
...
HOST-RESOURCES-MIB::hrSWInstalledName.79 = STRING: SpamPal: BadWords
plugin"
HOST-RESOURCES-MIB::hrSWInstalledName.80 = STRING: SpamPal"
...
# Ainsi que leur date d'installation...
HOST-RESOURCES-MIB::hrSWInstalledDate.9 = STRING: 2002-12-17,10:29:48.0
HOST-RESOURCES-MIB::hrSWInstalledDate.10 = STRING: 2002-12-15,15:53:18.0
HOST-RESOURCES-MIB::hrSWInstalledDate.11 = STRING: 2003-1-9,10:50:28.0
...
HOST-RESOURCES-MIB::hrSWInstalledDate.79 = STRING: 2003-7-2,17:48:24.0
HOST-RESOURCES-MIB::hrSWInstalledDate.80 = STRING: 2003-6-30,17:38:58.0
...
Encore une fois, ce ne sont que des morceaux choisis, il y en a 1577 lignes et toutes ne sont
pas si facilement comprhensibles. Nous verrons par la suite que snmpwalk peut tre utilis de
faon plus fine.
Comme vous pouvez vaguement le deviner, SNMP peut se rvler tre plutt du genre
indiscret. C'est un outil pour les administrateurs et les informations bonnes pour les
administrateurs doivent souvent rester confidentielles.
Organisation
Nous aurons largement l'occasion d'approfondir l'tude de la faon dont les donnes sont
organises et donc, la faon dont on peut retrouver plus ou moins simplement l'information
que l'on cherche ou que l'on dsire mettre jour via SNMP.
Contentons-nous pour l'instant d'admettre que l'ensemble des informations que peut fournir un
objet (serveur, switch, routeur, imprimante, point d'accs WI-FI) est class de manire
arborescente, par thme et sous-thme.
Juste histoire de nous mettre l'eau la bouche, voyons comment il est possible d'interroger un
agent SNMP pour lui demander le descriptif de l'hte qui l'hberge.
La question, c'est (nous n'expliquerons pas tout de suite la formule magique) :
$ snmpget -On -c public -v 2c 172.16.252.2 .1.3.6.1.2.1.1.1.0
La rponse est ici :
.1.3.6.1.2.1.1.1.0 = STRING: ProCurve J4899B Switch 2650, revision H.10.35,
ROM H.08.02 (/sw/code/build/fish(mkfs))
Pour seule explication, vous avez droit pour l'instant ceci : Nous avons interrog un switch
manageable qui dispose de l'adresse IP 172.16.252.2, pour obtenir sa description. Nous
savons maintenant qu'il s'agit d'un modle Hewlett Packard ProCurve de la srie 2650,
modle J4899B.
Nous aurions pu poser la question de manire lgrement diffrente :
$ snmpget -Ot -c public -v 2c 172.16.252.2 .1.3.6.1.2.1.1.1.0
nous aurions alors obtenu comme rponse :
SNMPv2-MIB::sysDescr.0 = STRING: ProCurve J4899B Switch 2650, revision
H.10.35, ROM H.08.02 (/sw/code/build/fish(mkfs))
Pas vraiment plus clair, mais qui fait apparaitre SNMPv2-MIB::sysDescr.0 en lieu et place de
.1.3.6.1.2.1.1.1.0.
Avec un peu d'effort, nous pouvons mme poser la question d'une troisime faon :
$ snmpget -Of -c public -v 2c 172.16.252.2 .1.3.6.1.2.1.1.1.0
ce qui nous vaudra comme rponse :
.iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0 = STRING: ProCurve
J4899B Switch 2650, revision H.10.35, ROM H.08.02
(/sw/code/build/fish(mkfs))
C'est dire que nous avons ici .iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0
plutt que .1.3.6.1.2.1.1.1.0. C'est plus long et a veut dire exactement la mme chose,
mais avec du texte.
Conclusion provisoire
Les trois machins :
.1.3.6.1.2.1.1.1.0 ;
SNMPv2-MIB::sysDescr.0 ;
.iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0 ;
veulent dire la mme chose et sont parfaitement quivalents. Nous verrons que la
reprsentation numrique est toujours utilisable, alors que les reprsentations en mode texte
ne le seront pas toujours, il nous faudra ventuellement une sorte de dictionnaire.
Pour ceux qui ont roul leur bosse dans divers domaines de l'informatique (programmation
oriente objet, DOM etc.), cette faon de faire leur rappellera des mthodes habituelles de
classement arborescent.
Il y a dans ces rponses un mot d'apparence anodine, mais d'importance fondamentale
pourtant : la MIB. Aucun rapport avec les protozoaires. Ici, MIB veut dire Management
Information Base . Disons que c'est le fameux dictionnaire.
Nous pouvons donc conclure que les informations que peuvent changer un agent SNMP et
son manager, sachant que nous sommes sur un rseau apte interconnecter des nuds
htrognes :
sont classes dans une structure arborescente ;
que la structure de cet arbre doit tre normalise ;
que la structure des informations elles-mmes doit galement tre normalise ;
que des dictionnaires doivent exister, pour diffrentes fonctions que nous verrons par
la suite.
Sur tout nud de rseau quip d'un agent SNMP, il sera possible de trouver les informations
ncessaires une bonne supervision.
1)
logiciel trs proche du matriel, log dans une mmoire non volatile : ROM, EPROM, etc.
dont le but est de grer basiquement ledit matriel, notamment son initialisation la mise sous
tension. Le driver sert interfacer le systme d'exploitation avec le firmware d'un
composant priphrique, comme une carte rseau, une carte son Dans le cas d'une carte
mre, le firmware peut tre assimil au BIOS, bien qu' mon sens, le firmware n'en soit
qu'un sous ensemble.
Le protocole
Les multiples versions
Commenons par le plus dsagrable. SNMP existe au moins dans les versions 1, 2c, 2 et 3.
Comme pour tout protocole, les rfrences sont des RFC. Si vous aimez ce genre de lecture :
Version anne RFCs Titre Statut
v1 1990
1155
Structure and Identification of Management
Information for TCP/IP-based Internets
standard
1156
Management Information Base for network
management of TCP/IP-based internets
historique
1157 Simple Network Management Protocol (SNMP) historique
v2c
(classic)
1993
1441
Introduction to version 2 of the Internet-
standard Network Management Framework
historique, propos
comme standard
1442
Structure of Management Information for
version 2 of the Simple Network Management
Protocol (SNMPv2)
standard propos,
remplac par RFC-
1902
1443
Textual Conventions for version 2 of the
Simple Network Management Protocol
(SNMPv2)
standard propos,
remplac par RFC-
1903
1444
Conformance Statements for version 2 of the
Simple Network Management Protocol
(SNMPv2)
standard propos,
remplac par RFC-
1904
1445
Administrative Model for version 2 of the
Simple Network Management Protocol
(SNMPv2)
historique
1446
Security Protocols for version 2 of the Simple
Network Management Protocol (SNMPv2)
historique
1447
Party MIB for version 2 of the Simple Network
Management Protocol (SNMPv2)
historique
1448
Protocol Operations for version 2 of the Simple
Network Management Protocol (SNMPv2)
standard propos,
remplac par RFC-
1905
1449
Transport Mappings for version 2 of the Simple
Network Management Protocol (SNMPv2)
standard propos,
remplac par RFC-
1906
1450 Management Information Base for version 2 of standard propos,
the Simple Network Management Protocol
(SNMPv2)
remplac par RFC-
1907
1451
Manager-to-Manager Management Information
Base
historique
1452
Coexistence between version 1 and version 2 of
the Internet-standard Network Management
Framework
standard propos,
remplac par RFC-
1908
v2 1996
1901 Introduction to Community-based SNMPv2
historique, propos
comme exprimental
1902
Structure of Management Information for
Version 2 of the Simple Network Management
Protocol (SNMPv2)
standard, remplac
par RFC-2578
1903
Textual Conventions for Version 2 of the
Simple Network Management Protocol
(SNMPv2)
standard, remplac
par RFC-2579
1904
Conformance Statements for Version 2 of the
Simple Network Management Protocol
(SNMPv2)
standard, remplac
par RFC-2580
1905
Protocol Operations for Version 2 of the Simple
Network Management Protocol
(SNMPv2) (3416)
standard, remplac
par RFC-3416
1906
Transport Mappings for Version 2 of the
Simple Network Management Protocol
(SNMPv2) (3417)
standard, remplac
par RFC-3417
1907
Management Information Base for Version 2 of
the Simple Network Management Protocol
(SNMPv2) (3418)
standard, remplac
par RFC-3418
1908
Coexistence between Version 1 and Version 2
of the Internet-standard Network Management
Framework (2576)
standard, remplac
par RFC-2576
v3 1999
2571
An Architecture for Describing SNMP
Management Frameworks
standard, remplac
par RFC-3411
2572
Message Processing and Dispatching for the
Simple Network Management Protocol (SNMP)
standard, remplac
par RFC-3412
2573 SNMP Applications
standard, remplac
par RFC-3413
2574
User-based Security Model (USM) for version
3 of the Simple Network Management Protocol
(SNMPv3)
standard, remplac
par RFC-3414
2575
View-based Access Control Model (VACM)
for the Simple Network Management Protocol
(SNMP)
standard, remplac
par RFC-3415
v2 et v3
2000 2576
Coexistence between Version 1, Version 2, and
Version 3 of the Internet-standard Network
Management Framework
standard propos
2002 3411 An Architecture for Describing Simple standard
Network Management Protocol (SNMP)
Management Frameworks
3412
Message Processing and Dispatching for the
Simple Network Management Protocol (SNMP)
standard
3413
Simple Network Management Protocol (SNMP)
Applications
standard
3414
User-based Security Model (USM) for version
3 of the Simple Network Management Protocol
(SNMPv3)
standard
3415
View-based Access Control Model (VACM)
for the Simple Network Management Protocol
(SNMP)
standard
3416
Version 2 of the Protocol Operations for the
Simple Network Management Protocol
(SNMP)
standard
3417
Transport Mappings for the Simple Network
Management Protocol (SNMP)
standard
3418
Management Information Base (MIB) for the
Simple Network Management Protocol
(SNMP)
standard
plus quelques standards proposs mais non encore entrins ce jour (juillet 2010)
D'une manire gnrale, reportez-vous au site rfc-editor pour retrouver les RFC, avec les
informations sur leur statut (exprimental, obsolte, actif)
Comme vous le voyez, il rgne la plus grande confusion dans la dfinition des versions 2 et 3
de SNMP.
La version 2, commence tre dfinie en 1996, ne se voit rellement finalise qu'en
dcembre 2002, aprs que la version 3 ait t dfinie. Ladite version 3, trop rcente, n'est pas
encore largement utilise, si bien que c'est la version 1 qui se retrouve tre supporte par tous,
avec ses (graves) dfauts, comme nous le verrons plus loin, ainsi que la v 2c assez
gnralement supporte. La version 3, la seule qui intgre quelques notions de scurit,
commence tout de mme tre supporte sur des quipements rcents (ceci est crit en juillet
2010).
Pour que SNMP fonctionne, il n'y a pas qu'un protocole d'change dfinir. Il y a aussi une
standardisation des informations que ce protocole peut transporter. C'est un protocole Internet,
il doit tre utilisable sur des plates-formes htrognes (matriel comme systme
d'exploitation).
C'est pour cette raison que l'on parlera de MIB (Management Information Base) et de SMI
(Structure of Management Information)
Dans ce qui suit, nous nous appuierons principalement sur SNMP v1 ou v2c.
Le protocole lui-mme
SNMP tire son S du fait qu'il s'appuie sur UDP d'une part, et qu'il ne propose qu'un
nombre trs restreint de commandes.
Les commandes sont les suivantes (version 1):
Commande Action
get-request Le Manager SNMP demande une information un agent SNMP
get-next-request Le Manager SNMP demande l'information suivante l'agent SNMP
set-request Le Manager SNMP met jour une information sur un agent SNMP
get-reponse L'agent SNMP rpond un get-request ou a un set-request
trap L'agent SNMP envoie une alarme au Manager
Jusque l, c'est on ne peut plus simple. L'agent utilise le port 161 et le manager, le port 162.
Graphiquement, a donne ceci :

Les commandes get-request, get-next-request et set-request sont toutes mises par le manager
destination d'un agent et attendent toutes une rponse get-response de la part de l'agent.
La commande trap est une alerte. Elle est toujours mise par l'agent destination du manager,
et n'attend pas de rponse.
Comme vous le voyez, jusque-l, c'est extrmement simple. Rassurez-vous, a va nettement
se compliquer avec la MIB et la SMI.
Installation des services SNMP
Sur des boites noires , l'agent SNMP est prsent ou non, il faut s'en proccuper au moment
de l'achat. Les swiches administrables, par exemple, en disposent gnralement. En revanche,
sur un systme de type GNU/Linux, l'agent SNMP doit tre install et correctement configur
si l'on en a besoin. Ceci est galement vrai sur les OS Microsoft o le service NMP doit
galement tre install, configur et activ.
Nous allons utiliser une Ubuntu 10.4 (lucid lynx) pour la dmonstration. Il existe deux
paquets fondamentaux :
snmp qui va installer les outils clients, nous nous en servirons tout au long de l'expos ;
snmpd qui va installer l'agent snmp. Nous l'installons surtout pour comprendre
comment fonctionne le principe des communauts avec les versions 1 et 2c de SNMP,
et constater que sa configuration n'est pas si simple, ce qui laisse le champ libre des
outils comme Zabbix, qui propose son propre agent, indpendant de SNMP.
aptitude install snmp snmpd
Le pack snmpd
$ aptitude show snmpd
Paquet : snmpd
tat: install
Automatiquement install: non
Version : 5.4.2.1~dfsg0ubuntu1-0ubuntu2.1
Priorit : optionnel
Section : net
Responsable : Ubuntu Core Developers <ubuntu-devel-
discuss@lists.ubuntu.com>
Taille dcompresse : 1 257k
Dpend: libc6 (>= 2.4), libsnmp15 (>= 5.4.2.1~dfsg), libwrap0 (>= 7.6-4~),
debconf (>= 0.5) | debconf-2.0, adduser, debconf, lsb-base (>= 3.2-13)
Est en conflit: snmp (< 3.6-3), snmptraplogd
Remplace: snmptraplogd
Description : SNMP (Simple Network Management Protocol) agents
The Simple Network Management Protocol (SNMP) provides a framework for the
exchange of management information between agents (servers) and clients.

The Net-SNMP agent is a daemon which listens for incoming SNMP requests
from clients and provides responses.
Site : http://net-snmp.sourceforge.net/
Contenu du pack
$ dpkg -L snmpd
/.
...
/usr/sbin
/usr/sbin/snmpd
/usr/sbin/snmptrapd
...
/etc
/etc/default
/etc/default/snmpd
/etc/snmp
/etc/snmp/snmpd.conf
/etc/snmp/snmptrapd.conf
/etc/init.d
/etc/init.d/snmpd
Peu d'excutables (les daemons snmpd et snmptrapd) et quelques fichiers de configuration
qui proposent par dfaut, l'habitude des distributions GNU/Linux, un usage trs restreint de
snmp.
Premire configuration
Le gros travail va tre de se plonger dans /etc/snmp/snmpd.conf. Il est encore un peu tt
pour tudier les arcanes de ce fichier, aussi nous contenterons-nous pour l'instant d'une
recette. Voici les modifications apporter :
####
# First, map the community name (COMMUNITY) into a security name
# (local and mynetwork, depending on where the request is coming
# from):

# sec.name source community
#com2sec paranoid default public
com2sec readonly default public
#com2sec readwrite default private

# Third, create a view for us to let the groups have rights to:

# incl/excl subtree mask
view all included .1
view system included .1.3.6.1.2.1.1
#view system included .iso.org.dod.internet.mgmt.mib-2.system
Il suffit de relancer le service snmpd :
/etc/init.d/snmpd restart
et notre serveur devrait tre en mesure de servir toutes les informations qu'il connat,
condition de les lui demander localement (127.0.0.1, question de scurit).
Vrification
Avons-nous un service udp l'coute sur le port 161 ?
# netstat -laupn
Connexions Internet actives (serveurs et tablies)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat
PID/Program name
udp 0 0 127.0.0.1:161 0.0.0.0:*
1717/snmpd
udp 0 0 0.0.0.0:68 0.0.0.0:*
620/dhclient
udp 0 0 0.0.0.0:49122 0.0.0.0:*
599/avahi-daemon: r
udp 0 0 0.0.0.0:5353 0.0.0.0:*
599/avahi-daemon: r
Il y a bien un processus l'coute d'UDP sur le port 161, uniquement sur l'interface locale.
Le fait que notre snmpd n'coute que sur l'interface locale, sur Debian et drives, vient du
fichier /etc/default/snmpd, mais ceci est encore une autre histoire, que nous raconterons
plus tard.
Le pack snmp
$ aptitude show snmp
Paquet : snmp
tat: install
Automatiquement install: non
Version : 5.4.2.1~dfsg0ubuntu1-0ubuntu2.1
Priorit : optionnel
Section : net
Responsable : Ubuntu Core Developers <ubuntu-devel-
discuss@lists.ubuntu.com>
Taille dcompresse : 1 475k
Dpend: libc6 (>= 2.4), libsnmp15 (>= 5.4.2.1~dfsg), libssl0.9.8 (>=
0.9.8k-1)
Recommande: perl-modules
Description : SNMP (Simple Network Management Protocol) applications
The Simple Network Management Protocol (SNMP) provides a framework for the
exchange of management information between
agents (servers) and clients.

The Net-SNMP applications are a collection of command line clients for
issuing SNMP requests to agents.
Site : http://net-snmp.sourceforge.net/
Contenu
Il n'y a rien de spcial configurer ici. Nous disposons principalement d'une quantit
impressionnante d'outils destins interroger un serveur snmp :
$ dpkg -L snmp
/.
...
/usr/bin
/usr/bin/snmpbulkget
/usr/bin/snmpbulkwalk
/usr/bin/snmpconf
/usr/bin/snmpdelta
/usr/bin/snmpdf
/usr/bin/snmpget
/usr/bin/snmpgetnext
/usr/bin/snmpnetstat
/usr/bin/snmpset
/usr/bin/snmpstatus
/usr/bin/snmptable
/usr/bin/snmptest
/usr/bin/snmptranslate
/usr/bin/snmptrap
/usr/bin/snmpusm
/usr/bin/snmpvacm
/usr/bin/snmpwalk
/usr/bin/encode_keychange
/usr/bin/fixproc
/usr/bin/traptoemail
/usr/share/man/man1/snmpinform.1.gz
/usr/bin/snmpinform
Beaucoup d'utilitaires, pas de fichiers de configuration et de la documentation (enleve dans
la liste pour plus de lisibilit). Avec ces outils, il est possible d'interroger tout agent SNMP
accessible par le rseau.
Vrification
Pas question d'entrer dj dans les dtails. Ici aussi une simple recette permettra d'esprer que
tout ceci fonctionne :
~$ snmpwalk -c public -v 1 localhost
devrait drouler une longue liste de choses pour le moment incomprhensibles. Notez qu'il
n'est nul besoin de privilges root pour extraire ces informations.
SNMPv2-MIB::sysDescr.0 = STRING: Linux lucid0 2.6.32-23-generic #37-Ubuntu
SMP Fri Jun 11 08:03:28 UTC 2010 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (9217) 0:01:32.17
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure
/etc/snmp/snmpd.local.conf)
SNMPv2-MIB::sysName.0 = STRING: lucid0
SNMPv2-MIB::sysLocation.0 = STRING: Unknown (configure
/etc/snmp/snmpd.local.conf)
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORID.1 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.5 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ip
SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.8 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORDescr.1 = STRING: The SNMP Management Architecture MIB.
SNMPv2-MIB::sysORDescr.2 = STRING: The MIB for Message Processing and
Dispatching.
SNMPv2-MIB::sysORDescr.3 = STRING: The management information definitions
for the SNMP User-based Security Model.
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing TCP
implementations
SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP
implementations
SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing UDP
implementations
SNMPv2-MIB::sysORDescr.8 = STRING: View-based Access Control Model for
SNMP.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (0) 0:00:00.00
IF-MIB::ifNumber.0 = INTEGER: 2
IF-MIB::ifIndex.1 = INTEGER: 1
IF-MIB::ifIndex.2 = INTEGER: 2
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6)
IF-MIB::ifMtu.1 = INTEGER: 16436
IF-MIB::ifMtu.2 = INTEGER: 1500
...
Notez galement l'impression d'impuissance que procure la lecture de cette liste
d'informations Esprons que par la suite, tout ceci nous paraitra un peu plus clair.
Tout ceci est surtout destin vrifier que l'on peut disposer d'outils d'interrogation d'un agent
SNMP. Il devient urgent de comprendre comment les informations que SNMP peut fournir
sont classes et comment l'on peut retrouver celles qui nous intressent. Juste histoire
d'effrayer le lecteur, sachez qu'un simple switch de type HP Procurve J4899B peut renvoyer
plus de 20 000 lignes d'informations, toutes aussi difficilement comprhensibles premire
vue.
Les MIBs

C'est quoi une MIB ?
Il s'agit donc la base d'informations de gestion. Il y a, nous commenons bien le comprendre
:
des informations consulter,
des paramtres modifier,
des alarmes mettre
Tout ceci, en principe, de faon indpendante du matriel et du logiciel. Il faut donc que
SNMP permette de retrouver ces informations et d'agir sur les paramtres de faon
indpendante du matriel, comme du logiciel.
Une MIB se prsente comme une base de donnes normalise, qui permettra de lire et d'crire
sur les quipements distants, de faon galement normalise. Ce sera l'agent lui-mme de
faire l'interface entre les informations rcuprables sur la plateforme o il est install et le
jargon utilis par SNMP.
Structure d'une MIB
Elle est extrmement simple pour un informaticien, et donc assez complique pour un cerveau
humain normal .
Elle est organise hirarchiquement, de la mme faon que l'arborescence des domaines
Internet.
Elle peut contenir des scalaires (valeurs uniques) ou des tableaux de scalaires.
Non seulement la structure est normalise, mais galement les appellations des diverses
rubriques. Ces appellations ne servent rien, si ce n'est rendre les choses plus lisibles (ce
qui peut ventuellement prter rire). En ralit, chaque niveau de la hirarchie est repr par
un index numrique et SNMP n'utilise que cette faon de faire. Une MIB est une branche, qui
vient se greffer sur l'arbre gnral. Nous en avons juste ct une vue trs simplifie, qu'il
nous sera possible de contempler avec plus de dtails par la suite avec l'outil snmptranslate.
Tout constructeur d'un matriel spcifique peut dvelopper une MIB pour ce matriel, cette
MIB devra prendre sa place dans l'arbre, sans pitiner celle des voisins, et c'est le rle de
l'IETF ou de l'IANA d'attribuer un point de branchement pour le matriel de ce constructeur.
Une MIB n'tant finalement qu'une branche, elle peut ncessiter l'usage de d'autres MIBS
pour se rattacher l'arbre. Prenons un exemple. HP peut dvelopper une MIB gnrique
tous ses matriels qui viendrait se greffer sur la branche private.enterprise, puis des
MIBs spcifiques chaque matriel qui viendraient elles-mmes se dvelopper dans la MIB
gnrique de HP.
Illustration
Sur l'arborescence en illustration, nous constatons que le sommet est reprsent par un point
originel, puisque chaque embranchement dispose d'un nom (iso, org, internet) et aussi d'un
numro (1, 3, 6, 1).
Intressons-nous au chemin qui mne sysDescr soit :
.iso.org.dod.internet.mgmt.mib-2.system.sysDescr en mode texte ;
.1.3.6.1.2.1.1.1 en mode numrique.
Reprenons notre switch et interrogeons-le de diverses manires, propos de ce chemin :
~$ snmpwalk -Of -c public -v 1 172.16.252.2 .1.3.6.1.2.1.1.1
snmpwalk signifie que l'on dsire parcourir un arbre snmp ;
-Of signifie que l'on dsire afficher l'arborescence full-text ;
-c public signifie que l'on se place dans la communaut public , ceci prendra tout
son sens un peu plus tard ;
-v 1 signifie que l'on utilise la version 1 du protocole snmp ;
vient ensuite l'adresse IP de l'agent que l'on dsire interroger ;
vient enfin, en mode numrique, le point d'embranchement partir duquel nous
dsirons parcourir l'arbre.
Nous obtenons la rponse :
.iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0 = STRING: ProCurve
J4899B Switch 2650, revision H.10.35, ROM H.08.02
(/sw/code/build/fish(mkfs))
Une chaine de caractres qui identifie le type de matriel (system descriptor). Le chemin qui
mne cette information est not en mode full-text , comme il a t demand.
L'outil snmpwalk s'avre d'une grande puissance, pour peu qu'on arrive le dompter un tant
soit peu. Rutilisons-le en remontant d'un niveau dans le point de dpart :
~$ snmpwalk -Of -c public -v 1 172.16.252.2 .1.3.6.1.2.1.1
(nous avons enlev le dernier .1 dans la dfinition du point de dpart) :
.iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0 = STRING: ProCurve
J4899B Switch 2650, revision H.10.35, ROM H.08.02
(/sw/code/build/fish(mkfs))
.iso.org.dod.internet.mgmt.mib-2.system.sysObjectID.0 = OID:
.iso.org.dod.internet.private.enterprises.11.2.3.7.11.44
.iso.org.dod.internet.mgmt.mib-2.system.sysUpTime.sysUpTimeInstance =
Timeticks: (1071094654) 123 days, 23:15:46.54
.iso.org.dod.internet.mgmt.mib-2.system.sysContact.0 = STRING: sysop
.iso.org.dod.internet.mgmt.mib-2.system.sysName.0 = STRING: ProCurve Switch
2650-1
.iso.org.dod.internet.mgmt.mib-2.system.sysLocation.0 = STRING:
.iso.org.dod.internet.mgmt.mib-2.system.sysServices.0 = INTEGER: 74
Notez que la rponse aligne tout ce que l'agent sait dire partir de
.iso.org.dod.internet.mgmt.mib-2.system.
Bien entendu, une interrogation de la forme :
snmpwalk -Of -c public -v 1 172.16.252.2 .iso.org.dod.internet.mgmt.mib-
2.system
fait parfaitement le travail. Mais nous aurions pu tout aussi bien poser la question de faon
beaucoup plus compacte :
~$ snmpwalk -Of -c public -v 1 172.16.252.2 system

.iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0 = STRING: ProCurve
J4899B Switch 2650, revision H.10.35, ROM H.08.02
(/sw/code/build/fish(mkfs))
.iso.org.dod.internet.mgmt.mib-2.system.sysObjectID.0 = OID:
.iso.org.dod.internet.private.enterprises.11.2.3.7.11.44
.iso.org.dod.internet.mgmt.mib-2.system.sysUpTime.sysUpTimeInstance =
Timeticks: (1071132769) 123 days, 23:22:07.69
.iso.org.dod.internet.mgmt.mib-2.system.sysContact.0 = STRING: sysop
.iso.org.dod.internet.mgmt.mib-2.system.sysName.0 = STRING: ProCurve Switch
2650-1
.iso.org.dod.internet.mgmt.mib-2.system.sysLocation.0 = STRING:
.iso.org.dod.internet.mgmt.mib-2.system.sysServices.0 = INTEGER: 74
Nous donnons ici le chemin non plus absolu, mais relatif au nud system (pas de point
initial), et le systme s'y retrouve. Ceci sous-entend que chaque nud doit disposer d'un nom
unique dans l'arbre tout entier.
D'autres formats de sortie sont possibles :
-On affiche le rsultat avec l'identifiant en mode numrique ;
-OS print MIB module-id plus last element :
~$ snmpwalk -OS -c public -v 1 172.16.252.2 sysName
SNMPv2-MIB::sysName.0 = STRING: ProCurve Switch 2650-1
Ce qui laisse imaginer que si l'on pose la question :
~$ snmpwalk -On -c public -v 1 172.16.252.2 SNMPv2-MIB::sysDescr
la rponse devrait tre favorable et de la forme :
.1.3.6.1.2.1.1.1.0 = STRING: ProCurve J4899B Switch 2650, revision H.10.35,
ROM H.08.02 (/sw/code/build/fish(mkfs))
ce qui est bien le cas.
La BRIDGE-MIB
Un switch est tout de mme un objet un peu particulier et ce que nous avons vu jusqu'ici va
atteindre ses limites.
Ainsi, au bout de la branche .1.3.6.1.2.1.17.1.2, nous devons normalement trouver le
nombre de ports dont dispose le switch (il faut tre un initi pour le savoir). Le bout de la
branche devant obligatoirement se terminer par un 0, nous l'avons remarqu lors des
dmonstrations prcdentes, posons la question avec cette fois-ci un snmpget, qui ne sait
extraire qu'une seule information, et qui doit donc tre obligatoirement pose en indiquant le
bout de la branche :
$ snmpget -Of -c public -v 2c 172.16.252.2 .1.3.6.1.2.1.17.1.2.0
.iso.org.dod.internet.mgmt.mib-2.17.1.2.0 = INTEGER: 50
Il y a bien 50 ports sur notre switch HP :
48 ports 10/100 Mb/s ;
2 ports 10/100/1000 Mb/s.
Mais cette rponse apporte, en prime, une bonne et une mauvaise nouvelle.
La bonne nouvelle, c'est que notre switch comprend bien la question, puisqu'il donne une
rponse.
La mauvaise, c'est que notre commande snmpget ne sait pas traduire la totalit du chemin en
mode full-text , comme il a t pourtant demand (option -Of). En effet, sa rponse est :

.iso.org.dod.internet.mgmt.mib-2.17.1.2.0 = INTEGER: 50
autrement dit, il manque des pages dans le dictionnaire, snmpget sait traduire dans la suite
.1.3.6.1.2.1.17.1.2.0 la seule partie .1.3.6.1.2.1 et pas la suite 17.1.2, c'est pourquoi
cette suite reste numrique dans la rponse. La bonne nouvelle dans la mauvaise nouvelle,
c'est qu'il reste possible d'interroger un agent SNMP sur une information, mme si l'on ne
dispose pas des pages manquantes relatives la dfinition de cette information, du moment
que l'on connait le chemin numrique pour y accder.
Nous allons tout de mme demander notre snmpget d'intgrer ces pages qui manquent (cette
MIB
1)
), que nous avons rcupre grce au paquet snmp-mibs-downloader que nous avons
install avec un aptitude install des familles et qui nous a mis tout a dans
/usr/share/mibs :
snmpget -m +/usr/share/mibs/ietf/BRIDGE-MIB -Of -c public -v 2c
172.16.252.2 .1.3.6.1.2.1.17.1.2.0
.iso.org.dod.internet.mgmt.mib-2.dot1dBridge.dot1dBase.dot1dBaseNumPorts.0
= INTEGER: 50 ports
Voici une rponse nettement plus comprhensible, la suite .1.3.6.1.2.1.17.1.2.0 est cette
fois-ci compltement interprte
Inversement, nous pouvons oprer ainsi :
snmpget -m /usr/share/mibs/ietf/BRIDGE-MIB -On -c public -v 2c 172.16.252.2
.iso.org.dod.internet.mgmt.mib-2.dot1dBridge.dot1dBase.dot1dBaseNumPorts.0
.1.3.6.1.2.1.17.1.2.0 = INTEGER: 50 ports
Nous avons pos la question en indiquant le chemin en mode texte en demandant la rponse
au format numrique. Mais aurions-nous pu faire cela sans l'aide de la BRIDGE-MIB ?
$ snmpget -On -c public -v 2c 172.16.252.2 .iso.org.dod.internet.mgmt.mib-
2.dot1dBridge.dot1dBase.dot1dBaseNumPorts.0
.iso.org.dod.internet.mgmt.mib-2.dot1dBridge.dot1dBase.dot1dBaseNumPorts.0:
Unknown Object Identifier (Sub-id not found: mib-2 -> dot1dBridge)
Bien sr que non, sans son aide, snmpget ne sait pas traduire le chemin exprim en langage
humain .
Dernire vrification pour la route, nous posons la mme question, cette fois-ci un switch de
marque D-LINK :
$ snmpget -Of -c public -v 2c 172.16.252.4 .1.3.6.1.2.1.1.1.0
.iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0 = STRING: DGS-3024
Gigabit Ethernet Switch
il s'agit d'un switch DGS-3024, modle notoirement propos par D-LINK.
$ snmpget -m +/usr/share/mibs/ietf/BRIDGE-MIB -On -c public -v 2c
172.16.252.4 .iso.org.dod.internet.mgmt.mib-
2.dot1dBridge.dot1dBase.dot1dBaseNumPorts.0
.1.3.6.1.2.1.17.1.2.0 = INTEGER: 24 ports
En effet, ce modle propose 24 ports 10/100/1000 Mb/s.
Ce petit exemple tait destin dmontrer que deux switchs de marque bien diffrente savent
rpondre la mme question, si l'information demande est dfinie dans la BRIDGE-MIB.
Bien sr chaque constructeur va pouvoir apporter ses quipements des particularits
supplmentaires et spcifiques sa marque et son modle. Elles sont dans ce cas places
aprs le nud enterprises. Nous pourrons toujours obtenir ces donnes, mais sans les MIBs
associes, il sera difficile, voir impossible de dterminer ce que ces donnes reprsentent.
Encore une fois, pourquoi se passer d'un peu d'humour ?
~$ snmpwalk -Of -c public -v 1 172.16.252.2 enterprises
va nous donner :
.iso.org.dod.internet.private.enterprises.9.9.23.1.1.1.1.2.1 = INTEGER: 1
.iso.org.dod.internet.private.enterprises.9.9.23.1.1.1.1.2.2 = INTEGER: 1
...
.iso.org.dod.internet.private.enterprises.9.9.23.1.1.1.1.2.50 = INTEGER: 1
.iso.org.dod.internet.private.enterprises.9.9.23.1.2.1.1.3.50.1 = INTEGER:
1
.iso.org.dod.internet.private.enterprises.9.9.23.1.2.1.1.4.50.1 = Hex-
STRING: AC 10 FC 03
.iso.org.dod.internet.private.enterprises.9.9.23.1.2.1.1.5.50.1 = STRING:
"ProCurve J4899B Switch 2650, revision H.10.35, ROM H.08.02
(/sw/code/build/fish(mkfs))"
.iso.org.dod.internet.private.enterprises.9.9.23.1.2.1.1.6.50.1 = Hex-
STRING: 00 17 08 E4 C5 00
.iso.org.dod.internet.private.enterprises.9.9.23.1.2.1.1.7.50.1 = STRING:
"49"
.iso.org.dod.internet.private.enterprises.9.9.23.1.2.1.1.8.50.1 = STRING:
"ProCurve J4899B Switch 2650, revision H.10.35, ROM H.08.02
(/sw/code/build/fish(mkfs))"
.iso.org.dod.internet.private.enterprises.9.9.23.1.2.1.1.9.50.1 = STRING:
"8"
.iso.org.dod.internet.private.enterprises.9.9.23.1.3.1.0 = INTEGER: 1
.iso.org.dod.internet.private.enterprises.9.9.23.1.3.2.0 = INTEGER: 0
.iso.org.dod.internet.private.enterprises.9.9.23.1.3.3.0 = INTEGER: 0
...
Il y en a pour 7346 lignes sur notre Procurve. Le D-Link DGS-3024 quant lui n'en sortira
que 2205
Sans les MIBs qui vont avec, il sera quasiment impossible de savoir quoi correspondent ces
informations, car les MIBs, en plus de traduire les chemins numriques en texte, peuvent
donner des indications supplmentaires sur la nature de l'information extraite.
Mais encore...
Les MIBs ne se contentent pas de fournir une traduction entre les modes numriques et
textuels. Elles fournissent aussi quelques explications sur les paramtres qu'elles prennent en
charge. La commande snmptranslate permet, une fois domestique, d'obtenir quelque
documentation supplmentaire :
~$ snmptranslate -Tp SNMPv2-MIB::system

+--system(1)
|
+-- -R-- String sysDescr(1)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- ObjID sysObjectID(2)
+-- -R-- TimeTicks sysUpTime(3)
| |
| +--sysUpTimeInstance(0)
|
+-- -RW- String sysContact(4)
| Textual Convention: DisplayString
| Size: 0..255
+-- -RW- String sysName(5)
| Textual Convention: DisplayString
| Size: 0..255
+-- -RW- String sysLocation(6)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- INTEGER sysServices(7)
| Range: 0..127
+-- -R-- TimeTicks sysORLastChange(8)
| Textual Convention: TimeStamp
|
+--sysORTable(9)
|
+--sysOREntry(1)
| Index: sysORIndex
|
+-- ---- INTEGER sysORIndex(1)
| Range: 1..2147483647
+-- -R-- ObjID sysORID(2)
+-- -R-- String sysORDescr(3)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- TimeTicks sysORUpTime(4)
Textual Convention: TimeStamp
Nous obtenons, en art ASCII, une vue arborescente de la branche system.
Un peu de traduction pure et simple :
~$ snmptranslate -On SNMPv2-MIB::sysDescr
.1.3.6.1.2.1.1.1

~$ snmptranslate -Ot .1.3.6.1.2.1.1.1
SNMPv2-MIB::sysDescr

~$ snmptranslate -Of .1.3.6.1.2.1.1.1
.iso.org.dod.internet.mgmt.mib-2.system.sysDescr
Et ventuellement quelques explications :
~$ snmptranslate -Ot -Td .1.3.6.1.2.1.1.1
SNMPv2-MIB::sysDescr
sysDescr OBJECT-TYPE
-- FROM SNMPv2-MIB, RFC1213-MIB
-- TEXTUAL CONVENTION DisplayString
SYNTAX OCTET STRING (0..255)
DISPLAY-HINT "255a"
MAX-ACCESS read-only
STATUS current
DESCRIPTION "A textual description of the entity. This value should
include the full name and version identification of
the system's hardware type, software operating-system,
and networking software."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) 1 }
Normalement, chaque bout de branche dispose d'une description. Ne vous attendez jamais
voir apparaitre autre chose que de l'anglais, bien entendu.
~$ snmptranslate -Ot -Td SNMPv2-MIB::sysORIndex
SNMPv2-MIB::sysORIndex
sysORIndex OBJECT-TYPE
-- FROM SNMPv2-MIB
SYNTAX INTEGER (1..2147483647)
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "The auxiliary variable used for identifying instances
of the columnar objects in the sysORTable."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1)
sysORTable(9) sysOREntry(1) 1 }
Notez galement que ceci peut parfois tourner au jeu de piste.
Interro surprise 1
Est-ce que ceci aurait des chances de fonctionner ?
~$ snmptranslate -Ot -Td .1.3.6.1.2.1.17.1.2.0
Et ceci :
~$ snmptranslate -Ot -Td -m /usr/share/mibs/ietf/BRIDGE-MIB
.1.3.6.1.2.1.17.1.2.0
Vous trouverez les rponses la fin de l'expos.
Et en mode graphique ?
Il existe un outil, TKmib qui, comme son nom
l'indique, utilise TK et n'est donc pas des plus esthtiques. Ce genre d'outil, nomm browser
de MIBs permet de faire de faon graphique, ce que l'on a vu avec nsmpwalk, snmpget et
snmptranslate.
Ce n'est pas trs joli, mais a fait le travail.
1)
appele BRIDGE-MIB et dfinie dans la rfc 1493
En savoir un peu plus
Nous avons rapidement vu les outils permettant de soutirer des informations aux agents
SNMP, cette occasion nous avons parl de communauts, mais nous n'avons pas vu ce que
c'est. Voyons ceci en configurant (un minimum) un agent SNMP sur une distribution
GNU/Linux.
Les versions de SNMP
Il semble bien qu'au final, seules les versions 1, 2c (classique) et 3 soient utilises.
La version 3 apporte des fonctions de scurit (chiffrement et authentification) qui permettent
d'utiliser SNMP dans un environnement hostile , mais n'est pas implment sur tous les
matriels. Cette version n'apportant rien de plus pour la comprhension du fonctionnement de
SNMP, nous n'en parlerons pas d'avantage.
La version 1 est gnralement implmente sur tous les quipements proposant SNMP, de
mme que la version 2c, qui ne fait qu'ajouter des compteurs sur 64 bits et une commande
supplmentaire : GetBulk-Request. Cette nouvelle commande donne le mme rsultat que la
commande Get-next-request, mais de faon plus efficace. Nous verrons cela plus loin dans
les analyses de trames.
Ces deux versions offrent une scurit tout fait indigente. Il n'y a ni chiffrement des
donnes, ni authentification (aussi bien de l'agent que du manager). Dans un environnement
hostile il restera possible de pallier cet inconvnient par l'usage de tunnels chiffrs, de vlans
etc. Voyons tout de mme ce que proposent les versions 1 et 2 en termes de restrictions
d'accs.
Les communauts et leurs privilges
Nous illustrerons le propos en configurant l'agent snmpd propos dans les distributions
GNU/Linux.
Une communaut reprsente un groupe d'utilisateurs. Nous nous sommes jusqu'ici dclars de
la communaut public (option -c public dans les diverses commandes).
Par dfaut, la plupart des quipements proposent les communauts public et private. Il est
toutefois possible de les renommer ou d'en crer d'autres.
La communaut public n'a gnralement accs qu'en lecture, et pas forcment toute
l'tendue des informations exposes.
La communaut private est gnralement exploite pour crire (donc reconfigurer) un
quipement et disposer de la totalit des informations que l'agent sait exposer. Il est donc
ncessaire d'en rserver l'accs aux seuls administrateurs autoriss, mais ceci ne peut se faire
que sur la base des adresses IP des managers, ce qui reste trs rudimentaire.
Il est clair que dans un environnement hostile, il reste assez simple d'utiliser SNMP (v 1 et 2)
des fins tout fait malveillantes.
Nous allons faire quelques manipulations sur notre Lynx Lucide pour illustrer les restrictions
que l'on peut appliquer avec les communauts.
Nous avons fait, lors de l'installation de snmpd une modification de la configuration par
dfaut. Revoici une configuration minimale, quivalente, ne prenant en compte que les
versions 1 et 2c de SNMP :
com2sec readonly default public
com2sec readwrite default private

group MyROGroup v1 readonly
group MyROGroup v2c readonly
group MyRWGroup v1 readwrite
group MyRWGroup v2c readwrite

view all included .1

access MyROGroup "" any noauth exact all none none
access MyRWGroup "" any noauth exact all all none
La logique squentielle de ce fichier n'est pas forcment la meilleure pour en comprendre le
principe. Commenons donc par les view.
Les view
Ici nous n'avons qu'une view qui inclut la totalit de l'arbre (.1) et qui s'apple all. Nous
aurions pu tout aussi bien crire
view bidule included .1
ou
view machin included .1
le mot-cl est view le nom de la vue sera all (ou bidule ou machin) et ce qui est inclus dans
cette vue c'est .1 c'est--dire la totalit de ce que l'agent peut proposer.
Les group
Nous crons des noms de groupes auxquels nous associons un nom de scurit , en
fonction de la version du protocole utilis. Ceci n'a de rel sens qu'avec la version 3, mais en
v1 et en v2c, il faut en passer par l quand mme.
Nous avons crit :
group MyROGroup v1 readonly
group MyROGroup v2c readonly
group MyRWGroup v1 readwrite
group MyRWGroup v2c readwrite
Nous aurions aussi bien pu faire :
group voyeurs v1 regarderMaisPasToucher
group voyeurs v2c regarderMaisPasToucher
group violeurs v1 regardeEtPlus
group violeurs v2c regardeEtPlus
pas forcment du meilleur gout, mais tout aussi correct syntaxiquement parlant.
Ces groupes et noms de scurit nous serviront plus loin.
Les access
Ils sont de la forme :
access GROUP CONTEXT {any|v1|v2c|usm} LEVEL PREFX READ WRITE NOTIFY
On va faire simple :
le CONTEXT n'a de sens que pour la version 3 ;
le LEVEL est forcment noauth pour les versions 1 et 2c ;
le PREFIX n'a pas de sens pour v1 et v2c, nous mettrons exact ;
le NOTIFY is not currently used .
reste donc :
le GROUP est un nom que l'on a cr de toutes pices, juste au dessus ;
le READ sera le nom de la vue dans laquelle le groupe aura le droit de lire ou none s'il
ne peut rien lire (ce qui n'aurait aucun sens, pourquoi crer un groupe qui aurait le
droit de ne rien lire) ;
le WRITE sera le nom de la vue dans laquelle le groupe pourra crire (ou none s'il ne
peut crire).
Ainsi, dans notre fichier :
access MyROGroup "" any noauth exact all none none
access MyRWGroup "" any noauth exact all all none
Veut dire qu'il existe deux groupes, MyROGroup et MyRWGroup :
MyROGroup peut lire dans la vue all mais ne peut y crire et ce, en utilisant aussi bien
les protocoles v1 que v2c ;
MyRWGroup peut aussi bien lire qu'crire dans la vue all aussi vien en v1 qu'en v2c.
Le com2sec
C'est ici que l'on recolle tous les morceaux, en ajoutant en prime les communauts. De la
forme :
com2sec [-Cn CONTEXT] SECNAME SOURCE COMMUNITY
CONTEXT n'a toujours pas de sens en v1 ni en v2c) ;
SECNAME, a vient d'un peu plus haut dans l'explication ;
SOURCE, c'est l'adresse IP source (ou le sous-rseau IP, ou default si c'est wide open
) ;
COMMUNITY, c'est le nom de la communaut dans laquelle l'agent s'est dclar.
Nous avons :
com2sec readonly default public
com2sec readwrite default private
Autrement dit, le groupe de scurit readonly (qui aurait pu s'appeler
regarderMaisPasToucher) est attach la communaut public. Comme ce groupe de
scurit est attach au groupe MyROGroup (qui aurait pu s'appeler voyeurs) pour les
protocoles v1 et v2c et que ce groupe MyROGroup peut aussi bien en v1 qu'en v2c lire et
seulement lire partout, il s'ensuit que tout manager qui se connectera sur notre hte en se
dclarant de la communaut public pourra lire ce qu'il veut.
L'ennui, c'est que si le manager se dclare de la communaut private, qui est attache au
groupe de scurit readwrite (qui aurait pu s'appeler ?) depuis n'importe o (default) et
que ce groupe de scurit est attribu au groupe MyRWGroup (qui aurait pu s'appeler ?),
lequel peut lire dans all mais aussi y crire, alors ce manager pourra modifier tout ce qui est
modifiable sur notre hte, preuve que notre configuration est compltement nulle. En fait, elle
est l pour l'exemple, nous en ferons une moins sale par la suite.
Particularit Debian
(Et drives)
Le fichier /etc/default/snmpd contient des options ajoutes lors du lancement du service
snmpd. Ces options, par dfaut, limitent le service couter sur 127.0.0.1 :
# This file controls the activity of snmpd and snmptrapd

# MIB directories. /usr/share/snmp/mibs is the default, but
# including it here avoids some strange problems.
export MIBDIRS=/usr/share/snmp/mibs

# snmpd control (yes means start daemon).
SNMPDRUN=yes

# snmpd options (use syslog, close stdin/out/err).
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p
/var/run/snmpd.pid 127.0.0.1'

# snmptrapd control (yes means start daemon). As of net-snmp version
# 5.0, master agentx support must be enabled in snmpd before snmptrapd
# can be run. See snmpd.conf(5) for how to do this.
TRAPDRUN=no

# snmptrapd options (use syslog).
TRAPDOPTS='-Lsd -p /var/run/snmptrapd.pid'

# create symlink on Debian legacy location to official RFC path
SNMPDCOMPAT=yes
Un simple man snmpd nous fera facilement (une fois n'est pas coutume) qu'il suffit d'enlever
l'adresse locale dans la ligne d'options pour que snmpd coute sur toutes les interfaces. Notez
que si nous avons deux interfaces, dont par exemple une attache un vlan (un vlan pourquoi
pas rserv l'administration des quipements), nous pouvons forcer snmpd n'couter que
sur cette interface, ce qui permettrait de scuriser quelque peu le dispositif.
Aprs modification de cette ligne et redmarrage du service, nous pouvons constater que :
# netstat -lupn
Connexions Internet actives (seulement serveurs)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat
PID/Program name
udp 0 0 0.0.0.0:68 0.0.0.0:*
639/dhclient
udp 0 0 0.0.0.0:47712 0.0.0.0:*
618/avahi-daemon: r
udp 0 0 0.0.0.0:5353 0.0.0.0:*
618/avahi-daemon: r
udp 0 0 0.0.0.0:161 0.0.0.0:*
1507/snmpd
C'est compris ?
Bien sr ! Et ceci va nous permettre de crer une configuration un peu plus complte de la
faon suivante :
une communaut public, qui aura droit l'accs en lecture seule, mais seulement la
branche system pour tous ceux qui peuvent joindre notre agent, quelle que soit leur
adresse IP ;
une communaut private aura droit la lecture seule de toutes les informations
possibles, mais seulement partir d'un rseau IP particulier ;
une communaut admin pourra lire et crire partout o c'est possible, mais depuis une
adresse IP bien particulire.
Voici la configuration propose :
com2sec voirUnPeu default public
com2sec voirTout 192.168.0.0/24 private
com2sec voirEtToucher 192.168.0.16 admin

group touristes v1 voirUnPeu
group touristes v2c voirUnPeu
group riverains v1 voirTout
group riverains v2c voirTout
group proprio v1 voirEtToucher
group proprio v2c voirEtToucher

view system included .1.3.6.1.2.1.1.1
view all included .1

access touristes "" any noauth exact system none none
access riverains "" any noauth exact all none none
access proprio "" any noauth exact all all none
Interro surprise 2
1. Quelqu'un se dclarant de la communaut public pourra-t-il
1. se connecter depuis n'importe quelle adresse IP ?
2. obtenir les informations de la branche .iso.org.dod.internet.mgmt.mib-
2.interfaces ? (on pourra s'aider de snmptranslate pour obtenir la version
numrique de cette branche)
2. Quelqu'un se dclarant de la communaut private pourra-t-il
1. obtenir les informations de la branche .iso.org.dod.internet.mgmt.mib-
2.interfaces s'il dispose de l'adresse 192.168.1.25 ?
2. obtenir les informations de la branche .iso.org.dod.internet.mgmt.mib-
2.interfaces s'il dispose de l'adresse 192.168.0.25 ?
3. Quelqu'un se dclarant de la communaut admin depuis l'adresse IP 192.168.0.17
1. pourra-t-il obtenir les informations de la branche .1.3.6.1.2.1.2 ?
2. pourra-t-il modifier une valeur accessible en criture (SNMPv2-
MIB::sysLocation par exemple) ?
Rponses toujours en dernire page.
Analyse du protocole
Nous allons regarder avec Wireshark, notre sniffeur favori, ce qu'il se passe en utilisant trois
commandes classiques : snmpget, snmpwalk et snmpbulkwalk (utilisable seulement avec la
version v2c ou suprieure de SNMP).
snmpget
Demandons, une fois encore notre switch de nous dire son nom :
~$ snmpget -v 1 -c public -Ot 172.16.252.2 SNMPv2-MIB::sysName.0
SNMPv2-MIB::sysName.0 = STRING: ProCurve Switch 2650-1
Voyons ce que notre sniffeur a pi :
No. Time Source Destination Protocol
Info
1 0.000000 192.168.0.16 172.16.252.2 SNMP
get-request 1.3.6.1.2.1.1.5.0

Frame 1 (85 bytes on wire, 85 bytes captured)
...
User Datagram Protocol, Src Port: 42380 (42380), Dst Port: snmp (161)
Source port: 42380 (42380)
Destination port: snmp (161)
Length: 51
Checksum: 0x6910 [validation disabled]
[Good Checksum: False]
[Bad Checksum: False]
Simple Network Management Protocol
version: version-1 (0)
community: public
data: get-request (0)
get-request
request-id: 925410341
error-status: noError (0)
error-index: 0
variable-bindings: 1 item
1.3.6.1.2.1.1.5.0: Value (Null)
Object Name: 1.3.6.1.2.1.1.5.0 (iso.3.6.1.2.1.1.5.0)
Nous sommes bien en UDP et le port cible est bien 161.
SNMP est bien utilis en version 1, la commande est get-request et l'OID demande est
1.3.6.1.2.1.1.5.0.
La rponse :
No. Time Source Destination Protocol
Info
2 0.072588 172.16.252.2 192.168.0.16 SNMP
get-response 1.3.6.1.2.1.1.5.0

Frame 2 (107 bytes on wire, 107 bytes captured)
...
User Datagram Protocol, Src Port: snmp (161), Dst Port: 42380 (42380)
Source port: snmp (161)
Destination port: 42380 (42380)
Length: 73
Checksum: 0x180f [validation disabled]
[Good Checksum: False]
[Bad Checksum: False]
Simple Network Management Protocol
version: version-1 (0)
community: public
data: get-response (2)
get-response
request-id: 925410341
error-status: noError (0)
error-index: 0
variable-bindings: 1 item
1.3.6.1.2.1.1.5.0:
50726F43757276652053776974636820323635302D31
Object Name: 1.3.6.1.2.1.1.5.0 (iso.3.6.1.2.1.1.5.0)
Value (OctetString):
50726F43757276652053776974636820323635302D31
Nous avons la rponse (get-response), elle n'est pas trs lisible car donne sous forme
numrique (la version 1.2.7 de wireshark semblant avoir du mal avec le dcodage de SNMP).
Nous ne referons pas la manipulation en v2c, le rsultat tant le mme.
snmpwalk
Voyons maintenant la branche system en entier, avec la commande snmpwalk :
$ snmpwalk -v 1 -c public -Ot 172.16.252.2 SNMPv2-MIB::system
SNMPv2-MIB::sysDescr.0 = STRING: ProCurve J4899B Switch 2650, revision
H.10.35, ROM H.08.02 (/sw/code/build/fish(mkfs))
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.11.2.3.7.11.44
DISMAN-EVENT-MIB::sysUpTimeInstance = 1123840470
SNMPv2-MIB::sysContact.0 = STRING: sysop
SNMPv2-MIB::sysName.0 = STRING: ProCurve Switch 2650-1
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER: 74
Wireshark a vu une suite de commandes :
No. Time Source Destination Protocol
Info
1 0.000000 192.168.0.16 172.16.252.2 SNMP
get-next-request 1.3.6.1.2.1.1
2 0.101794 172.16.252.2 192.168.0.16 SNMP
get-response 1.3.6.1.2.1.1.1.0
3 0.101915 192.168.0.16 172.16.252.2 SNMP
get-next-request 1.3.6.1.2.1.1.1.0
4 0.172930 172.16.252.2 192.168.0.16 SNMP
get-response 1.3.6.1.2.1.1.2.0
5 0.173003 192.168.0.16 172.16.252.2 SNMP
get-next-request 1.3.6.1.2.1.1.2.0
6 0.244100 172.16.252.2 192.168.0.16 SNMP
get-response 1.3.6.1.2.1.1.3.0
7 0.244174 192.168.0.16 172.16.252.2 SNMP
get-next-request 1.3.6.1.2.1.1.3.0
8 0.315341 172.16.252.2 192.168.0.16 SNMP
get-response 1.3.6.1.2.1.1.4.0
9 0.315412 192.168.0.16 172.16.252.2 SNMP
get-next-request 1.3.6.1.2.1.1.4.0
10 0.389045 172.16.252.2 192.168.0.16 SNMP
get-response 1.3.6.1.2.1.1.5.0
11 0.389109 192.168.0.16 172.16.252.2 SNMP
get-next-request 1.3.6.1.2.1.1.5.0
12 0.460725 172.16.252.2 192.168.0.16 SNMP
get-response 1.3.6.1.2.1.1.6.0
13 0.460787 192.168.0.16 172.16.252.2 SNMP
get-next-request 1.3.6.1.2.1.1.6.0
14 0.532128 172.16.252.2 192.168.0.16 SNMP
get-response 1.3.6.1.2.1.1.7.0
15 0.532189 192.168.0.16 172.16.252.2 SNMP
get-next-request 1.3.6.1.2.1.1.7.0
16 0.624758 172.16.252.2 192.168.0.16 SNMP
get-response 1.3.6.1.2.1.2.1.0
Pas la peine de dtailler, nous voyons bien une suite de get-next-request mises par le
client, suivies des get-response de l'agent SNMP du switch. Nous avons ici 8 trames
d'interrogation et 8 trames de rponses. Si l'on dsire parcourir une branche importante, le
rseau va avoir du travail.
snmpbulkwalk
Innovation de la version 2c, observons la diffrence :
$ snmpbulkwalk -v 1 -c public -Ot 172.16.252.2 SNMPv2-MIB::system
snmpbulkwalk: Cannot send V2 PDU on V1 session
Juste pour vrifier que cette commande ne peut fonctionner si l'on utilise SNMP v1.
$ snmpbulkwalk -v 2c -c public -Ot 172.16.252.2 SNMPv2-MIB::system
SNMPv2-MIB::sysDescr.0 = STRING: ProCurve J4899B Switch 2650, revision
H.10.35, ROM H.08.02 (/sw/code/build/fish(mkfs))
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.11.2.3.7.11.44
DISMAN-EVENT-MIB::sysUpTimeInstance = 1123894614
SNMPv2-MIB::sysContact.0 = STRING: sysop
SNMPv2-MIB::sysName.0 = STRING: ProCurve Switch 2650-1
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER: 74
A premire vue, nous obtenons exactement le mme rsultat qu'avec snmpwalk. Cependant,
voici ce qu'a vu Wireshark en vue condense :
No. Time Source Destination Protocol
Info
1 0.000000 192.168.0.16 172.16.252.2 SNMP
getBulkRequest 1.3.6.1.2.1.1
2 0.077623 172.16.252.2 192.168.0.16 SNMP
get-response 1.3.6.1.2.1.1.1.0 1.3.6.1.2.1.1.2.0 1.3.6.1.2.1.1.3.0
1.3.6.1.2.1.1.4.0 1.3.6.1.2.1.1.5.0 1.3.6.1.2.1.1.6.0 1.3.6.1.2.1.1.7.0
1.3.6.1.2.1.2.1.0 1.3.6.1.2.1.2.2.1.1.1 1.3.6.1.2.1.2.2.1.1.2
Deux trames seulement. Voyons maintenant le dtail :
Frame 1 (83 bytes on wire, 83 bytes captured)
...
Simple Network Management Protocol
version: v2c (1)
community: public
data: getBulkRequest (5)
getBulkRequest
request-id: 112026182
non-repeaters: 0
max-repetitions: 10
variable-bindings: 1 item
1.3.6.1.2.1.1: Value (Null)
Object Name: 1.3.6.1.2.1.1 (iso.3.6.1.2.1.1)
Value (Null)
La requte est ici getBulkRequest et elle est unique. Tout le dtail de la branche se trouve
dans une seule rponse :
Frame 2 (353 bytes on wire, 353 bytes captured)
...
Simple Network Management Protocol
version: v2c (1)
community: public
data: get-response (2)
get-response
request-id: 112026182
error-status: noError (0)
error-index: 0
variable-bindings: 10 items
1.3.6.1.2.1.1.1.0:
50726F4375727665204A3438393942205377697463682032...
Object Name: 1.3.6.1.2.1.1.1.0 (iso.3.6.1.2.1.1.1.0)
Value (OctetString):
50726F4375727665204A3438393942205377697463682032...
1.3.6.1.2.1.1.2.0: 1.3.6.1.4.1.11.2.3.7.11.44
(iso.3.6.1.4.1.11.2.3.7.11.44)
Object Name: 1.3.6.1.2.1.1.2.0 (iso.3.6.1.2.1.1.2.0)
Value (OID): 1.3.6.1.4.1.11.2.3.7.11.44
(iso.3.6.1.4.1.11.2.3.7.11.44)
1.3.6.1.2.1.1.3.0: 1123894614
Object Name: 1.3.6.1.2.1.1.3.0 (iso.3.6.1.2.1.1.3.0)
Value (Timeticks): 1123894614
1.3.6.1.2.1.1.4.0: 7379736F70
Object Name: 1.3.6.1.2.1.1.4.0 (iso.3.6.1.2.1.1.4.0)
Value (OctetString): 7379736F70
1.3.6.1.2.1.1.5.0:
50726F43757276652053776974636820323635302D31
Object Name: 1.3.6.1.2.1.1.5.0 (iso.3.6.1.2.1.1.5.0)
Value (OctetString):
50726F43757276652053776974636820323635302D31
1.3.6.1.2.1.1.6.0:
Object Name: 1.3.6.1.2.1.1.6.0 (iso.3.6.1.2.1.1.6.0)
Value (OctetString):
1.3.6.1.2.1.1.7.0: 74
Object Name: 1.3.6.1.2.1.1.7.0 (iso.3.6.1.2.1.1.7.0)
Value (Integer32): 74
1.3.6.1.2.1.2.1.0: 55
Object Name: 1.3.6.1.2.1.2.1.0 (iso.3.6.1.2.1.2.1.0)
Value (Integer32): 55
1.3.6.1.2.1.2.2.1.1.1: 1
Object Name: 1.3.6.1.2.1.2.2.1.1.1
(iso.3.6.1.2.1.2.2.1.1.1)
Value (Integer32): 1
Object Name: 1.3.6.1.2.1.2.2.1.1.2
(iso.3.6.1.2.1.2.2.1.1.2)
Value (Integer32): 2
Deux trames qui font le mme boulot que les 16 prcdentes avec snmpwalk, le rseau va
apprcier. De quoi convaincre d'utiliser plutt v2c, quand c'est possible.
Exercice pratique
Le problme
Soit un switch (toujours le mme), configur comme indiqu ici, c'est--dire que nous
disposons d'un serveur RADIUS, avec une base de donnes qui recense toutes les adresses
MAC de nos stations.
Nous avons enrichi cette base en ajoutant le nom des stations. Par ailleurs, nous avons une
table qui relie le numro de chaque port du switch au numro de la prise dans l'tablissement.
Nous voulons utiliser SNMP pour savoir quels sont les clients actuellement en service et sur
quelle prise (i.e. sur quel port de switch) ils sont branchs.
SNMP va peut-tre nous permettre de savoir quelles adresses MAC sont prsentes sur chaque
port du switch (habituellement une seule), si notre BRIDGE-MIB dfinit cette information et
indique o la trouver. C'est dans ces cas qu'un browser de MIB montre son utilit. Mme
tkmib sera plus agrable manipuler que snmptranslate.
Notons un outil en ligne digne d'intrt, le SimpleWeb dans la rubrique MIBs en ce qui
nous concerne dans le cas de figure. Nous trouvons la BRIDGE-MIB, dveloppons son
arborescence, et voyons que :
BRIDGE-MIB::dot1dTpFdbAddress
dot1dTpFdbAddress OBJECT-TYPE
-- FROM BRIDGE-MIB
-- TEXTUAL CONVENTION MacAddress
SYNTAX OCTET STRING (6)
DISPLAY-HINT "1x:"
MAX-ACCESS read-only
STATUS current
DESCRIPTION "A unicast MAC address for which the bridge has
forwarding and/or filtering information."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) dot1dBridge(17)
dot1dTp(4) dot1dTpFdbTable(3) dot1dTpFdbEntry(1) 1 }
et que
BRIDGE-MIB::dot1dTpFdbPort
dot1dTpFdbPort OBJECT-TYPE
-- FROM BRIDGE-MIB
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Either the value '0', or the port number of the port on
which a frame having a source address equal to the value
of the corresponding instance of dot1dTpFdbAddress has
been seen. A value of '0' indicates that the port
number has not been learned, but that the bridge does
have some forwarding/filtering information about this
address (e.g., in the dot1dStaticTable). Implementors
are encouraged to assign the port value to this object
whenever it is learned, even for addresses for which the
corresponding value of dot1dTpFdbStatus is not
learned(3)."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) dot1dBridge(17)
dot1dTp(4) dot1dTpFdbTable(3) dot1dTpFdbEntry(1) 2 }
Ces deux OIDs sont susceptibles de nous intresser.
Comme par ce beau jour d't (nous sommes le 13 juillet 2010), il n'y a pas grand monde dans
l'tablissement, nous allons raliser la manipulation sur le switch de tte, celui qui connecte
tous les serveurs et les autres switches, le seul qui voit du monde cette date.
Que dit SNMP ?
dot1dTpFdbAddress
~$ snmpbulkwalk -Ob -m +/var/lib/mibs/ietf/BRIDGE-MIB -c public -v 2c
172.16.252.4 BRIDGE-MIB::dot1dTpFdbAddress
L'option -Ob, comme dit le man : Display table indexes numerically, rather than trying to
interpret the instance subidentifiers as string or OID values.
BRIDGE-MIB::dot1dTpFdbAddress.0.5.93.8.128.1 = STRING: 0:5:5d:8:80:1
BRIDGE-MIB::dot1dTpFdbAddress.0.19.212.88.167.204 = STRING:
0:13:d4:58:a7:cc
BRIDGE-MIB::dot1dTpFdbAddress.0.23.8.228.70.128 = STRING: 0:17:8:e4:46:80
BRIDGE-MIB::dot1dTpFdbAddress.0.23.8.228.70.206 = STRING: 0:17:8:e4:46:ce
BRIDGE-MIB::dot1dTpFdbAddress.0.23.8.228.197.0 = STRING: 0:17:8:e4:c5:0
BRIDGE-MIB::dot1dTpFdbAddress.0.23.8.228.197.79 = STRING: 0:17:8:e4:c5:4f
BRIDGE-MIB::dot1dTpFdbAddress.0.33.145.133.119.77 = STRING:
0:21:91:85:77:4d
BRIDGE-MIB::dot1dTpFdbAddress.0.35.84.55.145.46 = STRING: 0:23:54:37:91:2e
BRIDGE-MIB::dot1dTpFdbAddress.0.48.132.58.84.111 = STRING: 0:30:84:3a:54:6f
BRIDGE-MIB::dot1dTpFdbAddress.0.48.132.58.85.170 = STRING: 0:30:84:3a:55:aa
BRIDGE-MIB::dot1dTpFdbAddress.0.48.132.58.97.178 = STRING: 0:30:84:3a:61:b2
BRIDGE-MIB::dot1dTpFdbAddress.0.48.132.58.99.185 = STRING: 0:30:84:3a:63:b9
BRIDGE-MIB::dot1dTpFdbAddress.0.48.132.58.99.199 = STRING: 0:30:84:3a:63:c7
BRIDGE-MIB::dot1dTpFdbAddress.0.48.132.58.100.151 = STRING:
0:30:84:3a:64:97
BRIDGE-MIB::dot1dTpFdbAddress.144.230.186.157.115.173 = STRING:
90:e6:ba:9d:73:ad
Nous pouvons aussi le faire de faon totalement numrique :
~$ snmpbulkwalk -On -m +/var/lib/mibs/ietf/BRIDGE-MIB -c public -v 2c
172.16.252.4 BRIDGE-MIB::dot1dTpFdbAddress
.1.3.6.1.2.1.17.4.3.1.1.0.5.93.8.128.1 = STRING: 0:5:5d:8:80:1
.1.3.6.1.2.1.17.4.3.1.1.0.19.212.88.167.204 = STRING: 0:13:d4:58:a7:cc
.1.3.6.1.2.1.17.4.3.1.1.0.23.8.228.70.128 = STRING: 0:17:8:e4:46:80
.1.3.6.1.2.1.17.4.3.1.1.0.23.8.228.70.206 = STRING: 0:17:8:e4:46:ce
.1.3.6.1.2.1.17.4.3.1.1.0.23.8.228.197.0 = STRING: 0:17:8:e4:c5:0
.1.3.6.1.2.1.17.4.3.1.1.0.23.8.228.197.79 = STRING: 0:17:8:e4:c5:4f
.1.3.6.1.2.1.17.4.3.1.1.0.33.145.133.119.77 = STRING: 0:21:91:85:77:4d
.1.3.6.1.2.1.17.4.3.1.1.0.35.84.55.145.46 = STRING: 0:23:54:37:91:2e
.1.3.6.1.2.1.17.4.3.1.1.0.48.132.58.84.111 = STRING: 0:30:84:3a:54:6f
.1.3.6.1.2.1.17.4.3.1.1.0.48.132.58.85.170 = STRING: 0:30:84:3a:55:aa
.1.3.6.1.2.1.17.4.3.1.1.0.48.132.58.97.178 = STRING: 0:30:84:3a:61:b2
.1.3.6.1.2.1.17.4.3.1.1.0.48.132.58.99.185 = STRING: 0:30:84:3a:63:b9
.1.3.6.1.2.1.17.4.3.1.1.0.48.132.58.99.199 = STRING: 0:30:84:3a:63:c7
.1.3.6.1.2.1.17.4.3.1.1.0.48.132.58.100.151 = STRING: 0:30:84:3a:64:97
.1.3.6.1.2.1.17.4.3.1.1.144.230.186.157.115.173 = STRING: 90:e6:ba:9d:73:ad
Dans un cas comme dans l'autre, nous avons une table (.1.3.6.1.2.1.17.4.3.1.1.) qui
contient toutes les adresses MAC que notre switch a vu passer. Ceci ne rpond pas notre
question, mais nous apprend tout de mme quelque chose, si l'on y regarde de plus prs : les
cls (surlignes eh jaune), ne sont rien d'autre que l'expression en base 10 de l'adresse MAC
correspondante. Cette remarque va nous servir dans la suite immdiate.
dot1dTpFdbPort
Intressons nous la table suivante dont le descriptif dit clairement :
Either the value '0', or the port number of the port on which a frame having a source address
equal to the value of the corresponding instance of dot1dTpFdbAddress has been seen.
~$ snmpbulkwalk -On -m +/var/lib/mibs/ietf/BRIDGE-MIB -c public -v 2c
172.16.252.4 BRIDGE-MIB::dot1dTpFdbPort
.1.3.6.1.2.1.17.4.3.1.2.0.5.93.8.128.1 = INTEGER: 11
.1.3.6.1.2.1.17.4.3.1.2.0.19.212.88.167.204 = INTEGER: 5
.1.3.6.1.2.1.17.4.3.1.2.0.23.8.228.70.128 = INTEGER: 23
.1.3.6.1.2.1.17.4.3.1.2.0.23.8.228.70.206 = INTEGER: 23
.1.3.6.1.2.1.17.4.3.1.2.0.23.8.228.197.0 = INTEGER: 24
.1.3.6.1.2.1.17.4.3.1.2.0.23.8.228.197.79 = INTEGER: 24
.1.3.6.1.2.1.17.4.3.1.2.0.33.145.133.119.77 = INTEGER: 0
.1.3.6.1.2.1.17.4.3.1.2.0.35.84.55.145.46 = INTEGER: 6
.1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.84.111 = INTEGER: 8
.1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.85.170 = INTEGER: 9
.1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.97.178 = INTEGER: 10
.1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.99.185 = INTEGER: 4
.1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.99.199 = INTEGER: 3
.1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.100.151 = INTEGER: 7
.1.3.6.1.2.1.17.4.3.1.2.144.230.186.157.115.173 = INTEGER: 13
Cette table contient des numros de ports, les cls correspondantes n'tant rien d'autre que
l'expression dcimale de l'adresse MAC vue sur ce port. D'ailleurs :
~$ snmpbulkwalk -OX -m +/var/lib/mibs/ietf/BRIDGE-MIB -c public -v 2c
172.16.252.4 BRIDGE-MIB::dot1dTpFdbPort
L'option -OX comme le dit tout fait clairement le man :
Display table indexes in a more program like output, imitating a traditional array-style
index format.
Ceci permet d'afficher le rsultat de faon bien lisible :
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:5:5d:8:80:1] = INTEGER: 11
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:13:d4:58:a7:cc] = INTEGER: 5
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:17:8:e4:46:80] = INTEGER: 23
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:17:8:e4:46:ce] = INTEGER: 23
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:17:8:e4:c5:0] = INTEGER: 24
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:17:8:e4:c5:4f] = INTEGER: 24
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:21:91:85:77:4d] = INTEGER: 0
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:23:54:37:91:2e] = INTEGER: 6
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:30:84:3a:54:6f] = INTEGER: 8
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:30:84:3a:55:aa] = INTEGER: 9
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:30:84:3a:61:b2] = INTEGER: 10
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:30:84:3a:63:b9] = INTEGER: 4
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:30:84:3a:63:c7] = INTEGER: 3
BRIDGE-MIB::dot1dTpFdbPort[STRING: 0:30:84:3a:64:97] = INTEGER: 7
BRIDGE-MIB::dot1dTpFdbPort[STRING: 90:e6:ba:9d:73:ad] = INTEGER: 13
Nous avons ici exactement l'information que nous recherchons, savoir une table dont les
cls sont les adresses MAC et les donnes le numro du port qui les a vues.
En regardant bien ce tableau, nous constatons deux choses :
Le port 0
Le port 0 reprsente une adresse MAC connue du switch, mais ne venant pas d'un port rel.
En l'occurrence, il s'agit d'une adresse MAC du switch lui-mme :
~# arp -an
...
? (172.16.252.4) at 00:21:91:85:77:4d [ether] on eth0
...
Les ports 23 et 24
Ces ports sont rfrencs deux fois dans la table. C'est possible et mme normal qu'un mme
port puisse voir plusieurs adresses MAC, si un autre switch est connect dessus, ce qui est le
cas ici.
Un dbut de solution
Compte tenu du problme nonc, il est clair qu'il va falloir coder un outil qui rponde la
question. Pas question de le raliser ici, mais nous allons amorcer la solution en utilisant PHP,
juste pour montrer que l'on peut utiliser facilement un langage quelconque, du moment qu'il
propose une bibliothque pour grer SNMP, ce qui est le cas de PHP. Cette bibliothque est
rudimentaire, mais suffisante pour nos besoins.
Nous avons bien dans un coin une Debian qui traine, avec Apache, MySQL et PHP, sur le
serveur RADIUS par exemple. Nous allons juste raliser une fonction qui remplira un tableau
avec ce que nous dit SNMP.
Il faut bien entendu installer le module php5-snmp pour raliser l'opration.
Premier essai
Grce par exemple au SimpleWeb, nous savons que l'OID de la table qui nous intresse est
.1.3.6.1.2.1.17.4.3.1.2.
Voici un premier code php (>= 5.2) :
<?php
// nous souhaitons traiter les OIDs de faon numrique
snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC);

$OID = '.1.3.6.1.2.1.17.4.3.1.2';

$X = snmprealwalk('172.16.252.4', 'public',$OID);
foreach($X as $key => $value) {
$macAddr = $key;
$port = $value;
echo $port.' == '.$macAddr.'<br />';
}
?>
La fonction snmp_set_oid_output_formatpermet d'indiquer comment nous dsirons traiter
les OIDs. Ici, sous forme numrique. SNMP_OID_OUTPUT_NUMERIC est une constante pr-
dfinie dans le module php5-snmp.
La fonction snmprealwalk est un genre de snmpwalk o l'on indique comme paramtres :
la cible (adresse IP ou nom DNS) ;
la communaut ;
l'OID d'o l'on veut partir.
Ceci va nous donner le rsultat suivant :
INTEGER: 11 == .1.3.6.1.2.1.17.4.3.1.2.0.5.93.8.128.1
INTEGER: 5 == .1.3.6.1.2.1.17.4.3.1.2.0.19.212.88.167.204
INTEGER: 23 == .1.3.6.1.2.1.17.4.3.1.2.0.23.8.228.70.128
INTEGER: 23 == .1.3.6.1.2.1.17.4.3.1.2.0.23.8.228.70.206
INTEGER: 24 == .1.3.6.1.2.1.17.4.3.1.2.0.23.8.228.197.0
INTEGER: 24 == .1.3.6.1.2.1.17.4.3.1.2.0.23.8.228.197.79
INTEGER: 0 == .1.3.6.1.2.1.17.4.3.1.2.0.33.145.133.119.77
INTEGER: 6 == .1.3.6.1.2.1.17.4.3.1.2.0.35.84.55.145.46
INTEGER: 8 == .1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.84.111
INTEGER: 9 == .1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.85.170
INTEGER: 10 == .1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.97.178
INTEGER: 4 == .1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.99.185
INTEGER: 3 == .1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.99.199
INTEGER: 7 == .1.3.6.1.2.1.17.4.3.1.2.0.48.132.58.100.151
INTEGER: 13 == .1.3.6.1.2.1.17.4.3.1.2.144.230.186.157.115.173
Pas bien exploitable. Il nous faut nettoyer un peu :
les cls (OIDs) en enlevant l'OID de la table (.1.3.6.1.2.1.17.4.3.1.2.) ;
les donnes en enlevant le type (INTEGER: ) ;
Deuxime essai
Comme ceci n'est pas un cours de PHP, voici juste une faon de faire, parmi tant d'autres. La
documentation officielle de PHP vous sera ventuellement d'un grand secours.
<?php
// nous souhaitons traiter les OIDs de faon numrique
snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC);

$OID = '.1.3.6.1.2.1.17.4.3.1.2';

$X = snmprealwalk('172.16.252.4', 'public',$OID);
foreach($X as $key => $value) {
$macAddr = substr($key,strlen($OID)+1) ;
$port = explode(': ',$value,2);
echo $port[1].' == '.$macAddr.'<br />';
}
?>
Ceci nous donne dj quelque chose de plus exploitable :
11 == 0.5.93.8.128.1
5 == 0.19.212.88.167.204
23 == 0.23.8.228.70.128
23 == 0.23.8.228.70.206
24 == 0.23.8.228.197.0
24 == 0.23.8.228.197.79
0 == 0.33.145.133.119.77
6 == 0.35.84.55.145.46
8 == 0.48.132.58.84.111
9 == 0.48.132.58.85.170
10 == 0.48.132.58.97.178
4 == 0.48.132.58.99.185
3 == 0.48.132.58.99.199
7 == 0.48.132.58.100.151
13 == 144.230.186.157.115.173
Cependant :
les adresses MAC (les cls) ne sont pas dans un format exploitable (reprsentation
hexadcimale) ;
les ports (les donnes) sont sous forme de texte, si bien qu'un tri se fera suivant le code
ASCII, ce qui n'a pas de sens ici.
Nous allons donc crer un second tableau, avec des cls (adresses MAC) dans le format utilis
sur FreeRADIUS et des donnes de type entier.
Troisime essai
L'adresse MAC
Crons une fonction dans laquelle nous injecterons l'adresse sous sa forme dcimale, et qui
nous renverra une chaine sous forme hexadcimale, avec le dlimiteur : :
function parseMacAddr($T) {
$tok = strtok($T,".");
while ($tok !== false) {
$oct=dechex($tok);
settype($oct,"string");
if (strlen($oct)==1) $oct = "0".$oct;
$macAddr = $macAddr.$oct.":";
$tok = strtok(".");
}
$macAddr = substr($macAddr,0,strlen($macAddr)-1);
return $macAddr;
}
La fonction strtok n'est pas d'un usage bien intuitif, mais pour ceux qui ne la connaissent
pas, la documentation donne des exemples clairs.
La solution dfinitive(?)
Finalement, le code suivant :
<?php
function parseMacAddr($T) {
$tok = strtok($T,".");
while ($tok !== false) {
$oct=dechex($tok);
settype($oct,"string");
if (strlen($oct)==1) $oct = "0".$oct;
$macAddr = $macAddr.$oct.":";
$tok = strtok(".");
}
$macAddr = substr($macAddr,0,strlen($macAddr)-1);
return $macAddr;
}

// nous souhaitons traiter les OIDs de faon numrique
snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC);

$OID = '.1.3.6.1.2.1.17.4.3.1.2';

$X = snmprealwalk('172.16.252.4', 'public',$OID);
foreach($X as $key => $value) {
$macAddr = parseMacAddr(substr($key,strlen($OID)+1));
$port = explode(': ',$value,2);
settype($port[1],'integer');
$Y[$macAddr]=$port[1];
}

unset($X);
asort($Y);

foreach($Y as $key => $value) {
echo $value.' == '.$key.'<br />';
}
?>
donne quelque chose d'acceptable :
0 == 00:21:91:85:77:4d
3 == 00:30:84:3a:63:c7
4 == 00:30:84:3a:63:b9
5 == 00:13:d4:58:a7:cc
6 == 00:23:54:37:91:2e
7 == 00:30:84:3a:64:97
8 == 00:30:84:3a:54:6f
9 == 00:30:84:3a:55:aa
10 == 00:30:84:3a:61:b2
11 == 00:05:5d:08:80:01
13 == 90:e6:ba:9d:73:ad
23 == 00:17:08:e4:46:80
23 == 00:17:08:e4:46:ce
24 == 00:17:08:e4:c5:4f
24 == 00:17:08:e4:c5:00
Notre tableau Y contient les informations issues du switch dans un format que l'on pourra
aisment utiliser dans des requtes sur notre base MySQL.
Pour finir
Beaucoup d'autres informations intressantes peuvent tre obtenues par SNMP. Toujours sur
nos switchs, il peut tre utile de visualiser le trafic sur certains ports pour surveiller par
exemples des goulots d'tranglement. SNMP coupl des outils comme Cacti ou Zabbix
permettra alors d'obtenir de jolis graphes et d'en conserver l'historique.
Les rponses
Interro surprise 1
Est-ce que ceci aurait des chances de fonctionner ?
~$ snmptranslate -Ot -Td .1.3.6.1.2.1.17.1.2.0
Pas vraiment, puisque cette branche est couverte par la MIB BRIDGE-MIB. Nous aurons donc
une rponse trs incomplte :
SNMPv2-SMI::mib-2.17.1.2.0
mib-2 OBJECT-TYPE
-- FROM SNMPv2-SMI, RFC1213-MIB
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) 17 1 2 0 }
Et ceci :
~$ snmptranslate -Ot -Td -m /usr/share/mibs/ietf/BRIDGE-MIB
.1.3.6.1.2.1.17.1.2.0
Dans ce cas, nous aurons effectivement une rponse plus explicite :
BRIDGE-MIB::dot1dBaseNumPorts.0
dot1dBaseNumPorts OBJECT-TYPE
-- FROM BRIDGE-MIB
SYNTAX Integer32
UNITS "ports"
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The number of ports controlled by this bridging
entity."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) dot1dBridge(17)
dot1dBase(1) dot1dBaseNumPorts(2) 0 }
Une description quasi comprhensible, ainsi que le type de rponse (Integer32) et l'unit, ici
le nombre de ports. Ce paramtre est bien entendu accessible en lecture seule. Il serait en
effet miraculeux que SNMP ait le pouvoir de multiplier les ports d'un switch, au grand
dtriment des profits des constructeurs.
Interro surprise 2
Pour rappel :
com2sec voirUnPeu default public
com2sec voirTout 192.168.0.0/24 private
com2sec voirEtToucher 192.168.0.16 admin

group touristes v1 voirUnPeu
group touristes v2c voirUnPeu
group riverains v1 voirTout
group riverains v2c voirTout
group proprio v1 voirEtToucher
group proprio v2c voirEtToucher

view system included .1.3.6.1.2.1.1.1
view all included .1

access touristes "" any noauth exact system none none
access riverains "" any noauth exact all none none
access proprio "" any noauth exact all all none
1. Quelqu'un se dclarant de la communaut public pourra-t-il
1. se connecter depuis n'importe quelle adresse IP ?

Oui il pourra puisque la communaut public peut se connecter depuis
default, c'est--dire de n'importe o (sous rserve qu'il n'y ait pas de
restrictions mises l'coute du service lors de son lancement)
2. obtenir les informations de la branche .iso.org.dod.internet.mgmt.mib-
2.interfaces ? (on pourra s'aider de snmptranslate pour obtenir la version
numrique de cette branche)

Non. La version numrique de cette branche est .1.3.6.1.2.1.2. La
communaut public fait partie du groupe voirUnPeu qui lui-mme fait partie
des touristes. Les touristes n'ont accs qu' la vue system c'est--dire la
branche .1.3.6.1.2.1.1.1 seulement, et .1.3.6.1.2.1.2 n'en est pas une
sous-branche.
2. Quelqu'un se dclarant de la communaut private pourra-t-il
1. obtenir les informations de la branche .iso.org.dod.internet.mgmt.mib-
2.interfaces s'il dispose de l'adresse 192.168.1.25 ?

Non, la communaut private est accessible seulement partir du sous-rseau
192.168.0.0/24 et 192.168.1.25 n'est pas dans ce sous-rseau.
2. obtenir les informations de la branche .iso.org.dod.internet.mgmt.mib-
2.interfaces s'il dispose de l'adresse 192.168.0.25 ?

Oui. L'adresse IP est cette fois-ci autorise. De plus, la communaut private
est dans voirTout donc ce sont des riverains qui ont droit la vue de tout
l'arbre.
3. Quelqu'un se dclarant de la communaut admin depuis l'adresse IP 192.168.0.17
1. pourra-t-il obtenir les informations de la branche .1.3.6.1.2.1.2 ?
2. pourra-t-il modifier une valeur accessible en criture (SNMPv2-
MIB::sysLocation par exemple) ?

Non. dans tous les cas, la communaut admin ne peut utiliser que l'adresse IP
192.168.0.16, ce qui n'est pas le cas ici.
Sinon, cette communaut pouvant voirEtToucher c'est--dire faisant partie
de proprio peut lire et crire dans la vue all donc dans tout l'arbre (mais
seulement depuis la station d'adresse IP 192.168.0.16)
Squid et SquidGuard
La mise en place d'un serveur mandataire HTTP (proxy HTTP) prsente de nombreux
avantages, aussi bien en termes de scurit que de contrle parental , surtout dans le cadre
d'tablissements qui offrent des mineurs la possibilit d'accs l'internet (coles, collges,
lyces, associations diverses).
Nous utiliserons bien entendu des solutions libres, savoir Squid pour le proxy HTTP et
SquidGuard pour l'lment de filtrage.
Si une mise en place minimum de Squid ne prsente gure de difficults, l'insertion du
helper SquidGuard reste tout de mme plus dlicate et mrite que l'on y passe un peu de
temps.
Transparent ou pas ? Nous verrons les avantages et inconvnients de chacune des mthodes.
Identifier les utilisateurs ou se contenter de contrler les accs de faon anonyme ? Nous
envisagerons les deux possibilits.
Nous allons travailler avec une distribution Debian dite testing (la Lenny, l'heure o je
rdige ce chapitre).
Pourquoi Debian ?
Elle est stable,
elle s'installe assez simplement, si l'on a dj une petite exprience de Linux ;
elle est trs simple mettre jour, mme en cas de mise jour de version ;
il y a tout ce qu'il faut comme paquetages pour ce que l'on veut faire, et mme bien
d'avantage encore.
Bien que la Debian soit utilise ici, rien n'interdit de le transposer une autre distribution,
sous rserve d'utiliser des paquetages de bases de donnes Berkeley compatibles avec le
fonctionnement de SquidGuard. Suivant la distribution, des problmes peuvent apparaitre.
Fonctionnement
Des passerelles entre rseaux
Bien que ces sujets soient abords plus en dtails ailleurs sur ce site, un petit rappel ne fera
sans doute pas de mal. La question de base est :
Comment permettre aux htes d'un rseau d'accder aux htes d'un autre rseau ?
Le bout de fil

Au dpart, nous disposons de deux rseaux physiques, construits avec des HUBS. Il suffit de
placer un cble entre les deux HUBS. Cette solution simplissime interconnecte au niveau le
plus bas (couche physique), avec quelques contraintes et inconvnients :
Les trames mises par les nuds de chaque rseau initial sont propages sur l'autre
rseau (en fait, il n'y a plus qu'un seul rseau physique) et le risque est grand de voir
s'crouler rapidement les performances du rseau ;
du fait que nous sommes sur le mme rseau physique, le rseau IP doit tre
galement le mme (mme plan d'adressage IP.
Cette solution revient en fait ajouter de nouveaux htes sur un rseau dj existant.
Le pont Ethernet

La mme chose, mais avec un dispositif un peu plus intelligent qu'un simple bout de fil,
puisque le pont vitera la propagation des trames qui ne concernent pas un hte de l'autre
rseau. L'interconnexion se fait ici au niveau 2. Au niveau IP, les contraintes restent les
mmes, nous sommes partout dans le mme rseau IP.
Cette solution est aujourd'hui compltement gnralise, puisque les switchs ne sont rien
d'autre que des ponts multivoies et donc, tirer un bout de cble entre deux switches revient
la solution du pont.
Le routeur IP

Ici, nous interconnections au niveau 3 (IP). Les deux rseaux disposent chacun de leur propre
plan d'adressage IP. Les possibilits de contrle d'accs d'un rseau l'autre sont bien plus
fines (filtrage de paquets genre Netfilter/IPtables).
Le serveur mandataire

Nous travaillons ici au niveau 4 (du modle DOD) c'est dire au niveau du protocole
d'application (HTTP pour ce qui nous concerne ici). Il existe deux types de serveurs
mandataires :
Le proxy normal , qui ncessite que l'application cliente sache que le proxy existe
et sache aussi travailler avec. En effet, dans ce cas, le client envoie ses requtes au
serveur mandataire, charge pour lui d'aller chercher plus loin l'information rclame
par le client et de la lui transmettre, une fois l'information obtenue. Les clients HTTP
(navigateurs) modernes savent tous le faire. C'est en revanche trs rarement le cas pour
d'autres protocoles comme POP, FTP etc ;
le proxy transparent , qui agit dans la totale ignorance du client. Dans cette
situation, le client croit s'adresser directement la cible finale, mais la requte est
intercepte et traite par le mandataire. Cette solution, ncessaire le plus souvent pour
des protocoles comme POP ou FTP o les clients ne savent pas utiliser de proxy, n'est
pas obligatoire pour HTTP. Nous aurons l'occasion de rediscuter de ce choix.
Dans l'illustration, les htes du rseau de gauche accderont aux informations fournies par les
serveurs HTTP du rseau de droite via le serveur mandataire qui est dans leur rseau. Nous
reviendrons plus loin sur cette architecture qui peut sembler peu vidente au premier regard.
Objectif
Installer un systme de proxy cache pour HTTP. Ce proxy-cache propose deux fonctions
principales :
L'optimisation de la bande passante sur le lien Internet, lorsque de nombreux clients
sont connects et qu'ils visitent plus ou moins les mmes sites, la condition, bien sr,
que ces sites ne soient pas trop dynamiques, ASP, JSP, PHP ni chiffrs (HTTPS).
Comme vous le constatez, la fonction cache prsente de moins en moins d'intrt. Il en
reste un cependant, surtout pour les illustrations qui ne sont pas encore toutes en flash
;
le contrle et le filtrage de l'accs la toile, en se servant des URI et, ventuellement,
des noms d'utilisateurs, si l'on fait de l'authentification de ces derniers, autant de
choses qu'il est difficile, voire impossible de faire avec du filtrage de paquets. En effet,
en travaillant au niveau du protocole HTTP, il devient possible de mettre en place des
filtres d'URI, des analyses de contenu dans les documents, alors qu'au niveau IP, nous
ne pourrions filtrer que sur des adresses et des ports.
Tout responsable d'un rseau local l'usage de mineurs et connect l'Internet se doit de
mettre en place un tel systme de filtrage de manire viter, autant que possible, l'accs
des sites que la morale rprouve, d'autant qu'il s'agit d'une obligation lgale.
Prsentation gnrale
Les modes de fonctionnement

Dans un fonctionnement normal, un
navigateur HTTP interroge directement le
serveur cible et il reoit directement les
rponses de ce dernier. Il n'y a pas de filtrage
possible, autrement que sur les adresses IP
des serveurs cible.

Dans le cas d'un proxy normal , le client
demande au proxy d'interroger le serveur
cible. Ce dernier rpond au proxy qui
communique alors la rponse au client. Dans
ce mode, le client est configur pour utiliser
un proxy et il modifie les requtes http en
fonction.

Dans le cas du proxy transparent, le client
ignore l'existence du proxy. Il croit envoyer
ses requtes directement au serveur cible,
mais ses requtes sont dtournes vers le
proxy par le routeur. Le serveur cible rpond
au proxy qui retransmet la rponse au client,
mais ce dernier croit l'avoir reue directement
du serveur cible.
Nous discuterons plus tard de l'intrt compar des deux faons d'utiliser notre proxy.
Le logiciel
Squid, principal composant de ce systme, assure les fonctions de :
Cache, pour optimiser la bande passante ;
identification des utilisateurs, nous en verrons une simpliste et une nettement plus
complexe ;
filtrage d'accs basique , mais dj intressant.
SquidGuard propose un filtrage trs puissant d'accs au web, en fonction :
De groupes d'utilisateurs, dfinis de diverses manires. Ici, nous nous baserons sur des
IPs ou des groupes d'IPs, mais il est possible d'utiliser l'identification des utilisateurs
mise en place sur Squid ;
de listes de domaines et d'URI qui serviront dfinir soit des cibles autorises, soit
des cibles interdites (listes blanches, listes noires) ;
de plages horaires pendant lesquelles l'accs sera autoris ou interdit
Et bien d'autres choses encore, que nous ne verrons pas ici.
Principe de fonctionnement
Squid tourne en tche de fond (daemon). Il coute sur un port spcifique (3128 par dfaut,
mais il est possible d'utiliser 8080, plus habituel pour un proxy HTTP). L'ventuel module
d'identification vient se greffer dessus, ce qui fait apparaitre un certain nombre de processus
fils (5 par dfaut).
SquidGuard vient galement se greffer dessus et apparait lui aussi sous la forme de processus
fils (galement 5 par dfaut).
Au total, une fois Squid configur, il n'y aura qu' dmarrer Squid et les processus
d'identification et de filtrage avanc dmarreront avec.
Pour aller trs vite, SquidGuard utilise le format de bases de donnes Berkeley pour travailler.
Pour dfinir ces bases, l'administrateur a recours des fichiers au format texte qui seront pr
compils en base de donnes ou compils la vole, suivant la faon de travailler.
Nous verrons que les destination groups constituent des bases pr compiles, alors que les
blacklists sont compiles la vole et rsident uniquement en mmoire. Ce principe est a
viter autant que possible, dans la mesure o il consomme normment de ressources au
dmarrage de chaque instance de squidGuard.
Administration du tout
Les dernires versions (disponibles dans Lenny) de Squid (3 3.0.STABLE4-1) et SquidGuard
(1.2.0) ont subi beaucoup de changements et les modules webmin ne sont, l'heure o ces
lignes sont crites, plus adapts. Nous serons donc obligs de mettre les mains directement
dans le cambouis des fichiers de configuration.
Il faut faire trs attention ce que l'on fait et vrifier chaque fois que ncessaire que le but
recherch est atteint. SquidGuard rserve pas mal de (mauvaises) surprises ce propos.
Dans le cas de SquidGuard principalement, une gestion fine des bases de donnes pour les
groupes de destination et les blacklists ne pourra se faire qu' partir de la ligne de commande.
Nous ne ferons qu'effleurer le problme, si vous en arrivez l, c'est que vous tes dj assez
pointus sur le sujet pour pouvoir vous dbrouiller tout seul avec la documentation (pauvre et
laconique, il faut bien le dire).
Utiliser un proxy sur https
Cette question, qui semble venir comme un cheveu sur la soupe, est tout de mme l'une des
premires questions se poser, lorsque l'on dsire mettre en place un serveur proxy comme
Squid :
sur https, les changes sont chiffrs et ne peuvent tre mis en cache. Utiliser Squid
pour ses fonctions de cache n'offre ici aucun intrt ;
https authentifie au moins le serveur interrog, de manire ce que le client soit sr
qu'il s'adresse au serveur rellement choisi. Qu'advient-t-il de cette certitude, si la
connexion passe par un intermdiaire ?
Lorsque nous utilisons un serveur proxy de faon volontaire (par le paramtrage de notre
navigateur), nous savons que ce paramtrage modifie le comportement dudit navigateur, qui
va alors envoyer toutes ses requtes sur le proxy (voir le chapitre sur HTTP). Dans une telle
situation, si le client peut authentifier le serveur proxy, sa connexion https peut la rigueur
encore tre considre comme fiable. Dans ce cadre, Squid peut assumer cette fonction. Mais
dans le cas du passage par un proxy involontaire (proxy transparent), le client ne sait pas
qu'il passe par un tel dispositif, son navigateur n'est pas paramtr pour s'adresser un serveur
proxy, le trafic est drout de faon transparente . Dans une telle situation, la dmarche
deviendrait malhonnte, supposer qu'il soit possible de le faire de faon fonctionnelle.
quid
Configuration matrielle utilise
Un PII 300 MHz, 256 Mo de RAM et 20 G0 de disque dur devraient largement suffire pour
un rseau d'une centaine de postes. La machine de test s'appelle venus . Elle est
indpendante du routeur NAT. Elle est anime par Lenny (testing) et nous testerons le tout
avec Squid 3.0.STABLE4-1. Enfin, nous vrifierons que ce que nous avons fait est
compatible avec Squid 2.6, galement fourni dans la Lenny.
Rien n'empche cependant d'installer Squid/SquidGuard sur la mme machine que le routeur
NAT, ce qui simplifiera mme les choses, surtout si l'on souhaite rendre le proxy transparent.
Installation
Nous supposons que vous tes sorti victorieux d'une installation de la Lenny , que votre
configuration rseau fonctionne.
Depuis Squid 2.4, beaucoup de choses ont chang dans le fichier de configuration. Quant
squidGuard, il change de version de base de donnes Berkeley. Ce sont toutes ces raisons qui
m'ont conduit rcrire ce chapitre.
# apt-get install squid3
Lecture des listes de paquets... Fait
Construction de l'arbre des dpendances... Fait
Les paquets supplmentaires suivants seront installs :
squid3-common
Paquets suggrs :
squid3-client squid3-cgi resolvconf smbclient
Les NOUVEAUX paquets suivants seront installs :
squid3 squid3-common
0 mis jour, 2 nouvellement installs, 0 enlever et 0 non mis jour.
Il est ncessaire de prendre 985ko dans les archives.
Aprs dpaquetage, 6312ko d'espace disque supplmentaires seront utiliss.
Souhaitez-vous continuer [O/n] ?
Rception de : 1 http://mir1.ovh.net testing/main squid3-common 3.0.STABLE-
4 [246kB]
Rception de : 2 http://mir1.ovh.net testing/main squid3 3.0.STABLE-4
[739kB]
985ko rceptionns en 2s (342ko/s)
Slection du paquet squid3-common prcdemment dslectionn.
(Lecture de la base de donnes... 26690 fichiers et rpertoires dj
installs.)
Dpaquetage de squid3-common ( partir de .../squid3-
common_3.0.STABLE4_all.deb) ...
Slection du paquet squid3 prcdemment dslectionn.
Dpaquetage de squid3 ( partir de .../squid3_3.0.STABLE4_i386.deb) ...
Paramtrage de squid3-common (3.0.STABLE-4) ...
Paramtrage de squid3 (3.0.STABLE-4) ...
Creating Squid HTTP proxy 3.0 spool directory structure
2007/05/28 18:05:46| Creating Swap Directories
2007/05/28 18:05:46| /var/spool/squid3 exists
2007/05/28 18:05:46| Making directories in /var/spool/squid3/00
2007/05/28 18:05:46| Making directories in /var/spool/squid3/01
2007/05/28 18:05:46| Making directories in /var/spool/squid3/02
2007/05/28 18:05:46| Making directories in /var/spool/squid3/03
2007/05/28 18:05:46| Making directories in /var/spool/squid3/04
2007/05/28 18:05:46| Making directories in /var/spool/squid3/05
2007/05/28 18:05:47| Making directories in /var/spool/squid3/06
2007/05/28 18:05:47| Making directories in /var/spool/squid3/07
2007/05/28 18:05:47| Making directories in /var/spool/squid3/08
2007/05/28 18:05:47| Making directories in /var/spool/squid3/09
2007/05/28 18:05:47| Making directories in /var/spool/squid3/0A
2007/05/28 18:05:48| Making directories in /var/spool/squid3/0B
2007/05/28 18:05:48| Making directories in /var/spool/squid3/0C
2007/05/28 18:05:48| Making directories in /var/spool/squid3/0D
2007/05/28 18:05:48| Making directories in /var/spool/squid3/0E
2007/05/28 18:05:48| Making directories in /var/spool/squid3/0F
Restarting Squid HTTP Proxy 3.0: squid3.
eros:/etc#
Comme vous le voyez, on l'installe et il dmarre tout seul.
# ps aux | grep [s]quid
root 571 0.0 1.8 3824 1124 ? S 16:26 0:00 /usr/sbin/squid3 -D -sYC
proxy 574 0.8 8.2 8468 5068 ? S 16:26 0:03 (squid) -D -sYC
Effectivement, il tourne. N'y aurait-il rien de plus faire ? Vrifions tout de suite. Squid
utilise par dfaut le port 3128. Configurons donc un navigateur du LAN pour l'utiliser et
essayons un URI au hasard

C'tait trop beau Il faudra dj mettre les mains dans le cambouis. Notez qu'il vaut mieux
une configuration qui interdise trop qu'une configuration qui, par dfaut, autorise trop, comme
font certains
Configuration minimale
Les ACL (Access Control Lists) permettent de dfinir des conditions sur les IPs, les ports, le
contenu de certains textes, et j'en passe. Si vous voulez tout savoir sur les diverses ACL de
Squid, ne comptez pas sur moi, comptez plutt sur la documentation officielle.
Le fichier de configuration est /etc/squid3/squid.conf. C'est devenu une habitude de
commenter copieusement le fichier de configuration, au point qu'il devient plus un manual
qu'un fichier de configuration. J'ai personnellement du mal m'habituer cette tendance.
Aussi, je vous propose cette petite manipulation prliminaire :
# cd /etc/squid3
# mv squid.conf squid.conf.origin
# cat squid.conf.origin | egrep -v -e '^[:blank:]*#|^$' > squid.conf
(J'adore la clart des expressions rgulires)
Ce qui permet d'obtenir un vrai fichier de configuration :
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
icp_access allow all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid3/access.log squid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
icp_port 3130
coredump_dir /var/spool/squid3
Ceci n'empche bien sr pas de lire le fichier squid.conf.origin pour se documenter sur la
configuration.
Dans un premier temps, disons pour aller trs vite au but, que :
les acl (Access Control List) permettent de dfinir, par exemple, un plage
d'adresses IP, celles qui constituent notre rseau local ;
les http_access (restrictions) qui dfinissent l'autorisation ou l'interdit, pour une acl
donne.
Les restrictions indiquent quoi faire lorsque ces conditions sont vrifies. On autorise ou on
interdit en fonction d'une ACL ou d'un groupe d'ACLs, le sens de restriction est donc
prendre avec un peu de recul, une restriction pouvant tre une autorisation. La premire
restriction vrifie est la bonne, d'o l'importance de l'ordre dans lequel elles sont places.
Sans faire une analyse dtaille, nous voyons que dans la configuration par dfaut, seul
localhost peut utiliser le proxy (Allow localhost). Si cette condition n'est pas respecte, la
rgle suivante tant deny all, personne ne passe. Il nous faut donc faire intervenir la notion
de rseau local.
Crer une ACL reprsentant le LAN
Bien entendu, l'ide de faire plutt Allow all est une mauvaise ide. Si votre proxy a un pied
dans l'Internet (s'il est install sur la passerelle), vous risquez un proxy ouvert, avec tous les
usages pervertis que l'on peut en faire
Modifions le fichier squid.conf de cette manire :
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl LocalNet src 192.168.0.0/24
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow LocalNet
http_access deny all
icp_access allow all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid3/access.log squid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
icp_port 3130
coredump_dir /var/spool/squid3
Nous avons cr une ACL nomme LocalNet reprsentant notre rseau local (acl LocalNet
src 192.168.0.0/24), et lui avons donn l'autorisation de passer le proxy (http_access
allow LocalNet). Nous relanons squid :
# /etc/init.d/squid3 reload
Reloading Squid HTTP Proxy 3.0 configuration files.
done.
Et cette fois-ci :

Nous disposons d'un proxy cache en tat de marche pour notre rseau local.
+ sur squid
Affiner la configuration
Il y a deux points importants, qu'il peut tre utile d'tudier, et qui correspondent aux deux
fonctions principales d'un proxy.
Identifier les utilisateurs.
Attention. Vous aurez des ennuis pour identifier vos utilisateurs, si vous comptez rendre
votre proxy transparent. Les deux fonctionnalits sont incompatibles.
Dans la configuration mise en uvre jusqu'ici, nous ne faisions pas de contrle sur les
utilisateurs, seulement sur les IPs des machines clientes. Vous pouvez souhaiter identifier vos
utilisateurs lorsqu'ils vont surfer sur le Net. Dans ce cas, il vous faudra mettre en place un
systme d'identification (et renoncer au mode transparent).
Il y a plusieurs mthodes disponibles pour authentifier les utilisateurs du proxy. Elles font
toutes appel un programme extrieur, diffrent suivant le moyen choisi. Debian propose les
modules suivants :
squid_ldap_auth, msnt_auth, ncsa_auth, pam_auth, sasl_auth, smb_auth,
yp_auth, getpwname_auth, ntlm_auth, digest_ldap_auth, digest_pw_auth
Je ne les ai pas tous essays, dans une autre vie peut-tre ? Nous verrons un peu :
ncsa_auth qui permet d'identifier les utilisateurs partir d'un fichier local de type
htpasswd ;
ntlm_auth qui permet d'identifier les utilisateurs partir d'un annuaire Active
Directory dans un domaine Microsoft.
Nous allons dans un premier temps essayer ncsa_auth, ce ne sera peut-tre pas le plus utile,
surtout si le rseau local est un domaine Microsoft Windows, mais c'est le plus simple
mettre en uvre.
Construire un fichier d'utilisateurs.
Nous allons crer un fichier /etc/squid/users
# touch /etc/squid3/users
Nous le remplissons ensuite avec la commande htpasswd, normalement fournie dans le paquet
apache-common.
# htpasswd -b /etc/squid3/users <nom de l'utilisateur> <mot de passe>
A rpter autant de fois que ncessaire avec des vrais noms d'utilisateurs et des vrais mots de
passe
Le fichier se remplit comme suit :
# cat /etc/squid3/users
user1:ZNlvws1XtZpQE
user2:F2UUyQD41v.zw
user3:zpJXchoMHUpv2
Notez que les mots de passe sont chiffrs.
Vrifions que eci fonctionne, en lanant la main le module d'authentification
/usr/lib/ncsa_auth. Nous entrerons alors dans une boucle o il faudra entrer sur une ligne un
nom d'utilisateur et son mot de passe, spars par une espace :
# /usr/lib/squid3/ncsa_auth /etc/squid3/users
user1 password1
OK
user2 password2
OK
user3 password3
OK
machin chose
ERR No such user
Le systme rpond par OK ou par ERR suivant que l'authentification russit ou non.
Sortez de la boucle avec un ctrl-d.
Si l'authentification fonctionne comme ceci, c'est dj bon signe.
Configurer squid pour rclamer l'identification de vos utilisateurs.
Nous devons commencer par fournir quelques directives de type auth_param :
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/users
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
program, indiquez le chemin du module ncsa_auth, suivi du chemin du fichier des
utilisateurs, spars par une espace.
children, 5 est une valeur usuelle. Si vous avez de nombreux utilisateurs, il sera peut-tre
ncessaire d'augmenter ce nombre.
realm, n'est rien d'autre qu'un texte qui apparatra dans la fentre de demande d'identification.
credentialsttl, dure de vie de l'identification. A condition bien sr que le navigateur ne soit
pas ferm avant.
Il nous faut maintenant crer une acl supplmentaire, pour obliger l'identification,
acl Users proxy_auth REQUIRED
Puis n'autoriser l'accs que si le client est dans notre rseau et que l'identification est russie :
http_access allow LocalNet Users
Ceci nous conduit un fichier de configuration de la forme :
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/users
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl LocalNet src 192.168.0.0/24
acl Users proxy_auth REQUIRED
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow LocalNet Users
http_access deny all
icp_access allow all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid3/access.log squid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
icp_port 3130
coredump_dir /var/spool/squid3
Application des changements, nous vrifions que maintenant le module d'authentification est
bien charg :
# ps aux | grep [s]quid
root 1536 0.0 1.1 3824 1124 ? S 14:22 0:00 /usr/sbin/squid3 -D -sYC
proxy 1538 0.0 7.0 9616 6712 ? S 14:22 0:04 (squid) -D -sYC
proxy 2178 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
proxy 2179 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
proxy 2180 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
proxy 2181 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
proxy 2182 0.0 0.4 1712 388 ? S 16:30 0:00 (ncsa_auth) /etc/squid/users
Cette fois-ci, il y est. Ca devrait donc fonctionner :

Et voil. Pour accder au monde extrieur, Squid ncessite maintenant une identification.
Si nous allons faire un petit tour dans les dernires lignes de /var/log/squid/access.log,
nous constatons que le nom d'utilisateur figure pour chaque requte :
1180428383.041 0 192.168.0.15 TCP_MEM_HIT/200 632 GET http://pages-
perso.esil.univ-mrs.fr/index.html
user1 NONE/- text/html
La procdure qui permet d'identifier les utilisateurs partir d'Active Directory est nettement
plus complexe. Elle est dtaille la page suivante.
Optimiser le cache.
Un proxy sert optimiser la bande passante utilise sur le Net, en permettant de garder en
cache les pages les plus souvent visites. Si c'est une de vos principales proccupations, il sera
probablement ncessaire d'agir sur les diverses options du cache. Passez alors du temps lire
la documentation. Vous pourrez agir sur la taille du cache, sa rpartition sur les divers disques
durs
Pour raliser correctement une telle opration, il vous faudra installer d'abord des outils
d'audit de performance dudit cache. Dtailler ces opration ici nous mnerait trop loin. (Il y a
une doc assez complte avec Squid )
Rendre le proxy transparent.
Attention
Cette mthode est incompatible avec l'authentification des utilisateurs. Mme si
squid est configur comme nous l'avons vu pour l'authentification ncsa, celle-ci
ne fonctionnera plus.
cette mthode ne supporte que HTTP. FTP est impossible en mode transparent,
un seul port peut tre redirig de faon transparente, le 80, de prfrence,
puisque c'est le port habituel pour HTTP.
Utiliser un proxy ncessite normalement de configurer son butineur de manire ce qu'il
interroge toujours le proxy, quelle que soit la cible.
Vos utilisateurs ont donc gnralement la main sur ce paramtrage, et pourront probablement
passer outre le proxy, s'ils le dcident, contournant par le fait toutes vos stratgies. Il existe
cependant deux moyens d'viter ceci :
utilisez votre firewall pour bloquer pour vos postes clients l'accs direct l'Internet par
les ports http et https (80, 443, 563). De cette manire, vos utilisateurs n'auront
d'autre possibilit que de passer par le proxy (sauf pour des serveurs exotiques, qui
utiliseraient un autre port), c'est la seule manire possible si vous souhaitez identifier
vos utilisateurs ;
rendre le proxy transparent, ce qui veut dire que configurs ou non, les requtes http
passeront quand mme par le proxy. Pour arriver ce rsultat, il faut raliser deux
oprations :
Rediriger en PREROUTING le port 80 (vous devrez vous contenter d'un seul port
transparent) vers le port proxy sur son port (3128 par dfaut pour squid), a se fait sans
problmes sur votre routeur NAT avec IPtables,
Configurer correctement squid pour qu'il interprte convenablement les requtes
HTTP qu'il reoit.
La rgle de redirection.
Voici la rgle ajouter sur votre passerelle, en admettant que votre rseau est dans
192.168.0.0 et que votre proxy possde l'adresse 192.168.0.252. Nous supposons que le proxy
est install sur la machine qui assure galement le rle de passerelle (commande entrer sur
une seule ligne, bien entendu) :
iptables -t nat -A PREROUTING -s 192.168.0.0/255.255.255.0 -p tcp -m tcp --
dport 80 -j REDIRECT --to-ports 3128
De multiples solutions sont possibles pour placer un proxy transparent ailleurs que sur la
passerelle. Elles sont plus ou moins compliques grer au niveau du routage. Si la question
vous intresse, voyez :
Le routage, complments ;
Le routage slectif.
Avec un routeur trois voies, par exemple deux rseaux IP (disons 192.168.0.0 et
192.168.1.0), et un accs Internet, si le LAN est sur 192.168.0.0, il faudra placer le proxy sur
192.168.1.0, disons 192.168.1.2. La rgle IPtables s'crira alors :
iptables -t nat -A PREROUTING -s 192.168.0.0/255.255.255.0 -p tcp -m tcp --
dport 80 -j DNAT --to-destination 192.168.1.2:3128
Bien entendu, il faudra que le routage se fasse entre les rseaux 192.168.0.0 et 192.168.1.0.
Paramtrage de Squid
Comme nous l'avons vu dans le chapitre sur HTTP, Le client HTTP n'agit pas de la mme
manire suivant qu'il a affaire un proxy ou non. Ici, le client ne sait pas qu'il y a un proxy, il
agit donc comme s'il interrogeait directement le serveur cible, alors que ce n'est pas le cas. Ca
ne fonctionnera bien entendu pas, si Squid n'est pas inform de cette situation.
Mais Squid sait contourner la difficult, de faon trs simple depuis la version 2.6 au moins,
en ajoutant simplement le mot transparent sur la ligne de dfinition du port utilis :
http_port 3128 transparent
Conclusions
Comme nous l'avons vu, la transparence du proxy entrane de nombreuses restrictions. A
moins que vous y teniez absolument, mieux vaut choisir une autre solution, principalement si
vous voulez cacher le FTP et/ou faire passer le HTTPS par votre proxy (il n'y aura pas d'effet
de cache, juste un transfert des donnes comme dans un tunnel) ou encore, si vous devez
identifier vos utilisateurs.
Dans la suite de cet expos, squid ne sera pas transparent.
Pour ce qui est du filtrage d'accs, il est possible de faire dj des choses avec Squid tout seul,
mais le helper SquidGuard que nous allons voir dans la suite rend inutiles les tentatives de
filtrage avec les seuls moyens de Squid.
Active Directory
Identification avance
Si votre rseau est un peu important, que vous avez grer de nombreux utilisateurs, il se peut
que vous ayez dj une base de donne contenant des couples user / password quelque
part. L'ide serait alors excellente de vouloir configurer squid pour qu'il identifie les
utilisateurs depuis cette base. Les annuaires LDAP sont trs souvent utiliss dans ce but, et
squid dispose de ce qu'il faut pour y arriver.
Nous allons voir comment faite dans le cas d'un annuaire LDAP un peu particulier.
Utiliser Active Directory
Active Directory n'est autre, en effet, qu'un annuaire LDAP revu et compliqu (enrichi ?) par
Microsoft. Il est utilis dans les domaines Microsoft, entre autres choses, pour stocker la base
de donne des utilisateurs, permettant ainsi la gestion de leurs comptes de faon centralise.
Un protocole de type Kerberos est employ pour l'authentification de l'utilisateur lorsqu'il
ouvre une session sur un hte quelconque du domaine.
Les systmes GNU/Linux disposent de tous les outils pour intgrer un hte Linux un
domaine Microsoft. En effet, dans cette architecture, les htes disposent aussi d'un compte
dans le domaine, ce dernier tant rapprocher du concept de royaume (realm) de Kerberos.
Le pr requis sera donc d'intgrer notre proxy au domaine Microsoft. Une fois cette opration
ralise, il deviendra possible d'authentifier un utilisateur en s'appuyant sur Active Directory.
Nous arriverons un mode de fonctionnement assez agrable, puisque les utilisateurs dj
authentifis dans le domaine Microsoft n'auront pas besoin de se r identifier pour tre
autoriss passer le proxy. La procdure a t vrifie sur des htes clients Windows XP, elle
doit tre galement valide sur des htes clients Linux intgrs au domaine et dont les
sessions des utilisateurs sont authentifies par Actrive DIrectory, mais je ne l'ai pas
expriment.
Procdure de configuration du serveur hte de Squid
Intgration dans le domaine Microsoft
Il nous faut installer les utilitaires clients Kerberos 5, samba 3 et winbind :
apt-get install krb5-user krb5-config samba-common samba winbind
Ne vous proccupez pas trop de la configuration post installation, nous la reprendrons en
tirement par la suite.
Configuration du client Kerberos
N'tant pas spcialiste de kerberos, loin s'en faut, je me contenterai de vous donner une
recette. Nous supposons que nous avons un domaine (Active Directory) qui dispose du nom
domaine.mrs (et DOMAINE pour la compatibilit pr-2000) :
~# cat /etc/krb5.conf
[libdefaults]
default_realm = DOMAINE.MRS
dns_lookup_realm = false
dns_lookup_kdc = false

[realms]
DOMAINE.MRS = {
kdc = 192.168.0.1
kdc = 192.168.0.2
admin_server = 192.168.0.1
default_domain = DOMAINE.MRS
}

[domain_realm]
.domaine.mrs = DOMAINE.MRS
domaine.mrs = DOMAINE.MRS

[logging]
default = FILE:/var/log/krb5.log
kdc = FILE:/var/log/krb5kdc.log
admin-server = FILE:/var/log/krb5adm.log

[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
les adresses IP indiques par kdc dans le paragraphe [realms] correspondent vos
contrleurs de domaine Microsoft (vous en avez bien deux, n'est-ce pas ?) ;
l'adresse IP indique par admin_server correspond au contrleur Matre d'oprations
(vous avez, n'est-ce pas, les 5 rles FSMO attribus au mme contrleur ?).
Vrification
La commande kinit va permettre de vrifier que l'on peut obtenir un ticket kerberos pour
un utilisateur du domaine ActiveDirectory :
# kinit -V machin@DOMAINE.MRS
Password for machin@DOMAINE.MRS:
Authenticated to Kerberos v5
La commande klist permet de lister les tickets obtenus :
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: machin@DOMAINE.MRS

Valid starting Expires Service principal
11/15/07 10:36:18 11/15/07 20:36:22 krbtgt/DOMAINE.MRS@DOMAINE.MRS
renew until 11/15/07 20:36:18

Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached
machin@domaine.mrs a bien t authentifi et le ticket kerberos a bien t reu.
Non ? Alors revoyez votre configuration parce qu'habituellement, a fonctionne bien.
Configuration de samba
# cat /etc/samba/smb.conf
[global]

workgroup = DOMAINE
realm = DOMAINE.EME
security = ADS
password server = 192.168.0.1 192.168.0.2
client use spnego = yes
client ntlmv2 auth = yes
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
announce version = 4
announce as = NT Workstation
dns proxy = No
idmap uid = 167771-335549
idmap gid = 167771-335549
winbind use default domain = Yes
invalid users = root
Le workgroup correspond au nom plat du domaine Microsoft ;
le realm correspond au royaume Kerberos ;
la security = ADS (Active Directory Server) ncessite que la machine soit intgre
au domaine Microsoft et que le client kerberos soit install et configur, ce qui
permettra d'utiliser ce protocole pour l'authentification des clients ;
les password server sont bien entendu les contrleurs de domaine Microsoft.
Les autres paramtres sont sans doute de moindre importance. Plongez-vous dans la lecture
du manuel de smb.conf pour avoir tous les dtails sur les divers paramtres.
Configuration de winbind
Modifiez comme suit le fichier /etc/nsswitch.conf :
passwd: compat winbind
group: compat winbind
shadow: compat
hosts: files dns
networks: files

protocols: db files
services: db files
ethers: db files

rpc: db files

netgroup: nis
Relancez samba et winbind :
# invoke-rc.d winbind restart
Stopping the Winbind daemon: winbind.
Starting the Winbind daemon: winbind.
# invoke-rc.d samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.
Intgration au domaine
net ads join -U <un login d'Administrateur du domaine> -S <adresse d'un
contrleur de domaine>
En principe, un message doit vous annoncer que l'opration s'est bien droule et vous devriez
retrouver votre proxy dans les computers dans votre mmc de gestion de Active
Directory Users and Computers
Vrification
La commande wbinfo doit vous permettre de vrifier que vous avez correctement accs
aux listes des utilisateurs et des groupes du domaine ActiveDirectory :
# wbinfo -u
invit
machin
administrateur
...
# wbinfo -g
BUILTIN/administrators
BUILTIN/users
ordinateurs du domaine
utilisa. du domaine
propritaires crateurs de la stratgie de groupe
administrateurs du schma
contrleurs de domaine
invits du domaine
diteurs de certificats
...
A ce moment, vous avez tout ce qu'il faut pour que squid puisse par la suite identifier les
utilisateurs depuis ActiveDirectory.
N'hsitez pas relancer winbind et samba si besoin est.
Configuration de squid
Squid va devoir utiliser le module ntlm_auth. Ici, il faut savoir quelque chose de plutt
important : Il existe deux modules ntlm_auth, l'un fourni avec samba et l'autre avec squid.
Bien que portant le mme nom, ils ne fonctionnent pas de la mme manire. Dans l'tat actuel
de ma machine de test :
Samba: Version 3.0.28a ;
winbindd: Version 3.0.28a ;
Squid Cache: Version 3.0.STABLE4.
je n'ai pas trouv de solution pour fonctionner avec le ntlm_auth fourni avec Squid.
Comme c'est celui qui vient avec samba qui est le mieux document, nous allons utiliser
celui-ci.
Vrifions dj de faon simple s'il est capable d'authentifier un utilisateur inscrit dans Active
Directory :
# ntlm_auth --username=machin --password=epikoi
NT_STATUS_OK: Success (0x0)
a marche.
Bien entendu, dans Squid, ce sera un peu plus compliqu que a. Nous devons ajouter dans
squid.conf
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-
ntlmssp
Pour indiquer que nous utilisons une authentification ntlm avec le module
/usr/bin/ntlm_auth (fourni par Samba) qui, lui mme, utilisera le protocole squid-2.5-
ntlmssp. Pourquoi squid-2.5-ntlmssp ? Il semble que rien n'ait chang depuis squid-2.5.
Comme ntlm_auth va tre invoqu par l'utilisateur sous l'identit duquel squid est lanc
(proxy pour Debian), il faudra que le rpertoire /var/run/samba/winbindd_privileged
soit accessible en lecture par l'utilisateur proxy. Voyons cela :
# ls -l /var/run/samba
total 604
...
drwxr-x--- 2 root winbindd_priv 17 mar 18 11:56 winbindd_privileged
Un moyen propre de rsoudre le problme est d'ajouter l'utilisateur proxy au groupe
winbindd_priv :
usermod -a -G winbindd_priv proxy
Nous pouvons aussi ajouter ces lignes dans squid.conf
auth_param ntlm children 5
auth_param ntlm keep_alive on
Le nombre de processus peut tre augment suivant le nombre d'utilisateurs qui passent par
notre proxy.
Bien sr, nous avons toujours l'ACL acl password proxy_auth REQUIRED ainsi que
l'autorisation d'accs http_access allow LocalNet password.
Au final :
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-
ntlmssp
auth_param ntlm children 5
auth_param ntlm keep_alive on
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
acl LocalNet src 192.168.0.0/24

acl password proxy_auth REQUIRED

http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost

http_access allow LocalNet password

http_access deny all
icp_access allow all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid3/access.log squid
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
icp_port 3130
coredump_dir /var/spool/squid3
Normalement, en relanant squid tout ceci devrait fonctionner.
Le client est un client du domaine
Si votre client est intgr au domaine et que l'utilisateur a donc ouvert une session authentifie
par un contrleur de domaine, le navigateur (aussi bien IE que FireFox) devraient, s'ils sont
configurs pour utiliser le proxy, envoyer automatiquement Squid les informations
ncessaires l'authentification.
Autrement dit, l'utilisateur ne voit rien de particulier. L'administrateur, lui, verra dans les logs
d'accs Squid (/var/log/squid3/access.log) le nom de l'utilisateur qui a formul les
requtes.
Le client n'est pas un client du domaine
Imaginons qu'un utilisateur ait le droit de connecter son portable sur votre rseau, mais que ce
portable n'est pas intgr au domaine Windows. Dans ce cas, un accs Squid amnera une
fentre de demande d'authentification. L'utilisateur devra alors disposer d'un compte sur le
domaine Microsoft et indiquer son nom d'utilisateur complet :
DOMAINE\machin
Dans notre exemple.
WPAD
Qu'est-ce ?
Web Proxy Auto-Discovery. Dcouverte automatique du proxy. Il s'agit d'un protocole
imagin par Microsoft, qui permet d'effectuer automatiquement le paramtrage d'accs
l'internet de son navigateur. Ce protocole n'est bien sr pas exempt de failles de scurit,
soyez-en conscients si vous dcidez de le mettre en application.
Bien que peu sre, cette mthode reste tout de mme tellement pratique qu'elle est souvent
utilise, et que les navigateurs modernes, aussi bien Internet Explorer que Mozilla Firefox ou
Konqueror savent l'exploiter.
Puisque nous devrons configurer les clients HTTP pour passer par notre proxy, une mthode
automatique simplifiera grandement nos rapports avec les utilisateurs du rseau.
L'objectif atteindre
Voyons un peu les diverses possibilits que propose Mozilla Firefox 2.x :

Par dfaut, bien sr, le butineur est configur pour un accs direct l'internet, mais plusieurs
autres possibilits sont offertes :
Connexion manuelle
C'est probablement le meilleur moyen et aussi le plus sr pour qui sait faire, mais allez
expliquer la manip quelques dizaines (centaines ?) d'utilisateurs dbutants
Adresse de configuration automatique du proxy
Commenons par cette mthode. Il faut crer un fichier nomm (par convention) proxy.pac
la racine d'un site de votre intranet. Ce fichier doit contenir un script (javascript) qui dfinit
une fonction bien particulire (et une seule), qui pourra par exemple ressembler ceci :
function FindProxyForURL(url, host)
{
if(isPlainHostName(host) || dnsDomainIs(host, ".domaine.mrs" ))
{
return "DIRECT";
}
else
{
return "PROXY wpad.domaine.mrs:3128";
}
}
Ce qui, traduit en franais, veut dire :
fonction TrouveLeProxyPourUrl(url, host)
{
si il s'agit du nom de la machine locale
ou
de la machine dont le nom est "tests.domaine.mrs"
ou
de toutes les machines du domaine ".maison.mrs"
nous voulons une connexion directe (sans proxy)

sinon, nous utilisons le proxy "wpad.domaine.mrs" sur le port 3128
}
Bien entendu, il est possible de faire beaucoup plus compliqu, mais ce type de scnario
devrait rpondre la plupart des besoins. Normalement, le serveur http doit disposer du type
mime qui correspond l'extension .pac. C'est le cas du serveur apache fourni dans les
distributions Debian :
application/x-ns-proxy-autoconfig pac

C'est mieux, mais ce n'est pas encore assez simple. L'tape ultime serait de se contenter de
cliquer sur Dtection automatique des paramtres proxy du rseau . Pour y arriver, nous
devons nous plonger un peu dans le protocole WPAD.
Les diffrentes documentations que l'on peut trouver sur le sujet voquent la ncessit de
disposer des structures suivantes :
un serveur http nomm wpad.<votre domaine.tld> (wpad.domaine.mrs dans
l'exemple), qui soit en mesure de fournir un fichier proxy.pac ou wpad.dat ;
l'information pour que le client trouve ce fichier doit quant elle tre donne par l'une
de ces voies :
o une option spcifique envoye au client DHCP, ce qui ncessite l'emploi d'un
serveur dhcp ;
o une rsolution DNS, ce qui ncessite de disposer d'un serveur DNS ou,
dfaut, de renseigner manuellement le fichier hosts de chaque client.
Exprience instructive
Souvent, dans la vie, rien ne vaut l'exprience. Voyons donc avec notre sniffeur favori, ce
qu'il se passe lorsque nous demandons notre navigateur de rechercher une configuration de
proxy de faon automatique.
Nous disposons d'un rseau local, avec un serveur DNS et un domaine en bois : domaine.mrs.
Tous nos clients sont configurs pour effectuer leurs rsolutions de noms avec ce serveur
DNS (192.168.0.250).
Le principe de la manip est simple : le sniffeur va capturer ce qu'il se passe lorsque nous
configurons notre navigateur pour qu'il fasse une recherche automatique du proxy.
Mozilla Firefox 2.x (Windows comme GNU/Linux)
No. Time Source Destination Protocol Info
1 0.000000 192.168.0.10 192.168.0.250 DNS Standard query A
wpad.domaine.mrs
2 0.001591 192.168.0.250 192.168.0.10 DNS Standard query
response, No such name
Firefox cherche trouver l'adresse IP d'un hte qui s'appellerait wpad.domaine.mrs. La
solution DNS devrait donc pouvoir fonctionner, si ce serveur existait sur le rseau.
Internet Explorer 6 et 7 (Windows)
No. Time Source Destination Protocol Info
1 0.000000 192.168.0.10 192.168.0.250 DNS Standard query A
wpad.domaine.mrs
2 0.001591 192.168.0.250 192.168.0.10 DNS Standard query
response, No such name
Mme chose. Pour une fois, les deux navigateurs auraient ils le mme comportement ? C'est
plutt une bonne nouvelle.
Konqueror (GNU/Linux)
No. Time Source Destination Protocol Info
1 0.000000 192.168.0.10 192.168.0.250 DNS Standard query A
wpad.localdomain
2 0.001591 192.168.0.250 192.168.0.10 DNS Standard query
response, No such name
Quand mme, tout n'est pas si simple, ce qui a quelque chose de rconfortant dans le dur
monde de l'informatique. Konqueror recherche wpad.localdomain, alors que Firefox, sur la
mme machine (GNU/Linux Ubuntu 7.04), recherchait bien wpad.maison.mrs. Pourquoi
donc ?
Analyse du fichier /etc/resolv.conf :
# cat /etc/resolv.conf
# generated by NetworkManager, do not edit!

search maison.mrs

nameserver 192.168.0.250
Analyse du fichier /etc/hosts :
# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost ubuntu
Si nous modifions ce fichier comme suit :
# cat /etc/hosts
127.0.0.1 localhost.domaine.mrs localhost ubuntu
Konqueror va adopter un fonctionnement normal :
No. Time Source Destination Protocol Info
1 0.000000 192.168.0.10 192.168.0.250 DNS Standard query A
wpad.domaine.mrs
2 0.001591 192.168.0.250 192.168.0.10 DNS Standard query
response, No such name
Il n'est pas interdit de se demander pourquoi Konqueror adopte une mthode aussi tordue pour
dduire le nom de domaine de la machine hte, alors que le paramtre search du fichier
resolv.conf est justement l pour donner cette information.
Bref, moyennant un minimum de prcautions, les trois navigateurs adoptent le mme
comportement, savoir chercher via DNS un serveur nomm wpad.maison.mrs. Donnons leur
ce qu'ils demandent, en agissant sur notre DNS (ou sur nos fichiers hosts). Comme il est dit
dans les docs que l'on risque d'avoir besoin d'un fichier wpad.dat sur le serveur http, autant le
crer tout de suite :
ln -s /var/www/proxy.pac /var/www/wpad.dat
Nous mettons en route notre sniffeur, nous ouvrons par exemple IE7, et le configurons pour
qu'il rcupre sa configuration proxy de faon automatique, puis nous allons visiter, toujours
par exemple, www.grenouille.com :
No. Time Source Destination Protocol Info
1 0.000000 192.168.0.10 192.168.0.250 DNS Standard query A
wpad.domaine.mrs
2 0.001852 192.168.0.250 192.168.0.10 DNS Standard query
response CNAME tests.domaine.mrs A 192.168.0.128
3 0.003192 192.168.0.10 192.168.0.250 DNS Standard query A
tests.domaine.mrs
4 0.004410 192.168.0.250 192.168.0.10 DNS Standard query
response A 192.168.0.128
...
8 0.008375 192.168.0.10 192.168.0.128 HTTP GET /wpad.dat
HTTP/1.1
...
10 0.009706 192.168.0.128 192.168.0.10 HTTP HTTP/1.1 200 OK
(chemical/x-mopac-input)
...
16 0.021575 192.168.0.10 192.168.0.128 HTTP GET
http://www.grenouille.com/ HTTP/1.1
...
19 0.025318 192.168.0.128 192.168.0.10 HTTP HTTP/1.0 407 Proxy
Authentication Required (text/html)
...
29 8.091195 192.168.0.10 192.168.0.128 HTTP GET
http://www.grenouille.com/ HTTP/1.1
IE7 commence par chercher l'adresse IP de wpad.domaine.mrs (1, 2, 3 et 4), puis il cherche
rcuprer dessus le fichier wpad.dat, comme annonc (8). Le serveur lui rpond (10) :
Frame 10 (519 bytes on wire, 519 bytes captured)
...
Hypertext Transfer Protocol
HTTP/1.1 200 OK\r\n
Request Version: HTTP/1.1
Response Code: 200
Date: Sat, 02 Jun 2007 13:24:49 GMT\r\n
Server: Apache/2.2.3 (Debian) PHP/5.2.0-10+lenny1\r\n
Last-Modified: Sat, 02 Jun 2007 13:05:52 GMT\r\n
ETag: "a00a61-cb-fdcd2c00"\r\n
Accept-Ranges: bytes\r\n
Content-Length: 203
Content-Type: chemical/x-mopac-input\r\n
\r\n
Media Type
Media Type: chemical/x-mopac-input (203 bytes)

0000 00 05 5d 47 f5 c5 00 30 84 3a 8c cd 08 00 45 00 ..]G...0.:....E.
0010 01 f9 34 78 40 00 40 06 82 ac c0 a8 00 80 c0 a8 ..4x@.@.........
0020 00 0a 00 50 06 6f 50 84 34 63 29 a2 04 4d 50 18 ...P.oP.4c)..MP.
0030 16 d0 7f dc 00 00 48 54 54 50 2f 31 2e 31 20 32 ......HTTP/1.1 2
0040 30 30 20 4f 4b 0d 0a 44 61 74 65 3a 20 53 61 74 00 OK..Date: Sat
0050 2c 20 30 32 20 4a 75 6e 20 32 30 30 37 20 31 33 , 02 Jun 2007 13
0060 3a 32 34 3a 34 39 20 47 4d 54 0d 0a 53 65 72 76 :24:49 GMT..Serv
0070 65 72 3a 20 41 70 61 63 68 65 2f 32 2e 32 2e 33 er: Apache/2.2.3
0080 20 28 44 65 62 69 61 6e 29 20 50 48 50 2f 35 2e (Debian) PHP/5.
0090 32 2e 30 2d 31 30 2b 6c 65 6e 6e 79 31 0d 0a 4c 2.0-10+lenny1..L
00a0 61 73 74 2d 4d 6f 64 69 66 69 65 64 3a 20 53 61 ast-Modified: Sa
00b0 74 2c 20 30 32 20 4a 75 6e 20 32 30 30 37 20 31 t, 02 Jun 2007 1
00c0 33 3a 30 35 3a 35 32 20 47 4d 54 0d 0a 45 54 61 3:05:52 GMT..ETa
00d0 67 3a 20 22 61 30 30 61 36 31 2d 63 62 2d 66 64 g: "a00a61-cb-fd
00e0 63 64 32 63 30 30 22 0d 0a 41 63 63 65 70 74 2d cd2c00"..Accept-
00f0 52 61 6e 67 65 73 3a 20 62 79 74 65 73 0d 0a 43 Ranges: bytes..C
0100 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 32 ontent-Length: 2
0110 30 33 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 03..Content-Type
0120 3a 20 63 68 65 6d 69 63 61 6c 2f 78 2d 6d 6f 70 : chemical/x-mop
0130 61 63 2d 69 6e 70 75 74 0d 0a 0d 0a 66 75 6e 63 ac-input....func
0140 74 69 6f 6e 20 46 69 6e 64 50 72 6f 78 79 46 6f tion FindProxyFo
0150 72 55 52 4c 28 75 72 6c 2c 20 68 6f 73 74 29 0a rURL(url, host).
0160 7b 0a 20 20 20 20 69 66 28 69 73 50 6c 61 69 6e {. if(isPlain
0170 48 6f 73 74 4e 61 6d 65 28 68 6f 73 74 29 20 7c HostName(host) |
0180 7c 20 64 6e 73 44 6f 6d 61 69 6e 49 73 28 68 6f | dnsDomainIs(ho
0190 73 74 2c 20 22 2e 6d 61 69 73 6f 6e 2e 6d 72 73 st, ".maison.mrs
01a0 22 20 29 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 " )). {.
01b0 20 20 20 72 65 74 75 72 6e 20 22 44 49 52 45 43 return "DIREC
01c0 54 22 3b 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b T";. } else {
01d0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return
01e0 22 50 52 4f 58 59 20 77 70 61 64 2e 6d 61 69 73 "PROXY wpad.mais
01f0 6f 6e 2e 6d 72 73 3a 33 31 32 38 22 3b 0a 20 20 on.mrs:3128";.
0200 20 20 7d 0a 7d 0a 0a }.}..
Nous retrouvons bien notre javascript dans la rponse. Notez le vilain Media Type:
chemical/x-mopac-input qui est d aux mime.types par dfaut du systme :
# cat /etc/mime.types | grep -e ' dat '
chemical/x-mopac-input mop mopcrt mpc dat zmt
Ce dfaut ne semble pas affecter la configuration automatique qui fonctionne bien, puisque
IE7 va maintenant transmettre notre requte au serveur proxy (16) :
Frame 16 (457 bytes on wire, 457 bytes captured)
...
Hypertext Transfer Protocol
GET http://www.grenouille.com/ HTTP/1.1\r\n
...
Frame 19 (1128 bytes on wire, 1128 bytes captured)
...
Hypertext Transfer Protocol
HTTP/1.0 407 Proxy Authentication Required\r\n
...
Line-based text data: text/html
...
<H1>ERROR</H1>
>H2>Cache Access Denied</H2>
...
While trying to retrieve the URL:
<A HREF="http://www.grenouille.com/">http://www.grenouille.com/</A>
<P>
The following error was encountered:
<UL>
<LI>
<STRONG>
Cache Access Denied.
...
<P>Sorry, you are not currently allowed to request:
<PRE> http://www.grenouille.com/</PRE>
from this cache until you have authenticated yourself.
...
You need to use Netscape version 2.0 or greater, or Microsoft Internet
Explorer 3.0, or an HTTP/1.1 compliant browser for this to work.
...
Comme nous avons requis une identification, c'est le moment de s'excuter. Notez au passage,
dans la trame 29, que le login/password est trs facilement lisible :
Frame 29 (506 bytes on wire, 506 bytes captured)
...
Hypertext Transfer Protocol
GET http://www.grenouille.com/ HTTP/1.1\r\n
Request Method: GET
Request URI: http://www.grenouille.com/
Request Version: HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-excel,
application/vnd.ms-powerpoint, application/msword,
application/x-shockwave-flash, */*\r\n
Accept-Language: fr\r\n
UA-CPU: x86\r\n
Accept-Encoding: gzip, deflate\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n
Proxy-Authorization: Basic dXNlcjE6cGFzc3dvcmQx\r\n
Credentials: machin:epikoi
Proxy-Connection: Keep-Alive\r\n
Host: www.grenouille.com\r\n
\r\n
La suite du dialogue se fait toujours avec le proxy, ce qui dmontre bien que la configuration
automatique a russi.
Il est facile de vrifier que Firefox comme Konqueror fonctionneront galement suivant ce
principe. Les logs de Squid montrent clairement les requtes des clients, avec le nom de
l'utilisateur concern, puisque nous avons ici une identification obligatoire.
Cette configuration automatique peut rester active en permanence. En effet, si le serveur
wpad n'est pas trouv, ou s'il ne fournit pas de script, le navigateur enverra les requtes
directement au serveur cibl par l'URL. A premire vue, cette solution semble bien souple et
bien agrable pour l'utilisateur.
Comment forcer nos utilisateurs utiliser une telle configuration ?
Nous pouvons agir d'une part sur le routeur pour qu'il redirige tout flux sortant sur le port 80
(sauf bien sr celui du proxy) vers notre serveur http local, et configurer celui-ci pour que la
page d'accueil ainsi que l'erreur 404 affichent une explication sur la faon de configurer son
navigateur.
Scurit
Que l'euphorie de la russite ne fasse toutefois pas oublier les questions de scurit (pour le
client surtout)
Le systme revient clairement charger dans le navigateur un script qui va analyser les URL
demandes par le client, et les transmettre, suivant le cas, un serveur mandataire, et ce, de
faon invisible pour l'utilisateur. En d'autres termes, le trafic http (et https) peut tre drout
sur un serveur intermdiaire, sans que l'utilisateur en ait connaissance. Les questions que l'on
devrait se poser seront les suivantes :
Si nous sommes sur un rseau de confiance et que l'administrateur a clairement
annonc ses intentions, tout va encore peu prs pour le mieux, si l'on admet que le
rseau ne peut tre compromis ;
si nous sommes sur un rseau dont nous ne savons rien, nous ne savons pas par o
nous passons (ce peut tre le cas aussi avec un proxy transparent, mais ce dernier est
facilement reprable, par exemple avec un tcptraceroute). Dans ce cas un indlicat
pourrait facilement nous espionner ;
sommes nous certains que nos navigateurs sont assez scuriss pour ne pas accepter
n'importe quoi comme fonction FindProxyForURL ?
Le cas le plus intressant serait sans doute sur un rseau wi-fi non scuris, ouvert tous
SquidGuard
Installation
Autant il est simple de mettre en service une configuration minimale de Squid oprationnelle,
autant squidGuard va ncessiter un travail mticuleux et dlicat. Vous voil prvenu
Installer squidGuard depuis les paquetages Debian
# aptitude install squidguard
Lecture des listes de paquets... Fait
Construction de l'arbre des dpendances
Lecture des informations d'tat... Fait
Lecture de l'information d'tat tendu
Initialisation de l'tat des paquets... Fait
Lecture des descriptions de tches... Fait
Les NOUVEAUX paquets suivants vont tre installs :
libcompress-raw-zlib-perl{a} libcompress-zlib-perl{a} libfont-afm-perl{a}
libhtml-format-perl{a} libhtml-parser-perl{a}
libhtml-tagset-perl{a} libhtml-tree-perl{a} libio-compress-base-perl{a}
libio-compress-zlib-perl{a} libmailtools-perl{a}
libtimedate-perl{a} liburi-perl{a} libwww-perl{a} squidguard
0 paquets mis jour, 14 nouvellement installs, 0 enlever et 0 non mis
jour.
Il est ncessaire de tlcharger 0o/1430ko d'archives. Aprs dpaquetage,
4633ko seront utiliss.
Voulez-vous continuer ? [Y/n/?]
Pas de soucis particuliers pour cette installation.
Un premier point sur la situation
Voyons ce que squidGuard nous a install :
# dpkg -L squidguard
/.
/var
/var/lib
/var/lib/squidguard
/var/lib/squidguard/db
/var/lib/squidguard/squidGuardRobot
/var/log
/var/log/squid
/usr
/usr/bin
/usr/bin/squidGuard
/usr/bin/sgclean
/usr/bin/hostbyname
/usr/share
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/squidguard
/usr/share/doc
/usr/share/doc/squidguard
/usr/share/doc/squidguard/README
/usr/share/doc/squidguard/README.Debian
/usr/share/doc/squidguard/copyright
/usr/share/doc/squidguard/examples
/usr/share/doc/squidguard/examples/RobotUserAgent.pm
/usr/share/doc/squidguard/examples/squidGuard-simple.cgi.gz
/usr/share/doc/squidguard/examples/squidGuard.cgi.gz
/usr/share/doc/squidguard/examples/squidGuardRobot.gz
/usr/share/doc/squidguard/examples/squidGuardRobot.in.gz
/usr/share/doc/squidguard/doc
/usr/share/doc/squidguard/doc/squidGuard.gif
/usr/share/doc/squidguard/doc/configuration.html
/usr/share/doc/squidguard/doc/faq.html
/usr/share/doc/squidguard/doc/index.html
/usr/share/doc/squidguard/doc/installation.html
/usr/share/doc/squidguard/doc/configuration.txt.gz
/usr/share/doc/squidguard/doc/faq.txt.gz
/usr/share/doc/squidguard/doc/installation.txt.gz
/usr/share/doc/squidguard/changelog.Debian.gz
/usr/share/doc/squidguard/NEWS.Debian.gz
/usr/share/doc/squidguard/changelog.gz
/usr/share/doc/squidguard/ANNOUNCE.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/hostbyname.1.gz
/usr/share/man/man1/sgclean.1.gz
/usr/share/man/man1/squidGuard.1.gz
/usr/share/man/man1/update-squidguard.1.gz
/usr/sbin
/usr/sbin/update-squidguard
/etc
/etc/squid
/etc/squid/squidGuard.conf
/usr/share/doc/squidguard/README.html
/usr/share/doc/squidguard/FAQ.html
/usr/share/doc/squidguard/CONFIGURATION.html
/usr/share/doc/squidguard/CONFIGURATION.gz
/usr/share/doc/squidguard/FAQ.gz
L'installation a cr un rpertoire /var/lib/squidguard/db, mais il est vide. Il est destin
contenir nos listes noires et blanches et deux scripts cgi dont nous verrons l'utilit plus tard.
Elle a galement cr un fichier de configuration /etc/squid/squidGuard.conf. Voyons un
peu :
# cat /etc/squid/squidGuard.conf
#
# CONFIG FILE FOR SQUIDGUARD
#

dbhome /var/lib/squidguard/db
logdir /var/log/squid
Il faut indiquer squidGuard o trouver la base de donnes des listes (que nous n'avons pas
encore), ainsi que l'endroit o l'on dsire rcuprer les logs.
#
# TIME RULES:
# abbrev for weekdays:
# s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat

time workhours {
weekly mtwhf 08:00 - 16:30
date *-*-01 08:00 - 16:30
}
SquidGuard sait autoriser ou non l'accs en fonction de plages horaires, si ncessaire. Si des
plages horaires sont dfinies, nous pourrons crire des rgles d'accs spcifiques dans les
plages et hors des plages. Par exemple, nous pouvons autoriser un accs plus ou moins
restreint tous les soirs entre 18h et 20h dans la semaine et entre 10h et 20h les samedis et
dimanche, et tout bloquer en dehors de ces plages, mais pour certains utilisateurs seulement.
#
# REWRITE RULES:
#

#rew dmz {
# s@://admin/@://admin.foo.bar.no/@i
# s@://foo.bar.no/@://www.foo.bar.no/@i
#}
SquidGuard sait, la vole, modifier les URL demandes par les clients dans certaines
conditions. Ce n'est probablement pas une fonction primordiale.
#
# SOURCE ADDRESSES:
#

#src admin {
# ip 1.2.3.4 1.2.3.5
# user root foo bar
# within workhours
#}

#src foo-clients {
# ip 172.16.2.32-172.16.2.100 172.16.2.100 172.16.2.200
#}

#src bar-clients {
# ip 172.16.4.0/26
#}
Les sources sont l pour dfinir des groupes de clients. Les sources dfinies par des adresses
IP sont les plus simples mettre en place. Lorsque l'identification des clients est requise, il
devient galement possible de dfinir des noms d'utilisateurs dans les sources.
#
# DESTINATION CLASSES:
#dest good {
}

dest local {
}

#dest adult {
# domainlist adult/domains
# urllist adult/urls
# expressionlist adult/expressions
# redirect http://admin.foo.bar.no/cgi-
bin/squidGuard.cgi?clientaddr=%a+clientname=%n+clientident=%i+srcclass=%s+t
argetclass=%t+url=%u
#}
Les destinations, comme leur nom l'indique, dfinissent des ensembles de domaines, d'URL
ou d'expressions rgulires appliquer aux URLs.
acl {
# admin {
# pass any
# }

# foo-clients within workhours {
# pass good !in-addr !adult any
# } else {
# pass any
# }

# bar-clients {
# pass local none
# }

default {
pass local none
# rewrite dmz
# redirect http://admin.foo.bar.no/cgi-
bin/squidGuard.cgi?clientaddr=%a+clientname=%n+clientident=%i+srcclass=%s+t
argetclass=%t+url=%u
}
Enfin, les acls permettent de dfinir quelle source peut aller (ou ne pas aller) vers quelle(s)
destination(s). Un ! veut dire NOT (non). Dans cet exemple :
les sources foo-clients, pendant les heures de travail, pourront accder aux
destination good, ne pourront pas accder aux destinations in-addr ni aux
destinations adult. Le any final ne semble pas ncessaire, mais il prcise que toutes
les autres destinations sont possibles ;
les sources bar-clients ne pourront accder qu' la destination local. Ici, le none
final est important, car il bloquera toutes les autres destinations ;
la source default s'applique tous les clients qui ne font pas l'objet d'une acl
particulire.
A premire vue, c'est assez compliqu. Nous verrons que a l'est vraiment.
Le redirect permet, lorsqu'une destination n'est pas autorise, de servir au client une page
explicative. Les scripts cgi fournis avec squidGuard nous serviront ici.
Une premire configuration
Nous n'avons pas encore les moyens de travailler efficacement, nous n'avons pas encore de
base de donnes de destinations, mais nous pouvons dj crire un fichier de configuration
pour squidGuard, pour nous mettre un peu dans le bain.
Notez que, squid3 ou squid, peu importe, squidguard est compil pour trouver sa
configuration dans /etc/squid/squidGuard.conf, mme si nous verrons qu'au moment de s'en
servir avec squid, il est possible de lui indiquer un autre fichier.
Pour viter de perdre beaucoup de temps par la suite, comprendre pourquoi des choses ne
fonctionnent pas comme elles le devraient d'aprs les docs, autant construire notre
configuration l o c'est prvu.
Un squidGuard.conf minimum
Seul la machine de l'admin pourra aller n'importe o, touts les autres htes du rseau resteront
bloqus :
dbhome /var/lib/squidguard/db
logdir /var/log/squid

src admin {
ip 192.168.0.10
}

acl {
admin {
pass any
}

default {
pass none
redirect http://127.0.0.1/cgi-
bin/squidGuard.cgi?clientaddr=%a+clientname=%n+clientident=%i+srcclass=%s+t
argetclass=%t+url=%u
}
}
Notez l'emplacement des logs de squidGuard. Vous pouvez bien entendu les placer ailleurs.
Pensez vrifier que l'utilisateur proxy a accs en criture l o vous voulez placer ces logs.
Il faut maintenant placer le script cgi sur notre apache :
# gunzip /usr/share/doc/squidguard/examples/squidGuard.cgi.gz
# mv /usr/share/doc/squidguard/examples/squidGuard.cgi /usr/lib/cgi-bin/
# chmod +x /usr/lib/cgi-bin/squidGuard.cgi
Enfin, il faut configurer squid3 pour qu'il invoque squidGuard en ajoutant ces lignes la fin
de /etc/squid3/squid.conf :
url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
url_rewrite_children 5
Et demander squid de recharger sa configuration :
# /etc/init.d/squid3 reload
Nous pouvons vrifier que la modification a bien t prise en compte :
# ps aux | grep squid
root 2154 0.0 0.3 6052 1564 ? Ss 13:42 0:00
/usr/sbin/squid3 -D -sYC
proxy 2156 0.0 1.3 10036 7120 ? S 13:42 0:00 (squid) -D
-sYC
proxy 6669 0.0 0.1 2648 704 ? S 16:33 0:00
(squidGuard) -c /etc/squid/squidGuard.conf
proxy 6670 0.0 0.1 2644 708 ? S 16:33 0:00
(squidGuard) -c /etc/squid/squidGuard.conf
proxy 6671 0.0 0.1 2644 708 ? S 16:33 0:00
(squidGuard) -c /etc/squid/squidGuard.conf
proxy 6672 0.0 0.1 2648 712 ? S 16:33 0:00
(squidGuard) -c /etc/squid/squidGuard.conf
proxy 6673 0.0 0.1 2644 704 ? S 16:33 0:00
(squidGuard) -c /etc/squid/squidGuard.conf
...
Un petit test avec une machine dont l'adresse IP n'est pas 192.168.0.10 :

Ce n'est pas trs joli, il manque des informations que nous pourrions avoir, mais le rsultat est
l, nous sommes bien bloqu. En revanche, nous passerons sur la machine dont l'adresse IP
est 192.168.0.10.
Configuration des destinations
Fort heureusement, un ensemble de destinations est activement maintenu par le Centre de
Ressources Informatiques de l'Universit de Toulouse, que nous trouvons ici : ftp://ftp.univ-
tlse1.fr/blacklist/ , vous trouverez les destinations qui vous intressent plus particulirement,
mais nous allons choisir l'archive qui les contient toutes : ftp://ftp.univ-
tlse1.fr/blacklist/blacklists.tar.gz et les installer l o c'est prvu, dans
/var/lib/squidguard/db.
cd /var/lib/squidguard/db/
wget ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz
tar xzf blacklists.tar.gz
cd blacklists
Nous avons toutes les destinations souhaitables :
ls -l | awk '{ print $8, $9, $10 }'

ads -> publicite
adult
aggressive -> agressif
agressif
astrology
audio-video
blog
cleaning
dangerous_material
dating
drogue
drugs -> drogue
filehosting
financial
forums
gambling
games
global_usage
hacking
liste_bu
mail -> forums
marketingware
mixed_adult
mobile-phone
phishing
porn -> adult
proxy -> redirector
publicite
radio
README
reaffected
redirector
sect
sexual_education
shopping
strict_redirector
strong_redirector
tricheur
violence -> agressif
warez
webmail
Notez la prsence de certains alias.
Le fichier global_usage n'est pas une liste de destinations, mais un fichier explicatif sur le
contenu de cette archive.
Avant d'oublier ce dtail majeur, tout le contenu de /var/lib/squidguard/db/blacklists doit tre
accessible en lecture et en criture par l'utilisateur sous l'identit duquel squid tourne. Pour
nous, c'est l'utilisateur proxy :
cd /var/lib/squidguard/db/
chown -R proxy:proxy blacklists
Nous devons maintenant crer un fichier de configuration pour squidGuard, qui tienne compte
de quelques unes de ces destinations. Par exemple : porn, drugs, phishing, marketingware
Cration des destinations
Allons voir ce qu'il y a dans ces divers sous-rpertoires. Le rpertoire porn est sans doute le
plus intressant :
domains contient une liste de domaines interdire ;
expressions est vide ;
nurls contient des URLs ;
urls contient galement des URLs ;
usage indique la nature de cette destination (liste noire, pornographie) ;
very_restrictive_expression contient quelques expressions rgulires bien senties
(attention aux ressources consommes par ces expressions).
Dans squidGuard.conf, nous allons tenir compte de ces divers sous-rpertoires :
dest pornographie {
urllist porn/urls
urllist porn/nurls
domainlist porn/domains
expressionlist porn/very_restrictive_expression
}
Notez que le nom de la destination n'est pas forcment le mme que celui utilis dans les
listes. Rsistez cependant la tentation :
de placer des lettres accentues dans les noms des destinations, squidGuard ne saura
les interprter ;
de placer des espaces dans ces noms, squidGuard ne les interprtera pas non plus.
Vous avez compris le principe ? Voici un fichier de configuration qui devrait faire l'affaire,
dans un premier temps :
dbhome /var/lib/squidguard/db/blacklists
logdir /var/log/squid

src admin {
ip 192.168.0.10
}

src users {
ip 192.168.0.0/24
}

dest pornographie {
urllist porn/urls
urllist porn/nurls
domainlist porn/domains
expressionlist porn/very_restrictive_expression
}

dest drogues {
urllist drugs/urls
domainlist drugs/domains
}

dest phishing {
urllist phishing/urls
domainlist phishing/domains
}

dest marchands_de_guerre {
urllist marketingware/urls
domainlist marketingware/domains
}

acl {
admin {
pass any
}

users {
pass !pornographie !drogues !phishing !marchands_de_guerre
any
redirect http://127.0.0.1/cgi-
bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&t
argetclass=%t&url=%u
}

default {
pass none
redirect http://127.0.0.1/cgi-
bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&t
argetclass=%t&url=%u
}
}
Notez l'acl pour les users , ce sont bien les noms des destinations qu'il faut utiliser et non
pas les noms des rpertoires dans la base de donnes.

Bon gros avertissement
Faites trs attention ce que vous crivez dans ce fichier de configuration, les fautes de frappe
sont trs vite arrives, les copier/coller peuvent entraner des oublis, certains rpertoires de
listes contiennent des domaines, des urls, des expressions, d'autres non. Il faut tre trs
minutieux dans cette criture, les causes d'erreurs sont trs nombreuses ! (Vous voil
prvenus).
Il existe cependant, comme nous allons le voir, un moyen de vrifier qu'il n'y a pas d'erreurs.
En effet, ce n'est pas parce que le le fichier de configuration est rdig que le travail est
termin. SquidGuard, pour pouvoir travailler rapidement, n'utilise pas les fichiers texte, mais
des bases de donnes au format Berkeley. Il est vivement conseill de construire ces bases
avant le dmarrage de squid (et donc de squidGuard), faute de quoi, ces bases seront
construites la vole, pour chaque instance de squidGuard. Nous en avons ici 5, mais pour un
gros site, 20 25 peut tre plus adapt. Dans de telles conditions, le dmarrage peut largement
dpasser le quart d'heure !
La commande squidGuard -C all va permettre de construire ces bases de donnes sur
disque, et squidGuard les utilisera alors au dmarrage, ce qui fera gagner normment de
temps.
su proxy
squidGuard -C all
Et nous en profitons pour aller voir le fichier de logs de squidGuard :
tail -f /var/log/squid/squidGuard.log
2007-06-07 18:14:54 [6815] init urllist
/var/lib/squidguard/db/blacklists/porn/urls
2007-06-07 18:14:55 [6815] create new dbfile
/var/lib/squidguard/db/blacklists/porn/urls.db
2007-06-07 18:14:55 [6815] init urllist
/var/lib/squidguard/db/blacklists/porn/nurls
2007-06-07 18:14:56 [6815] create new dbfile
/var/lib/squidguard/db/blacklists/porn/nurls.db
2007-06-07 18:14:56 [6815] init domainlist
/var/lib/squidguard/db/blacklists/porn/domains
2007-06-07 18:15:43 [6815] create new dbfile
/var/lib/squidguard/db/blacklists/porn/domains.db
2007-06-07 18:15:45 [6815] init expressionlist
/var/lib/squidguard/db/blacklists/porn/very_restrictive_expression
2007-06-07 18:15:45 [6815] init urllist
/var/lib/squidguard/db/blacklists/drugs/urls
2007-06-07 18:15:45 [6815] create new dbfile
/var/lib/squidguard/db/blacklists/drugs/urls.db
2007-06-07 18:15:45 [6815] init domainlist
/var/lib/squidguard/db/blacklists/drugs/domains
2007-06-07 18:15:45 [6815] create new dbfile
/var/lib/squidguard/db/blacklists/drugs/domains.db
2007-06-07 18:15:45 [6815] init urllist
/var/lib/squidguard/db/blacklists/phishing/urls
2007-06-07 18:15:45 [6815] urllist empty, removed from memory
2007-06-07 18:15:45 [6815] init domainlist
/var/lib/squidguard/db/blacklists/phishing/domains
2007-06-07 18:15:45 [6815] create new dbfile
/var/lib/squidguard/db/blacklists/phishing/domains.db
2007-06-07 18:15:45 [6815] init urllist
/var/lib/squidguard/db/blacklists/marketingware/urls
2007-06-07 18:15:45 [6815] urllist empty, removed from memory
2007-06-07 18:15:45 [6815] init domainlist
/var/lib/squidguard/db/blacklists/marketingware/domains
2007-06-07 18:15:45 [6815] create new dbfile
/var/lib/squidguard/db/blacklists/marketingware/domains.db
2007-06-07 18:15:45 [6815] squidGuard 1.2.0 started (1181232894.801)
2007-06-07 18:15:45 [6815] db update done
2007-06-07 18:15:45 [6815] squidGuard stopped (1181232945.727)
Vous devriez pouvoir reprer toute erreur dans ces logs.
Un second point sur la situation
Il est donc ncessaire de porter une grande attention la rdaction du fichier de
configuration ;
il est galement ncessaire de construire les bases de donnes berkeley aprs avoir
crit le fichier de configuration, car seules les destinations dfinies dans ce fichier
seront compiles (vous trouverez des fichiers domains.db et urls.db dans les
destinations utilises). Autrement dit, si vous devez ajouter une configuration par la
suite, il faudra penser la compiler ;
squidGuard -C all part du principe que le fichier de configuration de squidGuard se
trouve (pour Debian) dans /etc/squid/. Si vous voulez tout prix placer sa
configuration ailleurs, il vous faudra utiliser l'option -c : squidGuard -c
/etc/squid3/squidGueard.conf -C all par exemple ;
le fichier de logs de squidGuard est d'un grand secours pour cette opration, car il
avertira de tout problme de configuration.
La commande squidGuard sait galement faire quelques autres choses (man squidguard )
Mais nous sommes encore trs loin du compte

Puisqu'on n'est pas l pour raliser une passoire, signalons tout de mme ceci :
squidQuard redirige les URI interdits vers un URI local, gnralement destin
expliquer pourquoi le site convoit a t bloqu. Gnralement, il s'agit d'un script CGI.
Si cet URI de redirection n'est pas indiqu, ne sachant pas o rediriger les requtes
interdites, squidGuard les laissera tout de mme passer, ralisant ainsi une pernicieuse
passoire !!!
Il est donc impratif d'installer un tel script ou, dfaut, une page d'avertissement quelconque
vers laquelle rediriger les URI interdits.
Le paquetage Debian de squidGuard n'installe rien ce propos, mais vous trouverez dans
/usr/share/doc/squidguard/examples deux scripts dont vous pourrez vous inspirer ou essayer
d'utiliser en l'tat (aprs les avoir installs dans /usr/lib/cgi-bin et rendus excutables).
Mais ce n'est pas tout, il vous faudra aussi revenir sur l'ACL Default, pour spcifier la
redirection :
http://127.0.0.1/cgi-
bin/squidGuard.cgi?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u
Cette ligne part du principe que vous avez sur la machine locale un serveur HTTP en tat de
marche et qu'il dispose d'un script squidGuard.cgi. Les paramtres transmis dans cet exemple
permettent de communiquer au script toutes les informations ncessaires pour identifier les
circonstances du blocage.
Bien entendu, ce script, ou un autre (page php comprise) peuvent tre situs sur une machine
autre, il suffit de rdiger l'URI de redirection en fonction.
+ sur SquidGuard
De la fiabilit des blacklists
Il n'est absolument pas question de critiquer le travail fourni par l'Universit de Toulouse,
mais les listes que nous utilisons ici comportent quelques dfauts :
elles rfrencent des sites ou des sous-sites que ne devraient pas forcment l'tre. Les
robots qui cherchent des mots-cls peuvent en trouver sur des pages anodines ;
elles ne rfrencent pas des sites qui devraient l'tre. L'internet est un monde mouvant
o rien n'est crit dans le marbre.
Ne vous attendez donc pas un filtrage parfait. Vous aurez sans doute des appels de vos
utilisateurs qui se plaindront de ne pouvoir accder des pages parfaitement acceptables, de
mme qu'il vous faudra surveiller que des pages indsirables ne passent pas travers votre
filtrage.
Les listes publies par l'Universit de Toulouse sont rgulirement mises jour, vous de
suivre leurs volutions.
Stratgies de filtrage
Il y a deux stratgies de base, dans tout mode de contrle d'accs :
Tout est bloqu sauf...
Ici, nous interdisons tous les sites priori, et utilisons alors des listes blanches qui
contiendront les seules destinations autorises. Cette mthode, trs totalitaire, peut tout de
mme tre envisage dans certains cas. Trs peu de destinations seront accessibles, mais vous
les aurez choisies avec soin
Il vous faudra construire ces listes blanches et crire des acls du genre :
pass liste_1 liste_2 liste_3 none
o liste_1, liste_2 et liste_3 sont vos listes blanches. Elles se construisent
exactement comme une liste noire.
Tout est permis sauf...
Ici, nous utilisons bien les listes noires, comme vu plus haut, avec les risques que nous avons
dj voqus. Il s'agit sans doute de ce que vous prfrerez mettre en place dans la plupart des
cas.
Stratgies de maintenance
Si vous allez jeter un il dans les fichiers de blacklists, vous constaterez que certains sont trs
volumineux (pronographie, par exemple). Il est certes possible de modifier ces fichiers en
fonction de vos observations, pour retirer des destinations qui ne devraient pas tre bloques,
ou ajouter des destinations manquantes. L'inconvnient de ce systme est qu'il faut
reconstruire l'intgralit de la base de donnes (.db) associe ce fichier aprs chaque
modification, ce qui peut prendre du temps.
Une autre mthode consiste utiliser des fichiers de diffrences. Cette mthode permet des
corrections rapides, mais dsynchronise les bases de donnes et les fichiers textes. Il suffit de
crer un fichier domains.diff et/ou urls.diff dans le rpertoire qui contient les urls et les
domaines ajouter (mettez un + devant) ou enlever (mettez un - devant) puis de lancer
squidguard -u. Cette opration permettra rapidement de mettre jour les fichiers .db mais ne
touchera pas aux fichiers texte correspondant. Il faudra ensuite enlever les fichiers .diff
cres.
Si vous adoptez cette mthode sans plus de prcautions, vos sources texte ne seront
rapidement plus du tout l'image des bases de donnes Berkeley.
Exemple d'un fichier domains.diff :
-laposte.net
+playboy.com
Ce fichier plac dans le rpertoire porn permettra rapidement d'ajouter playboy.com et de
retirer laposte.net du fichier domains.db, par la commande :
squidGuard -u
suivie de :
squid -k reconfigure
L'opration est trs rapide et vos modifications resteront prennes aprs mise jour des listes
noires.
Outils de surveillance
Il existe plusieurs outils destins exploiter les logs de squid, principalement le log
access.log, parmi lesquels Calamaris, Mysar (MySQL Squid Access Report), et bien
d'autres encore.
Calamaris comme Mysar offrent l'avantage de permettre de dcouvrir facilement quels sont
les sites les plus visits et donc de trouver assez simplement les fuites de votre filtrage.
Virtual Private Network
Les tunnels
Grce un tunnel, il est possible de passer directement d'un point un autre, sans devoir subir
les affres de la circulation la surface. Les tunnels informatiques s'en rapprochent fortement,
en proposant un moyen de relier directement deux rseaux privs distants, travers un
inter-rseau aussi complexe que l'internet.
Il existe une grande quantit de moyens pour raliser des tunnels informatiques. PPP peut tre
considr comme un tunnel dans des configurations comme PPPoE ou PPPoA. L2TP (Layer 2
Tunneling Protocol), est utilis sur les rseaux des oprateurs, par exemple dans les
connexions ADSL non dgroupes.
PPTP (Point to Point Tunneling Protocol), utilis par Microsoft, ou encore les tunnels sur
IPSec sont d'autres solutions. L'objectif de ce chapitre est de monter le fonctionnement d'un
tunnel sur IP travers une implmentation standardise : le tunnel GRE, puis travers une
solution plus scurise : OpenVPN.
Merci _SebF, crateur du site frameip.com, pour son aimable collaboration.
Le principe
Imaginons que nous ayons intervenir sur deux rseaux privs diffrents, gographiquement
loigns, les rseaux A et B. Si nous voulons interconnecter ces deux rseaux, nous avons
priori deux possibilits :
L'une chre, qui consiste utiliser une liaison spcialise, propose par tout bon
oprateur de tlcoms. Les technologies utilises par ces oprateurs afin de crer notre
rseau priv sont principalement du type ATM
1)
, MPLS
2)
et, plus anciennement,
Frame Relay.
Les avantages apports sont la garantie d'un SLA
3)
et d'une tanchit renforce,
l'autre, moins chre, qui consiste interconnecter ces deux rseaux via de l'internet
public.
Oui, mais la seconde solution, priori moins chre, sera plus limitative.
Soit, comme c'est le plus souvent le cas, nous ne disposerons que d'une seule adresse
IP publique pour accder chaque rseau et dans ce cas, nous ne pourrons pas faire
facilement communiquer n'importe quelle machine du rseau A avec n'importe quelle
machine du rseau B, puisque ces LANs seront monts avec des adresses IP prives.
(Voyez le Partage de connexion, mis en uvre dans de telles configurations),
Soit nous disposons de suffisamment d'adresses IP publiques pour monter nos rseaux
avec ces adresses, mais alors, toutes nos machines seront directement exposes sur le
Net. Cher et difficile (il n'est pas simple, et encore moins gratuit d'obtenir des plages,
mme petites, d'adresses IPv4 publiques, encore qu'avec IPv6, ce sera tout fait
ralisable) et pour le moins dangereux.
Comment faire alors ?
Crer une ligne spcialise virtuelle, qui passera par l'internet, mais qui fonctionnera presque
comme une liaison spcialise. Bien sr, pour ce faire, un tunnel est ncessaire afin de crer
l'interconnexion, de garantir l'tanchit. L'avantage est de ne pas tre dpendant d'un
oprateur et ainsi, de pouvoir choisir la sortie Internet de chaque site indpendamment les
unes des autres. Rien en effet n'interdit de construire plusieurs tunnels, ventuellement sur des
connexions internet diffrentes. Nous disposons de plusieurs technologies telles que PPtP,
IPSec et celles qui nous intressent dans cette documentation : Le tunnel GRE et OpenVPN.
Au niveau IP, un tunnel se prsente comme ceci :

Et nous aurons l'impression d'avoir peu prs cela :
Bien que la
premire couche IP circule normalement sur l'internet, en suivant les routes dfinies par les
oprateurs, celle-ci transporte une seconde couche IP et sur cette couche, tout va se passer
comme si les deux routeurs communiquaient directement, par l'intermdiaire d'un rseau IP ne
comportant que deux nuds : les deux routeurs.
Grce ce tunnel, tout nud du rseau A pourra communiquer avec tout nud du rseau B,
les deux rseaux tant construits avec des adresses IP prives.
Super non ?
Oui, mais souvenez-vous que IPv4 est un protocole qui n'est pas scuris, que nous allons
l'utiliser et qui plus est, sur un rseau plutt mal fam. L'opration n'est donc pas sans risques.
Comment a marche
Toujours le mme principe, l'encapsulation d'un protocole dans un autre protocole de mme
niveau. Le plus souvent, nous encapsulerons de l'IP dans de l'IP. Mais pour mieux
comprendre, il nous faut poser le problme de faon plus prcise.
Description des rseaux

Rseau A Rseau B
Adresses : 172.16.0.0 192.168.0.0
Masque : 255.255.0.0 255.255.255.0
Routeur ct LAN : 172.16.254.1 192.168.0.252
Routeur ct Internet : 81.248.152.18 80.8.147.232
Les routeurs A et B peuvent discuter entre eux travers l'internet, puisqu'ils disposent tous
deux d'une adresse IP publique. Au niveau IP, le transfert de donnes est donc ralisable.
Sur cette couche IP, nous encapsulons une seconde couche IP, qui va faire de telle sorte que
l'ensemble des routeurs A et B avec le tunnel entre les deux, apparaisse comme un unique
routeur, directement connect aux rseau A et B, et qui aura :
172.16.254.1 dans le rseau A
192.168.0.252 dans le rseau B
Nous sommes entre deux rseaux privs, interconnects par un routeur, rien que de bien
classique.
Dmonstration
Peu importe pour l'instant, la faon dont le tunnel est cr. Depuis un hte de rseau B d'IP
192.168.0.10 , nous faisons un traceroute vers l'hte du rseau A d'IP 172.16.252.2 :
C:\>tracert -d 172.16.252.2
Dtermination de l'itinraire vers 172.16.254.2 avec un maximum de 30
sauts.
1 <1 ms <1 ms <1 ms 192.168.0.252
2 60 ms 63 ms 59 ms 172.16.254.1
3 75 ms 63 ms 61 ms 172.16.252.2

Itinraire dtermin.
Et pourtant, si l'on cherche la vraie route , celle qui est rellement emprunte par le tunnel,
nous aurons quelque chose de cette forme entre les deux routeurs :
gw2:~# traceroute -n -I 81.248.152.18
traceroute to 81.248.152.18, 30 hops max, 38 byte packets
1 80.8.160.1 49.763 ms 32.095 ms 8.960 ms
2 172.19.46.65 10.883 ms 8.700 ms 11.688 ms
3 193.252.227.82 17.019 ms 23.244 ms 22.403 ms
4 80.10.209.233 38.494 ms 12.467 ms 12.732 ms
5 81.248.152.18 58.968 ms 60.676 ms 60.891 ms
Bien entendu, le vrai chemin peut tre beaucoup plus long, si les deux rseaux A et B sont
plus loigns, mais le chemin par le tunnel gardera sa simplicit dans tous les cas.
Mise en uvre
Pour dmontrer le fonctionnement des tunnels, nous verrons deux outils possibles :
Le tunnel GRE ;
Open VPN ;
1)
Asynchronous Transfer Mode.
TTA en franais (technologie temporelle asynchrone). Technologie de rseau haut dbit
(centaines de Mbit/s, jusqu' 2.5 Gbit/s) trs srieusement normalise et prsente comme une
solution d'avenir. Les donnes sont transmises sous forme de paquets de taille fixe (53 octets
de long), appels cellule. Originellement conu pour la voix et les WANs, l'ATM est en train
de passer aux LANs. Cette technologie semble prendre l'ascendant en ce moment sur ses
concurrentes. Le principal problme tant la rapidit de commutation, qui doit tre leve vue
la taille des cellules. Voir aussi frame relay . En plus, c'est Made in France, mais personne
ne le sait.
2)
MultiProtocol Label Switching.
Technique conue par l'IETF pour faire remonter des informations de niveau 2 OSI, comme la
bande passante ou la latence d'un lien, dans la couche 3 (e.g. IP). Cela permet de grer un peu
mieux les ressources disponibles au sein d'un rseau.
3)
Service Level Agreement.
Accord entre un client et un fournisseur sur le niveau de qualit de service offert par ce
dernier. Le SLA est souvent suivi d'un SLM : Service Level Management. Gestion de la
qualit de service, lors de laquelle on s'assure que le fournisseur tient bien ses promesses d'un
point de vue qualitatif.

Das könnte Ihnen auch gefallen