201
Linux, serveur r´ eseaux Jacques Morel [email protected] v0.6, 7 juillet 2005

Linux Reseau

Embed Size (px)

Citation preview

Page 1: Linux Reseau

Linux, serveur reseaux

Jacques [email protected]

v0.6, 7 juillet 2005

Page 2: Linux Reseau

2

0.1 Presentation

Ce document est un cours. Il est largement inspire de l’aide directe, deconseils, d’ecrits ou de contributions dans differents forums des personnes sui-vantes : Benoıt Speckel (PLIP, SSF, clonage), Guy Brand (securite, 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 (securite), Frederic Couchet de April(CGI) et enfin Olaf Kirch pour tout. Il reste sans nul doute bien des lacuneset des erreurs. Les chapitres sur SNMP, PHP sont en preparation. Je publieneammoins ce texte parce qu’il peut etre utile a certains et qu’en retour la cri-tique est stimulante. Si ce texte est reutilise, veuillez etre assez aimable pourfaire reference a mon labeur. Ce cours a ete 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 ete repris, hormis

quelques corrections d’erreurs. Voici quelques remarques que l’on peut faire surles chapitres :

– TCP-IP : reste valable. Il n’y a rien sur IPv6. Des notes sur dhcp ont eterajoutees.

– Serveur DNS BIND : un peu mis a jour mais incomplet.– PLIP : reste valable– PPP : a reprendre. Il manque une introduction sur le port serie et les

modems. PPPOE pour connexions ADSL est a ecrire.– Securite reseau : totalement a reprendre.– Filtrage, routage : obsolete. A refaire pour iptables.– Cryptage par ssf : obsolete. A refaire pour openssh (interdit en France a

l’epoque).– Clonage machine Debian : a refaire pour la distributions sarge. Mais les

idees restent valables.– Sendmail : totalement insuffisant et obsolete.– Apache : reste valable. Manque apache-ssl.– Samba : reste valable.– Netatalk : reste valable.– Hylafax : incomplet mais reste valable.Sont a rediger les chapitres :– openssl– php– Webmail IMP– Base de donnees Postgres– snmp– Wifi ! ! !

Page 3: Linux Reseau

Table des matieres

0.1 Presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1 Introduction 111.1 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2 TCP-IP : les protocoles de l’INTERNET sur Linux 132.1 TCP-IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.2 La pile TCP-IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.3 Le protocole de reseau local Ethernet . . . . . . . . . . . . . . . . 14

2.3.1 CSMA/CD . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3.2 Adressage . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.3 Cablage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152.3.4 Adaptateurs . . . . . . . . . . . . . . . . . . . . . . . . . . 172.3.5 Drivers Ethernet . . . . . . . . . . . . . . . . . . . . . . . 17

2.4 IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.4.1 Adresses IP, reseaux IP . . . . . . . . . . . . . . . . . . . 182.4.2 Sous-reseau . . . . . . . . . . . . . . . . . . . . . . . . . . 212.4.3 Paquet IP (datagram) . . . . . . . . . . . . . . . . . . . . 222.4.4 Routage IP . . . . . . . . . . . . . . . . . . . . . . . . . . 23

2.5 TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.5.1 Ports TCP . . . . . . . . . . . . . . . . . . . . . . . . . . 252.5.2 En-tete TCP . . . . . . . . . . . . . . . . . . . . . . . . . 262.5.3 Etats d’une connexion TCP . . . . . . . . . . . . . . . . . 28

2.6 Encapsulation des protocoles . . . . . . . . . . . . . . . . . . . . 282.7 UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.8 ICMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.9 ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.10 Noms de machines . . . . . . . . . . . . . . . . . . . . . . . . . . 30

2.10.1 Domain Name System . . . . . . . . . . . . . . . . . . . . 302.11 Demarrage du reseau . . . . . . . . . . . . . . . . . . . . . . . . . 31

2.11.1 Configuration du noyau . . . . . . . . . . . . . . . . . . . 312.11.2 Identification d’une machine . . . . . . . . . . . . . . . . . 322.11.3 Initialisation de l’interface reseau . . . . . . . . . . . . . . 322.11.4 La commande ifconfig . . . . . . . . . . . . . . . . . . . 332.11.5 La commande route . . . . . . . . . . . . . . . . . . . . . 342.11.6 Configuration de l’interface loopback . . . . . . . . . . . . 35

2.12 Configuration d’un routeur . . . . . . . . . . . . . . . . . . . . . 362.13 Resolution de noms de domaines . . . . . . . . . . . . . . . . . . 36

2.13.1 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . 36

3

Page 4: Linux Reseau

4 TABLE DES MATIERES

2.13.2 Resolution de noms de domaine . . . . . . . . . . . . . . . 372.13.3 Resolution inverse de noms de domaine . . . . . . . . . . 40

2.14 Outils de diagnostic . . . . . . . . . . . . . . . . . . . . . . . . . 412.14.1 ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412.14.2 traceroute . . . . . . . . . . . . . . . . . . . . . . . . . . . 412.14.3 netstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422.14.4 telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442.14.5 nc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452.14.6 tcpdump . . . . . . . . . . . . . . . . . . . . . . . . . . . 452.14.7 arp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482.14.8 Causes de panne reseau . . . . . . . . . . . . . . . . . . . 48

2.15 IP aliasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492.16 Proxy ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502.17 RARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502.18 DHCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

2.18.1 DHCP client . . . . . . . . . . . . . . . . . . . . . . . . . 502.18.2 DHCP serveur . . . . . . . . . . . . . . . . . . . . . . . . 51

3 Le serveur DNS BIND 533.1 Le Domain Name System (DNS) . . . . . . . . . . . . . . . . . . 533.2 Installation en Debian . . . . . . . . . . . . . . . . . . . . . . . . 543.3 Exemple de configuration d’un serveur cache . . . . . . . . . . . 543.4 Exemple de configuration d’un serveur secondaire . . . . . . . . . 553.5 La base de donnees des noms de domaines . . . . . . . . . . . . . 573.6 Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

3.6.1 Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

4 PLIP : IP sur port parallele 614.1 Le cable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614.2 Client et serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . 614.3 Module plip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

4.3.1 Noyau de version < 2.2 . . . . . . . . . . . . . . . . . . . 624.3.2 Noyau de version > 2.2 . . . . . . . . . . . . . . . . . . . 62

4.4 Cote client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634.5 Cote serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634.6 Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644.7 Routage par le serveur . . . . . . . . . . . . . . . . . . . . . . . . 654.8 Test de performances . . . . . . . . . . . . . . . . . . . . . . . . . 654.9 Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

5 PPP 675.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

5.1.1 Description de PPP : HDLC, LCP, IPCP, CCP . . . . . . 675.1.2 Documentation . . . . . . . . . . . . . . . . . . . . . . . . 68

5.2 Installation de PPP . . . . . . . . . . . . . . . . . . . . . . . . . 685.2.1 Support de PPP par le noyau . . . . . . . . . . . . . . . . 685.2.2 Logiciel ppp-2.3.5-2 . . . . . . . . . . . . . . . . . . . . . 695.2.3 mgetty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695.2.4 Arborescence des fichiers PPP . . . . . . . . . . . . . . . 69

5.3 Configuration du modem et du port serie. . . . . . . . . . . . . . 70

Page 5: Linux Reseau

TABLE DES MATIERES 5

5.3.1 Configuration du port serie. . . . . . . . . . . . . . . . . . 705.3.2 Configuration du modem . . . . . . . . . . . . . . . . . . 70

5.4 Premiers pas avec PPP . . . . . . . . . . . . . . . . . . . . . . . 715.4.1 Session PPP manuelle . . . . . . . . . . . . . . . . . . . . 715.4.2 Automatisation de pppd . . . . . . . . . . . . . . . . . . . 725.4.3 Authentification . . . . . . . . . . . . . . . . . . . . . . . 73

5.5 Configuration d’un client . . . . . . . . . . . . . . . . . . . . . . . 745.5.1 Information a reunir sur le fournisseur d’acces Internet

(ISP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745.5.2 Resolution d’adresse . . . . . . . . . . . . . . . . . . . . . 755.5.3 Parametrage PPP . . . . . . . . . . . . . . . . . . . . . . 755.5.4 Test de pppd . . . . . . . . . . . . . . . . . . . . . . . . . 77

5.6 Configuration d’un serveur . . . . . . . . . . . . . . . . . . . . . . 785.6.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . 785.6.2 Affectation dynamique des adresses IP : . . . . . . . . . . 815.6.3 Fichier /etc/ppp/pap-secrets sur un serveur : . . . . . 815.6.4 Login d’un utilisateur PPP . . . . . . . . . . . . . . . . . 815.6.5 Log d’une session PPP sur le serveur : . . . . . . . . . . . 82

5.7 Reglages fins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835.8 Securite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845.9 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

5.9.1 PPP sur cable null modem . . . . . . . . . . . . . . . . . 845.9.2 Relier deux reseaux par PPP . . . . . . . . . . . . . . . . 845.9.3 Routage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845.9.4 /etc/ppp/ip-up . . . . . . . . . . . . . . . . . . . . . . . . 85

5.10 Client PPP sur Microsoft Wxx . . . . . . . . . . . . . . . . . . . 865.11 Divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

6 Securite reseau sur Linux 876.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876.2 Arreter sa machine quand elle n’est pas utilisee . . . . . . . . . . 876.3 Arreter les serveurs inutiles . . . . . . . . . . . . . . . . . . . . . 88

6.3.1 Les daemons . . . . . . . . . . . . . . . . . . . . . . . . . 886.3.2 Les services actives par inetd . . . . . . . . . . . . . . . . 90

6.4 Controler l’acces aux serveurs : tcp-wrapper . . . . . . . . . . . 926.5 Controler l’acces a xdm . . . . . . . . . . . . . . . . . . . . . . . . 946.6 Les mots de passe . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6.6.1 Qualite des mots de passe . . . . . . . . . . . . . . . . . . 946.6.2 Shadow passwords . . . . . . . . . . . . . . . . . . . . . . 95

6.7 Appliquer les mises a jour de securite sur les logiciels. . . . . . . 956.8 Detection d’incursions . . . . . . . . . . . . . . . . . . . . . . . . 95

6.8.1 tripwire : controle de l’integrite des fichiers . . . . . . . 966.9 Precautions elementaires . . . . . . . . . . . . . . . . . . . . . . . 966.10 Principales attaques reseau et parades . . . . . . . . . . . . . . . 96

6.10.1 SYN flooding . . . . . . . . . . . . . . . . . . . . . . . . . 966.10.2 smurf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976.10.3 Denial of Service (DoS) attacks . . . . . . . . . . . . . . . 986.10.4 IP spoofing . . . . . . . . . . . . . . . . . . . . . . . . . . 986.10.5 Non-blind spoofing . . . . . . . . . . . . . . . . . . . . . . 986.10.6 Blind spoofing . . . . . . . . . . . . . . . . . . . . . . . . 98

Page 6: Linux Reseau

6 TABLE DES MATIERES

6.10.7 Scan de ports . . . . . . . . . . . . . . . . . . . . . . . . . 986.10.8 Ecoute du reseau . . . . . . . . . . . . . . . . . . . . . . . 99

6.11 Cryptage des communications . . . . . . . . . . . . . . . . . . . . 1006.12 En savoir plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

7 Filtrage, routage et masquage des paquets IP 1017.1 Qu’est-ce qu’un firewall ? . . . . . . . . . . . . . . . . . . . . . . 1017.2 Masquage : permettre a un reseau prive d’acceder a Internet . . . 102

7.2.1 Configuration du noyau ( > 2.2.0 ) . . . . . . . . . . . . . 1037.2.2 Configuration du masquage . . . . . . . . . . . . . . . . . 1047.2.3 Configuration d’une machine du reseau interne . . . . . . 1067.2.4 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

7.3 La commande ipchains . . . . . . . . . . . . . . . . . . . . . . . 1077.3.1 Chaınes predefinies . . . . . . . . . . . . . . . . . . . . . . 1077.3.2 Manipulation des chaınes . . . . . . . . . . . . . . . . . . 1087.3.3 Specification d’une regle . . . . . . . . . . . . . . . . . . . 108

7.4 Exemples de filtrage . . . . . . . . . . . . . . . . . . . . . . . . . 1097.4.1 Test du ping . . . . . . . . . . . . . . . . . . . . . . . . . 1097.4.2 Masquage standard . . . . . . . . . . . . . . . . . . . . . . 1107.4.3 Antispoofing . . . . . . . . . . . . . . . . . . . . . . . . . 111

7.5 Applications clientes supportant le masquage . . . . . . . . . . . 1127.5.1 Autoriser l’acces TCP dans un sens . . . . . . . . . . . . 112

7.6 Forward de port . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127.7 Serveurs proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

7.7.1 http . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127.7.2 telnet, ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

7.8 Raccordement d’un reseau prive a Internet par PPP . . . . . . . 1137.9 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

8 Cryptage des communications par ssh 1158.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1158.2 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1158.3 Configuration de ssh . . . . . . . . . . . . . . . . . . . . . . . . . 1168.4 ssh serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

8.4.1 Controles d’acces . . . . . . . . . . . . . . . . . . . . . . . 1168.5 ssh client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

8.5.1 Creation des cles RSA : ssh-keygen . . . . . . . . . . . . 1178.5.2 Connexion : slogin ou ssh . . . . . . . . . . . . . . . . . 1178.5.3 Transfert de fichiers : scp . . . . . . . . . . . . . . . . . . 1198.5.4 Automatisation de l’authentification par cle publique . . . 119

8.6 Autres implementations de ssh . . . . . . . . . . . . . . . . . . . 122

9 Clonage d’une machine Linux Debian 1239.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1239.2 Configuration d’une machine mere . . . . . . . . . . . . . . . . . 123

9.2.1 Compilation d’un noyau . . . . . . . . . . . . . . . . . . . 1239.2.2 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

9.3 Preparation archive sur machine mere . . . . . . . . . . . . . . . 1239.3.1 Fichier tar . . . . . . . . . . . . . . . . . . . . . . . . . . . 1249.3.2 Exportation . . . . . . . . . . . . . . . . . . . . . . . . . . 124

Page 7: Linux Reseau

TABLE DES MATIERES 7

9.4 Installation de Debian sur la nouvelle machine . . . . . . . . . . 1249.5 Reboot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

10 Sendmail 12910.1 Le service de mail de l’Internet . . . . . . . . . . . . . . . . . . . 12910.2 SMTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

10.2.1 Codes retour . . . . . . . . . . . . . . . . . . . . . . . . . 13010.2.2 Test d’un service SMTP . . . . . . . . . . . . . . . . . . . 13010.2.3 Verification de l’existence d’une boıte aux lettres . . . . . 13010.2.4 Verification d’un alias . . . . . . . . . . . . . . . . . . . . 131

10.3 Extensions a SMTP : ESMTP, MIME . . . . . . . . . . . . . . . 13110.4 Interaction avec le DNS . . . . . . . . . . . . . . . . . . . . . . . 13210.5 Caracteristiques de Sendmail . . . . . . . . . . . . . . . . . . . . 13210.6 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13310.7 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

10.7.1 Documentation sur la configuration . . . . . . . . . . . . . 13310.8 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

10.8.1 Une configuration de ”mail host” . . . . . . . . . . . . . . 13410.8.2 Limitation de la taille des messages . . . . . . . . . . . . . 13510.8.3 Suppression de la resolution d’alias par EXPN . . . . . . 13610.8.4 Une configuration de null client . . . . . . . . . . . . . . . 13610.8.5 Sites miroirs pour tests . . . . . . . . . . . . . . . . . . . 136

10.9 Exploitation de sendmail . . . . . . . . . . . . . . . . . . . . . . . 13710.9.1 Securite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13710.9.2 Commandes d’exploitation . . . . . . . . . . . . . . . . . 13710.9.3 Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13710.9.4 Reglages fins . . . . . . . . . . . . . . . . . . . . . . . . . 13710.9.5 Fichier Log . . . . . . . . . . . . . . . . . . . . . . . . . . 138

10.10Routage d’un domaine virtuel avec sendmail . . . . . . . . . . . . 138

11 Apache 14111.1 Le serveur WWW Apache . . . . . . . . . . . . . . . . . . . . . . 141

11.1.1 WWW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14111.1.2 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

11.2 Caracteristiques de Apache . . . . . . . . . . . . . . . . . . . . . 14411.3 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14511.4 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14511.5 Lancement de Apache . . . . . . . . . . . . . . . . . . . . . . . . 14511.6 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

11.6.1 Parametres generaux . . . . . . . . . . . . . . . . . . . . . 14611.6.2 Configuration des ressources . . . . . . . . . . . . . . . . . 14711.6.3 Restrictions d’acces . . . . . . . . . . . . . . . . . . . . . 147

11.7 Les modules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14911.8 Virtual hosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15311.9 Content negotiation . . . . . . . . . . . . . . . . . . . . . . . . . 153

11.9.1 Multiviews . . . . . . . . . . . . . . . . . . . . . . . . . . 15311.9.2 Handler type-map . . . . . . . . . . . . . . . . . . . . . . 154

11.10Restrictions d’acces . . . . . . . . . . . . . . . . . . . . . . . . . . 15411.11Autres capacites de Apache . . . . . . . . . . . . . . . . . . . . . 15511.12Maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

Page 8: Linux Reseau

8 TABLE DES MATIERES

11.12.1Erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15511.12.2Statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . 156

12 Execution de programmes CGI sur un serveur WWW 15712.1 Introduction a la Common Gateway Interface . . . . . . . . . . . 157

12.1.1 Pourquoi utiliser les programmes CGI . . . . . . . . . . . 15712.1.2 Prerequis et choix techniques . . . . . . . . . . . . . . . . 15712.1.3 Configuration du serveur Web . . . . . . . . . . . . . . . . 158

12.2 Notions fondamentales . . . . . . . . . . . . . . . . . . . . . . . . 15812.3 Un programme en Bourne shell . . . . . . . . . . . . . . . . . . . 15912.4 Saisie et traitement des champs d’un formulaire . . . . . . . . . . 161

12.4.1 Recuperation des informations en Perl et en shell . . . . . 16312.4.2 Les variables d’environnement . . . . . . . . . . . . . . . . 166

12.5 Deboguer un script CGI . . . . . . . . . . . . . . . . . . . . . . . 167

13 Samba 17113.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17113.2 Protocoles Microsoft . . . . . . . . . . . . . . . . . . . . . . . . . 171

13.2.1 Ports ouverts sur les machines Windows Microsoft . . . . 17313.2.2 Configuration des clients reseau Microsoft sur Windows . 173

13.3 Commandes Lan-Manager sous DOS . . . . . . . . . . . . . . . . 17413.3.1 Commandes net . . . . . . . . . . . . . . . . . . . . . . . 17413.3.2 Interrogation de noms NetBIOS . . . . . . . . . . . . . . . 174

13.4 Le logiciel Samba . . . . . . . . . . . . . . . . . . . . . . . . . . . 17413.4.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . 17413.4.2 Description . . . . . . . . . . . . . . . . . . . . . . . . . . 17513.4.3 Utilitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 17513.4.4 Documentation . . . . . . . . . . . . . . . . . . . . . . . . 175

13.5 Configuration de Samba . . . . . . . . . . . . . . . . . . . . . . . 17513.5.1 Structure et syntaxe . . . . . . . . . . . . . . . . . . . . . 17613.5.2 Section ”global” . . . . . . . . . . . . . . . . . . . . . . . 17613.5.3 Partage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17813.5.4 Section ”homes” . . . . . . . . . . . . . . . . . . . . . . . 17813.5.5 Section ”printers” . . . . . . . . . . . . . . . . . . . . . . 17813.5.6 Partage accessible par tous en lecture/ecriture . . . . . . 17913.5.7 Partage accessible par tous en lecture, reserve en ecriture 17913.5.8 Partage a acces reserve . . . . . . . . . . . . . . . . . . . 17913.5.9 Authentification . . . . . . . . . . . . . . . . . . . . . . . 179

13.6 Audit : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18013.7 Incidents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18113.8 Acces depuis Unix aux ressources Windows . . . . . . . . . . . . 181

13.8.1 smbclient : acces aux fichiers Windows a la ftp . . . . . 18113.8.2 Messages Winpopup . . . . . . . . . . . . . . . . . . . . . 18213.8.3 smbtar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18213.8.4 smbmount . . . . . . . . . . . . . . . . . . . . . . . . . . . 18213.8.5 smbprint . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

13.9 Applications de samba . . . . . . . . . . . . . . . . . . . . . . . . 18313.9.1 Distribution de logiciels pour Windows . . . . . . . . . . . 18313.9.2 Fonction Primary Domain Controller de Samba . . . . . 18313.9.3 Installation partagee de drivers d’imprimante pour W9x . 184

Page 9: Linux Reseau

TABLE DES MATIERES 9

13.9.4 Serveurs virtuels . . . . . . . . . . . . . . . . . . . . . . . 185

14 Netatalk : serveur AppleTalk 18714.1 Une implementation du protocole AppleTalk en Unix BSD like . 18714.2 Implementation en Linux . . . . . . . . . . . . . . . . . . . . . . 18814.3 Documentation : . . . . . . . . . . . . . . . . . . . . . . . . . . . 18814.4 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18814.5 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

14.5.1 atalkd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18914.5.2 afpd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18914.5.3 papd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18914.5.4 pap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

14.6 Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18914.7 Incidents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

15 HylaFAX 19115.1 Les normes de fax . . . . . . . . . . . . . . . . . . . . . . . . . . 191

15.1.1 Standard ITU : Groupes de Fax . . . . . . . . . . . . . . 19115.1.2 Standards ITU de vitesse de transmission . . . . . . . . . 19115.1.3 Protocoles d’envoi de fax . . . . . . . . . . . . . . . . . . 191

15.2 Fonctions de HylaFAX . . . . . . . . . . . . . . . . . . . . . . . . 19415.3 Sur quelles machines fonctionne Hylafax ? . . . . . . . . . . . . . 19415.4 Choisir et installer un modem : . . . . . . . . . . . . . . . . . . . 195

15.4.1 Hylafax et les modems : . . . . . . . . . . . . . . . . . . . 19515.4.2 Les modems recommandes : . . . . . . . . . . . . . . . . . 19515.4.3 Installer le modem sur un PC . . . . . . . . . . . . . . . . 195

15.5 Installation de HylaFAX . . . . . . . . . . . . . . . . . . . . . . . 19615.5.1 Prerequis : . . . . . . . . . . . . . . . . . . . . . . . . . . 19615.5.2 Procedure d’installation . . . . . . . . . . . . . . . . . . . 19615.5.3 Documentation . . . . . . . . . . . . . . . . . . . . . . . . 196

15.6 Configuration de HylaFAX . . . . . . . . . . . . . . . . . . . . . 19615.6.1 Les scripts de configuration . . . . . . . . . . . . . . . . . 19615.6.2 Les fichiers de configuration : . . . . . . . . . . . . . . . . 19715.6.3 Demarrage de HylaFAX . . . . . . . . . . . . . . . . . . . 197

15.7 Envoi d’un fax . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19715.7.1 Commande d’envoi de fax sur Unix : sendfax . . . . . . . 19715.7.2 Controle de l’envoi : . . . . . . . . . . . . . . . . . . . . . 198

15.8 Reception d’un fax . . . . . . . . . . . . . . . . . . . . . . . . . . 19815.9 Configuration des clients Hylafax sur une machine Linux . . . . . 19915.10Les clients HylaFAX . . . . . . . . . . . . . . . . . . . . . . . . . 19915.11Gestion du serveur HylaFAX . . . . . . . . . . . . . . . . . . . . 200

15.11.1Optimisation des envois . . . . . . . . . . . . . . . . . . . 20015.11.2Controle d’acces . . . . . . . . . . . . . . . . . . . . . . . 20015.11.3Statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . 20115.11.4 Incidents . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

15.12Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

Page 10: Linux Reseau

10 TABLE DES MATIERES

Page 11: Linux Reseau

Chapitre 1

Introduction

Linux sur PC Intel est une plateforme economique, fiable et polyvalente pourfaire un serveur reseau.

Linux supporte les protocoles :– TCP/IP (v4) : logiciel fiable, drivers de qualite pour les cartes Ethernet

(10Base-T, 100Base-TX, Gigabit Ethernet) et les cartes PCMCIA, ser-veurs les plus usites sur le net : Apache, sendmail, ...

– UUCP : ancien mais encore utile pour des connexions telephoniques inter-mittentes sur des reseaux peu fiables.

– IPv6, amelioration de IP v4 pour repondre a 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 series multiports pour

serveurs d’acces a Internet.– ISDN (RNIS en francais comme le service Numeris de FT), support dans

le noyau pour les cartes ISDN PC.– PLIP : Ip sur port parallele au moyen d’un cable Null-Printer ou Lap-Link– ADSL : le support des modems Alcatel de France Telecom est assure 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 desApple Macintosh.

Linux dispose de logiciels permettant de supporter une charge reseau impor-tante et de fonctionnalites comme le load balancing, le forward de port, permet-tant de repartir la charge entre plusieurs serveurs. Environ 30% des serveurs surInternet sont des machines Linux.

Par ailleurs, Linux sait router, filtrer, masquer les paquets IP. Un simple PCLinux muni de plusieurs interfaces reseaux permet de connecter un reseau privea Internet et d’assurer des fonctions de garde-barriere (firewall), pour protegerle reseau prive des incursions et des fonctions de serveur proxy pour faire desrequetes sur Internet par delegation pour le compte des machines du reseauprive.

Linux sait egalement faire du tunelling qui permet de faire voir une machinedistante (un PC portable connecte via un ISP et bientot par telephone portable)

11

Page 12: Linux Reseau

12 CHAPITRE 1. INTRODUCTION

comme si elle etait sur le reseau local.Plus generalement, Linux est un Unix. Il a pour but la conformite Posix,

il utilise tous les produits de developpement Gnu. C’est pourquoi il est tresfacile d’installer un logiciel Unix sur Linux. Il faut d’ailleurs dire, en toutehonnetete, que les Unix libres pour PC de la serie BSD, NetBSD, FreeBSD, ...sont souvent plus en avance en matiere de logiciels reseau que Linux, sans doutea cause de Unix BSD mis au point en 1983 a l’universite de Berkeley qui futl’implementation la plus populaire des protocoles TCP/IP, ceux de l’Internet,largement utilises aujourd’hui de par le monde.

L’objet ici etant de faire fonctionner un serveur, c’est la distribution LinuxDebian (2.1 slink ici) qui est choisie pour sa stabilite, la facilite des mises a jourpar reseau et sa promptitude a corriger les trous de securite.

1.1 Documentation

Avant tout il faut lire The Linux Network Administrator’s Guide, ver-sion 1.0 de Olaf Kirch derniere mise a jour de mars 96. Edite chez O’Reilly etdechargeable sur le net :

ftp://ftp.lip6.fr/pub/linux/sunsite/docs/LDP/network-guide/nag-1.0.ps.tar.gzftp://ftp.lip6.fr/pub/linux/sunsite/docs/LDP/network-guide/nag-1.0.src.tar.gzftp://ftp.lip6.fr/pub/linux/sunsite/docs/LDP/network-guide/nag-1.0.html.tar.gz

Cet ouvrage est bien sur assez ancien. Le chapitre sur sendmail est un peudepasse, les possibilites de filtrage de masquerading ne sont pas abordees. Maissa lecture est recommandee pour les neophytes en matiere reseau et en rieninutile pour les autres.

Il y a aussi les How-To et la documentation fournie avec chaque logiciel.

Page 13: Linux Reseau

Chapitre 2

TCP-IP : les protocoles del’INTERNET sur Linux

2.1 TCP-IP

Les protocoles de l’Internet sont designes par le terme generique de TCP-IP.Ils peuvent etre utilises aussi en reseau local, sans connexion avec Internet, c’estce qu’on appelle maintenant l’Intranet.

La lecture des documents suivants de Charles Hedrick est recommandee :

Introduction a TCP/IPCe document se trouve a la fois surftp://athos.rutgers.edu/runet/tcp-ip-intro.doc

en version texte etftp://athos.rutgers.edu/runet/tcp-ip-intro.ps

en version postscript.

Administration TCP/IPce document se trouve a la fois surftp://athos.rutgers.edu/runet/tcp-ip-admin.doc

en version texte etftp://athos.rutgers.edu/runet/tcp-ip-admin.ps

en version postscript.

On trouvera les documents techniques sur TCP/IP, les RFC (Request ForComment) sur de nombreux sites comme :

http://www.pasteur.fr/other/computer/RFC

2.2 La pile TCP-IP

C’est une simplification du modele en 7 couches de l’OSI mais qui a revelesa robustesse et son adaptabilite.

TCP/IP n’a que 4 couches :– La couche application : telnet, ftp, smtp, rpc, X11, http, ... utilisent le

transport TCP ; tftp, domain, nfs utilisent le transport UDP

13

Page 14: Linux Reseau

14CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

– La couche transport soit TCP, soit UDP qui recourent tous deux a lacouche IP en dessous.

– La couche reseau : IP avec en plus ICMP pour les messages de services– La couche protocole de reseau local. Une des forces de IP est qu’il

peut s’adapter a de nombreux protocoles de reseau : Ethernet, TokenRing, FDDI, Fast Ethernet, Gigabit Ethernet, ...

OSI TCP/IP+-----------------------+-----------------------+-------------+| 7 Application | TELNET, FTP | |+-----------------------+ SMTP | TFTP || 6 Presentation | RPC | DOMAIN |+-----------------------+ X11 | NFS || 5 Session | HTTP | |+-----------------------+-----------------------+-------------+| 4 Transport | TCP | UDP |+-----------------------+-----------------------+-------------+| 3 Reseau | IP (Internet Protocol), ICMP, ARP |+-----------------------+-------------------------------------+| 2 Data Link | Local Network Protocol |+-----------------------+ (Ethernet, Fast Ethernet, FDDI...) || 1 Physique | |+-----------------------+-------------------------------------+

Protocol Relationships

Le protocole de reseau local est en general gere de maniere hardware parune carte interface ou adaptateur reseau appele aussi NIC (Network InterfaceCard). C’est la carte Ethernet classique. Un logiciel, le driver, fait l’interfaceentre cette carte et le noyau. Ce driver ne depend pas de IP mais uniquementde l’adaptateur et du noyau Linux.

Le protocole de reseau local peut aussi etre gere de maniere logicielle. C’estle cas de PPP pour le port serie et le modem telephonique ou de PLIP pour leport parallele.

2.3 Le protocole de reseau local Ethernet

C’est la norme IEEE 802.3. Il fonctionne sur le principe de la diffusion (an-glais broadcast). Les machines sont toutes connectees au meme cable (bus). Unmessage envoye par l’une est recu par toutes les autres. Toutes les machinespeuvent parler en meme temps.

2.3.1 CSMA/CD

Comment eviter la cacaphonie ? On peut comme dans les reunions nommerun president de seance qui donne la parole quand on la lui demande ou bien semettre en cercle (ring) se passer un jeton (token) et ne prendre la parole quelorsqu’on a le jeton. Non, Ethernet utilise une autre methode moins directive etnon deterministe : CSMA/CD

Page 15: Linux Reseau

2.3. LE PROTOCOLE DE RESEAU LOCAL ETHERNET 15

Que se passe t’il quand la machine x veut emettre ?– x s’assure que le bus est libre (Carrier Sense)– si oui, x commence a emettre– si y emet aussi (Multiple Access), alors une collision est detectee (Collision

Detect), il y a signal jam. Alors,– x attend durant un temps t1 fixe de maniere aleatoire puis essaie d’emettre– y attend durant un temps t2 fixe de maniere aleatoire puis essaie d’emettre

2.3.2 Adressage

Comment une machine peut-elle s’adresser a une autre ? Chaque machine aune adresse Ethernet unique formee de 6 octets (48 bits) et notee sous forme de 6nombres hexadecimaux comme on le voit dans le champ HWaddr 00 :50 :04 :F9 :33 :82quand on fait ifconfig eth0 :

ifconfig eth0eth0 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.0EtherTalk Phase 2 addr:65280/102UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:65483155 errors:0 dropped:0 overruns:0 frame:0TX packets:99422413 errors:0 dropped:0 overruns:0 carrier:0Collisions:1887649Interrupt:12 Base address:0xe000

Comment une machine recoit les paquets qui lui sont destines ?Les paquets circulant sur le bus sont analyses par chaque interface Ethernet.

Si le paquet comporte l’adresse de l’interface en adresse destinataire, il l’envoie aIP, sinon il le jette. Sauf dans le cas ou l’interface est mis en mode promiscuous.

Quel est le debit ? Le debit nominal est 10 Megabits/sec (Mbps). En raisondes collisions, il est fonction de la charge, c’est a dire du nombre de machinesconnectees qui veulent emettre en meme temps. Il est aussi fonction du tempsde parcours du paquet, donc de la longueur du bus. En pratique le debit est de5 Mbps.

Comment mesurer les collisions ? Elles se voient sur les voyants ”Col” deshubs. Elles sont aussi comptabilises et leur nombre s’affiche quand on faitifconfig eth0 (voir ci-dessus) ou cat /proc/net/dev

Comment diminuer le nombre de collisions ? En utilisant des switchs plutotque des hubs.

Structure d’un paquet Ethernet : Il fait 1500 octets (c’est pour cela qu’onfixe MTU=1500 par defaut dans ifconfig).

Code Type indique un protocole comme TCP/IP, DECnet, Xerox NS, IPX :on peut utiliser plusieurs protocoles differents simultanement sur un memereseau.

Le checksum est calcule sur tout le paquet.

2.3.3 Cablage

– 10Base-5 Ethernet 10Mbps, cable coaxial thick (jaune) lmax=200m. Trans-ceiver ”pique” sur le cable avec prise AUI a 15 broches. Obsolete.

Page 16: Linux Reseau

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-tete IP, En-tete TCP, ensuite vos donnees || ... || || Fin de vos donnees |+----------------------------------------------------------------------+| Checksum Ethernet |+----------------------------------------------------------------------+

Fig. 2.1 – Structure d’un paquet Ethernet

– 10Base-2 Ethernet 10Mbps, cable coaxial thin lmax=500m. Il faut mettreun bouchon aux 2 bouts. Prise BNC en T. Si une machine est deconnectee,le reseau est coupe. Deconseille.

– 10Base-T Ethernet 10Mbps, ou paire torsadee (twisted pair), cable de8 fils, 4 utilises (1,2,3,6), norme UTP ou FTP categorie V (supporte 100Mbps), prise RJ45. Structure en etoile et non en bus. Hub= repeteur etconcentrateur. Pas plus de 4 repeteurs entre deux machines. lmax= 100mentre hubs, 100m entre hub et machine. Aujourd’hui on s’equipe de switchsplutot que de hubs et on passe en Fast Ethernet (100 Mbps) avec le memecable categorie V.Ethernet 10Base-T Straight Thru patch cord (T568B colors);

RJ45 Plug RJ45 Plug========= =========/--T2 1 ... White/Orange .... 1 TxData +

pair2 \--R2 2 ... Orange .......... 2 TxData -/----------T3 3 ... White/Green ..... 3 RecvData +/ R1 4 Blue 4\ pair3 T1 5 White/Blue 5\----------R3 6 ... Green ........... 6 RecvData -

T4 7 White/Brown 7R4 8 Brown 8

– 10Base-F Ethernet 10Mbps, fibre optique multimode connectique ST,lmax 2000m.On peut connecter deux machines sans hub avec un cable 10Base-T croise.

Ethernet 10Base-T Crossover patch cord;This cable can be used to cascade hubs, or for connectingtwo Ethernet stations back-to-back without a hub (ideal fortwo station Doom!)

Page 17: Linux Reseau

2.3. LE PROTOCOLE DE RESEAU LOCAL ETHERNET 17

RJ45 Plug 1 Tx+ -------------- Rx+ 3 RJ45 Plug2 Tx- -------------- Rx- 63 Rx+ -------------- Tx+ 16 Rx- -------------- Tx- 2

2.3.4 Adaptateurs

Ne plus acheter d’adaptateur ISA ou 10Mbps. Prendre des adaptateurs pourbus PCI 10/100 Mbps.

Linux supporte une grande variete 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 a base de chip DEC 21143 : driver tulip– cartes a base de chip ne2000 : drivers ne2k ou ne2kpci. Deconseille pour

un serveur.Linux supporte les cartes Ethernet PCMCIA pour PC portable et les nou-

velles cartes Gigabit Ethernet.

2.3.5 Drivers Ethernet

Choix du driverLe choix du driver se fait lors de la configuration du noyau. Les distribu-

tions Linux actuelles ont de nombreux drivers en modules. Il n’y a donc pas arecompiler le noyau.

Driver en module ou dans le noyau ?Pour un serveur reseau on a interet a le mettre dans le noyau (pour des

raisons de securite vis a vis du piratage, il est conseille de ne pas configurer lesupport des modules CONFIG MODULES=NO).

Manipulation des modulesChargement automatique dans Debian : Fichier /etc/modulesChargement module tulip a la main sous root :– insmod tulip– lsmod (liste modules charges)– rmmod tulipDocumentation :On trouve le source des drivers dans /usr/src/linux/drivers/net, de la

documentation dans les fichiers README de ce repertoire ou dans /usr/src/linux/Documentation/networking.Donald Becker [email protected] est l’auteur de la plupart

des drivers Ethernet. On se reportera a son site : http ://cesdis.gsfc.nasa.gov/linux/Reconnaissance par le noyau :Au boot, le noyau detecte la presence de l’adaptateur. Ceci a condition qu’on

ait configure le bon driver dans le noyau ou en module. Si le noyau ne le reconnaıtpas (on peut relire les messages du noyau par dmesg), il est inutile de continuer.Le noyau sait reconnaıtre plusieurs adaptateurs.

IRQ, IO Base addressSur un PC, un peripherique est affecte en general d’un numero d’interruption

(IRQ) et d’une adresse d’entree-sortie (IO Base address). Il ne peut fonctionnersi un autre peripherique a la meme IRQ. Avec le bus PCI il y a attributiondynamique des IRQ. Avec les cartes ISA, il y a plus de problemes : il faut

Page 18: Linux Reseau

18CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

configurer l’IRQ et l’IO Base address sur la carte et sur Linux. Il faut reserverl’IRQ pour la carte ISA dans le Setup du BIOS. Pour les cartes 3COM 3C509Bon utilisait le logiciel fourni sous DOS par 3COM pour configurer IRQ, IO Baseaddress et enlever l’option ”Plug and play”.

Le module isapnp regle ce probleme en noyau 2.0. En noyau 2.2, le supportdu ”Plug and play” est dans le noyau (CONFIG PNP=YES)

On peut lister les IRQ utilisees par cat /proc/interrupts et les IO Baseaddresses 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 parametres au driver de l’adaptateur reseau :– soit au boot, s’il est dans le noyau. On peut dans /etc/lilo.conf ajouter

une ligne :append ether=12,0xe000ou 12 est l’IRQ et 0xe000 l’IO Base address.

– soit au chargement du module. Pour essayer des options, le module estbeaucoup plus souple. Par exemple, on peut charger le module tulip par :insmod tulip.o debug=1 options=0,16Ce qui met le niveau de debug minimum et le media type a Autosense pourla premiere carte Ethernet(0), a full duplex (16) pour la seconde (voir cat/proc/pci pour l’ordre des cartes).

2.4 IP

C’est l’Internet Protocol decrit dans RFC 791. Son role est d’acheminer desblocs de donnees appeles paquets (datagram) de la machine expediteur versla machine destinataire. Pour cela il identifie de maniere unique les machines(hosts) du reseau par une adresse. En general, un paquet a un seul destinataire(unicast), mais une extension de IPv4 permet de l’envoyer a plusieurs (multi-cast). Il s’occupe aussi de fragmenter et de reassembler les paquets si necessaire.Il communique avec la couche ”Protocole de reseau local”, le plus souvent Ether-net. L’encapsulation dans Ethernet est decrite dans RFC 825 et 894.

2.4.1 Adresses IP, reseaux IP

Une adresse est formee de quatre octets (32 bits). On l’ecrit en general sousforme de quatre tranches de chiffres decimaux separes par des points (dotted quadnotation). Sous cette forme chaque octet est converti en un nombre decimal (0-255), en omettant les zeros de tete (a moins que ce nombre ne soit lui-meme unzero) et chaque octet est separe par le caractere ‘.’.

Une adresse est formee de l’adresse reseau, suivi de l’adresse locale dans lereseau. Il y a trois formats ou classes d’adresses decrites dans le tableau 2.1.

– Dans la classe A, le bit de poids le plus fort est nul. L’adresse d’un reseauest sur un octet et va de 0 a 127. Les 24 bits suivants forment l’adresselocale.

– Dans la classe B, le bit de poids le plus fort est a 1, le bit suivant est azero. La premiere tranche de chiffres va de 128 a 191. Une adresse reseaufait deux octets donc deux tranches de chiffres.

Page 19: Linux Reseau

2.4. IP 19

----------------------------------------------------------|Classe de |Masque de | Plage d’adresses || reseau | reseau | |----------------------------------------------------------| 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 |----------------------------------------------------------

Tab. 2.1 – Classes d’adresses IP

– Dans la classe C, les deux bits de poids le plus fort sont a 1, le suivant azero. Une adresse reseau fait trois octets donc trois tranches de chiffres. Les8 derniers bits forment l’adresse locale. Il n’y a que 256 numeros differents.

Address Formats:

High Order Bits Format Class--------------- ------------------------------- -----

0 7 bits of net, 24 bits of host a10 14 bits of net, 16 bits of host b110 21 bits of net, 8 bits of host c111 escape to extended addressing mode

Une machine qui a plusieurs interfaces reseau aura une adresse par interface.L’adresse 0.0.0.0 n’est pas affectee, elle signifie n’importe quelle adresse dans

les logiciels de routage et de filtrage.localhostPar convention l’adresse 127.0.0.1 est reservee pour designer la machine lo-

cale. De meme 127.0.0.0 est reserve pour designer le reseau associe.Masque de reseau (netmask)C’est un nombre de 32 bits qui s’il est combine par un AND bit a bit avec

l’adresse IP d’une machine donne son adresse reseau. Ainsi :– adresse 193.54.230.20 : de classe C car la premiere 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.0On note l’adresse reseau par 4 tranches de chiffres decimaux mais avec la

partie locale a zero.Adresse locale ou routage ?Pour savoir comment envoyer un message a une adresse, IP teste si cette

adresse fait partie du reseau local :

Si adresse AND netmask == adresse reseau localAlors envoi par EthernetSinon routage

Page 20: Linux Reseau

20CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

Donc par definition IP ne fait pas de routage a l’interieur d’un reseau. Enconsequence, un reseau doit etre contigu, il ne peut pas etre decompose enplusieurs parties separees par des routeurs. Si on veut passer outre, on a lerecours du tunelling IP sur IP.

Adresse de broadcast (adresse de diffusion).Cette adresse permet d’atteindre toutes les machines d’un reseau. Tous les

bits de la partie locale sont a 1. Ainsi :Pour le reseau 193.54.230, l’adresse de broadcast est 193.54.230.255. Envoi

d’un ping a l’adresse de broadcast :

ping 193.54.230.255

Les systemes Windows Microsoft ne repondent pas en general : elles ne sontpas conformes aux standards de l’Internet !

Il arrive dans certaines implementations (anciennes) de IP que l’adresse debroadcast soit l’adresse reseau, dans l’exemple precedent : 193.54.230.0 Autreexemple :

---------------------------------------- ----------------Adresse machine (host address) 130.79.186.31Masque de reseau (network mask) 255.255.255.0Partie reseau (network portion) 130.79.186.Partie machine (host portion) .31---------------------------------------- ----------------Adresse reseau (network address) 130.79.186.0Adresse de diffusion (broadcast address) 130.79.186.255---------------------------------------- ----------------

L’autorite d’attribution des adresses est l’IANA.L’ Internet Assigned Number Authority attribue :– les adresses IP– les numeros de ports (RFC 1062 ”Assigned numbers”)– donne delegation aux operateursEn Europe les adresses IP sont distribuees par RIPE (Reseaux IP Eu-

ropeens), on interroge leur base de donnees des reseaux par whois, exemple :

[morel]$ whois -h whois.ripe.net 130.79.0.0

% Rights restricted by copyright.See http://www.ripe.net/ripencc/pub-services/db/copyright.html

inetnum: 130.79.0.0 - 130.79.255.255netname: OSIRISdescr: Centre Reseau et Communication, Universite Louis Pasteurdescr: 7 rue Rene Descartes, 67084 Strasbourg CEDEX, Francecountry: FRadmin-c: SG1289-RIPEtech-c: AC1695-RIPEtech-c: JP3374-RIPEchanged: <[email protected]> 19930908changed: [email protected] 19990706

Page 21: Linux Reseau

2.4. IP 21

changed: [email protected] 20000225source: RIPE...

Adresses priveesDes tranches d’adresses ont ete prevues pour des reseaux prives non relies a

l’Internet ( RFC 1597) :

-----------------------------------------------------------| ADRESSES POUR RESEAUX PRIVES |-----------------------------------------------------------| Classe | Masque de | Adresses de reseau || reseau | reseau | |-----------------------------------------------------------| A | 255.0.0.0 | 10.0.0.0 - 10.255.255.255 || B | 255.255.0.0 | 172.16.0.0 - 172.31.255.255 || C | 255.255.255.0 | 192.168.0.0 - 192.168.255.255 |-----------------------------------------------------------

2.4.2 Sous-reseau

Dans l’exemple precedent de l’adresse IP 130.79.186.31, le masque de reseauetait 255.255.255.0. Or 130 indique un reseau de classe B : 130.79.0.0. Normale-ment le masque de reseau devrait etre 255.255.0.0. L’adresse reseau devrait etre130.79.0.0. Or elle est 130.79.186.0.

Il s’agit la d’un reseau ”subnette”. Vu de l’exterieur c’est un reseau de classeB d’un seul tenant, donc sans routeur. Le netmask est bien 255.255.0.0. Lerouteur d’entree de ce reseau lui applique le netmask 255.255.255.0 et routevers le routeur du sous-reseau concerne.

Autre exemple : On veut decouper le reseau de classe C : 193.54.230.0 en 4sous-reseaux, soit 2 bits de ”subnetting”. La partie reseau va faire 24+2 = 26bits. La partie adresse locale fera 6 bits, soit 64 adresses possibles. Le netmaskva etre : 255.255.255.x ou x=11000000 en binaire c’est a dire 192 decimal. Doncle netmask sera 255.255.255.192 et les sous-reseaux :

– 193.54.230.0 : adresses de 193.54.230.0 a 193.54.230.63– 193.54.230.64 : adresses de 193.54.230.64 a 193.54.230.127– 193.54.230.128 : adresses de 193.54.230.128 a 193.54.230.191– 193.54.230.192 : adresses de 193.54.230.192 a 193.54.230.255Ces sous-reseaux doivent etre separes par des routeurs.Renater distribue actuellement des sous-reseaux de classe C.Notation des adressesComme on voit que la classe de l’adresse ne suffit pas pour determiner le net-

mask et donc l’adresse du reseau auquel elle appartient, il est necessaire de tou-jours accompagner l’adresse avec ce netmask. D’ou 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 a 1)– 193.54.230.0/255.255.255.0 : ensemble des adresses de 193.54.230.0 a 193.54.230.255.

reseau.Adresses CIDRPour mieux utiliser l’espace d’adressage de IPv4 en attendant IPv6, on a

defini le Classless Inter-Domain Routing. ou CIDR en abrege. Avec CIDR, les

Page 22: Linux Reseau

22CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

prefixes des sous-reseaux font entre 13 et 27 bits de longs : on obtient un plusgrand nombre de sous-reseaux qu’avec la repartition classiques en classes A, Bet C. Les adresses sont donnees sous la forme :

193.54.230.20/24

24 etant le nombre de bits de la partie reseau ou un masque avec 24 bits depoids le plus fort a 1.

2.4.3 Paquet IP (datagram)

Avant de l’envoyer, IP ajoute a chaque paquet de donnees qui lui est transmispar les couches superieures un en-tete comportant entre autres :

– l’adresse de l’expediteur– l’adresse du destinataire– le numero du protocole (voir fichier /etc/protocols et le tableau 2.2)

0 IP internet protocol, pseudo proto-col number

1 ICMP internet control message protocol6 TCP transmission control protocol17 UDP user datagram protocol

Tab. 2.2 – Principaux numeros de protocole voir /etc/protocols

– un checksum de l’en tete, pour s’assurer de l’integrite des adresses notam-ment.

– une duree de vie (TTL : Time To Live)

0 1 2 30 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 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Tab. 2.3 – En-tete d’un datagramme IP

– IHL : IP Header length

Page 23: Linux Reseau

2.4. IP 23

– 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 detruit. Permetd’eviter les boucles.

Quand on active un interface reseau sur une machine on definit le parametreMTU (Maximum Transmission Unit), en general 1500 octets. Si la taille dupaquet a transmettre lui est superieur, IP le fragmente.

A la reception, IP controle le checksum, s’il est mauvais le paquet est rejetteen erreur. Sinon ce header est enleve et le paquet resultant est passe a la couchedu dessus.

2.4.4 Routage IP

RoutageLe routage consiste a envoyer un paquet IP sur un autre reseau.Routeur (Gateway)On dit parfois en francais passerelle. Un pont est autre chose, il se situe au

niveau 2 du modele OSI en 7 couches, le routeur est au niveau 3.Un routeur est une machine dotee de plusieurs interfaces reseaux et qui traite

la couche IP de la pile TCP/IP. Un PC Linux avec plusieurs interfaces reseauxdevient un routeur si on fait :

echo "1" > /proc/sys/net/ipv4/ip_forward

– Il a autant d’interface et d’adresses IP que de reseaux auxquels il estconnecte. Ces reseaux n’ont pas necessairement la meme couche ”Proto-cole de reseau local”, ce peut etre aussi une liaison point a point (PPP,PLIP,...).

– pour chaque paquet, lit l’en-tete, controle le checksum, lit les adresses IP,decremente TTL, jette le paquet si TTL==0.

– aiguille le paquet vers un de ses interfaces, suivant un certain algorithme.Si le routeur est sature, il peut jeter des paquets.IP fait de son mieux pour acheminer les paquets, mais il peut en perdre

(”best effort”). Cette possibilite de perdre des paquets evite l’ecroulement dureseau. D’autre facteurs permettent un grand debit : l’integrite des donnees n’estpas controlee, il n’y a pas de comptabilite ni de facturation. Chaque paquetappartenant a une meme entite de depart (un fichier par exemple) est routeindependemment des autres. IP est dit ”connectionless” a (l’oppose de TCP).

+-------------------------------+| Internet Protocol & ICMP & GGP|+-------------------------------+

| |+---------------+ +---------------+| Local Net 1 | | Local Net 2 |+---------------+ +---------------+

Gateway Protocols

GGP : Gateway to Gateway ProtocolAlgorithmes de routage

Page 24: Linux Reseau

24CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

En principe, le routage se fait suivant l’adresse IP du destinataire. Un operateurde reseau doit accepter que des paquets traverse son reseau quelle que soit leurprovenance.

Dans une configuration simple, on fait du routage ”statique”. Mais s’il existeplusieurs routes pour aller d’un site a l’autre on risque des boucles.

Quand il existe plusieurs routes pour acceder a une machine et/ou que lereseau devient grand, il faut echanger avec les autres routeurs des tables deroutage et recourir a un algorithme pour choisir l’interface sur lequel envoyerun paquet.

Les tables de routage sont des couples (adresse reseau, distance). Une dis-tance peut se mesurer en :

– nombre de routeurs a traverser (hops), RFC 1058 (reseaux petits et moyens)– temps en ms, RFC 823– une note cf EGP, RFC 904 (liaisons internationales)La table de routage permet de decider a quel routeur voisin envoyer un

paquet IP. L’echange de table de routage permet de faire connaıtre a l’en-semble d’Internet la creation d’un nouveau reseau, ou un nouveau chemin versun reseau.

L’algorithme de routage est dynamique. C’est a dire que si un lien tombe ousature, il peut choisir une autre route. Internet fonctionne d’autant mieux quele reseau est maille. Les algorithmes les plus utilises sont :

– RIP (Routing Information Protocol), RFC 1058, pour reseaux petits oumoyens. Distance en nombre de hops. Daemon /usr/sbin/routed (BSD)fourni avec Linux

– EGP, daemon gated (Cornell), RFC 827, 888, 904, 975, 985– BGP, daemon gated. Actuellement BGP4 est utilise sur les routeurs In-

ternet aux frontieres du backbone (prone par Renater).– IGRP, EIGRP– OSPF (Open Shortest Path First Protocol) daemon gated pour grands

reseaux type campus.– IGP utilise sur le backbone Internet(daemon, vieux terme Unix qui signifie : Disk And Extension MONitor).Faut-il preciser qu’il est inutile de lancer routed comme le font certaines

distributions Linux quand on n’a qu’un seul interface reseau ?

2.5 TCP

TCP, Transmission Control Protocol, decrit par RFC 793, est un protocolede transfert fiable : il s’occupe de transferer un message (ou un fichier, bref desdonnees) entre deux machines. Il utilise IP pour ce transport, il sait que IPfait de son mieux mais que le reseau a des defaillances. TCP est “l’homme deconfiance”, il est utilise par les principaux protocoles INTERNET (telnet, ftp,smtp, http, X11,...).

TCP s’occupe de :– decouper le message en segments a l’emission et de les reassembler a la

reception en les remettant dans le bon ordre.– donner ou recevoir les paquets de IP– controler l’integrite des donnees par un checksum calcule au depart et

controle a l’arrivee

Page 25: Linux Reseau

2.5. TCP 25

– redemander l’emission des paquets manquants ou errones : TCP gere uneconnexion : il garde trace des paquets recus et transmis. On dit que TCPtravaille en mode connecte.

– gerer plusieurs connexions simultanees.

2.5.1 Ports TCP

TCP peut soutenir plusieurs conversations simultanees (mutiplexage). Pourles reperer, il attribue des numeros de port. Ainsi, quand une conversationdemarre il lui affecte le port 1000, si une autre demarre, elle aura le port 1001.Un couple (adresse IP, numero de port) est appele un socket . A l’autre bout,sur le serveur, un port est aussi attribue.

Pour que le client (qui initie la connexion) puisse fixer le port cote serveur,on a fixe des numeros de ports officiels suivant le type de service demande. Parexemple pour le service ftp, utilisant tcp, le port est 21. On trouve ces numeros deport reserves, appeles well known ports dans le fichier /etc/services. Extrait :

# /etc/services:ftp-data 20/tcpftp 21/tcpssh 22/tcp # SSH Remote Login Protocolssh 22/udp # SSH Remote Login Protocoltelnet 23/tcp

smtp 25/tcp mailtime 37/tcp timservertime 37/udp timserverdomain 53/tcp nameserver # name-domain serverdomain 53/udp nameservertftp 69/udpwww 80/tcp http # WorldWideWeb HTTPpop-3 110/tcp # POP version 3pop-3 110/udpsunrpc 111/tcp portmapper # RPC 4.0 portmapper TCPsunrpc 111/udp portmapper # RPC 4.0 portmapper UDPauth 113/tcp authentication tap identntp 123/tcpntp 123/udp # Network Time Protocolnetbios-ns 137/tcp # NETBIOS Name Servicenetbios-ns 137/udpafpovertcp 548/tcp # AFP over TCPafpovertcp 548/udp # AFP over TCPnfs 2049/tcp # networked file systemnfs 2049/udp # networked file systemfax 4557/tcp # FAX transm. service (old)hylafax 4559/tcp # HylaFAX client-server (new)X11 6000/tcp # X Window server (6000-6009)X11/ssh 6010/tcp # X11 over sshxfs 7100/tcp # X Font Service

Page 26: Linux Reseau

26CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

0 1 2 30 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 |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

TCP Header Format

Un socket peut etre utilise plusieurs fois par exemple (IP dest, 21) si IP destsert plusieurs connexions ftp simultanees. Mais une paire de sockets (IP source,port source, IP dest, port dest) identifie une connexion de maniere unique.

Un serveur utilisant un port inferieur a 1024 doit avoir les privileges de root.

2.5.2 En-tete TCP

TCP ajoute a chaque paquet un en-tete d’au moins 20 octets qui a le formatci-dessus.

Sequence Number : TCP ne numerote pas les paquets mais les octets. Lenumero de sequence est le numero du premier octet de la partie data du paquet(sauf si flag SYN). Ce numero est donne relativement a un initial sequencenumber (ISN) transmis lors de l’etablissement de la connexion avec le flag SYNpresent. Ce numero de sequence sert a la machine destinataire a acquiter lespaquets recus et a les remettre en ordre.

Acknowledgment Number : pour etre sur que le paquet est bien arrive, ledestinataire doit renvoyer un accuse de reception Acknowledgment . Dans cepaquet le flag ACK est present, si Acknowledgment Number vaut 1500 celasignifie qu’il a recu les donnees jusqu’a l’octet 1500 (exclus). Si l’expediteur n’apas recu un Acknowledgment pour un paquet au bout d’un certain temps , il lerenvoie.

Data Offset : position des data ou longueur du header en octet.Control Bits : 6 bits (from left to right) :– URG : Urgent Pointer field significant– ACK : Acknowledgment field significant

Page 27: Linux Reseau

2.5. TCP 27

– PSH : Push Function : paquet contenant des donnees pour le destinataire,ne pas les garder dans le tampon.

– RST : Reset the connection– SYN : Synchronize sequence numbers– FIN : No more data from senderWindow : C’est un controle de flux.L’expediteur n’attend pas de recevoir l’ack d’un paquet pour envoyer le sui-

vant. D’autre part il est inutile qu’il envoie pleins de paquets si le destinatairen’arrive pas a suivre. Par Window le destinataire indique le nombre d’octets quel’expediteur peut envoyer jusqu’a nouvel ordre. Quand le destinataire recoit desdonnees il baisse Window. Si Window=0, l’expediteur doit s’arreter. Quand ledestinataire est disponible, il augmente Window.

OptionsC’est un champ de taille variable contenant entre autre :MSS : Maximum Segment Size. Envoye quand SYN est present. Le segment

designe la partie donnees du paquet TCP.Etablissement d’une connexion TCPPour etablir une connexion, il suffit que le client fasse une demande et que

le serveur donne son accord, mais comme un paquet peut arriver en retard ouetre duplique, TCP procede en trois etapes c’est ce qu’on appelle le Basic 3-wayhandshake for connection synchronisation

La machine A (193.54.230.3) fait ftp vers la machine B (193.54.230.20.21),on analyse la connexion en faisant sur B :

tcpdump -n -S -t tcp and host 193.54.230.3

1 193.54.230.3.2998 > 193.54.230.20.21:S 3559251011:3559251011(0)win 32120 <mss 1460,sackOK,timestamp 191701351[|tcp]> (DF)

2 193.54.230.20.21 > 193.54.230.3.2998:S 4146826796:4146826796(0) ack 3559251012win 32736 <mss 1460>

3 193.54.230.3.2998 > 193.54.230.20.21:. ack 4146826797 win 32120 (DF)

Basic 3-way handshake for connection synchronisation

– Paquet 1 : Connection request– A sur le port 2998 appelle B sur le port 21.– Le flag SYN est positionne (S).– L’ISN, Initial Sequence Number est envoye egal a 3559251011, format

first :last(nombre d’octets de data)– A fixe la Window a 32120 octets– < ... > indique les options– le maximum segment size mss est a 1460 octets– [|tcp] : signifie que le header est tronque par tcpdump– DF : Don’t Fragment

– Paquet 2 :– B port 21 repond a A sur le port 2998– SYN et ACK sont positionne– B envoie son ISN 4146826796

Page 28: Linux Reseau

28CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

– B dit a A : ton ISN est bien 3559251011 (ack 3559251012)– B fixe sa Window a 32736 et sa maximum segment size a 1460 octets

– Paquet 3 :– A port 2998 repond a B sur le port 21.– pas de flag (.)– il n’y a pas de donnees donc pas de sequence number,– B dit a A : ton ISN est bien 4146826796 (ack 4146826797)

2.5.3 Etats d’une connexion TCP

Une connexion passe par differents etats qui sont :– LISTEN - le serveur attend un appel entrant– SYN-SENT - une demande de connexion est arrivee ; attente d’un ACK

(etat de A apres envoi du paquet 1).– SYN-RECEIVED - une demande de connexion est arrivee ; attente d’un

ACK (etat de B apres envoi du paquet 2).– ESTABLISHED -etat normal pour le transfert des donnees (etat de A et

B apres envoi du paquet 3).– FIN-WAIT-1 - L’application a indiquee qu’elle avait termine– FIN-WAIT-2 - L’autre extremite a accepte cette liberation.– CLOSE-WAIT - L’autres extremite a initie une liberation– CLOSING - Les deux extremites ont essaye de fermer simultanement.– LAST-ACK - attente que tous les paquets aient disparus– TIME-WAIT - attente que tous les paquets aient disparus– CLOSED - aucune connexionCes etats apparaissent quand on liste les connexions en cours par netstat

-ta

2.6 Encapsulation des protocoles

A chaque couche de la pile IP correspond une enveloppe de paquet qui estajoutee (ou retiree) a l’emission (ou a la reception). On peut schematiser cette”encapsulation” ainsi

7 Application ---------------

4 TCP T--- T--- T--- T--- T---

3 IP IT--- IT--- IT--- IT--- IT---

2 Ethernet EIT---C EIT---C EIT---C EIT---C EIT---C

– L’application donne a TCP des data, disons un fichier.– TCP decoupe ce fichier en segments, ajoute a chacun un en-tete T et le

passe a IP.– IP ajoute un en-tete I a chaque paquet et le passe a la couche Protocole

de reseau local.– Si cette couche est Ethernet, un en-tete E est ajoute et un checksum C est

calcule et rajoute a la fin.

Page 29: Linux Reseau

2.7. UDP 29

2.7 UDP

UDP, User Datagram Protocol, decrit par RFC 768, sert a envoyer des mes-sages qui tiennent dans un paquet IP. Il ajoute un en-tete. Il n’a pas a gererde numeros de sequence. Il gere un checksum. Il ne garde pas trace de ce qu’ila envoye. Donc si des paquets se perdent, c’est a l’application au-dessus de lecontroler. Il se sert de ports comme TCP pour distinguer plusieurs conversa-tions simultanees. UDP est utilise notamment pour interroger les Domain NameServers.

2.8 ICMP

Internet Control Message Protocol sert a 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-unreachablenetwork-unreachablehost-unknownnetwork-unknownnetwork-redirect (indication d’un routeur a un autre signalant une meilleure route)

Exemple :

zoroastre:/u1/morel# tcpdump ip proto \\icmptcpdump: listening on eth010:05:05.158390 24.40.2.51 > zoroastre.c-strasbourg.fr:

icmp: 24.40.2.51 udp port domain unreachable10:05:36.400747 zoroastre.c-strasbourg.fr > antares.c-strasbourg.fr:

icmp: zoroastre.c-strasbourg.fr udp port 1327 unreachable [tos 0xc0]17:40:21.192375 zoroastre.c-strasbourg.fr > yelen.c-strasbourg.fr:

icmp: echo request17:40:21.192375 yelen.c-strasbourg.fr > zoroastre.c-strasbourg.fr:

icmp: echo reply

2.9 ARP

Address Resolution Protocol RFC 826 sur un reseau local Ethernet permetde trouver l’adresse Ethernet (dite adresse MAC) d’une machine connaissant sonadresse IP. Pour que IP puisse communiquer par Ethernet il faut qu’il connaissel’adresse Ethernet du destinataire. ARP n’est pas un protocole IP, il n’utilisepas de paquet IP.

Si la machine 130.79.186.1 veut causer a la machine 130.79.186.2, IP verifieavec le netmask qu’elle sont bien sur le meme reseau. Ensuite ARP regarde dansson cache s’il a 130.79.186.2.

Sur Linux le cache est visible par les commandes cat /proc/net/arp ouarp -a

Page 30: Linux Reseau

30CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

Si oui, il y trouve l’adresse Ethernet. Sinon, ARP lance un ”ARP request”a toutes les machines comportant la question ”Qui a l’adresse IP 130.79.186.2”.Celle qui a l’adresse IP specifiee repond.

L’ARP request est un message broadcast. Son adresse Ethernet destinatairea tous les bits a 1 : ff :ff :ff :ff :ff :ff. Les machines sont obligees de prendre encompte ces paquets Ethernet. Si une machine est concernee elle repond, sinonelle l’ignore. Certaines machines du reseau utilisent les ARP request pour etablirdes tables des autres machines : c’est le cas d’un switch qui doit savoir quellesadresses Ethernet sont derriere chacun de ses ports.

Exemple d’un dialogue arp ecoute par tcpdump :

#tcpdump -e arptcpdump: listening on eth018:36:51.514176 0:48:54:6a:59:96 Broadcast arp 60:

arp who-has zoroastre.c-strasbourg.fr tell carbone.c-strasbourg.fr18:36:51.514176 0:50:4:f9:33:82 0:48:54:6a:59:96 arp 42:

arp reply zoroastre.c-strasbourg.fr is-at 0:50:4:f9:33:82

2.10 Noms de machines

Les adresses IP ne sont pas commodes a retenir. On leur prefere des nomsen clair. Les noms de machines sont structures en une hierarchie de domaines :

domaine1.domaine2...top level domainExemple : zoroastre.c-strasbourg.fr– zoroastre est le hostname (commande Linux hostname)– c-strasbourg.fr est le domainname (commande Linux hostname -d)– zoroastre.c-strasbourg.fr est le fully qualified domain name (FQDN).

Je dis indifferement nom de domaine ou nom de machine.L’espace des noms a une structure hierarchique :Le nom de domaine zoroastre.c-strasbourg.fr fait partie du domaine

c-strasbourg.fr qui lui-meme fait partie du domaine fr. Ce dernier est appeletop level domain (TLD). En voici quelques uns :

– aux USA : edu, mil, gov, com– com a ete etendu a l’international– agences internationales : net, org– noms de pays ISO-3166 :fr, de, uk, it, ru, cn, auL’autorite de nommage est le NIC : Network Information Center . En France

(top level domain fr) c’est le NIC-Francehttp://www.nic.frPour le domaine c-strasbourg.fr, c’est l’administrateur du Domain Name

System c-strasbourg.fr.L’indication de pays dans le top level domain ne signifie pas que l’ordinateur

en question s’y trouve physiquement localise.

2.10.1 Domain Name System

Le DNS fait la correspondance entre nom de domaine et adresse IP. Au debutce n’etait qu’une table mise a jour manuellement cf /etc/hosts.

– C’est une base de donnees repartie : des serveurs named communiquantpar le protocole domain (sur UDP well known port 53)

Page 31: Linux Reseau

2.11. DEMARRAGE DU RESEAU 31

– Les serveurs root ont l’information sur les top level domain– Chaque domaine doit disposer d’un DNS qui fait autorite– Chaque machine doit avoir acces a au moins un DNS– Optimisation : un DNS memorise les informations dans un cache (durant

un temps TTL)– Securite : des DNS secondaires copies de DNS primairesExemple d’interrogation– adresse IP de www.cern.ch ?– requete a un DNS indique dans la ligne nameserver de /etc/resolv.conf– mon DNS n’a pas www.cern.ch dans son cache– il demande a 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 a mon DNS qui

la garde dans son cache– mon DNS me renvoie l’adresse IP de www.cern.chTypes d’informations contenues dans les DNS :– A : associe une adresse IP a un nom de domaine. C’est l’objet essentiel du

DNS– PTR : permet la requete inverse : a 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 preference a quel nom de

domaine envoyer le courrier por ce nom de domaine. Exemple : math.u-strasbg.frpointe sur amon.u-strasbg.fr avec la preference 10Les MX records permettent de :– centraliser la messagerie dans un organisme sur une machine securisee– de communiquer avec des machines non connectees a Internet ( uucp,

...)– NS pointe sur un master DNS, le serveur de nom de reference pour la zone– SOA : (Start of authority) en-tete d’une zone d’autorite

2.11 Demarrage du reseau

2.11.1 Configuration du noyau

Generalement, le noyau est configure avec le support de IP Networking etd’un interface reseau ou de plusieurs s’ils sont en modules.

CONFIG_INET=yCONFIG_NET_ETHERNET=yCONFIG_VORTEX=y (par exemple pour la carte 3COM 3C905B)

Un test du support reseau par le noyau est fait par ls /proc/net ou bienon regarde ce que le noyau affiche au boot :

NET4: Unix domain sockets 1.0 for Linux NET4.0.NET4: Linux TCP/IP 1.0 for NET4.0IP Protocols: ICMP, UDP, TCP

Page 32: Linux Reseau

32CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

TCP: Hash tables configured (ehash 16384 bhash 16384)

2.11.2 Identification d’une machine

Pour connecter une machine a un reseau, on a besoin de :– Adresse IP de la machine– Masque de reseau– Adresse de broadcast– Adresse du routeur– Adresse du serveur de noms de domaine (DNS).

2.11.3 Initialisation de l’interface reseau

On initialise l’interface reseau par ifconfig et on declare les routes parroute

En Debian, ceci etait fait dans le shell script /etc/init.d/network. Cefichier comporte les commandes ifconfig et route. En Debian 2.2, il estrecommande de lancer le reseau par ifup de l’arreter par ifdown, ceci est faitpar le shell script /etc/init.d/networking.

Le lancement se fera par :

/etc/init.d/networking start

et l’arret par :

/etc/init.d/networking stop

Au lancement ce script execute au prealable des actions spoofprotect, syncoo-kies, ip forward, en fonction d’options que l’on peut modifier dans /etc/network/options.

$cat /etc/network/optionsip_forward=nospoofprotect=yessyncookies=no

On verra plus tard leur signification.Ensuite il initialise le ou les interfaces reseaux par ifup -a . Ces interfaces

sont definis dans /etc/network/interfaces. Exemple :

# The loopback interfaceiface lo inet loopback

# The first network card -# (network, broadcast and gateway are optional)iface eth0 inet static

address 193.54.230.109netmask 255.255.255.0network 193.54.230.0broadcast 193.54.230.255gateway 193.54.230.1

Avec ces informations, la commande ifup -a execute pour chaque interfaceune commande ifconfig et une commande route. Remarques :

Page 33: Linux Reseau

2.11. DEMARRAGE DU RESEAU 33

– si on ajoute noauto sur la ligne iface, l’interface n’est pas initialise parifup -a ni arrete par ifdown -a. On peut le commander manuellementpar ifup eth0, ifdown eth0, si l’interface est eth0.

– autres informations par man 5 interfaces– les lignes commencant par # sont ignorees.– up commande execute commande apres l’initialisation de l’interface. pre-up

commande execute commande avant l’initialisation.– idem avec down etpre-down pour l’arret de l’interface.Nous considerons que l’interface reseau est l’interface Ethernet eth0, mais

ce peut etre un deuxieme interface Ethernet eth1 ou un interface vers un autreprotocole reseau. On verra par la suite comment initialiser ppp0 pour PPP,plip0 pour PLIP.

2.11.4 La commande ifconfig

Pour activer l’interface reseau eth0, on fait par exemple sous root :

root# ifconfig eth0 193.54.230.20 netmask 255.255.255.0 up

Dans ce cas je configure l’interface Ethernet ‘eth0’ avec l’adresse IP ‘193.54.230.20’et un masque de reseau ‘255.255.255.0’. Le ‘up’ est inutile car c’est le defaut.

On aurait pu preciser une adresse de broadcast par :

root# ifconfig eth0 193.54.230.20 netmask 255.255.255.0 broadcast 193.54.230.255

Mais le noyau est capable de le deviner a partir de l’adresse IP qui est declasse C. De meme il aurait pu deviner le netmask sauf si je fais du subnetting.

A tout instant on obtient des informations sur l’interface en faisant ifconfigeth0

$ ifconfig eth0eth0 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.0EtherTalk Phase 2 addr:65280/102UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:65692192 errors:0 dropped:0 overruns:0 frame:0TX packets:99634932 errors:0 dropped:0 overruns:0 carrier:0Collisions:1893719Interrupt:12 Base address:0xe000

Autres statistiques affichees dans ifconfig :– RX Nombre de paquets Ethernet recus– TX Nombre de paquets Ethernet transmis– errors : erreur sur le checksum Ethernet ?– dropped : paquets perdus probablement pour manque de memoire– overruns : entre autre les paquets arrivent trop vite, le noyau n’a pas le

temps de les traiter.– frame ?– carrier : differents incidents parmi lesquels Out-of-window (”cable to

long” or ”someone is running full-duplex”)Autres options de ifconfig :– pointopoint addr : pour une liaison point a point comme avec plip

Page 34: Linux Reseau

34CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

– mtu : Maximum Transmission Unit : taille max d’un paquet que l’interfaceest en mesure de traiter en une transaction. Pour Ethernet c’est 1500. PourPPP peut etre plus faible.

– metric : associe a l’entree dans la table de routage correspondant a cetinterface, exprime le cout d’une route (= nombre de routeurs a traverser)pour certains protocoles de routage (RIP). Laissez le defaut.

– promisc : met l’interface reseau en mode promiscuous (permet de recevoirtous les paquets Ethernet qui passent sur le reseau. ( -promisc remet enmode normal)

– allmulti : pour multicastDans le cas de PPP (IP sur ligne telephonique), l’interface reseau se lance

par pppd, on n’a pas a faire ifconfig.Pour desactiver l’interface, on fait :

ifconfig eth0 down

On notera que, contrairement aux autres peripheriques, eth0 n’est pas unnom 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’extrayantde la sortie de la commande ifconfig comme suit :

/sbin/ifconfig eth0 | grep ’inet addr’ | awk ’{print $2}’ | sed -e ’s/.*://’

2.11.5 La commande route

Sur Linux vous pouvez afficher la table de routage par l’une des commandessuivantes :

user% cat /proc/net/routeuser% /sbin/route -nuser% /sbin/routeuser% /sbin/netstat -ruser% /sbin/netstat -rn

Exemple :

$ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface193.54.230.0 0.0.0.0 255.255.255.0 U 0 0 78581 eth0127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 2779 lo0.0.0.0 193.54.230.1 0.0.0.0 UG 1 0 418155 eth0

$ routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacelocalnet * 255.255.255.0 U 0 0 78581 eth0127.0.0.0 * 255.0.0.0 U 0 0 2779 lodefault routeur 0.0.0.0 UG 1 0 418154 eth0

Etant donne un paquet d’adresse destination adr-dest a router, le noyau pourchaque ligne de la table de routage fait :

Page 35: Linux Reseau

2.11. DEMARRAGE DU RESEAU 35

Si adr-dest AND Genmask == Destinationalors envoi du paquet a GatewaySinon ligne suivante

– Colonne Destination : adresse de reseau. Si elle est tout a zero, c’est laroute par defaut.

– Colonne Gateway : si valeur * ou 0.0.0.0, il n’y a pas de routage a faire,c’est local.

– Flags :– U interface Up– G cette route utilise un Gateway– H une seul Host accessible par cette route, liaison point a point– D si entree creee par un message ICMP redirect– M si entree creee par un message ICMP redirect

– Colonne Ref : nombre de routes derriere cet interface– Use : nombre d’utilisation de cette entree de la table de routage– Iface : interface a utiliserPour modifier la table de routage de maniere statique, on utilise la commande

route.– Ajout d’une route vers une machine :route add -host 127.0.0.1 lo

– Ajout d’une route vers un reseau :route add -net 193.54.230.0L’interface n’est pas indique ici. Le noyau compare pour chaque interfaceconfigure son adresse ANDed avec son netmask avec cette adresse reseau.Le seul interface qui convient est eth0.

– Ajout d’une route par defaut :route add default gw 193.54.230.1 metric 1

– Retrait d’une route par defaut :route del default

Autres parametres : netmask : il faut le preciser quand on fait du subnetting.On peut specifier les parametres mss window irtt voir man route.

2.11.6 Configuration de l’interface loopback

L’interface ‘loopback’ permet de vous connecter a la machine locale. Il ya plusieurs raisons pour faire cela, par exemple si vous voulez faire des essaisde logiciel reseau sans interferer avec quelqu’un d’autre sur votre reseau. Parconvention, l’adresse IP ‘127.0.0.1’ lui a ete assignee. Aussi quelle que soit lamachine ou vous etes, si vous ouvrez une connexion telnet vers 127.0.0.1 vousatteindrez toujours la machine locale.

On le configure par :

root# ifconfig lo 127.0.0.1root# route add -host 127.0.0.1 lo

On l’utilise par exemple ainsi :

$ ping localhost -c 2PING localhost (127.0.0.1): 56 data bytes64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=1.5 ms

Page 36: Linux Reseau

36CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=1.4 ms

--- localhost ping statistics ---2 packets transmitted, 2 packets received, 0% packet lossround-trip min/avg/max = 1.4/1.4/1.5 ms

2.12 Configuration d’un routeur

Supposons qu’une machine Linux a 3 interfaces Ethernet accedant a desreseaux prives et un lien PPP vers l’Internet. La configuration de routage sera :

root# echo "1" > /proc/sys/net/ipv4/ip_forwardroot# route add -net 192.168.1.0 netmask 255.255.255.0 eth0root# route add -net 192.168.2.0 netmask 255.255.255.0 eth1root# route add -net 192.168.3.0 netmask 255.255.255.0 eth2root# route add default ppp0

Pourquoi la route par defaut n’utilise pas ‘gw’ ? La raison en est tres simple :le protocole PPP est point a point il n’y a qu’une machine a chaque bout.Specifier que l’autre bout de la liaison est un routeur est sans objet et redondant.

IncidentsSi vous avez des diagnostics d’erreurs SIOCADDRT, ils peuvent etre evites

en ajoutant un netmask et le nom de l’interface a la commande "route add-net". Exemple :

route add -net 127.0.0.0

devient :

route add -net 127.0.0.0 netmask 255.0.0.0 lo

2.13 Resolution de noms de domaines

2.13.1 Configuration

Le Name Resolver est accede en langage C par gethostbyname(2) et gethost-byaddr(2). Il y a deux moyens pour traduire une adresse IP en nom de domaine :le fichier /etc/hosts et l’acces a un DNS. L’acces au DNS se configure dans lefichier /etc/resolv.conf

$ cat /etc/resolv.confnameserver 127.0.0.1search c-strasbourg.frnameserver 193.54.211.65nameserver 193.48.86.103

Les lignes nameserver indiquent les adresses IP de DNS a interroger dansl’ordre ou ils sont cites. La ligne search sert a completer les hostnames enFQDN. Si on veut resoudre le nom truc le resolveur essaiera truc.c-strasbourg.fret si echec truc.fr.

La configuration du resolveur de noms se fait dans /etc/host.conf

Page 37: Linux Reseau

2.13. RESOLUTION DE NOMS DE DOMAINES 37

$ cat /etc/host.conforder hosts,bindmulti on

– order : precise dans quel ordre on consultera : ici en premier /etc/hosts(hosts) et en second un DNS (bind).

– multi on : est la pour le cas ou dans /etc/hosts une machine a plusieursadresses IP.

– nospoof on : une interrogation directe puis inverse du DNS est faite. Sielles ne collent pas, une erreur est retournee : address spoofing.

– alert si une tentative de spoof (maquillage d’adresse) est faite un messageest logge.

La possibilite d’avoir un service NIS (Network Information Service ou YellowPage de Sun) est prevue dans la libc6. Il faut donc aussi configurer le fichier/etc/nsswitch.conf.

$ 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: compatgroup: compatshadow: compat

hosts: files dnsnetworks: files

protocols: db filesservices: db filesethers: db filesrpc: db files

netgroup: db files

N’ayant pas active le service NIS une ligne nous interesse :– hosts : donne l’ordre de consultation files fichier /etc/hosts consulte

en premier, ensuite dns le DNS.

2.13.2 Resolution de noms de domaine

nslookup

$ nslookup www.lwn.netServer: localhostAddress: 127.0.0.1

Name: lwn.netAddress: 206.168.112.90

Page 38: Linux Reseau

38CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

Aliases: www.lwn.net

$ nslookup 206.168.112.90Server: localhostAddress: 127.0.0.1

Name: nr.lwn.netAddress: 206.168.112.90

Peut etre interroge interactivement. Tapez nslookup tapez help fin parCtrl-D

$ nslookupDefault Server: localhostAddress: 127.0.0.1

> set qt=SOA> c-strasbourg.frServer: localhostAddress: 127.0.0.1

c-strasbourg.frorigin = antares.c-strasbourg.frmail addr = administrator.c-strasbourg.frserial = 1998091712refresh = 43200 (12H)retry = 600 (10M)expire = 2592000 (4w2d)minimum ttl = 604800 (1W)

c-strasbourg.fr nameserver = antares.c-strasbourg.frc-strasbourg.fr nameserver = sbgsu3.in2p3.frc-strasbourg.fr nameserver = zoroastre.c-strasbourg.frantares.c-strasbourg.fr internet address = 193.54.211.65sbgsu3.in2p3.fr internet address = 193.48.86.103zoroastre.c-strasbourg.fr internet address = 193.54.230.20

Interrogation par la racine de l’arborescence

$ nslookupDefault Server: localhostAddress: 127.0.0.1. <---------- signifie la racine de l’arborescenceServer: localhostAddress: 127.0.0.1

(root)origin = A.ROOT-SERVERS.NET <----- en tete de mon fichier named.camail addr = hostmaster.internic.NETserial = 2000061302refresh = 1800 (30M)retry = 900 (15M)

Page 39: Linux Reseau

2.13. RESOLUTION DE NOMS DE DOMAINES 39

expire = 604800 (1W)minimum ttl = 86400 (1D)

server A.ROOT-SERVERS.NET <-------------- j’interroge directement ce serveurftp.lip6.frServer: A.ROOT-SERVERS.NETAddress: 198.41.0.4

Authoritative answers can be found from: <---- le coquin refuse de me repondreFR nameserver = DNS.CS.WISC.EDUFR nameserver = NS1.NIC.FR \FR nameserver = NS3.NIC.FR | serveurs du NIC FRFR nameserver = DNS.INRIA.FR |FR nameserver = NS2.NIC.FR /FR nameserver = NS.EU.NETFR nameserver = DNS.PRINCETON.EDUFR nameserver = NS-EXT.VIX.COMDNS.CS.WISC.EDU internet address = 128.105.2.10NS1.NIC.FR internet address = 192.93.0.1NS3.NIC.FR internet address = 192.134.0.49DNS.INRIA.FR internet address = 193.51.208.13NS2.NIC.FR internet address = 192.93.0.4NS.EU.NET internet address = 192.16.202.11DNS.PRINCETON.EDU internet address = 128.112.129.15NS-EXT.VIX.COM internet address = 204.152.184.64> server DNS.CS.WISC.EDU <------- qu’a cela ne tienne choisissons celui-ciDefault Server: DNS.CS.WISC.EDUAddress: 128.105.2.10

> ftp.lip6.frServer: DNS.CS.WISC.EDUAddress: 128.105.2.10

Non-authoritative answer:Name: nephtys.lip6.frAddress: 195.83.118.1Aliases: ftp.lip6.fr> zoroastre.c-strasbourg.fr <------ je suis meme connu aux US !!!Server: DNS.CS.WISC.EDUAddress: 128.105.2.10

Name: zoroastre.c-strasbourg.frAddress: 193.54.230.20

host interroge le DNSSyntaxe :

host [options] nom_de_domaine serveur

Options :– -v : liste records DNS– -t : query type : A,ANY,CNAME,HINFO,MX,PX,NS,PTR,SOA,TXT,WKS,SRV,NAPTR

Page 40: Linux Reseau

40CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

– -l : zone : liste tous les noms de la zoneExemples :

$ host tux.u-strasbg.frtux.u-strasbg.fr A 130.79.34.100$ host -t mx tux.u-strasbg.frtux.u-strasbg.fr MX 30 tux.u-strasbg.frtux.u-strasbg.fr MX 10 amon.u-strasbg.frtux.u-strasbg.fr MX 20 isis.u-strasbg.fr$ host 130.79.34.100Name: tux.u-strasbg.frAddress: 130.79.34.100Aliases: tux

Si on veut compter le nombre de machines d’un domaine :

host -l c-strasbourg.fr|wc|awk ’{print $1}’

Interrogation inverse :

host -v -t ptr 20.230.54.193.in-addr.arpaequivalent a:

host -v 193.54.230.20

dig interroge le domain name serverSyntaxe : dig [options] @server domain query-type query-classOptions : -x : interrogation inverse -p : port, defaut : 53 Il existe d’autres

options. Exemples :

dig phoebus.c-strasbourg.fdig @sbgsu3.in2p3.fr c-strasbourg.fr soadig -x 193.54.230.3 interrogation inverse

dnsquery interroge le domain name serverAffiche les informations sous forme brute des RR.

$ 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 = INantares.c-strasbourg.fr. 1W IN A 193.54.211.65c-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.65sbgsu3.in2p3.fr. 13m15s IN A 193.48.86.103zoroastre.c-strasbourg.fr. 1W IN A 193.54.230.20

2.13.3 Resolution inverse de noms de domaine

Elle consiste a demander quel est le nom de domaine associe a une adresseIP que l’on fournit. On a vu que les commandes

Page 41: Linux Reseau

2.14. OUTILS DE DIAGNOSTIC 41

nslookup 206.168.112.90host 206.168.112.90

fournissait la reponse. Mais de maniere interne une transformation a etefaite. Il est bon pour un administrateur de la connaıtre :

Pour eviter de faire une recherche dans la base de donnees qui est d’accessequentiel et reparti !, on a cree un domains special in-addr.arpa qui contientles 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) contenantcette information sont de type PTR On interroge ainsi :

[morel]$ nslookupDefault Server: localhostAddress: 127.0.0.1

> set qt=PTR> 90.112.168.206.in-addr.arpaServer: localhostAddress: 127.0.0.1

Non-authoritative answer:90.112.168.206.in-addr.arpa name = nr.lwn.net

Authoritative answers can be found from:112.168.206.in-addr.arpa nameserver = ns.netrack.net112.168.206.in-addr.arpa nameserver = ns.coop.net>

qt signifie Query Type. On a le choix entre A, ANY, CNAME, HINFO, MX,PX, NS, PTR, SOA, TXT, WKS, SRV, NAPTR

On sort de nslookup par Ctrl-D.

2.14 Outils de diagnostic

2.14.1 ping

Teste la connectivite, mesure le temps ecoule, compte le nombre de paquetsperdus. Envoi de n=5 paquets :

ping -c 5 www.lwn.net

Variante fping package Debian netstd. S’utilise a travers un script.

2.14.2 traceroute

Tente de tracer la route suivie pour parvenir au site destinataire en lancantdes petits paquets UDP, d’abord avec un ‘time to live’ TTL=1, le paquet nepeut traverser qu’un routeur puis TTL=2, puis TTL=3, etc. A chaque essaitraceroute se met a l’ecoute du message ICMP ”time exceeded”. Donc indiquetous les routeurs depuis votre machine jusqu’a la machine cible. Permet d’iden-tifier ou le reseau est coupe. Par defaut fait 3 essais pour chaque valeur de ttl.

Page 42: Linux Reseau

42CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

Indique le temps mis en msec. Si au bout de 5 secondes il n’y a pas de reponseaffiche ’*’. Exemple :

$ traceroute ftp.lip6.frtraceroute to nephtys.lip6.fr (195.83.118.1), 30 hops max, 38 byte packets1 routeur (193.54.230.1) 1.119 ms 1.300 ms 1.074 ms2 strasbourg.cssi.renater.fr (194.214.110.233) 3.098 ms 1.066 ms 0.955 ms3 nio-n1.cssi.renater.fr (194.214.110.137) 7.372 ms 7.006 ms 7.256 ms4 jussieu.cssi.renater.fr (194.214.109.6) 7.428 ms 7.341 ms 7.455 ms5 rap-jussieu.cssi.renater.fr (193.51.12.78) 7.733 ms 7.431 ms 7.542 ms6 jussieu.rap.prd.fr (195.221.126.33) 8.444 ms 8.707 ms 8.714 ms7 nephtys.lip6.fr (195.83.118.1) 8.116 ms 9.304 ms 8.809 ms

Autre reponse possible :– !H, !N, ou !P (host, network ou protocol unreachable)– !A, !C (access to the network or host, respectively, is prohibited)Le developpement des firewall peut faire que les messages ICMP sont filtres.

Dans ce cas on peut utiliser tcptraceroute qui envoie des paquets TCP SYNVariante mtr : combine traceroute et ping

mtr --curses www.debian.org

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 -iKernel Interface tableIface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flagslo 3584 0 30285178 0 0 0 30285178 0 0 0 BLRUeth0 1500 0 66988299 0 0 0 103800699 0 0 0 BRUeth0: 1500 0 0 0 0 0 0 0 0 0 BRUeth0: 1500 0 1 0 0 0 0 0 0 0 BRUeth0: 1500 0 2 0 0 0 0 0 0 0 BRU

netstat -s denne des statistiques plus detaillees au niveau IP, ICMP, TCP,UDP.

netstat -r donne la table de routage, -n evite la traduction en noms dedomaines

netstat -rnKernel IP routing tableDestination Gateway Genmask Flags MSS Window irtt Iface193.54.230.37 0.0.0.0 255.255.255.255 UH 1500 0 0 eth0:0193.54.230.50 0.0.0.0 255.255.255.255 UH 1500 0 0 eth0:1193.54.230.104 0.0.0.0 255.255.255.255 UH 1500 0 0 eth0:2193.54.230.0 0.0.0.0 255.255.255.0 U 1500 0 0 eth0127.0.0.0 0.0.0.0 255.0.0.0 U 3584 0 0 lo0.0.0.0 193.54.230.1 0.0.0.0 UG 1500 0 0 eth0

Page 43: Linux Reseau

2.14. OUTILS DE DIAGNOSTIC 43

irtt : initial round trip time pour les connexions TCP : sert a fixer untimeout au bout duquel un paquet est renvoye si l’acquitement n’a pas ete recu.Defaut 300ms (man route

netstat -a affiche les connexions en cours. On peut etre plus selectif avecles 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 a

identifier la connexion. Il faut etre root.– -l : affiche uniquement les connexions en attente (listening)

Active Internet connections (including servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 1 0 zoroastre.c-stras:pop-3 cassiopee.c-strasb:3317 TIME_WAITtcp 0 0 zoroastre.c-stra:telnet cedre.c-strasbourg:1035 ESTABLISHEDtcp 0 0 zoroastre.c:netbios-ssn pandore.c-strasbou:1025 ESTABLISHEtcp 0 0 *:snpp *:* LISTENtcp 0 0 *:fax *:* LISTENtcp 0 0 *:hylafax *:* LISTENtcp 0 0 zoroastre.c-strasb:1023 auger.c-strasbourg.:ssh ESTABLISHEDtcp 0 0 *:6000 *:* LISTENtcp 0 0 *:6010 *:* LISTENtcp 0 0 zoroastre.c-:afpovertcp direction.c-strasb:2049 ESTABLISHEDtcp 0 0 *:smtp *:* LISTENtcp 0 0 *:auth *:* LISTENtcp 10 0 localhost:auth localhost:23188 CLOSE_WAITtcp 0 0 *:printer *:* LISTENtcp 0 0 *:6000 *:* LISTENtcp 0 0 *:6010 *:* LISTENtcp 0 32120 www-emrs.c-strasbou:www dyson.hlphys.uni-l:1036 CLOSEtcp 370 0 zoroastre.c-strasbo:www 35-041.al.cgocable:1182 CLOSEtcp 0 0 *:10298 *:* LISTENtcp 0 0 zoroastre.c-strasbo:979 ppp-171-1.villette:2860 ESTABLISHEDtcp 0 0 zoroastre.c-strasb:auth ppp-171-1.villette:1994 ESTABLISHEDtcp 0 0 zoroastre.c-stra:sunrpc ppp-171-1.villette:1992 ESTABLISHEDtcp 0 0 zoroastre.c-stra:domain ppp-171-1.villette:1934 ESTABLISHEDtcp 0 0 zoroastre.c-strasb:auth ppp-171-1.villette:1605 ESTABLISHEDtcp 0 0 zoroastre.c-stra:sunrpc ppp-171-1.villette:1603 ESTABLISHEDtcp 0 0 zoroastre.c-stra:domain ppp-171-1.villette:1545 ESTABLISHEDtcp 349 0 www-emrs.c-strasbou:www dyson.hlphys.uni-l:2575 CLOSEtcp 0 0 *:ssh *:* LISTENtcp 0 0 *:www *:* LISTENtcp 0 0 *:afpovertcp *:* LISTENtcp 0 0 *:979 *:* LISTENtcp 0 0 *:2049 *:* LISTENtcp 0 0 *:7100 *:* LISTEN

Page 44: Linux Reseau

44CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

tcp 0 0 www-sfp2001.c-st:domain *:* LISTENtcp 0 0 www-sdre.c-stras:domain *:* LISTENtcp 0 0 www-emrs.c-stras:domain *:* LISTENtcp 0 0 zoroastre.c-stra:domain *:* LISTENtcp 0 0 localhost:domain *:* LISTENtcp 0 0 *:imap2 *:* LISTENtcp 0 0 *:pop-3 *:* LISTENtcp 0 0 *:exec *:* LISTENtcp 0 0 *:login *:* LISTENtcp 0 0 *:shell *:* LISTENtcp 0 0 *:ftp *:* LISTENtcp 0 0 *:telnet *:* LISTENtcp 0 0 *:time *:* LISTENtcp 0 0 *:daytime *:* LISTENtcp 0 0 *:sunrpc *:* LISTEN

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 commeUnix.

telnet tux.u-strasbg.fr

Permet aussi de tester si un serveur tcp fonctionne en fixant le port. Exemple :Test d’un serveur POP

telnet zoroastre.c-strasbourg.fr 110Trying 193.54.230.20...Connected to zoroastre.c-strasbourg.fr.Escape character is ’]’.+OK POP3 zoroastre.c-strasbourg.fr v4.47 server readyuser morel+OK User name accepted, password pleasepass xxxxx+OK Mailbox open, 457 messagesstat+OK 457 3209602list 1+OK 1 2032quit+OK SayonaraConnection closed by foreign host

Page 45: Linux Reseau

2.14. OUTILS DE DIAGNOSTIC 45

2.14.5 nc

C’est un outil elementaire pour faire un dialogue TCP ou UDP avec uneautre machine. C’est le « couteau suisse » de TCP-IP.

Exemple :

$ nc zoroastre 25220 zoroastre.c-strasbourg.fr ESMTP Sendmail 8.9.3/8.9.3; Fri, 23 Mar 2001 17:41:49 +0100quit221 zoroastre.c-strasbourg.fr closing connection

2.14.6 tcpdump

tcpdump necessite la configuration de Packet Socket dans le noyau. Il im-prime les en-tetes des paquets passant sur un interface reseau et satisfaisantune expression logique. Il s’emploie sous root car l’interface doit etre mis enmode promiscuous. Si le reseau dispose de switch on ne peut ecouter que lespaquets qui circulent sur le segment raccorde au port du switch le plus proche,hormis les messages broadcast comme les arp requests.

Documentation : man tcpdumpOptions :– -i eth1 : ecoute 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 donnees dans chaque paquet. Defaut : 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 a dire l’en-tete Ethernet– -S : imprime les TCP Sequence Number sous forme absolue plutot que

relative (par defaut, les Initial Sequence Number (ISN) sont en absolusmais a la suite les Sequence Number sont donnes relativement aux ISN)

– -v : sortie bavarde (ajout de ttl, id)– -vv : sortie encore plus bavarde– -x : sortie en hexadecimal– -w fichier : copie les paquets a l’etat brut dans fichier– -r fichier : lit les paquets copies dans fichier par -wExpression :En l’absence d’une expression, tous les paquets sont affiches. Sinon, seuls

les paquets pour lesquels l’expression est vraie sont affiches. Une expression estfaite de primitives. Une primitive est faite d’un identifieur (nombre ou nom)precede 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 a

point on peut utiliser inbound et outbound.– protocole : ether, ip, arp, tcp, udp ...Les primitives peuvent etre combinees par and, or et not. Les parentheses

sont autorisees mais doivent etre mise entre simples quotes pour ne pas etreinterpretees par le shell.

Exemples d’expressions :

Page 46: Linux Reseau

46CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

– host phoebus : paquet venant ou a destination de la machine phoebus– src host phoebus : paquet venant de la machine phoebus– port 25 : paquet venant ou a destination du port 25 (on peut remplacer25 par smtp cf /etc/services). port 25 est equivalent a (tcp or udp)port 25

– tcp : paquet tcp– tcp and host phoebus : paquet tcp venant ou a destination de la ma-

chine phoebus– host phoebus and port ’(ftp or ftp-data)’ : paquet ftp venant ou

a destination de la machine phoebusAutres primitives :– less 1000 : paquet de longueur inferieure a 1000 octets– len <= 1000 : idem– greater 1000 : paquet de longueur superieure a 1000 octets– len >= 1000 : idem– ip proto //icmp : paquet IP de protocole icmp (ou udp, tcp). Le backs-

lash sert a distinguer de l’utilisation citee plus haut en protocole.– expr relop expr : relop peut etre =, !=, >, >=, <, <=, expr est une

expression arithmetique avec les operateurs +, -, *, /, &,| et des operateursqui permettent d’acceder a des donnees dans des paquets. Exemple :tcp[0] designe le 1er octet de l’en-tete TCP.

Exemples :Ecoute d’un port pour l’identifier :

tcpdump port 1023

Ecoute du protocole icmp :

tcpdump ip proto \\icmptcpdump icmp

Ecoute paquets tcp sans date (timestamp), en laissant les adresses IP (-n)

tcpdump -n -t tcp

Ecoute d’une machine donnee par son adresse IP :

tcpdump host 195.36.171.1

Paquets destines a la machine phoebus :

tcpdump dest host phoebus

Paquets tcp concernant phoebus :

tcpdump -n -t tcp and host phoebus

Paquets udp concernant phoebus :

tcpdump udp and host phoebus : paquets udp concernant phoebus

Paquets ftp concernant phoebus :

tcpdump host phoebus and port ’(ftp or ftp-data)’

Paquets echanges entre les machines zoroastre et helios

Page 47: Linux Reseau

2.14. OUTILS DE DIAGNOSTIC 47

tcpdump host zoroastre and helios

Ecoute d’une session pop de la machine milord depuis le serveur :

tcpdump host milord and port pop3 > milord.txt &

Exemple de paquets TCP : on filtre les paquets TCP qui ont les flags SYNou FIN leves, ils sont dans le 13eme octet de l’en-tete TCP. & est l’operateurAND bit a bit.

# tcpdump ’tcp[13] & 3 != 0 ’tcpdump: listening on eth019:15:01.126744 zoroastre.c-strasbourg.fr.8264 > cttm.univ-lemans.fr.auth:

S 3625303099:3625303099(0) win 32120 <mss 1460>19:15:05.097050 alexandra.c-strasbourg.fr.1108 > zoroastre.c-strasbourg.fr.pop-3:

S 33699541:33699541(0) win 8192 <mss 1460> (DF)19:15:05.097050 zoroastre.c-strasbourg.fr.pop-3 > alexandra.c-strasbourg.fr.1108:

S 3553096866:3553096866(0) ack 33699542 win 32736 <mss 1460>19:15:05.337126 zoroastre.c-strasbourg.fr.pop-3 > alexandra.c-strasbourg.fr.1108:

F 253:253(0) ack 43 win 32736

Structure d’un paquet TCP :

src > dst: flags data-seqno ack window urgent options

– src et dst sont les adresses IP et les ports source et destination– flags : une combinaison de S (SYN), F(FIN), P (PUSH), R (RST) ou un

simple ‘.’ (no flags)– Data-seqno : portion de l’espace de numeros de sequence couvertes par les

donnees. Exemple :3625303099:3625303099(0)signifie pas de donnees. Au depart les numeros sont donnes en absolu. A lasuite ils sont donnes relativement au numero de sequence initial. Exemple :2:21(19)

signifie donnees de 19 octets– Ack est le numero de sequence du prochain octet attendu du partenaire– Window : nombre d’octets disponibles dans le buffer de reception– urgent : donnees urgentes– options : options entre < >, exemple :<mss 1460>

– src, dst, flags sont toujours presentsExemple de paquet UDP : sur la machine phoebus on passe une commande

qui interroge le serveur de noms sur zoroastre :

# tcpdump udp and host phoebustcpdump: listening on eth018:41:41.145976 phoebus.c-strasbourg.fr.1026 > zoroastre.c-strasbourg.fr.domain:

692+ (35)18:41:41.145976 zoroastre.c-strasbourg.fr.domain > phoebus.c-strasbourg.fr.1026:

692 1/6/6 (283)

Les nombres entre parentheses, par exemple (35) sont les tailles de paquets.Exemple de paquet non IP :

Page 48: Linux Reseau

48CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

16:51:15.277160 0:b0:64:14:e:9a > 1:80:c2:0:0:0 802.1d ui/C>>> Unknown IPX Data: (43 bytes)[000] 00 00 00 00 00 80 00 00 B0 64 14 0E 80 00 00 00 ........ .d......[010] 00 80 00 00 B0 64 14 0E 80 80 1A 00 00 14 00 02 .....d.. ........[020] 00 0F 00 00 00 00 00 00 00 00 00 ........ ...len=43

Exemple de sortie avec l’option -e (en-tete Ethernet) :

17:09:25.077984 0:20:af:aa:ae:93 0:50:4:f9:33:82 ip 394:phoebus.c-strasbourg.fr.ssh > zoroastre.c-strasbourg.fr.1023:P 1401:1741(340) ack 0 win 32120 (DF) [tos 0x10]

2.14.7 arp

arp -a permet de controler le contenu du cache ARP.

$ arp -apandore.c-strasbourg.fr (193.54.230.80) at 00:60:08:D4:49:18 [ether] on eth0routeur (193.54.230.1) at 00:30:94:9A:13:00 [ether] on eth0...

On peut aussi faire cat /proc/net/arp

$ cat /proc/net/arpIP address HW type Flags HW address Mask Device193.54.230.80 0x1 0x2 00:60:08:D4:49:18 * eth0193.54.230.1 0x1 0x2 00:30:94:9A:13:00 * eth0...

Si l’administrateur prend soin de memoriser les adresses Ethernet dans unfichier du type /etc/ethers il peut controler l’arrivee de machines intruses surle reseau en analysant le cache ARP des serveurs. C’est aussi un moyen decontroler qu’une machine ne prenne pas l’adresse IP d’une autre.

2.14.8 Causes de panne reseau

Il faut penser tant aux aspects materiels que logiciels. Si le cable est coupequelque part...

Localisez la panne : ping vers des machines locales, le routeur ou exterieures– Si acces au routeur et non a l’exterieur : vous avez oublie de declarer une

default route ou bien probleme au-dela du routeur, faire traceroute– Si acces avec cible sous forme adresse IP plutot que nom de domaine :

probleme avec votre resolveur de noms ou votre serveur DNS.– Si pas d’acces au routeur mais acces a d’autres machines locales : probleme

sur le reseau local : voir hub, (votre prise murale y est-elle reliee ?) switchou routeur lui-meme. Une simple coupure de courant...

– Si aucun acces ni a l’interieur ni a l’exterieur : probleme de cablage ouprobleme sur votre machine :– Verifier connexion du panneau de brassage au hub : LED allume sur le

hub ?– Verifier prise RJ45 et cable : vous en changez.

Page 49: Linux Reseau

2.15. IP ALIASING 49

– Verifier vos parametres reseau : adresse IP, masque de reseau... Vousn’utiliseriez pas l’adresse IP de quelqu’un d’autre, ou l’inverse ?

– Que donne ifconfig ?– ping localhost : si echec, probleme de logiciel, support TCP/IP dans

le noyau ? Le noyau reconnaıt-il la carte au boot ?– Si driver Ethernet en module, est-il bien charge ? faire lsmod. Sinon

module non charge, ifconfig eth0 proteste. Cause : le module n’a pasete charge automatiquement au boot. Probleme classique en RedHat,apres une mise a jour du noyau par package rpm...

– Avez vous un conflit d’IRQ ou d’IO Base Address (frequent avec cartesISA) ?

– En desespoir de cause, prenez votre tournevis, ouvrez la becane, retirezla carte reseau (sans bouger les autres cartes !), retirez la poussiere, souf-flez dans le slot avec un produit de nettoyage pour carte electronique,renfoncez bien la carte dans son slot, retestez.

– Sinon, il est tres rare qu’une carte reseau tombe en panne, il existe deslogiciels de test des cartes : voir ceux fournis par 3COM (sous DOS !),voir ceux fournis par Donald Becker qui tournent sous Linux :http://cesdis.gsfc.nasa.gov/linux/

2.15 IP aliasing

Permet d’associer plusieurs adresses IP a un meme interface reseau : utilepour

– remplacer une machine par une autre en cas de panne ou de maintenance– gerer plusieurs sites www avec un seul serveur apacheDocumentation :

Virtual-Services HowToIP-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.255route add -host 193.54.230.37 dev eth0:0ifconfig eth0:1 193.54.230.50 netmask 255.255.255.0 broadcast 193.54.230.255route add -host 193.54.230.50 dev eth0:1ifconfig eth0:2 193.54.230.104 netmask 255.255.255.0 broadcast 193.54.230.255route add -host 193.54.230.104 dev eth0:2

Si en Debian on lance le reseau par ifup, on ajoute dans /etc/network/interfaces :

iface eth0:0 inet staticaddress 193.54.230.37network 193.54.230.0netmask 255.255.255.0broadcast 193.54.230.255up route add -host 193.54.230.37 dev eth0:0

Page 50: Linux Reseau

50CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

Test :

$ netstat -rnKernel IP routing tableDestination Gateway Genmask Flags MSS Window irtt Iface193.54.230.109 0.0.0.0 255.255.255.255 UH 0 0 0 eth0193.54.230.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo0.0.0.0 193.54.230.1 0.0.0.0 UG 0 0 0 eth0

2.16 Proxy ARP

Si une machine en route une autres par une liaison point a point comme avecPPP ou PLIP, elle va declarer que son adresse Ethernet est celle de la machinequ’elle route et repond donc a sa place aux requetes ARP. On appelle ca duproxy ARP ou ARP par delegation. Cela se fait sur la machine routeur par :

arp -s 196.168.1.2 00:50:04:F9:33:82 pub

196.168.1.2 est l’adresse IP de la machine routee, 00 :50 :04 :F9 :33 :82est l’adresse Ethernet de la machine routeur.

2.17 RARP

Reverse Adress Resolution Protocol (RARP), consiste a demander son adresseIP a un serveur en fournissant son adresse Ethernet. C’est utilise pour permettrea des machines sans disque de booter.

Le support RARP doit etre configure dans le noyau (CONFIG INET RARP),si on veut que Linux reponde a de telles requetes.

2.18 DHCP

DHCP (Dynamic Host Configuration Protocol) est un protocole decrit par laRFC 2131 qui permet d’attribuer dynamiquement des adresses IP. C’est utilisepar les Internet Service Provider qui ont beaucoup de clients mais un nombrelimite d’adresses IP ou pour attribuer des adresses IP ou machines nomadescomme les ordinateurs portables. En plus de l’adresse IP, le netmask, l’adressede broadcast, les DNS sont aussi attribues. L’utilisation de DHCP rend la confi-guration reseau beaucoup plus facile.

2.18.1 DHCP client

Une machine Linux qui veut obtenir une adresse IP (cas des machines dis-posant d’un interface Ethernet relie a un cable-modem) doit installer un clientcomme pump ou dhcpcd.

En Debian c’est le package dhcpcd. A l’installation du package, la configu-ration est proposee. Le script de lancement est /etc/init.d/dhcpcd. Confi-guration dans /etc/dhcpc/config : mettre IFACE=eth0, eth0 etant l’interfacechoisi. Si on ne veut pas lancer dhcpcd mettre IFACE=none.

Page 51: Linux Reseau

2.18. DHCP 51

Si le reseau est lance par la commande ifup via le script /etc/init.d/networking,on ajoutera dans /etc/network/interfaces ceci :

iface eth0 inet dhcp

– dhcp vient a la place de static– les parametres hostname, leasetime, vendor, client sont optionnels.– ifup -a demarrera dhcpcd–C’est la commande ifup qui s’occupe d’appeler pump ou dhcpcd.Si le package pump est installe, le daemon pump est lance :

# ps aux|grep pumproot 977 0.0 0.3 1740 684 ? Ss 13:53 0:00 pump -i eth0 -r

Trace d’une attribution d’adresse dans /var/log/daemon :

Jun 14 13:54:17 hathor pumpd[977]: PUMP: sending discoverJun 14 13:54:17 hathor pumpd[977]: got dhcp offerJun 14 13:54:17 hathor pumpd[977]: PUMP: sending second discoverJun 14 13:54:17 hathor pumpd[977]: PUMP: got an offerJun 14 13:54:17 hathor pumpd[977]: PUMP: got leaseJun 14 13:54:17 hathor pumpd[977]: intf: device: eth0Jun 14 13:54:17 hathor pumpd[977]: intf: set: 416Jun 14 13:54:17 hathor pumpd[977]: intf: bootServer: 193.54.230.121Jun 14 13:54:17 hathor pumpd[977]: intf: reqLease: 43200Jun 14 13:54:17 hathor pumpd[977]: intf: ip: 193.54.230.3Jun 14 13:54:17 hathor pumpd[977]: intf: next server: 193.54.230.121Jun 14 13:54:17 hathor pumpd[977]: intf: netmask: 255.255.255.0Jun 14 13:54:17 hathor pumpd[977]: intf: gateways[0]: 193.54.230.1Jun 14 13:54:17 hathor pumpd[977]: intf: numGateways: 1Jun 14 13:54:17 hathor pumpd[977]: intf: dnsServers[0]: 193.54.230.20Jun 14 13:54:17 hathor pumpd[977]: intf: dnsServers[1]: 193.54.211.65Jun 14 13:54:17 hathor pumpd[977]: intf: dnsServers[2]: 193.48.86.103Jun 14 13:54:17 hathor pumpd[977]: intf: numDns: 3Jun 14 13:54:17 hathor pumpd[977]: intf: domain: c-strasbourg.frJun 14 13:54:17 hathor pumpd[977]: intf: broadcast: 193.54.230.255Jun 14 13:54:17 hathor pumpd[977]: intf: network: 193.54.230.0Jun 14 13:54:17 hathor pumpd[977]: configured interface eth0

pump met a jour le fichier /etc/resolv.conf

2.18.2 DHCP serveur

On peut installer un serveur DHCP (package Debian dhcp) qui distribuerades adresse IP prises dans certaines plages.

C’est un daemon dhcpd lance par /etc/init.d/dhcp start. Il ecoute leport UDP 67 (bootps) par defaut et envoie des trames sur le port UDP 68.

Documentation :

man dhcpdman dhcpd.confman dhcp-options

Page 52: Linux Reseau

52CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX

Option du noyau prerequise :

CONFIG_FILTER=y

La configuration est dans le fichier /etc/dhcpd.conf. Exemple :

subnet 193.54.230.0 netmask 255.255.255.0 {range 193.54.230.200 193.54.230.254;option subnet-mask 255.255.255.0;option broadcast-address 193.54.230.255;option routers 193.54.230.1;option domain-name "c-strasbourg.fr";option domain-name-servers 193.54.230.20, 193.54.211.65, 193.48.86.103;option netbios-name-servers 193.54.230.20;default-lease-time 43200;deny unknown-clients;

}host a { hardware ethernet 00:0d:56:aa:7f:1e; }host b { hardware ethernet 00:a0:d1:b3:32:29; }host c { hardware ethernet 00:0e:7b:d2:e5:5e; }host d { hardware ethernet 00:a0:d1:b8:b3:68; fixed-address 193.54.230.3;}

Dans cet exemple, une machine doit avoir une adresse MAC indiquee pourobtenir une adresse de dhcpd. Les machines a, b, c obtiennent des adressesentre 193.54.230.200 et 193.54.230.254. La machine d se voit toujours attribuerl’adresse 193.54.230.3.

Fichier log : /var/log/daemon.logAttribution d’une adresse IP :

Jun 16 08:51:08 mithra dhcpd: DHCPDISCOVER from 00:11:d8:95:e7:d0 via eth0Jun 16 08:51:09 mithra dhcpd: DHCPOFFER on 193.54.230.205 to 00:11:d8:95:e7:d0 via eth0Jun 16 08:51:09 mithra dhcpd: DHCPREQUEST for 193.54.230.205 from 00:11:d8:95:e7:d0 via eth0Jun 16 08:51:09 mithra dhcpd: DHCPACK on 193.54.230.205 to 00:11:d8:95:e7:d0 viaeth0

Rejet d’un client inconnu :

Mar 21 17:01:58 mithra dhcpd: DHCPDISCOVER from 00:a0:d1:b3:32:29 via eth0Mar 21 17:01:58 mithra dhcpd: Ignoring unknown client 00:a0:d1:b3:32:29ia eth0

Memoire des adresses attribuees aux machines dans le fichier /var/lib/dhcp/dhcpd.leases,exemple :

lease 193.54.230.203 {starts 4 2005/04/14 15:50:23;ends 5 2005/04/15 03:50:23;hardware ethernet 00:e0:00:97:87:1d;uid 01:00:e0:00:97:87:1d;client-hostname "tigrou";

}

Page 53: Linux Reseau

Chapitre 3

Le serveur DNS BIND

3.1 Le Domain Name System (DNS)

Toute machine connectee sur Internet est identifiee par une adresse IP unique.Comme ces adresses sont difficilement memorisables, on a appele les machinespar des noms, puis on a mis ces noms dans des domaines.

Le Domain Name System (DNS) (voir les RFC 1033, 1034, and 1035) definitune structure hierarchique pour cet espace de nommage, l’autorite de nommageet le mecanisme pour faire la correspondance entre nom de domaine et adresseIP.

Le nom de ma machine est zoroastre et comme elle est dans le domainec-strasbourg.fr son fully qualified domain name (fqdn) est zoroastre.c-strasbourg.fr.

Le DNS est une base de donnees repartie constituee par des serveurs quicommuniquent entre eux par le protocole domain. C’est une base de donneestres sollicitee qui a demontre sa robustesse.

Toute machine connectee sur Internet doit avoir un nom enregistre pourl’interrogation directe et inverse dans le DNS.

BIND (The Berkeley Internet Name Domain) est une implementation duprotocole Domain Name System (DNS). Il est constitue d’un daemon named,c’est le serveur de nom de domaine.

Il y plusieurs types de configuration de named :– Primary nameserver (master) : serveur de noms faisant autorite sur une

zone. Il fait des ”authoritative answers”. Son administrateur a delegationdu NIC (Network Information Center) pour gerer sa zone.

– Secondary nameserver (slave) : copie d’un serveur de nom primaire, nefait pas autorite, se met regulierement a jour. Tres utile quand le primaireest inaccessible

– Cache nameserver (hint) : ne fait que gerer un cache des precedentesrequetes DNS

Un serveur de noms primaire definit une zone. Une zone est un sur-ensemblede reseau. Pour reprendre l’exemple d’Olaf Kirch sur la partie de l’espace desnoms groucho.edu attribuee a l’Universite Groucho Marx, alsacien celebre :

root *|

------------+--------------+-----------+-----------------------------

53

Page 54: Linux Reseau

54 CHAPITRE 3. LE SERVEUR DNS BIND

com * edu * net *|

-----------+-------+---|

groucho *|

-+-------------------+------------------+-------| physics *

maths || +---------+--------+

+------+---+----+ theory collidergauss erdos sophus | |

+-----+------+---+ +-----+------+quark otto niels up down strange

Tous les noms affectes d’une etoile marquent le debut d’une zone. Ils sontassocies a un primary nameserver. On voit sur cet exemple que le domainegroucho.edu comporte toutes les machines de la Groucho Marx University,alors que la zone groucho.edu n’inclut que les machines gerees directementpar le Computing Center comme gauss.maths.groucho.edu. Les machines dudepartement de Physique appartiennent a une zone differente : physics.groucho.edu9

Un reseau avec un netmask non sur une frontiere d’octets ne peut constituerune zone d’autorite (en raison de l’interrogation inverse).

3.2 Installation en Debian

Package bind version Version : 8.2.3-0.potato.1 ou bind 8.3.3-2.0woody1Fichier de configuration : /etc/bind/named.confTous les fichiers de configuration statiques sont places dans /etc/bind : Les

zones pour lesquelles on est primary name server, la zone localhost et la zoneinverse. Le repertoire de travail de named est /var/cache/bind. Tous les fichierstransitoires crees par named y sont ranges en particulier ceux pour lesquels ilest serveur secondaire.

Documentation :– man named– man named.conf– man ndclynx /usr/doc/bind/html/index.html

3.3 Exemple de configuration d’un serveur cache

C’est la configuration par defaut fournie dans /etc/bind/named.conf :

options {directory "/var/cache/bind";

};

// reduce log verbosity on issues outside our control

Page 55: Linux Reseau

3.4. EXEMPLE DE CONFIGURATION D’UN SERVEUR SECONDAIRE 55

logging {category lame-servers { null; };category cname { null; };

};

// prime the server with knowledge of the root serverszone "." {

type hint;file "/etc/bind/db.root";

};

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

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

};

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

};

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

};

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

};

// add entries for other zones below here

3.4 Exemple de configuration d’un serveur se-condaire

On est rarement responsable d’une zone d’autorite, donc de l’administrationd’un primary nameserver. Par contre il est frequent d’etre responsable d’unreseau local. Dans ce cas il est vivement recommande d’installer un nameserversecondaire.

// generated by named-bootconf.ploptions {

directory "/var/named";/** If there is a firewall between you and nameservers you want

Page 56: Linux Reseau

56 CHAPITRE 3. LE SERVEUR DNS BIND

* to talk to, you might need to uncomment the query-source* directive below. Previous versions of BIND always asked* questions using port 53, but BIND 8.1 uses an unprivileged* port by default.*/// query-source address * port 53;

};//// a caching only nameserver config//zone "." {

type hint;file "named.ca";

};zone "localhost" {

type master;file "named.local";

};

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;};

};

Remarque : la syntaxe precise zone "nom domaine" in {}. Je n’ai pas dein dans ma config et ca marche !

– options { }– directory "/var/named" : le repertoire ou va se trouver la copie lo-

cale de la base de donnees : il contiendra les fichiers indiques par lesparametres file suivants

– zone "nom de domaine" { } : definition d’une zone de nommage. ’.’ definitla racine (root) de l’arborescence des noms– type : type de serveur

– hint : serveur cache, zone reduite a la racine de l’arborescence desnoms. Il y a plusieurs serveurs root, heureusement !

– master : serveur ayant autorite sur la zone (master copy)

Page 57: Linux Reseau

3.5. LA BASE DE DONNEES DES NOMS DE DOMAINES 57

– slave : serveur secondaire (replica of a master zone)– file : nom du fichier associe a cette zone– masters : si je suis slave adresse des DNS masters (j’ai cite en premier

le master vrai, le second est un slave)Ainsi mon repertoire /var/named contient un fichier par zone :– named.ca : cache DNS, serveur racines de l’arborescence des noms de

domaines Internet– named.local : zone localhost dont c’est moi le maıtre !– named.rev-local : idem pour l’interrogation inverse– cstr.zone.bak : zone c-strasbourg.fr, je ne suis que l’esclave– cstr.rev.zone.bak : idem pour l’interrogation inverseLa zone ”.” est obligatoire. Si le fichier de configuration n’a que cette zone

et les zones "localhost" et "0.0.127.in-addr.arpa", c’est un serveur DNScache.

3.5 La base de donnees des noms de domaines

Formee de Resources Records (RR). Format :

<domain> <opt_ttl> <opt_class> <type> <resource_record_data>

– domaine : nom de domaine– opt ttl : duree de vie de l’info en secondes (optionnel)– opt class : toujours IN (Internet)– type :

– SOA : Start of Authority– A : definit le canonical name– NS : an authoritative name server– CNAME : alias– PTR : reverse mapping (pour l’interrogation inverse)– MX : mail exchanger for a domain– HINFO : information on hardware and software used by this host

– resource record data :Syntaxe des noms de domaines :– Tout nom de domaine non termine par un ’.’ est complete par le nom de

la zone ou de ce qui est defini par $ORIGIN. Ainsi :$ORIGIN c-strasbourg.fr.akgonul 3600 IN A 193.54.229.121definit l’adresse IP pour le nom de domaine akgonul.c-strasbourg.fr. Toutnom de domaine termine par un point est un fqdn.

– La racine de l’arborescence est notee par un ’.’– ’@’ definit l’origine courante donc la zone associee au fichier definie dans/etc/named.conf, sauf s’il y une instruction $ORIGIN avant.

Exemple de RR de type SOA :

notez le .|v

(domain) (ttl) (class) (type) (rdata)c-strasbourg 3600 IN SOA antares.c-strasbourg.fr.

Page 58: Linux Reseau

58 CHAPITRE 3. LE SERVEUR DNS BIND

administrator.c -strasbourg.fr. (1998091613 ; serial43200 ; 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.frle 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 est20.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.frExemple de RR de type MX :

(domaine) (ttl) (class) (note) (rdata)phase 604800 IN MX 5 zoroastre.c-strasbourg.fr.

Tout mail a destination de phase.c-strasbourg.fr est a envoyer a zoroastre.c-strasbourg.fr.Il peut y avoir plusieurs MX records c’est celui qui a la note la plus basse quiest choisi de preference.

Contenu du fichier named.local

;; BIND data file for local loopback interface;@ IN SOA localhost. root.localhost. (

1 ; Serial604800 ; Refresh86400 ; Retry

2419200 ; Expire604800 ) ; Default TTL

;@ IN NS localhost.@ IN A 127.0.0.1

Page 59: Linux Reseau

3.6. ADMINISTRATION 59

fichier named.rev-local

;; BIND reverse data file for local loopback interface;@ IN SOA localhost. root.localhost. (

1 ; Serial604800 ; Refresh86400 ; Retry

2419200 ; Expire604800 ) ; Default TTL

;@ IN NS localhost.1 IN PTR localhost.

3.6 Administration

Demarrage par /etc/init.d/bind startControle par ndc Name daemon control interface– ndc status -> PID de named– ndc reload -> recharge la base de donnees– ndc start -> demarrage– ndc restart -> redemarrage– ndc stop -> arret

3.6.1 Log

Le fichier log est /var/log/daemon.logLancement 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/namedNov 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 (serial1)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 (serial 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].2233Nov 15 12:48:40 yelen named[17304]: Ready to answer queries.

Page 60: Linux Reseau

60 CHAPITRE 3. LE SERVEUR DNS BIND

Page 61: Linux Reseau

Chapitre 4

PLIP : IP sur port parallele

PLIP permet de faire communiquer deux machines par TCP-IP sans cartereseau mais connectees via le port parallele. C’est utile pour l’installation d’unemachine (mais assez lent), les transferts de fichiers avec un portable, ou unmini reseau chez soi . C’est aussi un bon exercice en matiere de routage ou deproxyarp.

4.1 Le cable

C’est un cordon parallele DB25 male/DB25 male dit ”null-printer” ou ”La-pLink”

Voici le cablage indique dans /usr/src/linux/drivers/net/plip.c :

The cable used is a de facto standard parallel null cable -- sold asa "LapLink" cable by various places. You’ll need a 12-conductor cable tomake one yourself. The wiring is:SLCTIN 17 - 17GROUND 25 - 25D0->ERROR 2 - 15 15 - 2D1->SLCT 3 - 13 13 - 3D2->PAPOUT 4 - 12 12 - 4D3->ACK 5 - 10 10 - 5D4->BUSY 6 - 11 11 - 6

Do not connect the other pins. They areD5,D6,D7 are 7,8,9STROBE is 1, FEED is 14, INIT is 16extra grounds are 18,19,20,21,22,23,24

4.2 Client et serveur

On relie donc deux machines avec ce cable par leur port parallele. Ellesjouent un role symetrique a priori. Mais si l’une est reliee a un reseau local,voire a Internet par son interface Ethernet, on va l’appeler ”serveur”.

Dans l’exemple qui suit, le serveur s’appelle genesis et a l’adresse IP :193.54.230.56, le client s’appelle phoebus et a l’adresse IP : 193.54.230.115.

61

Page 62: Linux Reseau

62 CHAPITRE 4. PLIP : IP SUR PORT PARALLELE

+------------------+ // // +----------------+| genesis |--------------------| phoebus |+---------+--------+ +----------------+

193.54.230.56 | 193.54.230.115| Reseau local

----------------+-----------------------193.54.230.0

4.3 Module plip

PLIP : Parallel Line IP.Il faut avoir le support plip dans le noyau ou mieux en module sur les deux

machines : PLIP (parallel port) support (CONFIG PLIP).

4.3.1 Noyau de version < 2.2

En noyau de version inferieure a 2.2 on fait :

modprobe plip

On peut disposer des interfaces plip0, plip1, plip2 correspondant aux portslp0, lp1, lp2. Voici leurs caracteristiques d’apres /usr/src/linux/drivers/net/Space.c

Interface I/O Port IRQplip0 Ox3BC 5plip1 Ox378 7plip2 Ox278 2

On a la reponse :

NET3 PLIP version 2.2 [email protected]: Parallel port at 0x378, using assigned IRQ 7.

On verifie le chargement du module par lsmod :

phoebus:~# lsmodModule Pages Used byplip 3 0serial 8 1 (autoclean)nfs 12 43c509 2 0

4.3.2 Noyau de version > 2.2

Configuration noyau :– Parallel port support (CONFIG PARPORT)– Auto-probe for parallel devices (CONFIG PNP PARPORT)– PLIP (parallel port) support (CONFIG PLIP)Le code parport ( /usr/src/linux/drivers/misc/parport* et /usr/src/linux/drivers/pnp/parport probe.c)

voir /usr/src/linux/Documentation/parport.txt permet de partager le portparallele entre plusieurs drivers (printer, PLIP, ZIP, parallel port ATAPI CD-Rom or Disk). Ceci dit, pour le test, on a arrete le daemon lpd sur les deuxmachines. parport est decoupe en trois modules :

Page 63: Linux Reseau

4.4. COTE CLIENT 63

– parport independant de l’architecture– parport pc specifique pour plateforme Intel. On peut fournir en argu-

ments io et irq.– parport probe teste l’equipement qui est au bout.On fait :

depmod -amodprobe parport_pc io=0x378 irq=7insmod plip timid=1

timid=1 evite d’avoir le diagnostic "Device or resource busy".En tapant dmesg apparaissent les lignes :

parport0: PC-style at 0x378, irq 7 [SPP]NET3 PLIP version 2.3-parport [email protected]: Parallel port at 0x378, using IRQ 7

Le port parallele est decrit dans /proc/parport/0 fichiers devices, hardware,irq, autoprobe.

4.4 Cote client

On desactive au besoin l’interface Ethernet, sinon on risque des problemesde routage :

ifconfig eth0 down

On configure le reseau par :

ifconfig plip1 193.54.230.115 pointopoint 193.54.230.56route add default gw 193.54.230.56

phoebus:~# ifconfig plip1plip1 Link encap:Ethernet HWaddr FC:FC:C1:36:E6:73

inet addr:193.54.230.115 P-t-P:193.54.230.56 Mask:255.255.255.0UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0Collisions:0Interrupt:7 Base address:0x378

Puis, si vous tapez route vous devriez voir :

Destination Gateway Genmask Flags Metric Ref Use Iface193.54.230.56 * 255.255.255.255 UH 0 0 0 plip1

4.5 Cote serveur

On est en noyau 2.2.14, l’interface defini est plip0, on fait :

ifconfig plip0 193.54.230.56 pointopoint 193.54.230.115

Page 64: Linux Reseau

64 CHAPITRE 4. PLIP : IP SUR PORT PARALLELE

En tapant ifconfig, on a :

genesis:~ # ifconfiglo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:3924 Metric:1RX packets:35 errors:0 dropped:0 overruns:0 frame:0TX packets:35 errors:0 dropped:0 overruns:0 carrier:0collisions:0

eth0 Link encap:Ethernet HWaddr 00:60:97:90:D1:38inet addr:193.54.230.56 Bcast:193.54.230.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:634 errors:0 dropped:0 overruns:0 frame:0TX packets:60 errors:0 dropped:0 overruns:0 carrier:0collisions:6Interrupt:10 Base address:0x300

plip0 Link encap:Ethernet HWaddr FC:FC:C1:36:E6:38inet addr:193.54.230.56 P-t-P:193.54.230.115 Mask:255.255.255.255UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0Interrupt:7 Base address:0x378

On remarque que le serveur a la meme adresse IP sur deux interfaces differentseth0 et plip0.

La commande route donne :

Kernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface193.54.230.115 * 255.255.255.255 UH 0 0 0 plip0193.54.230.0 * 255.255.255.0 U 0 0 0 eth0loopback * 255.0.0.0 U 0 0 0 lodefault 193.54.230.1 0.0.0.0 UG 0 0 0 eth0

Le flag H indique qu’un seul host peut etre atteint par cette route. Le flagU que l’interface est UP, G que c’est un Gateway.

4.6 Test

On teste que les deux machines communiquent par le cable null-printer enfaisant ping du client vers le serveur et inversement.

genesis:~ # ping 193.54.230.115PING 193.54.230.115 (193.54.230.115): 56 data bytes64 bytes from 193.54.230.115: icmp_seq=0 ttl=64 time=4.4 ms

Page 65: Linux Reseau

4.7. ROUTAGE PAR LE SERVEUR 65

4.7 Routage par le serveur

Pour que les autres machines du reseau local puissent communiquer avec leclient, il faut que le serveur 193.54.230.115 agisse comme un routeur. Pour celaon active sous root le routage (forward) de paquets IP :

genesis:~ # echo "1" > /proc/sys/net/ipv4/ip_forward

Verification par :

cat /proc/sys/net/ipv4/ip_forward1

Il faudrait en plus sur chaque machine annoncer une route par :

route add 193.54.230.115 gw 193.54.230.56

C’est fastidieux.Il est plus facile d’utiliser proxy ARP. On va annoncer sur le serveur que son

adresse Ethernet est celle du client 193.54.230.115 :

genesis:~ # arp -s 193.54.230.115 00:60:97:90:D1:38 pub

00 :60 :97 :90 :D1 :38 est l’adresse Ethernet du serveur (lu sur ifconfig).pub est obligatoire : il indique que l’interface specifie (ici eth0) est celui sur

lequel on repondra aux requetes ARP. Il doit etre different de celui sur lequelon route les paquets IP. On verifie en interrogeant le cache arp :

genesis:~ # arp -a |grep 193.54.230.115? (193.54.230.115) at * PERM PUP on eth0

On peut alors tester la communication entre le client et les autres machinesdu reseau.

4.8 Test de performances

On charge un fichier de 5.7 Meg par scp. Par plip1 cela dure 2’ 37” soit undebit de 36 kB/s. En rebranchant la machine sur Ethernet par eth0 le memetransfert prend 21”, soit un debit de 271kB/s, donc 7.4 fois plus vite.

Au cours du transfert par PLIP on a 3 fois sur le client le diagnostic :

plip1 : receive time out (2,87)

ifconfig plip0 donne sur le serveur :

plip0 Link encap:Ethernet HWaddr FC:FC:C1:36:E6:38inet addr:193.54.230.56 P-t-P:193.54.230.115 Mask:255.255.255.255UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1RX packets:4361 errors:0 dropped:0 overruns:0 frame:0TX packets:8098 errors:1 dropped:0 overruns:0 carrier:1collisions:0Interrupt:7 Base address:0x378

4.9 Documents

http ://www.linux-france.org/article/sys/Install-Plip/Install-Plip-1.htm

Page 66: Linux Reseau

66 CHAPITRE 4. PLIP : IP SUR PORT PARALLELE

Page 67: Linux Reseau

Chapitre 5

PPP

5.1 Introduction

PPP, Point to Point Protocol permet de faire passer le protocole IP surune liaison serie (cable null-modem, modem et ligne telephonique ou liaisonNUMERIS -ISDN-). Il permet de se connecter a un fournisseur d’acces Internetou de connecter ensemble deux reseaux locaux. Linux peut etre client ou serveurPPP.

pppd succede a slip et cslip (compressed slip) qui ne sont plus guere uti-lises.

Le protocole PPP est decrit dans la RFC1661 : The Point-to-Point Protocol(PPP).

5.1.1 Description de PPP : HDLC, LCP, IPCP, CCP

– A la base du protocole, il y a HDLC, High-Level Data Link Protocol (unstandard ISO, utilise dans X25) qui decrit un format de paquet avec unchecksum.

– PPP peut non seulement vehiculer dans HDLC des paquets IP mais aussiIPX ou AppleTalk.

– LCP, Link Control Protocol, negocie des options comme MRU (MaximumReceive Unit), taille maximum du datagram que l’on peut recevoir ets’occupe s’il y a lieu de l’authentification du client, du serveur ou desdeux par PAP ou CHAP.

– Un Network Control Protocol (NCP) negocie les particularites d’un pro-tocole. Pour IP, IPCP (RFC1332) negocie les adresses IP assignees de partet d’autre.

– IPCP peut faire de la compression par le Compression Control Protocol(CCP)

– CCP comporte :– le Van Jacobson header compression (VJ compression) des headers des

paquets TCP (module slhc.o)– la compression des paquets par la methode BSD qui utilise l’algorithme

LZW (licence Unisys comme gif) identique a la commande compress deUnix (module bsd comp.o )

67

Page 68: Linux Reseau

68 CHAPITRE 5. PPP

– la compression des paquets par la methode Deflate : c’est la mememethode que celle de gzip. Elle est recommandee.

La compression consomme de la memoire. Le serveur peut ne pas laprevoir, auquel cas la demande de compression du client sera non satisfaite.Les deux parties doivent utiliser le meme algorithme. La compression dansPPP est plus performante si elle est bien parametree que la compressionfaite dans le modem (V.42).

Le logiciel pppd a un fonctionnement symetrique, il joue le role de serveurcomme de client. Les fichiers de configuration servent a la fois comme serveur etcomme client. Il n’y a pas en principe de difference entre le client et le serveur.Une machine Linux peut etre client, serveur ou les deux a la fois. Pour la clarte,la distinction est preferable. Dans les documents le terme ”peer” designe l’autrepartenaire.

Sur Linux, ppp est en deux parties, l’une dans le noyau (traitement deHDLC) et l’autre sous forme du daemon pppd

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

5.2 Installation de PPP

5.2.1 Support de PPP par le noyau

Le noyau doit etre compile avec le support PPP.

PPP (point-to-point protocol) support (CONFIG_PPP) [M/n/y/?]PPP support for async serial ports (CONFIG_PPP_ASYNC) [M/n/y/?]PPP Deflate compression (CONFIG_PPP_DEFLATE) [M/n/y/?]PPP BSD-Compress compression (PPP BSD-Compress compression) [M/n/y/?]

Pour un usage intermittent c’est tres bien de mettre PPP en module. Pourun serveur d’acces Internet qui fait beaucoup de PPP on le mettra dans le noyau.

A partir du noyau 2.4 d’autres parametres sont optionnels. Il faut selectionnerCONFIG PPP ASYNC. Quand le noyau a le support PPP ou quand le module estcharge, les messages suivants apparaissent dans le log (cf dmesg)

CSLIP: code copyright 1989 Regents of the University of CaliforniaPPP generic driver version 2.4.1

les modules charges sont les suivants :

Sequence Module Description1 slhc VJ header compression2 ppp_generic PPP driver3 ppp_async PPP sur ligne asynchrone4 bsd_comp BSD compression for PPP’s compression protocol.

Page 69: Linux Reseau

5.2. INSTALLATION DE PPP 69

5.2.2 Logiciel ppp-2.3.5-2

Fourni en package. En Debian, on charge les packages :– ppp : (obligatoire) daemon pppd, fichiers de config, chat, pon, poff, plog.– ppp-pam : utile pour un serveur– pppconfig : utile pour un client– pppupd : sert a maintenir une connexion active (optionnel)Attention on ne peut utiliser une vieille version de ppp avec un noyau recent

et reciproquement.Compilation (si necessaire) :

./configuremake USE_MS_DNS=1

L’option USE MS DNS=1 demande le support dans LCP des DNS tags utilisespar Microsoft pour passer les noms des serveurs DNS. C’est important pour unserveur qui aurait des machines Windows comme clients.

5.2.3 mgetty

Necessaire uniquement pour un serveur.

5.2.4 Arborescence des fichiers PPP

ls -lR /etc/ppp-rw------- 1 root root 78 Jun 19 1998 chap-secrets-rwxr-xr-x 1 root root 1454 Jun 19 1998 ip-downdrwxr-xr-x 2 root root 1024 Jun 19 1998 ip-down.d-rwxr-xr-x 1 root root 1452 Jun 19 1998 ip-updrwxr-xr-x 2 root root 1024 Jun 19 1998 ip-up.d-rw-r--r-- 1 root root 85 Jun 19 1998 no_ppp_on_boot-rw-r--r-- 1 root root 10025 Apr 13 19:36 options-rw-r--r-- 1 root root 647 Apr 13 10:00 options.ttyXX-rw------- 1 root root 1554 Jan 25 03:56 pap-secretsdrwxr-s--- 2 root dip 1024 Apr 14 03:06 peers

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

Page 70: Linux Reseau

70 CHAPITRE 5. PPP

5.3 Configuration du modem et du port serie.

5.3.1 Configuration du port serie.

Reperer sur quel port il est branche. Verifier que l’IRQ affectee au port n’estpas partagee par un autre peripherique.

cat /proc/interrupts0: 150843 timer1: 3265 keyboard2: 0 cascade5: 14491 + serial8: 2 + rtc10: 2 3c50913: 1 math error14: 42598 + ide0

zoroastre:/u1/morel# setserial -a /dev/ttyS0/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4

Baud_base: 115200, close_delay: 50, divisor: 0closing_wait: 3000, closing_wait2: infinteFlags: spd_normal skip_test session_lockout

Pour changer l’IRQ d’un port serie il faut aller modifier les switchs sur lacarte serie et utiliser setserial sous root. Exemple :

setserial /dev/ttyS2 irq 5

Mais les cartes mere modernes ont deux ports serie configurables via le Setupdu BIOS.

5.3.2 Configuration du modem

Branchez le modem sur un port avec UART 16550A pour avoir de bonnesperformances.

Ne prenez pas de carte modem mais toujours un modem externe.Lancez sous root : minicom -s configurer le nom du port serie par Ctrl-A

O et "Serial port setup"et sauvez par "Save setup as dfl".Tester le modem :– ATZ : reinitialisation - repond OK– AT&V : Verifier les options du modem. Il faut avoir (en commande Hayes

standard) :– E1 echo ON (necessaire pour chat)– Q0 Envoie les result codes (necessaire pour chat)– S0=0 Auto Answer OFF (sauf si vous voulez que le modem decroche.

mgetty est capable de decrocher au bout de n sonneries)– &C1 Carrier Detect ON only after connect– &S0 Data Set Ready (DSR) always ON– hardware flow control : RTS/CTS

Page 71: Linux Reseau

5.4. PREMIERS PAS AVEC PPP 71

Si la configuration d’usine n’est pas convenable on peut la modifier dansla NVRAM du modem ou bien passer les commandes AT necessaires dansle chat-script a chaque connexion.

– Connectez vous au serveur par ATDT<numero de telephone>. Noter exac-tement toutes les reponses du serveur, en particulier les questions qui de-mandent login et mot de passe. Si le serveur vous envoie du charabia, c’estqu’il utilise PAP. S’il ne repond pas essayez de taper sur la touche Entree.

Commandes Minicom– Ctrl-A X : sortie de Minicom avec reinitialisation du modem– Ctrl-A Q : sortie de Minicom sans reinitialisation du modem– Ctrl-A O : configuration de Minicom– Ctrl-A Z : menu d’aide

5.4 Premiers pas avec PPP

5.4.1 Session PPP manuelle

Pour sentir ce qu’est PPP et le tester, on peut faire une connexion ”a lamain” entre deux machines. On suppose que le serveur et le client ne demandepas d’authentification (pas de auth dans /etc/ppp/options de part et d’autre.)L’interface serie utilise ici est ttyS0.

1. Sur le client passez root. Configurez l’interface reseau lo et le resolveurd’adresses dans /etc/resolv.conf

2. Appelez minicom, selectionnez ttyS0 par Ctrl-A O et Serial port setup. Connectez-vous au serveur par ATDT<numero de telephone>.

3. Supposant que sur le serveur le modem est controle par getty, loggez vouspar login, password

4. Un shell est lance.5. Lancez PPP sur le serveur par :

exec /usr/sbin/pppd -detach

exec fait que pppd va remplacer le programme qui le lance, ici le shell.-detach demarre pppd mais ne le met pas en background de sorte qu’al’arret de pppd il ne reste pas de processus en attente.

6. Sortez de minicom par Ctrl-A Q. Le modem n’est pas reinitialise.7. Lancez pppd sur le client par :

pppd -d -detach /dev/ttyS0 38400 defaultroute &

Les voyants TD, RD modem devraient clignoter.8. Faites ifconfig. Vous devez voir apparaıtre l’interface reseau ppp0. Sinon,

il y a quelque chose qui cloche. Sur la ligne :

inet addr:10.144.153.104 P-t-P:10.144.153.51 Mask:255.255.255.0

inet addr : est l’adresse IP qui est attribuee au client, P-t-P : estl’adresse du serveur.

9. Testez le routage par route -n. L’interface ppp0 doit apparaıtre deux fois,une fois comme HOST (Flag H), une fois comme route par defaut. Si ellen’apparaıt pas, vous ne pourrez pas contacter par le lien PPP d’autresmachine que le serveur PPP.

Page 72: Linux Reseau

72 CHAPITRE 5. PPP

10. Faites un ping au serveur.11. Faites un ping sur une autre machine sur Internet.12. Faites ppp-off pour tuer pppd sur le client (cf /usr/doc/ppp/examples/ppp-off).13. Le modem doit s’arreter.14. Sinon, appeler votre logiciel de communication (minicom -o) et envoyez

+++ suivi de ATH0

15. Au besoin enlevez le fichier lock par rm -f /var/lock/LCK..ttySx

5.4.2 Automatisation de pppd

La meme chose peut etre faite ainsi :– sur le serveur : On cree un login ppp dans /etc/passwd avec pour shell/etc/ppp/pppstart qui ressemble a :#!/bin/shexec /usr/sbin/pppd -detach

– sur le client :pppd connect ’chat -v "" ATDT5551212 CONNECT "" ogin: ppp word: whitewater’ \

/dev/ttyS0 38400 debug crtscts modem defaultroutepppd ne peut gerer de script de conversation avec le modem. Pour cela il

passe la main par connect a chat qui est fourni avec ppp.L’option -v comme verbose va copier dans syslog toute la conversation.La conversation est notee sous la forme de couples ”expect” ”send”, separes

par des blancs. Ainsi :– au depart, on n’attend rien, d’ou ””– on envoie la commande de numerotation ATDT5551212 pour appeler le

serveur– le modem doit repondre CONNECT– on ne lui repond rien ””– on attend qu’il envoie la chaıne ogin : (le l est omis de sorte que ce peut

etre Login ou login)– on envoie le nom d’utilisateur ppp– on attend le message Password par word :– on envoie le password whitewaterCe type de commande est dangereux car par la commande ps quelqu’un

pourrait decouvrir notre login et password. Aussi on ecrit ce dialogue dans unfichier a acces reserve, accessible uniquement par root et on le reference parchat -v -f fichier

On peut se reporter aussi au script /usr/doc/ppp/examples/ppp-on .Les options de pppd sont prises d’abord dans le fichier /etc/ppp/options

accessible uniquement par root, ensuite sur la ligne de commande et dans lefichier $HOME/.ppprc

Une maniere tres commode d’appeler pppd comme client est :

pppd call isp

ou isp est le nom d’un Internet Service Provider. Le fichier /etc/ppp/peers/ispest cree par l’administrateur avec comme contenu des options a pppd du genre :

ttyS0 38400 crtsctsconnect ’/usr/sbin/chat -v -f /etc/ppp/chat-isp’noauth

Page 73: Linux Reseau

5.4. PREMIERS PAS AVEC PPP 73

Le fichier /etc/ppp/chat-isp contient le dialogue de chat du type ;

ABORT "NO CARRIER"ABORT "NO DIALTONE"ABORT "ERROR"ABORT "NO ANSWER"ABORT "BUSY"ABORT "Username/Password Incorrect""" "at"OK "at&d0&c1"OK "atdt2468135""name:" "^Umyuserid""word:" "\qmypassword""ispts" "\q^Uppp""~-^Uppp-~"

1. Lignes ABORT :On peut prevoir le comportement de notre connexion en cas d’incident. Sile modem envoie ”NO CARRIER” l’action ABORT est lancee.

2. Ligne TIMEOUT : On peut changer le TIMEOUT qui est de 45 secondespar defaut.

3. Autres lignes : Elles sont formees de deux chaınes de caracteres :

"attendue" "envoyee"

separees par des blancs. Il suffit que la chaıne ”attendue” concorde avecla reponse effective du modem pour que le client reponde par la chaıne”envoyee”.Toutes les reponses possibles du modem doivent etre prevues y comprisCONNECT qui n’est pas indique dans l’exemple precedent.On peut prevoir une action conditionnelle par exemple si on ne recoit pasle prompt de login :

ogin:--ogin: ppp ssword: hello2u2

un carriage return est envoye et on attend a nouveau ogin :

On peut envoyer des commandes d’initialisation du modem, ainsi

"at&d0&c1"

\q evite que le password soit ecrit dans le fichier log

Ce dialogue depend evidemment du serveur. En particulier si pppd du ser-veur reclame une authentification par PAP ou CHAP, il ne faut pas faire dedialogue login, passord, sinon on reste bloque.

5.4.3 Authentification

L’authentification peut se faire de plusieurs manieres :

1. en dehors de pppd dans un ”chat-script”. C’est alors un simple login surune machine distante (voir exemple plus haut). L’inconvenient est quechaque utilisateur doit se configurer un chat-script.

Page 74: Linux Reseau

74 CHAPITRE 5. PPP

2. par PAP (Password Authentification Protocol) : L’administrateur remplitle fichier /etc/ppp/pap-secrets avec un triplet, suivi ou non d’adressesIP :

client serveur secret adresses-IP

client et serveur sont, en principe, des noms de machines, secret estune sorte de password, les adresses IP sont optionnelles. Exemples :

dupond helios ztru45y6p *durant helios "*" -

dupond se connecte sur helios avec le password ztru45y6p, il peut avoirn’importe quelle adresse IP. durant est interdit de connexion sur helios(- signifie pas d’adresse IP).

3. par CHAP (Challenge Handshake Authentication Protocol) : Se fait dela meme maniere dans le fichier /etc/ppp/chap-secrets. L’avantage deCHAP est que secret ne circule pas en clair sur la ligne et que l’authentifi-cation est redemandee periodiquement durant la session. C’est donc plussur que PAP. Mais il faut s’assurer de l’interoperabilite avec les machinesMicrosoft.

Normalement, on demandera sur le serveur a pppd de reclamer l’authentifi-cation en placant l’option auth dans le fichier /etc/ppp/options.

L’authentification est prevue pour etre symetrique. Un serveur demande nor-malement au client de s’authentifier. Mais il peut refuser d’avoir a s’authentifieraupres du client. Dans ce cas l’administrateur du client doit mettre dans lefichier /etc/ppp/peers/isp l’option noauth.

L’important a noter est que PPP n’authentifie pas un individu mais une ma-chine qui, c’est le cas de Linux, peut avoir plusieurs utilisateurs. Pour cette au-thentification de machine on peut utiliser la base de donnees des userids/passwordsUnix. Donc pour authentifier une machine on le fera sous un userid d’utilisateur.D’ou dans /etc/ppp/pap-secrets un hostname client qu’on remplace par unusername.

5.5 Configuration d’un client

5.5.1 Information a reunir sur le fournisseur d’acces In-ternet (ISP)

– son numero de telephone– adresse IP d’au moins un serveur de nom (DNS) : alors que pour une

connexion depuis un Windows ces parametres sont communiques en debutde connexion ppp, pour Linux ces adresses ainsi que le nom de domainesont a ecrire a la main dans /etc/resolv.conf

– le serveur utilise t’il l’authentification PAP ou CHAP? Dans ces deux casil doit vous fournir un ”id” (nom d’utilisateur) et un ”secret” (mot depasse)

– le serveur demarre t’il automatiquement ppp (c’est le cas general) ou bienfaut-il passer une commande sur le serveur pour demarrer ppp ? Dans cedernier cas, on doit vous fournir un nom d’utilisateur, un mot de passe etle nom de cette commande de demarrage (eventuellement) ou un script dedemarrage

Page 75: Linux Reseau

5.5. CONFIGURATION D’UN CLIENT 75

– le serveur vous attribue t’il l’adresse IP dynamiquement ? Sinon l’ISP doitvous en donner une.

5.5.2 Resolution d’adresse

Mettre a jour le fichier /etc/resolv.conf

search <nom du reseau du provider>nameserver <adresse IP du nameserver du provider>

et le fichier /etc/host.conf

order hosts,bindmulti on

5.5.3 Parametrage PPP

En Debian on peut configurer PPP par pppconfig sous root, en RedHat parcontrol-panel ou linuxconf. Ici on fera a la main ce qui est plus pedagogique.

On appellera pppd par pon provider qui execute pppd call provider ouprovider est un nom qui peut etre change. L’option call provider fait quepppd lit le fichier d’options /etc/ppp/peers/provider

Toujours en Debian, le script /etc/init.d/ppp est prevu pour demarrerla connexion vers un serveur, a condition que le fichier /etc/ppp/ppp on bootexiste. Le script passe la commande pppd call provider

Dans le cas suivant (bidon), le provider est un linux que nous gerons, il faitl’authentification par PAP :

– numero de telephone : 03 88 11 63 35– nom d’utilisateur : dupond– password : hzkd0h3– le serveur attribue l’adresse IP du client.– nom du domaine et adresses IP des serveurs DNS : ...

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 minimalescomme :

asyncmap 0authcrtsctslockmodemlcp-echo-interval 30lcp-echo-failure 4

mais pas de proxyarp. crtscts signifie controle de flux hardware sur le portserie.

– crtscts controle de flux hardware sur le port serie (il faut le positionneraussi sur le modem)

– auth demande au partenaire (peer) de s’authentifier

Page 76: Linux Reseau

76 CHAPITRE 5. PPP

– asyncmap 0 pas de sequence d’echappement pour caracteres de controles– lock utilisation d’un lock uucp (fichier /var/lock/LCK..ttySx) pour si-

gnaler aux autres logiciels que le modem est occupe–

Le fichier /etc/ppp/peers/provider

L’option call provider de pppd fait prendre en compte ensuite un fichierprovider (ce nom est quelconque) dans /etc/ppp/peers. L’administrateurl’edite en prenant soin de conserver la version originale en provider.old

# Please customize them correctly. Only the "provider" file will# be handled by poff and pon.# debug est recommande pour le demarrage: voir fichier /var/log/ppp.logdebug# You usually need this if there is no PAP authentication# moi, pppd client, je ne demande pas au peer (le serveur) de s’authentifiernoauth# authentification PAP la ligne "id", "secret" a prendre en compte dans# /etc/ppp/pap-secret commence par dupondname dupond# The chatscript (be sure to edit that file too)# ce chatscript contient la conversation qui va avoir lieu entre pppd et# le modem entre autre le numero a appeler par ATDTconnect "/usr/sbin/chat -v -f /etc/chatscripts/provider"# Routing : le routage IP se fera via le serveur PPPdefaultroute# Default Modem (you better replace this with /dev/ttySx!)# faire un lien symbolique du type ln -s /dev/ttyS1 /dev/modem/dev/modem# Speed38400# Keep Modem up even if connection failspersist

Vous pouvez prevoir des directives d’authentification (auth, +pap, ...) maiscomme client ce n’est pas du tout recommande (il faut que le serveur saches’identifier). Cependant votre configuration peut etre a la fois client et serveur.

Adaptez le fichier : /etc/chatscripts/provider

ABORT BUSYABORT "NO CARRIER"ABORT VOICEABORT "NO DIALTONE""" ATDT0388116335CONNECT ’’

Si l’authentification ne se fait pas par PAP/CHAP il faut ajouter apresCONNECT des lignes du genre :

"ogin:" dupond"assword:" hzkd0h3

Page 77: Linux Reseau

5.5. CONFIGURATION D’UN CLIENT 77

Mais attention, en PAP ou CHAP, il ne faut pas mettre ces deux lignes : cavous bloque.

Le fichier /etc/ppp/pap-secrets

En authentification PAP, on edite le fichier /etc/ppp/pap-secrets :

dupond * hzkd0h3

La directive name dupond doit etre presente dans le fichier /etc/ppp/peers/provider

5.5.4 Test de pppd

Appel de pppd en Debian : Tout utilisateur du groupe dip (comme dial IP)pourra faire :

– pon provider : lancement reseau par PPP– poff provider : arret reseau PPP– plog : examen du fichier logTest PPP :– On lance ppp par pon provider– On surveille le log par tail -f /var/log/ppp.log– Si le support PPP du noyau est en module, verifier par lsmod qu’il est

bien charge.Exemple :

lsmodModule Pages Used byppp 5 0 (autoclean)slhc 2 [ppp] 0 (autoclean)serial 8 2 (autoclean)nfs 12 43c509 2 1

Faire ensuite ifconfig puis netstat -r. On n’a pas a faire de

route add default adresse-routeur

On doit avoir quelque chose du genre :

[morel@phoebus morel]$ ifconfiglo Link encap:Local Loopback

inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1RX packets:66 errors:0 dropped:0 overruns:0 frame:0TX packets:66 errors:0 dropped:0 overruns:0 carrier:0Collisions:0

ppp0 Link encap:Point-to-Point Protocolinet addr:193.54.230.101 P-t-P:193.54.230.20 Mask:255.255.255.0UP POINTOPOINT RUNNING MTU:1500 Metric:1RX packets:7 errors:1 dropped:1 overruns:0 frame:0TX packets:8 errors:0 dropped:0 overruns:0 carrier:0

Page 78: Linux Reseau

78 CHAPITRE 5. PPP

Collisions:0Memory:9b3038-9b3c04

[morel@phoebus morel]$netstat -r

Kernel IP routing tableDestination Gateway Genmask Flags MSS Window irtt Ifacezoroastre.c-str * 255.255.255.255 UH 1500 0 0 ppp0127.0.0.0 * 255.0.0.0 U 3584 0 0 lodefault zoroastre.c-str 0.0.0.0 UG 1500 0 0 ppp0

Si ca ne marche pas :– Examiner le log (ajoutez l’option debug)– Relire PPP-HOWTO

Causes d’incidents :

– le modem ne repond pas : tester avec minicom. Cause possible : erreur deport ttySxx

– on ne peut lancer pppd que depuis root : mettez le userid dans le groupeautorise a executer /usr/sbin/pppd (dip en Debian).

– on est en PAP et le chatscript comporte une identification par login d’oublocage

– on est en PAP et ”id secret” n’est pas bien specifie (oubli de l’option name)– Diagnostic ”Serial line loopback” dans le log : oubli d’une reponse du

modem dans le chat-script, CONNECT par exemple.– on accede au serveur mais pas a 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 laisse l’initialisation de eth0 qui prevoit

le routage par eth0. Faire ifconfig eth0 down– pppd s’arrete a son demarrage par mgetty. Cause possible : erreur dans

un fichier de configuration, par exemple pap-secrets. Tester par :pppd dryrundryrun fait ecrire les options dans /var/log/messages et arrete pppd

5.6 Configuration d’un serveur

5.6.1 Installation

pppd est appele par mgetty qui ecoute le port serie et sait reconnaıtre unappel PPP.

Configuration du noyau

Il faut prevoir :– le support PPP dans le noyau ou en module– IP forwarding/gatewaying pour servir de routeur pour les machines connectees

par PPP

Page 79: Linux Reseau

5.6. CONFIGURATION D’UN SERVEUR 79

Installation de mgetty

On peut lancer directement pppd sur un port serie, mais il est preferablede le faire a travers mgetty. Cela permet d’utiliser le modem pour autre chose(connexion distante en mode terminal par minicom, kermit, etc ou de recevoirdes fax). mgetty sait reconnaıtre le type d’appel et appeler le service adequat.

Il faut au moins mgetty Version 1.1.18-1. mgetty doit etre compile avecl’option -DAUTO PPP c’est a dire reconnaissance automatique de PPP. C’estnecessaire pour les clients Microsoft Wxx.

On met mgetty a l’ecoute d’un port serie en ajoutant dans /etc/inittabune ligne :

S1:2345:respawn:/sbin/mgetty -x0 -n 7 ttyS1

En Debian, il suffit de decommenter une ligne.– x0 signifie niveau de debug 0 (pas de debug)– n 7 signifie le modem decroche la ligne a la 7eme sonnerieOn met a jour init par telinit q.

Controle de mgetty mgetty est capable de reconnaıtre un type d’appel (voix,fax, ppp, data). Quand mgetty reconnaıt un appel PPP, il faut preciser commentmgetty doit appeler pppd. On l’indique dans /etc/mgetty/login.config, parexemple :

/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login debug

a ppp est le nom sous lequel pppd apparaıtra dans la commande w.On peut configurer des options dans /etc/mgetty.config, par exemple pour

un port :

port ttyS0speed 28800toggle-dtr ndebug 9data-only y

Les fichiers logs se trouvent en /var/log/mgetty/Si la ligne telephonique est aussi utilisee pour la voix, on peut empecher

mgetty/ de decrocher en creant un fichier /etc/nologin.ttyxx Ainsi on peutmettre dans /etc/crontab :

# Controle modem sur ma ligne telephonique# modem inaccessible du lundi au vendredi de 9h a 19h0 9 * * 1-5 root /usr/bin/touch /etc/nologin.ttyS10 19 * * 1-5 root /bin/rm /etc/nologin.ttyS1# sauf les jours feries1 9 1 1 * root /bin/rm /etc/nologin.ttyS11 9 1 5 * root /bin/rm /etc/nologin.ttyS11 9 8 5 * root /bin/rm /etc/nologin.ttyS11 9 14 7 * root /bin/rm /etc/nologin.ttyS11 9 11 11 * root /bin/rm /etc/nologin.ttyS1

Page 80: Linux Reseau

80 CHAPITRE 5. PPP

Installation de pppd

Il faut avoir au moins pppd 2.2.0f-4 pour pouvoir transmettre aux clientsMicrosoft les adresses de DNS par LCP. C’est le cas en Debian.

Compilation de pppd

Si on doit compiler, il faut faire :

make -DDNS HAS_SHADOW=1

– -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+paplogindebugasyncmap 0lockmodemcrtsctsproxyarpnetmask 255.255.255.0ms-dns 193.54.230.20ms-dns 193.54.211.65ms-wins 193.54.230.20noipxlcp-echo-interval 30lcp-echo-failure 4

Options courantes pour modem :– asyncmap 0 : pas d’echappement pour des caracteres de controle– lock : lock a la UUCP (pour reserver le port serie pour pppd)– crtscts : controle de flux hardware sur le port serie– modem : utilise les modem control lines (CD et DTR)Options d’authentification :– auth : authentification du client demandee– -chap : pas d’authentification CHAP– +pap : authentification PAP– login : les userids/passwords Unix sont utilises pour l’authentificationOptions IP :– proxyarp : le serveur attribue son adresse Ethernet au client PPP. L’oubli

de cette option fera que le client ne peut pas communiquer avec d’autremachine que le serveur. L’option defaultroute ne se met pas pour unserveur.

Page 81: Linux Reseau

5.6. CONFIGURATION D’UN SERVEUR 81

– 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 WINSOptions de gestion du lien :– lcp-echo-interval 30 : envoie une demande d’echo si aucun paquet n’a ete

recu depuis 30 secondes pour verifier si le partenaire est toujours la– lcp-echo-failure 4 : si au bout de 4 demandes d’echo, le partenaire ne

repond pas, on le suppose mort.

5.6.2 Affectation dynamique des adresses IP :

Quand le serveur a plusieurs modems, on n’indique pas l’adresse IP du clientdans /etc/ppp/options mais dans un fichier specifique au port :

Fichier /etc/ppp/options.ttyS0

/dev/ttyS0193.54.230.20:193.54.230.100

La syntaxe est :

adresse IP locale: adresse IP distante

Fichier /etc/ppp/options.ttyS1

/dev/ttyS1193.54.230.20:193.54.230.101

5.6.3 Fichier /etc/ppp/pap-secrets sur un serveur :

# Every regular user can use PPP and has to use passwords from /etc/passwd* zoroastre "" *# UserIDs that cannot use PPP at all. Check your /etc/passwd and add any# other accounts that should not be able to use pppd!root zoroastre "*" -

S’il y a un - pour l’adresse IP c’est qu’aucune est accordee.Si on utilise les passwords Unix pour authentifier (options auth +pap login)

on peut meme supprimer le fichier /etc/ppp/pap-secrets

5.6.4 Login d’un utilisateur PPP

Si un utilisateur ne fait que du PPP, on peut lui affecter un shell comme/bin/false. Il ne fera rien d’autre que du pppd sur le serveur. Son entree dans/etc/passwd sera du type :

dupond:x:1234:1234:Dupond Jean:/tmp:/bin/false

Page 82: Linux Reseau

82 CHAPITRE 5. PPP

5.6.5 Log d’une session PPP sur le serveur :

Dans /var/log/messages

Connexion d’un Mac Intosh:

Apr 17 16:40:39 zoroastre pppd[14629]: pppd 2.3.5 started by a_ppp, uid 0Apr 17 16:40:39 zoroastre pppd[14629]: Using interface ppp1Apr 17 16:40:39 zoroastre pppd[14629]: Connect: ppp1 <--> /dev/ttyS0Apr 17 16:40:42 zoroastre pppd[14629]: user emrs logged inApr 17 16:40:42 zoroastre pppd[14629]: found interface eth0 for proxy arpApr 17 16:40:42 zoroastre pppd[14629]: local IP address 193.54.230.20Apr 17 16:40:42 zoroastre pppd[14629]: remote IP address 193.54.230.100Apr 17 16:45:35 zoroastre pppd[14629]: Hangup (SIGHUP)Apr 17 16:45:35 zoroastre pppd[14629]: Modem hangupApr 17 16:45:36 zoroastre pppd[14629]: Connection terminated.Apr 17 16:45:36 zoroastre pppd[14629]: Exit.

Connexion d’une machine Windows 98:

Apr 17 13:06:01 zoroastre pppd[7110]: pppd 2.3.5 started by a_ppp, uid 0Apr 17 13:06:01 zoroastre pppd[7110]: Using interface ppp1Apr 17 13:06:01 zoroastre pppd[7110]: Connect: ppp1 <--> /dev/ttyS0Apr 17 13:06:05 zoroastre pppd[7110]: user vnc logged inApr 17 13:06:05 zoroastre pppd[7110]: found interface eth0 for proxy arpApr 17 13:06:05 zoroastre pppd[7110]: local IP address 193.54.230.20Apr 17 13:06:05 zoroastre pppd[7110]: remote IP address 193.54.230.100Apr 17 13:06:05 zoroastre pppd[7110]: CCP terminated by peerApr 17 13:06:05 zoroastre pppd[7110]: Compression disabled by peer.Apr 17 13:12:39 zoroastre pppd[7110]: LCP terminated by peerApr 17 13:12:40 zoroastre pppd[7110]: Hangup (SIGHUP)Apr 17 13:12:40 zoroastre pppd[7110]: Modem hangupApr 17 13:12:40 zoroastre pppd[7110]: Connection terminated.Apr 17 13:12:41 zoroastre pppd[7110]: Exit.

Dans /var/log/ppp.log avec l’option debug : le dialogue LCP, IPCP, PAPapparaıt. La session normale ci-dessous permet de reperer dans une connexiondefaillante ou se situe le probleme.

Apr 19 17:50:09 zoroastre pppd[21784]: pppd 2.3.5 started by a_ppp, uid 0Apr 19 17:50:09 zoroastre pppd[21784]: Using interface ppp1Apr 19 17:50:09 zoroastre pppd[21784]: Connect: ppp1 <--> /dev/ttyS0Apr 19 17:50:09 zoroastre pppd[21784]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <auth pap> <magic 0x103ef27> <pcomp> <accomp>]Apr 19 17:50:09 zoroastre pppd[21784]: rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <auth pap> <magic 0x103ef27> <pcomp> <accomp>]Apr 19 17:50:12 zoroastre pppd[21784]: rcvd [LCP ConfReq id=0x42 <asyncmap 0x0><magic 0x2a> <pcomp> <accomp>]Apr 19 17:50:12 zoroastre pppd[21784]: sent [LCP ConfAck id=0x42 <asyncmap 0x0><magic 0x2a> <pcomp> <accomp>]

Page 83: Linux Reseau

5.7. REGLAGES FINS 83

Apr 19 17:50:12 zoroastre pppd[21784]: sent [LCP EchoReq id=0x0 magic=0x103ef27]Apr 19 17:50:12 zoroastre pppd[21784]: rcvd [PAP AuthReq id=0x43 user="emrs" password="xxxxx"]Apr 19 17:50:12 zoroastre pppd[21784]: user emrs logged inApr 19 17:50:16 zoroastre pppd[21784]: sent [PAP AuthAck id=0x43 "Login ok"]Apr 19 17:50:16 zoroastre pppd[21784]: sent [IPCP ConfReq id=0x1 <addr 193.54.230.20> <compress VJ 0f 01>]Apr 19 17:50:16 zoroastre pppd[21784]: rcvd [LCP EchoRep id=0x0 magic=0x2a]Apr 19 17:50:16 zoroastre pppd[21784]: rcvd [IPCP ConfReq id=0x44 <compress VJ 0f 01> <addr 0.0.0.0>]Apr 19 17:50:16 zoroastre pppd[21784]: sent [IPCP ConfNak id=0x44 <addr 193.54.230.100>]Apr 19 17:50:16 zoroastre pppd[21784]: rcvd [IPCP ConfAck id=0x1 <addr 193.54.230.20> <compress VJ 0f 01>]Apr 19 17:50:16 zoroastre pppd[21784]: rcvd [IPCP ConfReq id=0x45 <compress VJ 0f 01> <addr 193.54.230.100>]Apr 19 17:50:16 zoroastre pppd[21784]: sent [IPCP ConfAck id=0x45 <compress VJ 0f 01> <addr 193.54.230.100>]Apr 19 17:50:16 zoroastre pppd[21784]: found interface eth0 for proxy arpApr 19 17:50:16 zoroastre pppd[21784]: local IP address 193.54.230.20Apr 19 17:50:16 zoroastre pppd[21784]: remote IP address 193.54.230.100Apr 19 17:50:42 zoroastre pppd[21784]: sent [LCP EchoReq id=0x1 magic=0x103ef27]Apr 19 17:50:42 zoroastre pppd[21784]: rcvd [LCP EchoRep id=0x1 magic=0x2a]Apr 19 17:51:12 zoroastre pppd[21784]: sent [LCP EchoReq id=0x2 magic=0x103ef27]Apr 19 17:51:12 zoroastre pppd[21784]: rcvd [LCP EchoRep id=0x2 magic=0x2a]Apr 19 17:58:58 zoroastre pppd[21784]: rcvd [LCP TermReq id=0x46]Apr 19 17:58:58 zoroastre pppd[21784]: LCP terminated by peerApr 19 17:58:58 zoroastre pppd[21784]: sent [LCP TermAck id=0x46]Apr 19 17:59:01 zoroastre pppd[21784]: Connection terminated.Apr 19 17:59:01 zoroastre pppd[21784]: Hangup (SIGHUP)Apr 19 17:59:01 zoroastre pppd[21784]: Exit.

5.7 Reglages fins

– mru (Maximum Receive Unit) . Sa valeur par defaut est 1500. La valeurminimum est 128. Une valeur de 296 est recommandee pour les liaisonslentes et un logiciel ligne a ligne. Pour de l’interactif 1500 peut etre eleve(mru 542 ?)

– deflate nr,nt : compression par la methode deflate (cf gzip) nr et ntentre 8 et 15

– bsdcomp nr,nt : compression par la methode BSD (cf compress Unix) nret nt entre 9 et 15

– vj-max-slots n : fixe le nombre de connection slots pour la compressionde Van Jacobson des TCP/IP ( n entre 2 et 16).

Il faut tenir compte que la compression prend de la memoire et que le modemcomprime aussi (V.42). Neammoins la compression peut ameliorer le debit.

Je constate que j’ai les meilleures performances avec les options PPP stan-dards (mru=1500, compression VJ) mais en comprimant les fichiers transferes

Page 84: Linux Reseau

84 CHAPITRE 5. PPP

par gzip et/ou en utilisant l’option de compression -C dans ssh (slogin -Chost, scp -C depart arrivee)

5.8 Securite

pppd doit etre suid root pour pouvoir initialiser l’interface reseau et modifierla table de routage. Son acces doit etre reserve a un groupe d’utilisateurs (dipen Debian).

Les fichiers de configuration dans /etc/ppp ne doivent etre accessibles quepar l’administrateur. De meme les fichiers logs.

Sur un serveur l’authentification doit etre obligatoire.

5.9 Applications

5.9.1 PPP sur cable null modem

On raccorde les deux machines par un cable serie dit null modem, les filstransmit-receive sont croises, voir Serial-HOWTO.

Choisissez une machine comme serveur. Installez mgetty sur un port serie.Testez la connectivite par minicom depuis le client. Si probleme configurer lesports avec setserial.

Maintenant il suffit de lancer pppd sur les deux machines, par exemple surle 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 onn’a pas de routage. Coupez le lien en tuant l’un des pppd.

Pour router, on suppose qu’une machine a un interface Ethernet connecteet 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.2 Relier deux reseaux par PPP

Il faut avoir des adresses IP pour les machines des deux reseaux.

5.9.3 Routage

Si l’un des reseaux est connecte a Internet, on mettra defaultroute coteclient et on definira la machine Linux qui tourne le pppd client comme routeurpar defaut sur les machines du reseau non connecte a Internet.

S’il s’agit juste de connecter deux reseaux on ajoute une commande routepour chaque reseau par le script /etc/ppp/ip-up. Il faut aussi que chaquemachine des deux reseaux connaisse le routeur.

Page 85: Linux Reseau

5.9. APPLICATIONS 85

5.9.4 /etc/ppp/ip-up

Quand pppd a etabli le lien il regarde si un script /etc/ppp/ip-up estexecutable et si oui l’execute. On peut l’utiliser pour passer une commanderoute 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 &;;

*)esacexit 0

Page 86: Linux Reseau

86 CHAPITRE 5. PPP

5.10 Client PPP sur Microsoft Wxx

– Demarrer/Programmes/Accessoires/Communication/Acces reseau a dis-tance

– Double cliquer avec le bouton gauche l’icone ”Nouvelle connexion”– Entrez un nom pour l’ordinateur appele– Suivant– Numero de telephone– Cliquer la nouvelle icone avec le bouton droit et selectionner Proprietes– Onglet : type de serveur– Type de serveur : PPP Internet Windows NT Serveur et Windows 98– Options avancees :

– (X) Se connecter a un reseau– (X) Activer la compression logicielle– () Demander un mot de passe crypte– () Demander le cryptage des donnees– () Creer un journal pour cette connexion

– Protocoles reseau autorises– () NetBeui– () Compatible IPX/SPX– (X) TCP/IP

– Cliquer parametres TCP/IP– (X) Adresse IP attribuee par serveur– () Specifier adresse IP– (X) Adresses de serveurs de nom attribuees par serveur– () Specifier les adresses des serveurs de noms– (X) Utiliser la compression d’en tete IP– (X) Utiliser la passerelle par defaut pour le reseau distant

5.11 Divers

– pppupd (package Debian) : veille a maintenir active la liaison PPP.– diald permet de lancer automatiquement PPP quand une connexion est

demandee.– EQL permet de coupler deux modems en un seul lien PPP, doublant ainsi

sa capacite.– Linux supporte des cartes multiports pour connecter une batterie de mo-

dems : Cyclades, Stallion, Comtrol RocketPort... Voir Hardware HowToet Serial HowTo

Page 87: Linux Reseau

Chapitre 6

Securite reseau sur Linux

6.1 Introduction

Ce document donne quelques regles minimales de securite pour des machinesLinux connectees sur Internet par une adresse IP fixe et qui ne font pas deservices reseau.

Ce document est provisoire. Toute remarque est bienvenue.Linux est par nature un serveur reseau sur Internet. La plupart des distri-

butions Linux demarrent des serveurs reseaux sans meme que le proprietaire dela machine, qui croit avoir une simple station de travail, s’en rende compte. Cesserveurs reseau sont inutilises, ils prennent du temps CPU, de la memoire et cesont autant de serrures que des pirates peuvent essayer d’ouvrir ou de forcer.

Une fois qu’un pirate a reussi a rentrer sur votre machine, il peut par etapessuccessives devenir root, ecouter ce qui passe sur le reseau local, s’installer surd’autres machines... Meme s’il fait ca ”pour le sport”, c’est tres genant. Passeulement en raison des degats qu’il peut commettre sur la machine visitee, maisparce que, controlant une machine a l’insu de son responsable, le pirate peutmener a partir de cette machine des actions nuisibles sur le reseau. Par exemplel’utiliser comme relais de messages publicitaires ou comme base d’attaque contred’autres machines.

Toute machine visitee par un pirate doit etre entierement reconfiguree.Si Linux n’est utilise que comme poste de travail personnel, il ne joue sur le

reseau qu’un role de client, tous les serveurs qui sont actives par les proceduresd’installation des distributions actuelles, sont non seulement inutiles mais sontdangereux. Il faut les arreter.

6.2 Arreter sa machine quand elle n’est pas uti-lisee

C’est bete, mais efficace quand on ne fait pas de service reseau.On peut aussi couper la machine du reseau. Mais attention, les prises RJ45

ne sont pas inusables.

87

Page 88: Linux Reseau

88 CHAPITRE 6. SECURITE RESEAU SUR LINUX

6.3 Arreter les serveurs inutiles

6.3.1 Les daemons

Quels sont les daemons qui tournent ?

On les voit en faisant la liste des process par :

ps auxw|more

Quels sont les daemons qui ont ouvert une socket reseau ?

On passe la commande netstat -tu ou plus explicitement netstat --tcp--udp

netstat -tu|moreActive Internet connections (including servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 1 0 localhost:printer localhost:851 TIME_WAITtcp 0 0 *:smtp *:* LISTEN...

montre que deux daemons fonctionnent en transport tcp, le serveur d’im-pression lpd sur le port tcp 515 (printer) et sendmail sur le port tcp 25 pour leservice de mail (smtp). Les numeros de port repertories dans /etc/servicessont remplaces par le nom du service.

Controle des daemons en RedHat

Les scripts de lancement/arret sont en /etc/rc.d/init.d

On peut arreter manuellement un daemon, sendmail par exemple, sous rootpar :

cd /etc/rc.d/init.d./sendmail stop

Ainsi on arrete le Mail Transfer Agent sendmail.Pour que cet arret soit permanent il faut empecher le demarrage au boot du

daemon. Il faut d’abord savoir dans quel ”run level” on demarre. En RedHatc’est 3 (multiuser sans xdm) ou 5 (multiuser avec xdm). Voir dans le fichier/etc/inittab la ligne initdefault :

# The default runlevel.id:3:initdefault:

En RedHat on peut, sous root, appeller control-panel & et activer le run-level editor et corriger les levels 3 ou 5. Ou faire a la main comme en Debian,mais dans le repertoire /etc/rc.d/rc3.d ou /etc/rc.d/rc5.d

Page 89: Linux Reseau

6.3. ARRETER LES SERVEURS INUTILES 89

Controle des daemons en Debian

Les scripts sont en /etc/init.d le runlevel est 2 par defaut. Le repertoire/etc/rc2.d contient par exemple :

S10sysklogd@ S20makedev@ S21sendmail@ S99xdm@S11klogd@ S20mon@ S22ntpdate@S18portmap@ S20ntop@ S23ntp-server@S20alsa@ S20postgresql@ S25nfs-server@S20anacron@ S20rsync@ S89atd@S20gpm@ S20samba@ S89cron@S20inetd@ S20ssh@ S91apache-ssl@S20isdnutils@ S20teapop@ S99fetchmail@S20linuxconf@ S20xfs@ S99rmnologin@S20lprng@ S21nfs-common@ S99stop-bootlogd@

S20sendmail@ est un lien symbolique :

/etc/rc2.d/S20sendmail -> ../init.d/sendmail*

vers le script de demarrage. S20 signifie que son rang de demarrage est 20.Pour l’empecher de demarrer au niveau 2 on fait sous root :

update-rc.d -f sendmail removeupdate-rc.d: /etc/init.d/sendmail exists during rc.d purge (continuing)Removing any system startup links for /etc/init.d/sendmail .../etc/rc0.d/K20sendmail/etc/rc1.d/K20sendmail/etc/rc3.d/S20sendmail/etc/rc4.d/S20sendmail/etc/rc5.d/S20sendmail/etc/rc6.d/K20sendmail

On peut creer ces liens par :

update-rc.d sendmail defaultsAdding system startup for /etc/init.d/sendmail .../etc/rc0.d/K20sendmail -> ../init.d/sendmail/etc/rc1.d/K20sendmail -> ../init.d/sendmail/etc/rc6.d/K20sendmail -> ../init.d/sendmail/etc/rc2.d/S20sendmail -> ../init.d/sendmail/etc/rc3.d/S20sendmail -> ../init.d/sendmail/etc/rc4.d/S20sendmail -> ../init.d/sendmail/etc/rc5.d/S20sendmail -> ../init.d/sendmail

qui est equivalent a :

update-rc.d sendmail start 20 2 3 4 5 . stop 20 0 1 6 .

Principaux daemons reseau

sendmailMail Transfer Agent : recoit, envoit, route du mail. Arreter le daemonsendmail n’empeche pas d’envoyer du courrier. Il empeche d’en recevoirsur sa machine.

Page 90: Linux Reseau

90 CHAPITRE 6. SECURITE RESEAU SUR LINUX

apacheServeur http

bindDomain Name Server : peut etre utilise comme cache ou comme DNSprimaire ou secondaire, sinon inutile.

snmpdServeur snmp pour la gestion reseau. Inutile en general

rpc.nfsdGere les demandes de repertoires des clients par nfs. Ne le demarrez passi vous ne l’utilisez pas.

rpc.mountdIdem Gere les demandes de clients de monter des repertoires exportes.Voir fichier /etc/exports

sambaserveur pour machines Microsoft Windows . Si vous l’activez, parametrezle dans /etc/smb.conf. Ajouter en particulier :

hosts allow = 193.54.230. 127.

ou 193.54.230. est mon reseau local.

sshdconnexion securisee a d’autres machines (recommande)

xdmconnexion X-Windows

xfsserveur de fontes X

routedroutage Internet, a supprimer. Faites du routage manuel par la commanderoute.

whodou in.rwhod donne des informations sur les utilisateurs de votre machine.A proscrire.

6.3.2 Les services actives par inetd

inetd, le super-daemon lance, a la demande du reseau, les daemons confi-gures dans le fichier /etc/inetd.conf.

Pour eviter de laisser ouvert des services inutilises on procedera ainsi :

1. se mettre sous root

2. editer le fichier /etc/inetd.conf. Chaque service est decrit sur une ligne.

3. Mettre un # de commentaire en tete de chaque ligne correspondant a unservice inutilise. Vous pouvez ainsi commenter toutes les lignes dont vousne connaissez pas la signification. Exemple :

Page 91: Linux Reseau

6.3. ARRETER LES SERVEURS INUTILES 91

#:BOOT: Tftp service is provided primarily for booting. Most sites# run this only on machines acting as "boot servers."#tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /boot#bootps dgram udp wait root /usr/sbin/bootpd bootpd - i -t 120

4. Envoyez le signal SIGHUP au process inetd par

killall -HUP inetd

Cela l’oblige a relire son fichier de configuration.

En Debian on peut mettre a jour /etc/inetd.conf avec la commandeupdate-inetd qui envoie apres le signal SIGHUP a inetd.

– activation d’un daemonupdate-inetd --enable shellactive le serveur rsh

– desactivation d’un daemonupdate-inetd --disable shelldesactive le serveur rsh

– ajout d’une entreeupdate-inetd --group MAIL --add \’pop-3\t\tstream\ttcp\tnowait\troot\t/usr/sbin/tcpd\t/usr/sbin/in.pop3d’

ajoute une entree dans le groupe MAIL indique par # :MAIL :create, remove, enable or disable entry in /etc/inetd.conf envoie un signal

SIGHUP au process inetd format des commentaires dans /etc/inetd.conf :Services lances par inetd

echoservice ”trivial” de inetd

chargenservice ”trivial” de inetd (character generator)

daytimeservice ”trivial” de inetd (human readable time)

timeservice ”trivial” de inetd (machine readable time, in the form of the num-ber of seconds since midnight, January 1, 1900). Peux servir a synchroniserl’horloge sur d’autres machines par la commande rdate

telnetconnexion depuis une machine distante (a controler ou interdire)

ftpserveur de fichiers (a controler ou interdire)

shellpermet d’executer des commandes a distance via rsh (a controler).

loginpermet la connexion a distance par rlogin (a controler ou interdire)

execpermet d’executer des commandes a distance via rexec (a controler ouinterdire)

Page 92: Linux Reseau

92 CHAPITRE 6. SECURITE RESEAU SUR LINUX

talkpermet de communiquer en temps reel (peut se preter a des abus)

ntalkidem

pop-xreleve de boıte aux lettres depuis des machines distantes : a interdire, c’estdangereux.

imapdidem

fingerrepond a la commande finger. Utile pour avoir des informations sur les uti-lisateurs de votre machine. Il permet aux pirates de savoir qui est connectesur votre machine par finger @votre machine

identutile sur un serveur de messagerie, sinon a interdire.

tftptransfert de fichier archaıque. Surtout a interdire

bootpspermet de booter une machine par le reseau. A supprimer.

mountdpermet a une autre machine de monter par mount une partie de votredisque dur (nfs) . Voir le daemon.

rusersdrepond a la commande rusers pour connaıtre les utilisateurs en sessionsur votre machine

rstatd?

saftserveur de fichiers sendfiled (Simple Asynchronous File Transfer)

6.4 Controler l’acces aux serveurs : tcp-wrapper

Si on examine le fichier /etc/inetd.conf, par exemple :

telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetdftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/ftpd

En se rememorant la syntaxe a l’aide de man inetd.conf, on constate quele super-daemon inetd n’appelle pas directement le serveur telnet in.telnetdmais appelle /usr/sbin/tcpd qui appelera sous condition in.telnetd.

tcpd est un tcp-wrapper. Il n’appelle le daemon sollicite par le reseau quesi le demandeur satisfait a certaines conditions qui sont fixees dans les fichiers/etc/hosts.allow et /etc/hosts.deny. Ces fichiers precisent les conditionsde validite d’un couple (daemon : client) :

Page 93: Linux Reseau

6.4. CONTROLER L’ACCES AUX SERVEURS : TCP-WRAPPER 93

– Si une condition du fichier /etc/hosts.allow est satisfaite, l’acces auservice est autorise.

– Sinon, si une condition du fichier /etc/hosts.deny est satisfaite, l’accesest refuse.

– Dans les autres cas l’acces est autorise.– Si les deux fichiers sont absents, vides ou ne contiennent que des commen-

taires, l’acces a tous les serveurs controles par tcpd est autorise.Syntaxe : man 5 hosts access et man 5 hosts options .– daemon est le nom du daemon cite dans /etc/inetd.conf. C’est le dernier

element du chemin absolu. Exemple : in.qpopper pour /usr/sbin/in.qpopper– client est une liste de noms de domaines ou d’adresses IP separes par des

blancs ou des virgules– .u-strasbg.fr designe toutes les machines dont le nom de domaine se ter-

mine par u-strasbg.fr. N’oubliez pas le point au debut.– 193.54.230. designe toutes les machines d’adresses IP commencant par

193.54.230. N’oubliez pas le point final.La regle recommandee est d’interdire tous les acces sauf aux machines specifiquement

designees.Pour cela, le fichier /etc/hosts.deny aura le contenu suivant :

# /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

Ce qui signifie tous les services interdits a tous les clients.Le fichier /etc/hosts.allow aura un contenu du type :

# /etc/hosts.allow: list of hosts that are allowed to access the system.# See the manual pages hosts_access(5), hosts_options(5)# and /usr/doc/netbase/portmapper.txt.gz## Example: ALL: LOCAL @some_netgroup# ALL: .foobar.edu EXCEPT terminalserver.foobar.edu#ALL : LOCALALL : 193.54.230.ALL : physpc4.u-strasbg.fr physpc5.u-strasbg.frin.qpopper : .u-strasbg.frin.qpopper : 130.79.

– ALL : LOCAL autorise tous les services a toute machine dont le nom dedomaine ne contient pas de ’.’ . Donc une machine du reseau local

– ALL :193.54.230. autorise tous les services a toute machine de ce reseau.En l’occurrence le reseau local.

Page 94: Linux Reseau

94 CHAPITRE 6. SECURITE RESEAU SUR LINUX

– ALL : physpc4.u-strasbg.fr physpc5.u-strasbg.fr autorise tous lesservices a ces deux machines.

– in.qpopper : .u-strasbg.fr autorise l’acces au serveur in.qpopperaux machines de u-strasbg.fr (noter le point).

– in.qpopper : 130.79. autorise l’acces au serveur in.qpopper aux ma-chines du reseau de classe B 130.79.0.0 (noter le point).

– imap2 : 130.79.186.0/255.255.255.0 autorise l’acces au serveur imap2aux machines du sous-reseau reseau 130.79.186.0.

tcpdcheck : controle des regles d’acces de /etc/hosts.allow et /etc/hosts.deny :

tcpdchk -v

sort une analyse de chaque regle.Remarque : Certains serveurs peuvent fonctionner comme daemons independants,

c’est a dire ne sont pas lances par le super-daemon inetd mais sont compilesavec la librairie tcp-wrapper. On peut alors controler leur acces dans les fichiers/etc/hosts.allow et /etc/hosts.deny. C’est le cas de sendmail en Debian.

tcpdmatch predit le comportement de tcp-wrapper pour un daemon appelepar inetd (ou qui est linke comme sendmail avec la librairie /usr/lib/libwrap.a.Exemple :

$ tcpdmatch in.qpopper 128.64.135.10client: address 128.64.135.10server: process in.qpoppermatched: /etc/hosts.allow line 58access: granted

6.5 Controler l’acces a xdm

On peut controler l’acces par XDMCP (xdm).Documentation : faire man xdmFichier de configuration : /etc/X11/xdm/Xaccess

#* #any host can get a login window*.c-strasbourg.fr # toute machine du domaine c-strasbourg.fr peut avoir une fenetre de login* # toute machine peut avoir une fenetre de login

6.6 Les mots de passe

6.6.1 Qualite des mots de passe

Un ”bon” mot de passe a au moins 6 caracteres, melange minuscules et ma-juscules, chiffres et caracteres speciaux. Il ne doit pas etre facilement deductibled’un dictionnaire.

Un truc mnemotechnique est de prendre une phrase que l’on connaıt bien etde prendre par exemple la premiere lettre de chaque mot :

Exemple : ”Allons enfants de la Patrie” donnera AedlP comme c’est un peucourt, on ajoute le jour de Gloire AedlPljdG et puis, comme le truc est un peuconnu, on peut ajouter un caractere, par exemple AedlP ;ljdG

Page 95: Linux Reseau

6.7. APPLIQUER LES MISES A JOUR DE SECURITE SUR LES LOGICIELS.95

6.6.2 Shadow passwords

Ils sont implemente dans les distributions Linux recentes et il faut l’utiliser.Le fichier /etc/password est lisible par tous. Avec les Shadow passwords,

les mots de passe (cryptes) ne sont plus dans le fichier /etc/password maisdans /etc/shadow qui lui n’est lisible que par root.

6.7 Appliquer les mises a jour de securite surles logiciels.

L’art du pirate est de parvenir a rentrer sur une machine sans connaıtre deuserid ni de password. S’il connaıt un trou de securire d’un logiciel reseau il peutl’exploiter. Si c’est un debordement incontrole d’un buffer il peut arriver a faireexecuter a votre machine ses propres instructions et en prendre le controle. Leslogiciels tournant sur Linux etant tres connus, le cas n’est pas rare. Il faut doncappliquer les corrections de securite en particulier sur les serveurs reseaux.

Pour etre tenu au courant, consultez le site www du fournisseur de votredistribution Linux.

Exemple : Security Alert sur la page d’accueil de : http ://www.fr.debian.org/

Ou bien un serveur ftp proche :

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 desajouts de nouvelles fonctionnalites.

Les trous de securite sont signales sur la liste “Bugtraq” :

echo "sub bugtraq"|mail -s"" [email protected]

Plus generalement consultez : http ://www.cert.org/

6.8 Detection d’incursions

Differentes commandes permettent de detecter des incursions ou tentativesd’incursions

– last|more : liste les logins– ls -l /etc/passwd /etc/group : controle de la date de derniere modi-

fication de fichiers sensibles. Si elle indique 3h du matin, on peut s’inter-roger.

– Inspection du fichier log du tcpwrapper, permet de reperer des incursionsou des tentatives.– less /var/log/secure : (RedHat)– less /var/log/daemon.log (Debian)

– Examen du fichier de login par su

Page 96: Linux Reseau

96 CHAPITRE 6. SECURITE RESEAU SUR LINUX

6.8.1 tripwire : controle de l’integrite des fichiers

Lorsqu’un pirate arrive a s’introduire sur un serveur, une des premiereschoses qu’il fera est laisser des programmes en local pour permettre son retourde maniere aussi facile que possible. C’est pourquoi il est interessant de signerles fichiers importants, et de verifier a intervalle regulier qu’ils n’ont pas bouge(tous les soirs par exemple). Le programme tripwire peut alors vous interesser.

Tripwire est un outil qui a un seul but : detecter tout changement dansl’integrite d’un fichier. Ca signifie qu’il peut de maniere non-discutable dire siun fichier protege a ete altere par un moyen qui viole les regles determineespar l’administrateur reseau. Tripwire peut aussi determiner si un fichier a eteajoute ou efface d’un repertoire protege. Tripwire a des regles tres flexibles ettres puissantes pour definir exactement a quoi il devrait faire attention.

Pour plus d’informations sur Tripwire, allez voir http ://www.tripwiresecurity.com/Tripwire est un package Debian.

6.9 Precautions elementaires

– Pas de ’.’ dans le $PATH de root. Faire ./prog pour executer un fichierdu repertoire courant.

– Ne jamais faire tar x sous root d’une archive importee de l’exterieur. Unfarceur peut ainsi vous faire ecraser votre fichier /etc/passwd

– A l’installation d’un logiciel faites make -n install avant make installsous root.

– Interdisez l’acces a certains fichiers comme /etc/passwd par ftp. Un ser-veur comme wu-ftpd-academ permet dans son fichier de configuration/etc/wu-ftpd-academ/ftpaccessnoretrieve /etc/passwd /etc/group

6.10 Principales attaques reseau et parades

6.10.1 SYN flooding

DescriptionAttaque qui empeche des utilisateurs legitimes de se connecter. Exemple

d’attaque :

Warning: possible SYN flood from 212.187.226.114 on 193.54.230.20:80.Sending cookies.

Une attaque par syn-flood permet de perturber le service TCP sur un portparticulier (ici le serveur Web).

En general un ”Syn Flood” est symptomatique d’une attaque par ”deni deservice”. Le principe est simple et base sur les caracteristiques de TCP. Si unemachine A veut etablir une connexion TCP avec une machine B :

1. un SYN est envoye de A vers B pour initialiser la connexion

2. un SYN/ACK est retourne par B vers A si le service est actif

3. un ACK est envoye par A vers B pour confirmer a B la demande deconnexion

Page 97: Linux Reseau

6.10. PRINCIPALES ATTAQUES RESEAU ET PARADES 97

A ce niveau la connexion est consideree comme etablie. Point important : lamachine B, depuis l’etape 2, a alloue de la memoire pour gerer la connexion encours jusqu’a l’arrivee d’un ”time out” eventuel si l’etape 3 ne se realise pas.

Le principe d’une action ”SYN Flood” consiste alors a envoyer une rafale deSYN, d’allouer ainsi un maximum de memoire au niveau du serveur, et de nejamais repondre au SYN/ACK par le ACK normalement attendu. Le serveura alors des difficultes pour repondre aux requetes ”legitimes” d’ou le ”deni deservice”.

Quelques SYN/ACK sans reponse peuvent etre apparentes (si on a l’espritlarge) a des pertes de paquets qui concerneraient potentiellement la reponseACK de celui qui a initialise la connexion. Si la frequence est elevee, il y a sansdoute un probleme de securite a la cle ...

Tout serveur Web a ce genre de messages regulierement, sans que cela soitforcement une attaque.

Detection :

dmesg | grep ’possible SYN flood’ | awk ’{print $6}’ | sort | uniq

ParadeSyn Cookies est une option a la compil du noyau qui permet de se proteger.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 ableto connect to your computer during an ongoing attack and requires very littlework 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 ”SYNcookies” 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 theirTCP/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 likelyto have been forged by the attacker ; it is only reported as an aid in tracing thepackets to their actual source and should not be taken as absolute truth.

SYN cookies may prevent correct error reporting on clients when the serveris 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 canenable them by saying Y to ”/proc filesystem support” and ”Sysctl support”below and executing the command

echo 1 >/proc/sys/net/ipv4/tcp_syncookies

at boot time after the proc filesystem has been mounted.If unsure, say Y.

6.10.2 smurf

Le principe de cette attaque c’est d’emettre les trames avec une adressesource modifiee. Le proprietaire de cette adresse (et toutes les routes qui ymenent) se trouvent satures de reponse a des pings non sollicites. Voir : ftp ://ftp.cert.org/pub/cert advisories/CA-98.01.smurf

Page 98: Linux Reseau

98 CHAPITRE 6. SECURITE RESEAU SUR LINUX

6.10.3 Denial of Service (DoS) attacks

En pratique il y a 2 DoS :– remplir les fichiers de log de la machine cible– ”couper” la machine cible du monde si le soft est configure pour bloquer

automatiquement l’acces aux services par rapport a l’adresse IP sourcedans le cadre d’un ”stealth scan” ou scan UDP.

ParadeRajouter l’adresse IP source dans /etc/hosts.deny a partir de tcp wrappers

pour courir moins de risques.

6.10.4 IP spoofing

Ce sont des paquets IP qui arrivent de l’exterieur avec une adresse sourcetrafiquee (forged), paraissant etre une adresse du reseau local.

ParadePrevue dans /etc/init.d/netbase active 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 addressdoesn’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 problemsif you use asymmetric routing (packets from you to a host take a different paththan packets from that host to you) or if you operate a non-routing host whichhas several IP addresses on different interfaces. To turn rp filter off use :

echo 0 > /proc/sys/net/ipv4/conf/<device>/rp_filteror

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

6.10.5 Non-blind spoofing

Using the spoofing to interfer with a connection that sends packets alongyour subnet (so generally one of the 2 hosts involved is located on your subnet,or all data traffic has to be passing your network device,... you might considertaking a job at some transatlantic route provider).

6.10.6 Blind spoofing

Using the spoofing to interfer with a connection (or creating one), that doesnot send packets along your cable.

6.10.7 Scan de ports

Voici les conseils de Guy Brand <[email protected]> : Une des premiereschoses qu’un pirate fera pour attaquer un serveur est de ”scanner” tous les portsde ce dit serveur pour voir quels services tournent. Il faut donc trouver une so-lution pour contrer ce genre d’attaque des qu’elles arrivent.

Parade– Portsentry Logge les acces aux ports IP. Quand il detecte certaines ac-

tions peut executer automatiquement des parades :– Renseigne /etc/hosts.deny

Page 99: Linux Reseau

6.10. PRINCIPALES ATTAQUES RESEAU ET PARADES 99

– Fait des ipchains– Envoi d’un message au provider de l’attaquant avec les logs de ma ma-

chine (donc heure, date et IP), ce qui est en general assez dissuasif.– Courtney Courtney vous permet d’ecouter tout un reseau local pour les

attaques type Satan (scan de ports). Il ecoute le reseau local et identifie lesmachines sources d’attaques Satan. Courtney est un script Perl. Il recoitdes informations de tcpdump et compte le nombre de nouveaux servicesque contacte une machine en un temps defini. Si une machine se connectea un nombre important de services dans cette periode de temps, courtneyidentifie cette machine comme un pirate potentiel par attaque SATAN.Les options de courtney vous permettent de parametrer un mail sur lequelvous recenserez toutes les attaques sur votre serveur (ou votre reseau lo-cal). On peut modifier courtney pour qu’il firewallise les machines piratespar le biais de ipfwadm. Cette modification est tres simple, il suffit derajouter a la ligne 1231 :system("/sbin/ipfwadm -I -a deny -S $host -o");L’option -o de ipfwadm vous permet de continuer de logguer les connexionssur le serveur mais de ne pas y repondre. Tres utile pour voir si la machinepirate continue d’attaquer pendant longtemps.

– SentrySentry est un moyen plus radical et plus efficace que courtney pour parerles attaques de type SATAN. Sentry fait partie du projet Abacus. Leprojet Abacus est une initiative pour mettre a disposition a la communauteInternet des logiciels de detection d’intrusion qui soient generiques, stables,et qui demandent peu en maintenance. Sentry a un nombre d’options pourdetecter les scans de port, et quand il en detecte il reagit de plusieursfacons :– Un log pour indiquer l’incident par syslog()– La machine est automatiquement ajoutee dans /etc/hosts.deny pour

TCP Wrappers.– Le serveur local est automatiquement reconfigure pour ignorer tous les

paquets de la machine pirate par le biais de ipfwadm.Pour plus d’informations a propos de sentry allez voir : http ://www.psionic.com

6.10.8 Ecoute du reseau

Une machine du reseau local peut ecouter le reseau ou ”sniffer” et ainsirecuperer des mots de passe et commettre d’autres indiscretions.

Parade

Reperer les interfaces reseaux en mode promiscuous par un antisniffer

– neped antisniffer http ://apostols.org/projectz/neped detecte les in-terfaces en mode promiscious. Voir aussi : http ://www.l0pht.com/antisniff

– sentinel semble un peu mieux fourni que neped (plus de methodes dedetection).http ://www.packetfactory.net/Projects/sentinel/Sentinel [3] tourne sous Linux mais necessite Libnet [3]. [3] http ://www.packetfactory.net/Projects/

Page 100: Linux Reseau

100 CHAPITRE 6. SECURITE RESEAU SUR LINUX

6.11 Cryptage des communications

L’utilisation de ssh est vivement recommandee. ssh crypte les paquets trans-mis sur le reseau et evite en particulier que des indiscrets decouvre des mots depasse en ecoutant le reseau.

6.12 En savoir plus

zmore /usr/doc/HOWTO/Security-HOWTO.gz

Page 101: Linux Reseau

Chapitre 7

Filtrage, routage etmasquage des paquets IP

Un PC Linux muni de plusieurs interfaces reseaux peut faire routeur. Lacommande ipchains permet de dire au noyau Linux comment filtrer les paquetsIP. Linux peut donc jouer le role de firewall, c’est a dire de protection d’un reseauvis a vis de l’Internet. Elle permet aussi de masquer les adresses IP, c’est a direde cacher un reseau Intranet vis a vis d’Internet, tout en permettant a l’Intranetde communiquer, sous controle, avec Internet. Des serveurs proxy permettentaussi de faire des requetes sur Internet au nom des machines du reseau interne.

7.1 Qu’est-ce qu’un firewall ?

Un firewall est une interface qui protege un reseau prive du reste d’Internet.Il est concu pour controler le flux de paquets en se basant sur l’adresse IP sourceet destination, le port et le type contenu dans chaque paquet.

Plusieurs techniques de firewall sont disponibles :– le routage (forward) : recoit un paquet IP sur un interface reseau et la

renvoie sur un autre– le filtrage : ne route un paquet IP que s’il satisfait a des regles portant

sur les adresses sources et destination, les ports, le protocole, le type depaquet et les interfaces reseau en jeu.

– le masquage : le firewall fait suivre le paquet vers Internet mais en chan-geant les adresses et ports, faisant croire (d’ou le nom masquage, mas-querade en anglais) que le paquet vient de lui. Au retour de la reponse ilremodifie l’en tete du paquet et l’envoie a la machine demandeuse. Ainsi,les machines du reseau interne sont completement invisibles de l’exterieurmais peuvent neammoins faire des requetes sur Internet.

– serveur proxy : c’est un serveur qui fait la requete a la place de votremachine et lui renvoie le resultat. C’est une solution pour donner l’accesInternet a des machines d’un reseau prive. Utilise couramment pour leweb, il demande de parametrer le serveur proxy sur le client WWW

– transparent proxy : la machine du reseau prive definit la machine trans-parent proxy comme routeur par defaut. Elle fait sa requete, par exemplehttp, normalement vers Internet. Les paquets IP arrivent sur le routeur.

101

Page 102: Linux Reseau

102CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP

Le dispositif transparent proxy redirige par exemple, les paquets pour leport de destination 80 vers le port local 8080 ou ils sont traites par leserveur proxy squid. Donc c’est le mecanisme proxy mais il n’y a pas adefinir de serveur proxy sur les machines clientes.

– le forward de port : normalement, les machines d’un reseau prive ne sontpas accessibles depuis l’Internet. Tous les serveurs doivent etre installessur le firewall, (ou des machines sur Internet). Cependant, il est possibled’acceder depuis Internet un serveur du reseau prive par le forward deport. Il revient a dire que les requetes venant de l’Internet pour le port 80du firewall sont redirigees sur le port 80 d’une machine du reseau prive.

Il existe differents outils de firewalls pour Linux :– Fonctions de filtrage et de masquage integre dans le noyau : ipfwadm en

noyau < 2.2 et ipchains pour les noyaux 2.2, iptables et Netfilter pourle futur noyau Linux 2.4.

– IPfilter (origine BSD) sur noyau Linux 2.0 http ://coombs.anu.edu.au/~avalon/ip-filter.html

7.2 Masquage : permettre a un reseau prive d’accedera Internet

+----------+| | Ethernet| A-box |::::::| |.2 : 192.168.1.x+----------+ :

: +----------+ PPP link/Ethernet+----------+ : .1 | Linux | ppp0| | :::::::| Routeur |:::::::::::::::::::// Internet| B-box |:::::: eth1| | eth0 193.54.230.3| |.3 : +----------++----------+ :

:+----------+ :| | :| C-box |::::::| |.4+----------+

| | || <- Reseau interne --> | | <--- Reseau externe --->| | |

Dans ce schema, la machine Linux Routeur est connectee a Internet par PPPou par Ethernet. Elle est la seule machine visible depuis Internet. Les autresmachines A-box, B-box, etc, ont des adresses IP privees en 192.168.1.x (cf RFC1597). Elles sont sur un reseau prive invisible depuis Internet. La machine LinuxRouteur est connectee a ce reseau prive par un interface Ethernet eth1.

Si la machine Linux Routeur est configuree en routeur IP avec masquaged’adresses, alors :

Page 103: Linux Reseau

7.2. MASQUAGE : PERMETTRE A UN RESEAU PRIVE D’ACCEDER A INTERNET103

– si les machines A-box, B-box, ... ont defini la machine Linux Routeurcomme gateway,

– Linux Routeur transmet les paquets IP du reseau interne vers le reseauexterne en changeant le port-source et mettant son adresse IP a la place del’adresse IP source. Il memorise les parametres originaux de la connexionTCP : (IP-source, port-source, IP-dest, port-dest). C’est le masquage.

– pour les machines de l’Internet les paquets paraissent provenir de LinuxRouteur

– quand Linux Routeur recoit un paquet TCP de l’exterieur, il examinesi le port-dest est un de ceux qui ont ete attribues precedemment par lemasquage. Si c’est le cas il retrouve l’adresse IP et le port d’origine, corrigele paquet IP et le renvoie a la machine a qui il est destine.

– Des protocoles particuliers comme ftp qui ouvre une nouvelle connexionTCP nommee ftp-data necessitent le chargement d’un module du noyau.

– Une machine du reseau interne ne peut etre appelee depuis Internet, saufsi on configure sur la machine Linux Routeur le ”forward de port”.

7.2.1 Configuration du noyau ( > 2.2.0 )

Voici les options a prendre lors de make config– Prompt for development and/or incomplete code/drivers (CONFIG EXPERIMENTAL) :

YES. Pas requis pour IP MASQ, mais permet au noyau de creer les mo-dules MASQ et d’activer l’option pour le forward de port.

– Enable loadable module support (CONFIG MODULES) : YES. Pour char-ger les modules IP MASQ

– Networking support (CONFIG NET) : YES– Packet socket (CONFIG PACKET) : YES. C’est optionnel, mais permet

de deboguer tout probleme avec tcpdump– Kernel/User netlink socket (CONFIG NETLINK) : YES. Optionnel mais

permet le log des acces au firewall.– Routing messages (CONFIG RTNETLINK) : NO– Network firewalls (CONFIG FIREWALL) : YES. Permet d’utiliser l’outil

de firewall : ipchains– TCP/IP networking (CONFIG INET) : YES– IP : advanced router (CONFIG IP ADVANCED ROUTER) : NO. C’est

independant de ipchains/masq. Ne sert que pour CONFIG IP ROUTE VERBOSE.– IP : verbose route monitoring (CONFIG IP ROUTE VERBOSE) : YES

Utile si on veut utiliser le code de routage pour rejetter et logger lesspoofed packets (paquets IP trafiques venant de l’Internet avec commeadresse source, une adresse du reseau interne)

– IP : firewalling (CONFIG IP FIREWALL) : YES– IP : firewall packet netlink device (CONFIG IP FIREWALL NETLINK) :

YES. Optionnel mais ameliore le log des acces au firewall.– IP : transparent proxy support (CONFIG IP TRANSPARENT PROXY) :

YES. Permet de rediriger un paquet IP vers un autre port du firewall cequi fait croire aux machines du reseau prive qu’elles interrogent directe-ment un serveur Internet alors qu’elles passent par un ”transparent proxyserver” installe sur le firewall. La redirection s’indique par ipchains -jREDIR.

– IP : masquerading (CONFIG IP MASQUERADE) : YES. Active le mas-

Page 104: Linux Reseau

104CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP

quage d’adresses IP. Cette option active automatiquement ip always defrag.Ceci evite d’avoir a filtrer des fragments de paquets IP, ce qui peut etreproblematique, car les fragments suivant le premier n’ont plus d’adresseIP.

– IP : ICMP masquerading (CONFIG IP MASQUERADE ICMP) : YES.Idem pour ICMP. Utile pour diagnostics.

– IP : masquerading special modules support (CONFIG IP MASQUERADE MOD) :YES. Optionnel, mais permet le forward de port.

– IP : ipautofw masq support (EXPERIMENTAL) (CONFIG IP MASQUERADE IPAUTOFW) :NO

– IP : ipportfw masq support (EXPERIMENTAL) (CONFIG IP MASQUERADE IPPORTFW) :YES. Active le forward de port. Permet d’acceder depuis Internet des ser-veurs du reseau interne par SMTP, TELNET et WWW. FTP necessiteun autre patch.

– IP : ip fwmark masq-forwarding support (EXPERIMENTAL) (CONFIG IP MASQUERADE MFW) :NO. Il est recommande d’utiliser plutot IPMASQADM et IPPORTFW.

– IP : optimize as router not host (CONFIG IP ROUTER) : YES– IP : GRE tunnels over IP (CONFIG NET IPGRE) : NO. Sert a activer

un tunnel PPTP ou GRE via une machine IP MASQ– IP : TCP syncookie support (not enabled per default) (CONFIG SYN COOKIES) :

YES. Recommande pour la securite reseau.– Network device support (CONFIG NETDEVICES) : YES. Obligatoire :

Support d’interface reseau.– Dummy net driver support (CONFIG DUMMY) : YES. Utile pour debug.– /proc filesystem support (CONFIG PROC FS) : YES. Necessaire pour

activer le routage (IP forward)Compilation du noyau et mise en placeSi le repertoire /lib/modules/2.2.17 existe deja, on le sauvegardera.

make dep;make cleanmake zImage; make modulesmake modules_installcp arch/i386/boot/zImage /boot/vmlinuz-2.2.17rm /vmlinuzln -s /boot/vmlinuz-2.2.17 /vmlinuzvi /etc/lilo.conf/sbin/liloreboot

7.2.2 Configuration du masquage

La machine Linux Routeur a 2 interfaces reseaux. Le noyau sait reconnaıtreune deuxieme carte, mais si ce sont des cartes ISA, il faut veiller a ce qu’ellesn’aient pas memes IRQ et adresses IO.

[morel@phoebus morel]$ ifconfiglo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:3924 Metric:1RX packets:62531 errors:0 dropped:0 overruns:0 frame:0TX packets:62531 errors:0 dropped:0 overruns:0 carrier:0

Page 105: Linux Reseau

7.2. MASQUAGE : PERMETTRE A UN RESEAU PRIVE D’ACCEDER A INTERNET105

Collisions:0

eth0 Link encap:Ethernet HWaddr 00:20:AF:AA:AE:93inet addr:193.54.230.3 Bcast:193.54.230.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:108164 errors:770 dropped:0 overruns:795 frame:770TX packets:61826 errors:0 dropped:0 overruns:0 carrier:0Collisions:91Interrupt:10 Base address:0x300

eth1 Link encap:Ethernet HWaddr 00:60:08:70:7A:4Ainet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:42523 errors:0 dropped:0 overruns:0 frame:0TX packets:665 errors:0 dropped:0 overruns:0 carrier:0Collisions:2Interrupt:5 Base address:0x340

[morel@phoebus morel]$ routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifacelocalnet * 255.255.255.0 U 0 0 0 eth0192.168.1.0 * 255.255.255.0 U 0 0 0 eth1default routeur 0.0.0.0 UG 1 0 0 eth0

D’abord on teste que le noyau supporte les chaınes firewall pour IP par

ls /proc/net/ip_fwchains

Si ce fichier est absent, le noyau est mal configure.Le masquage s’ecrit avec au moins 3 commandes :

/sbin/ipchains -P forward DENY/sbin/ipchains -A forward -s 192.168.1.0/24 -j MASQecho "1" > /proc/sys/net/ipv4/ip_forward

– Ligne 1 : forward interdit sauf pour ce qui est specifie a la suite– Ligne 2 : pour les paquets dont l’adresse source provient du reseau interne,

forward avec masquage– Ligne 3 : activation du IP forward, le routage IP.Il serait dangereux de faire du masquage le defaut en ecrivant :

/sbin/ipchains -P forward MASQecho "1" > /proc/sys/net/ipv4/ip_forward

Ces commandes peuvent etre automatisees par un shell script active au boot.On lui fera egalement charger les modules necessaires.

#!/bin/sh## rc.firewall - SIMPLE IP Masquerade test for 2.2.x kernels using IPCHAINS## Load all required IP MASQ modules/sbin/depmod -a

Page 106: Linux Reseau

106CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP

/sbin/modprobe ip_masq_ftp#CRITICAL: Enable IP forwardingecho "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

7.2.3 Configuration d’une machine du reseau interne

Toute machine du reseau interne doit definir Linux Routeur comme gateway.Configuration d’une Linux Debian du reseau interne :

[morel@auger morel]$ cat /etc/init.d/network#! /bin/shifconfig lo 127.0.0.1route add -net 127.0.0.0IPADDR=192.168.1.2NETMASK=255.255.255.0NETWORK=192.168.1.0BROADCAST=192.168.1.255GATEWAY=192.168.1.1ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST}route add -net ${NETWORK}[ "${GATEWAY}" ] && route add default gw ${GATEWAY} metric 1

Le reseau etant lance, on a :

auger:/etc/init.d# ifconfiglo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:3924 Metric:1RX packets:18 errors:0 dropped:0 overruns:0 frame:0TX packets:18 errors:0 dropped:0 overruns:0 carrier:0Collisions:0

eth0 Link encap:Ethernet HWaddr 00:00:1C:B5:C6:96inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:500 errors:0 dropped:0 overruns:0 frame:0TX packets:41 errors:0 dropped:0 overruns:0 carrier:0Collisions:1Interrupt:10 Base address:0xe400

Kernel IP routing table

Page 107: Linux Reseau

7.3. LA COMMANDE IPCHAINS 107

Destination Gateway Genmask Flags Metric Ref Use Iface192.168.1.0 * 255.255.255.0 U 0 0 0 eth0default 192.168.1.1 0.0.0.0 UG 1 0 0 eth0

La machine Linux Routeur est donc gateway.

7.2.4 Tests

Sur cette machine du reseau interne– ping 192.168.1.1– ping isis.u-strasbg.fr : une machine d’Internet– ssh zoroastre.c-strasbourg.fr– ftp zoroastre.c-strasbourg.frDurant la session lancee par ssh zoroastre, la commande sur zoroastre

netstat -tn montre :

[morel@zoroastre morel]$ netstat -tnActive Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 193.54.230.20:22 193.54.230.3:61003 ESTABLISHED

que c’est la machine d’adresse 193.54.230.3 donc le Linux Routeur qui aappele zoroastre d’adresse 193.54.230.20 sur le port 22.

La machine du reseau interne qui a fait ssh zoroastre, netstat montrequ’elle a bien appele 193.54.230.20 sur le port 22.

[morel@auger morel]$ netstat -tnActive Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 192.168.1.2:1023 193.54.230.20:22 ESTABLISHED

7.3 La commande ipchains

La commande ipchains permet d’indiquer au noyau Linux les regles defiltrage en entree, en sortie ou lors du routage. Elle permet aussi le masquage.

Elle est reservee a root.Syntaxe : ipchains -h

7.3.1 Chaınes predefinies

Au depart, 3 listes de regles sont predefinies : input, output, forward. Ellessont appelees chaınes firewall ou chaınes tout court.

Quand un paquet arrive par l’interface reseau dans la machine, le noyauutilise la chaıne input pour decider ce qu’il fait de ce paquet. Si ce paquetsurvit a cette etape, alors le noyau decide ou il va l’envoyer, c’est le routage.S’il est destine a une autre machine il consulte la chaıne forward. Enfin, justequand le paquet va sortir, le noyau consulte la chaıneoutput.

Une chaıne est une liste de regles. Chaque regle dit ”si le paquet a tel header,voici ce qu’il faut en faire”. Si le header du paquet ne correspond pas a la regle,le noyau examine la regle suivante de la meme chaıne. Finalement s’il n’y a plus

Page 108: Linux Reseau

108CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP

de regle, le noyau consulte la ”policy” de la chaıne, c’est a dire la decision pardefaut. Si on veille a la securite cette decision par defaut est DENY ou REJECT.

En Linux Debian ipchains fait partie du package netbase. La version 1.3.4n’est pas la plus recente mais elle est stable.

L’utilisateur peut aussi definir ses propres chaınes.

7.3.2 Manipulation des chaınes

– -F : (F comme flush) supprime toutes les regles d’une chaıne, (mais pasla policy).

– -A : ajoute une regle a une chaıne– -P : fixe la policy (c’est a dire l’action par defaut) d’une chaıne a target– -L : liste les regles d’une chaıne si specifiee, de toutes sinon.– -D : effacement d’une regle dans une chaıne– -N : creation d’une chaıne– -X : suppression d’une chaıneExemples :– ipchains -F input : supprime toutes les regles de la chaıne input– ipchains -F : supprime toutes les regles de toutes les chaınes– ipchains -A forward -s 192.168.1.0/24 -j MASQ : ajoute une regle

a la chaıne forward– ipchains -P forward DENY fixe la policy de la chaıne forward a DENY– ipchains -L : liste les regles de toutes les chaınes (mais n’indique pas

l’interface).phoebus:/home/morel# ipchains -LChain input (policy DENY):target prot opt source destination portsACCEPT all ------ anywhere anywhere n/aACCEPT all ------ 192.168.1.0/24 anywhere n/aACCEPT all ------ anywhere phoebus.c-strasbourg.fr n/aDENY all ----l- 192.168.1.0/24 anywhere n/a

Chain forward (policy DENY):MASQ all ------ 192.168.1.0/24 anywhere n/a

Chain output (policy DENY):ACCEPT all ------ anywhere anywhere n/aACCEPT all ------ anywhere 192.168.1.0/24 n/aACCEPT all ------ localnet/24 anywhere n/aDENY all ----l- anywhere 192.168.1.0/24 n/a

7.3.3 Specification d’une regle

– -s : Adresse IP source, s’ecrit de 4 manieres :

1. zoroastre.c-strasbourg.fr : nom de domaine

2. 193.54.230.20 : adresse IP

3. 193.54.230.0/255.255.255.0 : tranches d’adresse de 193.54.230.0 a 193.54.230.255

4. 193.54.230.0/24 : meme tranche d’adresses. 0/0 designe toute adresseIP.

Page 109: Linux Reseau

7.4. EXEMPLES DE FILTRAGE 109

Dans le cas de TCP ou UDP, un numero ou un nom de port peut suivre.Dans le cas de ICMP, on peut indiquer le type ICMP. Liste par ipchains-h icmp

– -d : Adresse IP destination, meme regles d’ecriture– -i : interface. Dans la chaıne input c’est celui par ou arrive le paquet,

dans output par ou il sort, dans forward vers ou il est dirige. Si l’interfacen’existe pas (ex : ppp0), il n’y a pas d’erreur.

– -p : protocole (tcp, udp, icmp)– -y :– -j : Action (Target) :

– ACCEPT : permet au paquet de continuer– DENY : detruit le paquet– REJECT : detruit le paquet et en plus genere un message de reponse

ICMP host unreachable– MASQ : masquage du paquet (valable uniquement dans la chaıne for-

ward) CONFIG IP MASQUERADE doit etre defini dans le noyau.– REDIR : redirige vers un port local, on peut l’indiquer a la suite. Valable

pour la chaıne input et les chaınes utilisateur. (uniquement pour TCP etUDP) CONFIG IP TRANSPARENT PROXY doit etre configure dansle noyau

– RETURN : revient a la chaıne appelante, sinon execute l’action definiepar -P chaıne.

– autre nom : chaıne definie par l’utilisateur– -l : logCertains parametres peuvent etre nies par le caractere !, ainsi :– -i ! eth0 : tout interface sauf eth0– -p ! tcp : tout protocole sauf tcp– -p tcp ! -y : tout paquet tcp sauf ceux marques du flag SYN.– -s ! 192.168.1.1 : toute adresse IP source sauf 192.168.1.1

7.4 Exemples de filtrage

7.4.1 Test du ping

Dans l’exemple suivant, sous root :– ping localhost marche– par ipchains -A input -s localhost -p icmp -j DENY on interdit en

entree tout paquet ICMP ayant comme adresse source 127.0.0.1– ping localhost ne marche plus– on efface la regle precedente– ping localhost remarche

phoebus:/home/morel# ping -c 1 localhostPING localhost (127.0.0.1): 56 data bytes64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.8 ms

--- localhost ping statistics ---1 packets transmitted, 1 packets received, 0% packet lossround-trip min/avg/max = 0.8/0.8/0.8 msphoebus:/home/morel# ipchains -A input -s localhost -p icmp -j DENY

Page 110: Linux Reseau

110CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP

phoebus:/home/morel# ping -c 1 localhostPING localhost (127.0.0.1): 56 data bytes

--- localhost ping statistics ---1 packets transmitted, 0 packets received, 100% packet lossphoebus:/home/morel# ipchains -D input -s localhost -p icmp -j DENYphoebus:/home/morel# ping -c 1 localhostPING localhost (127.0.0.1): 56 data bytes64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.6 ms

--- localhost ping statistics ---1 packets transmitted, 1 packets received, 0% packet lossround-trip min/avg/max = 0.6/0.6/0.6 ms

7.4.2 Masquage standard

Le package Debian ipmasq genere au boot les chaınes de filtrages et demasquage.

Lancement par /etc/init.d/ipmasqPar ipmasq -d, il genere les commandes ipchains sans les executer. Voici

pour notre machine Linux Routeur a deux interfaces Ethernet :

/sbin/ipchains -P input DENY/sbin/ipchains -P output DENY/sbin/ipchains -P forward DENY/sbin/ipchains -F input/sbin/ipchains -F output/sbin/ipchains -F forward/sbin/ipchains -A input -j ACCEPT -i lo/sbin/ipchains -A input -j ACCEPT -i eth1 -s 192.168.1.1/255.255.255.0/sbin/ipchains -A input -j ACCEPT -i eth0 -d 193.54.230.3/32/sbin/ipchains -A input -j DENY -i eth0 -s 192.168.1.1/255.255.255.0 -l/sbin/ipchains -A forward -j MASQ -i eth0 -s 192.168.1.1/255.255.255.0/sbin/ipchains -A output -j ACCEPT -i lo/sbin/ipchains -A output -j ACCEPT -i eth1 -d 192.168.1.1/255.255.255.0/sbin/ipchains -A output -j ACCEPT -i eth0 -s 193.54.230.3/255.255.255.0/sbin/ipchains -A output -j DENY -i eth0 -d 192.168.1.1/255.255.255.0 -l

Explication :– On fixe la policy des chaınes input, output et forward a DENY : aucun

paquet IP ne rentre, ne sort, n’est route.– On supprime toutes les regles des chaınes input, output et forward.– On ajoute a la chaıne input la regle -j ACCEPT -i lo : on accepte tout

paquet qui rentre sur l’interface lo– On ajoute a la chaıne input la regle -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 pouradresse source les adresses 192.168.1.1 a 192.168.1.255, c’est a dire le reseauinterne.

– On ajoute a la chaıne input la regle -j ACCEPT -i eth0 -d 193.54.230.3/32 :on accepte tout paquet qui rentre sur l’interface eth0 et ayant comme

Page 111: Linux Reseau

7.4. EXEMPLES DE FILTRAGE 111

adresse destination 193.54.230.3 c’est a dire l’adresse Internet de LinuxRouteur.

– On ajoute a la chaıne input la regle -j DENY -i eth0 -s 192.168.1.1/255.255.255.0-l : on rejette tout paquet qui rentre sur l’interface eth0 et ayant commeadresse source une adresse du reseau interne et on ecrit les acces dansle log (spoofing). Tous les autres paquets sont rejetes conformement a lapolicy de input, mais sans etre logges. Si on veut les logger il faut ajouterune derniere regle :ipchains -A input -l -j DENY

– On ajoute a la chaıne forward la regle -j MASQ -i eth0 -s 192.168.1.1/255.255.255.0 :on masque tout paquet qui va sur l’interface eth0 et ayant comme adressesource une adresse du reseau interne.

On ajoute dans la chaıne output les regles suivantes :– j ACCEPT -i lo : on accepte tout ce qui sort par l’interface lo.– -j ACCEPT -i eth1 -d 192.168.1.1/255.255.255.0 : on accepte tout

ce qui sort par l’interface eth1 ayant une adresse de destination du reseauinterne.

– -j ACCEPT -i eth0 -s 193.54.230.3/255.255.255.0 : on accepte toutce qui sort par l’interface eth0 ayant comme adresse source celle du LinuxRouteur.

– -j DENY -i eth0 -d 192.168.1.1/255.255.255.0 -l : on rejette toutce qui sort par l’interface eth0 ayant comme adresse de destination uneadresse du reseau interne et on logge les infractions.

7.4.3 Antispoofing

Debian execute au boot dans le fichier /etc/init.d/netbase deux reglesantispoofing :

if [ -e /proc/net/ip_fwchains ]; thenecho -n "Setting up IP spoofing protection..."ipchains -D input -j DENY -l -s 127.0.0.0/8 -i ! lo 2>/dev/null || trueipchains -A input -j DENY -l -s 127.0.0.0/8 -i ! lo

# deny incoming packets pretending to be from our own system.# set your own IP address below (or use ‘hostname -i‘ to set it).my_ip=‘hostname -i‘ipchains -D input -j DENY -l -s $my_ip -i ! lo 2>/dev/null || trueipchains -A input -j DENY -l -s $my_ip -i ! loecho "done."

fi

La premiere regle ajoutee a la chaıne input rejette en entree sur tout interfaceautre que loopback tout paquet avec comme adresse source 127.0.0.0 et loggeces tentatives d’acces.

La deuxieme ajoutee a la chaıne input rejette en entree sur tout interfaceautre que loopback tout paquet avec comme adresse source l’adresse de la ma-chine.

Page 112: Linux Reseau

112CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP

7.5 Applications clientes supportant le masquage

– telnet, ssh, smtp, pop, http, archie– ping, traceroute– ftp avec module ip masq ftp.o– irc avec module ip masq irc.o– cu-seeme avec module ip masq cu-seeme.o– icq necessite l’option du noyau IPPORTFW et ...– real audio player avec module ip masq raudio.o– quake avec module ip masq quake.o– H.323 programs (MS Netmeeting, Netscape Cooltalk) : non supportes

7.5.1 Autoriser l’acces TCP dans un sens

On peut vouloir autoriser les connexions TCP dans un sens et pas dansl’autre. Par exemple on veut pouvoir acceder a un serveur WWW, mais onrefuse que celui-ci initialise des connexions depuis ce serveur.

Si on interdit les paquets TCP venant de ce serveur, on ne pourra plusl’acceder car une connexion TCP est une circulation TCP dans les deux sens.

La solution est de bloquer uniquement les paquets qui demandent une connexion.Ces paquets appeles SYN packets ont le flag SYN positionne et les flags ACKet FIN non positionnes. On peut les selectionner par l’option -y. Ainsi pourdesigner les SYN packets venant de 192.168.1.1 on ecrit : -p TCP -s 192.168.1.1-y

Exemple : on veut pouvoir acceder au serveur smtp 130.79.200.3 mais onrefuse qu’il se connecte par TCP sur le port smtp de notre machine :

ipchains -A input -p tcp ! -y -s 130.79.200.3 smtp -j ACCEPT

7.6 Forward de port

Package Debian ipportfw

7.7 Serveurs proxy

7.7.1 http

– junkbuster is an instrumentable proxy that filters the HTTP stream bet-ween web servers and browsers. Its main purpose is to enhance privacy

– squid– apache

7.7.2 telnet, ftp

– Logiciel TIS http ://www.tis.com– Logiciel SOCKS http ://www.socks.nec.com/socksfaq.html

Page 113: Linux Reseau

7.8. RACCORDEMENT D’UN RESEAU PRIVE A INTERNET PAR PPP113

7.8 Raccordement d’un reseau prive a Internetpar PPP

IP MASQUERADING permet l’acces a Internet a tout un reseau prive ensouscrivant un seul abonnement aupres d’un fournisseur d’acces. Si c’est unacces telephonique par PPP, ceci n’est pratiquable que si le lancement de pppdsur le firewall peut etre declenche automatiquement par diald. Sur Debian,installer le package diald.

Attention, meme si on utilise PPP, il faut configurer le support de SLIP dansle noyau.

7.9 Documentation

– Linux IPCHAINS HOWTO– Linux MASQUERADE HOWTO– apache

Page 114: Linux Reseau

114CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP

Page 115: Linux Reseau

Chapitre 8

Cryptage descommunications par ssh

8.1 Introduction

Ce document decrit comment installer et utiliser ssh sur Unix, Linux enparticulier. Il resume la documentation fournie avec le logiciel. Merci a BenoıtSpeckel pour ses conseils.

L’utilisation de ssh, en fait OpenSSH, version libre de SSH est vivement re-commandee pour communiquer avec une machine distante sur Internet. sshcrypte les paquets transmis sur le reseau et evite en particulier que des indis-crets decouvre des mots de passe en ecoutant le reseau. Mais en plus c’est uneparade a certains trous de securite d’Internet notamment que des paquets IPsoient trafiques de maniere qu’une machine se fasse passer pour une autre.

– ssh ou slogin remplace rlogin, rsh et telnet . Les applications X11lancees depuis une session ssh circulent dans un canal crypte. On n’a plusa s’occuper de la variable DISPLAY et l’authentification X11 par xauthest automatique.

– scp (secure copy) remplace rcp ou par extension ftp.– On peut s’authentifier par un systeme de cles publiques et privees 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 appele slogin)– d’outils de gestion de cles : 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

Page 116: Linux Reseau

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

decrivant le protocoleLivres– ”Reseaux” par Andrew Tanenbaum, Intereditions : explique au chapitre 7

la securite dans les reseaux, les bases de la cryptographies, les algorithmesDES, 3DES, IDEA, les algorithmes a cle publique, RSA, les protocolesd’authentification.

– ”Applied Cryptography” par Bruce Schneier, John Wiley & Sons, 1996traduit en francais sous le titre ”Crytographie appliquee”

8.3 Configuration de ssh

Examinez les fichiers de configuration :– /usr/local/etc/ssh/sshd config pour le serveur– /usr/local/etc/ssh/ssh config pour les clients

8.4 ssh serveur

Le daemon ou serveur sshd permet d’accepter des connexions ssh sur samachine. Apres avoir installe le package, le fichier de configuration de sshd setrouve en :

/etc/ssh/sshd_config

on lance le daemon sshd sous Linux Debian par :

/etc/init.d/ssh start

sshd ecoute le port tcp 22.

8.4.1 Controles d’acces

La librairie tcp-wrapper controle les acces a sshd avec les fichiers /etc/hosts.allowet /etc/hosts.deny. Exemple :

cat /etc/hosts.denyALL:ALLcat /etc/hosts.allowsshd : in2p3.fr u-strasbg.fr c-strasbourg.frsshdfwd-pop3 : in2p3.fr u-strasbg.fr c-strasbourg.frsshdfwd-imap2 : in2p3.fr u-strasbg.fr c-strasbourg.fr

Sont ainsi autorises :– les acces a sshd depuis les domaines in2p3.fr u-strasbg.fr c-strasbourg.fr– les applications X11 via le tunnel ssh sont autorisees pour les memes do-

maines– le forward de port est autorise pour pop et imap au profit des memes.

Page 117: Linux Reseau

8.5. SSH CLIENT 117

8.5 ssh client

Si on veut utiliser ssh entre les machines A et B, ssh doit etre installe sur lesdeux, sinon ssh se comporte comme rsh, la communication n’est pas cryptee.

8.5.1 Creation des cles RSA : ssh-keygen

1. Sur la machine A, creer les cles par la commande ssh-keygen qui creeune cle :– publique dans ~/.ssh/id rsa.pub. Cette cle publique doit etre copiee

sur les autres machines si l’on veut s’authentifier par RSA en s’y connec-tant.

– et une privee dans ~/.ssh/id rsaEn plus elle demande une passphrase qui sert a proteger la cle privee(mais n’est pas un password UNIX). Une bonne passphrase doit avoir de10 a 30 caracteres. Une simple phrase n’est pas une bonne passphrase cartrop facilement devinable ou n’offrant pas une entropie suffisante, c’est adire pas assez de desordre.

2. Copier la cle publique de la machine A (fichier ~/.ssh/id rsa.pub surmachine-A) sur la machine B dans ~/.ssh/authorized keys . Attention,une cle fait une ligne. Dans ce fichier ~/.ssh/authorized keys de lamachine B, on ajoutera les cles publiques des machines depuis lesquelleson se connectera sur B.Attention, faire :

chmod 600 $HOME/.ssh/authorized_keys

De meme .ssh ne doit pas etre group writable

ls -ld ~/.sshdrwxr-xr-x 2 morel morel 1024 May 4 10:37 /home/morel/.ssh/

3. Tester la connexion de A sur B en faisant sur A :

ssh machine-B

4. Faire de meme sur machine-B si on veut se connecter de B vers A

Si on veut changer la passphrase on fait :

ssh-keygen -p

8.5.2 Connexion : slogin ou ssh

1. Sur A, pour se connecter a B on fera

slogin machine-B (ou ssh B)Enter passphrase for RSA key ’user@A’:

On fournit cette passphrase et on est connecte sur B. On n’a pas eu afournir son password Unix sur B. Si on a le diagnostic Bad passphraseou s’il y a un autre probleme, le password Unix est demande mais lacommunication est toujours cryptee.Si on a un probleme, on fait

slogin -v machine-B

Page 118: Linux Reseau

118 CHAPITRE 8. CRYPTAGE DES COMMUNICATIONS PAR SSH

(-v comme verbose).Causes de problemes :– Les permissions sur les fichiers de cles dans .ssh/ sont trop laxistes.

Elles doivent etre comme ceci :-rw------- 1 morel morel 1654 Apr 4 17:51 authorized_keys-rw------- 1 morel morel 530 Feb 8 15:38 identity-rw-r--r-- 1 morel morel 334 Feb 8 15:38 identity.pub-rw------- 1 morel morel 2282 Apr 4 17:53 known_hosts-rw------- 1 morel morel 512 Apr 4 18:03 random_seed

– On n’a pas le meme userid sur machine-B , on fait :slogin -l userid_B machine-B

2. Pour X-Window ssh passe la variable DISPLAY, il est inutile de la valoriser.3. Les fichiers $HOME/.rhosts sont devenus inutiles, ils doivent etre effaces

parce qu’ils sont dangereux.

ssh remplace rsh

On peut par ssh executer des commandes sur une machine distante sans s’yconnecter. Ainsi sur la machine A :

slogin machine-B w

fait executer la commande w sur la machine B. Le resultat s’affiche sur monecran de la machine A.

Authentification par ssh

On a presente ci-dessus l’authentification par cle RSA, mais en fait sshaccepte les authentifications suivantes :

– mot de passe Unix (SSH AUTH PASSWORD)– fichier .rhosts comme dans les r-commandes rsh, rlogin (SSH AUTH RHOSTS).

On peut remplacer .rhosts par .shosts qui ne sera pas reconnu par lesr-commandes.

– cle RSA (SSH AUTH RSA)– fichier .rhosts ou (.shosts) et cle RSA cumules (SSH AUTH RHOSTS RSA)

Options de ssh

– L’option -v (verbose) decrit les etapes de l’etablissement de la connexion.Utile quand ssh ne marche pas.

– L’option -f met ssh en arriere plan.slogin -f machine-B xterm

– L’option -n met ssh en arriere plan et redirige stdin depuis /dev/null.C’est utilise 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 methode de gzip) les paquets echanges.Vivement recommande pour une session PPP par modem telephonique.

– L’option -c permet de choisir la methode de chiffrement :– idea (defaut)

Page 119: Linux Reseau

8.5. SSH CLIENT 119

– des– 3des– blowfish– arcfour– none(On tiendra compte des options prises a l’installation.)

8.5.3 Transfert de fichiers : scp

On peut copier des fichiers par scp (secure copy) qui demande l’authentifi-cation et crypte la communication.

Exemple :

scp machine-B:adm/users/ajout ajout

copie le fichier adm/users/ajout de mon repertoire sur la machine distantemachine-B dans mon repertoire courant sur la machine locale.

Syntaxe des noms de fichiers :Un nom de fichier peut contenir un nom d’utilisateur et de machine, ainsi

on peut ecrire :

scp dupond@machine-B:prog/truc durand@machine-C:prog/truc

Donc depuis la machine A, on peut commander un transfert entre B et C.Options de scp– C : compression– r : copie recursive de fichiers (copie le repertoire et les fichiers qu’il contient).– p : preserve date et permissions des fichiers copies.– c : choix de la methode de cryptage

8.5.4 Automatisation de l’authentification par cle publique

L’inconvenient dans l’authentification par cle publique est d’avoir a taper lapassphrase a chaque nouvelle connexion. ssh-agent est un processus tournanten permanence qui gere les cles privees pour l’identification par cle publique.Une fois lance, on lui communique par ssh-add son identite, c’est a dire ses cles$HOME/.ssh/id rsa, $HOME/.ssh/id dsa et $HOME/.ssh/identity en tapant lapassphrase. Par la suite, c’est ssh-agent qui fournit ces cles.

Au lancement de ssh-agent, deux variables d’environnement sont genereesqui permettent aux commandes ssh ulterieures de communiquer avec ssh-agent :

– SSH AGENT PID : numero du processus ssh-agent– SSH AUTH SOCK : nom du socket Unix (=tube nomme) permettant de com-

muniquer avec ssh-agentLa communication avec ssh-agent se fait de deux manieres :– Soit ssh-agent lance une commande indiquee en argument, un shell ou

Windows dans un sous-processus (il fait un fork) par exemple :ssh-agent bashDans ce shell bash les deux variables d’environnement SSH AGENT PID etSSH AUTH SOCK sont definies et permettent la communication avec ssh-agent.Quand on termine ce shell, ssh-agent est tue.

– Soit on recupere la definition de des deux variables que ssh-agent copiesur stdout :

Page 120: Linux Reseau

120 CHAPITRE 8. CRYPTAGE DES COMMUNICATIONS PAR SSH

ssh-agent > fichierfichier contient la definition de ces deux variables que l’on peut activerailleurs dans un autre shell en y faisant :. fichier

ssh-add communique a ssh-agent ma cle privee contenue dans $HOME/.ssh/identity.

$ ssh-addEnter 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)

Je tape la passphrase une fois. Par la suite quand je me connecterai ad’autres machines, je n’aurai plus a taper la passphrase

Options de ssh-add– ssh-add -l liste les cles gerees par ssh-agent.– ssh-add -D invalide toutes les cles aupres de ssh-agent.Le fonctionnement de ssh-agent est visible en passant les commandes sui-

vantes :– ps aux|grep ssh-agent– ssh-agent bash : On est dans un nouveau shell.– ps aux|grep ssh-agent : nouveau process ssh-agent est lance. Reperer

son PID– echo $SSH AGENT PID : c’est le PID de ssh-agent– echo $SSH AUTH SOCK : Verifier que c’est le chemin d’un socket de nom/tmp/ssh-xxxxxxxxx/agent.nnn

– Faites slogin machine : la passphrase vous est demandee parce que vousn’avez encore communiquee aucune identite a ssh-agent

– ssh-add -l. Vous obtenez la reponse The agent has no identities.– ssh-add : Votre passphrase est demandee. Vos cles privees sont lues et

conservees par ssh-agent– slogin machine : Vous pouvez maintenant vous connectez sans pass-

phrase aux machines ou vous avez defini votre cle publique.– Sortez du shell bash par exit ou Ctrl-D– ps aux|grep ssh-agent : ssh-agent a disparu.Pour travailler en X-Window que je lance par startx, j’ai un fichier .xinitrc

comme suit :

#!/bin/shxrdb -load $HOME/.Xresourcesexec /usr/bin/ssh-agent fvwm95

Je fais ssh-add dans la premiere fenetre xterm que j’ouvre.Ceci dit, il suffit que j’ajoute dans .bashrc la ligne :

[ $SSH_AGENT_PID ] && \[ "‘ssh-add -l‘" = "The agent has no identities." ] && ssh-add

pour faire un ssh-add si je ne l’ai pas fait a la main.Le script suivant de Benoıt Speckel est encore mieux. Appele dans .xsession

ou .bash profile il appelle ssh-agent s’il n’est pas lance ou bien positionnedans le shell courant les variables d’environnement SSH AUTH SOCK et SSH AGENT PID

Page 121: Linux Reseau

8.5. SSH CLIENT 121

qui permettent de communiquer avec ssh-agent. De cette maniere on tape unefois et une seule la passphrase quelque soit la fenetre X11 ou la console virtuelleou on se trouve.

#!/bin/sh#set -x# fichier .ssh-setup.sh :

if [ -z "$SSH_AUTH_SOCK" ]then agentfile=$HOME/.ssh/ssh-agent.info

# recuperer et verifier SSH_AUTH_SOCK et SSH_AGENT_PIDif [ -f $agentfile ]then . $agentfile >/dev/null

ps --pid $SSH_AGENT_PID 2>/dev/null |grep -q "^$LOGNAME .*ssh-agent" || SSH_AUTH_SOCK=

fi

# demarrage ssh-agentif [ -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

fiunset agentfile

fi

Le principe est le suivant : Quand ssh-agent est lance, il cree un ”tubenomme” (named pipe), c’est un fichier, par exemple /tmp/ssh-morel/ssh-24842-agentqui permet aux autres applications ssh de communiquer avec lui. Le nom de cefichier est retenu dans la variable SSH AUTH SOCK et le numero de processus dessh-agent est dans SSH AGENT PID.

Quand on lance ssh-agent, (-s signifie shell sh, mettre -c pour csh) il affichea l’ecran :

ssh-agent -sSSH_AUTH_SOCK=/tmp/ssh-morel/ssh-20765-agent; export SSH_AUTH_SOCK;SSH_AGENT_PID=20766; export SSH_AGENT_PID;echo Agent pid 20766;

L’astuce est de detourner ces definitions de variables dans un fichier, ici$HOME/.ssh/ssh-agent.info et de les utiliser pour mettre en communicationd’autres shells avec ssh-agent.

si $SSH_AUTH_SOCK est videalors

si le fichier $HOME/.ssh/ssh-agent.info existeje le fais executersi le process $SSH_AGENT_PID a mon LOGNAME ne tourne pas

alors SSH_AUTH_SOCK=vide

Page 122: Linux Reseau

122 CHAPITRE 8. CRYPTAGE DES COMMUNICATIONS PAR SSH

si $SSH_AUTH_SOCK est videalors

si le fichier $HOME/.ssh/ssh-agent.info existe, je l’effacej’inhibe l’interruption 1 (SIGHUP)j’execute ssh-agent a la place du process courant etdetourne sa sortie dans le fichier $HOME/.ssh/ssh-agent.infoj’execute ce fichier pour valoriser les variables SSH_AGENT_PIDet SSH_AUTH_SOCKje lance ssh-add

8.6 Autres implementations de ssh

– putty est une version de ssh pour Windows : permet slogin depuis Win-dows mais pas scp.

– WinSCP est une version de scp pour Windows– niftytelnet-1.1-ssh-r3-beta.cpt equivalent MacIntosh de Teraterm

avec ajout ssh :http://www.lysator.liu.se/~jonasw/freeware/niftyssh/

– LeechFTP client ftp Windows pouvant fonctionner au travers d’un tunnelsshhttp://stud.fh-heilbronn.de/~jdebis/leechftp/

– lsh is a free implementation of the ssh version 2 protocolhttp://www.net.lut.ac.uk/psst/

Page 123: Linux Reseau

Chapitre 9

Clonage d’une machineLinux Debian

9.1 Introduction

La procedure d’installation en plusieurs etapes de la distribution Linux De-bian permet d’installer une machine en installant juste les disquettes ”Rescue” et”Drivers” puis en recopiant le systeme d’une autre machine par nfs en reseau lo-cal. Cette procedure est une idee de Benoıt Speckel <[email protected]>.

Cette manoeuvre de ”clonage” est delicate en soi, elle est d’autant plus diffi-cile que les outils dont on dispose sur la disquette rescue Debian sont vraimentrestreints et primitifs : mount, vi, zcat (filtre), star, ps, df, lilo...

Ce vi est en realite ae qui est beaucoup plus limite que le vrai vi, ce starn’est pas le tar de GNU.

9.2 Configuration d’une machine mere

9.2.1 Compilation d’un noyau

Il faut inclure le support de tous les devices des machines a cloner, en par-ticulier :

– cartes Ethernet (en modules)– disques SCSI

9.2.2 Packages

Il faut charger les packages qui seront utiles aux autres machines, au moinsau depart. En particulier :

– serveur X11 pour les differentes cartes graphiques : xserver...

9.3 Preparation archive sur machine mere

Machine mere = auger pour l’exemple.

123

Page 124: Linux Reseau

124 CHAPITRE 9. CLONAGE D’UNE MACHINE LINUX DEBIAN

9.3.1 Fichier tar

Pas de -P au tar puisqu’on recopie dans /target donc se mettre dans / pourne pas avoir un repertoire sans nom

#!/bin/sh# archive de clonageARCHIVE=~morel/clone.tar.gzLIST=~morel/tarlist.txtif [ ‘id -u‘ -ne 0 ]then

echo "Vous devez etre root"exit

ficd /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/liststar tzvf $ARCHIVE > $LIST

Il faut regarder attentivement la liste de l’archive. Regarder si elle ne contientpas des ././@LongLink pour des noms de fichiers de plus de 100 caracteres. Cecin’est pas supporte par star. Les exclure, c’est le cas plus haut de /var/state/apt/lists.

Taille de l’archive de clonage : de l’ordre de 150 Meg.

9.3.2 Exportation

Exemple : repertoire /home/morel exporte pour les machines du reseau193.54.230.0.

vi /etc/exports/home/morel 193.54.230.0/255.255.255.0(ro):wq/etc/init.d/nfs-server restart

193.54.230.0/255.255.255.0(ro) autorise toutes les machines de ce reseaude classe C a monter ce repertoire.

Voyez aussi les autorisations d’acces du tcp wrapper dans /etc/hosts.allowet /etc/hosts.deny

9.4 Installation de Debian sur la nouvelle ma-chine

1. Initialisation– copier resc1440.bin (rescue) et drv1440.bin (drivers) sur disquettes

par :dd if=resc1440.bin of=/dev/fd0 bs=512 conv=sync ; syncdd if=drv1440.bin of=/dev/fd0 bs=512 conv=sync ; sync

Page 125: Linux Reseau

9.4. INSTALLATION DE DEBIAN SUR LA NOUVELLE MACHINE 125

– boot disquette rescue, echec possible (mauvaise disquette, mauvais lec-teur)

– config clavier– creation filesystem ext2 + swap On peut la faire par le menu ou a la main

par Alt-F2. Exemple : creation d’un filessystem ext2 sur /dev/hda2avec un inode pour 16K octets, 4% d’espace reserve et controle desbadblocks :mke2fs /dev/hda2 -i 16384 -m 4 -c

– montage / (sera appele /target)– Install Operating System & Drivers. Choisir le media d’installa-

tion : /dev/fd0– relecture disquette rescue : mise en place noyau– lecture disquette driver : (echec possible)– choix des modules : net (3c509, ne2k-pci, tulip, ...), fs (nfs)– configuration reseau– Choose Network Interface : Choisissez eth0

2. Copie de l’archive.Quitter le menu a Install the base system :

Alt-F2ifconfig (test reseau: verifiez que eth0 apparaıt)mount -t nfs -o rsize=8192 auger:/home/morel /mntdf

On doit avoir quelque chose du genre :

/dev/ram0 //dev/hda2 /targetauger:/home/morel /mnt

Si echec du mount, soit probleme d’autorisation d’acces au serveur, diag-nostic : mount RPC : Program not registered (voir syslog du serveur),soit mauvaise lecture de la disquette drivers.Copier l’archive par :

cd /targetzcat </mnt/clone.tar.gz|starsync

sync pour etre sur que tout est ecrit sur disque.3. Parametrage

– Configuration des filesystems a monterOn corrige les noms de devices dans fstab :vi etc/fstab

– Configuration de liloCorrection du lilo.conf de la machine mere : adaptez les noms des de-vices.vi etc/lilo.confOn a le choix entre le noyau de l’installation Debian (vmlinuz-2.0.38)ou le noyau copie depuis la machine mere.Exemple :cat etc/lilo.confboot=/dev/hda2

Page 126: Linux Reseau

126 CHAPITRE 9. CLONAGE D’UNE MACHINE LINUX DEBIAN

root=/dev/hda2install=/boot/boot.bmap=/boot/mapvga=normaldelay=20image=/boot/vmlinuz-2.0.38

label=linuxread-only

Executer 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 ou on met lilo est bootableIci /dev/hda2. Le verifier par fdisk -l /dev/hda. si ce n’est pas le casbasculer le flag de boot en faisant : fdisk /dev/hda

– Configuration des modules a charger au bootEntrer en particulier le module du driver de la carte reseauvi etc/modules

– Configuration du reseau :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/networkvi etc/resolv.conf

– Nettoyage repertoire var– Nettoyage var/log– Creation des repertoires manquants :mkdir tmp ; chmod 1777 tmpmkdir procmkdir home

– Verification des daemons a demarrer au bootcd etc/rc2.d;lsOn empechera xdm de demarrer sur la console au prochain boot (sinonvous risquez des problemes avec le moniteur) en mettant en commentairela ligne :#:0 local /usr/bin/X11/X vt7dans /etc/X11/xdm/Xservers

– Demontage du filesystemcd /umount /target

9.5 Reboot

Le filesystem /target etant demonte on peut arreter sans crainte la machineet la relancer.

Si LILO echoue, c’est qu’il est mal installe. On doit rebooter avec la disquetterescue, monter la partition contenant / sur /target. On y corrige etc/lilo.confet reexecute lilo.

– Changer le password de root (c’est actuellement le meme que sur la ma-chine mere).

– Configurer X-Window par xf86config ou bien en allant editer directe-

Page 127: Linux Reseau

9.5. REBOOT 127

ment /etc/X11/XF86Config et /etc/X11/Xserver– Verifier la souris /dev/mouse ps ax|grep gpm– Nettoyage /etc/passwd /etc/group /etc/shadow /etc/hosts,– Charger /var/state/apt/lists

Page 128: Linux Reseau

128 CHAPITRE 9. CLONAGE D’UNE MACHINE LINUX DEBIAN

Page 129: Linux Reseau

Chapitre 10

Sendmail

10.1 Le service de mail de l’Internet

Le service de mail est constitue de plusieurs fonctions :– MTA : Un Mail Transfert Agent (MTA) envoit, recoit, route les messages

suivant le protocole SMTP. Exemples : sendmail, smail, exim, postfix.– MDA : L’ecriture des messages dans les boıtes aux lettres se fait par les

Mail Delivery Agent (MDA). Exemple : procmail, postfix.– MUA : Les logiciels de messagerie qui permettent de rediger des mes-

sages ou consulter sa boıte aux lettres sont des Mail User Agent (MUA).Exemples : mail, xmailtool, exmh, elm, pine, mutt. Ces MUA peuventconsulter des boıtes aux lettres sur des machines distantes par les proto-coles POP ou IMAP : fetchmail, Netscape. Sur PC : Eudora, Netscape.

Le service est organise de maniere a ne pas perdre de message. L’expediteurne recoit de notification que lorsque la delivrance au destinataire n’a pu se faire.

Le service de mail reste le moyen qui permet de communiquer avec le plusde personnes y compris sur des reseaux non Internet.

10.2 SMTP

C’est le protocole d’echange de mail d’Internet decrit 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 25helo phoebus.c-strasbourg.frmail from: <[email protected]>rcpt to: <[email protected]>dataDate: Wed, 26 Jun 1996 11:05:01 +0200 (MET DST)From: Jacques CHIRAC <[email protected]>To: <[email protected]>Subject: Felicitations

Bravo pour vos efforts en faveur du logiciel libre.

129

Page 130: Linux Reseau

130 CHAPITRE 10. SENDMAIL

Presidentiellement votre.JC.quit

Remarques :– Pour chaque ligne envoye par le client, le serveur repond, sauf quand on

est dans le corps du message.– Les mots cles helo, mail from etc sont en majuscules ou minuscules.– Le message, entre data et ”.” a une syntaxe decrite dans RFC 822. Il est

forme d’un en-tete compose de lignes commencant 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 etre falsifiees.

– Comme on le voit sur cet exemple, dans SMTP, on n’est pas assure del’authenticite du message, de l’expediteur en particulier.

– machine est un nom de machine sur laquelle un serveur de mail commesendmail ecoute sur le port tcp 25.

Pour chaque ligne envoye par le client, le serveur repond, sauf quand on estdans le corps du message.

10.2.1 Codes retour

Le code renvoye par le serveur est compose de 3 chiffres :– Le premier chiffre indique si la reponse est bonne (2) ou s’il y a une erreur

(5).– Le deuxieme chiffre indique une erreur de syntaxe (0) ou une reponse du

“mail system” (5).

10.2.2 Test d’un service SMTP

Un test pour voir si une machine offre un service SMTP est de se connectersur son port 25 en TCP, exemple :

$ telnet amon.u-strasbg.fr 25Trying 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 (MET DST)quit <-------------commande a taper221 amon.u-strasbg.fr closing connectionConnection 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 attenddes mails.

10.2.3 Verification de l’existence d’une boıte aux lettres

La commande VRFY permet de tester l’existence d’une boıte aux lettres.Soit a verifier la validite de l’adresse <[email protected]>

On verifie l’existence de la partie domaine de l’adresse par :

Page 131: Linux Reseau

10.3. EXTENSIONS A SMTP : ESMTP, MIME 131

$ host -t mx iness.c-strasbourg.friness.c-strasbourg.fr mail is handled by 5 zoroastre.c-strasbourg.fr

Le serveur de mail a contacter est donc zoroastre.c-strasbourg.fr. Onle fait en appelant le serveur par nc sur le port 25 et en passant la commandevrfy jacques.morel :

$ nc zoroastre.c-strasbourg.fr 25220 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)[email protected] [193.54.230.78]vrfy jacques.morel250 2.1.5 <[email protected]>quit221 2.0.0 auger.c-strasbourg.fr closing connection

– Le serveur s’annonce par une ligne commencant par le code 220 et seterminant par l’adresse IP de la machine appelante.

– Le client envoie vrfy jacques.morel– Le serveur repond 250 2.1.5 <[email protected]>.

Le code 250 est une reponse positive, suit l’adresse legale (zoroastre estun alias de auger).

Une reponse negative est accompagnee du diagnostic User unknown :

$ nc zoroastre 25220 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)[email protected] [193.54.230.78]vrfy dupond550 5.1.1 dupond... User unknownquit221 2.0.0 auger.c-strasbourg.fr closing connection

Attention, des serveurs peuvent renvoyer toujours une reponse positive.

10.2.4 Verification d’un alias

La commande EXPN de RFC 821 permet de resoudre (expand) les alias.Cherchons par exemple qui est l’administrateur de la machine zoroastre.c-strasbourg.fr :

$ nc zoroastre.c-strasbourg.fr 25expn root250 2.1.5 Jacques Morel <[email protected]>

Cette possibilite permet bien des indiscretions. Il est possible de la supprimersur le serveur.

10.3 Extensions a SMTP : ESMTP, MIME

SMTP est un protocole tres simple dont le principal inconvenient est den’autoriser que les caracteres ASCII sur 7 bits. Il y a deux extensions :

Page 132: Linux Reseau

132 CHAPITRE 10. SENDMAIL

– ESMTP : RFC 1651, permet de coder les caracteres sur 8 bits. Il lesaccepte du client et, si le destinataire ne les supporte pas, sait recoder sur7 bits (8BITMIME). Le mot cle EHLO a la place de HELO invite le serveura indiquer les extensions qu’il supporte.

– MIME : RFC 2045 a 2049, permet :– plusieurs corps dans un message, chacun etant marque 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 representation de tout caractere sur 7 ou 8 bits : un corps peutetre encode en 7bit, quoted-printable (representation presque li-sible de caracteres accentues : ”=” suivi des deux chiffres hexa du ca-ractere), base64 (codage de 3 octets sur 4, c’est a dire decoupe 24 octetsconsecutifs (3 x 8) en 4 paquets de 6 bits, 6 bits suffisant pour representerun caractere dans un alphabet commun a toutes les machines), 8bit,binary (codage sur 8 bits)

– l’indication du jeu de caractere utilise, exemple : charset=iso-8859-1

10.4 Interaction avec le DNS

Le DNS comporte des entrees MX qui indiquent pour un domaine particuliervers quelle machine le message doit etre envoye. Exemple :

host -t mx phase.c-strasbourg.frphase.c-strasbourg.fr MX 5 zoroastre.c-strasbourg.fr

Ainsi le courrier destine a [email protected] sera envoye surla machine zoroastre.c-strasbourg.fr . phase.c-strasbourg.fr ne designepas une machine.

On peut utiliser les MX records pour forcer le courrier a passer par unemachine centrale, ou pour atteindre des machines qui sont sur un autre reseauqu’Internet.

10.5 Caracteristiques de Sendmail

Sendmail est un MTA, il :– envoie des messages– recoit– route (relayage)– fait delivrer les messages dans les boıtes aux lettres– gere la file d’attenteSendmail est en concurrence dans Linux Debian avec exim et smail qui sont

plus simples.Sendmail date de 1983 et a pour auteur Eric Allman. Il reste le MTA le plus

utilise (55%), c’est surtout le plus fiable.Quelques caracteristiques de sendmail 8.9.3 :– Le relayage est interdit par defaut. Le relayage consiste a recevoir un

message non destine a la machine locale et a le renvoyer vers la machinedestinataire reelle. C’est beaucoup utilise par ceux qui font de la publicitesauvage sur le reseau.

Page 133: Linux Reseau

10.6. INSTALLATION 133

– Les messages dont le nom de domaine indique dans le champ Mail fromn’existent pas dans le DNS sont rejetes.

10.6 Installation

Package Debian sendmail Version : 8.12.3-7.1 (woody), 8.13.4-3 (sarge).Sendmail necessite aussi les packages libdb2 (gestion de base de donnees),m4 (macro-processeur), procmail (delivrance des messages dans les boıtes auxlettres)

Debian propose un shell script de configuration sendmailconfig qui s’executelors de la configuration du package :

– Le fichier de macros /etc/mail/sendmail.mc est cree,– 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 lanceA la suite on peut corriger cette configuration en editant /etc/mail/sendmail.mc

et en refaisant executer m4.

10.7 Documentation

Elle se trouve dans le package a part sendmail-doc.

10.7.1 Documentation sur la configuration

– Configuration par m4zmore /usr/doc/sendmail/cf.README.gz

– Installation, emploi de sendmail et description du fichier sendmail.cf :zmore /usr/share/doc/sendmail-doc/op/op.txt.gzgzip -cd /usr/share/doc/sendmail-doc/op/op.ps.gz|gv -Ou impression par :gzip -cd /usr/doc/sendmail/op.ps.gz|lpr

10.8 Configuration

Fichiers :– /etc/mail/sendmail.mc : configuration en syntaxe m4 pour generer 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 habilites a changer le

champ mail from :Methode recommandee :– copier /etc/mail/sendmail.mc dans un repertoire accessible par vous

sans etre root :mkdir ~/adm/sendmailcd ~/adm/sendmailcp /etc/mail/sendmail.mc config.mc

Page 134: Linux Reseau

134 CHAPITRE 10. SENDMAIL

– Verifier que votre fichier contient en tete une ligne :include(‘/usr/share/sendmail.cf/m4/cf.m4’)

– Creation du fichier config.cfm4 config.mc > config.cf

– Examiner config.cf– Test de la config : creer un fichier address.resolve contenant des adresses

a tester.cat > address.resolve << ENDuseruser@[email protected]@trou.la.la.fr...ENDchecksendmail -C ~/adm/sendmail/config.cf > test.txtExaminez le fichier test.txt. Vous y voyez toutes les transformations d’adressefaites.

– Si on est satisfait, on peut installer la nouvelle configuration sous root :cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.oldcp config.cf /etc/mail/sendmail.cfchmod 644 /etc/mail/sendmail.cf

10.8.1 Une configuration de ”mail host”

Un ”mail host” est un MTA autonome. Fichier config.mc

divert(-1)include(‘/usr/share/sendmail.cf/m4/cf.m4’)define(‘confDEF_USER_ID’,‘‘8:8’’)dnl uid:gid pour mail cf /etc/passwddefine(‘confCHECK_ALIASES’,‘True’)OSTYPE(‘linux’)undefine(‘UUCP_RELAY’)undefine(‘BITNET_RELAY’)FEATURE(redirect)FEATURE(always_add_domain)FEATURE(use_cw_file)dnl sendmail reads /etc/sendmail.cw to get alternate namesdefine(‘confMAX_MESSAGE_SIZE’, ‘3000000’)define(‘PROCMAIL_MAILER_PATH’, ‘/usr/bin/procmail’)FEATURE(access_db, hash -o /etc/mail/access)FEATURE(‘virtusertable’, ‘hash -o /etc/mail/virtusertable’)dnlFEATURE(local_procmail)MAILER(procmail)MAILER(smtp)

– Les commandes define affectent des valeurs a des parametres– confDEF USER ID : fixe le uid et le gid pour le userid mail cf /etc/passwd– confCHECK ALIASES : si True quand on fait newaliases va verifier que

l’adresse en partie droite est une adresse declaree dans le DNS (prend dutemps)

– OSTYPE(‘linux’) implique des options par defaut sur la localisation desfichiers voir /usr/share/sendmail.cf/ostype/linux.m4 qui ne contient

Page 135: Linux Reseau

10.8. CONFIGURATION 135

que :define(‘LOCAL_MAILER_PATH’, /bin/mail.local)dnl

– undefine(‘UUCP RELAY’) : met a indefini ce parametre : je ne fais pasrelais pour UUCP ni BITNET

– FEATURE(redirect) : rejette tout mail pour les adresses notees ”address.REDIRECT”dans /etc/aliases avec un message d’erreur : ‘551 User not local ; pleasetry address”. Exemple :noel:[email protected]

– FEATURE(always add domain) : ajoute le nom du domaine local aux adressesnon fqdn. Exemple : morel@zoroastre est transforme en [email protected]

– FEATURE(use cw file : le fichier /etc/mail/sendmail.cw est utilise pourindiquer des alias. Il contient par exemple :phase.c-strasbourg.frgoa.c-strasbourg.frstrasbourg.linuxfr.orgIl indique que tout courrier pour ces adresses doit etre delivre localement.

– define(‘confMAX MESSAGE SIZE’, ‘5000000’) : taille maximum en oc-tets pour un message recu, sinon renvoit avec un diagnostic.

– FEATURE(access db, hash -o /etc/mail/access) : permet d’accepterou de refuser des messages. /etc/mail/access est une table qui seratransformee en base de donnee accedee par hash coding. Exemple decontenu :193.54.230 OKrtc1.u-strasbg.fr RELAYusa.com 550 We don’t accept mail from spammerstnt2.everett.wa.da.uu.net 550 We don’t accept mail from spammerswww.free2blieve.com 550 We don’t accept mail from spammers– OK : J’accepte les mails en provenance de mon reseau 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 libelle. (les codes

d’erreur sont decrits dans RFC 821)– define(‘PROCMAIL MAILER PATH’, ‘/usr/bin/procmail’) : indique ou

se trouve procmail– FEATURE(local procmail) : dit que le courrier local sera delivre par proc-

mail– MAILER(procmail) : declare le mailer procmail– MAILER(smtp) : declare le mailer smtpLes bases de donnees access-db sont creees par :

cat /etc/mail/virtusertable|makemap -v hash /etc/mail/virtusertablecat /etc/mail/access|makemap -v hash /etc/mail/access

10.8.2 Limitation de la taille des messages

Il est necessaire de mettre une limite de la taille des messages envoyesou recus, faute de quoi le serveur risque des problemes d’allocation de pagesmemoires. La limite doit etre etablie en fonction de la taille de la memoire Ramet de la swap disponible. On peut controler cette taille a l’emission par smtp ou

Page 136: Linux Reseau

136 CHAPITRE 10. SENDMAIL

en local et a la reception.– define(‘confMAX MESSAGE SIZE’, ‘5000000’) : taille maximum en oc-

tets pour un message recu, sinon envoi d’un diagnostic.– define(‘SMTP MAILER MAX’, ‘20000000’) : taille maximum en octets

pour un message transporte par smtp, esmtp ou smtp8.– define(‘PROCMAIL MAILER MAX’, ‘20000000’) : taille maximum en oc-

tets pour un message delivre par procmail.

10.8.3 Suppression de la resolution d’alias par EXPN

La commande M4 :

define(’confPRIVACY_FLAGS’, ’needmailhelo, noexpn’)

genere dans sendmail.cf :

O PrivacyOptions=needmailhelo, noexpn

Oblige qu’une commande HELO ou EHLO soit passee avant la commandeMAIL et interdit la commande EXPN.

10.8.4 Une configuration de null client

Un null-client est une machine dont le sendmail renvoie tout le courrier aune autre dite smart host. La configuration doit comporter des regles antire-layage. Mais comme cette machine n’a pas a recevoir de mail il est preferablede ne pas laisser tourner sendmail en daemon. Il sera appele a chaque fois qu’ilfaut envoyer un message, mais il n’a pas a ecouter le port 25.

Fichier config.mc :

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 renvoye sur la machine zoroastre– MASQUERADE AS : fait apparaıtre le mail comme venant du domaine phase.c-strasbourg.fr

10.8.5 Sites miroirs pour tests

Ce sont des adresses qui font echo aux mails qu’elles recoivent :

[email protected]@[email protected]@alma.fr

Page 137: Linux Reseau

10.9. EXPLOITATION DE SENDMAIL 137

10.9 Exploitation de sendmail

10.9.1 Securite

Etant suid-root, sendmail est tres expose aux attaques. Il est donc recom-mande de fermer l’acces entrant au port smtp (25) de toute machine sauf pourun mail host.

sendmail est sous tcp-wrapper en Debian : inclure dans /etc/hosts.allow :

sendmail: all

On peut par la suite faire des restrictions d’acces.

10.9.2 Commandes d’exploitation

– runq : force le traitement de la file d’attente des messages localisee dans/var/spool/mqueue Shell script Debian executant sendmail -q

– newaliases : refait la base de donnees des alias a partir de /etc/aliases– mailq : interroge la file d’attente des messages /var/spool/mqueue– /usr/sbin/makemap : construit des base de donnees pour sendmail

10.9.3 Alias

Ils sont entres dans le fichier /etc/aliases. Exemple :

# Basic system aliases -- these MUST be present.MAILER-DAEMON: postmasterpostmaster: rootFaxMaster: root# Person who should get root’s mailroot: morel# Other aliasesJacques.Morel: morellabo: morel, dupond, durant,

[email protected],"|cat >>/usr/local/doc/archive-labo.txt"

congres: ":include:/home/morel/congres/adr.txt"

– le courrier pourroot, postmaster, etc est envoye a morel– le courrier pour Jacques.Morel est envoye a morel– labo est une liste : tout courrier envoye a labo sera redistribue a morel,dupond, etc

– "|cat >>/usr/local/doc/phase archive.txt" est une commande executeepar sendmail : elle copie le message a la liste labo au bout du fichier indique

– congres est aussi une liste contenu dans le fichier indique

10.9.4 Reglages fins

– messages timeouts : si la machine destinataire n’est pas joignable, sendmailenvoie a l’expediteur un avertissement au bout de 4h et au bout de 5 joursle previent qu’il detruit le message. Ceci peut etre modifie par l’optionOT5d/4h de sendmail.cf ou dans sendmail.mc par :

Page 138: Linux Reseau

138 CHAPITRE 10. SENDMAIL

define(’confTO_QUEUERETURN’, ’6d’)define(’confTO_QUEUEWARN’, ’8h’)

10.9.5 Fichier Log

L’activite de sendmail est enregistree dans /var/log/mail.log. Exempled’entree :

Dec 8 10:35:34 zoroastre sendmail[6112]: KAA06112:from=<[email protected]>, size=1329, class=0, pri=31329,nrcpts=1, msgid=<[email protected]>,proto=ESMTP, relay=callisto.caes.cnrs.fr [194.57.123.5]

Dec 8 10:35:34 zoroastre sendmail[6113]: KAA06112:to=<[email protected]>, delay=00:00:01, xdelay=00:00:00,mailer=local, stat=Sent

– une entree fait une ligne, ici decoupee pour la clarte.– chaque message est identifie par sendmail, ici KAA06112– on voit qu’une transaction fait au moins deux entrees (reception, emission)Regarder aussi le fichier /var/log/mail.err

10.10 Routage d’un domaine virtuel avec send-mail

Exemple : rediriger le courrier a destination du domaine strasbourg.linuxfr.orgvers tux.u-strasbg.fr

Au niveau du DNS :

$host -t mx strasbourg.linuxfr.orgstrasbourg.linuxfr.org MX 100 zoroastre.c-strasbourg.fr

Au niveau de la configuration de sendmail sur zoroastre : sendmail doitaccepter les courriers pour le domaine strasbourg.linuxfr.org et les routersur tux.u-strasbg.fr

zoroastre.mc contient :

FEATURE(‘use_cw_file’)dnlFEATURE(‘virtusertable’, ‘hash -o /etc/mail/virtusertable’)dnl

On cree sendmail.cf par :

#m4 zoroastre.mc > zoroastre.cf#cp zoroastre.cf /etc/mail/sendmail.cf#chmod 644 /etc/mail/sendmail.cf

/etc/mail/sendmail.cw contient :

strasbourg.linuxfr.org

/etc/mail/virtusertable contient :

@strasbourg.linuxfr.org %[email protected]

Page 139: Linux Reseau

10.10. ROUTAGE D’UN DOMAINE VIRTUEL AVEC SENDMAIL 139

On cree la ‘virtusertable’ et on fait relire a sendmail sa configuration par :

#cd /etc/mail#makemap hash virtusertable < virtusertable#kill -HUP sendmail.pid

Page 140: Linux Reseau

140 CHAPITRE 10. SENDMAIL

Page 141: Linux Reseau

Chapitre 11

Apache

11.1 Le serveur WWW Apache

11.1.1 WWW

HTTP, Hyper Text Transfer Protocol et HTML, Hyper Text Markup Lan-guage, ont ete concu au CERN en 1989 par Tim Berners-Lee qui a voulu im-pulser :

‘‘A wide-area hypermedia information retrieval initiative aiming togive universal access to a large universe of documents’’

HTTP est l’extension de la technique hypertexte au reseau. Un hypertexteest un texte contenant des renvois a d’autres textes (comme dans le programmeinfo de GNU). Ces renvois sont des pointeurs designant le texte avec sa localisa-tion. En HTTP, on appelle ce renvoi URL (Uniform Ressource Locator) appelemaintenant URI (Uniform Ressource Identifier). Denomination bien connue dutype :

methode://serveur:port/fichier#fragment?parametres

qui est devenue un standard (RFC 1738) tres utilise.La fonction d’un serveur Web est de repondre aux requetes de differentes

ressources (pages html, images, scripts, feuilles de style,...) faites par des clientssuivant le protocole HTTP. Une ressource peut etre aussi l’execution d’un pro-gramme sur le serveur. Dans ce cas la reponse du programme est renvoyee parle serveur sous forme d’une page HTML. L’interfacage entre le serveur http etle programme s’appelle CGI (Common Gateway Interface).

Le premier serveur httpd vient du CERN, le premier client MOSAIC deNCSA. Apache est l’heritier du serveur httpd de NCSA. Apache est un desserveurs les plus utilises sur Internet.

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

Page 142: Linux Reseau

142 CHAPITRE 11. APACHE

– RFC 2068 : Hypertext Transfer Protocol – HTTP/1.1. R. Fielding, J.Gettys, J. Mogul, H. Frystyk, T. Berners-Lee. January 1997.

– RFC 2616 : Hypertext Transfer Protocol – HTTP/1.1. R. Fielding, J.Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee. June1999.

HTTP est un protocole sans etat dans la mesure ou le serveur traite chaquetransaction independemment des autres. Il n’y a pas de notion de session dumoins a l’origine car il est prevu depuis RFC 2068 des connexions persistantes.Il prevoit le typage de la representation des donnees (Type MIME) et maintenantla possibilite de negocier ce type : un client peut dire je prefere des documentsen francais et des images au format *.png.

HTTP/1.1

Requete du client Une requete du client au serveur en HTTP/1.1 s’ecrit surdeux lignes :

Method SP Request-URI SP HTTP-Version CRLFHost: domain-server-name CRLF

Il peut s’y ajouter des lignes ”Request Header Fields” permettant de passerdes parametres supplementaires :

– If-Modified-since : voir GET conditionnel plus loin.– Accept-Language : preference sur la langue– Accept : preference sur les types de media– ...Exemple de preferences ponderees par un coefficient q envoyees par un client :

Accept-Language: fr; q=1.0, en; q=0.5Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6,

image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1

– Method– OPTIONS– GET : demande la ressource indiquee par l’URI– HEAD : fournit des infos sur la page demandee (Last-Modified, Content-Length,Content-Type...)

– POST : transfert de donnees a l’URI indiquee (utilise pour les reponsesa un formulaire)

– PUT : ecriture d’une ressource sur le serveur– DELETE : demande au serveur d’effacer la ressource associee a l’URI– TRACE

– Request-URI : URI terme un peu plus general que URL. Meme syntaxe.– HTTP-Version : HTTP/1.0 ou HTTP/1.1En principe HTTP utilise le port TCP 80.Exemple de requete :Avec HEAD :

HEAD / HTTP/1.1Host: www-phase.c-strasbourg.fr

Avec OPTIONS :

Page 143: Linux Reseau

11.1. LE SERVEUR WWW APACHE 143

OPTIONS * HTTP/1.1host: www-phase.c-strasbourg.fr

Avec GET :

GET /phase.html HTTP/1.1host: www-phase.c-strasbourg.fr

Exemple d’interrogation par telnet. C’est un bon test pour savoir si votreserveur apache marche :

$ telnet localhost 80Trying 193.54.230.20...Connected to zoroastre.c-strasbourg.fr.Escape character is ’^]’.HEAD / HTTP/1.1 <----- entre au clavierHost: www-phase.c-strasbourg.fr <----- entre au clavier

HTTP/1.1 200 OKDate: Wed, 14 Jun 2000 18:34:27 GMTServer: Apache/1.3.3 (Unix) Debian/GNULast-Modified: Tue, 18 Jan 2000 15:13:24 GMT <---- date maj page d’accueilETag: "d98af-1476-38848314"Accept-Ranges: bytesContent-Length: 5238Content-Type: text/html

Connection closed by foreign host.

Pour un controle :

$ ls -l /var/www/phase/phase.html-rw-rw-r-- 1 morel web 5238 Jan 18 16:13 /var/www/phase/phase.html

Reponse du serveur Toute reponse du serveur est precedee d’un en-tete faitd’une ou plusieurs lignes dont :

– Une Status-Line toujours presente au debut :HTTP-Version SP Status-Code SP Reason-Phrase CRLF

– Content-type : mime type– Content-length : longueur du document– Last-Modified : date mise a jour– Expires : duree de validite du document (optionnel) C’est une informa-

tion sur la duree de validite du document, sa date de fraıcheur en quelquesorte.

– et d’autres entity header– CRLF une ligne vide–Exemple d’en tete :

HTTP-1.1 301 Now where did I leave that URLLocation: http://xyz.abc.com/foo/bar.htmlContent-type: text/html

On voit ces en-tetes quand par telnet on passe des commandes HEAD.

Page 144: Linux Reseau

144 CHAPITRE 11. APACHE

HTTP/1.0

HTTP/1.0 est beaucoup plus simple : il ne supporte que 3 methodes : GET,POST, HEAD, OPTIONS et il n’y a pas a envoyer de ligne Host :

Apache le supporte aussi. Exemple de requete :

GET /phase.html HTTP/1.0 CRCR

(la requete doit etre suivi de deux retour chariot).Autre exemple :

$ telnet localhost 80Trying 127.0.0.1...Connected to localhost.Escape character is ’^]’.OPTIONS * HTTP/1.0

HTTP/1.1 200 OKDate: Sun, 18 Jun 2000 18:09:00 GMTServer: Apache/1.3.3 (Unix) Debian/GNUContent-Length: 0Allow: GET, HEAD, OPTIONS, TRACEConnection: close

Connection closed by foreign host.

GET

La commande GET permet de demander une ressource par un URI, maisen plus, on peut coller des parametres a la suite de l’URI. Dans ce cas, laressource est un programme ou un script que le serveur http fait executer en luitransmettant ces parametres. Les resultats sont des pages HTML que le serveurrenvoie au client (voir programmes CGI). La syntaxe est :

GET URI?param-1=val-1&param-2=val-2& ... &param-n=val-n

Ou param-i sont des noms de variables et val-i des chaınes de caracteresou les blancs sont remplaces par des + et les caracteres ascii > 120 codes sousla 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 associee a l’URIque si celle-ci est plus recente que celle qu’il a dans son cache (specifique aHTML/1.1). Il existe d’autres types de conditions.

11.2 Caracteristiques de Apache

C’est un logiciel libre produit par une cooperation organisee entre les volon-taires qui ont continue a ameliorer le serveur httpd de NCSA. Apache reprendtous les parametres de configuration de httpd NCSA.

Ses caracteristiques :

Page 145: Linux Reseau

11.3. DOCUMENTATION 145

– choix de modules qui se chargent quand apache demarre (Dynamic SharedObjects), grande variete de modules

– interface de programmation pour ecrire des modules– sites virtuels : un meme serveur peut heberger plusieurs sites Webs.

11.3 Documentation

– http://www.apache.org/– ”Apache” par Ben et Peter Laurie Editions O’Reilly (pas fameux, traduc-

tion francaise pire)– la doc fournie dans le package Debian apache-doc

Utilisation :lynx /usr/doc/apache/manual/index.htmlou 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 a 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-mande au debut de prendre les options par defaut proposees, il est toujourspossible de revenir dessus plus tard.

Who should the ServerAdmin be? [email protected] port should Apache listen on? [80]Do you want to manually choose which modules to load? [y/N] RC

Prendre les choix par defaut de Debian (note en majuscule) en tapant RC.

11.5 Lancement de Apache

On peut faire fonctionner Apache a travers inetd mais ce n’est pas du toutrecommande pour des questions de rapidite de service : on l’utilise donc endaemon et des le depart, apache se multiplie en plusieurs copies. En Debian ellese fait par le script :

/etc/init.d/apache start

Lancez apache faites : ps auxf|grep apache, vous voyez plusieurs processapache : le pere a le userid root, les fils www-data. Le pere ne traite pas derequetes des clients, c’est trop dangereux. Il s’occupe juste de creer des fils, oud’en tuer !

Page 146: Linux Reseau

146 CHAPITRE 11. APACHE

$ ps auxf|grep apacheUSER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMANDroot 13021 0.9 0.8 1904 1132 ? S 20:32 0:00 /usr/sbin/apachewww-data 13022 0.0 0.8 1924 1128 ? S 20:32 0:00 \_ /usr/sbin/apachewww-data 13023 0.0 0.8 1924 1128 ? S 20:32 0:00 \_ /usr/sbin/apachewww-data 13024 0.1 0.8 1924 1128 ? S 20:32 0:00 \_ /usr/sbin/apachewww-data 13025 0.1 0.8 1924 1128 ? S 20:32 0:00 \_ /usr/sbin/apachewww-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 : parametres generaux de fonctionnement + virtuals hosts– access.conf : restrictions d’acces– srm.conf : repertoires accessibles aux clientsmais il est fortement recommande de les fusionner dans httpd.conf. En

plus, il y a le fichier mime.typesDebian ajoute un cron.conf pour faire tourner les logs.Configuration minimale : Elle se fait en editant le fichier httpd.conf qui est

abondamment commente :

11.6.1 Parametres generaux

ServerType standalonePort 80User www-data <-------Group www-data <-------ServerAdmin [email protected] <-------ServerRoot /etc/apacheBindAddress *LoadModule env_module /usr/lib/apache/1.3/mod_env.so <-------LoadModule ... <-------ErrorLog /var/log/apache/error.log <-------LogLevel warnLogFormat ...CustomLog /var/log/apache/access.log common <-------PidFile /var/run/apache.pidLockFile /var/run/apache.lockServerName www-phase.c-strasbourg.fr <-------MinSpareServers 1MaxSpareServers 5StartServers 1MaxClients 150

En Debian tout est configure convenablement. Vous devez faire attention auminimum aux parametres suivants :

– www-data : c’est le userid et le groupe sous lesquels les copies de apaches’execute (et les programmes CGI). D’autres distributions Linux utilisentnobody.

Page 147: Linux Reseau

11.6. CONFIGURATION 147

– ServerRoot : c’est le repertoire ou vont se trouver les fichiers de configu-ration /etc/apache en Debian.

– LoadModule : choix des modules, c’est important, mais au debut vous vouslaissez guider par les choix par defaut de Debian.

– ErrorLog, CustomLog : emplacement des fichiers logs.– ServerName : c’est evidemment important. Cela ne se deduit pas automa-

tiquement du nom de la machine car souvent, comme chez moi, c’est unalias (un RR de type CNAME dans le DNS)

– Pour les autres parametres, les logs, le nombre de serveurs, laissez lesdefauts, vous verrez plus tard

11.6.2 Configuration des ressources

DocumentRoot /var/www/phase <------------UserDir public_html <------------DirectoryIndex index.htmlFancyIndexing on...AddLanguage en .en...LanguagePriority en fr deAccessFileName .htaccess <------------Alias /icons/ /var/www/icons/ <------------ScriptAlias /cgi-bin/ /var/www/cgi-bin/ <------------Alias /doc/ /usr/doc/ <------------

– DocumentRoot : c’est le repertoire racine de l’arborescence des pages Web.On peut en mettre ailleurs, voir directive Alias.

– UserDir : c’est le repertoire dans les Home directory des utilisateurs ou setrouveront leurs pages web personnelles accessibles par : httt ://url de votre site/~userid

– DirectoryIndex : indique que lorsque un client demande un repertoire(il termine l’URL par / ou non, voir mod dir), on lui fournit la pageindex.html

– AccessFileName : nom du fichier contenant des restrictions d’acces quel’on peut placer dans un repertoire (depend de AllowOverride)

– ScriptAlias : repertoire dont les fichiers s’executent comme des scriptCGI : /cgi-bin/ est l’URL path (correspond a http ://serveur/cgi-bin)/var/www/cgi-bin/ est le nom du repertoire correspondant (dans l’arbo-rescence Unix)

– Alias : permet de ranger des documents ailleurs que dans DocumentRoot.L’URL : http ://serveur/doc/) (n’oubliez pas le /) pointe sur le repertoire/usr/doc/de l’arborescence Unix. Cette specificite Debian fait que toute la doc estlisible par le Web.

11.6.3 Restrictions d’acces

<Directory /var/www> <------------Options Indexes FollowSymLinks <------------AllowOverride None <------------order allow,deny <------------

Page 148: Linux Reseau

148 CHAPITRE 11. APACHE

allow from all <------------</Directory>

<Directory /var/www/cgi-bin>AllowOverride NoneOptions ExecCGI FollowSymLinks

</Directory>

<Location /cgi-bin/phf*>deny from allErrorDocument 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 FollowSymLinksAllowOverride Noneorder allow,denyallow from all</Directory>

<DirectoryMatch ^/home/.*/public_html>Options SymLinksIfOwnerMatch IndexesAllowOverride None</DirectoryMatch>

– Directory /var/www : regles d’acces au repertoire /var/www et a ses sous-repertoires.

– Options Indexes FollowSymLinks ExecCGI– Indexes : si le client demande une URL correspondant a un repertoire et

qu’il n’y a pas de fichier index.html le serveur envoie une liste formatteedu repertoire. Donc tous les fichiers du repertoire sont visibles a un clientWeb. C’est donc une option deconseillee.

– FollowSymLinks : le serveur suit les liens symboliques : utile pourmettre en consultation par apache des documents qui ne sont pas dansl’arborescence DocumentRoot. SymLinksIfOwnerMatch, ne suit le lienque si le fichier pointe a le meme owner que le repertoire qui contientce lien symbolique.

– ExecCGI : execution des scripts CGI autorisee dans ce repertoire– AllowOverride None : fichier .htaccess non pris en compte– order allow,deny : traitement des regles dans cet ordre– allow from all : acces ouvert a tout le monde.– ErrorDocument : En cas d’erreur Apache sort par defaut un code d’erreur,

mais il peut aussi afficher un message ou rediriger sur une autre URL, c’estle cas ici. Autre exemple :ErrorDocument 403 "Sorry can’t allow you access today

– Directory /usr/doc : La convention Debian est de donner acces par leWeb au repertoire /usr/doc par l’URL :http://machine_Linux_Debian/doc/(Ne pas oublier le /).

Page 149: Linux Reseau

11.7. LES MODULES. 149

– DirectoryMatch : regles d’acces qui ne s’appliquent qu’aux repertoiresqui satisfont les expressions regulieres indiquees. Ici les noms de fichierqui commencent par /home et se terminent par public html.

Si plusieurs directives Options s’appliquent a une meme repertoire, elles nese cumulent pas. Mais on peut faire preceder chaque option d’un signe “+” ou“-”. Une option precedee d’un “+” s’ajoute par rapport a celle en cours, uneprecedee d’un “-” se retranche.

11.7 Les modules.

On les choisit soit en editant /etc/apache/httpd.conf soit en rappelant/usr/sbin/apacheconfig (faire man apacheconfig).

En Debian Sarge, on execute :

/usr/sbin/apache-modconf apache

qui met a jour /etc/apache/modules.conf.

Support for passing environment to CGI? [y/N]

Module : mod envAction : passe des variables d’environnements aux scripts CGI/SSI

Support for configurable logfiles [required]? [Y/n]

Module : mod log configAction : permet de faire des Logs (directive TransferLog) et de definir

des formats (directive LogFormat), de creer un Log avec un format (directiveCustomLog)

Support for regex based translations [standard]? [Y/n]

Module : mod rewriteAction : permet de reecrire des URL a la volee a l’aide d’expressions regulieres

(comme sendmail sait faire de la reecriture d’adresse). On peut ainsi passer desarguments avec de ”fausses” URL.

Directives : Rewrite...

Support for determining types automagically? [y/N]

Module : mod mime magicAction : determine le type MIME d’un fichier en examinant les premiers

octets comme la commande file de Unix.Directives : MimeMagicFile

Support for determining document types [required]? [Y/n]

Module : mod mimeAction : gere une ”meta information”, le Mime type pour chaque document.

En plus un handler peut etre defini, il determine le traitement d’un fichier parle serveur. Les directives AddEncoding, AddHandler, AddLanguage and AddTypesont utilisees pour determiner le type en fonction de l’extension du fichier. Ellesfixent respectivement le Content-encoding, le handler, le Content-languageet le MIME-type (ou Content-type) du document.

Page 150: Linux Reseau

150 CHAPITRE 11. APACHE

Support for content negotiation [required]? [Y/n]

Module : mod negotiationAction : permet de selectionner un document qui convient le mieux aux

caracteristiques du client. Apache propose deux methodes :– Option MultiViews : On peut ainsi selectionner la langue, (DirectivesAddLanguage), le type d’image.

– un handler type-map permet de definir un fichier ou sont indiquees desalternatives

Support for server status info? [y/N]

Module : mod statusAction : donne l’etat du serveur sous forme d’une page HTML : nombre de

fils actifs, oisifs, statistiques sur les acces.

Support for server configuration info? [y/N]

Module : mod infoAction : Informe sur les modules et les directives de configuration On l’in-

terroge par :

http://your.host.dom/server-info

Directive AddModuleInfo

Support for server-parsed HTML (XBitHack)? [y/N]

Module : mod includeAction : active les Server-Side Includes. Tout document avec l’extension

*.shtml sera analyse par ce module si Option +Includes figure pour les repertoirescontenant ces pages. Le resultat aura le mime type text/html.

AddType text/html .shtmlAddHandler server-parsed .shtml

Support for automatic directory listings [required]? [Y/n]

Module : mod autoindexAction : fabrique un index pour un repertoire qui n’a pas de fichier index.html

Support for index.html indices [required]? [Y/n]

Module : mod dirAction : ajoute un / aux URL du type http ://servername/foo/dirname

ou dirname est un repertoire. Appelle mod autoindex s’il n’y a pas de fichierindex dans ce repertoire

Directive : DirectoryIndex

Support for CGI scripts [required]? [Y/n]

Module : mod cgiAction : tout fichier qui a le mime type application/x-httpd-cgi ou le

handler cgi-script sera traite par ce module. Des fichiers peuvent avoir cetype mime si leur extension est definie dans un AddType ou s’ils se trouventdans un repertoire defini par ScriptAlias.

Page 151: Linux Reseau

11.7. LES MODULES. 151

Support for sending raw HTTP data? [y/N]

Module : mod asis moduleAction : tout document avec le mime type httpd/send-as-is sera traite

par ce module. Utile quand on ne veut pas ajouter d’en-tete HTTP au fichier(mais il faut alors que cet en-tete soit dans le fichier sinon le client n’est pascontent .

Support for imagemaps? [y/N]

Module : mod imapAction : traite les server-side image maps

Support for filetype-based scripts? [y/N]

Module : mod imapAction : permet de traiter un fichier comme un CGI suivant son type (direc-

tive Action) ou quand une methode (GET, POST, PUT, DELETE) est invoquee(directive Script)

Support for automatic URL spell-correction? [y/N]

Module : mod spelingAction : essaie de corriger des URL fausses, par exemple des erreurs sur la

casse des caracteres.

Support for user home directories [required]? [Y/n]

Module : mod userdirAction : determine le repertoire d’un utilisateur pour les URL du type :

http ://serveur/~userid

Support for caching proxy service? [y/N]

Module : mod proxyAction : permet a Apache de fonctionner comme serveur proxy.

Support for aliases and redirects [required]? [Y/n]

Module : mod aliasAction : traite les alias (Alias, AliasMatch, Script, ScriptMatch) et

redirections (Redirect, ...)Les directives Alias permette de ranger des documents ailleurs que sous

DocumentRoot.

Support for host-based access control [required]? [Y/n]

Module : mod accessAction : gestion des directives allow from, deny from, order permettant

de controler l’acces suivant l’adresse IP ou le nom de domaine.

Support for basic authentication [standard]? [Y/n]

Module : mod authAction : permet de controler l’acces a des documents par userid/pasword

Support for anonymous-FTP authentication? [y/N]

Page 152: Linux Reseau

152 CHAPITRE 11. APACHE

Module : mod auth anonAction : meme methode d’acces que dans ftp anonymous, demande l’adresse

e-mail comme password

Support for dbm-file authentication? [y/N]

Module : mod auth dbmAction : controle d’acces par userid/pasword avec fichier dbm

Support for db-file authentication? [y/N]

Module : mod auth dbAction : idem avec Berkeley db

Support for MD5 authentication? [y/N]

Module : mod digestAction : controle d’acces par authentification MD5 Digest. Mais quels clients

le supportent ?

Support for HTTP header metafiles? [y/N]

Module : mod cern metaAction : emule les metafile de httpd CERN : ce sont des headers HTTP

Support for custom expiration times [standard]? [Y/n]

Module : mod expiresAction : genere des en-tetes HTTP Expires dans les reponses du serveur.

Support for arbitrary HTTP headers? [y/N]

Module : mod headersAction : permet de controler les en-tetes HTTP dans la reponse du serveur.Directive : Header

Support for clickstream logs? [y/N]

Module : mod usertrackAction : gere les cookies. Utilise les fichiers log. Directive :

CustomLog logs/clickstream "%{cookie}n %r %t"

CookieExpires, CookieTracking

Support for unique hit identifiers [standard]? [Y/n]

Module : mod unique idAction : identifie une requete de maniere unique (date, hostname, PID

Support for recognizing UserAgents [required]? [Y/n]

Module : mod setenvifAction : fixe des variables d’environnement suivant des conditions exprimee

par des expressions regulieres. Exemple :

BrowserMatch ^Mozilla netscape

Autre directive SetEnvIfLes modules sont en /usr/lib/apache/1.3/

Page 153: Linux Reseau

11.8. VIRTUAL HOSTS 153

11.8 Virtual hosts

Un meme serveur apache peut heberger plusieurs sites Web differents. Doncqui ont des URL racines differentes. La methode qui ne presuppose rien quantau client est celle qui consiste a definir des IP-alias. Ainsi la machine qui tourneapache a plusieurs adresses IP pour un seul interface reseau. Cela permet dedeclarer des noms de domaines differents.

Les IP-alias sont definis ainsi :

ifconfig eth0:0 193.54.230.104 netmask 255.255.255.0 broadcast 193.54.230.255route add -host 193.54.230.104 dev eth0:2

Les noms de domaines sont declares dans le DNS ainsi :

www-phase 604800 IN CNAME zoroastre.c-strasbourg.fr.www-sfp2001 604800 IN A 193.54.230.104

Les virtual hosts sont declares dans httpd.conf :

<VirtualHost www-phase.c-strasbourg.fr>ServerAdmin [email protected] /var/www/phaseServerName www-phase.c-strasbourg.frErrorLog /var/log/apache/phase-error_logTransferLog /var/log/apache/phase-access_log</VirtualHost>

<VirtualHost www-sfp2001.c-strasbourg.fr>ServerAdmin [email protected] /var/www/sfp2001ServerName www-sfp2001.c-strasbourg.frErrorLog /var/log/apache/sfp2001-error_logTransferLog /var/log/apache/sfp2001-access_log</VirtualHost>

11.9 Content negotiation

11.9.1 Multiviews

Le serveur peut tenir compte des preferences transmises par le client plutotque de proposer un choix manuel.

AddLanguage en .enAddLanguage fr .frLanguagePriority en fr de

<Directory /var/www>Options Indexes FollowSymLinks ExecCGI MultiviewsAllowOverride Noneorder allow,denyallow from all</Directory>

Page 154: Linux Reseau

154 CHAPITRE 11. APACHE

Remarquez la presence de l’option Multiviews. Le repertoire /var/wwwcontient les fichiers phasnew.html.en et phasnew.html.fr.

Si l’utilisateur configure, dans les preferences de son Netscape, le francaiscelui-ci envoie une requete du type :

GET http://www-phase.c-strasbourg.fr/phasnew.html HTTP/1.1host: www-phase.c-strasbourg.frAccept-Language: fr

Apache lui envoie alors le fichier phasnew.html.fr. Si l’utilisateur configurel’anglais dans ses preferences Netscape, il aura le fichier phasnew.html.en.

L’utilisateur peut definir en fait un ordre de preference. Si l’utilisateur n’encommunique pas, Apache suit le directive LanguagePriority.

Les fichiers peuvent etre indifferemment nommes phasnew.html.fr ou phasnew.fr.htmlSi l’utilisateur definit une autre langue, Apache envoie le fichier par defaut

phasnew.html.html. Si on veut envoyer la page francaise par defaut on cree unlien :

ln -s phasnew.fr.html phasnew.html.html

11.9.2 Handler type-map

Un handler type-map est associe a un fichier qui definit des variantes d’undocument par exemple :

AddType application/x-type-map varAddHandler type-map varDirectoryIndex index.var

Fichier index.var :

URI: index; vary="language"URI: index.en.htmlContent-type: text/htmlContent-language: enURI: index.it.htmlContent-type: text/htmlContent-language: it

11.10 Restrictions d’acces

Il vaut mieux, pour un service plus rapide, les declarer dans les fichiers deconfiguration plutot que dans les fichiers .htaccess. Elles sont definies soit pourtout l’ensemble des pages Web soit par repertoire particulier, l’un n’excluant pasl’autre.

Exemple : restriction d’acces pour usage Intranet

<Directory /var/www/phase/interne><Limit GET>order deny,allowdeny from allallow from 193.54.230 130.79.74 130.79.194 127.0.0.1

Page 155: Linux Reseau

11.11. AUTRES CAPACITES DE APACHE 155

</Limit></Directory>

Ce qui signifie que pour la methode GET l’acces de /var/www/phase/interneest interdit a tous, sauf aux machines dont les adresses IP commencent par193.54.230, 130.79.74, 130.79.194 et bien sur localhost.

Remarque : deny,allow forme un seul mot (pas de blanc).Je voudrais autoriser l’acces de mes pages Web a tous, sauf a la direction du

CNRS. Je cree un fichier /home/morel/public html/.htaccess qui contient :

<Limit GET>order allow,denyallow from alldeny 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’acces par une variable. Par exemple, par BrowserMatchje cree une variable d’environnement si le nom du Browser satisfait une expres-sion reguliere.

deny from env=cette_variable

interdira l’acces a ce type de Browser.On peut aussi faire un controle d’acces par userid/password

11.11 Autres capacites de Apache

– SSI : Server-side includes. Il faut activer le module mod-include et ladirective Includes. Exemple de SSI pour mettre dans une page *.shtmlsa date de derniere modification :<!--#config timefmt="%A %d %B %Y" --><p>Date de derniere mise a jour :<!--#echo var="LAST-MODIFIED" -->timefmt definit le format de la date avec la meme syntaxe que dans manstrftime : %A est le jour de la semaine, %d le numero du jour dans le mois%B le mois, %Y l’annee.

– SSL : HTTP+SSL= HTTPS. Vient de Netscape, supporte par Apache.Necessite d’installer la bibliotheque de chiffrement SSLeay et le patchApache-SSL.

– Cookies : supporte– PHP : supporte– Serveur proxy : mais j’utiliserais plutot squid ou junkbuster.

11.12 Maintenance

11.12.1 Erreurs

Regardez les fichiers Logs, dans /var/log/apache en particulier les fichiers*-error log

Page 156: Linux Reseau

156 CHAPITRE 11. APACHE

11.12.2 Statistiques

Exemple : wwwstat fait des statistiques a partir des fichiers logs. Resultatau format HTML.

http://www.ics.uci.edu/pub/websoft/wwwstat/Configuration : fichier wwwstat.rc. Verifier $DefaultLog $Do ArchiveEmploi :

wwwstat -h

Statistiques globales :

wwwstat >stat.html

Statistiques d’acces au repertoire de l’utilisateur dupond :

wwwstat -n ’^/~dupond/’

Page 157: Linux Reseau

Chapitre 12

Execution de programmesCGI sur un serveur WWW

Ce chapitre est une adaptation du document redige par Frederic Couchet,[email protected] l’association APRIL,http://www.april.org

12.1 Introduction a la Common Gateway Inter-face

12.1.1 Pourquoi utiliser les programmes CGI

Un programme CGI est tout simplement un programme pouvant etre executepar un serveur HTTP.

Un exemple classique nous est fourni par les moteurs de recherche qui, apartir de mots cles saisis dans un formulaire, vous affichent l’ensemble des pagesau format HTML contenant ces mots cles. La recherche etant effectuee par unprogramme externe.

La solution pour communiquer a travers une page Web avec le serveur estl’utilisation de la Common Gateway Interface (CGI). CGI est une interfacepermettant l’execution de programmes externes par un serveur HTTP. Plusgeneralement, CGI est en fait un standard pour l’ecriture de passerelles entre desserveurs d’informations tel que HTTP et des programmes externes. L’interfaceCGI permet de faire communiquer le programme et le serveur HTTP.

12.1.2 Prerequis et choix techniques

Dans ce document, je suppose connu les bases du langage HTML, le mini-mum pour pouvoir faire une page. Pour l’ecriture des programmes, la connais-sance d’un langage de programmation plus ou moins evolue est bien entendunecessaire (par exemple, C, Perl, Python ...). Nous supposons un serveur Webtournant sur une machine Unix (tous les exemples presentes dans ce documentont ete realises sur une machine Linux 2.0 et le serveur HTTP Apache 1.2b3).

157

Page 158: Linux Reseau

158CHAPITRE 12. EXECUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW

12.1.3 Configuration du serveur Web

Autant l’ecriture de pages au format HTML necessitait juste un navigateurpour visualiser le resultat, autant l’ecriture de scripts CGI necessite la presenced’un serveur HTTP tournant sur la machine (en effet, n’oublions pas que c’estle serveur qui execute le programme).

Donc premiere etape, il nous faut installer un serveur HTTP. Voir chapitreprecedent. Comme le but de ce document est d’ecrire des scripts CGI, il fautconfigurer le serveur pour qu’il puisse executer nos programmes. Dans le fichiersrm.conf, il faut decommenter la ligne suivante (supprimer le diese en debutde ligne) :

#ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

Ainsi, si votre machine s’appelle yoda, lorsque le navigateur accedera a l’urlhttp ://yoda/cgi-bin/date.cgi le serveur saura que le fichier date.cgi setrouve dans le repertoire /usr/lib/cgi-bin et qu’il devra l’executer (voir 12.2(Notions fondamentales)).

Vous pouvez egalement configurer votre serveur pour qu’il puisse executern’importe quel fichier, ou qu’il se trouve, pourvu qu’il ait pour extension .cgi.Pour cela, decommentez, dans srm.conf, la ligne suivante :

#AddHandler cgi-script .cgi

12.2 Notions fondamentales

Lorsque vous tapez un URL (Uniform Ressource Locator), par exemplehttp://www.april.org/association/index.html, votre navigateur prefere va se connecter au serveur Web indique, c’est a dire

le programme installe sur la machine distante (dans notre exemple www.april.org),et qui ecoute sur le port 80. Le serveur va chercher le document en question surson disque et l’envoie au navigateur, en utilisant le protocole HTTP (HyperTextTransfer Protocol). Il peut s’agir de n’importe quel type de fichier, un fichier auformat HTML, une image, un fichier son etc.

Pour savoir comment et ou chercher le document, le serveur possede un en-semble de fichiers de configuration charges en memoire a son lancement (qui,dans le cas de notre installation, se trouvent dans le repertoire /etc/apache/conf).Dans notre exemple, le serveur ira chercher le fichier april.html dans le repertoire/var/www/association (ou /var/www/ est le repertoire racine du serveur). Unautre exemple d’URL est

http://www.bocal.cs.univ-paris8.fr/\~{}drieu/index.html. Le caractere ˜ indique que la chaıne qui suit correspond a un nom de login

sur la machine du serveur. Ainsi, dans ce cas, le serveur va chercher le documenten question dans le repertoire /home/drieu/public html (selon la configurationclassique du serveur). Le fichier index.html se trouve dans ce repertoire. Lesutilisateurs ont ainsi la possibilite de creer un repertoire public html (accessibleen lecture et execution) dans leur compte pour publier sur le Web.

Mais ce type de document est statique, or il est possible d’acceder a del’information dynamique. Une possibilite est l’utilisation de scripts CGI. Eneffet, ce programme est execute, par le serveur, en temps reel sur la machinedistante, au moment ou le navigateur fait une requete vers ce programme.

Page 159: Linux Reseau

12.3. UN PROGRAMME EN BOURNE SHELL 159

Un exemple assez puissant etant l’acces, via un formulaire HTML, a unebase de donnees. Par l’intermediaire du formulaire, vous saisissez les nom etprenom d’une personne. A l’aide d’un bouton ’valider’ present sur le formulaire,le serveur invoque alors un programme qui, a partir des informations saisiesdans le formulaire, va interroger le moteur de votre base de donnees et envoyeren reponse une page au format HTML, contenant les informations concernantcette personne, que votre navigateur va alors afficher.

Mais ne nous attaquons pas tout de suite a des requetes SQL, et commenconspar beaucoup plus simple. Pour montrer le dynamisme de notre page, nousallons faire un programme qui affiche l’heure courante dans une page HTML(exemple d’ecole, car beaucoup plus facilement realisable avec les Server SideIncludes).

12.3 Un programme en Bourne shell

Pour ecrire un script CGI, nous pouvons utiliser n’importe quel langagede programmation. Nous devons simplement pouvoir lire sur l’entree standard,ecrire sur la sortie standard et acceder aux variables d’environnement.

Nous allons ecrire notre premier programme que nous appelerons date.cgi.Nous devons penser aux permissions de ce fichier. Le programme doit etreexecutable par tous, et lisible par tous dans le cas de script shell, perl ... En effet,n’oublions pas que c’est le serveur HTTP qui va executer notre programme. Or,le serveur tourne dans la majeure partie des cas sous l’utilisateur nobody, etdonc il n’a pas de droits particuliers (retenons bien que le serveur ne s’executepas sous l’utilisateur qui a ecrit le script).

Nous installerons notre progamme dans le repertoire /usr/lib/cgi-bin, quiest le repertoire par defaut des scripts CGI (encore faut-il que l’administrateurdu systeme nous en laisse le droit). En effet, n’importe qui n’a pas le droitde faire des scripts CGI. L’administrateur peut limiter la possibilite de mettredes scripts CGI que dans un seul repertoire. Il controlera ainsi beaucoup plusfacilement ces scripts. Car, il faut le savoir, les scripts CGI sont une bonnesource de trous de securite.

Ainsi, le serveur sait que tous les fichiers se trouvant dans ce repertoiredevront etre executes et non pas envoyes directement au navigateur, et ce serontles seuls dans ce cas. C’est le programme qui devra envoyer les informations aunavigateur, par l’intermediaire de la sortie standard (d’ou l’obligation de pouvoirecrire sur la sortie standard). Donc, notre programme doit produire sur sa sortiestandard quelque chose de comprehensible par le navigateur. Ainsi, lorsque votrenavigateur accedera a l’URL correspondant a ce fichier (par exemple :

http://www.april.org/cgi-bin/date.cgi), le serveur executera le programme date.cgi qui produira un fichier au for-

mat HTML contenant la date courante. Le navigateur affichera alors le resultat.Source du programmeNotre premier programme est ecrit sous la forme d’un script shell. Voici le

source de date.cgi :

#!/bin/sh

tmp=‘/bin/date‘

Page 160: Linux Reseau

160CHAPITRE 12. EXECUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW

La date courante sur le serveur estSun Mar 30 11:48:54 GMT+0100 1997

cat << EndFileContent-type: text/html

<HTML><HEAD><TITLE>Script Cgi</TITLE></HEAD><BODY>

<CENTER>

<H1>La date courante sur le serveur est</H1>$tmp

</CENTER>

</BODY></HTML>

EndFile

On fait un chmod 555 date.cgi et on copie le fichier dans le repertoire/usr/lib/cgi-bin. Ensuite, on peut utiliser notre navigateur pour voir le resultat.On accede a l’URL

http://www.april.org/cgi-bin/date.cgiet on obtient le resultat suivant :Au niveau du source, on affecte a la variable tmp le resultat de la commande

/bin/date ($tmp permet ensuite d’avoir acces au contenu de la variable tmp).Ensuite, il faut juste savoir que la commande cat << EndFile permet d’af-ficher sur la sortie standard tout ce qui suit jusqu’a ce que l’on rencontre uneligne formee uniquement par EndFile (la chaıne suivant immediatement <<).En fait, tout ce qui se trouve entre << EndFile et EndFile est utilise commeentree standard de la commande cat (la chaine EndFile est choisie arbitraire-ment).1

Ce qui est important de noter, c’est la premiere ligne ecrite sur la sortiestandard (Content-type : text/html), c’est a ce niveau que l’on specifie letype de donnees que l’on envoie au navigateur. Cette ligne fait en fait partiedu header HTTP. Ce header est indispensable pour que le navigateur puisseinterpreter correctement les donnees recues (les autres parties du header serontajoutees par le serveur HTTP). Le type ”text/html” est le type MIME stan-dard pour un document HTML. Si notre programme devait generer une imageau format Gif (par exemple pour implementer un compteur graphique), nousaurions utilise le type ”image/gif”. Le header doit obligatoirement etre terminepar une ligne vide (comme le header de tous les protocoles). Cette ligne separel’en-tete de la reponse (c’est a dire les informations au sujet de la reponse) ducontenu de la reponse.

1Ce type de script shell ou les donnees sont directement incluses dans le script s’appellentdes documents in-line ou des here documents.

Page 161: Linux Reseau

12.4. SAISIE ET TRAITEMENT DES CHAMPS D’UN FORMULAIRE 161

Ce qu’il faut retenir a ce niveau, c’est qu’un script CGI doit produire sursa sortie standard quelque chose de comprehensible par le navigateur, donc,dans la majorite des cas, une sortie au format HTML. La seule obligation est lapresence, sur la premiere ligne, du header Content-type. Les autres parties duheader seront ajoutees par le serveur HTTP. C’est pourquoi ce type de scriptest appele Parsed Header Script . Il existe un autre type de script CGI, appeleNon Parsed Header Script . Pour ce type de script, le serveur ne rajoute rien,et c’est donc le script lui-meme qui a la charge de fournir un header complet,conforme au protocole HTTP.

Voila, nous avons ecris notre premier script CGI. On y accede directementpar le navigateur.

Faites le test :http://www.april.org/cgi-bin/date.cgi.

12.4 Saisie et traitement des champs d’un for-mulaire

L’exemple precedent etait relativement simple, et illustrait l’appel directd’un script CGI. Maintenant nous allons aborder un probleme un peu pluscomplexe et interessant. L’exercice consiste a pouvoir saisir des donnees dansun formulaire et, grace a un script CGI, effectuer un traitement quelconque surces donnees (ce qui est le mode de fonctionnement des moteurs de recherche).

Ceci necessite deux etapes :– la creation d’un document HTML contenant un formulaire, ce qui permet-

tra a l’utilisateur de saisir des donnees.– l’ecriture d’un programme traitant ces donnees.Pour pouvoir saisir des donnees dans une page HTML, nous allons utiliser

la balise FORM. Cette balise permet de realiser un questionnaire. Les reponsessaisies par l’utilisateur sont codees par le navigateur et transmises au serveurHTTP. Utilisons l’exemple suivant (fichier form.html) :

L’utilisateur pourra ainsi entrer son prenom, nom (champ de type texte)et selectionner l’une des quatres valeurs possibles pour l’age (champ de typeSELECT).

Le champ d’un formulaire est identifie par l’attribut NAME. Les donneessont transmises au serveur sous la forme de paires : name=value, codees auformat URL et separees par le symbole &. Le format de codage URL est lesuivant :

– les caracteres non ASCII (ceux dont le code est superieur a 128) sontremplaces par la chaıne de caracteres %xx ou xx represente le code ASCIIdu caractere en hexadecimal.

– les caracteres reserves sont egalement remplaces par leur valeur hexadecimale.– le caractere espace est remplace par le caractere +.il est absolument necessaire de connaıtre ce codage pour ecrire des scripts

CGI. En effet, le programme doit savoir decoder ces chaınes. Il est egalementpossible, en connaissant ce codage, d’appeler directement un script sans passerpar la page HTML appelant le script.

Le script CGI est identifie par l’attribut ACTION de la balise FORM, cet

Page 162: Linux Reseau

162CHAPITRE 12. EXECUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW

<HTML><HEAD><TITLE>Formulaire simple</TITLE></HEAD><BODY><H2>R&eacute;pondez aux questions suivantes</H2><FORM ACTION="http://www.april.org/cgi-bin/treat.pl" METHOD=GET>Prenom : <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 &agrave; 40 ans<OPTION>41 &agrave; 60 ans<OPTION>+ de 60 ans

</SELECT><BR><INPUT TYPE=submit VALUE="Envoyer"> <INPUT TYPE=reset VALUE="Remettre&agrave; z&eacute;ro"></FORM></BODY></HTML>

prenom=Marcel&nom=Gnou&age=41+%E0+60+ans

attribut contenant l’URL du programme externe. Dans notre exemple, le scriptest le fichier treat.pl qui se trouve sur le serveur www.april.org (dans lerepertoire /usr/lib/cgi-bin/ comme nous l’avons vu precedemment). L’attri-but METHOD de la balise FORM specifie le mode de transfert des donnees versle serveur. On peut en distinguer deux : GET et POST.

Dans la methode GET le navigateur concatene a l’URL precisee par l’at-tribut ACTION, le symbole ? et la chaıne contenant les donnees saisies parl’utilisateur. Et lorsque l’utilisateur clique sur le bouton ”Envoyer” on accede acet URL.

Dans la methode POST la chaine contenant les donnees saisies par l’utilisa-teur est inseree dans le corps de la requete HTTP.

Si dans notre formulaire, on saisit pour le prenom ”Marcel”, pour le nom”Dugenou” et pour l’age on selectionne ”41 a 60 ans”, la chaıne transmise seraalors la suivante :

Le %E0 correspond au caractere a. Alors, dans le cas de la methode GET onaccedera a l’URL suivante :

Ce qui montre, par ailleurs, que l’on peut donc directement acceder a unscript CGI, en lui passant ses parametres de cette facon. Ceci peut etre tresdangereux si on n’ecrit pas ses scripts avec beaucoup de precautions.

Dans le cas de la methode POST on accedera a l’URL suivante :et la chaıne prenom=Marcel&nom=Gnou&age=41+%E0+60+ans est inseree dans

le corps de la requete, et donc le programme ira recuperer cette chaıne sur sonentree standard.

http://www.april.org/cgi-bin/treat.pl?prenom=Marcel&nom=Gnou&age=41+%E0+60+ans

Page 163: Linux Reseau

12.4. SAISIE ET TRAITEMENT DES CHAMPS D’UN FORMULAIRE 163

http://www.april.org/cgi-bin/treat.pl

12.4.1 Recuperation des informations en Perl et en shell

Nous avons ecrit le formulaire, on a vu comment transmettre les informationsau script (GET ou POST), maintenant on va ecrire le programme.

Precisons tout de suite le role du programme externe :– d’abord recuperez les donnees saisies par l’intermediaire du formulaire.– traiter ces donnees– enfin, fournir sur sa sortie standard le resultat qui sera alors transmis au

client (le navigateur).La premiere chose qui nous interesse est d’extraire l’information envoyee par

le navigateur a l’aide du formulaire. La methode depend en fait de celle choisiedans le formulaire.

Dans le cas de la methode GET, l’information est contenue dans la variabled’environnement QUERY STRING, qui a pour longueur la valeur de la variableCONTENT LENGTH. Ainsi dans notre exemple precedent, la variable contiendra lachaıne prenom=Marcel&nom=Gnou&age=41+%E0+60+ans.

Dans le cas de la methode POST, le programme recupere les informationssur son entree standard.

Pour mettre en pratique ces principes, nous allons juste ecrire un programmequi recupere les informations, les decode et qui ecrit sur sa sortie standard unepage HTML contenant les donnees decodees (que le navigateur affichera alors).La partie traitement des donnees n’est pas abordee ici car cela depend de ce quedoit faire votre programme, et il n’y a rien a dire de specifique par rapport ausujet.

Nous allons utiliser deux langages differents : Perl et le shell.En general, la phase de recuperation des donnees est toujours la meme, ce

qui permet d’ecrire des fonctions d’extraction reutilisables.Voyons le code source de treat.pl :Etant donne que la methode choisie est GET, on recupere les donnees dans

la variable QUERY STRING, par la ligne : $buffer=$ENV{"QUERY STRING"} ;. Sinous avions, au niveau du formulaire, choisi la methode POST, nous aurionsrecupere les donnees par la ligne : read(STDIN,$buffer,$ENV{"CONTENT LENGTH"}) ;.La variable CONTENT LENGTH contenant la longueur de QUERY STRING.

Pour bien comprendre l’exemple, il faut evidemment connaıtre Perl. Lescommentaires mis dans le programme l’explicitant un peu.

Nous pouvons ecrire le programme avec d’autres langages, voici le codesource de treat.sh ecrit en shell.

Il suffit de remplacer treat.pl par treat.sh dans la balise FORM du for-mulaire.

L’algorithme de decodage utilise est le suivant (la chaıne a traiter etant dansnotre exemple

prenom=Marcel&nom=Gnou&age=41+%E0+60+ans :– recuperation des paires name=value (qui sont separees par le caractere&). En shell, cela se fait par OPTS=‘echo $QUERY STRING | sed ’s/&//g’‘ (on remplace & par un espace) et en perl on utilise un tableau :local(@donnees) = split(/&/, $buffer) ;

– separation de chaque paire en name et value

Page 164: Linux Reseau

164CHAPITRE 12. EXECUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW

#!/usr/bin/perl

# les donnees sont envoyees par methode GET# donc on recupere les donnees dans la variable# d’environnement QUERY_STRING$buffer=$ENV{"QUERY_STRING"};

# on split la chaine de donnees en des paires name=valuelocal(@champs) = split(/&/, $buffer);local($donnees) = "";

# affichage du debut du code HTMLprintf STDOUT "Content-type: text/html\n\n";printf STDOUT "<HTML><HEAD>";printf STDOUT "<TITLE>Reponse au questionnaire</TITLE>";printf STDOUT "</HEAD>";printf STDOUT "<BODY BGCOLOR=\"#ffffff\">";

printf STDOUT "<H1>R&eacute;sultat du traitement de votre questionnaire</H1>";printf STDOUT "<H2>Chaine de donn&eacute;es recue par le programme</H2>";printf STDOUT "QUERY_STRING <STRONG>%s</STRONG>",$buffer;printf STDOUT "<H2>Liste des informations d&eacute;cod&eacute;es</H2>";printf STDOUT "<UL>";printf STDOUT "<BL>";

# recuperation et mise en forme des donnees# on parcourt la liste des paires name=valueforeach $i (0 .. $#champs) {

# On convertit les plus en espaces$champs[$i] =~ s/\+/ /g;

# On separe chaque champ en une cle et sa valeur($key, $val) = split(/=/,$champs[$i],2);

# On convertit les %XX de leur valeur hexadecimale en alphanumerique$key =~ s/%(..)/pack("c",hex($1))/ge;$val =~ s/%(..)/pack("c",hex($1))/ge;

# on affiche le resultatprintf STDOUT "<LI><STRONG>%s:</STRONG>%s\n",$key,$val;

}

printf STDOUT "</BL>";printf STDOUT "</UL>";

printf STDOUT "</BODY>";printf STDOUT "</HTML>";

Page 165: Linux Reseau

12.4. SAISIE ET TRAITEMENT DES CHAMPS D’UN FORMULAIRE 165

#!/bin/sh#

if [ "$REQUEST_METHOD" = "POST" ]; thenread QUERY_STRING

fi

# on split la chaine de donnees en des paires name=valueOPTS=‘echo $QUERY_STRING | sed ’s/&/ /g’‘

echo "Content-type: text/html"echo ""echo "<HTML><HEAD>"echo "<TITLE>Reponse au questionnaire</TITLE>"echo "</HEAD>"echo "<BODY BGCOLOR=\"#ffffff\">"

echo "<H1>R&eacute;sultat du traitement de votre questionnaire</H1>"echo "<H2>Chaine de donn&eacute;es recue par le programme</H2>"echo "QUERY_STRING <STRONG>"$QUERY_STRINGecho "</STRONG>"echo "<H2>Liste des informations d&eacute;cod&eacute;es</H2>"

# recuperation et mise en forme des donnees# on parcourt la liste des paires name=valueecho "<UL>"echo "<BL>"for opt in $OPTSdoNAME=‘echo $opt | sed ’s/=/ /g’ | awk ’{print $1}’‘VALUE=‘echo $opt | sed ’s/=/ /g’ | awk ’{print $2}’ | sed ’s,%,\\\x,g’ | sed ’s/+/ /g’‘printf "<LI><STRONG>$NAME:</STRONG>$VALUE"

done

echo "</BL>"echo "</UL>"echo "</BODY></HTML>"

Page 166: Linux Reseau

166CHAPITRE 12. EXECUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW

#include <stdio.h>

main(int argc, char **argv, char **env){

int i = 0;

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 enleur valeur alphanumerique.

Les deux methodes GET et POST differencient le moyen de communicationentre le serveur et le programme. La methode GET est limitee par la taillemaximale acceptee par le serveur au niveau d’un URL, la methode POST n’etantpas restreinte par cette limite.

Testez le formulaire et son script surhttp://www.april.org/groupes/doc/cgi-bin/form.html

12.4.2 Les variables d’environnement

Les scripts CGI peuvent acceder aux variables d’environnement. Selon lessystemes, on peut acceder a un nombre plus ou moins important de variablesd’environnement.

Certaines variables sont relatives au serveur HTTP (par exemple HTTP HOSTcontient l’adresse IP de la machine hebergeant le serveur HTTP). D’autressont relatives a la connexion client-serveur (par exemple REMOTE ADDR contientl’adresse IP de la machine cliente effectuant la requete. Enfin, certaines sontrelatives a la requete (par exemple QUERY STRING contient la chaıne contenantles informations de la requete).

Voici deux programmes permettant l’acces a l’ensemble des variables d’en-vironnement, le premier en C, le deuxieme en Perl :

Code de env.c :Code de env.pl :Il suffit alors de compiler env.c et de copier l’executable resultant dans le

repertoire des cgi-bin du serveur. Pour le script Perl, il suffit de le copier dansle repertoire, en n’oubliant pas de le rendre lisible et executable par tous.

Cliquez sur les liens suivants pour voir le resultat :http://www.april.org/cgi-bin/envet

Page 167: Linux Reseau

12.5. DEBOGUER UN SCRIPT CGI 167

#!/usr/bin/perl

print "Content-Type: text/html\n\n";print "<HTML><HEAD><TITLE>Variables</TITLE></HEAD><BODY>\n";

while(($name,$value) = each %ENV){print "$name = $value <BR>\n";

}

print "</BODY></HTML>\n";

http://www.april.org/cgi-bin/env.pl

12.5 Deboguer un script CGI

Vous venez de terminer la lecture de ce document, d’installer avec succesvotre serveur HTTP, d’ecrire un script CGI en vous basant sur les exemplesfournis. Vous lancez votre navigateur pour faire un test. D’ailleurs, a ce propos,utilisez bien Ouvrir URL pour acceder au script, et non pas Ouvrir Fichier.Si votre machine s’appelle yoda, et que vous avez place le script date.cgi dans lerepertoire des scripts CGI, vous devez ouvrir l’URL http ://yoda/cgi-bin/date.cgi.

Et la, que voyez-vous apparaıtre a la place de la sortie attendue de votreprogramme ? Le navigateur vous affiche une erreur du genre Internal servererror. Affreux.

Nous voila donc lance dans l’enfer du debug d’un script CGI. Disons tout desuite que le debug d’un script CGI n’est pas tout a fait le meme probleme quele debug d’un programme normal.

En effet, la plupart des programmes que vous avez ecrits jusqu’a maintenantetaient lances directement a partir de la ligne de commande. Ce n’est pas le casdes scripts CGI. Ils sont executes par une autre programme, le serveur HTTP,et souvent sur une machine differente de celle sur laquelle ils ont ete ecrits.

Si au lieu de la sortie attendue de votre programme, vous voyez s’afficher lecode source du programme c’est que le serveur HTTP n’est pas configure pourpouvoir executer des scripts CGI. Contacter l’administrateur du serveur, ou sic’est votre propre serveur relisez la partie 12.1.3 (Installation du serveur) pourvoir si vous l’avez correctement configure.

Le secret du debug est donc de bien comprendre que c’est le serveurHTTP qui execute le programme.

Gardons cela en tete, et commencons le debug de notre programme.La premiere chose a verifier est que le programme soit executable par tous

dans le cas d’un programme compile, et lisible et executable par tous dans lecas d’un script. Ceci parce que le serveur s’execute sous un nom d’utilisateurdifferent du votre. Donc une fois votre programme installe dans le repertoireadequat n’oubliez pas de faire un petit chmod 555 date.cgi, par exemple.

Si cela ne marche toujours pas, il faut essayer d’executer le programme surla ligne de commande pour voir ce qu’il affiche en sortie. En effet, quand votreprogramme est execute par le serveur HTTP, le resultat de sa sortie est envoye

Page 168: Linux Reseau

168CHAPITRE 12. EXECUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW

au navigateur, et donc vous ne voyez en fait que ce qu’en fait le navigateur. Votreprogramme peut donc s’executer correctement sur le serveur, afficher quelquechose sur sa sortie standard, mais cette sortie est peut-etre incoherente pour lenavigateur, qui vous affiche alors un message d’erreur.

Executez donc votre programme sur la ligne de commande, qu’affiche t’ilen sortie ? Comme nous l’avons deja vu precedemment, la premiere ligne af-fichee doit etre le champ Content-Type du header HTTP, suivi par une ligneblanche. Si ce n’est pas le cas, corrigez-le. Une erreur frequente 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 ligneblanche apres l’affichage de la chaıne. Le \n ne fait aller qu’a la ligne. Il fautdeux newline. L’instruction correcte est la suivante : printf("Content-Type :text/html\n\n") ;. Ceci est une des erreurs les plus frequement commises audebut de la programmation de scripts CGI. Le reste de l’affichage, apres le hea-der et la ligne blanche, doit etre coherent avec le header. Donc, dans ce cas defigure, une sortie au format HTML. Par exemple :

Content-type: text/html

<HTML><HEAD><TITLE>Sortie Correcte</TITLE></HEAD><BODY>

<H1>Ceci est une sortie correcte</H1>

</BODY></HTML>

Ce test peut etre suffisant si votre programme ne traite aucune donneeen entree. Mais si votre programme traite des donnees, par exemple par l’in-termediaire d’un formulaire (voir le deuxieme exemple), il faut tester le pro-gramme dans les conditions les plus proches du reel, et donc lui passer desarguments en entree.

Si le formulaire utilise la methode GET, votre programme recupere lesdonnees par l’intermediaire de la variable d’environnement QUERY STRING. Onpeut alors facilement affecter une valeur a cette variable sous le shell. Parexemple, en bash :

export QUERY_STRING="prenom=Marcel&nom=Gnou&age=41+%E0+60+ans"

Il faut affecter une valeur la plus proche possible du reel (donc eventuellementavec les %xx correspondant aux caracteres accentues et reserves). On peut alorsexecuter le programme sur la ligne de commande et etudier sa sortie.

Enfin, si votre script doit etre installe sur une autre machine que celle sous la-quelle vous l’avez ecrit, pensez a verifier les chemins (path) des programmes quevous utilisez. Dans l’exemple de date.cgi, le programme peut planter (et doncvotre navigateur vous affiche un message d’erreur), si par exemple le programmedate ne se trouve pas dans le repertoire /bin. Votre programme, donnant unesortie correcte sur votre machine, execute sur l’autre machine, affichera en sor-tie :

Page 169: Linux Reseau

12.5. DEBOGUER UN SCRIPT CGI 169

./date.cgi: /bin/date: command not foundContent-type: text/html

<HTML><HEAD><TITLE>Script Cgi</TITLE><HEAD><BODY>

<CENTER>

<H1>La date courante sur le serveur est</H1>

</CENTER>

</BODY></HTML>

Ce qui, vous en conviendrez, n’est pas une sortie correcte. Le probleme peutse poser egalement avec les scripts ecrits en Perl. En effet, dans nos exemples, onsupposait que Perl se trouvait dans le repertoire /usr/bin/ (premiere ligne denos scripts : # !/usr/bin/perl). Si sur la machine sur laquelle doit s’executernotre programme perl ne se trouve pas dans ce repertoire nous aurions commmesortie :

./env.pl: No such file or directory

Ce qui n’est pas une sortie attendue par un navigateur.

Page 170: Linux Reseau

170CHAPITRE 12. EXECUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW

Page 171: Linux Reseau

Chapitre 13

Samba

13.1 Introduction

Samba sur une machine Unix offre les memes services aux machines Windowsqu’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 reseauMicrosoft. Il rend (a peu pres) les memes services que Windows NT serveur.Donc on peut se passer de ce dernier. Il permet aux utilisateurs Windowsd’acceder a des ressources UNIX et inversement aux utilisateurs Unix d’accederaux ressources partagees par les machines Windows. Utilite pour Windows :

– acces a des ressources distantes comme si elles etaient locales– manipulation des fichiers distants ”a la souris”– espace disque supplementaire pour chaque utilisateur (securise par des

sauvegardes)– espace commun pour echanges de fichier– acces aux imprimantes reseau– acces au lecteur de cartouches pour sauvegardes– distribution de logiciels– partage de logiciels

13.2 Protocoles Microsoft

SMB (Server Messaging Block) est le protocole utilise par Microsoft pourpartager fichiers et imprimantes entre WfWg, W95, W98, WNT. C’est une sortede NFS.

SMB est egalement appele le protocole NetBIOS (Microsoft a repris le Net-Bios developpe par IBM et qui a ete porte sur IP, NBT : NetBios over IP, RFC1001-1002) ou LanManager.

CIFS (Common Internet File System) gere les fonctions de type NFS.L’interet de SMB est qu’il peut fonctionner soit sur NetBeui, soit sur IPX,

(deux protocoles qu’on se depeche d’oublier), soit sur IP. Nous l’utilisons evidemmentsur IP.

Types de serveurs :– Domain Controler

171

Page 172: Linux Reseau

172 CHAPITRE 13. SAMBA

– Primary Domain Controler (PDC)– Backup Domain Controler (BDC)– ADS Domain Controler

– Domain Member Server– Active Directory Domain Server– NT4 Style Domain Server

– Stand Alone ServerSamba-3 emule un NT4 Style Domain Controler a l’exception des possibilites

de replication SAM.Samba-3 peut etre membre actif d’un Win2k Active Directory Domain. Mais

il n’a pas toutes les fonctionnalites d’un Active Directory Primary DomainControler.

Les machines Windows peuvent interagir de deux manieres :– standalone system, elles font partie d’un workgroup. Il n’y a pas de security

machine accounts.– participante d’un security system, elles sont membres d’un domain. Chaque

machine est enregistree dans la Domain account database.Quelques concepts :

– Workgroup (groupe de travail) : ensemble de machines auxquelles onaccede (notion Windows 3.11 for workgroups)

– Name registration : Nom declare par une machine quand elle se connecteau reseau, (doit etre unique). Il est recommande de prendre le meme nomque le nom de domaine Internet

– Sharename (Partage) : nom de la ressource partagee (repertoire disqueou imprimante)

– Browse : fonction a deux niveaux :

1. Visualiser la liste des machines qui partagent des ressources.2. Visualiser les ressources partagees par une machine.

– Browse list : liste des machines du workgroup– Local Browse Master : machine qui tient a jour la browse list. N’im-

porte quelle machine Windows peut etre Local Browse Master (il y a unconcours). Chaque machine qui partage un service, l’annonce par un mes-sage broadcast.

– Domain Browse Master : machine qui reunit les browse lists de Work-groups repartis sur differents sous-reseaux IP.

– Domain : En 1ere approximation un Domain est un Workgroup avec unDomain Controler.

– WINS : Windows Internet Name Services. WNT serveur ou Samba fontserveur WINS. Le serveur WINS permet la traduction de noms NetBIOS(SMB) en adresse IP. WINS permet aussi aux clients d’avoir des informa-tions sur les NetBIOS name type. Si un WNT serveur existe, le prendrecomme serveur WINS. Sinon prendre Samba. Chaque machine Microsoftou Samba doit indiquer le serveur WINS.

– Microsoft Domain Security : permet en se loggant sur n’importe quellemachine du domaine de se retrouver dans son propre environnement.

– Domain Controler : assure l’authentification des utilisateurs (gere unsysteme userid/password = Security Account Manager -SAM-). Gere aussides logon scripts et des profils utilisateurs.

– PDC : Primary Domain Controller en NT

Page 173: Linux Reseau

13.2. PROTOCOLES MICROSOFT 173

– BDC : Backup Domain Controller en NT : simple copie d’un PDCNoms NetBIOS : suite d’au plus 15 caracteres plus un caractere de type

code en hexa :– 00 Standard Workstation Service– 20 Serveur de fichiers (et d’imprimantes) (defaut)– 03 Service Messenger (Winpopup)– 06 Serveur RAS– 21 Client RAS– 1b Domain master browser– 1d Master Browser Name– 1f Serveur NetDDE– be Network Monitor Agent– bf Network Monitor UtilityTypes de noms de groupe :– 00 Groupe standard– 1c Serveur de logons– 1d Master Browse Name– 1e Normal group Name– 20 Internet group Name– 01 MSBROWSE (utilise pour annoncer un groupe aux autres Master

Browser)

13.2.1 Ports ouverts sur les machines Windows Microsoft

– 137/tcp netbios-ns– 137/udp netbios-ns– 138/tcp netbios-dgm– 138/udp netbios-dgm– 139/tcp netbios-ssn– 139/tcp netbios-ssn– 445/tcp microsoft-ds (pour W2000/XP)– 445/udp microsoft-ds (pour W2000/XP)–

13.2.2 Configuration des clients reseau Microsoft sur Win-dows

En W98 :– Demarrer/Parametres/Panneau de configuration– Double cliquer l’icone reseau– Ajouter : Clients/Microsoft/Client pour les reseaux Microsoft– Ajouter : Protocoles/Microsoft/TCP-IP– Configurer en selectionnant TCP-IP/Proprietes : remplir adresse IP ...– Remplir WINS Server : adresse IP du serveur WINS– Onglet : Identification

– Nom de l’ordinateur : (Name registration)– Groupe de travail : (Workgroup)– Description de l’ordinateur : nom proprietaire, par exemple.

– Optionnel : Si on veut utiliser Samba comme un PDC, selectionnez Clients/Microsoft/”Clientpour les reseaux Microsoft”. Dans ”Proprietes” : cocher la case ”ouvrir la

Page 174: Linux Reseau

174 CHAPITRE 13. SAMBA

session sur un domaine NT”, et indiquer le nom du DOMAINE qui estidentique au WORKGROUP.

– Selectionnez ”Partage de fichiers et d’imprimantes”– Onglet : Controle d’accesPar suite, une icone ”voisinage reseau” (Network Neighborhood) apparaıt

sur le bureau. Quand on clique cette icone apparaissent toutes les machines(Windows ou Unix-Samba) du groupe de travail.

A l’entree de Windows apparaıtra une fenetre demandant nom d’utilisa-teur et mot de passe. On verra que pour acceder au serveur Samba, ces use-rids/passwords doivent etre definis en Unix (voir security=user plus loin).

Si on a selectionne ”ouvrir la session sur un domaine NT” un 3eme champapparaıt dans cette fenetre : ”Groupe de travail”

13.3 Commandes Lan-Manager sous DOS

13.3.1 Commandes net

– Usage : net /h|more– Marche : net start– Arret : net stop– Liste des serveurs et des partages : net view– Liste des partages d’un serveur : net view \\serveur– Acces a un disque d’une machine distante :net use e: \\zoroastre\tmpe:dirnet use e: /delete (fermeture de l’acces au disque)

– Fermeture de l’acces a un disque distant :net use e: /delete

– Acces a une imprimante distante :net use lpt2: \\zoroastre\hp5mtype fichier>lpt2net use lpt2: /delete

– Fermeture de l’acces a une imprimante distante :net use lpt2: /deletezoroastre est le nom du serveur, hp5m, le nom de l’imprimante, lpt2 lenom local sous lequel l’imprimante est declaree

– synchronisation horloge : net time \\serveur /set/ yes

13.3.2 Interrogation de noms NetBIOS

nbtstat -a NetBIOS name

13.4 Le logiciel Samba

13.4.1 Installation

Version : Sur Debian woody 2.2.3a-15, sur Debian sarge 3.0.14a-3.Site www : http ://fr.samba.org

Page 175: Linux Reseau

13.5. CONFIGURATION DE SAMBA 175

Packages Debian : samba, samba-common, smbclient, samba-doc. samba-docest facultatif. smbclient l’est aussi mais tres utile pour tester en Linux le fonc-tionnement d’un serveur Samba.

Debian fait a l’installation une configuration par sambaconfig qui proposede demarrer samba a travers inetd (deconseille) ou comme daemon, de creer unfichier /etc/samba/smbpasswd et de demarrer samba s’il est en daemon. Cesparametres sont ranges dans /etc/samba/debian config

13.4.2 Description

– Le serveur est constitue de deux daemons :– smbd : serveur SMB : gere les acces aux ressources partagees– nmbd : serveur de noms Netbios : permet de localiser les serveurs

– Fichier de configuration : /etc/samba/smb.conf– Ports TCP et UDP : Entrees dans /etc/servicesnetbios-ns 137/tcp # NETBIOS Name Servicenetbios-ns 137/udpnetbios-dgm 138/tcp # NETBIOS Datagram Servicenetbios-dgm 138/udpnetbios-ssn 139/tcp # NETBIOS session servicenetbios-ssn 139/udp

– Demarrage des daemons : En Debian /etc/init.d/samba start Remarque :smbd et nmbd peuvent etre demarres par inetd

– Test :testparm|moresmbclient -L serveur_sambanetstat -a|grep netbios

Le test determinant est l’acces depuis Windows.

13.4.3 Utilitaires

– testparm : test de la configuration de Samba configuration– testprns lp : teste l’acces a 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

13.5 Configuration de Samba

A l’installation en Debian une configuration est proposee sous debconf Toutle parametrage est regroupe dans le fichier : /etc/samba/smb.conf

Quand on modifie smb.conf il faut relancer Samba.

Page 176: Linux Reseau

176 CHAPITRE 13. SAMBA

13.5.1 Structure et syntaxe

Le fichier est fait de sections (nom entre crochets) et de parametres (nom =valeur). La casse des caracteres est indifferente. Une ligne commencant par ; ou# est ignoree.

;; /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]...

Test de la configuration : testparm

13.5.2 Section ”global”

Les parametres definis dans la section global sont valables dans les autressections. Exemple :

[global]printing = bsdprintcap name = /etc/printcapload printers = yesguest account = nobodyinvalid users = roothosts allow = 193.54.230. 127.security = userworkgroup = PHASEserver string = %h server (Samba %v)socket options = IPTOS_LOWDELAY TCP_NODELAY SO_SNDBUF=4096 SO_RCVBUF=4096socket address = 193.54.230.121interfaces = 193.54.230.121encrypt passwords = truesmb passwd file = /etc/samba/private/smbpasswdwins support = yes

; wins server = 172.16.0.10os level = 65

Page 177: Linux Reseau

13.5. CONFIGURATION DE SAMBA 177

; domain master = nolocal master = yespreferred master = yes

name resolve order = host wins bcastmax log size = 1000debug level = 0

Explications : voir man smb.conf

– printing : type de systeme d’impression Unix : BSD, SYSV, LPRNG, ...– printcap name : nom du fichier ou les imprimantes sont definies– load printers : si yes (defaut) toutes les imprimantes du fichier printcap

sont rendues visibles.– guest account : userid utilise pour les services ”guest ok”. Par exemple

un client lira la browse list tenue par samba comme guest. Si guestaccount est absent, il ne pourra le faire.

– invalid users : liste d’utilisateurs interdits– hosts allow : adresses IP des machines autorisees a acceder au service.

193.54.230. designe un reseau de classe C– security : si user (defaut) le userid/password donne en entree de session

Windows doit etre defini sur Unix (/etc/passwd ...)– encrypt passwords : par defaut en W98 et WNT les passwords sont

cryptes (il faut modifier la base de donnees de registres pour qu’ils soient enclair). Il est recommande maintenant de mettre encrypt passwords=yes.

– smb passwd file : nom du fichier des mots de passe. En version 3.0,les mots de passe sont geres dans une base de donnees SAM. Cette ligneest remplacee par : passdb backend = tdbsam guest. Les mots de passesont dans le fichier /var/lib/samba/passdb.tdb et manipules par la com-mande pdbedit. Au passage de la version 2.2 a 3.0 l’installateur Debianpropose une conversion automatique.

– workgroup : nom du groupe de travail. On n’utilise pas les domaines NT.– server string : chaıne de caracteres apparaissant en commentaire dans

la ”Browse List”. %h designe le nom du serveur, %v la version de Samba.– socket options : parametres d’optimisation de l’interface reseau– socket address : adresse IP ecoutee par Samba. Utile en cas de IP-

aliasing.– interfaces : precise le ou les interfaces reseaux a utiliser pour le browsing,

l’enregistrement de noms.– wins support : si yes le daemon nmbd fera serveur WINS.– wins server : adresse IP du WINS serveur si Samba ne le fait pas.– os level : il y a un concours pour choisir un ”local master browser” pour

le workgroup. Celui qui a le plus fort os level l’emporte. (Wfg=W95=1,W98=2, WNT WS=16 ou 17 WNT Serveur= 32 ou 33).

– domain master : no (utile si sous-reseaux IP)– local master : yes Samba tiendra a jour la browse list de son workgroup– preferred master : force nmbd a gagner le concours de master browser

au demarrage– name resolve order : ordre de consultation des services de noms pour

resoudre les hostnames en adresses IP. host designe le fichier /etc/hostset le serveur DNS, wins interroge le WINS server, bcast l’envoi d’unbroadcast.

Page 178: Linux Reseau

178 CHAPITRE 13. SAMBA

– max log size : taille en Kilooctets du fichier log apres quoi smbd le prefixeen .old et en recree un autre. Fichiers log : Depuis Samba 2.2 ils sont enDebian dans /var/log/samba/. Ce sont /var/log/samba/log.smbd et/var/log/samba/log.nmbd

– debug level : niveau de debug (si probleme, voir les messages dans fi-chiers logs.)

13.5.3 Partage

Un partage (share) ou service est defini par un repertoire auquel il permetd’acceder et des conditions d’acces. C’est soit un partage de fichiers, soit unpartage d’imprimante. Les droits d’acces aux fichiers sont conditionnes par lespermissions Unix.

13.5.4 Section ”homes”

Si une section ”homes” existe, a la connexion d’un utilisateur un partage estcree a la volee avec pour nom son userid, pour chemin d’acces (path) son homedirectory et comme parametres ceux de la section ”homes”. Cela suppose quel’utilisateur Windows a un login Unix. Ces partages ne seront accessibles qu’aleur proprietaire.

[homes]comment = Home Directoriesbrowseable = noread only = nocreate mask = 0755directory mask = 0755

– browseable Si no, n’apparaıt pas dans la browse list.– create mask : Les permission sur les fichiers Linux sont obtenues en fai-

sant un AND logique entre ce masque et le DOS mode. La valeur pardefaut de ce masque enleve les permissions write et execute pour group etothers. Exemples :– create mask = 0700 (c’est l’option par defaut) donne rw-------– create mask = 0700 donne rw-------– create mask = 0700 donne rw-------

– directory mask : idem pour les repertoires

13.5.5 Section ”printers”

[printers]comment = All Printersbrowseable = nopath = /tmpprintable = yespublic = nowritable = nocreate mode = 0700

Page 179: Linux Reseau

13.5. CONFIGURATION DE SAMBA 179

Toutes les imprimantes decrites dans /etc/printcap seront accedees commec’est decrit ici. path est le repertoire ou les fichiers sont stoques avant d’etreenvoyes a l’impression.

13.5.6 Partage accessible par tous en lecture/ecriture

Permet aux utilisateurs Windows d’echanger des fichiers sans passer par lamessagerie ou ftp.

[tmp]comment = Espace public temporairepath = /tmpread only = nopublic = yes

13.5.7 Partage accessible par tous en lecture, reserve enecriture

Ce repertoire est public mais seuls christof et weymann ont le droit d’ecriture.

[fournis]comment = Base de donnees des fournisseurspath = /home/fournispublic = yeswritable = yesprintable = nowrite list = christof, weymann

13.5.8 Partage a acces reserve

Seul le userid christof peut acceder a ce repertoire

[pv]comment = Pages Web photovoltaiquepath = /var/www/phase/pvvalid users = christofpublic = nowritable = yesprintable = no

13.5.9 Authentification

La methode recommandee est d’utiliser security=user et de prendre commeuserid/password Windows les memes userid/password qu’en Unix.

Si pour un partage on a mis la clause guest ok = yes, alors aucun passwordn’est demande pour l’acceder.

Mots de passe cryptes

[global]security = user

Page 180: Linux Reseau

180 CHAPITRE 13. SAMBA

encrypt passwords = yessmb passwd file = /etc/samba/private/smbpasswd

Ce fichier /etc/samba/private/smbpasswd ne doit etre lisible que par root.Faire :

chmod 500 /etc/samba/private

Passage aux mots de passe cryptes :

cat /etc/passwd | mksmbpasswd >/etc/samba/private/smbpasswdchmod 600 /etc/samba/private/smbpasswd

mksmbpasswd cree une entree par utilisateurs, mais les passwords cryptes nesont pas entres. Pour le faire, dans smb.conf ajouter :

encrypt passwords = nosmb passwd file = /etc/samba/private/smbpasswdupdate encrypted = yes

Les machines clientes continuent a envoyer des passwords en clair mais ilssont entres sous forme cryptee dans /etc/samba/private/smbpasswd. Quandils sont tous entres on passe a la forme cryptee en modifiant sur le serveursmb.conf ainsi :

encrypt passwords = yessmb passwd file = /etc/samba/private/smbpasswdupdate encrypted = no

et sur les clients en modifiant la base des registres pour que les passwordssoient cryptes.

Les passwords peuvent etre modifies par l’utilisateur, il suffit de taper smbpasswdcomme pour passwd de Unix.

Documentation :zmore /usr/doc/samba-doc/ENCRYPTION.txt.gz

Gestion des mots de passe par tdbedit

13.6 Audit :

– testparm : controle la validite du fichier de configuration de Samba– ping : test connectivite du client, du serveur– smbclient -L serveur : affiche les partages de la machine serveur– netstat -a|grep netbios : controle des sockets ouverts– nmblookup : interrogation de noms NetBios

Il y a deux types de resolution de nom NetBIOS : Broadcast (option -B),point a 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 meme zone de broadcast– nmblookup -S serveur : liste les noms declares par un serveur (S comme

node status query)

Page 181: Linux Reseau

13.7. INCIDENTS 181

[morel@zoroastre morel]$ nmblookup -S zoroastreSending queries to 193.54.230.255193.54.230.20 zoroastre<00>Looking up status of 193.54.230.20received 7 names

ZOROASTRE <00> - M <ACTIVE>ZOROASTRE <03> - M <ACTIVE>ZOROASTRE <20> - M <ACTIVE>..__MSBROWSE__. <01> - <GROUP> M <ACTIVE>PHASE <00> - <GROUP> M <ACTIVE>PHASE <1d> - M <ACTIVE>PHASE <1e> - <GROUP> M <ACTIVE>

– nmblookup -U zoroastre -R phase : Interroge le serveur WINS zo-roastre pour le nom PHASE (U comme Unicast)

13.7 Incidents

– Si probleme 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’icone

Voisinage reseau. 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 repondu a la question userid/password en debut desession Windows, soit votre userid/password n’est pas conforme a celui duserveur Samba, soit il y a desaccord sur le cryptage des passwords entrele serveur et votre machine.En Windows 98 par defaut les passwords pourles echanges reseau sont cryptes. Pour l’empecher modifier ainsi la base deregistres :Demarrer/Executer/regeditHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Vxd\VNETSUP\Menu Edit/Nouveau/Valeur DWORDMettre le nom a EnablePlainTextPassword(Attention aux majuscules)Selectionner ce nom puisMenu Edit/Modifier/Donnees de la valeur:00000001Puis rebooter.

13.8 Acces depuis Unix aux ressources Windows

Le client Unix est smbclient, il permet d’acceder aux fichiers et impri-mantes Windows. Le support de smbfs par le noyau Linux permet de monterdes filesystems Windows a travers Samba.

13.8.1 smbclient : acces aux fichiers Windows a la ftp

– smbclient -L zoroastre -U% : liste des partages de la machine zo-roastre et de sa browse list (si c’est un local master browser). L’option-L indique le nom NetBIOS de la machine. L’option -U designe le userid.Si % cela signifie password vide.

Page 182: Linux Reseau

182 CHAPITRE 13. SAMBA

– smbclient ’\\zoroastre\public’ -U% : acces au partage ”public” dezoroastre, sans password. On accede aux fichiers a la maniere de ftp, com-mandes ls, put, get, faire help On utilise des quotes pour empecher leshell d’interpreter ’\’.

– smbclient //aline/java -U% : acces au partage java de la machine aline.On remarque qu’on peut utiliser ’/’ au lieu de ’\’. Les quotes ne sont plusnecessaires.

13.8.2 Messages Winpopup

echo "salut Eric"| smbclient -M canyon : message envoye a Winpopupde la machine canyon.

13.8.3 smbtar

smbtar est un shell script qui appelle smbclient. Il permet de sauver surun lecteur de cartouche Unix les fichiers d’un partage Windows.

Appel :

smbtar -s aline -x java -t /dev/nst0 -v

sauvegarde par tar le partage java de la machine de nom NetBIOS alinesur le lecteur de cartouches SCSI /dev/nst0 en mode verbose.

13.8.4 smbmount

Le support de smbfs doit etre configure dans le noyau et, en Debian, il fautle package smbfs.

– smbmount-2.0.x //aline/java smb -n : monte le partage java de lamachine aline sur le repertoire smb sans mot de passe (-n). Il n’est pasnecessaire d’etre root.

– smbmount-2.0.x -h : decrit les options– smbumount-2.0.x smb : demonte le filesystem

13.8.5 smbprint

smbprint est un shell script qui appelle smbclient pour envoyer un fichier aimprimer sur une imprimante Windows.

Pour imprimer il suffit de se connecter a un service d’impression et de faireprint fichier. Exemple :

smbclient //ananda/laser -U%print nom_fichier

Ceci peut se faire par lpr via un filtre.Configuration dans /etc/printcap, exemple :

pv|laser|LaserWriter Select 360:\:lp=/dev/null:\:sd=/var/spool/lpd/pv:\:sh:\:af=/var/spool/lpd/pv/acct:\

Page 183: Linux Reseau

13.9. APPLICATIONS DE SAMBA 183

:lf=/var/log/lp3-errs:\:if=/var/spool/lpd/pv/smbprint

Un fichier /var/spool/lpd/pv/.config doit valoriser les variables :

[morel@zoroastre pv]$ cat .configserver=anandaservice=laserpassword=""

Execute :

(echo "print -"; cat)| smbclient ’\\ananda\laser’

13.9 Applications de samba

13.9.1 Distribution de logiciels pour Windows

Au lieu de faire une installation d’un logiciel sur le disque local d’une ma-chine, il peut etre installe sur un partage d’un serveur Samba par exemple.

13.9.2 Fonction Primary Domain Controller de Samba

Comme WNT, Samba peut authentifier les utilisateurs Windows et definirun environnement personnalise : raccourcis du menu demarrer, icones du bureau,preferences comme fond d’ecran ou couleurs que chacun retrouvera quelque soitla machine sur laquelle il se connecte.

Cette fonctionnalite n’est disponible qu’a partir de Samba 2.1 pour desclients Windows NT. Pour W85/98, dans Configuration Reseau selectionnezClients/Microsoft/Client pour les reseaux Microsoft Dans ”Proprietes” : cocherla case ”ouvrir la session sur un domaine NT”, et indiquer le nom du DOMAINEqui est identique au WORKGROUP.

Script de logon

Cela se fait par un fichier *.bat range sur le serveur Samba.

[global]security=userdomain logons = Yeslogon script=%U.bat

[netlogon]comment = Network Logon Servicespath=/home/samba/netlogonwriteable= noguest ok = nobrowseable = nolocking = nocase sensitive = no

Page 184: Linux Reseau

184 CHAPITRE 13. SAMBA

%U prend comme valeur le nom de l’utilisateur. Le partage netlogon est l’en-droit ou sont ranges les scripts *.bat. Ainsi pour l’utilisateur dupond il y auraun fichier : /home/samba/netlogon/dupond.bat

Exemple d’un script dupond.bat

echo Mise a l’heurenet time \\zoroastre /set /yesecho Ouverture de partagesnet use h: \\zoroastre\tmp

Ce script sera execute sous Windows, il doit avoir des fins de ligne a laMSDOS.

Le script de logon peut etre collectif, par exemple :

logon script=startup.bat

Profil mobile (roaming profile)

Il permet de garder le meme environnement de travail tout en changeant demachine : l’environnement est stocke sur le serveur.

[global]domain logons = yessecurity = userlogon path = \\zoroastre\profile\%U

[profile]comment = User profilespath = /home/samba/profilecreate mode = 0600directory mode = 0700writable = yesbrowsable = no

Le partage profile contiendra les profils utilisateurs. Par exemple le repertoire/home/samba/profile/dupond. Des fichiers sont copies dans ce repertoire a la1ere connexion, notamment un user.dat.

L’utilisateur Windows peut changer son profil. L’administrateur peut rendreun profil obligatoire (mandatory) en renommant user.dat en user.man et enmettant les fichiers read-only.

13.9.3 Installation partagee de drivers d’imprimante pourW9x

Quand on clique depuis W95 sur une imprimante partagee par Samba, ledriver peut-etre installe automatiquement comme depuis un serveur WNT.

Ceci ne marche pas sur WNT.

1. Creer un repertoire et un partage par exemple :

[printer$]comment = Pilotes d’imprimante

Page 185: Linux Reseau

13.9. APPLICATIONS DE SAMBA 185

path=/home/samba/printerpublic=yeswritable=nobrowseable=yes

2. Installer les drivers sur une machine W95.

3. Reperer les drivers necessaires pour une imprimante. Copier

c:\windows\inf\msprint*.inf

sur Linux dans /home/samba/lib. Executer, par exemple :

cd /home/samba/libmake_printerdef msprint.inf "Apple LaserWriter" >> printers.def

ce programme affiche sur stderr tous les fichiers necessaires. Copiez lesdans /home/samba/printer

4. Ajoutez deux parametres dans /etc/samba/smb.conf. Dans la section[global] ’printer driver file’ doit pointer sur printers.def quel’on vient de creer. L’autre ’printer driver location’ pour chaquepartage d’imprimante pointe sur le repertoire ou le client trouvera lesdriversExemple :

[global]printer driver file=/home/samba/lib/printers.def

[lp]comment = My old printer laserbrowseable = yesprintable = yespublic = yeswritable = nocreate mode = 0700printer driver=Apple LaserWriterprinter driver location=\\%h\printer$

%h donnera le nom du serveur Samba, et printer$ est le nom du partagecree plus haut.

Voir /usr/doc/samba-doc/PRINTER DRIVER.txt.gz

13.9.4 Serveurs virtuels

La commande netbios aliases permet a un serveur de porter plusieursnoms NetBios.

La commande include permet d’inclure de maniere dynamique des pa-rametres de configuration.

[global]netbios aliases = admin otherinclude = /etc/samba/smb.conf.%L

Page 186: Linux Reseau

186 CHAPITRE 13. SAMBA

Ici le serveur apparaıtra dans le voisinage reseau des clients sous son nompar exemple zoroastre et aussi sous admin et other. %L prendra les valeurszoroastre, admin et other.

Le fichier /etc/samba/smb.conf.admin peut contenir une section global etdes partages. S’il n’existe pas, cela ne fait pas d’erreur.

Page 187: Linux Reseau

Chapitre 14

Netatalk : serveurAppleTalk

14.1 Une implementation du protocole Apple-Talk en Unix BSD like

Netatalk est une implementation du protocole AppleTalk pour les systemesvoisins de BSD. La version actuelle supporte EtherTalk Phase I et II, DDP,RTMP, NBP, ZIP, AEP, ATP, PAP, ASP, et AFP. La pile des protocoles est lasuivante :

AFP|ASP PAP\ /ATP RTMP NBP ZIP AEP| | | | |

-+---------------------------------------------------+- (kernel boundary)| Socket |+-----------------------+------------+--------------+| | TCP | UDP || DDP (kernel) +------------+--------------+| | IP |+-----------------------+---------------------------+| Network-Interface |+---------------------------------------------------+

– Couche reseau :– DDP : Datagram Delivery Protocol

– Couche transport :– RTMP : Routing Table Maintenance Protocol (emet un paquet RTMP

tous les 10 secondes)– AEP : Appletalk Echo Protocol : ping utilise au depart de chaque

session

187

Page 188: Linux Reseau

188 CHAPITRE 14. NETATALK : SERVEUR APPLETALK

– ATP : Appletalk Transaction Protocol : assure la livraison des paquetssans perte

– NBP : Name Binding Protocol : assure la correspondance entre adressesAppletalk et entites nommees sous la forme ”objet :type@zone”. Leselecteur du Mac permet de selectionner les entites nommees.

– Couche session :– ASP : Appletalk Session Protocol : sert a etablir une session– PAP : Printer Access Protocol : fait communiquer une station et un

service d’impression– ZIP : Zone Information Protocol permet avec RTMP de gerer la corres-

pondance entre numeros de reseaux et noms de zone.– Couche presentation :

– AFP : AppleTalk Filing Protocol : permet d’acceder a des fichiers dis-tants, utilise par Appleshare.

14.2 Implementation en Linux

– DDP est dans le noyau (mettez le de preference en module sinon pourarreter Netatalk vous etes oblige de faire shutdown)

– atalkd implemente RTMP, NBP, ZIP, and AEP. C’est l’equivalent Ap-pleTalk de ”routed”

– afpd donne aux Mac l’acces aux filesystem Unix– papd permet aux Mac l’acces aux imprimantes Unix– pap permet a Unix l’acces aux imprimantes Mac

14.3 Documentation :

http://www.umich.edu/\~{}rsug/netatalk/

14.4 Installation

Package Debian netatalk Version : 2.0.2-3Compilation du noyau :Appletalk DDP doit etre compile sous forme de module. Sinon on ne peut

redemarrer les serveurs netatalk. Il est preferable d’autoriser le multicast.

Appletalk DDP (CONFIG_ATALK) [M/n/y/?] MCONFIG_IP_MULTICAST = Y

Le module appletalk fait appel au module psnap qui appelle p8022.Demarrage : Le shell script /etc/init.d/netatalk demarre les daemons

afpd papd atalkd.

/etc/init.d/netatalk startStarting AppleTalk daemons (this will take a while):

Le package libslp1 est requis. Il met en oeuvre le protocole SLP (ServiceLocation Protocol RFC 2614) qui permet de localiser des services.

Page 189: Linux Reseau

14.5. CONFIGURATION 189

14.5 Configuration

14.5.1 atalkd

/etc/netatalk/atalkd.conf : en general vide. Peut contenir :

eth0 -phase 2 -net 0-65534 -addr 65280.215

65280.215 est l’adresse de notre machine. Ce fichier peut etre necessaire sion a plusieurs interfaces reseau.

14.5.2 afpd

afpd : daemon interface avec AppleTalk Filing Protocol(AFP)Configuration– /etc/netatalk/afpd.conf : en general vide.– /etc/netatalk/AppleVolumes.default : repertoires 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 repertoires auxquels le user a acces– /etc/netatalk/AppleVolumes.system : definit les correspondances pour

les extensions de fichiers.Documentationman afpdDans chaque repertoire du serveur Linux ou accedes un Mac par Netatalk

un repertoire ”invisible” .AppleDouble est cree qui contient les memes noms defichiers que le repertoire ou il se trouve. Ces fichiers sont de type AppleDoubleencoded Macintosh file.

14.5.3 papd

Le serveur papd permet aux Mac d’imprimer sur des imprimantes Unix.Configuration dans /etc/netatalk/papd.conf :

Printer 1:LaserWriter@Printing and Mailing:\:pr=|/usr/bin/lpr -Plp2:

14.5.4 pap

pap permet depuis Unix d’imprimer sur une imprimante Appletalk. Il fautconfigurer 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 entites AppleTalk

Page 190: Linux Reseau

190 CHAPITRE 14. NETATALK : SERVEUR APPLETALK

$ nbplkupzoroastre:AFPServer 65280.102:128zoroastre:netatalk 65280.102:4zoroastre:Workstation 65280.102:4phoebus:AFPServer 65280.8:128phoebus:netatalk 65280.8:4phoebus:Workstation 65280.8:4

HP LaserJet 4050 Series :SNMP Agent 65281.4:8HP LaserJet 4050 Series :LaserWriter 65281.4:157HP LaserJet 4050 Series :HP LaserJet 65281.4:158

LaserJet 5:SNMP Agent 65281.128:8LaserJet 5:LaserWriter 65281.128:157LaserJet 5:LaserJet 5 65281.128:158direction:ARA - Client-Only 10707.22:2direction: Power Macintosh 10707.22:252direction: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 a atalkd que nbpname est parti

– megatron est utilise pour transformer des fichiers de BinHex, MacBinary,AppleSingle, ou les fichiers en format AppleDouble a la maniere netatalken MacBinary ou AppleDouble a la maniere netatalk. Le format Apple-Double a la maniere netatalk est le format de fichier utilise par afpd, leApple Filing Protocol (AppleShare) du serveur netatalk. BinHex, MacBi-nary, and AppleSingle sont des formats de fichier usuels pour transferer desfichiers Macintosh entre machines par mail ou ftp. Si megatron est appelesous le nom unhex, unbin, ou unsingle, il essaiera de convertir le ou lesfichiers de BinHex, MacBinary, ou AppleSingle en format AppleDouble.

14.7 Incidents

Starting AppleTalk Daemons (this will take a while):socket: Address family not supported by protocolsocket: Address family not supported by protocolatalkd: can’t get interfaces, exiting.atalkd afpd papd

Cause : le module appletalk n’est pas charge, faites

modprobe appletalk

Page 191: Linux Reseau

Chapitre 15

HylaFAX

HylaFAX est un serveur de Fax sur Unix ecrite par Sam Leffler (1990-1996)Silicon Graphics Inc.

References HylaFAX– Documentation HylaFAX :http://www.hylafax.org/

– Documentation de votre serviteur :http://www-phase.c-strasbourg.fr/inform/fax.html

Dechargement :ftp://ftp.hylafax.org

15.1 Les normes de fax

Les organismes de normalisation : ITU (anciennement CCITT), EIA/TIA

15.1.1 Standard ITU : Groupes de Fax

– Groupe 3 : 1980 : Encodage binaire ; une page en moins de une minute.Le plus repandu a l’heure actuelle. Suit les avis T.30 et T.4 de l’ITU.

– Group 4 : 1984 : Standard de transmission de fax sur reseau ISDN (RNIS)a 64kbps

15.1.2 Standards ITU de vitesse de transmission

– V.17 : 14,400 bps, synchrone, half duplex, utilise pour la transmission del’image

– V.29 : 9600 bps, synchrone, half duplex, utilise pour la transmission del’image

– V.27ter : 4800 bps, synchrone, half duplex, utilise en repli– V.21 : 300 bps, utilise pour la negociation du debut

15.1.3 Protocoles d’envoi de fax

– ITU T.4 : Definit le format standard de l’image transmise par fax. L’imageest comprimee de plusieurs facons :

191

Page 192: Linux Reseau

192 CHAPITRE 15. HYLAFAX

– 1-D : schema de codage a une dimension (ou MH : Modified Hoffman)En resolution ”fine” (7.7 lignes/mm) un fax A4 fait 3.8 millions de pixelssoit 464KB. La compression 1-D le reduit a 20-50KB.

– 2-D : codage a deux dimensions (ou MR : Modified Read) : rare– ITU T.30 : Definit le dialoque entre deux machines de fax sur les lignes

telephoniques. Inclut les standards de modulation et de format de donnees.Ledialogue se fait en cinq phases :– A - Initialisation de l’appel– B - Procedure avant message : identification et choix des options– C - Transmission du message– D - Procedure apres message

– E dit ce qu’il veut faire :– envoi d’une autre page– terminer EOP– demande intervention operateur

– R envoie son accuse de reception de la page precedente– MCF : message confirmation : bien recu– RTN : retrain negative : il y a des erreurs dans la transmission

– si erreur aller a B– si autre page aller a C– si EOP aller a E

– E - Fin de communication– Remarque sur T.30 :Detection d’erreur, mais pas de correction sauf si

extension ECM, Error Correction Mode

Les normes de Fax Modems

– Classe 1 (1988) EIA/TIA-578 C’est une extension du jeu de commandesHayes (commandes AT+F...) permettant a des ordinateurs d’envoyer etde recevoir des fax par modem. C’est un protocole de bas niveau, carl’ordinateur doit faire :– la rasterisation– la compression T.4– la gestion du protocole T.30L’avantage est que le protocole T.30 etant gere par logiciel, les correctionssont faciles. Les inconvenients :– le developpeur du logiciel doit respecter T.30 qui est complexe.– un logiciel classe 1 est tres sensible aux contraintes de temps et les

systemes multitaches comme UNIX ont des problemes pour les respec-ter. (voir modems classe 4 avec buffers)

– Classe 2 (1988-1992) Comme groupe 1 mais ici l’essentiel de T.30 est prisen charge par le modem. L’ordinateur doit toujours faire la rasterisationet la compression T.4. Avantages :– l’ecriture des logiciels est plus facile– le logiciel n’est plus assujetti a des contraintes de temps de reponse tres

strictes : c’est donc fait pour UNIX.Mais problemes :– le standard a mis beaucoup de temps pour etre adopte par le groupe

TR-29.2 de l’ITU-T– en 1988 le standard est ”vote mais non adopte” : draft SP-2388

Page 193: Linux Reseau

15.1. LES NORMES DE FAX 193

– en 1989 revision mais toujours non adoptee :– draft SP-2388 document TR-29/89-21R8 du 21 mars 90– draft SP-2388-A du 30 aout 1991– les industriels adoptent ce draft c’est la ”vieille” classe 2.– pire : des erreurs ont ete commises dans l’implementation de SP-2388.

Ils faut distinguer :– la vraie classe 2 : modems Everex 24/96D et modems MultiTech– les autres basees en particulier sur les chips Rockwell ou EXAR

– Classe 2.0 EIA/TIA/ANSI-592– apres 92 on decide d’appeler le standard officiel classe 2.0– fin 1994 seuls USRobotics et ZyXEL supportent la classe 2.0

T.30 Session Subparameter Codes

Capabilities are returned using a syntax specified in the Class 2/2.0 specifi-cation :

(vr),(br),(wd),(ln),(df),(ec),(bf),(st)

where,vr

indicates which vertical resolutions are supported : 0 (98 lpi), 1 (196 lpi)br

indicates which signaling rates are supported : 0 (2400 bits/sec), 1 (4800bits/sec), 2 (7200 bits/sec), 3 (9600 bits/sec), 4 (12200 bits/sec), 5 (14400bits/sec)

wdindicates which page widths are supported : 0 (1728 pixels in 215 mm), 1(2048 pixels in 255 mm), 2 (2432 pixels in 303 mm), 3 (1216 pixels in 151mm), 4 (864 pixels in 107 mm)

lnindicates which page lengths are supported : 0 (A4, 297 mm), 1 (B4, 364mm), 2 (unlimited length)

dfindicates which data formats are supported : 0 (1-D Modified Huffman),1 (2-D Modified Huffman), 2 (2-D Uncompressed Mode), 3(2-D ModifiedModified Read)

ecindicates whether or not the optional Error Correction Mode (ECM) issupported : 0 (disable ECM), 1 (enable T.30 Annex A, ECM), 2 (enableT.30 Annex C, half duplex), 3 (enable T.30 Annex C, full duplex)

bfindicates whether or not the optional Binary File Transfer (BFT) protocolis supported : 0 (disable file transfer modes), 1 (select BFT, T.434)

stindicates which minimum scan times are supported : 0 (scan time/line :0 ms/0 ms), 1 (scan time/line : 5 ms/5 ms), 2 (scan time/line : 10 ms/5ms), 3 (scan time/line : 10 ms/10 ms), 4 (scan time/line : 20 ms/10 ms), 5

Page 194: Linux Reseau

194 CHAPITRE 15. HYLAFAX

(scan time/line : 20 ms/20 ms), 6 (scan time/line : 40 ms/20 ms), 7 (scantime/line : 40 ms/40 ms)

15.2 Fonctions de HylaFAX

Hylafax est un logiciel de telecommunication pour machines UNIX permet-tant :

– d’envoyer et de recevoir des faxdepuis des machines en reseau TCP/IP– de partager un modem de maniere transparente entre plusieurs machines

sur reseau TCP/IPSes caracteristiques sont les suivantes :– Les fax peuvent etre de toutes tailles (A4, B4), soit 98 or 196 lpi et transmis

ou recus soit en format 1D-encoded ou 2D-encoded.– Hylafax supporte tout modem de Class 1, Class 2, ou Class 2.0.– Les documents qui peuvent etre transmis sont en format Postscript ou

TIFF Class F– Hylafax peut generer des pages de gardes.– Hylafax fournit une passerelle avec la messagerie.– Les documents recus sont en format TIFF Class F ils peuvent etre conver-

tis en Postscript par fax2ps et imprimes ou envoyes par mail en attachmenten fonction du numero de fax de l’expediteur.

– Le modem-fax est partage avec les applications de communications sor-tantes qui respectent le UUCP locking protocol : cu, minicom, tip, kermit,uucp, slip, et ppp.

– On peut aussi configurer Hylafax pour qu’il appelle getty quand des donneesautres qu’un fax se presentent en entree.

– Plusieurs modems peuvent etre utilises par le serveur.– Hylafax possede une architecture client-serveur et supporte 2 protocoles :

– HylaFAX Client-Server Protocol sur TCP– Le serveur gere la file d’attente des fax, il permet de programmer l’envoi

de fax en heures creuses.– Les applications clientes sont :

– sendfax, faxstat, faxrm sur machine Unix– Macflex sur Mac– Winflex sur Windows 3.x– Whfc sur Windows 95 et NT

– HylaFAX, anciennement FlexFAX, est une marque deposee de Silicon Gra-phics Inc. Il a pour auteur Sam Leffler <[email protected]> et la dernieremise a jour date de 1996/08/16. C’est un free software.

15.3 Sur quelles machines fonctionne Hylafax ?

HylaFAX est prevu pour fonctionner sur tout systeme UNIX qui dispose de :– fichiers speciaux FIFO ou tubes nommes (named pipes) commande mkfifo– sockets a la BSD et protocoles TCP/IP– mecanisme de locking a la BSD (flock) ou fonctionnalite equivalente per-

mettant de l’emuler (fcntl, lockf)– interfaces POSIX 1003.1 incluant termios pour manipuler les devices tty.

Page 195: Linux Reseau

15.4. CHOISIR ET INSTALLER UN MODEM : 195

Linux a ces fonctionnalites.

15.4 Choisir et installer un modem :

15.4.1 Hylafax et les modems :

– Class 1 : En classe 1 avec un USR Sporster Voice 33.6 kbps nous avons eudes problemes. Les modems de class 1 sont deconseilles pour HylaFAX.

– Class 2 : HylaFAX a ete bien teste sur beaucoup de modems de class 2. Il ilfournit meme des solutions pour contourner des erreurs d’implementationde T.30.

– Class 2.0 : c’est un standard encore jeune. Le driver 2.0 a ete ecrit pourUSR Courier puis teste sur ZyXEL 1496E

15.4.2 Les modems recommandes :

– Multi-Tech MT1432BA, MT1432BG, MT224BA, MT1932ZDX, MT2834BA,MT2834ZDX,Class 2 Chez BlackBox France (tel 01 45 60 67 37 fax : 01 45 60 67 47) :– MT2834ZDXF (930F HT)– MT2834ZDXF-33 (1070F HT)

– ZyXEL U1496 Class 1, 2, 2.0 interdit a la vente en Europe. ZyXEL Elite2864 avec Flash EPROM, extensible RNIS (2990F HT) equivalent ?

On choisira un modem externe, parce que :– si on veut reinitialiser le modem, suite a un numero brule, on n’est pas

oblige d’arreter l’ordinateur– les voyants lumineux permettent de voir l’activite du modem– le modem peu aisement etre deplace sur une autre machine

15.4.3 Installer le modem sur un PC

1. Tester le port serie– Verifier les switchs sur la carte serie pour les numeros de port COM. et

les numeros d’IRQ– sous root activer le controle de flux hardware :sttty -a crtscts </dev/ttyS0

2. Connecter le modem

3. Tester le modem :Avec un logiciel type cu ou minicom :– Tester si le modem repond :Taper : ATE1QV1

Le modem doit repondre : OK– Demander les classes de modem-fax supportees : AT+FCLASS=?– Demander les possibilites en fax :

– en Class1 : AT+FTM=?– en Class 2 : AT+FDCC= ?– en Class 2.0 : AT+FCC= ?

– Essayer un appel : ATDT0388....

Page 196: Linux Reseau

196 CHAPITRE 15. HYLAFAX

15.5 Installation de HylaFAX

15.5.1 Prerequis :

– TIFF distribution 3.4 ou suivantes– libtiff3.4– tiffcp(1), tiff2ps(1), tiffinfo(1), fax2ps(1)– ftp ://ftp.sgi.com/graphics/tiff

– compilateur C++, gcc2.6.3 ou suivant libg++2.6.2 sont recommandes– ghostscript version 2.6.1 et suivantes

– http ://www.cs.wisc.edu/ ghost/ghostscript– il faut les drivers tiffg3 et tiffg32dverifier par : gs -h– pour l’installation ajouter tiffg3.dev dans Makefile list de configured

devices– gmake >=3.63The make files are extensive and work untouched with the

system make under many systems. If your make does not understand them,then you should be able to use the GNU make (gmake) instead.

– gawk >=2.15 utilise dans les shell-scripts.These uses are reasonably simple,but will not work if your awk is old enough that it does not support func-tions or the -v command line option for setting variable values before theBEGIN action is executed. If you encounter problems using the standardawk on your system, try the GNU awk : gawk.

– sed de GNU– /bin/test avec option -c

15.5.2 Procedure d’installation

– cd hylafax-v4.0pl1– ./configure (emplacement des logiciels, librairies ...)– make– make install (sous root)

15.5.3 Documentation

man hylafaxman hfaxdman configlynx /usr/doc/hylafax-doc/index.html (en Debian)

15.6 Configuration de HylaFAX

15.6.1 Les scripts de configuration

L’essentiel du travail de configuration est fait par le script faxsetup– controle l’installation des logiciels et de l’arborescence /var/spool/fax– cree un user fax de meme uid et gid que uucp.– cree pour le daemon client-serveur hfaxd dans /etc/services les entrees :flexfax 4557/tcp # Ancien protocol hylafaxhylafax 4559/tcp fax # Hylafaxet dans /etc/inetd.conf :

Page 197: Linux Reseau

15.7. ENVOI D’UN FAX 197

hylafax stream tcp nowait fax /usr/local/sbin/hfaxd hfaxd -Iflexfax stream tcp nowait fax /usr/local/sbin/hfaxd hfaxd -O

– appelle faxaddmodemfaxaddmodem ttyS0– cree un fichier de configuration /var/spool/fax/etc/config.ttyS0 en

fonction du modem (il y a des configurations types dans /var/spool/fax/config– teste le modem par probemodem ttyS0– faxaddmodem sert a ajouter un autre modem

15.6.2 Les fichiers de configuration :

– /var/spool/fax/etc/config controle le ”scheduler” faxq– /var/spool/fax/etc/config.ttyS0 controle les programmes utilisant ce

port : faxgetty qui recoit les fax, getty lance par faxgetty si on permetle mode ”donnees” (des connexions) sur ce modem et faxsend

– /var/spool/fax/etc/dialrules contient les regles pour composer lesnumeros de telephone.

– /var/spool/fax/etc/hosts.hfaxd contient les noms des machines clientsautorisees a acceder hfaxd

– /var/spool/fax/etc/hfaxd.conf configure hfaxd– /var/spool/fax/etc/hyla.conf configure les clients Hylafax. En parti-

culier, la ligne Host : indique la machine serveur Hylafax.En Linux Debian les fichiers de configuration sont en /etc/hylafax et il y

a un lien :

/var/spool/fax/etc -> /etc/hylafax/

15.6.3 Demarrage de HylaFAX

HylaFAX est servi par trois daemons : hfaxd, faxq, faxgetty– le daemon client-serveur hfaxd est demarre par inetd (ou au boot dans/etc/init.d/hylafax)

– le ”scheduler” faxq est demarre au boot dans /etc/init.d/hylafax– si on autorise la reception de fax sur un modem on lance faxgetty sur son

port par init en mettant dans /etc/inittab :S0:2345:respawn:/usr/local/sbin/faxgetty ttyS0

– si on n’utilise un modem qu’en emission de fax, on indique le modem afaxq par faxmodem :

15.7 Envoi d’un fax

15.7.1 Commande d’envoi de fax sur Unix : sendfax

sendfax -n -d faxnum1 -d faxnum2 fichier1 fichier2 ...

– -d indique le numero du fax destinataire, on peut le repeter– fichier.. sont des fichiers Postscript ou Tiff. Les fichiers ASCII sont aussi

supportes mais il s’agit d’ASCII a 7 bits donc les minuscules accentuees

Page 198: Linux Reseau

198 CHAPITRE 15. HYLAFAX

du francais ne sont pas supportees. Nous utiliserons donc de preference duPostscript (genere par dvips pour les TeX groupies).Le fax expedie est la concatenation des fichiers indiques sur la ligne decommande.

Exemple :

sendfax -n -d 0388106335 fichier.ps

15.7.2 Controle de l’envoi :

La commande faxstat permet de voir les files d’attente :– faxstat -s : liste les fax en attente d’envoi– faxstat -d : liste des fax envoyes– faxrm num job : tue un fax en instance d’envoiVous recevez systematiquement dans votre mailbox un message qui vous

renseigne si le fax a ete bien envoye :

From: Hylafax User <[email protected]>To: [email protected]: facsimile job 60 to 6293 completed

Your facsimile job to 6293 was completed successfully.Pages: 2

Quality: NormalPage Width: 209 (mm)Page Length: 296 (mm)Signal Rate: 9600 bit/sData Format: 1-D MR

Submitted From: localhostJobID: 60

GroupID: 60CommID: c00000133

Processing time was 1:24.

15.8 Reception d’un fax

– faxgetty doit fonctionner. Il gere le protocole T.30 en reception.– Le fax recu est un fichier TIFF/F, il est stocke dans /var/spool/fax/recvq– faxgetty appelle le script /var/spool/fax/bin/faxrcvd– Le script faxrcvd :

– regarde le numero du fax expediteur par faxinfo– si ce numero est associe a un nom d’utilisateur du serveur HylaFAX par

le script etc/FaxDispatch :le fichier TIFF/F est converti en Postscript par fax2ps et envoye parmail en attachement MIME au destinataire.

– ce script peut dans les autres cas imprimer le fax par une commandedu genre :

fax2ps /var/spool/fax/recvq/faxVAAa0051G 2>/dev/null|lpr -Plp

Page 199: Linux Reseau

15.9. CONFIGURATION DES CLIENTS HYLAFAX SUR UNE MACHINE LINUX199

ou etre visualise par :fax2ps /var/spool/fax/recvq/faxVAAa0051G 2>/dev/null|ghostview -

– Un utilisateur peut voir la file des fax recus par :faxstat -r

Commandes de traitement des fichiers TIFF– tiff2ps : convertit du TIFF en PS ou EPS

tiff2ps -a2 fax.tiff | lpr– tiffinfo : affiche les tags d’un fichier TIFF– tiffcp : copie et convertit un fichier TIFF copie de a.tiff dans b.tiff avec

la compression 1-D de T.4 pour ITU groupe 3 :tiffcp -c g3:1d a.tiff b.tiff

– tiff2fax : convertit un fichier TIFF en TIFF/F– ps2fax : convertit un fichier PS en TIFF/F en appelant ghostscript :

gs -q -sDEVICE=dev -dNOPAUSE -sPAPERSIZE=a4 \-r204x$vres -sOutputFile=fichier.tiff fichier.ps

avec dev=tiffg3 pour compression 1-D ou tiffg3d pour 2-D, vres=98 ou196lpi

15.9 Configuration des clients Hylafax sur unemachine Linux

Sur une autre machine que le serveur, machine Linux ou Unix, on installe lapartie cliente de HylaFAX. En Debian c’est le package hylafax-client.

Pour le configurer faire :

man hylafax-client

L’essentiel de la configuration consiste a indiquer la machine serveur Hyla-FAX dans le fichier /etc/hylafax/hyla.conf :

# /etc/hylafax/hyla.conf# System-wide client configuration fileHost: helios.c-strasbourg.frDialRules: "/etc/hylafax/dialrules"# envoi un mail de notification a l’emetteur du fax dans tous les casNotify: done

Un utilisateur peut avoir une configuration particuliere dans ~/.hylarc.Exemple :

MailAddr: [email protected]: done

15.10 Les clients HylaFAX

Controle d’acces : Tous les clients doivent etre declares dans le fichier /var/spool/fax/etc/hosts.hfaxd– Client Unix : sendfax, faxstat, faxrm– Client sur PC et Mac :

Page 200: Linux Reseau

200 CHAPITRE 15. HYLAFAX

– Le service de fax apparaıt comme une imprimante particuliere, donctout logiciel qui sait imprimer peut envoyer un fax

– L’interface offre moins de possibilite que senfax : On ne peut envoyerun fax qu’a un destinataire a la fois

– La reponse par mail doit etre redemandee a chaque fois– L’utilisateur dispose d’un carnet d’adresse de fax– On peut controler l’envoi du fax (equivalent de faxstat -s) et tuer un

fax en cours ou en attente d’envoiClient windows 3.1/3.11 : Winflex Winflex apparaıt comme un port

d’impression. On lui attache un driver Postscript. Il utilise l’ancien protocoleflexfax (port 4557)

ftp ://ftp.Progressive-Systems.Com/pub/unsupported/windows/winflexa4.zipClient Mac : MacFlex

ftp://ftp.eats.com/pub/MacFlex-15b1.sea.hqxftp://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

Choisissez de preference le driver ”HP LaserJet 4/4M Postscript”Dans les options du driver prendre : Postscript optimise pour portabilite.

15.11 Gestion du serveur HylaFAX

15.11.1 Optimisation des envois

HylaFAX maintient une base de donnees des caracteristique des fax avec quiil a echange en vue d’une optimisation de l’envoi la fois suivante. Exemple :

bash$ less /var/spool/fax/info/14126249163supportsHighRes:yessupports2DEncoding:yessupportsPostScript:nocalledBefore:yesmaxPageWidth:1728maxPageLength:-1maxSignallingRate:"14400"minScanlineTime:"20ms/10ms"remoteCSI:""sendFailures:0dialFailures:0

15.11.2 Controle d’acces

Il est possible d’interdire d’envoyer vers certains numeros de fax ou de rece-voir de ces numeros.

Page 201: Linux Reseau

15.12. CONCLUSION 201

15.11.3 Statistiques

2 taches quotidiennes sont lancees par cron :

0 23 * * * root /usr/local/sbin/faxqclean25 23 * * * root sh /usr/local/sbin/faxcron | mail -s HylaFax FaxMaster

– faxqclean nettoie les spools– faxcron envoie les statistiques d’utilisation a l’administrateur ainsi que

les rapports d’incidents

15.11.4 Incidents

Pour resoudre les incidents lies a l’envoi de fax l’administrateur dispose desoutils suivants :

– il est averti par mail– il a une trace des echanges des modems– pour debrouiller son probleme, il a :

– la documentation sous forme man et html– les FAQ de HylaFax– la Mailing List : [email protected] dont les archives sont a ftp.celestial.com– il doit avoir une doc detaillee sur son modem– une documentation simplifiee 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 citee dans /etc/hylafax/hosts.hfaxd

15.12 Conclusion

Interet d’un serveur de fax– economie de modems et de lignes telephoniques– permet de limiter les points d’acces par modems a des ordinateursRetour d’experience sur HylaFAX– A condition que le modem soit choisi parmi ceux recommandes 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.