Professional Documents
Culture Documents
Jacques Morel
morel@phase.c-strasbourg.fr
0.1 Présentation
Ce document est un cours. Il est largement inspiré de l’aide directe, de
conseils, d’écrits ou de contributions dans différents forums des personnes sui-
vantes : Benoı̂t Speckel (PLIP, SSF, clonage), Guy Brand (sécurité, sendmail),
Joel Kociolek (PPP, Hylafax, Masquerading), Alain Thivillon (Samba, ipchains),
Pascal Gris (Apache), Marc Grunberg (PPP), Alain Cote et Jean Jacques Pan-
siot (TCP-IP), Jean Luc Archimbaud (sécurité), Frédéric Couchet de April
(CGI) et enfin Olaf Kirch pour tout. Il reste sans nul doute bien des lacunes
et des erreurs. Les chapitres sur SNMP, PHP sont en préparation. Je publie
néammoins ce texte parce qu’il peut être utile à certains et qu’en retour la cri-
tique est stimulante. Si ce texte est réutilisé, veuillez être assez aimable pour
faire référence à mon labeur. Ce cours a été fait avec la distribution Linux De-
bian 2.1 et le noyau 2.2.16. Il est en cours de modification pour la Debian 3.1.
Avertissement :
Ce document date d’un cours fait en 2000 et n’a jamais été repris, hormis
quelques corrections d’erreurs. Voici quelques remarques que l’on peut faire sur
les chapitres :
– TCP-IP : reste valable. Il n’y a rien sur IPv6. Des notes sur dhcp ont été
rajoutées.
– Serveur DNS BIND : un peu mis à jour mais incomplet.
– PLIP : reste valable
– PPP : à reprendre. Il manque une introduction sur le port série et les
modems. PPPOE pour connexions ADSL est à écrire.
– Sécurité réseau : totalement à reprendre.
– Filtrage, routage : obsolète. A refaire pour iptables.
– Cryptage par ssf : obsolète. A refaire pour openssh (interdit en France à
l’époque).
– Clonage machine Debian : à refaire pour la distributions sarge. Mais les
idées restent valables.
– Sendmail : totalement insuffisant et obsolète.
– Apache : reste valable. Manque apache-ssl.
– Samba : reste valable.
– Netatalk : reste valable.
– Hylafax : incomplet mais reste valable.
Sont à rédiger les chapitres :
– openssl
– php
– Webmail IMP
– Base de données Postgres
– snmp
– Wifi ! ! !
Table des matières
0.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1 Introduction 11
1.1 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3
4 TABLE DES MATIÈRES
5 PPP 67
5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.1.1 Description de PPP : HDLC, LCP, IPCP, CCP . . . . . . 67
5.1.2 Documentation . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2 Installation de PPP . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.2.1 Support de PPP par le noyau . . . . . . . . . . . . . . . . 68
5.2.2 Logiciel ppp-2.3.5-2 . . . . . . . . . . . . . . . . . . . . . 69
5.2.3 mgetty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.2.4 Arborescence des fichiers PPP . . . . . . . . . . . . . . . 69
5.3 Configuration du modem et du port série. . . . . . . . . . . . . . 70
TABLE DES MATIÈRES 5
10 Sendmail 129
10.1 Le service de mail de l’Internet . . . . . . . . . . . . . . . . . . . 129
10.2 SMTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
10.2.1 Codes retour . . . . . . . . . . . . . . . . . . . . . . . . . 130
10.2.2 Test d’un service SMTP . . . . . . . . . . . . . . . . . . . 130
10.2.3 Vérification de l’existence d’une boı̂te aux lettres . . . . . 130
10.2.4 Vérification d’un alias . . . . . . . . . . . . . . . . . . . . 131
10.3 Extensions à SMTP : ESMTP, MIME . . . . . . . . . . . . . . . 131
10.4 Interaction avec le DNS . . . . . . . . . . . . . . . . . . . . . . . 132
10.5 Caractéristiques de Sendmail . . . . . . . . . . . . . . . . . . . . 132
10.6 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
10.7 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
10.7.1 Documentation sur la configuration . . . . . . . . . . . . . 133
10.8 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
10.8.1 Une configuration de ”mail host” . . . . . . . . . . . . . . 134
10.8.2 Limitation de la taille des messages . . . . . . . . . . . . . 135
10.8.3 Suppression de la résolution d’alias par EXPN . . . . . . 136
10.8.4 Une configuration de null client . . . . . . . . . . . . . . . 136
10.8.5 Sites miroirs pour tests . . . . . . . . . . . . . . . . . . . 136
10.9 Exploitation de sendmail . . . . . . . . . . . . . . . . . . . . . . . 137
10.9.1 Sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
10.9.2 Commandes d’exploitation . . . . . . . . . . . . . . . . . 137
10.9.3 Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
10.9.4 Réglages fins . . . . . . . . . . . . . . . . . . . . . . . . . 137
10.9.5 Fichier Log . . . . . . . . . . . . . . . . . . . . . . . . . . 138
10.10Routage d’un domaine virtuel avec sendmail . . . . . . . . . . . . 138
11 Apache 141
11.1 Le serveur WWW Apache . . . . . . . . . . . . . . . . . . . . . . 141
11.1.1 WWW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
11.1.2 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
11.2 Caractéristiques de Apache . . . . . . . . . . . . . . . . . . . . . 144
11.3 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
11.4 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
11.5 Lancement de Apache . . . . . . . . . . . . . . . . . . . . . . . . 145
11.6 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
11.6.1 Paramètres généraux . . . . . . . . . . . . . . . . . . . . . 146
11.6.2 Configuration des ressources . . . . . . . . . . . . . . . . . 147
11.6.3 Restrictions d’accès . . . . . . . . . . . . . . . . . . . . . 147
11.7 Les modules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
11.8 Virtual hosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
11.9 Content negotiation . . . . . . . . . . . . . . . . . . . . . . . . . 153
11.9.1 Multiviews . . . . . . . . . . . . . . . . . . . . . . . . . . 153
11.9.2 Handler type-map . . . . . . . . . . . . . . . . . . . . . . 154
11.10Restrictions d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . 154
11.11Autres capacités de Apache . . . . . . . . . . . . . . . . . . . . . 155
11.12Maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
8 TABLE DES MATIÈRES
13 Samba 171
13.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
13.2 Protocoles Microsoft . . . . . . . . . . . . . . . . . . . . . . . . . 171
13.2.1 Ports ouverts sur les machines Windows Microsoft . . . . 173
13.2.2 Configuration des clients réseau Microsoft sur Windows . 173
13.3 Commandes Lan-Manager sous DOS . . . . . . . . . . . . . . . . 174
13.3.1 Commandes net . . . . . . . . . . . . . . . . . . . . . . . 174
13.3.2 Interrogation de noms NetBIOS . . . . . . . . . . . . . . . 174
13.4 Le logiciel Samba . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
13.4.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . 174
13.4.2 Description . . . . . . . . . . . . . . . . . . . . . . . . . . 175
13.4.3 Utilitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
13.4.4 Documentation . . . . . . . . . . . . . . . . . . . . . . . . 175
13.5 Configuration de Samba . . . . . . . . . . . . . . . . . . . . . . . 175
13.5.1 Structure et syntaxe . . . . . . . . . . . . . . . . . . . . . 176
13.5.2 Section ”global” . . . . . . . . . . . . . . . . . . . . . . . 176
13.5.3 Partage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
13.5.4 Section ”homes” . . . . . . . . . . . . . . . . . . . . . . . 178
13.5.5 Section ”printers” . . . . . . . . . . . . . . . . . . . . . . 178
13.5.6 Partage accessible par tous en lecture/écriture . . . . . . 179
13.5.7 Partage accessible par tous en lecture, réservé en écriture 179
13.5.8 Partage à accès réservé . . . . . . . . . . . . . . . . . . . 179
13.5.9 Authentification . . . . . . . . . . . . . . . . . . . . . . . 179
13.6 Audit : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
13.7 Incidents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
13.8 Accès depuis Unix aux ressources Windows . . . . . . . . . . . . 181
13.8.1 smbclient : accès aux fichiers Windows à la ftp . . . . . 181
13.8.2 Messages Winpopup . . . . . . . . . . . . . . . . . . . . . 182
13.8.3 smbtar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
13.8.4 smbmount . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
13.8.5 smbprint . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
13.9 Applications de samba . . . . . . . . . . . . . . . . . . . . . . . . 183
13.9.1 Distribution de logiciels pour Windows . . . . . . . . . . . 183
13.9.2 Fonction Primary Domain Controller de Samba . . . . . 183
13.9.3 Installation partagée de drivers d’imprimante pour W9x . 184
TABLE DES MATIÈRES 9
15 HylaFAX 191
15.1 Les normes de fax . . . . . . . . . . . . . . . . . . . . . . . . . . 191
15.1.1 Standard ITU : Groupes de Fax . . . . . . . . . . . . . . 191
15.1.2 Standards ITU de vitesse de transmission . . . . . . . . . 191
15.1.3 Protocoles d’envoi de fax . . . . . . . . . . . . . . . . . . 191
15.2 Fonctions de HylaFAX . . . . . . . . . . . . . . . . . . . . . . . . 194
15.3 Sur quelles machines fonctionne Hylafax ? . . . . . . . . . . . . . 194
15.4 Choisir et installer un modem : . . . . . . . . . . . . . . . . . . . 195
15.4.1 Hylafax et les modems : . . . . . . . . . . . . . . . . . . . 195
15.4.2 Les modems recommandés : . . . . . . . . . . . . . . . . . 195
15.4.3 Installer le modem sur un PC . . . . . . . . . . . . . . . . 195
15.5 Installation de HylaFAX . . . . . . . . . . . . . . . . . . . . . . . 196
15.5.1 Prérequis : . . . . . . . . . . . . . . . . . . . . . . . . . . 196
15.5.2 Procédure d’installation . . . . . . . . . . . . . . . . . . . 196
15.5.3 Documentation . . . . . . . . . . . . . . . . . . . . . . . . 196
15.6 Configuration de HylaFAX . . . . . . . . . . . . . . . . . . . . . 196
15.6.1 Les scripts de configuration . . . . . . . . . . . . . . . . . 196
15.6.2 Les fichiers de configuration : . . . . . . . . . . . . . . . . 197
15.6.3 Démarrage de HylaFAX . . . . . . . . . . . . . . . . . . . 197
15.7 Envoi d’un fax . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
15.7.1 Commande d’envoi de fax sur Unix : sendfax . . . . . . . 197
15.7.2 Contrôle de l’envoi : . . . . . . . . . . . . . . . . . . . . . 198
15.8 Réception d’un fax . . . . . . . . . . . . . . . . . . . . . . . . . . 198
15.9 Configuration des clients Hylafax sur une machine Linux . . . . . 199
15.10Les clients HylaFAX . . . . . . . . . . . . . . . . . . . . . . . . . 199
15.11Gestion du serveur HylaFAX . . . . . . . . . . . . . . . . . . . . 200
15.11.1 Optimisation des envois . . . . . . . . . . . . . . . . . . . 200
15.11.2 Contrôle d’accès . . . . . . . . . . . . . . . . . . . . . . . 200
15.11.3 Statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . 201
15.11.4 Incidents . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
15.12Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
10 TABLE DES MATIÈRES
Chapitre 1
Introduction
Linux sur PC Intel est une plateforme économique, fiable et polyvalente pour
faire un serveur réseau.
Linux supporte les protocoles :
– TCP/IP (v4) : logiciel fiable, drivers de qualité pour les cartes Ethernet
(10Base-T, 100Base-TX, Gigabit Ethernet) et les cartes PCMCIA, ser-
veurs les plus usités sur le net : Apache, sendmail, ...
– UUCP : ancien mais encore utile pour des connexions téléphoniques inter-
mittentes sur des réseaux peu fiables.
– IPv6, amélioration de IP v4 pour répondre à la croissance d’Internet
– IPX/SPX (Novell Netware) : routeur, serveur, client
– Ethertalk : serveur Netatalk : partage des fichiers par AFP, des impri-
mantes par PAP
– LAN-Netbios Microsoft : serveur Samba
– PPP : pppd client et serveur. Nombreuses cartes séries multiports pour
serveurs d’accès à Internet.
– ISDN (RNIS en français comme le service Numeris de FT), support dans
le noyau pour les cartes ISDN PC.
– PLIP : Ip sur port parallèle au moyen d’un câble Null-Printer ou Lap-Link
– ADSL : le support des modems Alcatel de France Telecom est assuré par
PPTP et PPPOE.
Linux est une excellente plateforme aussi bien comme serveur INTERNET
(www, ftp, mail) que comme serveur Intranet pour des PC Windows ou des
Apple Macintosh.
Linux dispose de logiciels permettant de supporter une charge réseau impor-
tante et de fonctionnalités comme le load balancing, le forward de port, permet-
tant de répartir la charge entre plusieurs serveurs. Environ 30% des serveurs sur
Internet sont des machines Linux.
Par ailleurs, Linux sait router, filtrer, masquer les paquets IP. Un simple PC
Linux muni de plusieurs interfaces réseaux permet de connecter un réseau privé
à Internet et d’assurer des fonctions de garde-barrière (firewall), pour protéger
le réseau privé des incursions et des fonctions de serveur proxy pour faire des
requêtes sur Internet par délégation pour le compte des machines du réseau
privé.
Linux sait également faire du tunelling qui permet de faire voir une machine
distante (un PC portable connecté via un ISP et bientôt par téléphone portable)
11
12 CHAPITRE 1. INTRODUCTION
1.1 Documentation
Avant tout il faut lire The Linux Network Administrator’s Guide, ver-
sion 1.0 de Olaf Kirch dernière mise à jour de mars 96. Edité chez O’Reilly et
déchargeable sur le net :
ftp://ftp.lip6.fr/pub/linux/sunsite/docs/LDP/network-guide/nag-1.0.ps.tar.gz
ftp://ftp.lip6.fr/pub/linux/sunsite/docs/LDP/network-guide/nag-1.0.src.tar.gz
ftp://ftp.lip6.fr/pub/linux/sunsite/docs/LDP/network-guide/nag-1.0.html.tar.gz
Cet ouvrage est bien sûr assez ancien. Le chapitre sur sendmail est un peu
dépassé, les possibilités de filtrage de masquerading ne sont pas abordées. Mais
sa lecture est recommandée pour les néophytes en matière réseau et en rien
inutile pour les autres.
Il y a aussi les How-To et la documentation fournie avec chaque logiciel.
Chapitre 2
2.1 TCP-IP
Les protocoles de l’Internet sont désignés par le terme générique de TCP-IP.
Ils peuvent être utilisés aussi en réseau local, sans connexion avec Internet, c’est
ce qu’on appelle maintenant l’Intranet.
La lecture des documents suivants de Charles Hedrick est recommandée :
Introduction à TCP/IP
Ce document se trouve à la fois sur
ftp://athos.rutgers.edu/runet/tcp-ip-intro.doc
en version texte et
ftp://athos.rutgers.edu/runet/tcp-ip-intro.ps
en version postscript.
Administration TCP/IP
ce document se trouve à la fois sur
ftp://athos.rutgers.edu/runet/tcp-ip-admin.doc
en version texte et
ftp://athos.rutgers.edu/runet/tcp-ip-admin.ps
en version postscript.
On trouvera les documents techniques sur TCP/IP, les RFC (Request For
Comment) sur de nombreux sites comme :
http://www.pasteur.fr/other/computer/RFC
13
14CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX
– La couche transport soit TCP, soit UDP qui recourent tous deux à la
couche IP en dessous.
– La couche réseau : IP avec en plus ICMP pour les messages de services
– La couche protocole de réseau local. Une des forces de IP est qu’il
peut s’adapter à de nombreux protocoles de réseau : Ethernet, Token
Ring, FDDI, Fast Ethernet, Gigabit Ethernet, ...
OSI TCP/IP
+-----------------------+-----------------------+-------------+
| 7 Application | TELNET, FTP | |
+-----------------------+ SMTP | TFTP |
| 6 Présentation | RPC | DOMAIN |
+-----------------------+ X11 | NFS |
| 5 Session | HTTP | |
+-----------------------+-----------------------+-------------+
| 4 Transport | TCP | UDP |
+-----------------------+-----------------------+-------------+
| 3 Réseau | IP (Internet Protocol), ICMP, ARP |
+-----------------------+-------------------------------------+
| 2 Data Link | Local Network Protocol |
+-----------------------+ (Ethernet, Fast Ethernet, FDDI...) |
| 1 Physique | |
+-----------------------+-------------------------------------+
Protocol Relationships
2.3.1 CSMA/CD
Comment éviter la cacaphonie ? On peut comme dans les réunions nommer
un président de séance qui donne la parole quand on la lui demande ou bien se
mettre en cercle (ring) se passer un jeton (token) et ne prendre la parole que
lorsqu’on a le jeton. Non, Ethernet utilise une autre méthode moins directive et
non déterministe : CSMA/CD
2.3. LE PROTOCOLE DE RÉSEAU LOCAL ETHERNET 15
2.3.2 Adressage
Comment une machine peut-elle s’adresser à une autre ? Chaque machine a
une adresse Ethernet unique formée de 6 octets (48 bits) et notée sous forme de 6
nombres hexadécimaux comme on le voit dans le champ HWaddr 00 :50 :04 :F9 :33 :82
quand on fait ifconfig eth0 :
ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:50:04:F9:33:82
inet addr:193.54.230.20 Bcast:193.54.230.255 Mask:255.255.255.0
EtherTalk Phase 2 addr:65280/102
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:65483155 errors:0 dropped:0 overruns:0 frame:0
TX packets:99422413 errors:0 dropped:0 overruns:0 carrier:0
Collisions:1887649
Interrupt:12 Base address:0xe000
Comment une machine reçoit les paquets qui lui sont destinés ?
Les paquets circulant sur le bus sont analysés par chaque interface Ethernet.
Si le paquet comporte l’adresse de l’interface en adresse destinataire, il l’envoie à
IP, sinon il le jette. Sauf dans le cas où l’interface est mis en mode promiscuous.
Quel est le débit ? Le débit nominal est 10 Mégabits/sec (Mbps). En raison
des collisions, il est fonction de la charge, c’est à dire du nombre de machines
connectées qui veulent émettre en même temps. Il est aussi fonction du temps
de parcours du paquet, donc de la longueur du bus. En pratique le débit est de
5 Mbps.
Comment mesurer les collisions ? Elles se voient sur les voyants ”Col” des
hubs. Elles sont aussi comptabilisés et leur nombre s’affiche quand on fait
ifconfig eth0 (voir ci-dessus) ou cat /proc/net/dev
Comment diminuer le nombre de collisions ? En utilisant des switchs plutôt
que des hubs.
Structure d’un paquet Ethernet : Il fait 1500 octets (c’est pour cela qu’on
fixe MTU=1500 par défaut dans ifconfig).
Code Type indique un protocole comme TCP/IP, DECnet, Xerox NS, IPX :
on peut utiliser plusieurs protocoles différents simultanément sur un même
réseau.
Le checksum est calculé sur tout le paquet.
2.3.3 Câblage
– 10Base-5 Ethernet 10Mbps, câble coaxial thick (jaune) lmax=200m. Trans-
ceiver ”piqué” sur le câble avec prise AUI à 15 broches. Obsolète.
16CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX
+----------------------------------------------------------------------+
| Adresse Ethernet destination (32 premiers bits) |
+----------------------------------------------------------------------+
| Ethernet dest (16 derniers bits) | Ethernet source (16 premiers bits)|
+----------------------------------------------------------------------+
| Adresse Ethernet source (32 derniers bits) |
+----------------------------------------------------------------------+
| Code Type | |
+----------------------------------------------------------------------+
| En-t^
ete IP, En-t^ete TCP, ensuite vos données |
| ... |
| |
| Fin de vos données |
+----------------------------------------------------------------------+
| Checksum Ethernet |
+----------------------------------------------------------------------+
2.3.4 Adaptateurs
Ne plus acheter d’adaptateur ISA ou 10Mbps. Prendre des adaptateurs pour
bus PCI 10/100 Mbps.
Linux supporte une grande variété d’adaptateurs parmi ceux-ci :
– 3 COM 3C905C-TX/B 10/100 PCI : driver 3c59x : 3c590 series (592/595/597)
”Vortex”.
Lire Documentation/networking/vortex.txt
– carte à base de chip DEC 21143 : driver tulip
– cartes à base de chip ne2000 : drivers ne2k ou ne2kpci. Déconseillé pour
un serveur.
Linux supporte les cartes Ethernet PCMCIA pour PC portable et les nou-
velles cartes Gigabit Ethernet.
configurer l’IRQ et l’IO Base address sur la carte et sur Linux. Il faut réserver
l’IRQ pour la carte ISA dans le Setup du BIOS. Pour les cartes 3COM 3C509B
on utilisait le logiciel fourni sous DOS par 3COM pour configurer IRQ, IO Base
address et enlever l’option ”Plug and play”.
Le module isapnp régle ce problème en noyau 2.0. En noyau 2.2, le support
du ”Plug and play” est dans le noyau (CONFIG PNP=YES)
On peut lister les IRQ utilisées par cat /proc/interrupts et les IO Base
addresses par cat /proc/ioports.
La commande ifconfig eth0 affiche l’IRQ (Interrupt) et l’IO Base address
(Base address).
Il est possible de passer des paramètres au driver de l’adaptateur réseau :
– soit au boot, s’il est dans le noyau. On peut dans /etc/lilo.conf ajouter
une ligne :
append ether=12,0xe000
où 12 est l’IRQ et 0xe000 l’IO Base address.
– soit au chargement du module. Pour essayer des options, le module est
beaucoup plus souple. Par exemple, on peut charger le module tulip par :
insmod tulip.o debug=1 options=0,16
Ce qui met le niveau de debug minimum et le media type à Autosense pour
la première carte Ethernet(0), à full duplex (16) pour la seconde (voir cat
/proc/pci pour l’ordre des cartes).
2.4 IP
C’est l’Internet Protocol décrit dans RFC 791. Son rôle est d’acheminer des
blocs de données appelés paquets (datagram) de la machine expéditeur vers
la machine destinataire. Pour cela il identifie de manière unique les machines
(hosts) du réseau par une adresse. En général, un paquet a un seul destinataire
(unicast), mais une extension de IPv4 permet de l’envoyer à plusieurs (multi-
cast). Il s’occupe aussi de fragmenter et de réassembler les paquets si nécessaire.
Il communique avec la couche ”Protocole de réseau local”, le plus souvent Ether-
net. L’encapsulation dans Ethernet est décrite dans RFC 825 et 894.
----------------------------------------------------------
|Classe de |Masque de | Plage d’adresses |
| réseau | réseau | |
----------------------------------------------------------
| A | 255.0.0.0 | 0.0.0.0 - 127.255.255.255 |
| B | 255.255.0.0 | 128.0.0.0 - 191.255.255.255 |
| C | 255.255.255.0 | 192.0.0.0 - 223.255.255.255 |
|Multicast| 240.0.0.0 | 224.0.0.0 - 239.255.255.255 |
----------------------------------------------------------
– Dans la classe C, les deux bits de poids le plus fort sont à 1, le suivant à
zéro. Une adresse réseau fait trois octets donc trois tranches de chiffres. Les
8 derniers bits forment l’adresse locale. Il n’y a que 256 numéros différents.
Address Formats:
Une machine qui a plusieurs interfaces réseau aura une adresse par interface.
L’adresse 0.0.0.0 n’est pas affectée, elle signifie n’importe quelle adresse dans
les logiciels de routage et de filtrage.
localhost
Par convention l’adresse 127.0.0.1 est réservée pour désigner la machine lo-
cale. De même 127.0.0.0 est réservé pour désigner le réseau associé.
Masque de réseau (netmask )
C’est un nombre de 32 bits qui s’il est combiné par un AND bit à bit avec
l’adresse IP d’une machine donne son adresse réseau. Ainsi :
– adresse 193.54.230.20 : de classe C car la première tranche de chiffre est
> 192
– le netmasq est donc 255.255.255.0
– 255.255.255.0 AND 193.54.230.20 = 193.54.230.0
On note l’adresse réseau par 4 tranches de chiffres décimaux mais avec la
partie locale à zéro.
Adresse locale ou routage ?
Pour savoir comment envoyer un message à une adresse, IP teste si cette
adresse fait partie du réseau local :
ping 193.54.230.255
---------------------------------------- ----------------
Adresse machine (host address) 130.79.186.31
Masque de réseau (network mask) 255.255.255.0
Partie réseau (network portion) 130.79.186.
Partie machine (host portion) .31
---------------------------------------- ----------------
Adresse réseau (network address) 130.79.186.0
Adresse de diffusion (broadcast address) 130.79.186.255
---------------------------------------- ----------------
2.4.2 Sous-réseau
Dans l’exemple précédent de l’adresse IP 130.79.186.31, le masque de réseau
était 255.255.255.0. Or 130 indique un réseau de classe B : 130.79.0.0. Normale-
ment le masque de réseau devrait être 255.255.0.0. L’adresse réseau devrait être
130.79.0.0. Or elle est 130.79.186.0.
Il s’agit là d’un réseau ”subnetté”. Vu de l’extérieur c’est un réseau de classe
B d’un seul tenant, donc sans routeur. Le netmask est bien 255.255.0.0. Le
routeur d’entrée de ce réseau lui applique le netmask 255.255.255.0 et route
vers le routeur du sous-réseau concerné.
Autre exemple : On veut découper le réseau de classe C : 193.54.230.0 en 4
sous-réseaux, soit 2 bits de ”subnetting”. La partie réseau va faire 24+2 = 26
bits. La partie adresse locale fera 6 bits, soit 64 adresses possibles. Le netmask
va être : 255.255.255.x où x=11000000 en binaire c’est à dire 192 décimal. Donc
le netmask sera 255.255.255.192 et les sous-réseaux :
– 193.54.230.0 : adresses de 193.54.230.0 à 193.54.230.63
– 193.54.230.64 : adresses de 193.54.230.64 à 193.54.230.127
– 193.54.230.128 : adresses de 193.54.230.128 à 193.54.230.191
– 193.54.230.192 : adresses de 193.54.230.192 à 193.54.230.255
Ces sous-réseaux doivent être séparés par des routeurs.
Renater distribue actuellement des sous-réseaux de classe C.
Notation des adresses
Comme on voit que la classe de l’adresse ne suffit pas pour déterminer le net-
mask et donc l’adresse du réseau auquel elle appartient, il est nécessaire de tou-
jours accompagner l’adresse avec ce netmask. D’où les notations address/mask :
– 193.54.230.20/255.255.255.0 : adresse d’une machine de classe C
– 193.54.230.20/24 : idem (24 signifie les 24 bits de poids le plus fort à 1)
– 193.54.230.0/255.255.255.0 : ensemble des adresses de 193.54.230.0 à 193.54.230.255.
réseau.
Adresses CIDR
Pour mieux utiliser l’espace d’adressage de IPv4 en attendant IPv6, on a
défini le Classless Inter-Domain Routing. ou CIDR en abrégé. Avec CIDR, les
22CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX
193.54.230.20/24
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
– TTL : Time To Live : en fait nombre de routeurs que le paquet peut tra-
verser. A chaque routage TTL-=1. Si TTL==0 le paquet est détruit. Permet
d’éviter les boucles.
Quand on active un interface réseau sur une machine on définit le paramètre
MTU (Maximum Transmission Unit), en général 1500 octets. Si la taille du
paquet à transmettre lui est supérieur, IP le fragmente.
A la réception, IP contrôle le checksum, s’il est mauvais le paquet est rejetté
en erreur. Sinon ce header est enlevé et le paquet résultant est passé à la couche
du dessus.
2.4.4 Routage IP
Routage
Le routage consiste à envoyer un paquet IP sur un autre réseau.
Routeur (Gateway)
On dit parfois en français passerelle. Un pont est autre chose, il se situe au
niveau 2 du modèle OSI en 7 couches, le routeur est au niveau 3.
Un routeur est une machine dotée de plusieurs interfaces réseaux et qui traite
la couche IP de la pile TCP/IP. Un PC Linux avec plusieurs interfaces réseaux
devient un routeur si on fait :
+-------------------------------+
| Internet Protocol & ICMP & GGP|
+-------------------------------+
| |
+---------------+ +---------------+
| Local Net 1 | | Local Net 2 |
+---------------+ +---------------+
Gateway Protocols
2.5 TCP
TCP, Transmission Control Protocol, décrit par RFC 793, est un protocole
de transfert fiable : il s’occupe de transférer un message (ou un fichier, bref des
données) entre deux machines. Il utilise IP pour ce transport, il sait que IP
fait de son mieux mais que le réseau a des défaillances. TCP est “l’homme de
confiance”, il est utilisé par les principaux protocoles INTERNET (telnet, ftp,
smtp, http, X11,...).
TCP s’occupe de :
– découper le message en segments à l’émission et de les réassembler à la
réception en les remettant dans le bon ordre.
– donner ou recevoir les paquets de IP
– contrôler l’intégrité des données par un checksum calculé au départ et
contrôlé à l’arrivée
2.5. TCP 25
# /etc/services:
ftp-data 20/tcp
ftp 21/tcp
ssh 22/tcp # SSH Remote Login Protocol
ssh 22/udp # SSH Remote Login Protocol
telnet 23/tcp
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Un socket peut être utilisé plusieurs fois par exemple (IP dest, 21) si IP dest
sert plusieurs connexions ftp simultanées. Mais une paire de sockets (IP source,
port source, IP dest, port dest) identifie une connexion de manière unique.
Un serveur utilisant un port inférieur à 1024 doit avoir les privilèges de root.
7 Application ---------------
2.7 UDP
UDP, User Datagram Protocol, décrit par RFC 768, sert à envoyer des mes-
sages qui tiennent dans un paquet IP. Il ajoute un en-tête. Il n’a pas à gérer
de numéros de séquence. Il gère un checksum. Il ne garde pas trace de ce qu’il
a envoyé. Donc si des paquets se perdent, c’est à l’application au-dessus de le
contrôler. Il se sert de ports comme TCP pour distinguer plusieurs conversa-
tions simultanées. UDP est utilisé notamment pour interroger les Domain Name
Servers.
2.8 ICMP
Internet Control Message Protocol sert à transmettre des messages de service
(RFC 792). Les messages ICMP tiennent dans un paquet IP.
La commande ipchains -h icmp donne la liste des types de message ICMP,
extrait :
echo-request (ping)
echo-reply (pong)
host-unreachable
network-unreachable
host-unknown
network-unknown
network-redirect (indication d’un routeur à un autre signalant une meilleure route)
Exemple :
2.9 ARP
Address Resolution Protocol RFC 826 sur un réseau local Ethernet permet
de trouver l’adresse Ethernet (dite adresse MAC) d’une machine connaissant son
adresse IP. Pour que IP puisse communiquer par Ethernet il faut qu’il connaisse
l’adresse Ethernet du destinataire. ARP n’est pas un protocole IP, il n’utilise
pas de paquet IP.
Si la machine 130.79.186.1 veut causer à la machine 130.79.186.2, IP vérifie
avec le netmask qu’elle sont bien sur le même réseau. Ensuite ARP regarde dans
son cache s’il a 130.79.186.2.
Sur Linux le cache est visible par les commandes cat /proc/net/arp ou
arp -a
30CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX
– Les serveurs root ont l’information sur les top level domain
– Chaque domaine doit disposer d’un DNS qui fait autorité
– Chaque machine doit avoir accès à au moins un DNS
– Optimisation : un DNS mémorise les informations dans un cache (durant
un temps TTL)
– Sécurité : des DNS secondaires copies de DNS primaires
Exemple d’interrogation
– adresse IP de www.cern.ch ?
– requête à un DNS indiqué dans la ligne nameserver de /etc/resolv.conf
– mon DNS n’a pas www.cern.ch dans son cache
– il demande à un des DNS root l’adresse du DNS ch
– il interroge le DNS ch
– le DNS de ch n’a pas www.cern.ch dans son cache
– le DNS de ch interroge le DNS de cern.ch
– le DNS de cern.ch renvoie l’adresse IP de www.cern.ch à mon DNS qui
la garde dans son cache
– mon DNS me renvoie l’adresse IP de www.cern.ch
Types d’informations contenues dans les DNS :
– A : associe une adresse IP à un nom de domaine. C’est l’objet essentiel du
DNS
– PTR : permet la requête inverse : à une adresse IP associe un nom de
domaine
– CNAME : associe un alias avec son nom canonique : exemple : www-phase.c-strasbourg.fr
alias de zoroastre.c-strasbourg.fr
– MX : Mail eXchanger indique avec une note de préférence à quel nom de
domaine envoyer le courrier por ce nom de domaine. Exemple : math.u-strasbg.fr
pointe sur amon.u-strasbg.fr avec la préférence 10
Les MX records permettent de :
– centraliser la messagerie dans un organisme sur une machine sécurisée
– de communiquer avec des machines non connectées à Internet ( uucp,
...)
– NS pointe sur un master DNS, le serveur de nom de référence pour la zone
– SOA : (Start of authority) en-tête d’une zone d’autorité
– si on ajoute noauto sur la ligne iface, l’interface n’est pas initialisé par
ifup -a ni arrêté par ifdown -a. On peut le commander manuellement
par ifup eth0, ifdown eth0, si l’interface est eth0.
– autres informations par man 5 interfaces
– les lignes commençant par # sont ignorées.
– up commande exécute commande après l’initialisation de l’interface. pre-up
commande exécute commande avant l’initialisation.
– idem avec down etpre-down pour l’arrêt de l’interface.
Nous considérons que l’interface réseau est l’interface Ethernet eth0, mais
ce peut être un deuxième interface Ethernet eth1 ou un interface vers un autre
protocole réseau. On verra par la suite comment initialiser ppp0 pour PPP,
plip0 pour PLIP.
$ ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:50:04:F9:33:82
inet addr:193.54.230.20 Bcast:193.54.230.255 Mask:255.255.255.0
EtherTalk Phase 2 addr:65280/102
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:65692192 errors:0 dropped:0 overruns:0 frame:0
TX packets:99634932 errors:0 dropped:0 overruns:0 carrier:0
Collisions:1893719
Interrupt:12 Base address:0xe000
– mtu : Maximum Transmission Unit : taille max d’un paquet que l’interface
est en mesure de traiter en une transaction. Pour Ethernet c’est 1500. Pour
PPP peut être plus faible.
– metric : associé à l’entrée dans la table de routage correspondant à cet
interface, exprime le coût d’une route (= nombre de routeurs à traverser)
pour certains protocoles de routage (RIP). Laissez le défaut.
– promisc : met l’interface réseau en mode promiscuous (permet de recevoir
tous les paquets Ethernet qui passent sur le réseau. ( -promisc remet en
mode normal)
– allmulti : pour multicast
Dans le cas de PPP (IP sur ligne téléphonique), l’interface réseau se lance
par pppd, on n’a pas à faire ifconfig.
Pour désactiver l’interface, on fait :
ifconfig eth0 down
On notera que, contrairement aux autres périphériques, eth0 n’est pas un
nom de fichier comme /dev/lp0 et on ne peut faire cat fichier>eth0
Exercice : Comment connaı̂tre l’adresse IP d’une machine ? En l’extrayant
de la sortie de la commande ifconfig comme suit :
/sbin/ifconfig eth0 | grep ’inet addr’ | awk ’{print $2}’ | sed -e ’s/.*://’
Exemple :
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
193.54.230.0 0.0.0.0 255.255.255.0 U 0 0 78581 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 2779 lo
0.0.0.0 193.54.230.1 0.0.0.0 UG 1 0 418155 eth0
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
localnet * 255.255.255.0 U 0 0 78581 eth0
127.0.0.0 * 255.0.0.0 U 0 0 2779 lo
default routeur 0.0.0.0 UG 1 0 418154 eth0
Etant donné un paquet d’adresse destination adr-dest à router, le noyau pour
chaque ligne de la table de routage fait :
2.11. DÉMARRAGE DU RÉSEAU 35
$ ping localhost -c 2
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=1.5 ms
36CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX
Pourquoi la route par défaut n’utilise pas ‘gw’ ? La raison en est très simple :
le protocole PPP est point à point il n’y a qu’une machine à chaque bout.
Spécifier que l’autre bout de la liaison est un routeur est sans objet et redondant.
Incidents
Si vous avez des diagnostics d’erreurs SIOCADDRT, ils peuvent être évités
en ajoutant un netmask et le nom de l’interface à la commande "route add
-net". Exemple :
devient :
$ cat /etc/resolv.conf
nameserver 127.0.0.1
search c-strasbourg.fr
nameserver 193.54.211.65
nameserver 193.48.86.103
$ cat /etc/host.conf
order hosts,bind
multi on
$ cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# Information about this file is available in the ‘libc6-doc’ package.
passwd: compat
group: compat
shadow: compat
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: db files
$ nslookup www.lwn.net
Server: localhost
Address: 127.0.0.1
Name: lwn.net
Address: 206.168.112.90
38CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX
Aliases: www.lwn.net
$ nslookup 206.168.112.90
Server: localhost
Address: 127.0.0.1
Name: nr.lwn.net
Address: 206.168.112.90
Peut être interrogé interactivement. Tapez nslookup tapez help fin par
Ctrl-D
$ nslookup
Default Server: localhost
Address: 127.0.0.1
c-strasbourg.fr
origin = antares.c-strasbourg.fr
mail addr = administrator.c-strasbourg.fr
serial = 1998091712
refresh = 43200 (12H)
retry = 600 (10M)
expire = 2592000 (4w2d)
minimum ttl = 604800 (1W)
c-strasbourg.fr nameserver = antares.c-strasbourg.fr
c-strasbourg.fr nameserver = sbgsu3.in2p3.fr
c-strasbourg.fr nameserver = zoroastre.c-strasbourg.fr
antares.c-strasbourg.fr internet address = 193.54.211.65
sbgsu3.in2p3.fr internet address = 193.48.86.103
zoroastre.c-strasbourg.fr internet address = 193.54.230.20
Interrogation par la racine de l’arborescence
$ nslookup
Default Server: localhost
Address: 127.0.0.1
. <---------- signifie la racine de l’arborescence
Server: localhost
Address: 127.0.0.1
(root)
origin = A.ROOT-SERVERS.NET <----- en t^
ete de mon fichier named.ca
mail addr = hostmaster.internic.NET
serial = 2000061302
refresh = 1800 (30M)
retry = 900 (15M)
2.13. RÉSOLUTION DE NOMS DE DOMAINES 39
> ftp.lip6.fr
Server: DNS.CS.WISC.EDU
Address: 128.105.2.10
Non-authoritative answer:
Name: nephtys.lip6.fr
Address: 195.83.118.1
Aliases: ftp.lip6.fr
> zoroastre.c-strasbourg.fr <------ je suis m^
eme connu aux US !!!
Server: DNS.CS.WISC.EDU
Address: 128.105.2.10
Name: zoroastre.c-strasbourg.fr
Address: 193.54.230.20
$ host tux.u-strasbg.fr
tux.u-strasbg.fr A 130.79.34.100
$ host -t mx tux.u-strasbg.fr
tux.u-strasbg.fr MX 30 tux.u-strasbg.fr
tux.u-strasbg.fr MX 10 amon.u-strasbg.fr
tux.u-strasbg.fr MX 20 isis.u-strasbg.fr
$ host 130.79.34.100
Name: tux.u-strasbg.fr
Address: 130.79.34.100
Aliases: tux
Interrogation inverse :
dig phoebus.c-strasbourg.f
dig @sbgsu3.in2p3.fr c-strasbourg.fr soa
dig -x 193.54.230.3 interrogation inverse
$ dnsquery antares
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47285
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
;; antares.c-strasbourg.fr, type = ANY, class = IN
antares.c-strasbourg.fr. 1W IN A 193.54.211.65
c-strasbourg.fr. 1W IN NS antares.c-strasbourg.fr.
c-strasbourg.fr. 1W IN NS sbgsu3.in2p3.fr.
c-strasbourg.fr. 1W IN NS zoroastre.c-strasbourg.fr.
antares.c-strasbourg.fr. 1W IN A 193.54.211.65
sbgsu3.in2p3.fr. 13m15s IN A 193.48.86.103
zoroastre.c-strasbourg.fr. 1W IN A 193.54.230.20
nslookup 206.168.112.90
host 206.168.112.90
fournissait la réponse. Mais de manière interne une transformation a été
faite. Il est bon pour un administrateur de la connaı̂tre :
Pour éviter de faire une recherche dans la base de données qui est d’accès
séquentiel et réparti !, on a créé un domains spécial in-addr.arpa qui contient
les adresse IP en ”reversed dotted quad notation”. Ainsi 206.168.112.90 de-
vient 90.112.168.206.in-addr.arpa. Les ressources records (RR) contenant
cette information sont de type PTR On interroge ainsi :
[morel]$ nslookup
Default Server: localhost
Address: 127.0.0.1
Non-authoritative answer:
90.112.168.206.in-addr.arpa name = nr.lwn.net
2.14.2 traceroute
Tente de tracer la route suivie pour parvenir au site destinataire en lançant
des petits paquets UDP, d’abord avec un ‘time to live’ TTL=1, le paquet ne
peut traverser qu’un routeur puis TTL=2, puis TTL=3, etc. A chaque essai
traceroute se met à l’écoute du message ICMP ”time exceeded”. Donc indique
tous les routeurs depuis votre machine jusqu’à la machine cible. Permet d’iden-
tifier où le réseau est coupé. Par défaut fait 3 essais pour chaque valeur de ttl.
42CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX
$ traceroute ftp.lip6.fr
traceroute to nephtys.lip6.fr (195.83.118.1), 30 hops max, 38 byte packets
1 routeur (193.54.230.1) 1.119 ms 1.300 ms 1.074 ms
2 strasbourg.cssi.renater.fr (194.214.110.233) 3.098 ms 1.066 ms 0.955 ms
3 nio-n1.cssi.renater.fr (194.214.110.137) 7.372 ms 7.006 ms 7.256 ms
4 jussieu.cssi.renater.fr (194.214.109.6) 7.428 ms 7.341 ms 7.455 ms
5 rap-jussieu.cssi.renater.fr (193.51.12.78) 7.733 ms 7.431 ms 7.542 ms
6 jussieu.rap.prd.fr (195.221.126.33) 8.444 ms 8.707 ms 8.714 ms
7 nephtys.lip6.fr (195.83.118.1) 8.116 ms 9.304 ms 8.809 ms
2.14.3 netstat
netstat permet de faire des statistiques, afficher la table de routage et affi-
cher les connexions en cours (les sockets ouverts).
netstat -i donne les statistiques sur les interfaces comme ifconfig ou cat
/proc/net/dev
$ netstat -i
Kernel Interface table
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flags
lo 3584 0 30285178 0 0 0 30285178 0 0 0 BLRU
eth0 1500 0 66988299 0 0 0 103800699 0 0 0 BRU
eth0: 1500 0 0 0 0 0 0 0 0 0 BRU
eth0: 1500 0 1 0 0 0 0 0 0 0 BRU
eth0: 1500 0 2 0 0 0 0 0 0 0 BRU
netstat -s denne des statistiques plus détaillées au niveau IP, ICMP, TCP,
UDP.
netstat -r donne la table de routage, -n évite la traduction en noms de
domaines
netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
193.54.230.37 0.0.0.0 255.255.255.255 UH 1500 0 0 eth0:0
193.54.230.50 0.0.0.0 255.255.255.255 UH 1500 0 0 eth0:1
193.54.230.104 0.0.0.0 255.255.255.255 UH 1500 0 0 eth0:2
193.54.230.0 0.0.0.0 255.255.255.0 U 1500 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 3584 0 0 lo
0.0.0.0 193.54.230.1 0.0.0.0 UG 1500 0 0 eth0
2.14. OUTILS DE DIAGNOSTIC 43
irtt : initial round trip time pour les connexions TCP : sert à fixer un
timeout au bout duquel un paquet est renvoyé si l’acquitement n’a pas été reçu.
Défaut 300ms (man route
netstat -a affiche les connexions en cours. On peut être plus sélectif avec
les options :
– -t : connexions TCP
– -u : connexions UDP
– -w : raw connexions
– -a : y compris les connexions en attente (LISTEN)
– -x : socket Unix
– -n : ne convertit pas les adresses IP en noms de domaines
– -p : affiche le PID et le nom du processus ayant ouvert ce socket . Aide à
identifier la connexion. Il faut être root.
– -l : affiche uniquement les connexions en attente (listening)
Remarque :
– des traces probables de scan de port sont visibles dans cette liste
– les connexions par nfs ne sont pas visible par netstat
– snpp, fax, hylafax sont des ports servis par le serveur Hylafax
– afpoverpc serveur AFP de fichier Netatalk pour les Mac
– netbios... serveur Samba
2.14.4 telnet
Pour se connecter en mode interactif sur une machine multi-utilisateur comme
Unix.
telnet tux.u-strasbg.fr
2.14.5 nc
C’est un outil élémentaire pour faire un dialogue TCP ou UDP avec une
autre machine. C’est le « couteau suisse » de TCP-IP.
Exemple :
$ nc zoroastre 25
220 zoroastre.c-strasbourg.fr ESMTP Sendmail 8.9.3/8.9.3; Fri, 23 Mar 2001 17:41:49 +0100
quit
221 zoroastre.c-strasbourg.fr closing connection
2.14.6 tcpdump
tcpdump nécessite la configuration de Packet Socket dans le noyau. Il im-
prime les en-têtes des paquets passant sur un interface réseau et satisfaisant
une expression logique. Il s’emploie sous root car l’interface doit être mis en
mode promiscuous. Si le réseau dispose de switch on ne peut écouter que les
paquets qui circulent sur le segment raccordé au port du switch le plus proche,
hormis les messages broadcast comme les arp requests.
Documentation : man tcpdump
Options :
– -i eth1 : écoute sur l’interface eth1
– -n : ne convertit pas les adresses IP en noms de domaines
– -N : imprime le nom de machine sans le domaine
– -s 200 : prend 200 octets de données dans chaque paquet. Défaut : 68.
– -t : pas de timestamp
– -c 10 : n’analyse que 10 paquets. Si pas d’option -c tcpdump ne se
termine que si on tape Ctrl-C.
– -e : affiche le link level header c’est à dire l’en-tête Ethernet
– -S : imprime les TCP Sequence Number sous forme absolue plutôt que
relative (par défaut, les Initial Sequence Number (ISN) sont en absolus
mais à la suite les Sequence Number sont donnés relativement aux ISN)
– -v : sortie bavarde (ajout de ttl, id)
– -vv : sortie encore plus bavarde
– -x : sortie en hexadécimal
– -w fichier : copie les paquets à l’état brut dans fichier
– -r fichier : lit les paquets copiés dans fichier par -w
Expression :
En l’absence d’une expression, tous les paquets sont affichés. Sinon, seuls
les paquets pour lesquels l’expression est vraie sont affichés. Une expression est
faite de primitives. Une primitive est faite d’un identifieur (nombre ou nom)
précédé d’un ou plusieurs qualifieur. Il y a trois sortes de qualifieurs :
– type : host, net ou port
– direction : src, dst, src or dst, src and dst . Pour une liaison point à
point on peut utiliser inbound et outbound.
– protocole : ether, ip, arp, tcp, udp ...
Les primitives peuvent être combinées par and, or et not. Les parenthèses
sont autorisées mais doivent être mise entre simples quotes pour ne pas être
interprétées par le shell.
Exemples d’expressions :
46CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX
2.14.7 arp
arp -a permet de contrôler le contenu du cache ARP.
$ arp -a
pandore.c-strasbourg.fr (193.54.230.80) at 00:60:08:D4:49:18 [ether] on eth0
routeur (193.54.230.1) at 00:30:94:9A:13:00 [ether] on eth0
...
$ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
193.54.230.80 0x1 0x2 00:60:08:D4:49:18 * eth0
193.54.230.1 0x1 0x2 00:30:94:9A:13:00 * eth0
...
2.15 IP aliasing
Permet d’associer plusieurs adresses IP à un même interface réseau : utile
pour
– remplacer une machine par une autre en cas de panne ou de maintenance
– gérer plusieurs sites www avec un seul serveur apache
Documentation :
Virtual-Services HowTo
IP-Alias mini-HowTo
/usr/src/linux/Documentation/networking/alias.txt
Mise en oeuvre :
Dans le noyau configurer le support de IP ALIAS.
En Debian si on utilise le script /etc/init.d/network on y ajoute :
echo "Running ipalias..."
ifconfig eth0:0 193.54.230.37 netmask 255.255.255.0 broadcast 193.54.230.255
route add -host 193.54.230.37 dev eth0:0
ifconfig eth0:1 193.54.230.50 netmask 255.255.255.0 broadcast 193.54.230.255
route add -host 193.54.230.50 dev eth0:1
ifconfig eth0:2 193.54.230.104 netmask 255.255.255.0 broadcast 193.54.230.255
route add -host 193.54.230.104 dev eth0:2
Si en Debian on lance le réseau par ifup, on ajoute dans /etc/network/interfaces :
iface eth0:0 inet static
address 193.54.230.37
network 193.54.230.0
netmask 255.255.255.0
broadcast 193.54.230.255
up route add -host 193.54.230.37 dev eth0:0
50CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX
Test :
$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
193.54.230.109 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
193.54.230.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 193.54.230.1 0.0.0.0 UG 0 0 0 eth0
196.168.1.2 est l’adresse IP de la machine routée, 00 :50 :04 :F9 :33 :82
est l’adresse Ethernet de la machine routeur.
2.17 RARP
Reverse Adress Resolution Protocol (RARP), consiste à demander son adresse
IP à un serveur en fournissant son adresse Ethernet. C’est utilisé pour permettre
à des machines sans disque de booter.
Le support RARP doit être configuré dans le noyau (CONFIG INET RARP),
si on veut que Linux réponde à de telles requêtes.
2.18 DHCP
DHCP (Dynamic Host Configuration Protocol) est un protocole décrit par la
RFC 2131 qui permet d’attribuer dynamiquement des adresses IP. C’est utilisé
par les Internet Service Provider qui ont beaucoup de clients mais un nombre
limité d’adresses IP ou pour attribuer des adresses IP ou machines nomades
comme les ordinateurs portables. En plus de l’adresse IP, le netmask, l’adresse
de broadcast, les DNS sont aussi attribués. L’utilisation de DHCP rend la confi-
guration réseau beaucoup plus facile.
root *
|
------------+--------------+-----------+-----------------------------
53
54 CHAPITRE 3. LE SERVEUR DNS BIND
Tous les noms affectés d’une étoile marquent le début d’une zone. Ils sont
associés à un primary nameserver. On voit sur cet exemple que le domaine
groucho.edu comporte toutes les machines de la Groucho Marx University,
alors que la zone groucho.edu n’inclut que les machines gérées directement
par le Computing Center comme gauss.maths.groucho.edu. Les machines du
département de Physique appartiennent à une zone différente : physics.groucho.edu9
Un réseau avec un netmask non sur une frontière d’octets ne peut constituer
une zone d’autorité (en raison de l’interrogation inverse).
options {
directory "/var/cache/bind";
};
logging {
category lame-servers { null; };
category cname { null; };
};
// 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";
};
// generated by named-bootconf.pl
options {
directory "/var/named";
/*
* If there is a firewall between you and nameservers you want
56 CHAPITRE 3. LE SERVEUR DNS BIND
zone "0.0.127.in-addr.arpa" {
type master;
file "named.rev-local";
};
zone "c-strasbourg.fr" {
type slave;
file "cstr.zone.bak";
masters {193.54.211.65; };
};
zone "230.54.193.in-addr.arpa" {
type slave;
file "cstr.rev.zone.bak";
masters {193.54.211.65;};
};
notez le .
|
v
(domain) (ttl) (class) (type) (rdata)
c-strasbourg 3600 IN SOA antares.c-strasbourg.fr.
58 CHAPITRE 3. LE SERVEUR DNS BIND
administrator.c -strasbourg.fr. (
1998091613 ; serial
43200 ; refresh: twice a day (sec)
600 ; retry: ten minutes (sec)
2592000 ; expire: 30 days (sec)
604800 ; minimum: default ttl or records: 1 week)
Exemple de RR de type NS :
(class) (type) (rdata)
IN NS antares.c-strasbourg.fr.
IN NS sbgsu3.in2p3.fr.
IN NS zoroastre.c-strasbourg.fr.
Exemple de RR de type A :
(domaine) (ttl) (class) (type) (rdata)
zoroastre 604800 IN A 193.54.230.20
zoroastre n’est pas suivi d’un point, comme la zone courante est c-strasbourg.fr
le nom fqdn est zoroastre.c-strasbourg.fr
Exemple de RR de type PTR :
(rdata) (ttl) (class) (type) (domaine)
20 604800 IN PTR zoroastre.c-strasbourg.fr.
Ici comme le nom de la zone est 230.54.193.in-addr.arpa le fqdn est
20.230.54.193.in-addr.arpa
Exemple de RR de type CNAME :
(domaine) (ttl) (class) (type) (rdata)
www-phase 604800 IN CNAME zoroastre.c-strasbourg.fr.
www-phase.c-strasbourg.fr est un alias de zoroastre.c-strasbourg.fr
Exemple de RR de type MX :
(domaine) (ttl) (class) (note) (rdata)
phase 604800 IN MX 5 zoroastre.c-strasbourg.fr.
Tout mail à destination de phase.c-strasbourg.fr est à envoyer à zoroastre.c-strasbourg.fr.
Il peut y avoir plusieurs MX records c’est celui qui a la note la plus basse qui
est choisi de préférence.
Contenu du fichier named.local
;
; BIND data file for local loopback interface
;
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Default TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
3.6. ADMINISTRATION 59
fichier named.rev-local
;
; BIND reverse data file for local loopback interface
;
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Default TTL
;
@ IN NS localhost.
1 IN PTR localhost.
3.6 Administration
Démarrage par /etc/init.d/bind start
Contrôle par ndc Name daemon control interface
– ndc status -> PID de named
– ndc reload -> recharge la base de données
– ndc start -> démarrage
– ndc restart -> redémarrage
– ndc stop -> arrêt
3.6.1 Log
Le fichier log est /var/log/daemon.log
Lancement de named
Nov 15 12:48:40 yelen named[17303]: starting (/etc/bind/named.conf). named 8.2.
3-REL-NOESW Wed Nov 13 18:45:21 UTC 2002 ^Ibuildd@cyberhq:/build/buildd/bind-8.2
.3/src/bin/named
Nov 15 12:48:40 yelen named[17303]: hint zone "" (IN) loaded (serial 0)
Nov 15 12:48:40 yelen named[17303]: master zone "localhost" (IN) loaded (serial
1)
Nov 15 12:48:40 yelen named[17303]: master zone "127.in-addr.arpa" (IN) loaded (
serial 1)
Nov 15 12:48:40 yelen named[17303]: master zone "0.in-addr.arpa" (IN) loaded (se
rial 1)
Nov 15 12:48:40 yelen named[17303]: master zone "255.in-addr.arpa" (IN) loaded (
serial 1)
Nov 15 12:48:40 yelen named[17303]: listening on [193.54.230.76].53 (eth0)
Nov 15 12:48:40 yelen named[17303]: listening on [193.54.230.20].53 (eth0:2)
Nov 15 12:48:40 yelen named[17303]: Forwarding source address is [0.0.0.0].2233
Nov 15 12:48:40 yelen named[17304]: Ready to answer queries.
60 CHAPITRE 3. LE SERVEUR DNS BIND
Chapitre 4
PLIP permet de faire communiquer deux machines par TCP-IP sans carte
réseau mais connectées via le port parallèle. C’est utile pour l’installation d’une
machine (mais assez lent), les transferts de fichiers avec un portable, ou un
mini réseau chez soi . C’est aussi un bon exercice en matière de routage ou de
proxyarp.
4.1 Le câble
C’est un cordon parallèle DB25 mâle/DB25 mâle dit ”null-printer” ou ”La-
pLink”
Voici le câblage indiqué dans /usr/src/linux/drivers/net/plip.c :
61
62 CHAPITRE 4. PLIP : IP SUR PORT PARALLÈLE
+------------------+ // // +----------------+
| genesis |--------------------| phoebus |
+---------+--------+ +----------------+
193.54.230.56 | 193.54.230.115
| Réseau local
----------------+-----------------------
193.54.230.0
depmod -a
modprobe parport_pc io=0x378 irq=7
insmod plip timid=1
En tapant ifconfig, on a :
genesis:~ # ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:35 errors:0 dropped:0 overruns:0 frame:0
TX packets:35 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
Le flag H indique qu’un seul host peut être atteint par cette route. Le flag
U que l’interface est UP, G que c’est un Gateway.
4.6 Test
On teste que les deux machines communiquent par le câble null-printer en
faisant ping du client vers le serveur et inversement.
4.9 Documents
http ://www.linux-france.org/article/sys/Install-Plip/Install-Plip-1.htm
66 CHAPITRE 4. PLIP : IP SUR PORT PARALLÈLE
Chapitre 5
PPP
5.1 Introduction
PPP, Point to Point Protocol permet de faire passer le protocole IP sur
une liaison série (câble null-modem, modem et ligne téléphonique ou liaison
NUMERIS -ISDN-). Il permet de se connecter à un fournisseur d’accès Internet
ou de connecter ensemble deux réseaux locaux. Linux peut être client ou serveur
PPP.
pppd succède à slip et cslip (compressed slip) qui ne sont plus guère uti-
lisés.
Le protocole PPP est décrit dans la RFC1661 : The Point-to-Point Protocol
(PPP).
67
68 CHAPITRE 5. PPP
5.1.2 Documentation
– PPP-HOWTO : lynx /usr/doc/HOWTO/PPP-HOWTO.html
– zmore /usr/doc/ppp/README.linux.gz
– The Linux Network Administrator’s Guide
– PPP-FAQ : zmore /usr/doc/ppp/FAQ.gz
– man pppd
Pour un usage intermittent c’est très bien de mettre PPP en module. Pour
un serveur d’accès Internet qui fait beaucoup de PPP on le mettra dans le noyau.
A partir du noyau 2.4 d’autres paramètres sont optionnels. Il faut sélectionner
CONFIG PPP ASYNC. Quand le noyau a le support PPP ou quand le module est
chargé, les messages suivants apparaissent dans le log (cf dmesg)
./configure
make USE_MS_DNS=1
L’option USE MS DNS=1 demande le support dans LCP des DNS tags utilisés
par Microsoft pour passer les noms des serveurs DNS. C’est important pour un
serveur qui aurait des machines Windows comme clients.
5.2.3 mgetty
Nécessaire uniquement pour un serveur.
ppp/peers:
total 7
-rw-r----- 1 root dip 530 Apr 13 21:14 provider
ls -lR /etc/chatscripts
-rw-r----- 1 root dip 200 Apr 13 17:40 provider
ls -l /etc/init.d/ppp
-rwxr-xr-x 1 root root 649 May 26 1998 /etc/init.d/ppp
70 CHAPITRE 5. PPP
Pour changer l’IRQ d’un port série il faut aller modifier les switchs sur la
carte série et utiliser setserial sous root. Exemple :
setserial /dev/ttyS2 irq 5
Mais les cartes mère modernes ont deux ports série configurables via le Setup
du BIOS.
1. Lignes ABORT :
On peut prévoir le comportement de notre connexion en cas d’incident. Si
le modem envoie ”NO CARRIER” l’action ABORT est lancée.
2. Ligne TIMEOUT : On peut changer le TIMEOUT qui est de 45 secondes
par défaut.
3. Autres lignes : Elles sont formées de deux chaı̂nes de caractères :
"attendue" "envoyée"
séparées par des blancs. Il suffit que la chaı̂ne ”attendue” concorde avec
la réponse effective du modem pour que le client réponde par la chaı̂ne
”envoyée”.
Toutes les réponses possibles du modem doivent être prévues y compris
CONNECT qui n’est pas indiqué dans l’exemple précédent.
On peut prévoir une action conditionnelle par exemple si on ne reçoit pas
le prompt de login :
ogin:--ogin: ppp ssword: hello2u2
un carriage return est envoyé et on attend à nouveau ogin :
On peut envoyer des commandes d’initialisation du modem, ainsi
"at&d0&c1"
\q évite que le password soit écrit dans le fichier log
Ce dialogue dépend évidemment du serveur. En particulier si pppd du ser-
veur réclame une authentification par PAP ou CHAP, il ne faut pas faire de
dialogue login, passord, sinon on reste bloqué.
5.4.3 Authentification
L’authentification peut se faire de plusieurs manières :
1. en dehors de pppd dans un ”chat-script”. C’est alors un simple login sur
une machine distante (voir exemple plus haut). L’inconvénient est que
chaque utilisateur doit se configurer un chat-script.
74 CHAPITRE 5. PPP
et le fichier /etc/host.conf
order hosts,bind
multi on
Le fichier /etc/ppp/options
Le premier fichier d’options pris en compte par pppd est /etc/ppp/options.
Il n’est accessible que par l’administrateur. Il contient des choses minimales
comme :
asyncmap 0
auth
crtscts
lock
modem
lcp-echo-interval 30
lcp-echo-failure 4
mais pas de proxyarp. crtscts signifie contrôle de flux hardware sur le port
série.
– crtscts contrôle de flux hardware sur le port série (il faut le positionner
aussi sur le modem)
– auth demande au partenaire (peer) de s’authentifier
76 CHAPITRE 5. PPP
Le fichier /etc/ppp/peers/provider
L’option call provider de pppd fait prendre en compte ensuite un fichier
provider (ce nom est quelconque) dans /etc/ppp/peers. L’administrateur
l’édite en prenant soin de conserver la version originale en provider.old
Vous pouvez prévoir des directives d’authentification (auth, +pap, ...) mais
comme client ce n’est pas du tout recommandé (il faut que le serveur sache
s’identifier). Cependant votre configuration peut être à la fois client et serveur.
Adaptez le fichier : /etc/chatscripts/provider
ABORT BUSY
ABORT "NO CARRIER"
ABORT VOICE
ABORT "NO DIALTONE"
"" ATDT0388116335
CONNECT ’’
Si l’authentification ne se fait pas par PAP/CHAP il faut ajouter après
CONNECT des lignes du genre :
"ogin:" dupond
"assword:" hzkd0h3
5.5. CONFIGURATION D’UN CLIENT 77
Mais attention, en PAP ou CHAP, il ne faut pas mettre ces deux lignes : ça
vous bloque.
Le fichier /etc/ppp/pap-secrets
En authentification PAP, on édite le fichier /etc/ppp/pap-secrets :
dupond * hzkd0h3
lsmod
Module Pages Used by
ppp 5 0 (autoclean)
slhc 2 [ppp] 0 (autoclean)
serial 8 2 (autoclean)
nfs 12 4
3c509 2 1
Collisions:0
Memory:9b3038-9b3c04
[morel@phoebus morel]$netstat -r
Causes d’incidents :
– le modem ne répond pas : tester avec minicom. Cause possible : erreur de
port ttySxx
– on ne peut lancer pppd que depuis root : mettez le userid dans le groupe
autorisé à exécuter /usr/sbin/pppd (dip en Debian).
– on est en PAP et le chatscript comporte une identification par login d’où
blocage
– on est en PAP et ”id secret” n’est pas bien spécifié (oubli de l’option name)
– Diagnostic ”Serial line loopback” dans le log : oubli d’une réponse du
modem dans le chat-script, CONNECT par exemple.
– on accède au serveur mais pas à d’autres machines d’Internet. Causes :
– oubli de defaultroute sur le client ou de proxyarp sur le serveur.
– dans netstat -r la ligne default n’indique pas le serveur PPP
– on a une carte Ethernet et on a laissé l’initialisation de eth0 qui prévoit
le routage par eth0. Faire ifconfig eth0 down
– pppd s’arrête à son démarrage par mgetty. Cause possible : erreur dans
un fichier de configuration, par exemple pap-secrets. Tester par :
pppd dryrun
dryrun fait écrire les options dans /var/log/messages et arrête pppd
Configuration du noyau
Il faut prévoir :
– le support PPP dans le noyau ou en module
– IP forwarding/gatewaying pour servir de routeur pour les machines connectées
par PPP
5.6. CONFIGURATION D’UN SERVEUR 79
Installation de mgetty
On peut lancer directement pppd sur un port série, mais il est préférable
de le faire à travers mgetty. Cela permet d’utiliser le modem pour autre chose
(connexion distante en mode terminal par minicom, kermit, etc ou de recevoir
des fax). mgetty sait reconnaı̂tre le type d’appel et appeler le service adéquat.
Il faut au moins mgetty Version 1.1.18-1. mgetty doit être compilé avec
l’option -DAUTO PPP c’est à dire reconnaissance automatique de PPP. C’est
nécessaire pour les clients Microsoft Wxx.
On met mgetty à l’écoute d’un port série en ajoutant dans /etc/inittab
une ligne :
port ttyS0
speed 28800
toggle-dtr n
debug 9
data-only y
# Contr^
ole modem sur ma ligne téléphonique
# modem inaccessible du lundi au vendredi de 9h à 19h
0 9 * * 1-5 root /usr/bin/touch /etc/nologin.ttyS1
0 19 * * 1-5 root /bin/rm /etc/nologin.ttyS1
# sauf les jours fériés
1 9 1 1 * root /bin/rm /etc/nologin.ttyS1
1 9 1 5 * root /bin/rm /etc/nologin.ttyS1
1 9 8 5 * root /bin/rm /etc/nologin.ttyS1
1 9 14 7 * root /bin/rm /etc/nologin.ttyS1
1 9 11 11 * root /bin/rm /etc/nologin.ttyS1
80 CHAPITRE 5. PPP
Installation de pppd
Il faut avoir au moins pppd 2.2.0f-4 pour pouvoir transmettre aux clients
Microsoft les adresses de DNS par LCP. C’est le cas en Debian.
Compilation de pppd
Si on doit compiler, il faut faire :
– -DDNS pour configurer les adresses DNS sur les clients Windows
– HAS SHADOW=1 si vous avez les shadow passwords sur le serveur.
Configuration de pppd
Le fichier /etc/options pour un serveur : Exemple :
auth
-chap
+pap
login
debug
asyncmap 0
lock
modem
crtscts
proxyarp
netmask 255.255.255.0
ms-dns 193.54.230.20
ms-dns 193.54.211.65
ms-wins 193.54.230.20
noipx
lcp-echo-interval 30
lcp-echo-failure 4
– netmask 255.255.255.0
– 193.54.230.20 :193.54.230.101 (adresse locale :adresse distante)
Options Microsoft :
– ms-dns 193.54.230.20 : communique l’adresse IP d’un serveur DNS
– ms-wins 193.54.230.20 : communique l’adresse IP d’un serveur WINS
Options de gestion du lien :
– lcp-echo-interval 30 : envoie une demande d’écho si aucun paquet n’a été
reçu depuis 30 secondes pour vérifier si le partenaire est toujours là
– lcp-echo-failure 4 : si au bout de 4 demandes d’écho, le partenaire ne
répond pas, on le suppose mort.
/dev/ttyS0
193.54.230.20:193.54.230.100
La syntaxe est :
Fichier /etc/ppp/options.ttyS1
/dev/ttyS1
193.54.230.20:193.54.230.101
dupond:x:1234:1234:Dupond Jean:/tmp:/bin/false
82 CHAPITRE 5. PPP
5.8 Sécurité
pppd doit être suid root pour pouvoir initialiser l’interface réseau et modifier
la table de routage. Son accès doit être réservé à un groupe d’utilisateurs (dip
en Debian).
Les fichiers de configuration dans /etc/ppp ne doivent être accessibles que
par l’administrateur. De même les fichiers logs.
Sur un serveur l’authentification doit être obligatoire.
5.9 Applications
5.9.1 PPP sur câble null modem
On raccorde les deux machines par un câble série dit null modem, les fils
transmit-receive sont croisés, voir Serial-HOWTO.
Choisissez une machine comme serveur. Installez mgetty sur un port série.
Testez la connectivité par minicom depuis le client. Si problème configurer les
ports avec setserial.
Maintenant il suffit de lancer pppd sur les deux machines, par exemple sur
le port ttyS1 de chacune d’elle par :
pppd -detach crtscts lock <local IP>:<remote IP> /dev/ttyS3 38400 &
On teste par ifconfig et ping que les deux machines communiquent. Mais on
n’a pas de routage. Coupez le lien en tuant l’un des pppd.
Pour router, on suppose qu’une machine a un interface Ethernet connecté
et l’autre non. Sur la machine avec interface Ethernet on fera :
pppd -detach crtscts lock proxyarp <local IP>:<remote IP> /dev/ttyS3 38400 &
et sur l’autre :
pppd -detach crtscts lock defaultroute <local IP>:<remote IP> /dev/ttyS3 38400 &
5.9.3 Routage
Si l’un des réseaux est connecté à Internet, on mettra defaultroute côté
client et on définira la machine Linux qui tourne le pppd client comme routeur
par défaut sur les machines du réseau non connecté à Internet.
S’il s’agit juste de connecter deux réseaux on ajoute une commande route
pour chaque réseau par le script /etc/ppp/ip-up. Il faut aussi que chaque
machine des deux réseaux connaisse le routeur.
5.9. APPLICATIONS 85
5.9.4 /etc/ppp/ip-up
Quand pppd a établi le lien il regarde si un script /etc/ppp/ip-up est
exécutable et si oui l’exécute. On peut l’utiliser pour passer une commande
route ou lancer sendmail afin d’envoyer le courier en instance. Exemple :
#!/bin/bash
#
# Script which handles the routing issues as necessary for pppd
# Only the link to Newman requires this handling.
#
# When the ppp link comes up, this script is called with the following
# parameters
# $1 the interface name used by pppd (e.g. ppp3)
# $2 the tty device name
# $3 the tty device speed
# $4 the local IP address for the interface
# $5 the remote IP address
# $6 the parameter specified by the ’ipparam’ option to pppd
#
case "$5" in
# Handle the routing to the Newman Campus server
202.12.126.1)
/sbin/route add -net 202.12.126.0 gw 202.12.126.1
# and flush the mail queue to get their email there asap!
/usr/sbin/sendmail -q &
;;
139.130.177.2)
# Our Internet link
# When the link comes up, start the time server and synchronise to the world
# provided it is not already running
if [ ! -f /var/lock/subsys/xntpd ]; then
/etc/rc.d/init.d/xntpd.init start &
fi
# Start the news server (if not already running)
if [ ! -f /var/lock/subsys/news ]; then
/etc/rc.d/init.d/news start &
fi
;;
203.18.8.104)
# Get the email down to my home machine as soon as the link comes up
# No routing is required as my home Ethernet is handled by IP
# masquerade and proxyarp routing.
/usr/sbin/sendmail -q &
;;
*)
esac
exit 0
86 CHAPITRE 5. PPP
5.11 Divers
– pppupd (package Debian) : veille à maintenir active la liaison PPP.
– diald permet de lancer automatiquement PPP quand une connexion est
demandée.
– EQL permet de coupler deux modems en un seul lien PPP, doublant ainsi
sa capacité.
– Linux supporte des cartes multiports pour connecter une batterie de mo-
dems : Cyclades, Stallion, Comtrol RocketPort... Voir Hardware HowTo
et Serial HowTo
Chapitre 6
6.1 Introduction
Ce document donne quelques règles minimales de sécurité pour des machines
Linux connectées sur Internet par une adresse IP fixe et qui ne font pas de
services réseau.
Ce document est provisoire. Toute remarque est bienvenue.
Linux est par nature un serveur réseau sur Internet. La plupart des distri-
butions Linux démarrent des serveurs réseaux sans même que le propriétaire de
la machine, qui croit avoir une simple station de travail, s’en rende compte. Ces
serveurs réseau sont inutilisés, ils prennent du temps CPU, de la mémoire et ce
sont autant de serrures que des pirates peuvent essayer d’ouvrir ou de forcer.
Une fois qu’un pirate a réussi à rentrer sur votre machine, il peut par étapes
successives devenir root, écouter ce qui passe sur le réseau local, s’installer sur
d’autres machines... Même s’il fait ça ”pour le sport”, c’est très gênant. Pas
seulement en raison des dégâts qu’il peut commettre sur la machine visitée, mais
parce que, contrôlant une machine à l’insu de son responsable, le pirate peut
mener à partir de cette machine des actions nuisibles sur le réseau. Par exemple
l’utiliser comme relais de messages publicitaires ou comme base d’attaque contre
d’autres machines.
Toute machine visitée par un pirate doit être entièrement reconfigurée.
Si Linux n’est utilisé que comme poste de travail personnel, il ne joue sur le
réseau qu’un rôle de client, tous les serveurs qui sont activés par les procédures
d’installation des distributions actuelles, sont non seulement inutiles mais sont
dangereux. Il faut les arrêter.
87
88 CHAPITRE 6. SÉCURITÉ RÉSEAU SUR LINUX
ps auxw|more
Quels sont les daemons qui ont ouvert une socket réseau ?
netstat -tu|more
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 1 0 localhost:printer localhost:851 TIME_WAIT
tcp 0 0 *:smtp *:* LISTEN
...
cd /etc/rc.d/init.d
./sendmail stop
apache
Serveur http
bind
Domain Name Server : peut être utilisé comme cache ou comme DNS
primaire ou secondaire, sinon inutile.
snmpd
Serveur snmp pour la gestion réseau. Inutile en général
rpc.nfsd
Gère les demandes de répertoires des clients par nfs. Ne le démarrez pas
si vous ne l’utilisez pas.
rpc.mountd
Idem Gère les demandes de clients de monter des répertoires exportés.
Voir fichier /etc/exports
samba
serveur pour machines Microsoft Windows . Si vous l’activez, paramétrez
le dans /etc/smb.conf. Ajouter en particulier :
hosts allow = 193.54.230. 127.
où 193.54.230. est mon réseau local.
sshd
connexion sécurisée à d’autres machines (recommandé)
xdm
connexion X-Windows
xfs
serveur de fontes X
routed
routage Internet, à supprimer. Faites du routage manuel par la commande
route.
whod
ou in.rwhod donne des informations sur les utilisateurs de votre machine.
A proscrire.
talk
permet de communiquer en temps réel (peut se prêter à des abus)
ntalk
idem
pop-x
relève de boı̂te aux lettres depuis des machines distantes : à interdire, c’est
dangereux.
imapd
idem
finger
répond à la commande finger. Utile pour avoir des informations sur les uti-
lisateurs de votre machine. Il permet aux pirates de savoir qui est connecté
sur votre machine par finger @votre machine
ident
utile sur un serveur de messagerie, sinon à interdire.
tftp
transfert de fichier archaı̈que. Surtout à interdire
bootps
permet de booter une machine par le réseau. A supprimer.
mountd
permet à une autre machine de monter par mount une partie de votre
disque dur (nfs) . Voir le daemon.
rusersd
répond à la commande rusers pour connaı̂tre les utilisateurs en session
sur votre machine
rstatd
?
saft
serveur de fichiers sendfiled (Simple Asynchronous File Transfer)
# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.
# See the manual pages hosts_access(5), hosts_options(5)
# and /usr/doc/netbase/portmapper.txt.gz
#
# Example: ALL: some.host.name, .some.domain
# ALL EXCEPT in.fingerd: other.host.name, .other.domain
#
ALL : ALL
– ALL : LOCAL autorise tous les services à toute machine dont le nom de
domaine ne contient pas de ’.’ . Donc une machine du réseau local
– ALL :193.54.230. autorise tous les services à toute machine de ce réseau.
En l’occurrence le réseau local.
94 CHAPITRE 6. SÉCURITÉ RÉSEAU SUR LINUX
ftp://ftp.lip6.fr/pub/linux/distributions/redhat/updates/6.1/i386/
ftp://ftp.lip6.fr/pub/linux/distributions/debian/dists/proposed-updates/
Les ”updates” d’une distribution sont des corrections de bugs et non des
ajouts de nouvelles fonctionnalités.
Les trous de sécurité sont signalés sur la liste “Bugtraq” :
Une attaque par syn-flood permet de perturber le service TCP sur un port
particulier (ici le serveur Web).
En général un ”Syn Flood” est symptomatique d’une attaque par ”déni de
service”. Le principe est simple et basé sur les caractéristiques de TCP. Si une
machine A veut établir une connexion TCP avec une machine B :
1. un SYN est envoyé de A vers B pour initialiser la connexion
2. un SYN/ACK est retourné par B vers A si le service est actif
3. un ACK est envoyé par A vers B pour confirmer à B la demande de
connexion
6.10. PRINCIPALES ATTAQUES RÉSEAU ET PARADES 97
dmesg | grep ’possible SYN flood’ | awk ’{print $6}’ | sort | uniq
Parade
Syn Cookies est une option à la compil du noyau qui permet de se protéger.
CONFIG SYN COOKIES :
Normal TCP/IP networking is open to an attack known as ”SYN flooding”.
This denial-of-service attack prevents legitimate remote users from being able
to connect to your computer during an ongoing attack and requires very little
work from the attacker, who can operate from anywhere on the Internet.
SYN cookies provide protection against this type of attack. If you say Y here,
the TCP/IP stack will use a cryptographic challenge protocol known as ”SYN
cookies” to enable legitimate users to continue to connect, even when your ma-
chine is under attack. There is no need for the legitimate users to change their
TCP/IP software ; SYN cookies work transparently to them. For technical infor-
mation about SYN cookies, check out ftp ://koobera.math.uic.edu/syncookies.html
.
If you are SYN flooded, the source address reported by the kernel is likely
to have been forged by the attacker ; it is only reported as an aid in tracing the
packets to their actual source and should not be taken as absolute truth.
SYN cookies may prevent correct error reporting on clients when the server
is really overloaded. If this happens frequently better turn them off.
If you say Y here, note that SYN cookies aren’t enabled by default ; you can
enable them by saying Y to ”/proc filesystem support” and ”Sysctl support”
below and executing the command
echo 1 >/proc/sys/net/ipv4/tcp_syncookies
6.10.2 smurf
Le principe de cette attaque c’est d’émettre les trames avec une adresse
source modifiée. Le propriétaire de cette adresse (et toutes les routes qui y
mènent) se trouvent saturés de réponse à des pings non sollicités. Voir : ftp ://ftp.cert.org/pub/cert advisorie
98 CHAPITRE 6. SÉCURITÉ RÉSEAU SUR LINUX
6.10.4 IP spoofing
Ce sont des paquets IP qui arrivent de l’extérieur avec une adresse source
trafiquée (forged), paraissant être une adresse du réseau local.
Parade
Prévue dans /etc/init.d/netbase activé au boot en Debian.
If you turn on IP forwarding, you will also get the rp filter, which automati-
cally rejects incoming packets if the routing table entry for their source address
doesn’t match the network interface they’re arriving on. This has security advan-
tages because it prevents the so-called IP spoofing, however it can pose problems
if you use asymmetric routing (packets from you to a host take a different path
than packets from that host to you) or if you operate a non-routing host which
has several IP addresses on different interfaces. To turn rp filter off use :
Filtrage, routage et
masquage des paquets IP
101
102CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP
| | |
| <- Réseau interne --> | | <--- Réseau externe --->
| | |
Dans ce schéma, la machine Linux Routeur est connectée à Internet par PPP
ou par Ethernet. Elle est la seule machine visible depuis Internet. Les autres
machines A-box, B-box, etc, ont des adresses IP privées en 192.168.1.x (cf RFC
1597). Elles sont sur un réseau privé invisible depuis Internet. La machine Linux
Routeur est connectée à ce réseau privé par un interface Ethernet eth1.
Si la machine Linux Routeur est configurée en routeur IP avec masquage
d’adresses, alors :
7.2. MASQUAGE : PERMETTRE À UN RÉSEAU PRIVÉ D’ACCÉDER À INTERNET103
– si les machines A-box, B-box, ... ont défini la machine Linux Routeur
comme gateway,
– Linux Routeur transmet les paquets IP du réseau interne vers le réseau
externe en changeant le port-source et mettant son adresse IP à la place de
l’adresse IP source. Il mémorise les paramètres originaux de la connexion
TCP : (IP-source, port-source, IP-dest, port-dest). C’est le masquage.
– pour les machines de l’Internet les paquets paraissent provenir de Linux
Routeur
– quand Linux Routeur reçoit un paquet TCP de l’extérieur, il examine
si le port-dest est un de ceux qui ont été attribués précédemment par le
masquage. Si c’est le cas il retrouve l’adresse IP et le port d’origine, corrige
le paquet IP et le renvoie à la machine à qui il est destiné.
– Des protocoles particuliers comme ftp qui ouvre une nouvelle connexion
TCP nommée ftp-data nécessitent le chargement d’un module du noyau.
– Une machine du réseau interne ne peut être appelée depuis Internet, sauf
si on configure sur la machine Linux Routeur le ”forward de port”.
Collisions:0
/sbin/modprobe ip_masq_ftp
#CRITICAL: Enable IP forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
# MASQ timeouts
#
# 2 hrs timeout for TCP session timeouts
# 10 sec timeout for traffic after the TCP/IP "FIN" packet is received
# 160 sec timeout for UDP traffic (Important for MASQ’ed ICQ users)
#
/sbin/ipchains -M -S 7200 10 160
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -s 192.168.1.0/24 -j MASQ
auger:/etc/init.d# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:18 errors:0 dropped:0 overruns:0 frame:0
TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
Collisions:0
7.2.4 Tests
Sur cette machine du réseau interne
– ping 192.168.1.1
– ping isis.u-strasbg.fr : une machine d’Internet
– ssh zoroastre.c-strasbourg.fr
– ftp zoroastre.c-strasbourg.fr
Durant la session lancée par ssh zoroastre, la commande sur zoroastre
netstat -tn montre :
Explication :
– On fixe la policy des chaı̂nes input, output et forward à DENY : aucun
paquet IP ne rentre, ne sort, n’est routé.
– On supprime toutes les règles des chaı̂nes input, output et forward.
– On ajoute à la chaı̂ne input la règle -j ACCEPT -i lo : on accepte tout
paquet qui rentre sur l’interface lo
– On ajoute à la chaı̂ne input la règle -j ACCEPT -i eth1 -s 192.168.1.1/255.255.255.0
: on accepte tout paquet qui rentre sur l’interface eth1 et ayant pour
adresse source les adresses 192.168.1.1 à 192.168.1.255, c’est à dire le réseau
interne.
– On ajoute à la chaı̂ne input la règle -j ACCEPT -i eth0 -d 193.54.230.3/32 :
on accepte tout paquet qui rentre sur l’interface eth0 et ayant comme
7.4. EXEMPLES DE FILTRAGE 111
7.4.3 Antispoofing
Debian exécute au boot dans le fichier /etc/init.d/netbase deux règles
antispoofing :
if [ -e /proc/net/ip_fwchains ]; then
echo -n "Setting up IP spoofing protection..."
ipchains -D input -j DENY -l -s 127.0.0.0/8 -i ! lo 2>/dev/null || true
ipchains -A input -j DENY -l -s 127.0.0.0/8 -i ! lo
La première règle ajoutée à la chaı̂ne input rejette en entrée sur tout interface
autre que loopback tout paquet avec comme adresse source 127.0.0.0 et logge
ces tentatives d’accès.
La deuxième ajoutée à la chaı̂ne input rejette en entrée sur tout interface
autre que loopback tout paquet avec comme adresse source l’adresse de la ma-
chine.
112CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP
7.9 Documentation
– Linux IPCHAINS HOWTO
– Linux MASQUERADE HOWTO
– apache
114CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP
Chapitre 8
Cryptage des
communications par ssh
8.1 Introduction
Ce document décrit comment installer et utiliser ssh sur Unix, Linux en
particulier. Il résume la documentation fournie avec le logiciel. Merci à Benoı̂t
Speckel pour ses conseils.
L’utilisation de ssh, en fait OpenSSH, version libre de SSH est vivement re-
commandée pour communiquer avec une machine distante sur Internet. ssh
crypte les paquets transmis sur le réseau et évite en particulier que des indis-
crets découvre des mots de passe en écoutant le réseau. Mais en plus c’est une
parade à certains trous de sécurité d’Internet notamment que des paquets IP
soient trafiqués de manière qu’une machine se fasse passer pour une autre.
– ssh ou slogin remplace rlogin, rsh et telnet . Les applications X11
lancées depuis une session ssh circulent dans un canal crypté. On n’a plus
à s’occuper de la variable DISPLAY et l’authentification X11 par xauth
est automatique.
– scp (secure copy) remplace rcp ou par extension ftp.
– On peut s’authentifier par un système de clés publiques et privées RSA
qui permet de se passer du password Unix.
On trouvera ssh dans le package ssh en Linux Debian.
Le package ssh se compose :
– d’un serveur sshd
– d’un client ssh (aussi appelé slogin)
– d’outils de gestion de clés : ssh-keygen, ssh-agent, ssh-add, make-ssh-known-hosts.
8.2 Documentation
http ://www.ssh.org
– man ssh
– man scp
– man ssh-keygen
– man ssh-add
115
116 CHAPITRE 8. CRYPTAGE DES COMMUNICATIONS PAR SSH
– man ssh-agent
– man make-ssh-known-hosts
– RFC : The SSH (Secure Shell) Remote Login Protocol : Internet Draft
décrivant le protocole
Livres
– ”Réseaux” par Andrew Tanenbaum, Interéditions : explique au chapitre 7
la sécurité dans les réseaux, les bases de la cryptographies, les algorithmes
DES, 3DES, IDEA, les algorithmes à clé publique, RSA, les protocoles
d’authentification.
– ”Applied Cryptography” par Bruce Schneier, John Wiley & Sons, 1996
traduit en français sous le titre ”Crytographie appliquée”
/etc/ssh/sshd_config
/etc/init.d/ssh start
cat /etc/hosts.deny
ALL:ALL
cat /etc/hosts.allow
sshd : in2p3.fr u-strasbg.fr c-strasbourg.fr
sshdfwd-pop3 : in2p3.fr u-strasbg.fr c-strasbourg.fr
sshdfwd-imap2 : in2p3.fr u-strasbg.fr c-strasbourg.fr
Options de ssh
– L’option -v (verbose) décrit les étapes de l’établissement de la connexion.
Utile quand ssh ne marche pas.
– L’option -f met ssh en arrière plan.
slogin -f machine-B xterm
– L’option -n met ssh en arrière plan et redirige stdin depuis /dev/null.
C’est utilisé pour lancer une application X11 depuis une machine distante.
Exemple :
ssh -n machine-B emacs &
Ceci ne marche pas si ssh doit demander un password ou une passphrase.
– L’option -C comprime (par la méthode de gzip) les paquets échangés.
Vivement recommandé pour une session PPP par modem téléphonique.
– L’option -c permet de choisir la méthode de chiffrement :
– idea (défaut)
8.5. SSH CLIENT 119
– des
– 3des
– blowfish
– arcfour
– none
(On tiendra compte des options prises à l’installation.)
$ ssh-add
Enter passphrase for /home/morel/.ssh/id_rsa:
Identity added: /home/morel/.ssh/id_rsa (/home/morel/.ssh/id_rsa)
Identity added: /home/morel/.ssh/identity (morel@helios)
#!/bin/sh
xrdb -load $HOME/.Xresources
exec /usr/bin/ssh-agent fvwm95
[ $SSH_AGENT_PID ] && \
[ "‘ssh-add -l‘" = "The agent has no identities." ] && ssh-add
#!/bin/sh
#set -x
# fichier .ssh-setup.sh :
if [ -z "$SSH_AUTH_SOCK" ]
then agentfile=$HOME/.ssh/ssh-agent.info
# démarrage ssh-agent
if [ -z "$SSH_AUTH_SOCK" ]
then [ -f $agentfile ] && \rm $agentfile
( trap ’’ 1 ; exec ssh-agent -s > $agentfile )
. $agentfile > /dev/null
[ -n "$SSH_AUTH_SOCK" ] && [ -t 0 -o -n "$DISPLAY" ] && ssh-add
fi
unset agentfile
fi
ssh-agent -s
SSH_AUTH_SOCK=/tmp/ssh-morel/ssh-20765-agent; export SSH_AUTH_SOCK;
SSH_AGENT_PID=20766; export SSH_AGENT_PID;
echo Agent pid 20766;
9.1 Introduction
La procédure d’installation en plusieurs étapes de la distribution Linux De-
bian permet d’installer une machine en installant juste les disquettes ”Rescue” et
”Drivers” puis en recopiant le système d’une autre machine par nfs en réseau lo-
cal. Cette procédure est une idée de Benoı̂t Speckel <Benoit.Speckel@IReS.in2p3.fr>.
Cette manoeuvre de ”clonage” est délicate en soi, elle est d’autant plus diffi-
cile que les outils dont on dispose sur la disquette rescue Debian sont vraiment
restreints et primitifs : mount, vi, zcat (filtre), star, ps, df, lilo...
Ce vi est en réalité ae qui est beaucoup plus limité que le vrai vi, ce star
n’est pas le tar de GNU.
9.2.2 Packages
Il faut charger les packages qui seront utiles aux autres machines, au moins
au départ. En particulier :
– serveur X11 pour les différentes cartes graphiques : xserver...
123
124 CHAPITRE 9. CLONAGE D’UNE MACHINE LINUX DEBIAN
#!/bin/sh
# archive de clonage
ARCHIVE=~morel/clone.tar.gz
LIST=~morel/tarlist.txt
if [ ‘id -u‘ -ne 0 ]
then
echo "Vous devez etre root"
exit
fi
cd /
tar -c -z -f $ARCHIVE bin dev usr boot etc lib root var sbin \
--exclude=var/lock/* --exclude=var/spool/mail/* \
--exlude=var/log/*.gz \
--exclude=var/tmp/* --exclude=usr/src/* --exclude=var/state/apt/lists
tar tzvf $ARCHIVE > $LIST
9.3.2 Exportation
Exemple : répertoire /home/morel exporté pour les machines du réseau
193.54.230.0.
vi /etc/exports
/home/morel 193.54.230.0/255.255.255.0(ro)
:wq
/etc/init.d/nfs-server restart
root=/dev/hda2
install=/boot/boot.b
map=/boot/map
vga=normal
delay=20
image=/boot/vmlinuz-2.0.38
label=linux
read-only
Exécuter lilo. La commande lilo fait un chroot /target. C’est donc
/target/etc/lilo.conf qui est pris en compte.
– S’assurer que la partition où on met lilo est bootable
Ici /dev/hda2. Le vérifier par fdisk -l /dev/hda. si ce n’est pas le cas
basculer le flag de boot en faisant : fdisk /dev/hda
– Configuration des modules à charger au boot
Entrer en particulier le module du driver de la carte réseau
vi etc/modules
– Configuration du réseau :
Il faut changer le nom de machine et son adresse IP, l’adresse du routeur,
des DNS.
vi etc/hostname (nom machine)
vi etc/init.d/network
vi etc/resolv.conf
– Nettoyage répertoire var
– Nettoyage var/log
– Création des répertoires manquants :
mkdir tmp ; chmod 1777 tmp
mkdir proc
mkdir home
– Vérification des daemons à démarrer au boot
cd etc/rc2.d;ls
On empêchera xdm de démarrer sur la console au prochain boot (sinon
vous risquez des problèmes avec le moniteur) en mettant en commentaire
la ligne :
#:0 local /usr/bin/X11/X vt7
dans /etc/X11/xdm/Xservers
– Démontage du filesystem
cd /
umount /target
9.5 Reboot
Le filesystem /target étant démonté on peut arrêter sans crainte la machine
et la relancer.
Si LILO échoue, c’est qu’il est mal installé. On doit rebooter avec la disquette
rescue, monter la partition contenant / sur /target. On y corrige etc/lilo.conf
et réexécute lilo.
– Changer le password de root (c’est actuellement le même que sur la ma-
chine mère).
– Configurer X-Window par xf86config ou bien en allant éditer directe-
9.5. REBOOT 127
Sendmail
10.2 SMTP
C’est le protocole d’échange de mail d’Internet décrit par RFC 821 (J.B.
Postel 1982). Il utilise le port tcp 25.
Exemple d’envoi d’un mail : On tape ces lignes au clavier :
telnet machine 25
helo phoebus.c-strasbourg.fr
mail from: <chirac@elysee.fr>
rcpt to: <morel@phase.c-strasbourg.fr>
data
Date: Wed, 26 Jun 1996 11:05:01 +0200 (MET DST)
From: Jacques CHIRAC <chirac@elysee.fr>
To: <morel@phase.c-strasbourg.fr>
Subject: Felicitations
129
130 CHAPITRE 10. SENDMAIL
Presidentiellement votre.
JC
.
quit
Remarques :
– Pour chaque ligne envoyé par le client, le serveur répond, sauf quand on
est dans le corps du message.
– Les mots clés helo, mail from etc sont en majuscules ou minuscules.
– Le message, entre data et ”.” a une syntaxe décrite dans RFC 822. Il est
formé d’un en-tête composé de lignes commençant par Date, From, etc,
suivi d’une ligne vide puis du corps du message. Les indications From :,
To : qu’il contient ne serve pas au transport. Elles peuvent être falsifiées.
– Comme on le voit sur cet exemple, dans SMTP, on n’est pas assuré de
l’authenticité du message, de l’expéditeur en particulier.
– machine est un nom de machine sur laquelle un serveur de mail comme
sendmail écoute sur le port tcp 25.
Pour chaque ligne envoyé par le client, le serveur répond, sauf quand on est
dans le corps du message.
$ telnet amon.u-strasbg.fr 25
Trying 130.79.200.3...
Connected to amon.u-strasbg.fr.
Escape character is ’^]’.
220 amon.u-strasbg.fr ESMTP Sendmail 8.9.3+Sun/8.9.0; Thu, 22 Jun 2000 23:22:14 +0200
quit <-------------commande à taper
221 amon.u-strasbg.fr closing connection
Connection closed by foreign host.
[morel@zoroastre nmap-2.53]$
On lit que, sur le port 25 de la machine amon, sendmail version 8.9.3 attend
des mails.
$ host -t mx iness.c-strasbourg.fr
iness.c-strasbourg.fr mail is handled by 5 zoroastre.c-strasbourg.fr
$ nc zoroastre.c-strasbourg.fr 25
220 auger.c-strasbourg.fr ESMTP Sendmail 8.12.3/8.12.3/Debian-7.1;
Wed, 21 Sep 2005 19:06:53 +0200; (No UCE/UBE)
logging access from: helios.c-strasbourg.fr(OK)-morel@helios.c-strasbourg.fr [193.54.230.78]
vrfy jacques.morel
250 2.1.5 <jacques.morel@auger.c-strasbourg.fr>
quit
221 2.0.0 auger.c-strasbourg.fr closing connection
$ nc zoroastre 25
220 auger.c-strasbourg.fr ESMTP Sendmail 8.12.3/8.12.3/Debian-7.1;
Wed, 21 Sep 2005 19:17:16 +0200; (No UCE/UBE)
logging access from: helios.c-strasbourg.fr(OK)-morel@helios.c-strasbourg.fr [193.54.230.78]
vrfy dupond
550 5.1.1 dupond... User unknown
quit
221 2.0.0 auger.c-strasbourg.fr closing connection
$ nc zoroastre.c-strasbourg.fr 25
expn root
250 2.1.5 Jacques Morel <morel@auger.c-strasbourg.fr>
– ESMTP : RFC 1651, permet de coder les caractères sur 8 bits. Il les
accepte du client et, si le destinataire ne les supporte pas, sait recoder sur
7 bits (8BITMIME). Le mot clé EHLO à la place de HELO invite le serveur
à indiquer les extensions qu’il supporte.
– MIME : RFC 2045 à 2049, permet :
– plusieurs corps dans un message, chacun étant marqué par Content-Type :
– chaque corps a un type MIME sous la forme type/sous-type, exemple :
text/plain. Les types sont text, image, application, audio, video,
multipart, message
– la représentation de tout caractère sur 7 ou 8 bits : un corps peut
être encodé en 7bit, quoted-printable (représentation presque li-
sible de caractères accentués : ”=” suivi des deux chiffres hexa du ca-
ractère), base64 (codage de 3 octets sur 4, c’est à dire découpe 24 octets
consécutifs (3 x 8) en 4 paquets de 6 bits, 6 bits suffisant pour représenter
un caractère dans un alphabet commun à toutes les machines), 8bit,
binary (codage sur 8 bits)
– l’indication du jeu de caractère utilisé, exemple : charset=iso-8859-1
– Les messages dont le nom de domaine indiqué dans le champ Mail from
n’existent pas dans le DNS sont rejetés.
10.6 Installation
Package Debian sendmail Version : 8.12.3-7.1 (woody), 8.13.4-3 (sarge).
Sendmail nécessite aussi les packages libdb2 (gestion de base de données),
m4 (macro-processeur), procmail (délivrance des messages dans les boı̂tes aux
lettres)
Debian propose un shell script de configuration sendmailconfig qui s’exécute
lors de la configuration du package :
– Le fichier de macros /etc/mail/sendmail.mc est créé,
– son traitement par le macro-processeurm4 donne le fichier /etc/mail/sendmail.cf
qui est le fichier de configuration de sendmail. Les macros m4 pour send-
mail se trouvent dans /usr/share/sendmail.cf
– sendmail est lancé
A la suite on peut corriger cette configuration en éditant /etc/mail/sendmail.mc
et en refaisant exécuter m4.
10.7 Documentation
Elle se trouve dans le package à part sendmail-doc.
10.8 Configuration
Fichiers :
– /etc/mail/sendmail.mc : configuration en syntaxe m4 pour générer sendmail.cf
– /etc/mail/sendmail.cf : configuration de sendmail
– /etc/mail/sendmail.cw : noms de domaines pour lesquels nous accep-
tons le mail comme local.
– /etc/mail/sendmail.ct : noms des utilisateurs habilités à changer le
champ mail from :
Méthode recommandée :
– copier /etc/mail/sendmail.mc dans un répertoire accessible par vous
sans être root :
mkdir ~/adm/sendmail
cd ~/adm/sendmail
cp /etc/mail/sendmail.mc config.mc
134 CHAPITRE 10. SENDMAIL
que :
define(‘LOCAL_MAILER_PATH’, /bin/mail.local)dnl
– undefine(‘UUCP RELAY’) : met à indéfini ce paramètre : je ne fais pas
relais pour UUCP ni BITNET
– FEATURE(redirect) : rejette tout mail pour les adresses notées ”address.REDIRECT”
dans /etc/aliases avec un message d’erreur : ‘551 User not local ; please
try address”. Exemple :
noel:noel@jipelec.com.REDIRECT
– FEATURE(always add domain) : ajoute le nom du domaine local aux adresses
non fqdn. Exemple : morel@zoroastre est transformé en morel@zoroastre.c-
strasbourg.fr
– FEATURE(use cw file : le fichier /etc/mail/sendmail.cw est utilisé pour
indiquer des alias. Il contient par exemple :
phase.c-strasbourg.fr
goa.c-strasbourg.fr
strasbourg.linuxfr.org
Il indique que tout courrier pour ces adresses doit être délivré localement.
– define(‘confMAX MESSAGE SIZE’, ‘5000000’) : taille maximum en oc-
tets pour un message reçu, sinon renvoit avec un diagnostic.
– FEATURE(access db, hash -o /etc/mail/access) : permet d’accepter
ou de refuser des messages. /etc/mail/access est une table qui sera
transformée en base de donnée accédée par hash coding. Exemple de
contenu :
193.54.230 OK
rtc1.u-strasbg.fr RELAY
usa.com 550 We don’t accept mail from spammers
tnt2.everett.wa.da.uu.net 550 We don’t accept mail from spammers
www.free2blieve.com 550 We don’t accept mail from spammers
– OK : J’accepte les mails en provenance de mon réseau 193.54.230.
– RELAY : J’accepte de relayer (=router) les messages en provenance de
cette machine
– usa.com je renvoie un message d’erreur (550) avec ce libellé. (les codes
d’erreur sont décrits dans RFC 821)
– define(‘PROCMAIL MAILER PATH’, ‘/usr/bin/procmail’) : indique où
se trouve procmail
– FEATURE(local procmail) : dit que le courrier local sera délivré par proc-
mail
– MAILER(procmail) : déclare le mailer procmail
– MAILER(smtp) : déclare le mailer smtp
Les bases de données access-db sont créées par :
en local et à la réception.
– define(‘confMAX MESSAGE SIZE’, ‘5000000’) : taille maximum en oc-
tets pour un message reçu, sinon envoi d’un diagnostic.
– define(‘SMTP MAILER MAX’, ‘20000000’) : taille maximum en octets
pour un message transporté par smtp, esmtp ou smtp8.
– define(‘PROCMAIL MAILER MAX’, ‘20000000’) : taille maximum en oc-
tets pour un message délivré par procmail.
O PrivacyOptions=needmailhelo, noexpn
divert(-1)
include(‘/usr/share/sendmail.cf/m4/cf.m4’)
OSTYPE(‘linux’)
undefine(‘ALIAS_FILE’)
define(‘SMART_HOST’, ‘zoroastre.c-strasbourg.fr’)
define(‘confFORWARD_PATH’, ‘’)
MASQUERADE_AS(‘phase.c-strasbourg.fr’)
FEATURE(‘allmasquerade’)
FEATURE(‘masquerade_envelope’)
– SMART HOST : ici tout le courrier est renvoyé sur la machine zoroastre
– MASQUERADE AS : fait apparaı̂tre le mail comme venant du domaine phase.c-strasbourg.fr
echo@univ-rennes1.fr
echo@cnam.fr
ping@oleane.net
echo@alma.fr
10.9. EXPLOITATION DE SENDMAIL 137
sendmail: all
10.9.3 Alias
Ils sont entrés dans le fichier /etc/aliases. Exemple :
define(’confTO_QUEUERETURN’, ’6d’)
define(’confTO_QUEUEWARN’, ’8h’)
$host -t mx strasbourg.linuxfr.org
strasbourg.linuxfr.org MX 100 zoroastre.c-strasbourg.fr
FEATURE(‘use_cw_file’)dnl
FEATURE(‘virtusertable’, ‘hash -o /etc/mail/virtusertable’)dnl
/etc/mail/sendmail.cw contient :
strasbourg.linuxfr.org
/etc/mail/virtusertable contient :
@strasbourg.linuxfr.org %1@tux.u-strasbg.fr
10.10. ROUTAGE D’UN DOMAINE VIRTUEL AVEC SENDMAIL 139
Apache
11.1.2 HTTP
Versions de HTTP :
– HTTP/0.9
– RFC 1945 : Hypertext Transfer Protocol – HTTP/1.0. T. Berners-Lee, R.
Fielding & H. Frystyk. May 1996.
141
142 CHAPITRE 11. APACHE
HTTP/1.1
Requête du client Une requête du client au serveur en HTTP/1.1 s’écrit sur
deux lignes :
Il peut s’y ajouter des lignes ”Request Header Fields” permettant de passer
des paramètres supplémentaires :
– If-Modified-since : voir GET conditionnel plus loin.
– Accept-Language : préférence sur la langue
– Accept : préférence sur les types de media
– ...
Exemple de préférences pondérées par un coefficient q envoyées par un client :
– Method
– OPTIONS
– GET : demande la ressource indiquée par l’URI
– HEAD : fournit des infos sur la page demandée (Last-Modified, Content-Length,
Content-Type...)
– POST : transfert de données à l’URI indiquée (utilisé pour les réponses
à un formulaire)
– PUT : écriture d’une ressource sur le serveur
– DELETE : demande au serveur d’effacer la ressource associée à l’URI
– TRACE
– Request-URI : URI terme un peu plus général que URL. Même syntaxe.
– HTTP-Version : HTTP/1.0 ou HTTP/1.1
En principe HTTP utilise le port TCP 80.
Exemple de requête :
Avec HEAD :
HEAD / HTTP/1.1
Host: www-phase.c-strasbourg.fr
Avec OPTIONS :
11.1. LE SERVEUR WWW APACHE 143
OPTIONS * HTTP/1.1
host: www-phase.c-strasbourg.fr
Avec GET :
GET /phase.html HTTP/1.1
host: www-phase.c-strasbourg.fr
Exemple d’interrogation par telnet. C’est un bon test pour savoir si votre
serveur apache marche :
$ telnet localhost 80
Trying 193.54.230.20...
Connected to zoroastre.c-strasbourg.fr.
Escape character is ’^]’.
HEAD / HTTP/1.1 <----- entré au clavier
Host: www-phase.c-strasbourg.fr <----- entré au clavier
HTTP/1.1 200 OK
Date: Wed, 14 Jun 2000 18:34:27 GMT
Server: Apache/1.3.3 (Unix) Debian/GNU
Last-Modified: Tue, 18 Jan 2000 15:13:24 GMT <---- date maj page d’accueil
ETag: "d98af-1476-38848314"
Accept-Ranges: bytes
Content-Length: 5238
Content-Type: text/html
Réponse du serveur Toute réponse du serveur est précédée d’un en-tête fait
d’une ou plusieurs lignes dont :
– Une Status-Line toujours présente au début :
HTTP-Version SP Status-Code SP Reason-Phrase CRLF
– Content-type : mime type
– Content-length : longueur du document
– Last-Modified : date mise à jour
– Expires : durée de validité du document (optionnel) C’est une informa-
tion sur la durée de validité du document, sa date de fraı̂cheur en quelque
sorte.
– et d’autres entity header
– CRLF une ligne vide
–
Exemple d’en tête :
HTTP-1.1 301 Now where did I leave that URL
Location: http://xyz.abc.com/foo/bar.html
Content-type: text/html
On voit ces en-têtes quand par telnet on passe des commandes HEAD.
144 CHAPITRE 11. APACHE
HTTP/1.0
HTTP/1.0 est beaucoup plus simple : il ne supporte que 3 méthodes : GET,
POST, HEAD, OPTIONS et il n’y a pas à envoyer de ligne Host :
Apache le supporte aussi. Exemple de requête :
GET /phase.html HTTP/1.0 CRCR
(la requête doit être suivi de deux retour chariot).
Autre exemple :
$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is ’^]’.
OPTIONS * HTTP/1.0
HTTP/1.1 200 OK
Date: Sun, 18 Jun 2000 18:09:00 GMT
Server: Apache/1.3.3 (Unix) Debian/GNU
Content-Length: 0
Allow: GET, HEAD, OPTIONS, TRACE
Connection: close
GET
La commande GET permet de demander une ressource par un URI, mais
en plus, on peut coller des paramètres à la suite de l’URI. Dans ce cas, la
ressource est un programme ou un script que le serveur http fait exécuter en lui
transmettant ces paramètres. Les résultats sont des pages HTML que le serveur
renvoie au client (voir programmes CGI). La syntaxe est :
GET URI?param-1=val-1¶m-2=val-2& ... ¶m-n=val-n
Où param-i sont des noms de variables et val-i des chaı̂nes de caractères
où les blancs sont remplacés par des + et les caractères ascii > 120 codés sous
la forme %xx.
GET conditionnel : Un GET suivi d’une condition du type :
If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
permet de ne demander au serveur l’envoi de la ressource associée à l’URI
que si celle-ci est plus récente que celle qu’il a dans son cache (spécifique à
HTML/1.1). Il existe d’autres types de conditions.
11.3 Documentation
– http://www.apache.org/
– ”Apache” par Ben et Peter Laurie Editions O’Reilly (pas fameux, traduc-
tion française pire)
– la doc fournie dans le package Debian apache-doc
Utilisation :
lynx /usr/doc/apache/manual/index.html
ou bien, si Apache fonctionne par :
lynx http://localhost/doc/apache/manual/index.html
11.4 Installation
En Debian, Apache vient en 4 modules :
1. apache : Apache version 1.3.3-7 conforme à RFC-2068
2. apache-common : modules, utilitaires, icones
3. apache-doc : /usr/doc/apache/manual/
4. apache-utils
A l’installation Debian propose une configuration interactive. Il est recom-
mandé au début de prendre les options par défaut proposées, il est toujours
possible de revenir dessus plus tard.
Prendre les choix par défaut de Debian (noté en majuscule) en tapant RC.
/etc/init.d/apache start
$ ps auxf|grep apache
USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
root 13021 0.9 0.8 1904 1132 ? S 20:32 0:00 /usr/sbin/apache
www-data 13022 0.0 0.8 1924 1128 ? S 20:32 0:00 \_ /usr/sbin/apache
www-data 13023 0.0 0.8 1924 1128 ? S 20:32 0:00 \_ /usr/sbin/apache
www-data 13024 0.1 0.8 1924 1128 ? S 20:32 0:00 \_ /usr/sbin/apache
www-data 13025 0.1 0.8 1924 1128 ? S 20:32 0:00 \_ /usr/sbin/apache
www-data 13026 0.1 0.8 1924 1128 ? S 20:32 0:00 \_ /usr/sbin/apache
11.6 Configuration
Les fichiers de configuration sont dans /etc/apache.
Suivant la tradition de httpd NCSA il y a 3 fichiers de configuration :
– httpd.conf : paramètres généraux de fonctionnement + virtuals hosts
– access.conf : restrictions d’accès
– srm.conf : répertoires accessibles aux clients
mais il est fortement recommandé de les fusionner dans httpd.conf. En
plus, il y a le fichier mime.types
Debian ajoute un cron.conf pour faire tourner les logs.
Configuration minimale : Elle se fait en éditant le fichier httpd.conf qui est
abondamment commenté :
<Directory /var/www/cgi-bin>
AllowOverride None
Options ExecCGI FollowSymLinks
</Directory>
<Location /cgi-bin/phf*>
deny from all
ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
</Location>
# Debian Policy assumes /usr/doc is "/doc/", at least from the localhost.
<Directory /usr/doc>
Options Indexes FollowSymLinks
AllowOverride None
order allow,deny
allow from all
</Directory>
<DirectoryMatch ^/home/.*/public_html>
Options SymLinksIfOwnerMatch Indexes
AllowOverride None
</DirectoryMatch>
/usr/sbin/apache-modconf apache
<VirtualHost www-sfp2001.c-strasbourg.fr>
ServerAdmin morel@phase.c-strasbourg.fr
DocumentRoot /var/www/sfp2001
ServerName www-sfp2001.c-strasbourg.fr
ErrorLog /var/log/apache/sfp2001-error_log
TransferLog /var/log/apache/sfp2001-access_log
</VirtualHost>
AddLanguage en .en
AddLanguage fr .fr
LanguagePriority en fr de
<Directory /var/www>
Options Indexes FollowSymLinks ExecCGI Multiviews
AllowOverride None
order allow,deny
allow from all
</Directory>
154 CHAPITRE 11. APACHE
</Limit>
</Directory>
Ce qui signifie que pour la méthode GET l’accès de /var/www/phase/interne
est interdit à tous, sauf aux machines dont les adresses IP commencent par
193.54.230, 130.79.74, 130.79.194 et bien sûr localhost.
Remarque : deny,allow forme un seul mot (pas de blanc).
Je voudrais autoriser l’accès de mes pages Web à tous, sauf à la direction du
CNRS. Je crée un fichier /home/morel/public html/.htaccess qui contient :
<Limit GET>
order allow,deny
allow from all
deny from dr10.cnrs.fr cnrs-dir.fr
</Limit>
Mais attention, il faut une directive AllowOverride All pour que le fichier
.htaccess soit pris en compte.
On peut aussi conditionner l’accès par une variable. Par exemple, par BrowserMatch
je crée une variable d’environnement si le nom du Browser satisfait une expres-
sion régulière.
deny from env=cette_variable
interdira l’accès à ce type de Browser.
On peut aussi faire un contrôle d’accès par userid/password
11.12 Maintenance
11.12.1 Erreurs
Regardez les fichiers Logs, dans /var/log/apache en particulier les fichiers
*-error log
156 CHAPITRE 11. APACHE
11.12.2 Statistiques
Exemple : wwwstat fait des statistiques à partir des fichiers logs. Résultat
au format HTML.
http://www.ics.uci.edu/pub/websoft/wwwstat/
Configuration : fichier wwwstat.rc. Vérifier $DefaultLog $Do Archive
Emploi :
wwwstat -h
Statistiques globales :
wwwstat >stat.html
Statistiques d’accès au répertoire de l’utilisateur dupond :
wwwstat -n ’^/~dupond/’
Chapitre 12
Exécution de programmes
CGI sur un serveur WWW
157
158CHAPITRE 12. EXÉCUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW
#!/bin/sh
tmp=‘/bin/date‘
160CHAPITRE 12. EXÉCUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW
<HTML><HEAD><TITLE>Script Cgi</TITLE></HEAD>
<BODY>
<CENTER>
</CENTER>
</BODY>
</HTML>
EndFile
Ce qu’il faut retenir à ce niveau, c’est qu’un script CGI doit produire sur
sa sortie standard quelque chose de compréhensible par le navigateur, donc,
dans la majorité des cas, une sortie au format HTML. La seule obligation est la
présence, sur la première ligne, du header Content-type. Les autres parties du
header seront ajoutées par le serveur HTTP. C’est pourquoi ce type de script
est appelé Parsed Header Script. Il existe un autre type de script CGI, appelé
Non Parsed Header Script. Pour ce type de script, le serveur ne rajoute rien,
et c’est donc le script lui-même qui a la charge de fournir un header complet,
conforme au protocole HTTP.
Voilà, nous avons écris notre premier script CGI. On y accède directement
par le navigateur.
Faites le test :
http://www.april.org/cgi-bin/date.cgi
.
<HTML><HEAD><TITLE>Formulaire simple</TITLE></HEAD>
<BODY>
<H2>Répondez aux questions suivantes</H2>
<FORM ACTION="http://www.april.org/cgi-bin/treat.pl" METHOD=GET>
Prénom : <INPUT TYPE="text" NAME=prenom SIZE=20><BR>
Nom : <INPUT TYPE="text" NAME=nom SIZE=20><BR>
Age : <SELECT NAME=age>
<OPTION>- de 18 ans
<OPTION>19 à 40 ans
<OPTION>41 à 60 ans
<OPTION>+ de 60 ans
</SELECT><BR>
<INPUT TYPE=submit VALUE="Envoyer"> <INPUT TYPE=reset VALUE="Remettre
à zéro">
</FORM>
</BODY>
</HTML>
prenom=Marcel&nom=Gnou&age=41+%E0+60+ans
http://www.april.org/cgi-bin/treat.pl?prenom=Marcel&nom=Gnou&age=41+%E0+60+ans
12.4. SAISIE ET TRAITEMENT DES CHAMPS D’UN FORMULAIRE 163
http://www.april.org/cgi-bin/treat.pl
#!/usr/bin/perl
# on affiche le resultat
printf STDOUT "<LI><STRONG>%s:</STRONG>%s\n",$key,$val;
}
#!/bin/sh
#
echo "</BL>"
echo "</UL>"
echo "</BODY></HTML>"
166CHAPITRE 12. EXÉCUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW
#include <stdio.h>
printf("Content-Type: text/html\n\n");
printf("<HTML><HEAD><TITLE>Variables</TITLE></HEAD><BODY>\n");
while(*env){
printf("%s <BR>\n",*env++);
printf("</BODY></HTML>\n");
}
– pour chaque champ value, conversion des + en espaces, et tous les %xx en
leur valeur alphanumérique.
Les deux méthodes GET et POST différencient le moyen de communication
entre le serveur et le programme. La méthode GET est limitée par la taille
maximale acceptée par le serveur au niveau d’un URL, la méthode POST n’étant
pas restreinte par cette limite.
Testez le formulaire et son script sur
http://www.april.org/groupes/doc/cgi-bin/form.html
#!/usr/bin/perl
print "</BODY></HTML>\n";
http://www.april.org/cgi-bin/env.pl
au navigateur, et donc vous ne voyez en fait que ce qu’en fait le navigateur. Votre
programme peut donc s’exécuter correctement sur le serveur, afficher quelque
chose sur sa sortie standard, mais cette sortie est peut-être incohérente pour le
navigateur, qui vous affiche alors un message d’erreur.
Exécutez donc votre programme sur la ligne de commande, qu’affiche t’il
en sortie ? Comme nous l’avons déjà vu précédemment, la première ligne af-
fichée doit être le champ Content-Type du header HTTP, suivi par une ligne
blanche. Si ce n’est pas le cas, corrigez-le. Une erreur fréquente est, en lan-
gage C, l’instruction suivante : printf("Content-Type : text/html\n") ;.
Cette instruction est syntaxiquement correcte, mais elle n’affiche pas de ligne
blanche après l’affichage de la chaı̂ne. Le \n ne fait aller qu’à la ligne. Il faut
deux newline. L’instruction correcte est la suivante : printf("Content-Type :
text/html\n\n") ;. Ceci est une des erreurs les plus fréquement commises au
début de la programmation de scripts CGI. Le reste de l’affichage, après le hea-
der et la ligne blanche, doit être cohérent avec le header. Donc, dans ce cas de
figure, une sortie au format HTML. Par exemple :
Content-type: text/html
<HTML><HEAD>
<TITLE>Sortie Correcte</TITLE>
</HEAD>
<BODY>
</BODY></HTML>
export QUERY_STRING="prenom=Marcel&nom=Gnou&age=41+%E0+60+ans"
Il faut affecter une valeur la plus proche possible du réel (donc éventuellement
avec les %xx correspondant aux caractères accentués et réservés). On peut alors
exécuter le programme sur la ligne de commande et étudier sa sortie.
Enfin, si votre script doit être installé sur une autre machine que celle sous la-
quelle vous l’avez écrit, pensez à vérifier les chemins (path) des programmes que
vous utilisez. Dans l’exemple de date.cgi, le programme peut planter (et donc
votre navigateur vous affiche un message d’erreur), si par exemple le programme
date ne se trouve pas dans le répertoire /bin. Votre programme, donnant une
sortie correcte sur votre machine, exécuté sur l’autre machine, affichera en sor-
tie :
12.5. DÉBOGUER UN SCRIPT CGI 169
<HTML><HEAD><TITLE>Script Cgi</TITLE><HEAD>
<BODY>
<CENTER>
</CENTER>
</BODY>
</HTML>
Ce qui, vous en conviendrez, n’est pas une sortie correcte. Le problème peut
se poser également avec les scripts écrits en Perl. En effet, dans nos exemples, on
supposait que Perl se trouvait dans le répertoire /usr/bin/ (première ligne de
nos scripts : # !/usr/bin/perl). Si sur la machine sur laquelle doit s’exécuter
notre programme perl ne se trouve pas dans ce répertoire nous aurions commme
sortie :
Samba
13.1 Introduction
Samba sur une machine Unix offre les mêmes services aux machines Windows
qu’un serveur Windows NT : serveur de fichier et d’impression.
Samba (de Andrew Tridgell) est un serveur de fichiers et d’impression fonc-
tionnant en UNIX, sur Linux en particulier et compatible avec les clients réseau
Microsoft. Il rend (à peu près) les mêmes services que Windows NT serveur.
Donc on peut se passer de ce dernier. Il permet aux utilisateurs Windows
d’accéder à des ressources UNIX et inversement aux utilisateurs Unix d’accéder
aux ressources partagées par les machines Windows. Utilité pour Windows :
– accès à des ressources distantes comme si elles étaient locales
– manipulation des fichiers distants ”à la souris”
– espace disque supplémentaire pour chaque utilisateur (sécurisé par des
sauvegardes)
– espace commun pour échanges de fichier
– accès aux imprimantes réseau
– accès au lecteur de cartouches pour sauvegardes
– distribution de logiciels
– partage de logiciels
171
172 CHAPITRE 13. SAMBA
13.4.2 Description
– Le serveur est constitué de deux daemons :
– smbd : serveur SMB : gère les accès aux ressources partagées
– nmbd : serveur de noms Netbios : permet de localiser les serveurs
– Fichier de configuration : /etc/samba/smb.conf
– Ports TCP et UDP : Entrées dans /etc/services
netbios-ns 137/tcp # NETBIOS Name Service
netbios-ns 137/udp
netbios-dgm 138/tcp # NETBIOS Datagram Service
netbios-dgm 138/udp
netbios-ssn 139/tcp # NETBIOS session service
netbios-ssn 139/udp
– Démarrage des daemons : En Debian /etc/init.d/samba start Remarque :
smbd et nmbd peuvent être démarrés par inetd
– Test :
testparm|more
smbclient -L serveur_samba
netstat -a|grep netbios
Le test déterminant est l’accès depuis Windows.
13.4.3 Utilitaires
– testparm : test de la configuration de Samba configuration
– testprns lp : teste l’accès à l’imprimante lp
– smbstatus : liste des connexions Samba en cours
– nmblookup : interrogation de noms NetBIOS
13.4.4 Documentation
– Livre ”Using Samba” chez O’Reilly.
ftp://ftp.medasys-digital-systems.fr/pub/linux/doc/
– http ://fr.samba.org/samba/samba.html
– man pages pour smbd, nmbd et smb.conf.
– cd /usr/doc/samba-doc
;
; /etc/smb.conf
;
; Sample configuration file for the Samba suite for Debian GNU/Linux
;
; Please see the manual page for smb.conf for detailed description of
; every parameter.
;
[global]
...
[homes]
...
[printers]
...
[tmp]
...
[partage]
...
[global]
printing = bsd
printcap name = /etc/printcap
load printers = yes
guest account = nobody
invalid users = root
hosts allow = 193.54.230. 127.
security = user
workgroup = PHASE
server string = %h server (Samba %v)
socket options = IPTOS_LOWDELAY TCP_NODELAY SO_SNDBUF=4096 SO_RCVBUF=4096
socket address = 193.54.230.121
interfaces = 193.54.230.121
encrypt passwords = true
smb passwd file = /etc/samba/private/smbpasswd
wins support = yes
; wins server = 172.16.0.10
os level = 65
13.5. CONFIGURATION DE SAMBA 177
; domain master = no
local master = yes
preferred master = yes
name resolve order = host wins bcast
max log size = 1000
debug level = 0
– max log size : taille en Kilooctets du fichier log après quoi smbd le préfixe
en .old et en recrée un autre. Fichiers log : Depuis Samba 2.2 ils sont en
Debian dans /var/log/samba/. Ce sont /var/log/samba/log.smbd et
/var/log/samba/log.nmbd
– debug level : niveau de debug (si problème, voir les messages dans fi-
chiers logs.)
13.5.3 Partage
Un partage (share) ou service est défini par un répertoire auquel il permet
d’accèder et des conditions d’accès. C’est soit un partage de fichiers, soit un
partage d’imprimante. Les droits d’accès aux fichiers sont conditionnés par les
permissions Unix.
[homes]
comment = Home Directories
browseable = no
read only = no
create mask = 0755
directory mask = 0755
[tmp]
comment = Espace public temporaire
path = /tmp
read only = no
public = yes
[fournis]
comment = Base de donnees des fournisseurs
path = /home/fournis
public = yes
writable = yes
printable = no
write list = christof, weymann
[pv]
comment = Pages Web photovoltaique
path = /var/www/phase/pv
valid users = christof
public = no
writable = yes
printable = no
13.5.9 Authentification
La méthode recommandée est d’utiliser security=user et de prendre comme
userid/password Windows les mêmes userid/password qu’en Unix.
Si pour un partage on a mis la clause guest ok = yes, alors aucun password
n’est demandé pour l’accéder.
13.6 Audit :
– testparm : contrôle la validité du fichier de configuration de Samba
– ping : test connectivité du client, du serveur
– smbclient -L serveur : affiche les partages de la machine serveur
– netstat -a|grep netbios : contrôle des sockets ouverts
– nmblookup : interrogation de noms NetBios
Il y a deux types de résolution de nom NetBIOS : Broadcast (option -B),
point à point (option -U).
– nmblookup -B serveur SAMBA : teste d’un serveur Samba (B comme
adresse de broadcast)
– nmblookup SAMBA : teste tous les serveurs Samba
– nmblookup ’*’ : teste toutes les machines actives supportant NetBios/SMB
dans la même zone de broadcast
– nmblookup -S serveur : liste les noms déclarés par un serveur (S comme
node status query)
13.7. INCIDENTS 181
13.7 Incidents
– Si problème consultez les log avec un niveau de debug 2 ou 3.
– ”Si je veux aller sur le serveur samba a partir de windows 95 par l’icône
Voisinage réseau. il ouvre une fenetre et me demande un password pour
\\serveur_samba\IPC$
Quel est ce password ? Pourquoi cette requete ?”
Soit vous n’avez pas répondu à la question userid/password en début de
session Windows, soit votre userid/password n’est pas conforme à celui du
serveur Samba, soit il y a désaccord sur le cryptage des passwords entre
le serveur et votre machine.En Windows 98 par défaut les passwords pour
les échanges réseau sont cryptés. Pour l’empêcher modifier ainsi la base de
registres :
Démarrer/Exécuter/regedit
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Vxd\VNETSUP\
Menu Edit/Nouveau/Valeur DWORD
Mettre le nom à EnablePlainTextPassword
(Attention aux majuscules)
Sélectionner ce nom puis
Menu Edit/Modifier/Données de la valeur:00000001
Puis rebooter.
13.8.3 smbtar
smbtar est un shell script qui appelle smbclient. Il permet de sauver sur
un lecteur de cartouche Unix les fichiers d’un partage Windows.
Appel :
13.8.4 smbmount
Le support de smbfs doit être configuré dans le noyau et, en Debian, il faut
le package smbfs.
– smbmount-2.0.x //aline/java smb -n : monte le partage java de la
machine aline sur le répertoire smb sans mot de passe (-n). Il n’est pas
nécessaire d’être root.
– smbmount-2.0.x -h : décrit les options
– smbumount-2.0.x smb : démonte le filesystem
13.8.5 smbprint
smbprint est un shell script qui appelle smbclient pour envoyer un fichier à
imprimer sur une imprimante Windows.
Pour imprimer il suffit de se connecter à un service d’impression et de faire
print fichier. Exemple :
:lf=/var/log/lp3-errs:\
:if=/var/spool/lpd/pv/smbprint
Exécute :
Script de logon
Cela se fait par un fichier *.bat rangé sur le serveur Samba.
[global]
security=user
domain logons = Yes
logon script=%U.bat
[netlogon]
comment = Network Logon Services
path=/home/samba/netlogon
writeable= no
guest ok = no
browseable = no
locking = no
case sensitive = no
184 CHAPITRE 13. SAMBA
Ce script sera exécuté sous Windows, il doit avoir des fins de ligne à la
MSDOS.
Le script de logon peut être collectif, par exemple :
logon script=startup.bat
[global]
domain logons = yes
security = user
logon path = \\zoroastre\profile\%U
[profile]
comment = User profiles
path = /home/samba/profile
create mode = 0600
directory mode = 0700
writable = yes
browsable = no
[printer$]
comment = Pilotes d’imprimante
13.9. APPLICATIONS DE SAMBA 185
path=/home/samba/printer
public=yes
writable=no
browseable=yes
2. Installer les drivers sur une machine W95.
3. Repérer les drivers nécessaires pour une imprimante. Copier
c:\windows\inf\msprint*.inf
sur Linux dans /home/samba/lib. Exécuter, par exemple :
cd /home/samba/lib
make_printerdef msprint.inf "Apple LaserWriter" >> printers.def
ce programme affiche sur stderr tous les fichiers nécessaires. Copiez les
dans /home/samba/printer
4. Ajoutez deux paramètres dans /etc/samba/smb.conf. Dans la section
[global] ’printer driver file’ doit pointer sur printers.def que
l’on vient de créer. L’autre ’printer driver location’ pour chaque
partage d’imprimante pointe sur le répertoire où le client trouvera les
drivers
Exemple :
[global]
printer driver file=/home/samba/lib/printers.def
[lp]
comment = My old printer laser
browseable = yes
printable = yes
public = yes
writable = no
create mode = 0700
printer driver=Apple LaserWriter
printer driver location=\\%h\printer$
%h donnera le nom du serveur Samba, et printer$ est le nom du partage
créé plus haut.
Voir /usr/doc/samba-doc/PRINTER DRIVER.txt.gz
[global]
netbios aliases = admin other
include = /etc/samba/smb.conf.%L
186 CHAPITRE 13. SAMBA
Ici le serveur apparaı̂tra dans le voisinage réseau des clients sous son nom
par exemple zoroastre et aussi sous admin et other. %L prendra les valeurs
zoroastre, admin et other.
Le fichier /etc/samba/smb.conf.admin peut contenir une section global et
des partages. S’il n’existe pas, cela ne fait pas d’erreur.
Chapitre 14
Netatalk : serveur
AppleTalk
AFP
|
ASP PAP
\ /
ATP RTMP NBP ZIP AEP
| | | | |
-+---------------------------------------------------+- (kernel boundary)
| Socket |
+-----------------------+------------+--------------+
| | TCP | UDP |
| DDP (kernel) +------------+--------------+
| | IP |
+-----------------------+---------------------------+
| Network-Interface |
+---------------------------------------------------+
– Couche réseau :
– DDP : Datagram Delivery Protocol
– Couche transport :
– RTMP : Routing Table Maintenance Protocol (émet un paquet RTMP
tous les 10 secondes)
– AEP : Appletalk Echo Protocol : ping utilisé au départ de chaque
session
187
188 CHAPITRE 14. NETATALK : SERVEUR APPLETALK
14.3 Documentation :
http://www.umich.edu/\~{}rsug/netatalk/
14.4 Installation
Package Debian netatalk Version : 2.0.2-3
Compilation du noyau :
Appletalk DDP doit être compilé sous forme de module. Sinon on ne peut
redémarrer les serveurs netatalk. Il est préférable d’autoriser le multicast.
/etc/init.d/netatalk start
Starting AppleTalk daemons (this will take a while):
14.5 Configuration
14.5.1 atalkd
/etc/netatalk/atalkd.conf : en général vide. Peut contenir :
14.5.2 afpd
afpd : daemon interface avec AppleTalk Filing Protocol(AFP)
Configuration
– /etc/netatalk/afpd.conf : en général vide.
– /etc/netatalk/AppleVolumes.default : répertoires accessibles depuis
le chooser d’un Mac
# default user-specific volumes to be exported go here.
# this file can be overridden by a file named ’AppleVolumes’ in the
# user’s home directory.
# local directory name of macintosh volume
~/ "Home Directory"
– $HOME/.AppleVolumes : contient les répertoires auxquels le user à accès
– /etc/netatalk/AppleVolumes.system : définit les correspondances pour
les extensions de fichiers.
Documentationman afpd
Dans chaque répertoire du serveur Linux où accèdes un Mac par Netatalk
un répertoire ”invisible” .AppleDouble est créé qui contient les mêmes noms de
fichiers que le répertoire où il se trouve. Ces fichiers sont de type AppleDouble
encoded Macintosh file.
14.5.3 papd
Le serveur papd permet aux Mac d’imprimer sur des imprimantes Unix.
Configuration dans /etc/netatalk/papd.conf :
14.5.4 pap
pap permet depuis Unix d’imprimer sur une imprimante Appletalk. Il faut
configurer une imprimante Unix avec les filtres de /usr/lib/atalk/filters/
qui utilisent /usr/sbin/psf.
14.6 Commandes
– aecho (=ping)
aecho "LaserWriter Select 360":LaserWriter@*
– nbplkup : affiche toutes les entités AppleTalk
190 CHAPITRE 14. NETATALK : SERVEUR APPLETALK
$ nbplkup
zoroastre:AFPServer 65280.102:128
zoroastre:netatalk 65280.102:4
zoroastre:Workstation 65280.102:4
phoebus:AFPServer 65280.8:128
phoebus:netatalk 65280.8:4
phoebus:Workstation 65280.8:4
HP LaserJet 4050 Series :SNMP Agent 65281.4:8
HP LaserJet 4050 Series :LaserWriter 65281.4:157
HP LaserJet 4050 Series :HP LaserJet 65281.4:158
LaserJet 5:SNMP Agent 65281.128:8
LaserJet 5:LaserWriter 65281.128:157
LaserJet 5:LaserJet 5 65281.128:158
direction:ARA - Client-Only 10707.22:2
direction: Power Macintosh 10707.22:252
direction:Workstation 10707.22:4
– Impression depuis Linux sur imprimante Mac
– pap -p nbpname file : envoie un fichier sur l’imprimante nbpname
Exemple : pap -p"Stylus Color" :EPSONLQ2 fichier
– papstatus -p nbpname . Exemple :
papstatus -p"LaserWriter Select 360"
– Enregistrement de nom dans la base NBP
– nbprgstr -p 4 nbpname : enregistre un nom dans la base NBP
– nbpunrgstr nbpname : signale à atalkd que nbpname est parti
– megatron est utilisé pour transformer des fichiers de BinHex, MacBinary,
AppleSingle, ou les fichiers en format AppleDouble à la manière netatalk
en MacBinary ou AppleDouble à la manière netatalk. Le format Apple-
Double à la manière netatalk est le format de fichier utilisé par afpd, le
Apple Filing Protocol (AppleShare) du serveur netatalk. BinHex, MacBi-
nary, and AppleSingle sont des formats de fichier usuels pour transférer des
fichiers Macintosh entre machines par mail ou ftp. Si megatron est appelé
sous le nom unhex, unbin, ou unsingle, il essaiera de convertir le ou les
fichiers de BinHex, MacBinary, ou AppleSingle en format AppleDouble.
14.7 Incidents
Starting AppleTalk Daemons (this will take a while):socket: Address family not s
upported by protocol
socket: Address family not supported by protocol
atalkd: can’t get interfaces, exiting.
atalkd afpd papd
HylaFAX
HylaFAX est un serveur de Fax sur Unix écrite par Sam Leffler (1990-1996)
Silicon Graphics Inc.
Références HylaFAX
– Documentation HylaFAX :
http://www.hylafax.org/
– Documentation de votre serviteur :
http://www-phase.c-strasbourg.fr/inform/fax.html
Déchargement :
ftp://ftp.hylafax.org
191
192 CHAPITRE 15. HYLAFAX
15.5.3 Documentation
man hylafax
man hfaxd
man config
lynx /usr/doc/hylafax-doc/index.html (en Debian)
man hylafax-client
# /etc/hylafax/hyla.conf
# System-wide client configuration file
Host: helios.c-strasbourg.fr
DialRules: "/etc/hylafax/dialrules"
# envoi un mail de notification a l’émetteur du fax dans tous les cas
Notify: done
MailAddr: morel@phase.c-strasbourg.fr
Notify: done
ftp://ftp.eats.com/pub/MacFlex-15b1.sea.hqx
ftp://eats.com/pub/MacFlex-1-0-B2.sea.hqx
Windows 95 et NT : Whfc
http://www.rgw-express.de/whfc/
ftp://ftp.rgw-express.de/pub/whfc/whfc.0.3e_dynamic.zip
15.11.3 Statistiques
2 tâches quotidiennes sont lancées par cron :
0 23 * * * root /usr/local/sbin/faxqclean
25 23 * * * root sh /usr/local/sbin/faxcron | mail -s HylaFax FaxMaster
– faxqclean nettoie les spools
– faxcron envoie les statistiques d’utilisation à l’administrateur ainsi que
les rapports d’incidents
15.11.4 Incidents
Pour résoudre les incidents liés à l’envoi de fax l’administrateur dispose des
outils suivants :
– il est averti par mail
– il a une trace des échanges des modems
– pour débrouiller son problème, il a :
– la documentation sous forme man et html
– les FAQ de HylaFax
– la Mailing List : flexfax@sgi.com dont les archives sont à ftp.celestial.com
– il doit avoir une doc détaillée sur son modem
– une documentation simplifiée sur le protocole T.30
Quelques incidents
– Demande du Password lors de l’envoi d’un fax sur une machine cliente.
Cause : la machine cliente n’est pas citée dans /etc/hylafax/hosts.hfaxd
15.12 Conclusion
Intérêt d’un serveur de fax
– économie de modems et de lignes téléphoniques
– permet de limiter les points d’accès par modems à des ordinateurs
Retour d’expérience sur HylaFAX
– A condition que le modem soit choisi parmi ceux recommandés pour Hy-
laFAX, le fonctionnement est satisfaisant
– En cas d’incident, l’administrateur doit connaı̂tre un minimum sur son
modem et le protocole T.30.