Linux, serveur r´seaux e

Jacques Morel morel@phase.c-strasbourg.fr v0.6, 7 juillet 2005

2

0.1

Pr´sentation e

Ce document est un cours. Il est largement inspir´ de l’aide directe, de e conseils, d’´crits ou de contributions dans diff´rents forums des personnes suie e vantes : Benoˆ Speckel (PLIP, SSF, clonage), Guy Brand (s´curit´, sendmail), ıt e e Joel Kociolek (PPP, Hylafax, Masquerading), Alain Thivillon (Samba, ipchains), Pascal Gris (Apache), Marc Grunberg (PPP), Alain Cote et Jean Jacques Pansiot (TCP-IP), Jean Luc Archimbaud (s´curit´), Fr´d´ric Couchet de April e e e e (CGI) et enfin Olaf Kirch pour tout. Il reste sans nul doute bien des lacunes et des erreurs. Les chapitres sur SNMP, PHP sont en pr´paration. Je publie e n´ammoins ce texte parce qu’il peut ˆtre utile ` certains et qu’en retour la crie e a tique est stimulante. Si ce texte est r´utilis´, veuillez ˆtre assez aimable pour e e e faire r´f´rence ` mon labeur. Ce cours a ´t´ fait avec la distribution Linux Deee a ee bian 2.1 et le noyau 2.2.16. Il est en cours de modification pour la Debian 3.1.

Avertissement : Ce document date d’un cours fait en 2000 et n’a jamais ´t´ repris, hormis ee quelques corrections d’erreurs. Voici quelques remarques que l’on peut faire sur les chapitres : – TCP-IP : reste valable. Il n’y a rien sur IPv6. Des notes sur dhcp ont ´t´ ee rajout´es. e – Serveur DNS BIND : un peu mis ` jour mais incomplet. a – PLIP : reste valable – PPP : ` reprendre. Il manque une introduction sur le port s´rie et les a e modems. PPPOE pour connexions ADSL est ` ´crire. ae – S´curit´ r´seau : totalement ` reprendre. e e e a – Filtrage, routage : obsol`te. A refaire pour iptables. e – Cryptage par ssf : obsol`te. A refaire pour openssh (interdit en France ` e a l’´poque). e – Clonage machine Debian : ` refaire pour la distributions sarge. Mais les a id´es restent valables. e – Sendmail : totalement insuffisant et obsol`te. e – Apache : reste valable. Manque apache-ssl. – Samba : reste valable. – Netatalk : reste valable. – Hylafax : incomplet mais reste valable. Sont ` r´diger les chapitres : a e – openssl – php – Webmail IMP – Base de donn´es Postgres e – snmp – Wifi ! ! !

Table des mati`res e
0.1 Pr´sentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 2

1 Introduction 11 1.1 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2 TCP-IP : les protocoles de l’INTERNET sur Linux 2.1 TCP-IP . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 La pile TCP-IP . . . . . . . . . . . . . . . . . . . . . . 2.3 Le protocole de r´seau local Ethernet . . . . . . . . . . e 2.3.1 CSMA/CD . . . . . . . . . . . . . . . . . . . . 2.3.2 Adressage . . . . . . . . . . . . . . . . . . . . . 2.3.3 Cˆblage . . . . . . . . . . . . . . . . . . . . . . a 2.3.4 Adaptateurs . . . . . . . . . . . . . . . . . . . . 2.3.5 Drivers Ethernet . . . . . . . . . . . . . . . . . 2.4 IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 Adresses IP, r´seaux IP . . . . . . . . . . . . . e 2.4.2 Sous-r´seau . . . . . . . . . . . . . . . . . . . . e 2.4.3 Paquet IP (datagram) . . . . . . . . . . . . . . 2.4.4 Routage IP . . . . . . . . . . . . . . . . . . . . 2.5 TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.1 Ports TCP . . . . . . . . . . . . . . . . . . . . 2.5.2 En-tˆte TCP . . . . . . . . . . . . . . . . . . . e 2.5.3 Etats d’une connexion TCP . . . . . . . . . . . 2.6 Encapsulation des protocoles . . . . . . . . . . . . . . 2.7 UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.8 ICMP . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9 ARP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.10 Noms de machines . . . . . . . . . . . . . . . . . . . . 2.10.1 Domain Name System . . . . . . . . . . . . . . 2.11 D´marrage du r´seau . . . . . . . . . . . . . . . . . . . e e 2.11.1 Configuration du noyau . . . . . . . . . . . . . 2.11.2 Identification d’une machine . . . . . . . . . . . 2.11.3 Initialisation de l’interface r´seau . . . . . . . . e 2.11.4 La commande ifconfig . . . . . . . . . . . . . 2.11.5 La commande route . . . . . . . . . . . . . . . 2.11.6 Configuration de l’interface loopback . . . . . . 2.12 Configuration d’un routeur . . . . . . . . . . . . . . . 2.13 R´solution de noms de domaines . . . . . . . . . . . . e 2.13.1 Configuration . . . . . . . . . . . . . . . . . . . 3 13 13 13 14 14 15 15 17 17 18 18 21 22 23 24 25 26 28 28 29 29 29 30 30 31 31 32 32 33 34 35 36 36 36

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

` TABLE DES MATIERES 2.13.2 R´solution de noms de domaine . . . . . e 2.13.3 R´solution inverse de noms de domaine e Outils de diagnostic . . . . . . . . . . . . . . . 2.14.1 ping . . . . . . . . . . . . . . . . . . . . 2.14.2 traceroute . . . . . . . . . . . . . . . . . 2.14.3 netstat . . . . . . . . . . . . . . . . . . . 2.14.4 telnet . . . . . . . . . . . . . . . . . . . 2.14.5 nc . . . . . . . . . . . . . . . . . . . . . 2.14.6 tcpdump . . . . . . . . . . . . . . . . . 2.14.7 arp . . . . . . . . . . . . . . . . . . . . . 2.14.8 Causes de panne r´seau . . . . . . . . . e IP aliasing . . . . . . . . . . . . . . . . . . . . . Proxy ARP . . . . . . . . . . . . . . . . . . . . RARP . . . . . . . . . . . . . . . . . . . . . . . DHCP . . . . . . . . . . . . . . . . . . . . . . . 2.18.1 DHCP client . . . . . . . . . . . . . . . 2.18.2 DHCP serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 40 41 41 41 42 44 45 45 48 48 49 50 50 50 50 51 53 53 54 54 55 57 59 59 61 61 61 62 62 62 63 63 64 65 65 65 67 67 67 68 68 68 69 69 69 70

2.14

2.15 2.16 2.17 2.18

3 Le serveur DNS BIND 3.1 Le Domain Name System (DNS) . . . . . . . . . 3.2 Installation en Debian . . . . . . . . . . . . . . . 3.3 Exemple de configuration d’un serveur cache . . 3.4 Exemple de configuration d’un serveur secondaire 3.5 La base de donn´es des noms de domaines . . . . e 3.6 Administration . . . . . . . . . . . . . . . . . . . 3.6.1 Log . . . . . . . . . . . . . . . . . . . . . 4 PLIP : IP sur port parall`le e 4.1 Le cˆble . . . . . . . . . . . . . a 4.2 Client et serveur . . . . . . . . 4.3 Module plip . . . . . . . . . . 4.3.1 Noyau de version < 2.2 4.3.2 Noyau de version > 2.2 4.4 Cˆt´ client . . . . . . . . . . . . oe 4.5 Cˆt´ serveur . . . . . . . . . . . oe 4.6 Test . . . . . . . . . . . . . . . 4.7 Routage par le serveur . . . . . 4.8 Test de performances . . . . . . 4.9 Documents . . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

5 PPP 5.1 Introduction . . . . . . . . . . . . . . . . . 5.1.1 Description de PPP : HDLC, LCP, 5.1.2 Documentation . . . . . . . . . . . 5.2 Installation de PPP . . . . . . . . . . . . 5.2.1 Support de PPP par le noyau . . . 5.2.2 Logiciel ppp-2.3.5-2 . . . . . . . . 5.2.3 mgetty . . . . . . . . . . . . . . . . 5.2.4 Arborescence des fichiers PPP . . 5.3 Configuration du modem et du port s´rie. e

. . . . . . . IPCP, CCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

` TABLE DES MATIERES 5.3.1 Configuration du port s´rie. . . . . . . . . . . . . . . . . . e 5.3.2 Configuration du modem . . . . . . . . . . . . . . . . . . 5.4 Premiers pas avec PPP . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 Session PPP manuelle . . . . . . . . . . . . . . . . . . . . 5.4.2 Automatisation de pppd . . . . . . . . . . . . . . . . . . . 5.4.3 Authentification . . . . . . . . . . . . . . . . . . . . . . . 5.5 Configuration d’un client . . . . . . . . . . . . . . . . . . . . . . . 5.5.1 Information ` r´unir sur le fournisseur d’acc`s Internet a e e (ISP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.2 R´solution d’adresse . . . . . . . . . . . . . . . . . . . . . e 5.5.3 Param´trage PPP . . . . . . . . . . . . . . . . . . . . . . e 5.5.4 Test de pppd . . . . . . . . . . . . . . . . . . . . . . . . . 5.6 Configuration d’un serveur . . . . . . . . . . . . . . . . . . . . . . 5.6.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.2 Affectation dynamique des adresses IP : . . . . . . . . . . 5.6.3 Fichier /etc/ppp/pap-secrets sur un serveur : . . . . . 5.6.4 Login d’un utilisateur PPP . . . . . . . . . . . . . . . . . 5.6.5 Log d’une session PPP sur le serveur : . . . . . . . . . . . 5.7 R´glages fins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 5.8 S´curit´ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e e 5.9 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9.1 PPP sur cˆble null modem . . . . . . . . . . . . . . . . . a 5.9.2 Relier deux r´seaux par PPP . . . . . . . . . . . . . . . . e 5.9.3 Routage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9.4 /etc/ppp/ip-up . . . . . . . . . . . . . . . . . . . . . . . . 5.10 Client PPP sur Microsoft Wxx . . . . . . . . . . . . . . . . . . . 5.11 Divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 S´curit´ r´seau sur Linux e e e 6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Arrˆter sa machine quand elle n’est pas utilis´e . . . . e e 6.3 Arrˆter les serveurs inutiles . . . . . . . . . . . . . . . e 6.3.1 Les daemons . . . . . . . . . . . . . . . . . . . 6.3.2 Les services activ´s par inetd . . . . . . . . . . e 6.4 Contrˆler l’acc`s aux serveurs : tcp-wrapper . . . . . o e 6.5 Contrˆler l’acc`s ` xdm . . . . . . . . . . . . . . . . . . o e a 6.6 Les mots de passe . . . . . . . . . . . . . . . . . . . . 6.6.1 Qualit´ des mots de passe . . . . . . . . . . . . e 6.6.2 Shadow passwords . . . . . . . . . . . . . . . . 6.7 Appliquer les mises ` jour de s´curit´ sur les logiciels. a e e 6.8 D´tection d’incursions . . . . . . . . . . . . . . . . . . e 6.8.1 tripwire : contrˆle de l’int´grit´ des fichiers . o e e 6.9 Pr´cautions ´l´mentaires . . . . . . . . . . . . . . . . . e ee 6.10 Principales attaques r´seau et parades . . . . . . . . . e 6.10.1 SYN flooding . . . . . . . . . . . . . . . . . . . 6.10.2 smurf . . . . . . . . . . . . . . . . . . . . . . . 6.10.3 Denial of Service (DoS) attacks . . . . . . . . . 6.10.4 IP spoofing . . . . . . . . . . . . . . . . . . . . 6.10.5 Non-blind spoofing . . . . . . . . . . . . . . . . 6.10.6 Blind spoofing . . . . . . . . . . . . . . . . . .

5 70 70 71 71 72 73 74 74 75 75 77 78 78 81 81 81 82 83 84 84 84 84 84 85 86 86 87 87 87 88 88 90 92 94 94 94 95 95 95 96 96 96 96 97 98 98 98 98

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

6 6.10.7 Scan de ports . . . . . 6.10.8 Ecoute du r´seau . . . e 6.11 Cryptage des communications 6.12 En savoir plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

` TABLE DES MATIERES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 . 99 . 100 . 100 101 101 102 103 104 106 107 107 107 108 108 109 109 110 111 112 112 112 112 112 112 113 113 115 115 115 116 116 116 117 117 117 119 119 122 123 123 123 123 123 123 124 124

7 Filtrage, routage et masquage des paquets IP 7.1 Qu’est-ce qu’un firewall ? . . . . . . . . . . . . . . . . . . . . 7.2 Masquage : permettre ` un r´seau priv´ d’acc´der ` Internet . a e e e a 7.2.1 Configuration du noyau ( > 2.2.0 ) . . . . . . . . . . . 7.2.2 Configuration du masquage . . . . . . . . . . . . . . . 7.2.3 Configuration d’une machine du r´seau interne . . . . e 7.2.4 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 La commande ipchains . . . . . . . . . . . . . . . . . . . . . 7.3.1 Chaˆ ınes pr´d´finies . . . . . . . . . . . . . . . . . . . . e e 7.3.2 Manipulation des chaˆ ınes . . . . . . . . . . . . . . . . 7.3.3 Sp´cification d’une r`gle . . . . . . . . . . . . . . . . . e e 7.4 Exemples de filtrage . . . . . . . . . . . . . . . . . . . . . . . 7.4.1 Test du ping . . . . . . . . . . . . . . . . . . . . . . . 7.4.2 Masquage standard . . . . . . . . . . . . . . . . . . . . 7.4.3 Antispoofing . . . . . . . . . . . . . . . . . . . . . . . 7.5 Applications clientes supportant le masquage . . . . . . . . . 7.5.1 Autoriser l’acc`s TCP dans un sens . . . . . . . . . . e 7.6 Forward de port . . . . . . . . . . . . . . . . . . . . . . . . . 7.7 Serveurs proxy . . . . . . . . . . . . . . . . . . . . . . . . . . 7.7.1 http . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.7.2 telnet, ftp . . . . . . . . . . . . . . . . . . . . . . . . . 7.8 Raccordement d’un r´seau priv´ ` Internet par PPP . . . . . e ea 7.9 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Cryptage des communications par ssh 8.1 Introduction . . . . . . . . . . . . . . . . . . . . 8.2 Documentation . . . . . . . . . . . . . . . . . . 8.3 Configuration de ssh . . . . . . . . . . . . . . . 8.4 ssh serveur . . . . . . . . . . . . . . . . . . . . 8.4.1 Contrˆles d’acc`s . . . . . . . . . . . . . o e 8.5 ssh client . . . . . . . . . . . . . . . . . . . . . 8.5.1 Cr´ation des cl´s RSA : ssh-keygen . . e e 8.5.2 Connexion : slogin ou ssh . . . . . . . 8.5.3 Transfert de fichiers : scp . . . . . . . . 8.5.4 Automatisation de l’authentification par 8.6 Autres impl´mentations de ssh . . . . . . . . . e 9 Clonage d’une machine Linux Debian 9.1 Introduction . . . . . . . . . . . . . . . 9.2 Configuration d’une machine m`re . . e 9.2.1 Compilation d’un noyau . . . . 9.2.2 Packages . . . . . . . . . . . . . 9.3 Pr´paration archive sur machine m`re e e 9.3.1 Fichier tar . . . . . . . . . . . . 9.3.2 Exportation . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . cl´ e . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . publique . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

` TABLE DES MATIERES 9.4 9.5

7

Installation de Debian sur la nouvelle machine . . . . . . . . . . 124 Reboot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 129 129 129 130 130 130 131 131 132 132 133 133 133 133 134 135 136 136 136 137 137 137 137 137 138 138 141 141 141 141 144 145 145 145 146 146 147 147 149 153 153 153 154 154 155 155

10 Sendmail 10.1 Le service de mail de l’Internet . . . . . . . . . . . . . . 10.2 SMTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1 Codes retour . . . . . . . . . . . . . . . . . . . . 10.2.2 Test d’un service SMTP . . . . . . . . . . . . . . 10.2.3 V´rification de l’existence d’une boˆ aux lettres e ıte 10.2.4 V´rification d’un alias . . . . . . . . . . . . . . . e 10.3 Extensions ` SMTP : ESMTP, MIME . . . . . . . . . . a 10.4 Interaction avec le DNS . . . . . . . . . . . . . . . . . . 10.5 Caract´ristiques de Sendmail . . . . . . . . . . . . . . . e 10.6 Installation . . . . . . . . . . . . . . . . . . . . . . . . . 10.7 Documentation . . . . . . . . . . . . . . . . . . . . . . . 10.7.1 Documentation sur la configuration . . . . . . . . 10.8 Configuration . . . . . . . . . . . . . . . . . . . . . . . . 10.8.1 Une configuration de ”mail host” . . . . . . . . . 10.8.2 Limitation de la taille des messages . . . . . . . . 10.8.3 Suppression de la r´solution d’alias par EXPN . e 10.8.4 Une configuration de null client . . . . . . . . . . 10.8.5 Sites miroirs pour tests . . . . . . . . . . . . . . 10.9 Exploitation de sendmail . . . . . . . . . . . . . . . . . . 10.9.1 S´curit´ . . . . . . . . . . . . . . . . . . . . . . . e e 10.9.2 Commandes d’exploitation . . . . . . . . . . . . 10.9.3 Alias . . . . . . . . . . . . . . . . . . . . . . . . . 10.9.4 R´glages fins . . . . . . . . . . . . . . . . . . . . e 10.9.5 Fichier Log . . . . . . . . . . . . . . . . . . . . . 10.10Routage d’un domaine virtuel avec sendmail . . . . . . . 11 Apache 11.1 Le serveur WWW Apache . . . . . . 11.1.1 WWW . . . . . . . . . . . . . 11.1.2 HTTP . . . . . . . . . . . . . 11.2 Caract´ristiques de Apache . . . . . e 11.3 Documentation . . . . . . . . . . . . 11.4 Installation . . . . . . . . . . . . . . 11.5 Lancement de Apache . . . . . . . . 11.6 Configuration . . . . . . . . . . . . . 11.6.1 Param`tres g´n´raux . . . . . e e e 11.6.2 Configuration des ressources . 11.6.3 Restrictions d’acc`s . . . . . e 11.7 Les modules. . . . . . . . . . . . . . 11.8 Virtual hosts . . . . . . . . . . . . . 11.9 Content negotiation . . . . . . . . . 11.9.1 Multiviews . . . . . . . . . . 11.9.2 Handler type-map . . . . . . 11.10Restrictions d’acc`s . . . . . . . . . . e 11.11Autres capacit´s de Apache . . . . . e 11.12Maintenance . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

8

` TABLE DES MATIERES 11.12.1 Erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 11.12.2 Statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . 156

12 Ex´cution de programmes CGI sur un serveur WWW e 12.1 Introduction ` la Common Gateway Interface . . . . . . . a 12.1.1 Pourquoi utiliser les programmes CGI . . . . . . . 12.1.2 Pr´requis et choix techniques . . . . . . . . . . . . e 12.1.3 Configuration du serveur Web . . . . . . . . . . . . 12.2 Notions fondamentales . . . . . . . . . . . . . . . . . . . . 12.3 Un programme en Bourne shell . . . . . . . . . . . . . . . 12.4 Saisie et traitement des champs d’un formulaire . . . . . . 12.4.1 R´cup´ration des informations en Perl et en shell . e e 12.4.2 Les variables d’environnement . . . . . . . . . . . . 12.5 D´boguer un script CGI . . . . . . . . . . . . . . . . . . . e

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

157 157 157 157 158 158 159 161 163 166 167 171 171 171 173 173 174 174 174 174 174 175 175 175 175 176 176 178 178 178 179 179 179 179 180 181 181 181 182 182 182 182 183 183 183 184

13 Samba 13.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2 Protocoles Microsoft . . . . . . . . . . . . . . . . . . . . . . . . . 13.2.1 Ports ouverts sur les machines Windows Microsoft . . . . 13.2.2 Configuration des clients r´seau Microsoft sur Windows . e 13.3 Commandes Lan-Manager sous DOS . . . . . . . . . . . . . . . . 13.3.1 Commandes net . . . . . . . . . . . . . . . . . . . . . . . 13.3.2 Interrogation de noms NetBIOS . . . . . . . . . . . . . . . 13.4 Le logiciel Samba . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.4.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . 13.4.2 Description . . . . . . . . . . . . . . . . . . . . . . . . . . 13.4.3 Utilitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.4.4 Documentation . . . . . . . . . . . . . . . . . . . . . . . . 13.5 Configuration de Samba . . . . . . . . . . . . . . . . . . . . . . . 13.5.1 Structure et syntaxe . . . . . . . . . . . . . . . . . . . . . 13.5.2 Section ”global” . . . . . . . . . . . . . . . . . . . . . . . 13.5.3 Partage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.5.4 Section ”homes” . . . . . . . . . . . . . . . . . . . . . . . 13.5.5 Section ”printers” . . . . . . . . . . . . . . . . . . . . . . 13.5.6 Partage accessible par tous en lecture/´criture . . . . . . e 13.5.7 Partage accessible par tous en lecture, r´serv´ en ´criture e e e 13.5.8 Partage ` acc`s r´serv´ . . . . . . . . . . . . . . . . . . . a e e e 13.5.9 Authentification . . . . . . . . . . . . . . . . . . . . . . . 13.6 Audit : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.7 Incidents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.8 Acc`s depuis Unix aux ressources Windows . . . . . . . . . . . . e 13.8.1 smbclient : acc`s aux fichiers Windows ` la ftp . . . . . e a 13.8.2 Messages Winpopup . . . . . . . . . . . . . . . . . . . . . 13.8.3 smbtar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.8.4 smbmount . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.8.5 smbprint . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.9 Applications de samba . . . . . . . . . . . . . . . . . . . . . . . . 13.9.1 Distribution de logiciels pour Windows . . . . . . . . . . . 13.9.2 Fonction Primary Domain Controller de Samba . . . . . 13.9.3 Installation partag´e de drivers d’imprimante pour W9x . e

` TABLE DES MATIERES

9

13.9.4 Serveurs virtuels . . . . . . . . . . . . . . . . . . . . . . . 185 14 Netatalk : serveur AppleTalk 14.1 Une impl´mentation du protocole e 14.2 Impl´mentation en Linux . . . . e 14.3 Documentation : . . . . . . . . . 14.4 Installation . . . . . . . . . . . . 14.5 Configuration . . . . . . . . . . . 14.5.1 atalkd . . . . . . . . . . . 14.5.2 afpd . . . . . . . . . . . . 14.5.3 papd . . . . . . . . . . . . 14.5.4 pap . . . . . . . . . . . . 14.6 Commandes . . . . . . . . . . . . 14.7 Incidents . . . . . . . . . . . . . . 187 187 188 188 188 189 189 189 189 189 189 190 191 191 191 191 191 194 194 195 195 195 195 196 196 196 196 196 196 197 197 197 197 198 198 199 199 200 200 200 201 201 201

AppleTalk en . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

BSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

like . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . .

15 HylaFAX 15.1 Les normes de fax . . . . . . . . . . . . . . . . . . . . . 15.1.1 Standard ITU : Groupes de Fax . . . . . . . . . 15.1.2 Standards ITU de vitesse de transmission . . . . 15.1.3 Protocoles d’envoi de fax . . . . . . . . . . . . . 15.2 Fonctions de HylaFAX . . . . . . . . . . . . . . . . . . . 15.3 Sur quelles machines fonctionne Hylafax ? . . . . . . . . 15.4 Choisir et installer un modem : . . . . . . . . . . . . . . 15.4.1 Hylafax et les modems : . . . . . . . . . . . . . . 15.4.2 Les modems recommand´s : . . . . . . . . . . . . e 15.4.3 Installer le modem sur un PC . . . . . . . . . . . 15.5 Installation de HylaFAX . . . . . . . . . . . . . . . . . . 15.5.1 Pr´requis : . . . . . . . . . . . . . . . . . . . . . e 15.5.2 Proc´dure d’installation . . . . . . . . . . . . . . e 15.5.3 Documentation . . . . . . . . . . . . . . . . . . . 15.6 Configuration de HylaFAX . . . . . . . . . . . . . . . . 15.6.1 Les scripts de configuration . . . . . . . . . . . . 15.6.2 Les fichiers de configuration : . . . . . . . . . . . 15.6.3 D´marrage de HylaFAX . . . . . . . . . . . . . . e 15.7 Envoi d’un fax . . . . . . . . . . . . . . . . . . . . . . . 15.7.1 Commande d’envoi de fax sur Unix : sendfax . . 15.7.2 Contrˆle de l’envoi : . . . . . . . . . . . . . . . . o 15.8 R´ception d’un fax . . . . . . . . . . . . . . . . . . . . . e 15.9 Configuration des clients Hylafax sur une machine Linux 15.10Les clients HylaFAX . . . . . . . . . . . . . . . . . . . . 15.11Gestion du serveur HylaFAX . . . . . . . . . . . . . . . 15.11.1 Optimisation des envois . . . . . . . . . . . . . . 15.11.2 Contrˆle d’acc`s . . . . . . . . . . . . . . . . . . o e 15.11.3 Statistiques . . . . . . . . . . . . . . . . . . . . . 15.11.4 Incidents . . . . . . . . . . . . . . . . . . . . . . 15.12Conclusion . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

` TABLE DES MATIERES

Chapitre 1

Introduction
Linux sur PC Intel est une plateforme ´conomique, fiable et polyvalente pour e faire un serveur r´seau. e Linux supporte les protocoles : – TCP/IP (v4) : logiciel fiable, drivers de qualit´ pour les cartes Ethernet e (10Base-T, 100Base-TX, Gigabit Ethernet) et les cartes PCMCIA, serveurs les plus usit´s sur le net : Apache, sendmail, ... e – UUCP : ancien mais encore utile pour des connexions t´l´phoniques interee mittentes sur des r´seaux peu fiables. e – IPv6, am´lioration de IP v4 pour r´pondre ` la croissance d’Internet e e a – IPX/SPX (Novell Netware) : routeur, serveur, client – Ethertalk : serveur Netatalk : partage des fichiers par AFP, des imprimantes par PAP – LAN-Netbios Microsoft : serveur Samba – PPP : pppd client et serveur. Nombreuses cartes s´ries multiports pour e serveurs d’acc`s ` Internet. e a – ISDN (RNIS en fran¸ais comme le service Numeris de FT), support dans c le noyau pour les cartes ISDN PC. – PLIP : Ip sur port parall`le au moyen d’un cˆble Null-Printer ou Lap-Link e a – ADSL : le support des modems Alcatel de France Telecom est assur´ par e PPTP et PPPOE. Linux est une excellente plateforme aussi bien comme serveur INTERNET (www, ftp, mail) que comme serveur Intranet pour des PC Windows ou des Apple Macintosh. Linux dispose de logiciels permettant de supporter une charge r´seau impore tante et de fonctionnalit´s comme le load balancing, le forward de port, permete tant de r´partir la charge entre plusieurs serveurs. Environ 30% des serveurs sur e Internet sont des machines Linux. Par ailleurs, Linux sait router, filtrer, masquer les paquets IP. Un simple PC Linux muni de plusieurs interfaces r´seaux permet de connecter un r´seau priv´ e e e a ` Internet et d’assurer des fonctions de garde-barri`re (firewall), pour prot´ger e e le r´seau priv´ des incursions et des fonctions de serveur proxy pour faire des e e requˆtes sur Internet par d´l´gation pour le compte des machines du r´seau e ee e priv´. e Linux sait ´galement faire du tunelling qui permet de faire voir une machine e distante (un PC portable connect´ via un ISP et bientˆt par t´l´phone portable) e o ee 11

12

CHAPITRE 1. INTRODUCTION

comme si elle ´tait sur le r´seau local. e e Plus g´n´ralement, Linux est un Unix. Il a pour but la conformit´ Posix, e e e il utilise tous les produits de d´veloppement Gnu. C’est pourquoi il est tr`s e e facile d’installer un logiciel Unix sur Linux. Il faut d’ailleurs dire, en toute honnˆtet´, que les Unix libres pour PC de la s´rie BSD, NetBSD, FreeBSD, ... e e e sont souvent plus en avance en mati`re de logiciels r´seau que Linux, sans doute e e a ` cause de Unix BSD mis au point en 1983 ` l’universit´ de Berkeley qui fut a e l’impl´mentation la plus populaire des protocoles TCP/IP, ceux de l’Internet, e largement utilis´s aujourd’hui de par le monde. e L’objet ici ´tant de faire fonctionner un serveur, c’est la distribution Linux e Debian (2.1 slink ici) qui est choisie pour sa stabilit´, la facilit´ des mises ` jour e e a par r´seau et sa promptitude ` corriger les trous de s´curit´. e a e e

1.1

Documentation

Avant tout il faut lire The Linux Network Administrator’s Guide, version 1.0 de Olaf Kirch derni`re mise ` jour de mars 96. Edit´ chez O’Reilly et e a e d´chargeable sur le net : e ftp://ftp.lip6.fr/pub/linux/sunsite/docs/LDP/network-guide/nag-1.0.ps.tar.gz ftp://ftp.lip6.fr/pub/linux/sunsite/docs/LDP/network-guide/nag-1.0.src.tar.gz ftp://ftp.lip6.fr/pub/linux/sunsite/docs/LDP/network-guide/nag-1.0.html.tar.gz Cet ouvrage est bien sˆr assez ancien. Le chapitre sur sendmail est un peu u d´pass´, les possibilit´s de filtrage de masquerading ne sont pas abord´es. Mais e e e e sa lecture est recommand´e pour les n´ophytes en mati`re r´seau et en rien e e e e inutile pour les autres. Il y a aussi les How-To et la documentation fournie avec chaque logiciel.

Chapitre 2

TCP-IP : les protocoles de l’INTERNET sur Linux
2.1 TCP-IP

Les protocoles de l’Internet sont d´sign´s par le terme g´n´rique de TCP-IP. e e e e Ils peuvent ˆtre utilis´s aussi en r´seau local, sans connexion avec Internet, c’est e e e ce qu’on appelle maintenant l’Intranet. La lecture des documents suivants de Charles Hedrick est recommand´e : e Introduction ` TCP/IP a Ce document se trouve ` la fois sur a ftp://athos.rutgers.edu/runet/tcp-ip-intro.doc en version texte et ftp://athos.rutgers.edu/runet/tcp-ip-intro.ps en version postscript. Administration TCP/IP ce document se trouve ` la fois sur a ftp://athos.rutgers.edu/runet/tcp-ip-admin.doc en version texte et ftp://athos.rutgers.edu/runet/tcp-ip-admin.ps en version postscript. On trouvera les documents techniques sur TCP/IP, les RFC (Request For Comment) sur de nombreux sites comme : http://www.pasteur.fr/other/computer/RFC

2.2

La pile TCP-IP

C’est une simplification du mod`le en 7 couches de l’OSI mais qui a r´v´l´ e e ee sa robustesse et son adaptabilit´. e 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

14CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX – La couche transport soit TCP, soit UDP qui recourent tous deux ` la a couche IP en dessous. – La couche r´seau : IP avec en plus ICMP pour les messages de services e – La couche protocole de r´seau local. Une des forces de IP est qu’il e peut s’adapter ` de nombreux protocoles de r´seau : Ethernet, Token a e Ring, FDDI, Fast Ethernet, Gigabit Ethernet, ...

OSI TCP/IP +-----------------------+-----------------------+-------------+ | 7 Application | TELNET, FTP | | +-----------------------+ SMTP | TFTP | | 6 Pr´sentation e | RPC | DOMAIN | +-----------------------+ X11 | NFS | | 5 Session | HTTP | | +-----------------------+-----------------------+-------------+ | 4 Transport | TCP | UDP | +-----------------------+-----------------------+-------------+ | 3 R´seau e | IP (Internet Protocol), ICMP, ARP | +-----------------------+-------------------------------------+ | 2 Data Link | Local Network Protocol | +-----------------------+ (Ethernet, Fast Ethernet, FDDI...) | | 1 Physique | | +-----------------------+-------------------------------------+ Protocol Relationships Le protocole de r´seau local est en g´n´ral g´r´ de mani`re hardware par e e e ee e une carte interface ou adaptateur r´seau appel´ aussi NIC (Network Interface e e Card ). C’est la carte Ethernet classique. Un logiciel, le driver, fait l’interface entre cette carte et le noyau. Ce driver ne d´pend pas de IP mais uniquement e de l’adaptateur et du noyau Linux. Le protocole de r´seau local peut aussi ˆtre g´r´ de mani`re logicielle. C’est e e ee e le cas de PPP pour le port s´rie et le modem t´l´phonique ou de PLIP pour le e ee port parall`le. e

2.3

Le protocole de r´seau local Ethernet e

C’est la norme IEEE 802.3. Il fonctionne sur le principe de la diffusion (anglais broadcast). Les machines sont toutes connect´es au mˆme cˆble (bus). Un e e a message envoy´ par l’une est re¸u par toutes les autres. Toutes les machines e c peuvent parler en mˆme temps. e

2.3.1

CSMA/CD

Comment ´viter la cacaphonie ? On peut comme dans les r´unions nommer e e un pr´sident de s´ance qui donne la parole quand on la lui demande ou bien se e e mettre en cercle (ring) se passer un jeton (token) et ne prendre la parole que lorsqu’on a le jeton. Non, Ethernet utilise une autre m´thode moins directive et e non d´terministe : CSMA/CD e

´ 2.3. LE PROTOCOLE DE RESEAU LOCAL ETHERNET

15

Que se passe t’il quand la machine x veut ´mettre ? e – x s’assure que le bus est libre (Carrier Sense) – si oui, x commence ` ´mettre ae – si y ´met aussi (Multiple Access), alors une collision est d´tect´e (Collision e e e Detect), il y a signal jam. Alors, – x attend durant un temps t1 fix´ de mani`re al´atoire puis essaie d’´mettre e e e e – y attend durant un temps t2 fix´ de mani`re al´atoire puis essaie d’´mettre e e e e

2.3.2

Adressage

Comment une machine peut-elle s’adresser ` une autre ? Chaque machine a a une adresse Ethernet unique form´e de 6 octets (48 bits) et not´e sous forme de 6 e e nombres hexad´cimaux comme on le voit dans le champ HWaddr 00 :50 :04 :F9 :33 :82 e quand on fait ifconfig eth0 : ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:50:04:F9:33:82 inet addr:193.54.230.20 Bcast:193.54.230.255 Mask:255.255.255.0 EtherTalk Phase 2 addr:65280/102 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:65483155 errors:0 dropped:0 overruns:0 frame:0 TX packets:99422413 errors:0 dropped:0 overruns:0 carrier:0 Collisions:1887649 Interrupt:12 Base address:0xe000 Comment une machine re¸oit les paquets qui lui sont destin´s ? c e Les paquets circulant sur le bus sont analys´s par chaque interface Ethernet. e Si le paquet comporte l’adresse de l’interface en adresse destinataire, il l’envoie ` a IP, sinon il le jette. Sauf dans le cas o` l’interface est mis en mode promiscuous. u Quel est le d´bit ? Le d´bit nominal est 10 M´gabits/sec (Mbps). En raison e e e des collisions, il est fonction de la charge, c’est ` dire du nombre de machines a connect´es qui veulent ´mettre en mˆme temps. Il est aussi fonction du temps e e e de parcours du paquet, donc de la longueur du bus. En pratique le d´bit est de e 5 Mbps. Comment mesurer les collisions ? Elles se voient sur les voyants ”Col” des hubs. Elles sont aussi comptabilis´s et leur nombre s’affiche quand on fait e ifconfig eth0 (voir ci-dessus) ou cat /proc/net/dev Comment diminuer le nombre de collisions ? En utilisant des switchs plutˆt o que des hubs. Structure d’un paquet Ethernet : Il fait 1500 octets (c’est pour cela qu’on fixe MTU=1500 par d´faut dans ifconfig). e Code Type indique un protocole comme TCP/IP, DECnet, Xerox NS, IPX : on peut utiliser plusieurs protocoles diff´rents simultan´ment sur un mˆme e e e r´seau. e Le checksum est calcul´ sur tout le paquet. e

2.3.3

Cˆblage a

– 10Base-5 Ethernet 10Mbps, cˆble coaxial thick (jaune) lmax=200m. Transa ceiver ”piqu´” sur le cˆble avec prise AUI ` 15 broches. Obsol`te. e a a e

16CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX +----------------------------------------------------------------------+ | Adresse Ethernet destination (32 premiers bits) | +----------------------------------------------------------------------+ | Ethernet dest (16 derniers bits) | Ethernet source (16 premiers bits)| +----------------------------------------------------------------------+ | Adresse Ethernet source (32 derniers bits) | +----------------------------------------------------------------------+ | Code Type | | +----------------------------------------------------------------------+ | En-t^te IP, En-t^te TCP, ensuite vos donn´es e e e | | ... | | | | Fin de vos donn´es e | +----------------------------------------------------------------------+ | Checksum Ethernet | +----------------------------------------------------------------------+ Fig. 2.1 – Structure d’un paquet Ethernet – 10Base-2 Ethernet 10Mbps, cˆble coaxial thin lmax=500m. Il faut mettre a un bouchon aux 2 bouts. Prise BNC en T. Si une machine est d´connect´e, e e le r´seau est coup´. D´conseill´. e e e e – 10Base-T Ethernet 10Mbps, ou paire torsad´e (twisted pair ), cˆble de e a 8 fils, 4 utilis´s (1,2,3,6), norme UTP ou FTP cat´gorie V (supporte 100 e e Mbps), prise RJ45. Structure en ´toile et non en bus. Hub= r´p´teur et e e e concentrateur. Pas plus de 4 r´p´teurs entre deux machines. lmax= 100m e e entre hubs, 100m entre hub et machine. Aujourd’hui on s’´quipe de switchs e plutˆt que de hubs et on passe en Fast Ethernet (100 Mbps) avec le mˆme o e cˆble cat´gorie V. a e 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 7 R4 8 Brown 8 – 10Base-F Ethernet 10Mbps, fibre optique multimode connectique ST, lmax 2000m. On peut connecter deux machines sans hub avec un cˆble 10Base-T crois´. a e Ethernet 10Base-T Crossover patch cord; This cable can be used to cascade hubs, or for connecting two Ethernet stations back-to-back without a hub (ideal for two station Doom!)

´ 2.3. LE PROTOCOLE DE RESEAU LOCAL ETHERNET RJ45 Plug 1 Tx+ -------------- Rx+ 3 2 Tx- -------------- Rx- 6 3 Rx+ -------------- Tx+ 1 6 Rx- -------------- Tx- 2 RJ45 Plug

17

2.3.4

Adaptateurs

Ne plus acheter d’adaptateur ISA ou 10Mbps. Prendre des adaptateurs pour bus PCI 10/100 Mbps. Linux supporte une grande vari´t´ d’adaptateurs parmi ceux-ci : ee – 3 COM 3C905C-TX/B 10/100 PCI : driver 3c59x : 3c590 series (592/595/597) ”Vortex”. Lire Documentation/networking/vortex.txt – carte ` base de chip DEC 21143 : driver tulip a – cartes ` base de chip ne2000 : drivers ne2k ou ne2kpci. D´conseill´ pour a e e un serveur. Linux supporte les cartes Ethernet PCMCIA pour PC portable et les nouvelles cartes Gigabit Ethernet.

2.3.5

Drivers Ethernet

Choix du driver Le choix du driver se fait lors de la configuration du noyau. Les distributions Linux actuelles ont de nombreux drivers en modules. Il n’y a donc pas ` a recompiler le noyau. Driver en module ou dans le noyau ? Pour un serveur r´seau on a int´rˆt ` le mettre dans le noyau (pour des e ee a raisons de s´curit´ vis ` vis du piratage, il est conseill´ de ne pas configurer le e e a e support des modules CONFIG MODULES=NO). Manipulation des modules Chargement automatique dans Debian : Fichier /etc/modules Chargement module tulip ` la main sous root : a – insmod tulip – lsmod (liste modules charg´s) e – rmmod tulip Documentation : On trouve le source des drivers dans /usr/src/linux/drivers/net, de la documentation dans les fichiers README de ce r´pertoire ou dans /usr/src/linux/Documentation/networking. e Donald Becker becker@cesdis.gsfc.nasa.gov est l’auteur de la plupart des drivers Ethernet. On se reportera ` son site : http ://cesdis.gsfc.nasa.gov/linux/ a Reconnaissance par le noyau : Au boot, le noyau d´tecte la pr´sence de l’adaptateur. Ceci ` condition qu’on e e a ait configur´ le bon driver dans le noyau ou en module. Si le noyau ne le reconnaˆ e ıt pas (on peut relire les messages du noyau par dmesg), il est inutile de continuer. Le noyau sait reconnaˆ plusieurs adaptateurs. ıtre IRQ, IO Base address Sur un PC, un p´riph´rique est affect´ en g´n´ral d’un num´ro d’interruption e e e e e e (IRQ) et d’une adresse d’entr´e-sortie (IO Base address). Il ne peut fonctionner e si un autre p´riph´rique a la mˆme IRQ. Avec le bus PCI il y a attribution e e e dynamique des IRQ. Avec les cartes ISA, il y a plus de probl`mes : il faut e

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 r´server e l’IRQ pour la carte ISA dans le Setup du BIOS. Pour les cartes 3COM 3C509B on utilisait le logiciel fourni sous DOS par 3COM pour configurer IRQ, IO Base address et enlever l’option ”Plug and play”. Le module isapnp r´gle ce probl`me en noyau 2.0. En noyau 2.2, le support e e du ”Plug and play” est dans le noyau (CONFIG PNP=YES) On peut lister les IRQ utilis´es par cat /proc/interrupts et les IO Base e addresses par cat /proc/ioports. La commande ifconfig eth0 affiche l’IRQ (Interrupt) et l’IO Base address (Base address). Il est possible de passer des param`tres au driver de l’adaptateur r´seau : e e – soit au boot, s’il est dans le noyau. On peut dans /etc/lilo.conf ajouter une ligne : append ether=12,0xe000 o` 12 est l’IRQ et 0xe000 l’IO Base address. u – soit au chargement du module. Pour essayer des options, le module est beaucoup plus souple. Par exemple, on peut charger le module tulip par : insmod tulip.o debug=1 options=0,16 Ce qui met le niveau de debug minimum et le media type ` Autosense pour a la premi`re carte Ethernet(0), ` full duplex (16) pour la seconde (voir cat e a /proc/pci pour l’ordre des cartes).

2.4

IP

C’est l’Internet Protocol d´crit dans RFC 791. Son rˆle est d’acheminer des e o blocs de donn´es appel´s paquets (datagram) de la machine exp´diteur vers e e e la machine destinataire. Pour cela il identifie de mani`re unique les machines e (hosts) du r´seau par une adresse. En g´n´ral, un paquet a un seul destinataire e e e (unicast), mais une extension de IPv4 permet de l’envoyer ` plusieurs (multia cast). Il s’occupe aussi de fragmenter et de r´assembler les paquets si n´cessaire. e e Il communique avec la couche ”Protocole de r´seau local”, le plus souvent Ethere net. L’encapsulation dans Ethernet est d´crite dans RFC 825 et 894. e

2.4.1

Adresses IP, r´seaux IP e

Une adresse est form´e de quatre octets (32 bits). On l’´crit en g´n´ral sous e e e e forme de quatre tranches de chiffres d´cimaux s´par´s par des points (dotted quad e e e notation). Sous cette forme chaque octet est converti en un nombre d´cimal (0e 255), en omettant les z´ros de tˆte (` moins que ce nombre ne soit lui-mˆme un e e a e z´ro) et chaque octet est s´par´ par le caract`re ‘.’. e e e e Une adresse est form´e de l’adresse r´seau, suivi de l’adresse locale dans le e e r´seau. Il y a trois formats ou classes d’adresses d´crites dans le tableau 2.1. e e – Dans la classe A, le bit de poids le plus fort est nul. L’adresse d’un r´seau e est sur un octet et va de 0 ` 127. Les 24 bits suivants forment l’adresse a locale. – Dans la classe B, le bit de poids le plus fort est ` 1, le bit suivant est ` a a z´ro. La premi`re tranche de chiffres va de 128 ` 191. Une adresse r´seau e e a e fait deux octets donc deux tranches de chiffres.

2.4. IP

19 ---------------------------------------------------------|Classe de |Masque de | Plage d’adresses | | r´seau e | r´seau e | | ---------------------------------------------------------| 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 ` 1, le suivant ` a a z´ro. Une adresse r´seau fait trois octets donc trois tranches de chiffres. Les e e 8 derniers bits forment l’adresse locale. Il n’y a que 256 num´ros diff´rents. e e Address Formats: High Order Bits --------------0 10 110 111 Format Class ------------------------------- ----7 bits of net, 24 bits of host a 14 bits of net, 16 bits of host b 21 bits of net, 8 bits of host c escape to extended addressing mode

Une machine qui a plusieurs interfaces r´seau aura une adresse par interface. e L’adresse 0.0.0.0 n’est pas affect´e, elle signifie n’importe quelle adresse dans e les logiciels de routage et de filtrage. localhost Par convention l’adresse 127.0.0.1 est r´serv´e pour d´signer la machine loe e e cale. De mˆme 127.0.0.0 est r´serv´ pour d´signer le r´seau associ´. e e e e e e Masque de r´seau (netmask ) e C’est un nombre de 32 bits qui s’il est combin´ par un AND bit ` bit avec e a l’adresse IP d’une machine donne son adresse r´seau. Ainsi : e – adresse 193.54.230.20 : de classe C car la premi`re tranche de chiffre est e > 192 – le netmasq est donc 255.255.255.0 – 255.255.255.0 AND 193.54.230.20 = 193.54.230.0 On note l’adresse r´seau par 4 tranches de chiffres d´cimaux mais avec la e e partie locale ` z´ro. a e Adresse locale ou routage ? Pour savoir comment envoyer un message ` une adresse, IP teste si cette a adresse fait partie du r´seau local : e Si adresse AND netmask == adresse r´seau local e Alors envoi par Ethernet Sinon routage

20CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX Donc par d´finition IP ne fait pas de routage ` l’int´rieur d’un r´seau. En e a e e cons´quence, un r´seau doit ˆtre contig¨, il ne peut pas ˆtre d´compos´ en e e e u e e e plusieurs parties s´par´es par des routeurs. Si on veut passer outre, on a le e e recours du tunelling IP sur IP. Adresse de broadcast (adresse de diffusion). Cette adresse permet d’atteindre toutes les machines d’un r´seau. Tous les e bits de la partie locale sont ` 1. Ainsi : a Pour le r´seau 193.54.230, l’adresse de broadcast est 193.54.230.255. Envoi e d’un ping ` l’adresse de broadcast : a ping 193.54.230.255 Les syst`mes Windows Microsoft ne r´pondent pas en g´n´ral : elles ne sont e e e e pas conformes aux standards de l’Internet ! Il arrive dans certaines impl´mentations (anciennes) de IP que l’adresse de e broadcast soit l’adresse r´seau, dans l’exemple pr´c´dent : 193.54.230.0 Autre e e e exemple : ---------------------------------------Adresse machine (host address) Masque de r´seau (network mask) e Partie r´seau (network portion) e Partie machine (host portion) ---------------------------------------Adresse r´seau (network address) e Adresse de diffusion (broadcast address) ------------------------------------------------------130.79.186.31 255.255.255.0 130.79.186. .31 ---------------130.79.186.0 130.79.186.255 ----------------

L’autorit´ d’attribution des adresses est l’IANA. e L’ Internet Assigned Number Authority attribue : – les adresses IP – les num´ros de ports (RFC 1062 ”Assigned numbers”) e – donne d´l´gation aux op´rateurs ee e En Europe les adresses IP sont distribu´es par RIPE (R´seaux IP Eue e rop´ens), on interroge leur base de donn´es des r´seaux par whois, exemple : e e e [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: netname: descr: descr: country: admin-c: tech-c: tech-c: changed: changed: 130.79.0.0 - 130.79.255.255 OSIRIS Centre Reseau et Communication, Universite Louis Pasteur 7 rue Rene Descartes, 67084 Strasbourg CEDEX, France FR SG1289-RIPE AC1695-RIPE JP3374-RIPE <Annie.Renard@inria.fr> 19930908 ripe-dbm@ripe.net 19990706

2.4. IP changed: source: ... ripe-dbm@ripe.net 20000225 RIPE

21

Adresses priv´es e Des tranches d’adresses ont ´t´ pr´vues pour des r´seaux priv´s non reli´s ` ee e e e e a l’Internet ( RFC 1597) : ----------------------------------------------------------| ADRESSES POUR R´SEAUX PRIV´S E E | ----------------------------------------------------------| Classe | Masque de | Adresses de r´seau e | | r´seau | r´seau e e | | ----------------------------------------------------------| 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-r´seau e

Dans l’exemple pr´c´dent de l’adresse IP 130.79.186.31, le masque de r´seau e e e ´tait 255.255.255.0. Or 130 indique un r´seau de classe B : 130.79.0.0. Normalee e ment le masque de r´seau devrait ˆtre 255.255.0.0. L’adresse r´seau devrait ˆtre e e e e 130.79.0.0. Or elle est 130.79.186.0. Il s’agit l` d’un r´seau ”subnett´”. Vu de l’ext´rieur c’est un r´seau de classe a e e e e B d’un seul tenant, donc sans routeur. Le netmask est bien 255.255.0.0. Le routeur d’entr´e de ce r´seau lui applique le netmask 255.255.255.0 et route e e vers le routeur du sous-r´seau concern´. e e Autre exemple : On veut d´couper le r´seau de classe C : 193.54.230.0 en 4 e e sous-r´seaux, soit 2 bits de ”subnetting”. La partie r´seau va faire 24+2 = 26 e e bits. La partie adresse locale fera 6 bits, soit 64 adresses possibles. Le netmask va ˆtre : 255.255.255.x o` x=11000000 en binaire c’est ` dire 192 d´cimal. Donc e u a e le netmask sera 255.255.255.192 et les sous-r´seaux : e – 193.54.230.0 : adresses de 193.54.230.0 ` 193.54.230.63 a – 193.54.230.64 : adresses de 193.54.230.64 ` 193.54.230.127 a – 193.54.230.128 : adresses de 193.54.230.128 ` 193.54.230.191 a – 193.54.230.192 : adresses de 193.54.230.192 ` 193.54.230.255 a Ces sous-r´seaux doivent ˆtre s´par´s par des routeurs. e e e e Renater distribue actuellement des sous-r´seaux de classe C. e Notation des adresses Comme on voit que la classe de l’adresse ne suffit pas pour d´terminer le nete mask et donc l’adresse du r´seau auquel elle appartient, il est n´cessaire de toue e jours accompagner l’adresse avec ce netmask. D’o` les notations address/mask : u – 193.54.230.20/255.255.255.0 : adresse d’une machine de classe C – 193.54.230.20/24 : idem (24 signifie les 24 bits de poids le plus fort ` 1) a – 193.54.230.0/255.255.255.0 : ensemble des adresses de 193.54.230.0 ` 193.54.230.255. a r´seau. e Adresses CIDR Pour mieux utiliser l’espace d’adressage de IPv4 en attendant IPv6, on a d´fini le Classless Inter-Domain Routing. ou CIDR en abr´g´. Avec CIDR, les e e e

22CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX pr´fixes des sous-r´seaux font entre 13 et 27 bits de longs : on obtient un plus e e grand nombre de sous-r´seaux qu’avec la r´partition classiques en classes A, B e e et C. Les adresses sont donn´es sous la forme : e 193.54.230.20/24 24 ´tant le nombre de bits de la partie r´seau ou un masque avec 24 bits de e e poids le plus fort ` 1. a

2.4.3

Paquet IP (datagram)

Avant de l’envoyer, IP ajoute ` chaque paquet de donn´es qui lui est transmis a e par les couches sup´rieures un en-tˆte comportant entre autres : e e – l’adresse de l’exp´diteur e – l’adresse du destinataire – le num´ro du protocole (voir fichier /etc/protocols et le tableau 2.2) e 0 1 6 17 IP ICMP TCP UDP internet protocol, pseudo protocol number internet control message protocol transmission control protocol user datagram protocol

Tab. 2.2 – Principaux num´ros de protocole voir /etc/protocols e – un checksum de l’en tˆte, pour s’assurer de l’int´grit´ des adresses notame e e ment. – une dur´e de vie (TTL : Time To Live) e 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Tab. 2.3 – En-tˆte d’un datagramme IP e – IHL : IP Header length

2.4. IP

23

– TTL : Time To Live : en fait nombre de routeurs que le paquet peut traverser. A chaque routage TTL-=1. Si TTL==0 le paquet est d´truit. Permet e d’´viter les boucles. e Quand on active un interface r´seau sur une machine on d´finit le param`tre e e e MTU (Maximum Transmission Unit), en g´n´ral 1500 octets. Si la taille du e e paquet ` transmettre lui est sup´rieur, IP le fragmente. a e A la r´ception, IP contrˆle le checksum, s’il est mauvais le paquet est rejett´ e o e en erreur. Sinon ce header est enlev´ et le paquet r´sultant est pass´ ` la couche e e ea du dessus.

2.4.4

Routage IP

Routage Le routage consiste ` envoyer un paquet IP sur un autre r´seau. a e Routeur (Gateway) On dit parfois en fran¸ais passerelle. Un pont est autre chose, il se situe au c niveau 2 du mod`le OSI en 7 couches, le routeur est au niveau 3. e Un routeur est une machine dot´e de plusieurs interfaces r´seaux et qui traite e e la couche IP de la pile TCP/IP. Un PC Linux avec plusieurs interfaces r´seaux e devient un routeur si on fait : echo "1" > /proc/sys/net/ipv4/ip_forward – Il a autant d’interface et d’adresses IP que de r´seaux auxquels il est e connect´. Ces r´seaux n’ont pas n´cessairement la mˆme couche ”Protoe e e e cole de r´seau local”, ce peut ˆtre aussi une liaison point ` point (PPP, e e a PLIP,...). – pour chaque paquet, lit l’en-tˆte, contrˆle le checksum, lit les adresses IP, e o d´cr´mente TTL, jette le paquet si TTL==0. e e – aiguille le paquet vers un de ses interfaces, suivant un certain algorithme. Si le routeur est satur´, il peut jeter des paquets. e IP fait de son mieux pour acheminer les paquets, mais il peut en perdre (”best effort”). Cette possibilit´ de perdre des paquets ´vite l’´croulement du e e e r´seau. D’autre facteurs permettent un grand d´bit : l’int´grit´ des donn´es n’est e e e e e pas contrˆl´e, il n’y a pas de comptabilit´ ni de facturation. Chaque paquet oe e appartenant ` une mˆme entit´ de d´part (un fichier par exemple) est rout´ a e e e e ind´pendemment des autres. IP est dit ”connectionless” ` (l’oppos´ de TCP). e a e +-------------------------------+ | Internet Protocol & ICMP & GGP| +-------------------------------+ | | +---------------+ +---------------+ | Local Net 1 | | Local Net 2 | +---------------+ +---------------+ Gateway Protocols GGP : Gateway to Gateway Protocol Algorithmes de routage

24CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX En principe, le routage se fait suivant l’adresse IP du destinataire. Un op´rateur e de r´seau doit accepter que des paquets traverse son r´seau quelle que soit leur e e provenance. Dans une configuration simple, on fait du routage ”statique”. Mais s’il existe plusieurs routes pour aller d’un site ` l’autre on risque des boucles. a Quand il existe plusieurs routes pour acc´der ` une machine et/ou que le e a r´seau devient grand, il faut ´changer avec les autres routeurs des tables de e e routage et recourir ` un algorithme pour choisir l’interface sur lequel envoyer a un paquet. Les tables de routage sont des couples (adresse r´seau, distance). Une dise tance peut se mesurer en : – nombre de routeurs ` traverser (hops), RFC 1058 (r´seaux petits et moyens) a e – temps en ms, RFC 823 – une note cf EGP, RFC 904 (liaisons internationales) La table de routage permet de d´cider ` quel routeur voisin envoyer un e a paquet IP. L’´change de table de routage permet de faire connaˆ e ıtre ` l’ena semble d’Internet la cr´ation d’un nouveau r´seau, ou un nouveau chemin vers e e un r´seau. e L’algorithme de routage est dynamique. C’est ` dire que si un lien tombe ou a sature, il peut choisir une autre route. Internet fonctionne d’autant mieux que le r´seau est maill´. Les algorithmes les plus utilis´s sont : e e e – RIP (Routing Information Protocol), RFC 1058, pour r´seaux petits ou e moyens. 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 utilis´ sur les routeurs Ine ternet aux fronti`res du backbone (prˆn´ par Renater). e o e – IGRP, EIGRP – OSPF (Open Shortest Path First Protocol) daemon gated pour grands r´seaux type campus. e – IGP utilis´ sur le backbone Internet e (daemon, vieux terme Unix qui signifie : Disk And Extension MONitor). Faut-il pr´ciser qu’il est inutile de lancer routed comme le font certaines e distributions Linux quand on n’a qu’un seul interface r´seau ? e

2.5

TCP

TCP, Transmission Control Protocol, d´crit par RFC 793, est un protocole e de transfert fiable : il s’occupe de transf´rer un message (ou un fichier, bref des e donn´es) entre deux machines. Il utilise IP pour ce transport, il sait que IP e fait de son mieux mais que le r´seau a des d´faillances. TCP est “l’homme de e e confiance”, il est utilis´ par les principaux protocoles INTERNET (telnet, ftp, e smtp, http, X11,...). TCP s’occupe de : – d´couper le message en segments ` l’´mission et de les r´assembler ` la e a e e a r´ception en les remettant dans le bon ordre. e – donner ou recevoir les paquets de IP – contrˆler l’int´grit´ des donn´es par un checksum calcul´ au d´part et o e e e e e contrˆl´ ` l’arriv´e oea e

2.5. TCP

25

– redemander l’´mission des paquets manquants ou erron´s : TCP g`re une e e e connexion : il garde trace des paquets re¸us et transmis. On dit que TCP c travaille en mode connect´. e – g´rer plusieurs connexions simultan´es. e e

2.5.1

Ports TCP

TCP peut soutenir plusieurs conversations simultan´es (mutiplexage). Pour e les rep`rer, il attribue des num´ros de port. Ainsi, quand une conversation e e d´marre il lui affecte le port 1000, si une autre d´marre, elle aura le port 1001. e e Un couple (adresse IP, num´ro de port) est appel´ un socket. A l’autre bout, e e sur le serveur, un port est aussi attribu´. e Pour que le client (qui initie la connexion) puisse fixer le port cˆt´ serveur, oe on a fix´ des num´ros de ports officiels suivant le type de service demand´. Par e e e exemple pour le service ftp, utilisant tcp, le port est 21. On trouve ces num´ros de e port r´serv´s, appel´s well known ports dans le fichier /etc/services. Extrait : e e e # /etc/services: ftp-data 20/tcp ftp 21/tcp ssh 22/tcp ssh 22/udp telnet 23/tcp smtp time time domain domain tftp www pop-3 pop-3 sunrpc sunrpc auth ntp ntp netbios-ns netbios-ns afpovertcp afpovertcp nfs nfs fax hylafax X11 X11/ssh xfs 25/tcp 37/tcp 37/udp 53/tcp 53/udp 69/udp 80/tcp 110/tcp 110/udp 111/tcp 111/udp 113/tcp 123/tcp 123/udp 137/tcp 137/udp 548/tcp 548/udp 2049/tcp 2049/udp 4557/tcp 4559/tcp 6000/tcp 6010/tcp 7100/tcp mail timserver timserver nameserver nameserver http

# SSH Remote Login Protocol # SSH Remote Login Protocol

# name-domain server

# WorldWideWeb HTTP # POP version 3

portmapper # RPC 4.0 portmapper TCP portmapper # RPC 4.0 portmapper UDP authentication tap ident # Network Time Protocol # NETBIOS Name Service # AFP over TCP # AFP over TCP # networked file system # networked file system # FAX transm. service (old) # HylaFAX client-server (new) # X Window server (6000-6009) # X11 over ssh # X Font Service

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

0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ TCP Header Format

Un socket peut ˆtre utilis´ plusieurs fois par exemple (IP dest, 21) si IP dest e e sert plusieurs connexions ftp simultan´es. Mais une paire de sockets (IP source, e port source, IP dest, port dest) identifie une connexion de mani`re unique. e Un serveur utilisant un port inf´rieur ` 1024 doit avoir les privil`ges de root. e a e

2.5.2

En-tˆte TCP e

TCP ajoute ` chaque paquet un en-tˆte d’au moins 20 octets qui a le format a e ci-dessus. Sequence Number : TCP ne num´rote pas les paquets mais les octets. Le e num´ro de s´quence est le num´ro du premier octet de la partie data du paquet e e e (sauf si flag SYN). Ce num´ro est donn´ relativement ` un initial sequence e e a number (ISN) transmis lors de l’´tablissement de la connexion avec le flag SYN e pr´sent. Ce num´ro de s´quence sert ` la machine destinataire ` acquiter les e e e a a paquets re¸us et ` les remettre en ordre. c a Acknowledgment Number : pour ˆtre sˆr que le paquet est bien arriv´, le e u e destinataire doit renvoyer un accus´ de r´ception Acknowledgment. Dans ce e e paquet le flag ACK est pr´sent, si Acknowledgment Number vaut 1500 cela e signifie qu’il a re¸u les donn´es jusqu’` l’octet 1500 (exclus). Si l’exp´diteur n’a c e a e pas re¸u un Acknowledgment pour un paquet au bout d’un certain temps , il le c renvoie. 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

2.5. TCP

27

– PSH : Push Function : paquet contenant des donn´es pour le destinataire, e ne pas les garder dans le tampon. – RST : Reset the connection – SYN : Synchronize sequence numbers – FIN : No more data from sender Window : C’est un contrˆle de flux. o L’exp´diteur n’attend pas de recevoir l’ack d’un paquet pour envoyer le suie vant. D’autre part il est inutile qu’il envoie pleins de paquets si le destinataire n’arrive pas ` suivre. Par Window le destinataire indique le nombre d’octets que a l’exp´diteur peut envoyer jusqu’` nouvel ordre. Quand le destinataire re¸oit des e a c donn´es il baisse Window. Si Window=0, l’exp´diteur doit s’arrˆter. Quand le e e e destinataire est disponible, il augmente Window. Options C’est un champ de taille variable contenant entre autre : MSS : Maximum Segment Size. Envoy´ quand SYN est pr´sent. Le segment e e d´signe la partie donn´es du paquet TCP. e e Etablissement d’une connexion TCP Pour ´tablir une connexion, il suffit que le client fasse une demande et que e le serveur donne son accord, mais comme un paquet peut arriver en retard ou ˆtre dupliqu´, TCP proc`de en trois ´tapes c’est ce qu’on appelle le Basic 3-way e e e e handshake 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 3559251012 win 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 positionn´ (S). e – L’ISN, Initial Sequence Number est envoy´ ´gal ` 3559251011, format ee a first :last(nombre d’octets de data) – A fixe la Window ` 32120 octets a – < ... > indique les options – le maximum segment size mss est ` 1460 octets a – [|tcp] : signifie que le header est tronqu´ par tcpdump e – DF : Don’t Fragment – Paquet 2 : – B port 21 r´pond ` A sur le port 2998 e a – SYN et ACK sont positionn´ e – B envoie son ISN 4146826796

28CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX – B dit ` A : ton ISN est bien 3559251011 (ack 3559251012) a – B fixe sa Window ` 32736 et sa maximum segment size ` 1460 octets a a – Paquet 3 : – A port 2998 r´pond ` B sur le port 21. e a – pas de flag (.) – il n’y a pas de donn´es donc pas de sequence number, e – B dit ` A : ton ISN est bien 4146826796 (ack 4146826797) a

2.5.3

Etats d’une connexion TCP

Une connexion passe par diff´rents ´tats qui sont : e e – LISTEN - le serveur attend un appel entrant – SYN-SENT - une demande de connexion est arriv´e ; attente d’un ACK e (´tat de A apr`s envoi du paquet 1). e e – SYN-RECEIVED - une demande de connexion est arriv´e ; attente d’un e ACK (´tat de B apr`s envoi du paquet 2). e e – ESTABLISHED -´tat normal pour le transfert des donn´es (´tat de A et e e e B apr`s envoi du paquet 3). e – FIN-WAIT-1 - L’application a indiqu´e qu’elle avait termin´ e e – FIN-WAIT-2 - L’autre extr´mit´ a accept´ cette lib´ration. e e e e – CLOSE-WAIT - L’autres extr´mit´ a initi´ une lib´ration e e e e – CLOSING - Les deux extr´mit´s ont essay´ de fermer simultan´ment. e e e e – LAST-ACK - attente que tous les paquets aient disparus – TIME-WAIT - attente que tous les paquets aient disparus – CLOSED - aucune connexion Ces ´tats apparaissent quand on liste les connexions en cours par netstat e -ta

2.6

Encapsulation des protocoles

A chaque couche de la pile IP correspond une enveloppe de paquet qui est ajout´e (ou retir´e) ` l’´mission (ou ` la r´ception). On peut sch´matiser cette e e a e a e e ”encapsulation” ainsi 7 4 3 2 Application TCP IP Ethernet --------------T--- T--- T--- T--- T--IT--- IT--- IT--- IT--- IT--EIT---C EIT---C EIT---C EIT---C EIT---C

– L’application donne ` TCP des data, disons un fichier. a – TCP d´coupe ce fichier en segments, ajoute ` chacun un en-tˆte T et le e a e passe ` IP. a – IP ajoute un en-tˆte I ` chaque paquet et le passe ` la couche Protocole e a a de r´seau local. e – Si cette couche est Ethernet, un en-tˆte E est ajout´ et un checksum C est e e calcul´ et rajout´ ` la fin. e ea

2.7. UDP

29

2.7

UDP

UDP, User Datagram Protocol, d´crit par RFC 768, sert ` envoyer des mese a sages qui tiennent dans un paquet IP. Il ajoute un en-tˆte. Il n’a pas ` g´rer e a e de num´ros de s´quence. Il g`re un checksum. Il ne garde pas trace de ce qu’il e e e a envoy´. Donc si des paquets se perdent, c’est ` l’application au-dessus de le e a contrˆler. Il se sert de ports comme TCP pour distinguer plusieurs conversao tions simultan´es. UDP est utilis´ notamment pour interroger les Domain Name e e Servers.

2.8

ICMP

Internet Control Message Protocol sert ` transmettre des messages de service a (RFC 792). Les messages ICMP tiennent dans un paquet IP. La commande ipchains -h icmp donne la liste des types de message ICMP, extrait : echo-request (ping) echo-reply (pong) host-unreachable network-unreachable host-unknown network-unknown network-redirect (indication d’un routeur ` un autre signalant une meilleure route) a Exemple : zoroastre:/u1/morel# tcpdump ip proto \\icmp tcpdump: listening on eth0 10:05:05.158390 24.40.2.51 > zoroastre.c-strasbourg.fr: icmp: 24.40.2.51 udp port domain unreachable 10: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 request 17:40:21.192375 yelen.c-strasbourg.fr > zoroastre.c-strasbourg.fr: icmp: echo reply

2.9

ARP

Address Resolution Protocol RFC 826 sur un r´seau local Ethernet permet e de trouver l’adresse Ethernet (dite adresse MAC) d’une machine connaissant son adresse IP. Pour que IP puisse communiquer par Ethernet il faut qu’il connaisse l’adresse Ethernet du destinataire. ARP n’est pas un protocole IP, il n’utilise pas de paquet IP. Si la machine 130.79.186.1 veut causer ` la machine 130.79.186.2, IP v´rifie a e avec le netmask qu’elle sont bien sur le mˆme r´seau. Ensuite ARP regarde dans e e son cache s’il a 130.79.186.2. Sur Linux le cache est visible par les commandes cat /proc/net/arp ou arp -a

30CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX 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 sp´cifi´e r´pond. e e e L’ARP request est un message broadcast. Son adresse Ethernet destinataire a tous les bits ` 1 : ff :ff :ff :ff :ff :ff. Les machines sont oblig´es de prendre en a e compte ces paquets Ethernet. Si une machine est concern´e elle r´pond, sinon e e elle l’ignore. Certaines machines du r´seau utilisent les ARP request pour ´tablir e e des tables des autres machines : c’est le cas d’un switch qui doit savoir quelles adresses Ethernet sont derri`re chacun de ses ports. e Exemple d’un dialogue arp ´cout´ par tcpdump : e e #tcpdump -e arp tcpdump: listening on eth0 18:36:51.514176 0:48:54:6a:59:96 Broadcast arp 60: arp who-has zoroastre.c-strasbourg.fr tell carbone.c-strasbourg.fr 18: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 ` retenir. On leur pr´f`re des noms a ee en clair. Les noms de machines sont structur´s en une hi´rarchie de domaines : e e domaine1.domaine2...top level domain Exemple : 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 indiff´rement nom de domaine ou nom de machine. e L’espace des noms a une structure hi´rarchique : e Le nom de domaine zoroastre.c-strasbourg.fr fait partie du domaine c-strasbourg.fr qui lui-mˆme fait partie du domaine fr. Ce dernier est appel´ e e top level domain (TLD). En voici quelques uns : – aux USA : edu, mil, gov, com – com a ´t´ ´tendu a l’international eee ` – agences internationales : net, org – noms de pays ISO-3166 :fr, de, uk, it, ru, cn, au L’autorit´ de nommage est le NIC : Network Information Center . En France e (top level domain fr) c’est le NIC-France http://www.nic.fr Pour 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 localis´. e

2.10.1

Domain Name System

Le DNS fait la correspondance entre nom de domaine et adresse IP. Au d´but e ce n’´tait qu’une table mise ` jour manuellement cf /etc/hosts. e a – C’est une base de donn´es r´partie : des serveurs named communiquant e e par le protocole domain (sur UDP well known port 53)

´ ´ 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 autorit´ e Chaque machine doit avoir acc`s ` au moins un DNS e a Optimisation : un DNS m´morise les informations dans un cache (durant e un temps TTL) – S´curit´ : des DNS secondaires copies de DNS primaires e e Exemple d’interrogation – adresse IP de www.cern.ch ? – requˆte ` un DNS indiqu´ dans la ligne nameserver de /etc/resolv.conf e a e – mon DNS n’a pas www.cern.ch dans son cache – il demande ` un des DNS root l’adresse du DNS ch a – il interroge le DNS ch – le DNS de ch n’a pas www.cern.ch dans son cache – le DNS de ch interroge le DNS de cern.ch – le DNS de cern.ch renvoie l’adresse IP de www.cern.ch ` mon DNS qui a la garde dans son cache – mon DNS me renvoie l’adresse IP de www.cern.ch Types d’informations contenues dans les DNS : – A : associe une adresse IP ` un nom de domaine. C’est l’objet essentiel du a DNS – PTR : permet la requˆte inverse : ` une adresse IP associe un nom de e a domaine – CNAME : associe un alias avec son nom canonique : exemple : www-phase.c-strasbourg.fr alias de zoroastre.c-strasbourg.fr – MX : Mail eXchanger indique avec une note de pr´f´rence ` quel nom de ee a domaine envoyer le courrier por ce nom de domaine. Exemple : math.u-strasbg.fr pointe sur amon.u-strasbg.fr avec la pr´f´rence 10 ee Les MX records permettent de : – centraliser la messagerie dans un organisme sur une machine s´curis´e e e – de communiquer avec des machines non connect´es ` Internet ( uucp, e a ...) – NS pointe sur un master DNS, le serveur de nom de r´f´rence pour la zone ee – SOA : (Start of authority) en-tˆte d’une zone d’autorit´ e e

2.11
2.11.1

D´marrage du r´seau e e
Configuration du noyau

G´n´ralement, le noyau est configur´ avec le support de IP Networking et e e e d’un interface r´seau ou de plusieurs s’ils sont en modules. e CONFIG_INET=y CONFIG_NET_ETHERNET=y CONFIG_VORTEX=y (par exemple pour la carte 3COM 3C905B) Un test du support r´seau par le noyau est fait par ls /proc/net ou bien e on 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.0 IP Protocols: ICMP, UDP, TCP

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 ` un r´seau, on a besoin de : a e – Adresse IP de la machine – Masque de r´seau e – Adresse de broadcast – Adresse du routeur – Adresse du serveur de noms de domaine (DNS).

2.11.3

Initialisation de l’interface r´seau e

On initialise l’interface r´seau par ifconfig et on d´clare les routes par e e route En Debian, ceci ´tait fait dans le shell script /etc/init.d/network. Ce e fichier comporte les commandes ifconfig et route. En Debian 2.2, il est recommand´ de lancer le r´seau par ifup de l’arrˆter par ifdown, ceci est fait e e e par le shell script /etc/init.d/networking. Le lancement se fera par : /etc/init.d/networking start et l’arrˆt par : e /etc/init.d/networking stop Au lancement ce script ex´cute au pr´alable des actions spoofprotect, syncooe e kies, ip forward, en fonction d’options que l’on peut modifier dans /etc/network/options. $cat /etc/network/options ip_forward=no spoofprotect=yes syncookies=no On verra plus tard leur signification. Ensuite il initialise le ou les interfaces r´seaux par ifup -a . Ces interfaces e sont d´finis dans /etc/network/interfaces. Exemple : e # The loopback interface iface lo inet loopback # The first network card # (network, broadcast and gateway are optional) iface eth0 inet static address 193.54.230.109 netmask 255.255.255.0 network 193.54.230.0 broadcast 193.54.230.255 gateway 193.54.230.1 Avec ces informations, la commande ifup -a ex´cute pour chaque interface e une commande ifconfig et une commande route. Remarques :

´ ´ 2.11. DEMARRAGE DU RESEAU

33

– si on ajoute noauto sur la ligne iface, l’interface n’est pas initialis´ par e ifup -a ni arrˆt´ par ifdown -a. On peut le commander manuellement ee par ifup eth0, ifdown eth0, si l’interface est eth0. – autres informations par man 5 interfaces – les lignes commen¸ant par # sont ignor´es. c e – up commande ex´cute commande apr`s l’initialisation de l’interface. pre-up e e commande ex´cute commande avant l’initialisation. e – idem avec down etpre-down pour l’arrˆt de l’interface. e Nous consid´rons que l’interface r´seau est l’interface Ethernet eth0, mais e e ce peut ˆtre un deuxi`me interface Ethernet eth1 ou un interface vers un autre e e protocole r´seau. On verra par la suite comment initialiser ppp0 pour PPP, e plip0 pour PLIP.

2.11.4

La commande ifconfig

Pour activer l’interface r´seau eth0, on fait par exemple sous root : e 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 r´seau ‘255.255.255.0’. Le ‘up’ est inutile car c’est le d´faut. e e On aurait pu pr´ciser une adresse de broadcast par : e 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 ` partir de l’adresse IP qui est de a classe C. De mˆme il aurait pu deviner le netmask sauf si je fais du subnetting. e A tout instant on obtient des informations sur l’interface en faisant ifconfig eth0 $ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:50:04:F9:33:82 inet addr:193.54.230.20 Bcast:193.54.230.255 Mask:255.255.255.0 EtherTalk Phase 2 addr:65280/102 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:65692192 errors:0 dropped:0 overruns:0 frame:0 TX packets:99634932 errors:0 dropped:0 overruns:0 carrier:0 Collisions:1893719 Interrupt:12 Base address:0xe000 Autres statistiques affich´es dans ifconfig : e – RX Nombre de paquets Ethernet re¸us c – TX Nombre de paquets Ethernet transmis – errors : erreur sur le checksum Ethernet ? – dropped : paquets perdus probablement pour manque de m´moire e – overruns : entre autre les paquets arrivent trop vite, le noyau n’a pas le temps de les traiter. – frame ? – carrier : diff´rents incidents parmi lesquels Out-of-window (”cable to e long” or ”someone is running full-duplex”) Autres options de ifconfig : – pointopoint addr : pour une liaison point ` point comme avec plip a

34CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX – mtu : Maximum Transmission Unit : taille max d’un paquet que l’interface est en mesure de traiter en une transaction. Pour Ethernet c’est 1500. Pour PPP peut ˆtre plus faible. e – metric : associ´ a l’entr´e dans la table de routage correspondant ` cet e` e a interface, exprime le coˆt d’une route (= nombre de routeurs ` traverser) u a pour certains protocoles de routage (RIP). Laissez le d´faut. e – promisc : met l’interface r´seau en mode promiscuous (permet de recevoir e tous les paquets Ethernet qui passent sur le r´seau. ( -promisc remet en e mode normal) – allmulti : pour multicast Dans le cas de PPP (IP sur ligne t´l´phonique), l’interface r´seau se lance ee e par pppd, on n’a pas ` faire ifconfig. a Pour d´sactiver l’interface, on fait : e ifconfig eth0 down On notera que, contrairement aux autres p´riph´riques, eth0 n’est pas un e e nom de fichier comme /dev/lp0 et on ne peut faire cat fichier>eth0 Exercice : Comment connaˆ l’adresse IP d’une machine ? En l’extrayant ıtre de 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 commandes suivantes : user% user% user% user% user% cat /proc/net/route /sbin/route -n /sbin/route /sbin/netstat -r /sbin/netstat -rn

Exemple : $ route -n Kernel IP routing table Destination Gateway 193.54.230.0 0.0.0.0 127.0.0.0 0.0.0.0 0.0.0.0 193.54.230.1 $ route Kernel IP routing table Destination Gateway localnet * 127.0.0.0 * default routeur

Genmask 255.255.255.0 255.0.0.0 0.0.0.0

Flags U U UG

Metric 0 0 1

Ref Use 0 78581 0 2779 0 418155

Iface eth0 lo eth0

Genmask 255.255.255.0 255.0.0.0 0.0.0.0

Flags U U UG

Metric 0 0 1

Ref Use 0 78581 0 2779 0 418154

Iface eth0 lo eth0

Etant donn´ un paquet d’adresse destination adr-dest ` router, le noyau pour e a chaque ligne de la table de routage fait :

´ ´ 2.11. DEMARRAGE DU RESEAU Si adr-dest AND Genmask == Destination alors envoi du paquet ` Gateway a Sinon ligne suivante

35

– Colonne Destination : adresse de r´seau. Si elle est tout ` z´ro, c’est la e a e route par d´faut. e – Colonne Gateway : si valeur * ou 0.0.0.0, il n’y a pas de routage ` faire, a c’est local. – Flags : – U interface Up – G cette route utilise un Gateway – H une seul Host accessible par cette route, liaison point ` point a – D si entr´e cr´´e par un message ICMP redirect e ee – M si entr´e cr´´e par un message ICMP redirect e ee – Colonne Ref : nombre de routes derri`re cet interface e – Use : nombre d’utilisation de cette entr´e de la table de routage e – Iface : interface ` utiliser a Pour modifier la table de routage de mani`re statique, on utilise la commande e route. – Ajout d’une route vers une machine : route add -host 127.0.0.1 lo – Ajout d’une route vers un r´seau : e route add -net 193.54.230.0 L’interface n’est pas indiqu´ ici. Le noyau compare pour chaque interface e configur´ son adresse ANDed avec son netmask avec cette adresse r´seau. e e Le seul interface qui convient est eth0. – Ajout d’une route par d´faut : e route add default gw 193.54.230.1 metric 1 – Retrait d’une route par d´faut : e route del default Autres param`tres : netmask : il faut le pr´ciser quand on fait du subnetting. e e On peut sp´cifier les param`tres mss window irtt voir man route. e e

2.11.6

Configuration de l’interface loopback

L’interface ‘loopback’ permet de vous connecter ` la machine locale. Il y a a plusieurs raisons pour faire cela, par exemple si vous voulez faire des essais de logiciel r´seau sans interf´rer avec quelqu’un d’autre sur votre r´seau. Par e e e convention, l’adresse IP ‘127.0.0.1’ lui a ´t´ assign´e. Aussi quelle que soit la ee e machine o` vous ˆtes, si vous ouvrez une connexion telnet vers 127.0.0.1 vous u e atteindrez toujours la machine locale. On le configure par : root# ifconfig lo 127.0.0.1 root# route add -host 127.0.0.1 lo On l’utilise par exemple ainsi : $ ping localhost -c 2 PING localhost (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=1.5 ms

36CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX 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 loss round-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 acc`dant ` des e a r´seaux priv´s et un lien PPP vers l’Internet. La configuration de routage sera : e e root# root# root# root# root# echo "1" > /proc/sys/net/ipv4/ip_forward route add -net 192.168.1.0 netmask 255.255.255.0 eth0 route add -net 192.168.2.0 netmask 255.255.255.0 eth1 route add -net 192.168.3.0 netmask 255.255.255.0 eth2 route add default ppp0

Pourquoi la route par d´faut n’utilise pas ‘gw’ ? La raison en est tr`s simple : e e le protocole PPP est point ` point il n’y a qu’une machine ` chaque bout. a a Sp´cifier que l’autre bout de la liaison est un routeur est sans objet et redondant. e Incidents Si vous avez des diagnostics d’erreurs SIOCADDRT, ils peuvent ˆtre ´vit´s e e e en ajoutant un netmask et le nom de l’interface ` la commande "route add a -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
2.13.1

R´solution de noms de domaines e
Configuration

Le Name Resolver est acc´d´ en langage C par gethostbyname(2) et gethoste e byaddr(2). Il y a deux moyens pour traduire une adresse IP en nom de domaine : le fichier /etc/hosts et l’acc`s ` un DNS. L’acc`s au DNS se configure dans le e a e fichier /etc/resolv.conf $ cat /etc/resolv.conf nameserver 127.0.0.1 search c-strasbourg.fr nameserver 193.54.211.65 nameserver 193.48.86.103 Les lignes nameserver indiquent les adresses IP de DNS ` interroger dans a l’ordre o` ils sont cit´s. La ligne search sert ` compl´ter les hostnames en u e a e FQDN. Si on veut r´soudre le nom truc le r´solveur essaiera truc.c-strasbourg.fr e e et si ´chec truc.fr. e La configuration du r´solveur de noms se fait dans /etc/host.conf e

´ 2.13. RESOLUTION DE NOMS DE DOMAINES $ cat /etc/host.conf order hosts,bind multi on

37

– order : pr´cise dans quel ordre on consultera : ici en premier /etc/hosts e (hosts) et en second un DNS (bind). – multi on : est l` pour le cas o` dans /etc/hosts une machine a plusieurs a u adresses IP. – nospoof on : une interrogation directe puis inverse du DNS est faite. Si elles ne collent pas, une erreur est retourn´e : address spoofing. e – alert si une tentative de spoof (maquillage d’adresse) est faite un message est logg´. e La possibilit´ d’avoir un service NIS (Network Information Service ou Yellow e Page de Sun) est pr´vue dans la libc6. Il faut donc aussi configurer le fichier e /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. compat compat compat files dns files db db db db files files files files

passwd: group: shadow: hosts: networks: protocols: services: ethers: rpc: netgroup:

db files

N’ayant pas activ´ le service NIS une ligne nous int´resse : e e – hosts : donne l’ordre de consultation files fichier /etc/hosts consult´ e en premier, ensuite dns le DNS.

2.13.2

R´solution de noms de domaine e

nslookup $ nslookup www.lwn.net Server: localhost Address: 127.0.0.1 Name: lwn.net Address: 206.168.112.90

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

$ nslookup 206.168.112.90 Server: localhost Address: 127.0.0.1 Name: nr.lwn.net Address: 206.168.112.90 Peut ˆtre interrog´ interactivement. Tapez nslookup tapez help fin par e e Ctrl-D $ nslookup Default Server: localhost Address: 127.0.0.1 > set qt=SOA > c-strasbourg.fr Server: localhost Address: 127.0.0.1 c-strasbourg.fr origin = antares.c-strasbourg.fr mail addr = administrator.c-strasbourg.fr serial = 1998091712 refresh = 43200 (12H) retry = 600 (10M) expire = 2592000 (4w2d) minimum ttl = 604800 (1W) c-strasbourg.fr nameserver = antares.c-strasbourg.fr c-strasbourg.fr nameserver = sbgsu3.in2p3.fr c-strasbourg.fr nameserver = zoroastre.c-strasbourg.fr antares.c-strasbourg.fr internet address = 193.54.211.65 sbgsu3.in2p3.fr internet address = 193.48.86.103 zoroastre.c-strasbourg.fr internet address = 193.54.230.20 Interrogation par la racine de l’arborescence $ nslookup Default Server: localhost Address: 127.0.0.1 . <---------- signifie la racine de l’arborescence Server: localhost Address: 127.0.0.1 (root) origin = A.ROOT-SERVERS.NET <----- en t^te de mon fichier named.ca e mail addr = hostmaster.internic.NET serial = 2000061302 refresh = 1800 (30M) retry = 900 (15M)

´ 2.13. RESOLUTION DE NOMS DE DOMAINES

39

expire = 604800 (1W) minimum ttl = 86400 (1D) server A.ROOT-SERVERS.NET <-------------- j’interroge directement ce serveur ftp.lip6.fr Server: A.ROOT-SERVERS.NET Address: 198.41.0.4 Authoritative answers can be found from: <---- le coquin refuse de me r´pondre e FR nameserver = DNS.CS.WISC.EDU FR nameserver = NS1.NIC.FR \ FR nameserver = NS3.NIC.FR | serveurs du NIC FR FR nameserver = DNS.INRIA.FR | FR nameserver = NS2.NIC.FR / FR nameserver = NS.EU.NET FR nameserver = DNS.PRINCETON.EDU FR nameserver = NS-EXT.VIX.COM DNS.CS.WISC.EDU internet address = 128.105.2.10 NS1.NIC.FR internet address = 192.93.0.1 NS3.NIC.FR internet address = 192.134.0.49 DNS.INRIA.FR internet address = 193.51.208.13 NS2.NIC.FR internet address = 192.93.0.4 NS.EU.NET internet address = 192.16.202.11 DNS.PRINCETON.EDU internet address = 128.112.129.15 NS-EXT.VIX.COM internet address = 204.152.184.64 > server DNS.CS.WISC.EDU <------- qu’` cela ne tienne choisissons celui-ci a Default Server: DNS.CS.WISC.EDU Address: 128.105.2.10 > ftp.lip6.fr Server: DNS.CS.WISC.EDU Address: 128.105.2.10 Non-authoritative answer: Name: nephtys.lip6.fr Address: 195.83.118.1 Aliases: ftp.lip6.fr > zoroastre.c-strasbourg.fr Server: DNS.CS.WISC.EDU Address: 128.105.2.10

<------ je suis m^me connu aux US !!! e

Name: zoroastre.c-strasbourg.fr Address: 193.54.230.20 host interroge le DNS Syntaxe : 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

40CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX – -l : zone : liste tous les noms de la zone Exemples : $ host tux.u-strasbg.fr tux.u-strasbg.fr A $ host -t mx tux.u-strasbg.fr tux.u-strasbg.fr MX tux.u-strasbg.fr MX tux.u-strasbg.fr MX $ host 130.79.34.100 Name: tux.u-strasbg.fr Address: 130.79.34.100 Aliases: tux

130.79.34.100 30 tux.u-strasbg.fr 10 amon.u-strasbg.fr 20 isis.u-strasbg.fr

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.arpa e ´quivalent `: a host -v 193.54.230.20 dig interroge le domain name server Syntaxe : dig [options] @server domain query-type query-class Options : -x : interrogation inverse -p : port, d´faut : 53 Il existe d’autres e options. Exemples : dig phoebus.c-strasbourg.f dig @sbgsu3.in2p3.fr c-strasbourg.fr soa dig -x 193.54.230.3 interrogation inverse dnsquery interroge le domain name server Affiche 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 = IN antares.c-strasbourg.fr. 1W IN A 193.54.211.65 c-strasbourg.fr. 1W IN NS antares.c-strasbourg.fr. c-strasbourg.fr. 1W IN NS sbgsu3.in2p3.fr. c-strasbourg.fr. 1W IN NS zoroastre.c-strasbourg.fr. antares.c-strasbourg.fr. 1W IN A 193.54.211.65 sbgsu3.in2p3.fr. 13m15s IN A 193.48.86.103 zoroastre.c-strasbourg.fr. 1W IN A 193.54.230.20

2.13.3

R´solution inverse de noms de domaine e

Elle consiste ` demander quel est le nom de domaine associ´ ` une adresse a ea IP que l’on fournit. On a vu que les commandes

2.14. OUTILS DE DIAGNOSTIC nslookup 206.168.112.90 host 206.168.112.90

41

fournissait la r´ponse. Mais de mani`re interne une transformation a ´t´ e e ee faite. Il est bon pour un administrateur de la connaˆ : ıtre Pour ´viter de faire une recherche dans la base de donn´es qui est d’acc`s e e e s´quentiel et r´parti !, on a cr´´ un domains sp´cial in-addr.arpa qui contient e e ee e les adresse IP en ”reversed dotted quad notation”. Ainsi 206.168.112.90 devient 90.112.168.206.in-addr.arpa. Les ressources records (RR) contenant cette information sont de type PTR On interroge ainsi : [morel]$ nslookup Default Server: localhost Address: 127.0.0.1 > set qt=PTR > 90.112.168.206.in-addr.arpa Server: localhost Address: 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.net 112.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
2.14.1

Outils de diagnostic
ping

Teste la connectivit´, mesure le temps ´coul´, compte le nombre de paquets e e e perdus. Envoi de n=5 paquets : ping -c 5 www.lwn.net Variante fping package Debian netstd. S’utilise ` travers un script. a

2.14.2

traceroute

Tente de tracer la route suivie pour parvenir au site destinataire en lan¸ant c des petits paquets UDP, d’abord avec un ‘time to live’ TTL=1, le paquet ne peut traverser qu’un routeur puis TTL=2, puis TTL=3, etc. A chaque essai traceroute se met ` l’´coute du message ICMP ”time exceeded”. Donc indique a e tous les routeurs depuis votre machine jusqu’` la machine cible. Permet d’idena tifier o` le r´seau est coup´. Par d´faut fait 3 essais pour chaque valeur de ttl. u e e e

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 r´ponse e affiche ’*’. Exemple : $ traceroute ftp.lip6.fr traceroute to nephtys.lip6.fr (195.83.118.1), 30 hops max, 38 byte packets 1 routeur (193.54.230.1) 1.119 ms 1.300 ms 1.074 ms 2 strasbourg.cssi.renater.fr (194.214.110.233) 3.098 ms 1.066 ms 0.955 ms 3 nio-n1.cssi.renater.fr (194.214.110.137) 7.372 ms 7.006 ms 7.256 ms 4 jussieu.cssi.renater.fr (194.214.109.6) 7.428 ms 7.341 ms 7.455 ms 5 rap-jussieu.cssi.renater.fr (193.51.12.78) 7.733 ms 7.431 ms 7.542 ms 6 jussieu.rap.prd.fr (195.221.126.33) 8.444 ms 8.707 ms 8.714 ms 7 nephtys.lip6.fr (195.83.118.1) 8.116 ms 9.304 ms 8.809 ms Autre r´ponse possible : e – !H, !N, ou !P (host, network ou protocol unreachable) – !A, !C (access to the network or host, respectively, is prohibited) Le d´veloppement des firewall peut faire que les messages ICMP sont filtr´s. e e Dans ce cas on peut utiliser tcptraceroute qui envoie des paquets TCP SYN Variante 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 afficher les connexions en cours (les sockets ouverts). netstat -i donne les statistiques sur les interfaces comme ifconfig ou cat /proc/net/dev $ netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flags lo 3584 0 30285178 0 0 0 30285178 0 0 0 BLRU eth0 1500 0 66988299 0 0 0 103800699 0 0 0 BRU eth0: 1500 0 0 0 0 0 0 0 0 0 BRU eth0: 1500 0 1 0 0 0 0 0 0 0 BRU eth0: 1500 0 2 0 0 0 0 0 0 0 BRU netstat -s denne des statistiques plus d´taill´es au niveau IP, ICMP, TCP, e e UDP. netstat -r donne la table de routage, -n ´vite la traduction en noms de e domaines netstat -rn Kernel IP routing table Destination Gateway 193.54.230.37 0.0.0.0 193.54.230.50 0.0.0.0 193.54.230.104 0.0.0.0 193.54.230.0 0.0.0.0 127.0.0.0 0.0.0.0 0.0.0.0 193.54.230.1

Genmask 255.255.255.255 255.255.255.255 255.255.255.255 255.255.255.0 255.0.0.0 0.0.0.0

Flags UH UH UH U U UG

MSS 1500 1500 1500 1500 3584 1500

Window 0 0 0 0 0 0

irtt 0 0 0 0 0 0

Iface eth0:0 eth0:1 eth0:2 eth0 lo eth0

2.14. OUTILS DE DIAGNOSTIC

43

irtt : initial round trip time pour les connexions TCP : sert ` fixer un a timeout au bout duquel un paquet est renvoy´ si l’acquitement n’a pas ´t´ re¸u. e ee c D´faut 300ms (man route e netstat -a affiche les connexions en cours. On peut ˆtre plus s´lectif avec e e les options : – -t : connexions TCP – -u : connexions UDP – -w : raw connexions – -a : y compris les connexions en attente (LISTEN) – -x : socket Unix – -n : ne convertit pas les adresses IP en noms de domaines – -p : affiche le PID et le nom du processus ayant ouvert ce socket . Aide ` a identifier la connexion. Il faut ˆtre root. e – -l : affiche uniquement les connexions en attente (listening) Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address tcp 1 0 zoroastre.c-stras:pop-3 cassiopee.c-strasb:3317 tcp 0 0 zoroastre.c-stra:telnet cedre.c-strasbourg:1035 tcp 0 0 zoroastre.c:netbios-ssn pandore.c-strasbou:1025 tcp 0 0 *:snpp *:* tcp 0 0 *:fax *:* tcp 0 0 *:hylafax *:* tcp 0 0 zoroastre.c-strasb:1023 auger.c-strasbourg.:ssh tcp 0 0 *:6000 *:* tcp 0 0 *:6010 *:* tcp 0 0 zoroastre.c-:afpovertcp direction.c-strasb:2049 tcp 0 0 *:smtp *:* tcp 0 0 *:auth *:* tcp 10 0 localhost:auth localhost:23188 tcp 0 0 *:printer *:* tcp 0 0 *:6000 *:* tcp 0 0 *:6010 *:* tcp 0 32120 www-emrs.c-strasbou:www dyson.hlphys.uni-l:1036 tcp 370 0 zoroastre.c-strasbo:www 35-041.al.cgocable:1182 tcp 0 0 *:10298 *:* tcp 0 0 zoroastre.c-strasbo:979 ppp-171-1.villette:2860 tcp 0 0 zoroastre.c-strasb:auth ppp-171-1.villette:1994 tcp 0 0 zoroastre.c-stra:sunrpc ppp-171-1.villette:1992 tcp 0 0 zoroastre.c-stra:domain ppp-171-1.villette:1934 tcp 0 0 zoroastre.c-strasb:auth ppp-171-1.villette:1605 tcp 0 0 zoroastre.c-stra:sunrpc ppp-171-1.villette:1603 tcp 0 0 zoroastre.c-stra:domain ppp-171-1.villette:1545 tcp 349 0 www-emrs.c-strasbou:www dyson.hlphys.uni-l:2575 tcp 0 0 *:ssh *:* tcp 0 0 *:www *:* tcp 0 0 *:afpovertcp *:* tcp 0 0 *:979 *:* tcp 0 0 *:2049 *:* tcp 0 0 *:7100 *:*

State TIME_WAIT ESTABLISHED ESTABLISHE LISTEN LISTEN LISTEN ESTABLISHED LISTEN LISTEN ESTABLISHED LISTEN LISTEN CLOSE_WAIT LISTEN LISTEN LISTEN CLOSE CLOSE LISTEN ESTABLISHED ESTABLISHED ESTABLISHED ESTABLISHED ESTABLISHED ESTABLISHED ESTABLISHED CLOSE LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN

44CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX tcp tcp tcp tcp tcp tcp tcp tcp tcp tcp tcp tcp tcp tcp tcp 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 www-sfp2001.c-st:domain www-sdre.c-stras:domain www-emrs.c-stras:domain zoroastre.c-stra:domain localhost:domain *:imap2 *:pop-3 *:exec *:login *:shell *:ftp *:telnet *:time *:daytime *:sunrpc *:* *:* *:* *:* *:* *:* *:* *:* *:* *:* *:* *:* *:* *:* *:* LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN LISTEN 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 comme Unix. 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 110 Trying 193.54.230.20... Connected to zoroastre.c-strasbourg.fr. Escape character is ’]’. +OK POP3 zoroastre.c-strasbourg.fr v4.47 server ready user morel +OK User name accepted, password please pass xxxxx +OK Mailbox open, 457 messages stat +OK 457 3209602 list 1 +OK 1 2032 quit +OK Sayonara Connection closed by foreign host

2.14. OUTILS DE DIAGNOSTIC

45

2.14.5

nc

C’est un outil ´l´mentaire pour faire un dialogue TCP ou UDP avec une ee autre machine. C’est le « couteau suisse » de TCP-IP. Exemple : $ nc zoroastre 25 220 zoroastre.c-strasbourg.fr ESMTP Sendmail 8.9.3/8.9.3; Fri, 23 Mar 2001 17:41:49 +0100 quit 221 zoroastre.c-strasbourg.fr closing connection

2.14.6

tcpdump

tcpdump n´cessite la configuration de Packet Socket dans le noyau. Il ime prime les en-tˆtes des paquets passant sur un interface r´seau et satisfaisant e e une expression logique. Il s’emploie sous root car l’interface doit ˆtre mis en e mode promiscuous. Si le r´seau dispose de switch on ne peut ´couter que les e e paquets qui circulent sur le segment raccord´ au port du switch le plus proche, e hormis les messages broadcast comme les arp requests. Documentation : man tcpdump Options : – -i eth1 : ´coute sur l’interface eth1 e – -n : ne convertit pas les adresses IP en noms de domaines – -N : imprime le nom de machine sans le domaine – -s 200 : prend 200 octets de donn´es dans chaque paquet. D´faut : 68. e e – -t : pas de timestamp – -c 10 : n’analyse que 10 paquets. Si pas d’option -c tcpdump ne se termine que si on tape Ctrl-C. – -e : affiche le link level header c’est ` dire l’en-tˆte Ethernet a e – -S : imprime les TCP Sequence Number sous forme absolue plutˆt que o relative (par d´faut, les Initial Sequence Number (ISN) sont en absolus e mais ` la suite les Sequence Number sont donn´s relativement aux ISN) a e – -v : sortie bavarde (ajout de ttl, id) – -vv : sortie encore plus bavarde – -x : sortie en hexad´cimal e – -w fichier : copie les paquets ` l’´tat brut dans fichier a e – -r fichier : lit les paquets copi´s dans fichier par -w e Expression : En l’absence d’une expression, tous les paquets sont affich´s. Sinon, seuls e les paquets pour lesquels l’expression est vraie sont affich´s. Une expression est e faite de primitives. Une primitive est faite d’un identifieur (nombre ou nom) pr´c´d´ d’un ou plusieurs qualifieur. Il y a trois sortes de qualifieurs : e e e – 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 ˆtre combin´es par and, or et not. Les parenth`ses e e e sont autoris´es mais doivent ˆtre mise entre simples quotes pour ne pas ˆtre e e e interpr´t´es par le shell. ee Exemples d’expressions :

46CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX – host phoebus : paquet venant ou ` destination de la machine phoebus a – src host phoebus : paquet venant de la machine phoebus – port 25 : paquet venant ou ` destination du port 25 (on peut remplacer a 25 par smtp cf /etc/services). port 25 est ´quivalent ` (tcp or udp) e a port 25 – tcp : paquet tcp – tcp and host phoebus : paquet tcp venant ou ` destination de la maa chine phoebus – host phoebus and port ’(ftp or ftp-data)’ : paquet ftp venant ou a ` destination de la machine phoebus Autres primitives : – less 1000 : paquet de longueur inf´rieure ` 1000 octets e a – len <= 1000 : idem – greater 1000 : paquet de longueur sup´rieure ` 1000 octets e a – len >= 1000 : idem – ip proto //icmp : paquet IP de protocole icmp (ou udp, tcp). Le backslash sert ` distinguer de l’utilisation cit´e plus haut en protocole. a e – expr relop expr : relop peut ˆtre =, !=, >, >=, <, <=, expr est une e expression arithm´tique avec les op´rateurs +, -, *, /, &,| et des op´rateurs e e e qui permettent d’acc`der ` des donn´es dans des paquets. Exemple : e a e tcp[0] d´signe le 1er octet de l’en-tˆte TCP. e e Exemples : Ecoute d’un port pour l’identifier : tcpdump port 1023 Ecoute du protocole icmp : tcpdump ip proto \\icmp tcpdump icmp Ecoute paquets tcp sans date (timestamp), en laissant les adresses IP (-n) tcpdump -n -t tcp Ecoute d’une machine donn´e par son adresse IP : e tcpdump host 195.36.171.1 Paquets destin´s ` la machine phoebus : e a 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 Paquets ftp concernant phoebus : tcpdump host phoebus and port ’(ftp or ftp-data)’ Paquets ´chang´s entre les machines zoroastre et helios e e phoebus

2.14. OUTILS DE DIAGNOSTIC 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 &

47

Exemple de paquets TCP : on filtre les paquets TCP qui ont les flags SYN ou FIN lev´s, ils sont dans le 13`me octet de l’en-tˆte TCP. & est l’op´rateur e e e e AND bit ` bit. a # tcpdump ’tcp[13] & 3 != 0 ’ tcpdump: listening on eth0 19: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 num´ros de s´quence couvertes par les e e donn´es. Exemple : e 3625303099:3625303099(0) signifie pas de donn´es. Au d´part les num´ros sont donn´s en absolu. A la e e e e suite ils sont donn´s relativement au num´ro de s´quence initial. Exemple : e e e 2:21(19) signifie donn´es de 19 octets e – Ack est le num´ro de s´quence du prochain octet attendu du partenaire e e – Window : nombre d’octets disponibles dans le buffer de r´ception e – urgent : donn´es urgentes e – options : options entre < >, exemple : <mss 1460> – src, dst, flags sont toujours pr´sents e Exemple de paquet UDP : sur la machine phoebus on passe une commande qui interroge le serveur de noms sur zoroastre : # tcpdump udp and host phoebus tcpdump: listening on eth0 18: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 parenth`ses, par exemple (35) sont les tailles de paquets. e Exemple de paquet non IP :

48CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX 16:51:15.277160 0:b0:64:14:e:9a > >>> Unknown IPX Data: (43 bytes) [000] 00 00 00 00 00 80 00 00 B0 [010] 00 80 00 00 B0 64 14 0E 80 [020] 00 0F 00 00 00 00 00 00 00 len=43 1:80:c2:0:0:0 802.1d ui/C 64 14 0E 80 00 00 00 80 1A 00 00 14 00 02 00 00 ........ .d...... .....d.. ........ ........ ...

Exemple de sortie avec l’option -e (en-tˆte Ethernet) : e 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 contrˆler le contenu du cache ARP. o $ arp -a pandore.c-strasbourg.fr (193.54.230.80) at 00:60:08:D4:49:18 [ether] on eth0 routeur (193.54.230.1) at 00:30:94:9A:13:00 [ether] on eth0 ... On peut aussi faire cat /proc/net/arp $ cat /proc/net/arp IP address HW type 193.54.230.80 0x1 193.54.230.1 0x1 ... Flags 0x2 0x2 HW address 00:60:08:D4:49:18 00:30:94:9A:13:00 Mask * * Device

eth0 eth0

Si l’administrateur prend soin de m´moriser les adresses Ethernet dans un e fichier du type /etc/ethers il peut contrˆler l’arriv´e de machines intruses sur o e le r´seau en analysant le cache ARP des serveurs. C’est aussi un moyen de e contrˆler qu’une machine ne prenne pas l’adresse IP d’une autre. o

2.14.8

Causes de panne r´seau e

Il faut penser tant aux aspects mat´riels que logiciels. Si le cˆble est coup´ e a e quelque part... Localisez la panne : ping vers des machines locales, le routeur ou ext´rieures e – Si acc`s au routeur et non ` l’ext´rieur : vous avez oubli´ de d´clarer une e a e e e default route ou bien probl`me au-del` du routeur, faire traceroute e a – Si acc`s avec cible sous forme adresse IP plutˆt que nom de domaine : e o probl`me avec votre r´solveur de noms ou votre serveur DNS. e e – Si pas d’acc`s au routeur mais acc`s ` d’autres machines locales : probl`me e e a e sur le r´seau local : voir hub, (votre prise murale y est-elle reli´e ?) switch e e ou routeur lui-mˆme. Une simple coupure de courant... e – Si aucun acc`s ni ` l’int´rieur ni ` l’ext´rieur : probl`me de cˆblage ou e a e a e e a probl`me sur votre machine : e – V´rifier connexion du panneau de brassage au hub : LED allum´ sur le e e hub ? – V´rifier prise RJ45 et cˆble : vous en changez. e a

2.15. IP ALIASING

49

– V´rifier vos param`tres r´seau : adresse IP, masque de r´seau... Vous e e e e n’utiliseriez pas l’adresse IP de quelqu’un d’autre, ou l’inverse ? – Que donne ifconfig ? – ping localhost : si ´chec, probl`me de logiciel, support TCP/IP dans e e le noyau ? Le noyau reconnaˆ ıt-il la carte au boot ? – Si driver Ethernet en module, est-il bien charg´ ? faire lsmod. Sinon e module non charg´, ifconfig eth0 proteste. Cause : le module n’a pas e ´t´ charg´ automatiquement au boot. Probl`me classique en RedHat, ee e e apr`s une mise ` jour du noyau par package rpm... e a – Avez vous un conflit d’IRQ ou d’IO Base Address (fr´quent avec cartes e ISA) ? – En d´sespoir de cause, prenez votre tournevis, ouvrez la b´cane, retirez e e la carte r´seau (sans bouger les autres cartes !), retirez la poussi`re, soufe e flez dans le slot avec un produit de nettoyage pour carte ´lectronique, e renfoncez bien la carte dans son slot, retestez. – Sinon, il est tr`s rare qu’une carte r´seau tombe en panne, il existe des e e logiciels 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 ` un mˆme interface r´seau : utile a e e pour – remplacer une machine par une autre en cas de panne ou de maintenance – g´rer plusieurs sites www avec un seul serveur apache e Documentation : Virtual-Services HowTo IP-Alias mini-HowTo /usr/src/linux/Documentation/networking/alias.txt Mise en oeuvre : Dans le noyau configurer le support de IP ALIAS. En Debian si on utilise le script /etc/init.d/network on y ajoute : echo "Running ipalias..." ifconfig eth0:0 193.54.230.37 netmask 255.255.255.0 broadcast 193.54.230.255 route add -host 193.54.230.37 dev eth0:0 ifconfig eth0:1 193.54.230.50 netmask 255.255.255.0 broadcast 193.54.230.255 route add -host 193.54.230.50 dev eth0:1 ifconfig eth0:2 193.54.230.104 netmask 255.255.255.0 broadcast 193.54.230.255 route add -host 193.54.230.104 dev eth0:2 Si en Debian on lance le r´seau par ifup, on ajoute dans /etc/network/interfaces : e iface eth0:0 inet static address 193.54.230.37 network 193.54.230.0 netmask 255.255.255.0 broadcast 193.54.230.255 up route add -host 193.54.230.37 dev eth0:0

50CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX Test : $ netstat -rn Kernel IP routing table Destination Gateway 193.54.230.109 0.0.0.0 193.54.230.0 0.0.0.0 127.0.0.0 0.0.0.0 0.0.0.0 193.54.230.1

Genmask 255.255.255.255 255.255.255.0 255.0.0.0 0.0.0.0

Flags UH U U UG

MSS 0 0 0 0

Window 0 0 0 0

irtt 0 0 0 0

Iface eth0 eth0 lo eth0

2.16

Proxy ARP

Si une machine en route une autres par une liaison point ` point comme avec a PPP ou PLIP, elle va d´clarer que son adresse Ethernet est celle de la machine e qu’elle route et r´pond donc ` sa place aux requˆtes ARP. On appelle ¸a du e a e c proxy ARP ou ARP par d´l´gation. Cela se fait sur la machine routeur par : ee arp -s 196.168.1.2 00:50:04:F9:33:82 pub 196.168.1.2 est l’adresse IP de la machine rout´e, 00 :50 :04 :F9 :33 :82 e est l’adresse Ethernet de la machine routeur.

2.17

RARP

Reverse Adress Resolution Protocol (RARP), consiste ` demander son adresse a IP ` un serveur en fournissant son adresse Ethernet. C’est utilis´ pour permettre a e a ` des machines sans disque de booter. Le support RARP doit ˆtre configur´ dans le noyau (CONFIG INET RARP), e e si on veut que Linux r´ponde ` de telles requˆtes. e a e

2.18

DHCP

DHCP (Dynamic Host Configuration Protocol) est un protocole d´crit par la e RFC 2131 qui permet d’attribuer dynamiquement des adresses IP. C’est utilis´ e par les Internet Service Provider qui ont beaucoup de clients mais un nombre limit´ d’adresses IP ou pour attribuer des adresses IP ou machines nomades e comme les ordinateurs portables. En plus de l’adresse IP, le netmask, l’adresse de broadcast, les DNS sont aussi attribu´s. L’utilisation de DHCP rend la confie guration r´seau beaucoup plus facile. e

2.18.1

DHCP client

Une machine Linux qui veut obtenir une adresse IP (cas des machines disposant d’un interface Ethernet reli´ ` un cable-modem) doit installer un client ea comme pump ou dhcpcd. En Debian c’est le package dhcpcd. A l’installation du package, la configuration est propos´e. Le script de lancement est /etc/init.d/dhcpcd. Confie guration dans /etc/dhcpc/config : mettre IFACE=eth0, eth0 ´tant l’interface e choisi. Si on ne veut pas lancer dhcpcd mettre IFACE=none.

2.18. DHCP

51

Si le r´seau est lanc´ par la commande ifup via le script /etc/init.d/networking, e e on ajoutera dans /etc/network/interfaces ceci : iface eth0 inet dhcp – dhcp vient ` la place de static a – les param`tres hostname, leasetime, vendor, client sont optionnels. e – ifup -a d´marrera dhcpcd e – C’est la commande ifup qui s’occupe d’appeler pump ou dhcpcd. Si le package pump est install´, le daemon pump est lanc´ : e e # ps aux|grep pump root 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 Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun Jun 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 13:54:17 hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor hathor pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: pumpd[977]: PUMP: sending discover got dhcp offer PUMP: sending second discover PUMP: got an offer PUMP: got lease intf: device: eth0 intf: set: 416 intf: bootServer: 193.54.230.121 intf: reqLease: 43200 intf: ip: 193.54.230.3 intf: next server: 193.54.230.121 intf: netmask: 255.255.255.0 intf: gateways[0]: 193.54.230.1 intf: numGateways: 1 intf: dnsServers[0]: 193.54.230.20 intf: dnsServers[1]: 193.54.211.65 intf: dnsServers[2]: 193.48.86.103 intf: numDns: 3 intf: domain: c-strasbourg.fr intf: broadcast: 193.54.230.255 intf: network: 193.54.230.0 configured interface eth0

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

2.18.2

DHCP serveur

On peut installer un serveur DHCP (package Debian dhcp) qui distribuera des adresse IP prises dans certaines plages. C’est un daemon dhcpd lanc´ par /etc/init.d/dhcp start. Il ´coute le e e port UDP 67 (bootps) par d´faut et envoie des trames sur le port UDP 68. e Documentation : man dhcpd man dhcpd.conf man dhcp-options

52CHAPITRE 2. TCP-IP : LES PROTOCOLES DE L’INTERNET SUR LINUX Option du noyau pr´requise : e 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 indiqu´e pour e obtenir une adresse de dhcpd. Les machines a, b, c obtiennent des adresses entre 193.54.230.200 et 193.54.230.254. La machine d se voit toujours attribuer l’adresse 193.54.230.3. Fichier log : /var/log/daemon.log Attribution d’une adresse IP : Jun 16 08:51:08 Jun 16 08:51:09 ia eth0 Jun 16 08:51:09 :d0 via eth0 Jun 16 08:51:09 eth0 mithra dhcpd: DHCPDISCOVER from 00:11:d8:95:e7:d0 via eth0 mithra dhcpd: DHCPOFFER on 193.54.230.205 to 00:11:d8:95:e7:d0 v mithra dhcpd: DHCPREQUEST for 193.54.230.205 from 00:11:d8:95:e7 mithra dhcpd: DHCPACK on 193.54.230.205 to 00:11:d8:95:e7:d0 via

Rejet d’un client inconnu : Mar 21 17:01:58 mithra dhcpd: DHCPDISCOVER from 00:a0:d1:b3:32:29 via eth0 Mar 21 17:01:58 mithra dhcpd: Ignoring unknown client 00:a0:d1:b3:32:29 ia eth0 M´moire des adresses attribu´es aux machines dans le fichier /var/lib/dhcp/dhcpd.leases, e e 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"; }

Chapitre 3

Le serveur DNS BIND
3.1 Le Domain Name System (DNS)

Toute machine connect´e sur Internet est identifi´e par une adresse IP unique. e e Comme ces adresses sont difficilement m´morisables, on a appel´ les machines e e par des noms, puis on a mis ces noms dans des domaines. Le Domain Name System (DNS) (voir les RFC 1033, 1034, and 1035) d´finit e une structure hi´rarchique pour cet espace de nommage, l’autorit´ de nommage e e et le m´canisme pour faire la correspondance entre nom de domaine et adresse e IP. Le nom de ma machine est zoroastre et comme elle est dans le domaine c-strasbourg.fr son fully qualified domain name (fqdn) est zoroastre.c-strasbourg.fr. Le DNS est une base de donn´es r´partie constitu´e par des serveurs qui e e e communiquent entre eux par le protocole domain. C’est une base de donn´es e tr`s sollicit´e qui a d´montr´ sa robustesse. e e e e Toute machine connect´e sur Internet doit avoir un nom enregistr´ pour e e l’interrogation directe et inverse dans le DNS. BIND (The Berkeley Internet Name Domain) est une impl´mentation du e protocole Domain Name System (DNS). Il est constitu´ d’un daemon named, e c’est le serveur de nom de domaine. Il y plusieurs types de configuration de named : – Primary nameserver (master) : serveur de noms faisant autorit´ sur une e zone. Il fait des ”authoritative answers”. Son administrateur a d´l´gation ee du NIC (Network Information Center) pour g´rer sa zone. e – Secondary nameserver (slave) : copie d’un serveur de nom primaire, ne fait pas autorit´, se met r´guli`rement ` jour. Tr`s utile quand le primaire e e e a e est inaccessible – Cache nameserver (hint) : ne fait que g´rer un cache des pr´c´dentes e e e requˆtes DNS e Un serveur de noms primaire d´finit une zone. Une zone est un sur-ensemble e de r´seau. Pour reprendre l’exemple d’Olaf Kirch sur la partie de l’espace des e noms groucho.edu attribu´e ` l’Universit´ Groucho Marx, alsacien c´l`bre : e a e ee root * | ------------+--------------+-----------+----------------------------53

54 com *

CHAPITRE 3. LE SERVEUR DNS BIND edu * net * | -----------+-------+--| groucho * | -+-------------------+------------------+------| physics * maths | | +---------+--------+ +------+---+----+ theory collider gauss erdos sophus | | +-----+------+---+ +-----+------+ quark otto niels up down strange

Tous les noms affect´s d’une ´toile marquent le d´but d’une zone. Ils sont e e e associ´s ` un primary nameserver. On voit sur cet exemple que le domaine e a groucho.edu comporte toutes les machines de la Groucho Marx University, alors que la zone groucho.edu n’inclut que les machines g´r´es directement ee par le Computing Center comme gauss.maths.groucho.edu. Les machines du d´partement de Physique appartiennent ` une zone diff´rente : physics.groucho.edu9 e a e Un r´seau avec un netmask non sur une fronti`re d’octets ne peut constituer e e une zone d’autorit´ (en raison de l’interrogation inverse). e

3.2

Installation en Debian

Package bind version Version : 8.2.3-0.potato.1 ou bind 8.3.3-2.0woody1 Fichier de configuration : /etc/bind/named.conf Tous les fichiers de configuration statiques sont plac´s dans /etc/bind : Les e zones pour lesquelles on est primary name server, la zone localhost et la zone inverse. Le r´pertoire de travail de named est /var/cache/bind. Tous les fichiers e transitoires cr´´s par named y sont rang´s en particulier ceux pour lesquels il ee e est serveur secondaire. Documentation : – man named – man named.conf – man ndc lynx /usr/doc/bind/html/index.html

3.3

Exemple de configuration d’un serveur cache

C’est la configuration par d´faut fournie dans /etc/bind/named.conf : e options { directory "/var/cache/bind"; }; // reduce log verbosity on issues outside our control

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 servers zone "." { type hint; file "/etc/bind/db.root"; }; // be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912 zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; // add entries for other zones below here

3.4

Exemple de configuration d’un serveur secondaire

On est rarement responsable d’une zone d’autorit´, donc de l’administration e d’un primary nameserver. Par contre il est fr´quent d’ˆtre responsable d’un e e r´seau local. Dans ce cas il est vivement recommand´ d’installer un nameserver e e secondaire. // generated by named-bootconf.pl options { directory "/var/named"; /* * If there is a firewall between you and nameservers you want

56

CHAPITRE 3. LE SERVEUR DNS BIND * 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 pr´cise zone "nom domaine" in {}. Je n’ai pas de e in dans ma config et ¸a marche ! c – options { } – directory "/var/named" : le r´pertoire o` va se trouver la copie loe u cale de la base de donn´es : il contiendra les fichiers indiqu´s par les e e param`tres file suivants e – zone "nom de domaine" { } : d´finition d’une zone de nommage. ’.’ d´finit e e la racine (root) de l’arborescence des noms – type : type de serveur – hint : serveur cache, zone r´duite ` la racine de l’arborescence des e a noms. Il y a plusieurs serveurs root, heureusement ! – master : serveur ayant autorit´ sur la zone (master copy) e

´ 3.5. LA BASE DE DONNEES DES NOMS DE DOMAINES

57

– slave : serveur secondaire (replica of a master zone) – file : nom du fichier associ´ ` cette zone ea – masters : si je suis slave adresse des DNS masters (j’ai cit´ en premier e le master vrai, le second est un slave) Ainsi mon r´pertoire /var/named contient un fichier par zone : e – 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 inverse La 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 DNS cache.

3.5

La base de donn´es des noms de domaines e
<domain> <opt_ttl> <opt_class> <type> <resource_record_data>

Form´e de Resources Records (RR). Format : e

– – – –

domaine : nom de domaine e opt ttl : dur´e de vie de l’info en secondes (optionnel) opt class : toujours IN (Internet) type : – SOA : Start of Authority – A : d´finit le canonical name e – 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 termin´ par un ’.’ est compl´t´ par le nom de e ee la zone ou de ce qui est d´fini par $ORIGIN. Ainsi : e $ORIGIN c-strasbourg.fr. akgonul 3600 IN A 193.54.229.121 d´finit l’adresse IP pour le nom de domaine akgonul.c-strasbourg.fr. Tout e nom de domaine termin´ par un point est un fqdn. e – La racine de l’arborescence est not´e par un ’.’ e – ’@’ d´finit l’origine courante donc la zone associ´e au fichier d´finie dans e e e /etc/named.conf, sauf s’il y une instruction $ORIGIN avant. Exemple de RR de type SOA : notez le . | v

(domain) c-strasbourg

(ttl) (class) 3600 IN

(type) SOA

(rdata) antares.c-strasbourg.fr.

58

CHAPITRE 3. LE SERVEUR DNS BIND

administrator.c -strasbourg.fr. ( 1998091613 ; serial 43200 ; refresh: twice a day (sec) 600 ; retry: ten minutes (sec) 2592000 ; expire: 30 days (sec) 604800 ; minimum: default ttl or records: 1 week) Exemple de RR de type NS : (class) IN IN IN (type) NS NS NS (rdata) antares.c-strasbourg.fr. sbgsu3.in2p3.fr. zoroastre.c-strasbourg.fr.

Exemple de RR de type A : (domaine) zoroastre (ttl) (class) 604800 IN (type) A (rdata) 193.54.230.20

zoroastre n’est pas suivi d’un point, comme la zone courante est c-strasbourg.fr le nom fqdn est zoroastre.c-strasbourg.fr Exemple de RR de type PTR : (rdata) 20 (ttl) (class) 604800 IN (type) PTR (domaine) zoroastre.c-strasbourg.fr.

Ici comme le nom de la zone est 230.54.193.in-addr.arpa le fqdn est 20.230.54.193.in-addr.arpa Exemple de RR de type CNAME : (domaine) www-phase (ttl) (class) 604800 IN (type) CNAME (rdata) zoroastre.c-strasbourg.fr.

www-phase.c-strasbourg.fr est un alias de zoroastre.c-strasbourg.fr Exemple de RR de type MX : (domaine) phase 604800 (ttl) (class) IN MX (note) 5 (rdata) zoroastre.c-strasbourg.fr.

Tout mail ` destination de phase.c-strasbourg.fr est ` envoyer ` zoroastre.c-strasbourg.fr. a a a Il peut y avoir plusieurs MX records c’est celui qui a la note la plus basse qui est choisi de pr´f´rence. ee Contenu du fichier named.local ; ; BIND data file for local loopback interface ; @ IN SOA localhost. root.localhost. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Default TTL ; @ IN NS localhost. @ IN A 127.0.0.1

3.6. ADMINISTRATION fichier named.rev-local ; ; BIND reverse data file for local loopback interface ; @ IN SOA localhost. root.localhost. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Default TTL ; @ IN NS localhost. 1 IN PTR localhost.

59

3.6

Administration

D´marrage par /etc/init.d/bind start e Contrˆle par ndc Name daemon control interface o – ndc status -> PID de named – ndc reload -> recharge la base de donn´es e – ndc start -> d´marrage e – ndc restart -> red´marrage e – ndc stop -> arrˆt e

3.6.1

Log

Le fichier log est /var/log/daemon.log Lancement de named Nov 15 12:48:40 yelen named[17303]: 3-REL-NOESW Wed Nov 13 18:45:21 UTC .3/src/bin/named Nov 15 12:48:40 yelen named[17303]: Nov 15 12:48:40 yelen named[17303]: 1) Nov 15 12:48:40 yelen named[17303]: serial 1) Nov 15 12:48:40 yelen named[17303]: rial 1) Nov 15 12:48:40 yelen named[17303]: serial 1) Nov 15 12:48:40 yelen named[17303]: Nov 15 12:48:40 yelen named[17303]: Nov 15 12:48:40 yelen named[17303]: Nov 15 12:48:40 yelen named[17304]: starting (/etc/bind/named.conf). named 8.2. 2002 ^Ibuildd@cyberhq:/build/buildd/bind-8.2 hint zone "" (IN) loaded (serial 0) master zone "localhost" (IN) loaded (serial master zone "127.in-addr.arpa" (IN) loaded ( master zone "0.in-addr.arpa" (IN) loaded (se master zone "255.in-addr.arpa" (IN) loaded ( listening on [193.54.230.76].53 (eth0) listening on [193.54.230.20].53 (eth0:2) Forwarding source address is [0.0.0.0].2233 Ready to answer queries.

60

CHAPITRE 3. LE SERVEUR DNS BIND

Chapitre 4

PLIP : IP sur port parall`le e
PLIP permet de faire communiquer deux machines par TCP-IP sans carte r´seau mais connect´es via le port parall`le. C’est utile pour l’installation d’une e e e machine (mais assez lent), les transferts de fichiers avec un portable, ou un mini r´seau chez soi . C’est aussi un bon exercice en mati`re de routage ou de e e proxyarp.

4.1

Le cˆble a

C’est un cordon parall`le DB25 mˆle/DB25 mˆle dit ”null-printer” ou ”Lae a a pLink” Voici le cˆblage indiqu´ dans /usr/src/linux/drivers/net/plip.c : a e The cable used is a de facto standard parallel null cable -- sold as a "LapLink" cable by various places. You’ll need a 12-conductor cable to make one yourself. The wiring is: SLCTIN 17 - 17 GROUND 25 - 25 D0->ERROR 2 - 15 15 - 2 D1->SLCT 3 - 13 13 - 3 D2->PAPOUT 4 - 12 12 - 4 D3->ACK 5 - 10 10 - 5 D4->BUSY 6 - 11 11 - 6 Do not connect the other pins. They are D5,D6,D7 are 7,8,9 STROBE is 1, FEED is 14, INIT is 16 extra grounds are 18,19,20,21,22,23,24

4.2

Client et serveur

On relie donc deux machines avec ce cˆble par leur port parall`le. Elles a e jouent un rˆle sym´trique a priori. Mais si l’une est reli´e ` un r´seau local, o e e a e voire ` Internet par son interface Ethernet, on va l’appeler ”serveur”. a 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

62

` CHAPITRE 4. PLIP : IP SUR PORT PARALLELE +------------------+ // // +----------------+ | genesis |--------------------| phoebus | +---------+--------+ +----------------+ 193.54.230.56 | 193.54.230.115 | R´seau local e ----------------+----------------------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 inf´rieure ` 2.2 on fait : e a modprobe plip On peut disposer des interfaces plip0, plip1, plip2 correspondant aux ports lp0, lp1, lp2. Voici leurs caract´ristiques d’apr`s /usr/src/linux/drivers/net/Space.c e e Interface plip0 plip1 plip2 I/O Port Ox3BC Ox378 Ox278 IRQ 5 7 2

On a la r´ponse : e NET3 PLIP version 2.2 gniibe@mri.co.jp plip1: Parallel port at 0x378, using assigned IRQ 7. On v´rifie le chargement du module par lsmod : e phoebus:~# lsmod Module Pages plip 3 serial 8 nfs 12 3c509 2 Used by 0 1 (autoclean) 4 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/pa voir /usr/src/linux/Documentation/parport.txt permet de partager le port parall`le entre plusieurs drivers (printer, PLIP, ZIP, parallel port ATAPI CDe Rom or Disk). Ceci dit, pour le test, on a arrˆt´ le daemon lpd sur les deux ee machines. parport est d´coup´ en trois modules : e e

ˆ ´ 4.4. COTE CLIENT

63

– parport ind´pendant de l’architecture e e – parport pc sp´cifique pour plateforme Intel. On peut fournir en arguments io et irq. – parport probe teste l’´quipement qui est au bout. e On fait : depmod -a modprobe parport_pc io=0x378 irq=7 insmod plip timid=1 timid=1 ´vite d’avoir le diagnostic "Device or resource busy". e En tapant dmesg apparaissent les lignes : parport0: PC-style at 0x378, irq 7 [SPP] NET3 PLIP version 2.3-parport gniibe@mri.co.jp plip0: Parallel port at 0x378, using IRQ 7 Le port parall`le est d´crit dans /proc/parport/0 fichiers devices, hardware, e e irq, autoprobe.

4.4

Cˆt´ client o e

On d´sactive au besoin l’interface Ethernet, sinon on risque des probl`mes e e de routage : ifconfig eth0 down On configure le r´seau par : e ifconfig plip1 193.54.230.115 pointopoint 193.54.230.56 route add default gw 193.54.230.56 phoebus:~# ifconfig plip1 plip1 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.0 UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 Collisions:0 Interrupt:7 Base address:0x378 Puis, si vous tapez route vous devriez voir : Destination 193.54.230.56 Gateway * Genmask Flags Metric Ref Use Iface 255.255.255.255 UH 0 0 0 plip1

4.5

Cˆt´ serveur o e

On est en noyau 2.2.14, l’interface d´fini est plip0, on fait : e ifconfig plip0 193.54.230.56 pointopoint 193.54.230.115

64

` CHAPITRE 4. PLIP : IP SUR PORT PARALLELE En tapant ifconfig, on a :

genesis:~ # ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:35 errors:0 dropped:0 overruns:0 frame:0 TX packets:35 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 eth0 Link encap:Ethernet HWaddr 00:60:97:90:D1:38 inet addr:193.54.230.56 Bcast:193.54.230.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:634 errors:0 dropped:0 overruns:0 frame:0 TX packets:60 errors:0 dropped:0 overruns:0 carrier:0 collisions:6 Interrupt:10 Base address:0x300 Link encap:Ethernet HWaddr FC:FC:C1:36:E6:38 inet addr:193.54.230.56 P-t-P:193.54.230.115 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 Interrupt:7 Base address:0x378

plip0

On remarque que le serveur a la mˆme adresse IP sur deux interfaces diff´rents e e eth0 et plip0. La commande route donne : Kernel IP routing table Destination Gateway 193.54.230.115 * 193.54.230.0 * loopback * default 193.54.230.1

Genmask 255.255.255.255 255.255.255.0 255.0.0.0 0.0.0.0

Flags UH U U UG

Metric 0 0 0 0

Ref 0 0 0 0

Use 0 0 0 0

Iface plip0 eth0 lo eth0

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

4.6

Test

On teste que les deux machines communiquent par le cˆble null-printer en a faisant ping du client vers le serveur et inversement. genesis:~ # ping 193.54.230.115 PING 193.54.230.115 (193.54.230.115): 56 data bytes 64 bytes from 193.54.230.115: icmp_seq=0 ttl=64 time=4.4 ms

4.7. ROUTAGE PAR LE SERVEUR

65

4.7

Routage par le serveur

Pour que les autres machines du r´seau local puissent communiquer avec le e client, il faut que le serveur 193.54.230.115 agisse comme un routeur. Pour cela on active sous root le routage (forward) de paquets IP : genesis:~ # echo "1" > /proc/sys/net/ipv4/ip_forward V´rification par : e cat /proc/sys/net/ipv4/ip_forward 1 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 sp´cifi´ (ici eth0) est celui sur e e lequel on r´pondra aux requˆtes ARP. Il doit ˆtre diff´rent de celui sur lequel e e e e on route les paquets IP. On v´rifie en interrogeant le cache arp : e 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 machines du r´seau. e

4.8

Test de performances

On charge un fichier de 5.7 Meg par scp. Par plip1 cela dure 2’ 37” soit un d´bit de 36 kB/s. En rebranchant la machine sur Ethernet par eth0 le mˆme e e transfert prend 21”, soit un d´bit de 271kB/s, donc 7.4 fois plus vite. e 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:38 inet addr:193.54.230.56 P-t-P:193.54.230.115 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MTU:1500 Metric:1 RX packets:4361 errors:0 dropped:0 overruns:0 frame:0 TX packets:8098 errors:1 dropped:0 overruns:0 carrier:1 collisions:0 Interrupt:7 Base address:0x378

4.9

Documents

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

66

` CHAPITRE 4. PLIP : IP SUR PORT PARALLELE

Chapitre 5

PPP
5.1 Introduction

PPP, Point to Point Protocol permet de faire passer le protocole IP sur une liaison s´rie (cˆble null-modem, modem et ligne t´l´phonique ou liaison e a ee NUMERIS -ISDN-). Il permet de se connecter ` un fournisseur d’acc`s Internet a e ou de connecter ensemble deux r´seaux locaux. Linux peut ˆtre client ou serveur e e PPP. pppd succ`de ` slip et cslip (compressed slip) qui ne sont plus gu`re utie a e lis´s. e Le protocole PPP est d´crit dans la RFC1661 : The Point-to-Point Protocol e (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 (un standard ISO, utilis´ dans X25) qui d´crit un format de paquet avec un e e checksum. – PPP peut non seulement v´hiculer dans HDLC des paquets IP mais aussi e IPX ou AppleTalk. – LCP, Link Control Protocol, n´gocie des options comme MRU (Maximum e Receive Unit), taille maximum du datagram que l’on peut recevoir et s’occupe s’il y a lieu de l’authentification du client, du serveur ou des deux par PAP ou CHAP. – Un Network Control Protocol (NCP) n´gocie les particularit´s d’un proe e tocole. Pour IP, IPCP (RFC1332) n´gocie les adresses IP assign´es de part e e et 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 m´thode BSD qui utilise l’algorithme e LZW (licence Unisys comme gif) identique ` la commande compress de a Unix (module bsd comp.o ) 67

68

CHAPITRE 5. PPP

– la compression des paquets par la m´thode Deflate : c’est la mˆme e e m´thode que celle de gzip. Elle est recommand´e. e e La compression consomme de la m´moire. Le serveur peut ne pas la e pr´voir, auquel cas la demande de compression du client sera non satisfaite. e Les deux parties doivent utiliser le mˆme algorithme. La compression dans e PPP est plus performante si elle est bien param´tr´e que la compression e e faite dans le modem (V.42). Le logiciel pppd a un fonctionnement sym´trique, il joue le rˆle de serveur e o comme de client. Les fichiers de configuration servent ` la fois comme serveur et a comme client. Il n’y a pas en principe de diff´rence entre le client et le serveur. e Une machine Linux peut ˆtre client, serveur ou les deux ` la fois. Pour la clart´, e a e la distinction est pr´f´rable. Dans les documents le terme ”peer” d´signe l’autre ee e partenaire. Sur Linux, ppp est en deux parties, l’une dans le noyau (traitement de HDLC) 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
5.2.1

Installation de PPP
Support de PPP par le noyau

Le noyau doit ˆtre compil´ avec le support PPP. e e PPP PPP PPP PPP (point-to-point protocol) support (CONFIG_PPP) [M/n/y/?] support for async serial ports (CONFIG_PPP_ASYNC) [M/n/y/?] Deflate compression (CONFIG_PPP_DEFLATE) [M/n/y/?] BSD-Compress compression (PPP BSD-Compress compression) [M/n/y/?]

Pour un usage intermittent c’est tr`s bien de mettre PPP en module. Pour e un serveur d’acc`s Internet qui fait beaucoup de PPP on le mettra dans le noyau. e A partir du noyau 2.4 d’autres param`tres sont optionnels. Il faut s´lectionner e e CONFIG PPP ASYNC. Quand le noyau a le support PPP ou quand le module est charg´, les messages suivants apparaissent dans le log (cf dmesg) e CSLIP: code copyright 1989 Regents of the University of California PPP generic driver version 2.4.1 les modules charg´s sont les suivants : e Sequence 1 2 3 4 Module slhc ppp_generic ppp_async bsd_comp Description VJ header compression PPP driver PPP sur ligne asynchrone BSD compression for PPP’s compression protocol.

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 ` maintenir une connexion active (optionnel) a Attention on ne peut utiliser une vieille version de ppp avec un noyau r´cent e et r´ciproquement. e Compilation (si n´cessaire) : e ./configure make USE_MS_DNS=1

e L’option USE MS DNS=1 demande le support dans LCP des DNS tags utilis´s par Microsoft pour passer les noms des serveurs DNS. C’est important pour un serveur qui aurait des machines Windows comme clients.

5.2.3

mgetty

N´cessaire uniquement pour un serveur. e

5.2.4

Arborescence des fichiers PPP
root root root root root root root root root dip 78 1454 1024 1452 1024 85 10025 647 1554 1024 Jun Jun Jun Jun Jun Jun Apr Apr Jan Apr 19 19 19 19 19 19 13 13 25 14 1998 1998 1998 1998 1998 1998 19:36 10:00 03:56 03:06 chap-secrets ip-down ip-down.d ip-up ip-up.d no_ppp_on_boot options options.ttyXX pap-secrets peers

ls -lR /etc/ppp -rw------1 root -rwxr-xr-x 1 root drwxr-xr-x 2 root -rwxr-xr-x 1 root drwxr-xr-x 2 root -rw-r--r-1 root -rw-r--r-1 root -rw-r--r-1 root -rw------1 root drwxr-s--2 root ppp/peers: total 7 -rw-r-----

1 root

dip

530 Apr 13 21:14 provider

ls -lR /etc/chatscripts -rw-r----1 root dip ls -l /etc/init.d/ppp -rwxr-xr-x 1 root

200 Apr 13 17:40 provider

root

649 May 26

1998 /etc/init.d/ppp

70

CHAPITRE 5. PPP

5.3
5.3.1

Configuration du modem et du port s´rie. e
Configuration du port s´rie. e

Rep´rer sur quel port il est branch´. V´rifier que l’IRQ affect´e au port n’est e e e e pas partag´e par un autre p´riph´rique. e e e cat /proc/interrupts 0: 150843 timer 1: 3265 keyboard 2: 0 cascade 5: 14491 + serial 8: 2 + rtc 10: 2 3c509 13: 1 math error 14: 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: 0 closing_wait: 3000, closing_wait2: infinte Flags: spd_normal skip_test session_lockout Pour changer l’IRQ d’un port s´rie il faut aller modifier les switchs sur la e carte s´rie et utiliser setserial sous root. Exemple : e setserial /dev/ttyS2 irq 5 Mais les cartes m`re modernes ont deux ports s´rie configurables via le Setup e e du BIOS.

5.3.2

Configuration du modem

Branchez le modem sur un port avec UART 16550A pour avoir de bonnes performances. Ne prenez pas de carte modem mais toujours un modem externe. Lancez sous root : minicom -s configurer le nom du port s´rie par Ctrl-A e O et "Serial port setup" et sauvez par "Save setup as dfl". Tester le modem : – ATZ : r´initialisation - r´pond OK e e – AT&V : V´rifier les options du modem. Il faut avoir (en commande Hayes e standard) : – E1 echo ON (n´cessaire pour chat) e – Q0 Envoie les result codes (n´cessaire pour chat) e – S0=0 Auto Answer OFF (sauf si vous voulez que le modem d´croche. e mgetty est capable de d´crocher au bout de n sonneries) e – &C1 Carrier Detect ON only after connect – &S0 Data Set Ready (DSR) always ON – hardware flow control : RTS/CTS

5.4. PREMIERS PAS AVEC PPP

71

Si la configuration d’usine n’est pas convenable on peut la modifier dans la NVRAM du modem ou bien passer les commandes AT n´cessaires dans e le chat-script ` chaque connexion. a – Connectez vous au serveur par ATDT<num´ro de t´l´phone>. Noter exace e e tement toutes les r´ponses du serveur, en particulier les questions qui dee mandent login et mot de passe. Si le serveur vous envoie du charabia, c’est qu’il utilise PAP. S’il ne r´pond pas essayez de taper sur la touche Entr´e. e e Commandes Minicom – Ctrl-A X : sortie de Minicom avec r´initialisation du modem e – Ctrl-A Q : sortie de Minicom sans r´initialisation du modem e – Ctrl-A O : configuration de Minicom – Ctrl-A Z : menu d’aide

5.4
5.4.1

Premiers pas avec PPP
Session PPP manuelle

Pour sentir ce qu’est PPP et le tester, on peut faire une connexion ”` la a main” entre deux machines. On suppose que le serveur et le client ne demande pas d’authentification (pas de auth dans /etc/ppp/options de part et d’autre.) L’interface s´rie utilis´ ici est ttyS0. e e 1. Sur le client passez root. Configurez l’interface r´seau lo et le r´solveur e e d’adresses dans /etc/resolv.conf 2. Appelez minicom, s´lectionnez ttyS0 par Ctrl-A O et Serial port setup e . Connectez-vous au serveur par ATDT<num´ro de t´l´phone>. e e e 3. Supposant que sur le serveur le modem est contrˆl´ par getty, loggez vous oe par login, password 4. Un shell est lanc´. e 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 d´marre pppd mais ne le met pas en background de sorte qu’` e a l’arrˆt de pppd il ne reste pas de processus en attente. e 6. Sortez de minicom par Ctrl-A Q. Le modem n’est pas r´initialis´. e e 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ˆ l’interface r´seau ppp0. Sinon, ıtre e 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 attribu´e au client, P-t-P : est e l’adresse du serveur. 9. Testez le routage par route -n. L’interface ppp0 doit apparaˆ deux fois, ıtre une fois comme HOST (Flag H), une fois comme route par d´faut. Si elle e n’apparaˆ pas, vous ne pourrez pas contacter par le lien PPP d’autres ıt machine que le serveur PPP.

72 10. 11. 12. 13. 14.

CHAPITRE 5. PPP

Faites un ping au serveur. Faites un ping sur une autre machine sur Internet. Faites ppp-off pour tuer pppd sur le client (cf /usr/doc/ppp/examples/ppp-off). Le modem doit s’arrˆter. e 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 mˆme chose peut ˆtre faite ainsi : e e – sur le serveur : On cr´e un login ppp dans /etc/passwd avec pour shell e /etc/ppp/pppstart qui ressemble ` : a #!/bin/sh exec /usr/sbin/pppd -detach – sur le client : pppd connect ’chat -v "" ATDT5551212 CONNECT "" ogin: ppp word: whitewater’ \ /dev/ttyS0 38400 debug crtscts modem defaultroute pppd ne peut g´rer de script de conversation avec le modem. Pour cela il e passe la main par connect ` chat qui est fourni avec ppp. a L’option -v comme verbose va copier dans syslog toute la conversation. La conversation est not´e sous la forme de couples ”expect” ”send”, s´par´s e e e par des blancs. Ainsi : – au d´part, on n’attend rien, d’o` ”” e u – on envoie la commande de num´rotation ATDT5551212 pour appeler le e serveur – le modem doit r´pondre CONNECT e – on ne lui r´pond rien ”” e – on attend qu’il envoie la chaˆ ogin : (le l est omis de sorte que ce peut ıne ˆtre Login ou login) e – on envoie le nom d’utilisateur ppp – on attend le message Password par word : – on envoie le password whitewater Ce type de commande est dangereux car par la commande ps quelqu’un pourrait d´couvrir notre login et password. Aussi on ´crit ce dialogue dans un e e fichier ` acc`s r´serv´, accessible uniquement par root et on le r´f´rence par a e e e ee chat -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 le fichier $HOME/.ppprc Une mani`re tr`s commode d’appeler pppd comme client est : e e pppd call isp o` isp est le nom d’un Internet Service Provider. Le fichier /etc/ppp/peers/isp u est cr´´ par l’administrateur avec comme contenu des options ` pppd du genre : ee a ttyS0 38400 crtscts connect ’/usr/sbin/chat -v -f /etc/ppp/chat-isp’ noauth

5.4. PREMIERS PAS AVEC PPP 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-~"

73

1. Lignes ABORT : On peut pr´voir le comportement de notre connexion en cas d’incident. Si e le modem envoie ”NO CARRIER” l’action ABORT est lanc´e. e 2. Ligne TIMEOUT : On peut changer le TIMEOUT qui est de 45 secondes par d´faut. e 3. Autres lignes : Elles sont form´es de deux chaˆ e ınes de caract`res : e "attendue" "envoy´e" e

s´par´es par des blancs. Il suffit que la chaˆ ”attendue” concorde avec e e ıne la r´ponse effective du modem pour que le client r´ponde par la chaˆ e e ıne ”envoy´e”. e Toutes les r´ponses possibles du modem doivent ˆtre pr´vues y compris e e e CONNECT qui n’est pas indiqu´ dans l’exemple pr´c´dent. e e e On peut pr´voir une action conditionnelle par exemple si on ne re¸oit pas e c le prompt de login : ogin:--ogin: ppp ssword: hello2u2 un carriage return est envoy´ et on attend ` nouveau ogin : e a On peut envoyer des commandes d’initialisation du modem, ainsi "at&d0&c1" \q ´vite que le password soit ´crit dans le fichier log e e Ce dialogue d´pend ´videmment du serveur. En particulier si pppd du sere e veur r´clame une authentification par PAP ou CHAP, il ne faut pas faire de e dialogue login, passord, sinon on reste bloqu´. e

5.4.3

Authentification

L’authentification peut se faire de plusieurs mani`res : e 1. en dehors de pppd dans un ”chat-script”. C’est alors un simple login sur une machine distante (voir exemple plus haut). L’inconv´nient est que e chaque utilisateur doit se configurer un chat-script.

74

CHAPITRE 5. PPP 2. par PAP (Password Authentification Protocol) : L’administrateur remplit le fichier /etc/ppp/pap-secrets avec un triplet, suivi ou non d’adresses IP : client serveur secret adresses-IP client et serveur sont, en principe, des noms de machines, secret est une 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 avoir n’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 de la mˆme mani`re dans le fichier /etc/ppp/chap-secrets. L’avantage de e e CHAP est que secret ne circule pas en clair sur la ligne et que l’authentification est redemand´e p´riodiquement durant la session. C’est donc plus e e sˆr que PAP. Mais il faut s’assurer de l’interop´rabilit´ avec les machines u e e Microsoft. Normalement, on demandera sur le serveur ` pppd de r´clamer l’authentifia e cation en pla¸ant l’option auth dans le fichier /etc/ppp/options. c L’authentification est pr´vue pour ˆtre sym´trique. Un serveur demande nore e e malement au client de s’authentifier. Mais il peut refuser d’avoir ` s’authentifier a aupr`s du client. Dans ce cas l’administrateur du client doit mettre dans le e fichier /etc/ppp/peers/isp l’option noauth. L’important ` noter est que PPP n’authentifie pas un individu mais une maa chine qui, c’est le cas de Linux, peut avoir plusieurs utilisateurs. Pour cette authentification de machine on peut utiliser la base de donn´es des userids/passwords e Unix. Donc pour authentifier une machine on le fera sous un userid d’utilisateur. D’o` dans /etc/ppp/pap-secrets un hostname client qu’on remplace par un u username.

5.5
5.5.1

Configuration d’un client
Information ` r´unir sur le fournisseur d’acc`s Ina e e ternet (ISP)

– son num´ro de t´l´phone e ee – adresse IP d’au moins un serveur de nom (DNS) : alors que pour une connexion depuis un Windows ces param`tres sont communiqu´s en d´but e e e de connexion ppp, pour Linux ces adresses ainsi que le nom de domaine sont ` ´crire ` la main dans /etc/resolv.conf ae a – le serveur utilise t’il l’authentification PAP ou CHAP ? Dans ces deux cas il doit vous fournir un ”id” (nom d’utilisateur) et un ”secret” (mot de passe) – le serveur d´marre t’il automatiquement ppp (c’est le cas g´n´ral) ou bien e e e faut-il passer une commande sur le serveur pour d´marrer ppp ? Dans ce e dernier cas, on doit vous fournir un nom d’utilisateur, un mot de passe et le nom de cette commande de d´marrage (´ventuellement) ou un script de e e d´marrage e

5.5. CONFIGURATION D’UN CLIENT

75

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

5.5.2

R´solution d’adresse e

Mettre ` jour le fichier /etc/resolv.conf a search <nom du r´seau du provider> e nameserver <adresse IP du nameserver du provider> et le fichier /etc/host.conf order hosts,bind multi on

5.5.3

Param´trage PPP e

En Debian on peut configurer PPP par pppconfig sous root, en RedHat par control-panel ou linuxconf. Ici on fera ` la main ce qui est plus p´dagogique. a e On appellera pppd par pon provider qui ex´cute pppd call provider o` e u provider est un nom qui peut ˆtre chang´. L’option call provider fait que e e pppd lit le fichier d’options /etc/ppp/peers/provider Toujours en Debian, le script /etc/init.d/ppp est pr´vu pour d´marrer e e la connexion vers un serveur, ` condition que le fichier /etc/ppp/ppp on boot a existe. Le script passe la commande pppd call provider Dans le cas suivant (bidon), le provider est un linux que nous g´rons, il fait e l’authentification par PAP : – num´ro de t´l´phone : 03 88 11 63 35 e ee – 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 minimales comme : asyncmap 0 auth crtscts lock modem lcp-echo-interval 30 lcp-echo-failure 4 mais pas de proxyarp. crtscts signifie contrˆle de flux hardware sur le port o s´rie. e – crtscts contrˆle de flux hardware sur le port s´rie (il faut le positionner o e aussi sur le modem) – auth demande au partenaire (peer) de s’authentifier

76

CHAPITRE 5. PPP – asyncmap 0 pas de s´quence d’´chappement pour caract`res de contrˆles e e e o – lock utilisation d’un lock uucp (fichier /var/lock/LCK..ttySx) pour signaler aux autres logiciels que le modem est occup´ e –

Le fichier /etc/ppp/peers/provider L’option call provider de pppd fait prendre en compte ensuite un fichier provider (ce nom est quelconque) dans /etc/ppp/peers. L’administrateur l’´dite en prenant soin de conserver la version originale en provider.old e # Please customize them correctly. Only the "provider" file will # be handled by poff and pon. # debug est recommand´ pour le d´marrage: voir fichier /var/log/ppp.log e e debug # You usually need this if there is no PAP authentication # moi, pppd client, je ne demande pas au peer (le serveur) de s’authentifier noauth # authentification PAP la ligne "id", "secret" ` prendre en compte dans a # /etc/ppp/pap-secret commence par dupond name 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 num´ro ` appeler par ATDT e a connect "/usr/sbin/chat -v -f /etc/chatscripts/provider" # Routing : le routage IP se fera via le serveur PPP defaultroute # Default Modem (you better replace this with /dev/ttySx!) # faire un lien symbolique du type ln -s /dev/ttyS1 /dev/modem /dev/modem # Speed 38400 # Keep Modem up even if connection fails persist Vous pouvez pr´voir des directives d’authentification (auth, +pap, ...) mais e comme client ce n’est pas du tout recommand´ (il faut que le serveur sache e s’identifier). Cependant votre configuration peut ˆtre ` la fois client et serveur. e a Adaptez le fichier : /etc/chatscripts/provider ABORT ABORT ABORT ABORT "" CONNECT BUSY "NO CARRIER" VOICE "NO DIALTONE" ATDT0388116335 ’’

Si l’authentification ne se fait pas par PAP/CHAP il faut ajouter apr`s e CONNECT des lignes du genre : "ogin:" "assword:" dupond hzkd0h3

5.5. CONFIGURATION D’UN CLIENT

77

Mais attention, en PAP ou CHAP, il ne faut pas mettre ces deux lignes : ¸a c vous bloque. Le fichier /etc/ppp/pap-secrets En authentification PAP, on ´dite le fichier /etc/ppp/pap-secrets : e dupond * hzkd0h3

La directive name dupond doit ˆtre pr´sente dans le fichier /etc/ppp/peers/provider e e

5.5.4

Test de pppd

Appel de pppd en Debian : Tout utilisateur du groupe dip (comme dial IP) pourra faire : – pon provider : lancement r´seau par PPP e – poff provider : arrˆt r´seau PPP e e – plog : examen du fichier log Test 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, v´rifier par lsmod qu’il est e bien charg´. e Exemple : lsmod Module ppp slhc serial nfs 3c509

Pages 5 2 8 12 2

Used by [ppp] 0 (autoclean) 0 (autoclean) 2 (autoclean) 4 1

Faire ensuite ifconfig puis netstat -r. On n’a pas ` faire de a route add default adresse-routeur On doit avoir quelque chose du genre : [morel@phoebus morel]$ ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX packets:66 errors:0 dropped:0 overruns:0 frame:0 TX packets:66 errors:0 dropped:0 overruns:0 carrier:0 Collisions:0 ppp0 Link encap:Point-to-Point Protocol inet addr:193.54.230.101 P-t-P:193.54.230.20 Mask:255.255.255.0 UP POINTOPOINT RUNNING MTU:1500 Metric:1 RX packets:7 errors:1 dropped:1 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0

78 Collisions:0 Memory:9b3038-9b3c04 [morel@phoebus morel]$netstat -r Kernel IP routing table Destination Gateway zoroastre.c-str * 127.0.0.0 * default zoroastre.c-str

CHAPITRE 5. PPP

Genmask 255.255.255.255 255.0.0.0 0.0.0.0

Flags UH U UG

MSS 1500 3584 1500

Window 0 0 0

irtt 0 0 0

Iface ppp0 lo ppp0

Si ¸a ne marche pas : c – Examiner le log (ajoutez l’option debug) – Relire PPP-HOWTO Causes d’incidents : – le modem ne r´pond pas : tester avec minicom. Cause possible : erreur de e port ttySxx – on ne peut lancer pppd que depuis root : mettez le userid dans le groupe autoris´ ` ex´cuter /usr/sbin/pppd (dip en Debian). ea e – on est en PAP et le chatscript comporte une identification par login d’o` u blocage – on est en PAP et ”id secret” n’est pas bien sp´cifi´ (oubli de l’option name) e e – Diagnostic ”Serial line loopback” dans le log : oubli d’une r´ponse du e modem dans le chat-script, CONNECT par exemple. – on acc`de au serveur mais pas ` d’autres machines d’Internet. Causes : e a – oubli de defaultroute sur le client ou de proxyarp sur le serveur. – dans netstat -r la ligne default n’indique pas le serveur PPP – on a une carte Ethernet et on a laiss´ l’initialisation de eth0 qui pr´voit e e le routage par eth0. Faire ifconfig eth0 down – pppd s’arrˆte ` son d´marrage par mgetty. Cause possible : erreur dans e a e un fichier de configuration, par exemple pap-secrets. Tester par : pppd dryrun dryrun fait ´crire les options dans /var/log/messages et arrˆte pppd e e

5.6
5.6.1

Configuration d’un serveur
Installation

pppd est appel´ par mgetty qui ´coute le port s´rie et sait reconnaˆ e e e ıtre un appel PPP. Configuration du noyau Il faut pr´voir : e – le support PPP dans le noyau ou en module – IP forwarding/gatewaying pour servir de routeur pour les machines connect´es e par PPP

5.6. CONFIGURATION D’UN SERVEUR Installation de mgetty

79

On peut lancer directement pppd sur un port s´rie, mais il est pr´f´rable e ee de le faire ` travers mgetty. Cela permet d’utiliser le modem pour autre chose a (connexion distante en mode terminal par minicom, kermit, etc ou de recevoir des fax). mgetty sait reconnaˆ le type d’appel et appeler le service ad´quat. ıtre e Il faut au moins mgetty Version 1.1.18-1. mgetty doit ˆtre compil´ avec e e a l’option -DAUTO PPP c’est ` dire reconnaissance automatique de PPP. C’est n´cessaire pour les clients Microsoft Wxx. e On met mgetty ` l’´coute d’un port s´rie en ajoutant dans /etc/inittab a e e une ligne : S1:2345:respawn:/sbin/mgetty -x0 -n 7 ttyS1 En Debian, il suffit de d´commenter une ligne. e – x0 signifie niveau de debug 0 (pas de debug) – n 7 signifie le modem d´croche la ligne ` la 7`me sonnerie e a e On met ` jour init par telinit q. a Contrˆle de mgetty mgetty est capable de reconnaˆ un type d’appel (voix, o ıtre fax, ppp, data). Quand mgetty reconnaˆ un appel PPP, il faut pr´ciser comment ıt e mgetty doit appeler pppd. On l’indique dans /etc/mgetty/login.config, par exemple : /AutoPPP/ a_ppp /usr/sbin/pppd auth -chap +pap login debug

ıtra dans la commande w. a ppp est le nom sous lequel pppd apparaˆ On peut configurer des options dans /etc/mgetty.config, par exemple pour un port : port ttyS0 speed 28800 toggle-dtr n debug 9 data-only y Les fichiers logs se trouvent en /var/log/mgetty/ Si la ligne t´l´phonique est aussi utilis´e pour la voix, on peut empˆcher ee e e mgetty/ de d´crocher en cr´ant un fichier /etc/nologin.ttyxx Ainsi on peut e e mettre dans /etc/crontab : # # 0 0 # 1 1 1 1 1 Contr^le modem sur ma ligne t´l´phonique o e e modem inaccessible du lundi au vendredi de 9h ` 19h a 9 * * 1-5 root /usr/bin/touch /etc/nologin.ttyS1 19 * * 1-5 root /bin/rm /etc/nologin.ttyS1 sauf les jours f´ri´s e e 9 1 1 * root /bin/rm /etc/nologin.ttyS1 9 1 5 * root /bin/rm /etc/nologin.ttyS1 9 8 5 * root /bin/rm /etc/nologin.ttyS1 9 14 7 * root /bin/rm /etc/nologin.ttyS1 9 11 11 * root /bin/rm /etc/nologin.ttyS1

80 Installation de pppd

CHAPITRE 5. PPP

Il faut avoir au moins pppd 2.2.0f-4 pour pouvoir transmettre aux clients Microsoft les adresses de DNS par LCP. C’est le cas en Debian. Compilation de pppd Si on doit compiler, il faut faire : 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 +pap login debug asyncmap 0 lock modem crtscts proxyarp netmask 255.255.255.0 ms-dns 193.54.230.20 ms-dns 193.54.211.65 ms-wins 193.54.230.20 noipx lcp-echo-interval 30 lcp-echo-failure 4 Options courantes pour modem : – asyncmap 0 : pas d’´chappement pour des caract`res de contrˆle e e o – lock : lock ` la UUCP (pour r´server le port s´rie pour pppd) a e e – crtscts : contrˆle de flux hardware sur le port s´rie o e – modem : utilise les modem control lines (CD et DTR) Options d’authentification : – auth : authentification du client demand´e e – -chap : pas d’authentification CHAP – +pap : authentification PAP – login : les userids/passwords Unix sont utilis´s pour l’authentification e Options 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’autre machine que le serveur. L’option defaultroute ne se met pas pour un serveur.

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 WINS Options de gestion du lien : – lcp-echo-interval 30 : envoie une demande d’´cho si aucun paquet n’a ´t´ e ee re¸u depuis 30 secondes pour v´rifier si le partenaire est toujours l` c e a – lcp-echo-failure 4 : si au bout de 4 demandes d’´cho, le partenaire ne e r´pond pas, on le suppose mort. e

5.6.2

Affectation dynamique des adresses IP :

Quand le serveur a plusieurs modems, on n’indique pas l’adresse IP du client dans /etc/ppp/options mais dans un fichier sp´cifique au port : e Fichier /etc/ppp/options.ttyS0 /dev/ttyS0 193.54.230.20:193.54.230.100 La syntaxe est : adresse IP locale: adresse IP distante Fichier /etc/ppp/options.ttyS1 /dev/ttyS1 193.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 accord´e. e Si on utilise les passwords Unix pour authentifier (options auth +pap login) on peut mˆme supprimer le fichier /etc/ppp/pap-secrets e

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 entr´e dans e /etc/passwd sera du type : dupond:x:1234:1234:Dupond Jean:/tmp:/bin/false

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 Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr 17 17 17 17 17 17 17 17 17 17 17 16:40:39 16:40:39 16:40:39 16:40:42 16:40:42 16:40:42 16:40:42 16:45:35 16:45:35 16:45:36 16:45:36 zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre pppd[14629]: pppd[14629]: pppd[14629]: pppd[14629]: pppd[14629]: pppd[14629]: pppd[14629]: pppd[14629]: pppd[14629]: pppd[14629]: pppd[14629]: pppd 2.3.5 started by a_ppp, uid 0 Using interface ppp1 Connect: ppp1 <--> /dev/ttyS0 user emrs logged in found interface eth0 for proxy arp local IP address 193.54.230.20 remote IP address 193.54.230.100 Hangup (SIGHUP) Modem hangup Connection terminated. Exit.

Connexion d’une machine Windows 98: Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr 17 17 17 17 17 17 17 17 17 17 17 17 17 17 13:06:01 13:06:01 13:06:01 13:06:05 13:06:05 13:06:05 13:06:05 13:06:05 13:06:05 13:12:39 13:12:40 13:12:40 13:12:40 13:12:41 zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre zoroastre pppd[7110]: pppd[7110]: pppd[7110]: pppd[7110]: pppd[7110]: pppd[7110]: pppd[7110]: pppd[7110]: pppd[7110]: pppd[7110]: pppd[7110]: pppd[7110]: pppd[7110]: pppd[7110]: pppd 2.3.5 started by a_ppp, uid 0 Using interface ppp1 Connect: ppp1 <--> /dev/ttyS0 user vnc logged in found interface eth0 for proxy arp local IP address 193.54.230.20 remote IP address 193.54.230.100 CCP terminated by peer Compression disabled by peer. LCP terminated by peer Hangup (SIGHUP) Modem hangup Connection terminated. Exit.

Dans /var/log/ppp.log avec l’option debug : le dialogue LCP, IPCP, PAP apparaˆ La session normale ci-dessous permet de rep´rer dans une connexion ıt. e d´faillante o` se situe le probl`me. e u e Apr 19 17:50:09 zoroastre pppd[21784]: pppd 2.3.5 started by a_ppp, uid 0 Apr 19 17:50:09 zoroastre pppd[21784]: Using interface ppp1 Apr 19 17:50:09 zoroastre pppd[21784]: Connect: ppp1 <--> /dev/ttyS0 Apr 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>]

´ 5.7. REGLAGES FINS Apr 19 17:50:12 zoroastre pppd[21784]: Apr 19 17:50:12 zoroastre pppd[21784]: sword="xxxxx"] Apr 19 17:50:12 zoroastre pppd[21784]: Apr 19 17:50:16 zoroastre pppd[21784]: Apr 19 17:50:16 zoroastre pppd[21784]: 0.20> <compress VJ 0f 01>] Apr 19 17:50:16 zoroastre pppd[21784]: Apr 19 17:50:16 zoroastre pppd[21784]: f 01> <addr 0.0.0.0>] Apr 19 17:50:16 zoroastre pppd[21784]: 30.100>] Apr 19 17:50:16 zoroastre pppd[21784]: 0.20> <compress VJ 0f 01>] Apr 19 17:50:16 zoroastre pppd[21784]: f 01> <addr 193.54.230.100>] Apr 19 17:50:16 zoroastre pppd[21784]: f 01> <addr 193.54.230.100>] Apr 19 17:50:16 zoroastre pppd[21784]: Apr 19 17:50:16 zoroastre pppd[21784]: Apr 19 17:50:16 zoroastre pppd[21784]: Apr 19 17:50:42 zoroastre pppd[21784]: Apr 19 17:50:42 zoroastre pppd[21784]: Apr 19 17:51:12 zoroastre pppd[21784]: Apr 19 17:51:12 zoroastre pppd[21784]: Apr 19 17:58:58 zoroastre pppd[21784]: Apr 19 17:58:58 zoroastre pppd[21784]: Apr 19 17:58:58 zoroastre pppd[21784]: Apr 19 17:59:01 zoroastre pppd[21784]: Apr 19 17:59:01 zoroastre pppd[21784]: Apr 19 17:59:01 zoroastre pppd[21784]:

83 sent [LCP EchoReq id=0x0 magic=0x103ef27] rcvd [PAP AuthReq id=0x43 user="emrs" pas user emrs logged in sent [PAP AuthAck id=0x43 "Login ok"] sent [IPCP ConfReq id=0x1 <addr 193.54.23 rcvd [LCP EchoRep id=0x0 magic=0x2a] rcvd [IPCP ConfReq id=0x44 <compress VJ 0 sent [IPCP ConfNak id=0x44 <addr 193.54.2 rcvd [IPCP ConfAck id=0x1 <addr 193.54.23 rcvd [IPCP ConfReq id=0x45 <compress VJ 0 sent [IPCP ConfAck id=0x45 <compress VJ 0 found interface eth0 for proxy arp local IP address 193.54.230.20 remote IP address 193.54.230.100 sent [LCP EchoReq id=0x1 magic=0x103ef27] rcvd [LCP EchoRep id=0x1 magic=0x2a] sent [LCP EchoReq id=0x2 magic=0x103ef27] rcvd [LCP EchoRep id=0x2 magic=0x2a] rcvd [LCP TermReq id=0x46] LCP terminated by peer sent [LCP TermAck id=0x46] Connection terminated. Hangup (SIGHUP) Exit.

5.7

R´glages fins e

– mru (Maximum Receive Unit) . Sa valeur par d´faut est 1500. La valeur e minimum est 128. Une valeur de 296 est recommand´e pour les liaisons e lentes et un logiciel ligne ` ligne. Pour de l’interactif 1500 peut ˆtre ´lev´ a e e e (mru 542 ?) – deflate nr,nt : compression par la m´thode deflate (cf gzip) nr et nt e entre 8 et 15 – bsdcomp nr,nt : compression par la m´thode BSD (cf compress Unix) nr e et nt entre 9 et 15 – vj-max-slots n : fixe le nombre de connection slots pour la compression de Van Jacobson des TCP/IP ( n entre 2 et 16). Il faut tenir compte que la compression prend de la m´moire et que le modem e comprime aussi (V.42). N´ammoins la compression peut am´liorer le d´bit. e e e Je constate que j’ai les meilleures performances avec les options PPP standards (mru=1500, compression VJ) mais en comprimant les fichiers transf´r´s ee

84

CHAPITRE 5. PPP

par gzip et/ou en utilisant l’option de compression -C dans ssh (slogin -C host, scp -C d´part arriv´e) e e

5.8

S´curit´ e e

pppd doit ˆtre suid root pour pouvoir initialiser l’interface r´seau et modifier e e la table de routage. Son acc`s doit ˆtre r´serv´ ` un groupe d’utilisateurs (dip e e e ea en Debian). Les fichiers de configuration dans /etc/ppp ne doivent ˆtre accessibles que e par l’administrateur. De mˆme les fichiers logs. e Sur un serveur l’authentification doit ˆtre obligatoire. e

5.9
5.9.1

Applications
PPP sur cˆble null modem a

On raccorde les deux machines par un cˆble s´rie dit null modem, les fils a e transmit-receive sont crois´s, voir Serial-HOWTO. e Choisissez une machine comme serveur. Installez mgetty sur un port s´rie. e Testez la connectivit´ par minicom depuis le client. Si probl`me configurer les e e ports avec setserial. Maintenant il suffit de lancer pppd sur les deux machines, par exemple sur le port ttyS1 de chacune d’elle par : pppd -detach crtscts lock <local IP>:<remote IP> /dev/ttyS3 38400 & On teste par ifconfig et ping que les deux machines communiquent. Mais on n’a pas de routage. Coupez le lien en tuant l’un des pppd. Pour router, on suppose qu’une machine a un interface Ethernet connect´ e et l’autre non. Sur la machine avec interface Ethernet on fera : pppd -detach crtscts lock proxyarp <local IP>:<remote IP> /dev/ttyS3 38400 & et sur l’autre : pppd -detach crtscts lock defaultroute <local IP>:<remote IP> /dev/ttyS3 38400 &

5.9.2

Relier deux r´seaux par PPP e

Il faut avoir des adresses IP pour les machines des deux r´seaux. e

5.9.3

Routage

Si l’un des r´seaux est connect´ ` Internet, on mettra defaultroute cˆt´ e e a oe client et on d´finira la machine Linux qui tourne le pppd client comme routeur e par d´faut sur les machines du r´seau non connect´ ` Internet. e e ea S’il s’agit juste de connecter deux r´seaux on ajoute une commande route e pour chaque r´seau par le script /etc/ppp/ip-up. Il faut aussi que chaque e machine des deux r´seaux connaisse le routeur. e

5.9. APPLICATIONS

85

5.9.4

/etc/ppp/ip-up

Quand pppd a ´tabli le lien il regarde si un script /etc/ppp/ip-up est e ex´cutable et si oui l’ex´cute. On peut l’utiliser pour passer une commande e e route ou lancer sendmail afin d’envoyer le courier en instance. Exemple :

#!/bin/bash # # Script which handles the routing issues as necessary for pppd # Only the link to Newman requires this handling. # # When the ppp link comes up, this script is called with the following # parameters # $1 the interface name used by pppd (e.g. ppp3) # $2 the tty device name # $3 the tty device speed # $4 the local IP address for the interface # $5 the remote IP address # $6 the parameter specified by the ’ipparam’ option to pppd # case "$5" in # Handle the routing to the Newman Campus server 202.12.126.1) /sbin/route add -net 202.12.126.0 gw 202.12.126.1 # and flush the mail queue to get their email there asap! /usr/sbin/sendmail -q & ;; 139.130.177.2) # Our Internet link # When the link comes up, start the time server and synchronise to the world # provided it is not already running if [ ! -f /var/lock/subsys/xntpd ]; then /etc/rc.d/init.d/xntpd.init start & fi # Start the news server (if not already running) if [ ! -f /var/lock/subsys/news ]; then /etc/rc.d/init.d/news start & fi ;; 203.18.8.104) # Get the email down to my home machine as soon as the link comes up # No routing is required as my home Ethernet is handled by IP # masquerade and proxyarp routing. /usr/sbin/sendmail -q & ;; *) esac exit 0

86

CHAPITRE 5. PPP

5.10

Client PPP sur Microsoft Wxx

– D´marrer/Programmes/Accessoires/Communication/Acc`s r´seau ` dise e e a tance – Double cliquer avec le bouton gauche l’icˆne ”Nouvelle connexion” o – Entrez un nom pour l’ordinateur appel´ e – Suivant – Num´ro de t´l´phone e ee – Cliquer la nouvelle icˆne avec le bouton droit et s´lectionner Propri´t´s o e ee – Onglet : type de serveur – Type de serveur : PPP Internet Windows NT Serveur et Windows 98 – Options avanc´es : e – (X) Se connecter ` un r´seau a e – (X) Activer la compression logicielle – () Demander un mot de passe crypt´ e – () Demander le cryptage des donn´es e – () Cr´er un journal pour cette connexion e – Protocoles r´seau autoris´s e e – () NetBeui – () Compatible IPX/SPX – (X) TCP/IP – Cliquer param`tres TCP/IP e – (X) Adresse IP attribu´e par serveur e – () Sp´cifier adresse IP e – (X) Adresses de serveurs de nom attribu´es par serveur e – () Sp´cifier les adresses des serveurs de noms e – (X) Utiliser la compression d’en tˆte IP e – (X) Utiliser la passerelle par d´faut pour le r´seau distant e e

5.11

Divers

– pppupd (package Debian) : veille ` maintenir active la liaison PPP. a – diald permet de lancer automatiquement PPP quand une connexion est demand´e. e – EQL permet de coupler deux modems en un seul lien PPP, doublant ainsi sa capacit´. e – Linux supporte des cartes multiports pour connecter une batterie de modems : Cyclades, Stallion, Comtrol RocketPort... Voir Hardware HowTo et Serial HowTo

Chapitre 6

S´curit´ r´seau sur Linux e e e
6.1 Introduction

Ce document donne quelques r`gles minimales de s´curit´ pour des machines e e e Linux connect´es sur Internet par une adresse IP fixe et qui ne font pas de e services r´seau. e Ce document est provisoire. Toute remarque est bienvenue. Linux est par nature un serveur r´seau sur Internet. La plupart des distrie butions Linux d´marrent des serveurs r´seaux sans mˆme que le propri´taire de e e e e la machine, qui croit avoir une simple station de travail, s’en rende compte. Ces serveurs r´seau sont inutilis´s, ils prennent du temps CPU, de la m´moire et ce e e e sont autant de serrures que des pirates peuvent essayer d’ouvrir ou de forcer. Une fois qu’un pirate a r´ussi ` rentrer sur votre machine, il peut par ´tapes e a e successives devenir root, ´couter ce qui passe sur le r´seau local, s’installer sur e e d’autres machines... Mˆme s’il fait ¸a ”pour le sport”, c’est tr`s gˆnant. Pas e c e e seulement en raison des d´gˆts qu’il peut commettre sur la machine visit´e, mais e a e parce que, contrˆlant une machine ` l’insu de son responsable, le pirate peut o a mener ` partir de cette machine des actions nuisibles sur le r´seau. Par exemple a e l’utiliser comme relais de messages publicitaires ou comme base d’attaque contre d’autres machines. Toute machine visit´e par un pirate doit ˆtre enti`rement reconfigur´e. e e e e Si Linux n’est utilis´ que comme poste de travail personnel, il ne joue sur le e r´seau qu’un rˆle de client, tous les serveurs qui sont activ´s par les proc´dures e o e e d’installation des distributions actuelles, sont non seulement inutiles mais sont dangereux. Il faut les arrˆter. e

6.2

Arrˆter sa machine quand elle n’est pas utie lis´e e

C’est bˆte, mais efficace quand on ne fait pas de service r´seau. e e On peut aussi couper la machine du r´seau. Mais attention, les prises RJ45 e ne sont pas inusables. 87

88

´ ´ ´ CHAPITRE 6. SECURITE RESEAU SUR LINUX

6.3
6.3.1

Arrˆter les serveurs inutiles e
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 r´seau ? e On passe la commande netstat -tu ou plus explicitement netstat --tcp --udp netstat -tu|more Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address tcp 1 0 localhost:printer localhost:851 tcp 0 0 *:smtp *:* ... montre que deux daemons fonctionnent en transport tcp, le serveur d’impression lpd sur le port tcp 515 (printer) et sendmail sur le port tcp 25 pour le service de mail (smtp). Les num´ros de port r´pertori´s dans /etc/services e e e sont remplac´s par le nom du service. e Contrˆle des daemons en RedHat o Les scripts de lancement/arrˆt sont en /etc/rc.d/init.d e On peut arrˆter manuellement un daemon, sendmail par exemple, sous root e par : cd /etc/rc.d/init.d ./sendmail stop Ainsi on arrˆte le Mail Transfer Agent sendmail. e Pour que cet arrˆt soit permanent il faut empˆcher le d´marrage au boot du e e e daemon. Il faut d’abord savoir dans quel ”run level” on d´marre. En RedHat e c’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 runlevel editor et corriger les levels 3 ou 5. Ou faire ` la main comme en Debian, a mais dans le r´pertoire /etc/rc.d/rc3.d ou /etc/rc.d/rc5.d e

State TIME_WAIT LISTEN

ˆ 6.3. ARRETER LES SERVEURS INUTILES Contrˆle des daemons en Debian o

89

Les scripts sont en /etc/init.d le runlevel est 2 par d´faut. Le r´pertoire e e /etc/rc2.d contient par exemple : S10sysklogd@ S11klogd@ S18portmap@ S20alsa@ S20anacron@ S20gpm@ S20inetd@ S20isdnutils@ S20linuxconf@ S20lprng@ S20makedev@ S20mon@ S20ntop@ S20postgresql@ S20rsync@ S20samba@ S20ssh@ S20teapop@ S20xfs@ S21nfs-common@ S21sendmail@ S22ntpdate@ S23ntp-server@ S25nfs-server@ S89atd@ S89cron@ S91apache-ssl@ S99fetchmail@ S99rmnologin@ S99stop-bootlogd@ S99xdm@

S20sendmail@ est un lien symbolique : /etc/rc2.d/S20sendmail -> ../init.d/sendmail* vers le script de d´marrage. S20 signifie que son rang de d´marrage est 20. e e Pour l’empˆcher de d´marrer au niveau 2 on fait sous root : e e update-rc.d -f sendmail remove update-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 cr´er ces liens par : e update-rc.d sendmail defaults Adding 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 ´quivalent ` : e a update-rc.d sendmail start 20 2 3 4 5 . stop 20 0 1 6 .

Principaux daemons r´seau e sendmail Mail Transfer Agent : re¸oit, envoit, route du mail. Arrˆter le daemon c e sendmail n’empˆche pas d’envoyer du courrier. Il empˆche d’en recevoir e e sur sa machine.

90 apache Serveur http bind

´ ´ ´ CHAPITRE 6. SECURITE RESEAU SUR LINUX

Domain Name Server : peut ˆtre utilis´ comme cache ou comme DNS e e primaire ou secondaire, sinon inutile. snmpd Serveur snmp pour la gestion r´seau. Inutile en g´n´ral e e e rpc.nfsd G`re les demandes de r´pertoires des clients par nfs. Ne le d´marrez pas e e e si vous ne l’utilisez pas. rpc.mountd Idem G`re les demandes de clients de monter des r´pertoires export´s. e e e Voir fichier /etc/exports samba serveur pour machines Microsoft Windows . Si vous l’activez, param´trez e le dans /etc/smb.conf. Ajouter en particulier : hosts allow = 193.54.230. 127. o` 193.54.230. est mon r´seau local. u e sshd connexion s´curis´e ` d’autres machines (recommand´) e e a e xdm connexion X-Windows xfs serveur de fontes X routed routage Internet, ` supprimer. Faites du routage manuel par la commande a route. whod ou in.rwhod donne des informations sur les utilisateurs de votre machine. A proscrire.

6.3.2

Les services activ´s par inetd e

inetd, le super-daemon lance, ` la demande du r´seau, les daemons confia e gur´s dans le fichier /etc/inetd.conf. e Pour ´viter de laisser ouvert des services inutilis´s on proc´dera ainsi : e e e 1. se mettre sous root 2. ´diter le fichier /etc/inetd.conf. Chaque service est d´crit sur une ligne. e e 3. Mettre un # de commentaire en tˆte de chaque ligne correspondant ` un e a service inutilis´. Vous pouvez ainsi commenter toutes les lignes dont vous e ne connaissez pas la signification. Exemple :

ˆ 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 ` relire son fichier de configuration. a En Debian on peut mettre ` jour /etc/inetd.conf avec la commande a update-inetd qui envoie apr`s le signal SIGHUP ` inetd. e a – activation d’un daemon update-inetd --enable shell active le serveur rsh – d´sactivation d’un daemon e update-inetd --disable shell d´sactive le serveur rsh e – ajout d’une entr´e e update-inetd --group MAIL --add \ ’pop-3\t\tstream\ttcp\tnowait\troot\t/usr/sbin/tcpd\t/usr/sbin/in.pop3d’ ajoute une entr´e dans le groupe MAIL indiqu´ par # :MAIL : e e 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 lanc´s par inetd e echo service ”trivial” de inetd chargen service ”trivial” de inetd (character generator) daytime service ”trivial” de inetd (human readable time) time service ”trivial” de inetd (machine readable time, in the form of the number of seconds since midnight, January 1, 1900). Peux servir ` synchroniser a l’horloge sur d’autres machines par la commande rdate telnet connexion depuis une machine distante (` contrˆler ou interdire) a o ftp serveur de fichiers (` contrˆler ou interdire) a o shell permet d’ex´cuter des commandes ` distance via rsh (` contrˆler). e a a o login permet la connexion ` distance par rlogin (` contrˆler ou interdire) a a o exec permet d’ex´cuter des commandes ` distance via rexec (` contrˆler ou e a a o interdire)

92 talk

´ ´ ´ CHAPITRE 6. SECURITE RESEAU SUR LINUX

permet de communiquer en temps r´el (peut se prˆter ` des abus) e e a ntalk idem pop-x rel`ve de boˆ aux lettres depuis des machines distantes : ` interdire, c’est e ıte a dangereux. imapd idem finger r´pond ` la commande finger. Utile pour avoir des informations sur les utie a lisateurs de votre machine. Il permet aux pirates de savoir qui est connect´ e sur votre machine par finger @votre machine ident utile sur un serveur de messagerie, sinon ` interdire. a tftp transfert de fichier archa¨ ıque. Surtout ` interdire a bootps permet de booter une machine par le r´seau. A supprimer. e mountd permet ` une autre machine de monter par mount une partie de votre a disque dur (nfs) . Voir le daemon. rusersd r´pond ` la commande rusers pour connaˆ e a ıtre les utilisateurs en session sur votre machine rstatd ? saft serveur de fichiers sendfiled (Simple Asynchronous File Transfer)

6.4

Contrˆler l’acc`s aux serveurs : tcp-wrapper o e

Si on examine le fichier /etc/inetd.conf, par exemple : telnet ftp stream stream tcp tcp nowait nowait root root /usr/sbin/tcpd /usr/sbin/tcpd /usr/sbin/in.telnetd /usr/sbin/ftpd

En se rem´morant la syntaxe ` l’aide de man inetd.conf, on constate que e a le super-daemon inetd n’appelle pas directement le serveur telnet in.telnetd mais appelle /usr/sbin/tcpd qui appelera sous condition in.telnetd. tcpd est un tcp-wrapper. Il n’appelle le daemon sollicit´ par le r´seau que e e si le demandeur satisfait ` certaines conditions qui sont fix´es dans les fichiers a e /etc/hosts.allow et /etc/hosts.deny. Ces fichiers pr´cisent les conditions e de validit´ d’un couple (daemon : client) : e

ˆ ` 6.4. CONTROLER L’ACCES AUX SERVEURS : TCP-WRAPPER

93

– Si une condition du fichier /etc/hosts.allow est satisfaite, l’acc´s au e service est autoris´. e – Sinon, si une condition du fichier /etc/hosts.deny est satisfaite, l’acc´s e est refus´. e – Dans les autres cas l’acc`s est autoris´. e e – Si les deux fichiers sont absents, vides ou ne contiennent que des commentaires, l’acc`s ` tous les serveurs contrˆl´s par tcpd est autoris´. e a oe e Syntaxe : man 5 hosts access et man 5 hosts options . – daemon est le nom du daemon cit´ dans /etc/inetd.conf. C’est le dernier e ´l´ment du chemin absolu. Exemple : in.qpopper pour /usr/sbin/in.qpopper ee – client est une liste de noms de domaines ou d’adresses IP s´par´s par des e e blancs ou des virgules – .u-strasbg.fr d´signe toutes les machines dont le nom de domaine se tere mine par u-strasbg.fr. N’oubliez pas le point au d´but. e – 193.54.230. d´signe toutes les machines d’adresses IP commen¸ant par e c 193.54.230. N’oubliez pas le point final. La r`gle recommand´e est d’interdire tous les acc`s sauf aux machines sp´cifiquement e e e e d´sign´es. e e 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 ` tous les clients. a 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 : LOCAL ALL : 193.54.230. ALL : physpc4.u-strasbg.fr physpc5.u-strasbg.fr in.qpopper : .u-strasbg.fr in.qpopper : 130.79. – ALL : LOCAL autorise tous les services ` toute machine dont le nom de a domaine ne contient pas de ’.’ . Donc une machine du r´seau local e – ALL :193.54.230. autorise tous les services ` toute machine de ce r´seau. a e En l’occurrence le r´seau local. e

94

´ ´ ´ CHAPITRE 6. SECURITE RESEAU SUR LINUX – ALL : physpc4.u-strasbg.fr physpc5.u-strasbg.fr autorise tous les services ` ces deux machines. a – in.qpopper : .u-strasbg.fr autorise l’acc`s au serveur in.qpopper e aux machines de u-strasbg.fr (noter le point). – in.qpopper : 130.79. autorise l’acc`s au serveur in.qpopper aux mae chines du r´seau de classe B 130.79.0.0 (noter le point). e – imap2 : 130.79.186.0/255.255.255.0 autorise l’acc`s au serveur imap2 e aux machines du sous-r´seau r´seau 130.79.186.0. e e tcpdcheck : contrˆle des r´gles d’acc`s de /etc/hosts.allow et /etc/hosts.deny : o e e

tcpdchk -v sort une analyse de chaque r`gle. e Remarque : Certains serveurs peuvent fonctionner comme daemons ind´pendants, e c’est ` dire ne sont pas lanc´s par le super-daemon inetd mais sont compil´s a e e avec la librairie tcp-wrapper. On peut alors contrˆler leur acc`s dans les fichiers o e /etc/hosts.allow et /etc/hosts.deny. C’est le cas de sendmail en Debian. tcpdmatch pr´dit le comportement de tcp-wrapper pour un daemon appel´ e e par inetd (ou qui est link´ comme sendmail avec la librairie /usr/lib/libwrap.a. e Exemple : $ tcpdmatch in.qpopper 128.64.135.10 client: address 128.64.135.10 server: process in.qpopper matched: /etc/hosts.allow line 58 access: granted

6.5

Contrˆler l’acc`s ` xdm o e a

On peut contrˆler l’acc`s par XDMCP (xdm). o e Documentation : faire man xdm Fichier 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 fen^tre e * # toute machine peut avoir une fen^tre de login e

6.6
6.6.1

Les mots de passe
Qualit´ des mots de passe e

Un ”bon” mot de passe a au moins 6 caract`res, m´lange minuscules et mae e juscules, chiffres et caract`res sp´ciaux. Il ne doit pas ˆtre facilement d´ductible e e e e d’un dictionnaire. Un truc mn´motechnique est de prendre une phrase que l’on connaˆ bien et e ıt de prendre par exemple la premi`re lettre de chaque mot : e Exemple : ”Allons enfants de la Patrie” donnera AedlP comme c’est un peu court, on ajoute le jour de Gloire AedlPljdG et puis, comme le truc est un peu connu, on peut ajouter un caract`re, par exemple AedlP ;ljdG e

` ´ ´ 6.7. APPLIQUER LES MISES A JOUR DE SECURITE SUR LES LOGICIELS.95

6.6.2

Shadow passwords

Ils sont impl´ment´ dans les distributions Linux r´centes et il faut l’utiliser. e e e Le fichier /etc/password est lisible par tous. Avec les Shadow passwords, les mots de passe (crypt´s) ne sont plus dans le fichier /etc/password mais e dans /etc/shadow qui lui n’est lisible que par root.

6.7

Appliquer les mises ` jour de s´curit´ sur a e e les logiciels.

L’art du pirate est de parvenir a rentrer sur une machine sans connaˆ de ` ıtre userid ni de password. S’il connaˆ un trou de s´curir´ d’un logiciel r´seau il peut ıt e e e l’exploiter. Si c’est un d´bordement incontrˆl´ d’un buffer il peut arriver ` faire e oe a ex´cuter ` votre machine ses propres instructions et en prendre le contrˆle. Les e a o logiciels tournant sur Linux ´tant tr`s connus, le cas n’est pas rare. Il faut donc e e appliquer les corrections de s´curit´ en particulier sur les serveurs r´seaux. e e e Pour ˆtre tenu au courant, consultez le site www du fournisseur de votre e distribution 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 des ajouts de nouvelles fonctionnalit´s. e Les trous de s´curit´ sont signal´s sur la liste “Bugtraq” : e e e

echo "sub bugtraq"|mail -s"" LISTSERV@SECURITYFOCUS.COM Plus g´n´ralement consultez : http ://www.cert.org/ e e

6.8

D´tection d’incursions e

Diff´rentes commandes permettent de d´tecter des incursions ou tentatives e e d’incursions – last|more : liste les logins – ls -l /etc/passwd /etc/group : contrˆle de la date de derni`re modio e fication de fichiers sensibles. Si elle indique 3h du matin, on peut s’interroger. – Inspection du fichier log du tcpwrapper, permet de rep´rer des incursions e ou des tentatives. – less /var/log/secure : (RedHat) – less /var/log/daemon.log (Debian) – Examen du fichier de login par su

96

´ ´ ´ CHAPITRE 6. SECURITE RESEAU SUR LINUX

6.8.1

tripwire : contrˆle de l’int´grit´ des fichiers o e e

Lorsqu’un pirate arrive ` s’introduire sur un serveur, une des premi`res a e choses qu’il fera est laisser des programmes en local pour permettre son retour de mani`re aussi facile que possible. C’est pourquoi il est int´ressant de signer e e les fichiers importants, et de v´rifier ` intervalle r´gulier qu’ils n’ont pas boug´ e a e e (tous les soirs par exemple). Le programme tripwire peut alors vous int´resser. e Tripwire est un outil qui a un seul but : d´tecter tout changement dans e l’int´grit´ d’un fichier. Ca signifie qu’il peut de mani`re non-discutable dire si e e e un fichier prot´g´ a ´t´ alt´r´ par un moyen qui viole les r`gles d´termin´es e e ee ee e e e par l’administrateur r´seau. Tripwire peut aussi d´terminer si un fichier a ´t´ e e ee ajout´ ou effac´ d’un r´pertoire prot´g´. Tripwire a des r`gles tr`s flexibles et e e e e e e e tr`s puissantes pour d´finir exactement ` quoi il devrait faire attention. e e a Pour plus d’informations sur Tripwire, allez voir http ://www.tripwiresecurity.com/ Tripwire est un package Debian.

6.9

Pr´cautions ´l´mentaires e ee

– Pas de ’.’ dans le $PATH de root. Faire ./prog pour ex´cuter un fichier e du r´pertoire courant. e – Ne jamais faire tar x sous root d’une archive import´e de l’ext´rieur. Un e e farceur peut ainsi vous faire ´craser votre fichier /etc/passwd e – A l’installation d’un logiciel faites make -n install avant make install sous root. – Interdisez l’acc`s a certains fichiers comme /etc/passwd par ftp. Un sere ` veur comme wu-ftpd-academ permet dans son fichier de configuration /etc/wu-ftpd-academ/ftpaccess noretrieve /etc/passwd /etc/group

6.10
6.10.1

Principales attaques r´seau et parades e
SYN flooding

Description Attaque qui empˆche des utilisateurs l´gitimes de se connecter. Exemple e e 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 port particulier (ici le serveur Web). En g´n´ral un ”Syn Flood” est symptomatique d’une attaque par ”d´ni de e e e service”. Le principe est simple et bas´ sur les caract´ristiques de TCP. Si une e e machine A veut ´tablir une connexion TCP avec une machine B : e 1. un SYN est envoy´ de A vers B pour initialiser la connexion e 2. un SYN/ACK est retourn´ par B vers A si le service est actif e 3. un ACK est envoy´ par A vers B pour confirmer ` B la demande de e a connexion

´ 6.10. PRINCIPALES ATTAQUES RESEAU ET PARADES

97

A ce niveau la connexion est consid´r´e comme ´tablie. Point important : la ee e machine B, depuis l’´tape 2, a allou´ de la m´moire pour g´rer la connexion en e e e e cours jusqu’` l’arriv´e d’un ”time out” ´ventuel si l’´tape 3 ne se r´alise pas. a e e e e Le principe d’une action ”SYN Flood” consiste alors ` envoyer une rafale de a SYN, d’allouer ainsi un maximum de m´moire au niveau du serveur, et de ne e jamais r´pondre au SYN/ACK par le ACK normalement attendu. Le serveur e a alors des difficult´s pour r´pondre aux requˆtes ”l´gitimes” d’o` le ”d´ni de e e e e u e service”. Quelques SYN/ACK sans r´ponse peuvent ˆtre apparent´s (si on a l’esprit e e e large) ` des pertes de paquets qui concerneraient potentiellement la r´ponse a e ACK de celui qui a initialis´ la connexion. Si la fr´quence est ´lev´e, il y a sans e e e e doute un probl`me de s´curit´ ` la cl´ ... e e ea e Tout serveur Web a ce genre de messages r´guli`rement, sans que cela soit e e forc´ment une attaque. e D´tection : e dmesg | grep ’possible SYN flood’ | awk ’{print $6}’ | sort | uniq Parade Syn Cookies est une option ` la compil du noyau qui permet de se prot´ger. a e CONFIG SYN COOKIES : Normal TCP/IP networking is open to an attack known as ”SYN flooding”. This denial-of-service attack prevents legitimate remote users from being able to connect to your computer during an ongoing attack and requires very little work from the attacker, who can operate from anywhere on the Internet. SYN cookies provide protection against this type of attack. If you say Y here, the TCP/IP stack will use a cryptographic challenge protocol known as ”SYN cookies” to enable legitimate users to continue to connect, even when your machine is under attack. There is no need for the legitimate users to change their TCP/IP software ; SYN cookies work transparently to them. For technical information about SYN cookies, check out ftp ://koobera.math.uic.edu/syncookies.html . If you are SYN flooded, the source address reported by the kernel is likely to have been forged by the attacker ; it is only reported as an aid in tracing the packets to their actual source and should not be taken as absolute truth. SYN cookies may prevent correct error reporting on clients when the server is really overloaded. If this happens frequently better turn them off. If you say Y here, note that SYN cookies aren’t enabled by default ; you can enable them by saying Y to ”/proc filesystem support” and ”Sysctl support” below and executing the command echo 1 >/proc/sys/net/ipv4/tcp_syncookies 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’´mettre les trames avec une adresse e source modifi´e. Le propri´taire de cette adresse (et toutes les routes qui y e e m`nent) se trouvent satur´s de r´ponse ` des pings non sollicit´s. Voir : ftp ://ftp.cert.org/pub/cert advisorie e e e a e

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 configur´ pour bloquer e automatiquement l’acc´s aux services par rapport ` l’adresse IP source e a dans le cadre d’un ”stealth scan” ou scan UDP. Parade Rajouter l’adresse IP source dans /etc/hosts.deny ` partir de tcp wrappers a pour courir moins de risques.

6.10.4

IP spoofing

Ce sont des paquets IP qui arrivent de l’ext´rieur avec une adresse source e trafiqu´e (forged), paraissant ˆtre une adresse du r´seau local. e e e Parade Pr´vue dans /etc/init.d/netbase activ´ au boot en Debian. e e If you turn on IP forwarding, you will also get the rp filter, which automatically rejects incoming packets if the routing table entry for their source address doesn’t match the network interface they’re arriving on. This has security advantages because it prevents the so-called IP spoofing, however it can pose problems if you use asymmetric routing (packets from you to a host take a different path than packets from that host to you) or if you operate a non-routing host which has several IP addresses on different interfaces. To turn rp filter off use : echo 0 > /proc/sys/net/ipv4/conf/<device>/rp_filter or 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 along your 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 consider taking a job at some transatlantic route provider).

6.10.6

Blind spoofing

Using the spoofing to interfer with a connection (or creating one), that does not send packets along your cable.

6.10.7

Scan de ports

Voici les conseils de Guy Brand <bug@chimie.u-strasbg.fr> : Une des premi`res e choses qu’un pirate fera pour attaquer un serveur est de ”scanner” tous les ports de ce dit serveur pour voir quels services tournent. Il faut donc trouver une solution pour contrer ce genre d’attaque d`s qu’elles arrivent. e Parade – Portsentry Logge les acc`s aux ports IP. Quand il d´tecte certaines ace e tions peut ex´cuter automatiquement des parades : e – Renseigne /etc/hosts.deny

´ 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 machine (donc heure, date et IP), ce qui est en general assez dissuasif. – Courtney Courtney vous permet d’´couter tout un r´seau local pour les e e attaques type Satan (scan de ports). Il ´coute le r´seau local et identifie les e e machines sources d’attaques Satan. Courtney est un script Perl. Il re¸oit c des informations de tcpdump et compte le nombre de nouveaux services que contacte une machine en un temps d´fini. Si une machine se connecte e ` un nombre important de services dans cette p´riode de temps, courtney a e identifie cette machine comme un pirate potentiel par attaque SATAN. Les options de courtney vous permettent de param´trer un mail sur lequel e vous recenserez toutes les attaques sur votre serveur (ou votre r´seau loe cal). On peut modifier courtney pour qu’il firewallise les machines pirates par le biais de ipfwadm. Cette modification est tr`s simple, il suffit de e rajouter ` la ligne 1231 : a system("/sbin/ipfwadm -I -a deny -S $host -o"); L’option -o de ipfwadm vous permet de continuer de logguer les connexions sur le serveur mais de ne pas y r´pondre. Tr`s utile pour voir si la machine e e pirate continue d’attaquer pendant longtemps. – Sentry Sentry est un moyen plus radical et plus efficace que courtney pour parer les attaques de type SATAN. Sentry fait partie du projet Abacus. Le projet Abacus est une initiative pour mettre ` disposition ` la communaut´ a a e Internet des logiciels de d´tection d’intrusion qui soient g´n´riques, stables, e e e et qui demandent peu en maintenance. Sentry a un nombre d’options pour d´tecter les scans de port, et quand il en d´tecte il r´agit de plusieurs e e e fa¸ons : c – Un log pour indiquer l’incident par syslog() – La machine est automatiquement ajout´e dans /etc/hosts.deny pour e TCP Wrappers. – Le serveur local est automatiquement reconfigur´ pour ignorer tous les e paquets de la machine pirate par le biais de ipfwadm. Pour plus d’informations ` propos de sentry allez voir : http ://www.psionic.com a

6.10.8

Ecoute du r´seau e

Une machine du r´seau local peut ´couter le r´seau ou ”sniffer” et ainsi e e e r´cup´rer des mots de passe et commettre d’autres indiscr´tions. e e e Parade Rep´rer les interfaces r´seaux en mode promiscuous par un antisniffer e e – neped antisniffer http ://apostols.org/projectz/neped d´tecte les ine terfaces en mode promiscious. Voir aussi : http ://www.l0pht.com/antisniff – sentinel semble un peu mieux fourni que neped (plus de m´thodes de e d´tection). e http ://www.packetfactory.net/Projects/sentinel/ Sentinel [3] tourne sous Linux mais necessite Libnet [3]. [3] http ://www.packetfactory.net/Projects/

100

´ ´ ´ CHAPITRE 6. SECURITE RESEAU SUR LINUX

6.11

Cryptage des communications

L’utilisation de ssh est vivement recommand´e. ssh crypte les paquets transe mis sur le r´seau et ´vite en particulier que des indiscrets d´couvre des mots de e e e passe en ´coutant le r´seau. e e

6.12

En savoir plus

zmore /usr/doc/HOWTO/Security-HOWTO.gz

Chapitre 7

Filtrage, routage et masquage des paquets IP
Un PC Linux muni de plusieurs interfaces r´seaux peut faire routeur. La e commande ipchains permet de dire au noyau Linux comment filtrer les paquets IP. Linux peut donc jouer le rˆle de firewall, c’est ` dire de protection d’un r´seau o a e vis ` vis de l’Internet. Elle permet aussi de masquer les adresses IP, c’est ` dire a a de cacher un r´seau Intranet vis ` vis d’Internet, tout en permettant ` l’Intranet e a a de communiquer, sous contrˆle, avec Internet. Des serveurs proxy permettent o aussi de faire des requˆtes sur Internet au nom des machines du r´seau interne. e e

7.1

Qu’est-ce qu’un firewall ?

Un firewall est une interface qui prot`ge un r´seau priv´ du reste d’Internet. e e e Il est con¸u pour contrˆler le flux de paquets en se basant sur l’adresse IP source c o et destination, le port et le type contenu dans chaque paquet. Plusieurs techniques de firewall sont disponibles : – le routage (forward ) : re¸oit un paquet IP sur un interface r´seau et la c e renvoie sur un autre – le filtrage : ne route un paquet IP que s’il satisfait ` des r`gles portant a e sur les adresses sources et destination, les ports, le protocole, le type de paquet et les interfaces r´seau en jeu. e – le masquage : le firewall fait suivre le paquet vers Internet mais en changeant les adresses et ports, faisant croire (d’o` le nom masquage, masu querade en anglais) que le paquet vient de lui. Au retour de la r´ponse il e remodifie l’en tˆte du paquet et l’envoie ` la machine demandeuse. Ainsi, e a les machines du r´seau interne sont compl`tement invisibles de l’ext´rieur e e e mais peuvent n´ammoins faire des requˆtes sur Internet. e e – serveur proxy : c’est un serveur qui fait la requˆte ` la place de votre e a machine et lui renvoie le r´sultat. C’est une solution pour donner l’acc`s e e Internet ` des machines d’un r´seau priv´. Utilis´ couramment pour le a e e e web, il demande de param´trer le serveur proxy sur le client WWW e – transparent proxy : la machine du r´seau priv´ d´finit la machine transe e e parent proxy comme routeur par d´faut. Elle fait sa requˆte, par exemple e e http, normalement vers Internet. Les paquets IP arrivent sur le routeur. 101

102CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP

Il –

Le dispositif transparent proxy redirige par exemple, les paquets pour le port de destination 80 vers le port local 8080 o` ils sont trait´s par le u e serveur proxy squid. Donc c’est le m´canisme proxy mais il n’y a pas ` e a d´finir de serveur proxy sur les machines clientes. e le forward de port : normalement, les machines d’un r´seau priv´ ne sont e e pas accessibles depuis l’Internet. Tous les serveurs doivent ˆtre install´s e e sur le firewall, (ou des machines sur Internet). Cependant, il est possible d’acc´der depuis Internet un serveur du r´seau priv´ par le forward de e e e port. Il revient ` dire que les requˆtes venant de l’Internet pour le port 80 a e du firewall sont redirig´es sur le port 80 d’une machine du r´seau priv´. e e e existe diff´rents outils de firewalls pour Linux : e Fonctions de filtrage et de masquage int´gr´ dans le noyau : ipfwadm en e e noyau < 2.2 et ipchains pour les noyaux 2.2, iptables et Netfilter pour le futur noyau Linux 2.4. IPfilter (origine BSD) sur noyau Linux 2.0 http ://coombs.anu.edu.au/~avalon/ip-filter.ht

7.2

Masquage : permettre ` un r´seau priv´ d’acc´der a e e e ` Internet a
+----------+ | | 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 +----------+ | | | <- R´seau interne --> | e | | | | <--- R´seau externe ---> e |

Dans ce sch´ma, la machine Linux Routeur est connect´e ` Internet par PPP e e a ou par Ethernet. Elle est la seule machine visible depuis Internet. Les autres machines A-box, B-box, etc, ont des adresses IP priv´es en 192.168.1.x (cf RFC e 1597). Elles sont sur un r´seau priv´ invisible depuis Internet. La machine Linux e e Routeur est connect´e ` ce r´seau priv´ par un interface Ethernet eth1. e a e e Si la machine Linux Routeur est configur´e en routeur IP avec masquage e d’adresses, alors :

` ´ ´ ´ ` 7.2. MASQUAGE : PERMETTRE A UN RESEAU PRIVE D’ACCEDER A INTERNET103 – si les machines A-box, B-box, ... ont d´fini la machine Linux Routeur e comme gateway, – Linux Routeur transmet les paquets IP du r´seau interne vers le r´seau e e externe en changeant le port-source et mettant son adresse IP ` la place de a l’adresse IP source. Il m´morise les param`tres originaux de la connexion e e TCP : (IP-source, port-source, IP-dest, port-dest). C’est le masquage. – pour les machines de l’Internet les paquets paraissent provenir de Linux Routeur – quand Linux Routeur re¸oit un paquet TCP de l’ext´rieur, il examine c e si le port-dest est un de ceux qui ont ´t´ attribu´s pr´c´demment par le ee e e e masquage. Si c’est le cas il retrouve l’adresse IP et le port d’origine, corrige le paquet IP et le renvoie ` la machine ` qui il est destin´. a a e – Des protocoles particuliers comme ftp qui ouvre une nouvelle connexion TCP nomm´e ftp-data n´cessitent le chargement d’un module du noyau. e e – Une machine du r´seau interne ne peut ˆtre appel´e depuis Internet, sauf e e e si on configure sur la machine Linux Routeur le ”forward de port”.

7.2.1

Configuration du noyau ( > 2.2.0 )

Voici les options ` prendre lors de make config a – Prompt for development and/or incomplete code/drivers (CONFIG EXPERIMENTAL) : YES. Pas requis pour IP MASQ, mais permet au noyau de cr´er les moe dules MASQ et d’activer l’option pour le forward de port. – Enable loadable module support (CONFIG MODULES) : YES. Pour charger les modules IP MASQ – Networking support (CONFIG NET) : YES – Packet socket (CONFIG PACKET) : YES. C’est optionnel, mais permet de d´boguer tout probl`me avec tcpdump e e – Kernel/User netlink socket (CONFIG NETLINK) : YES. Optionnel mais permet le log des acc`s au firewall. e – 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 ind´pendant de ipchains/masq. Ne sert que pour CONFIG IP ROUTE VERBOSE. e – IP : verbose route monitoring (CONFIG IP ROUTE VERBOSE) : YES Utile si on veut utiliser le code de routage pour rejetter et logger les spoofed packets (paquets IP trafiqu´s venant de l’Internet avec comme e adresse source, une adresse du r´seau interne) e – IP : firewalling (CONFIG IP FIREWALL) : YES – IP : firewall packet netlink device (CONFIG IP FIREWALL NETLINK) : YES. Optionnel mais am´liore le log des acc`s au firewall. e e – IP : transparent proxy support (CONFIG IP TRANSPARENT PROXY) : YES. Permet de rediriger un paquet IP vers un autre port du firewall ce qui fait croire aux machines du r´seau priv´ qu’elles interrogent directee e ment un serveur Internet alors qu’elles passent par un ”transparent proxy server” install´ sur le firewall. La redirection s’indique par ipchains -j e REDIR. – IP : masquerading (CONFIG IP MASQUERADE) : YES. Active le mas-

104CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP

quage d’adresses IP. Cette option active automatiquement ip always defrag. Ceci ´vite d’avoir ` filtrer des fragments de paquets IP, ce qui peut ˆtre e a e probl´matique, car les fragments suivant le premier n’ont plus d’adresse e IP. – 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’acc´der depuis Internet des sere veurs du r´seau interne par SMTP, TELNET et WWW. FTP n´cessite e e un autre patch. – IP : ip fwmark masq-forwarding support (EXPERIMENTAL) (CONFIG IP MASQUERADE MF NO. Il est recommand´ d’utiliser plutˆt IPMASQADM et IPPORTFW. e o – IP : optimize as router not host (CONFIG IP ROUTER) : YES – IP : GRE tunnels over IP (CONFIG NET IPGRE) : NO. Sert ` activer a un tunnel PPTP ou GRE via une machine IP MASQ – IP : TCP syncookie support (not enabled per default) (CONFIG SYN COOKIES) : YES. Recommand´ pour la s´curit´ r´seau. e e e e – Network device support (CONFIG NETDEVICES) : YES. Obligatoire : Support d’interface r´seau. e – Dummy net driver support (CONFIG DUMMY) : YES. Utile pour debug. – /proc filesystem support (CONFIG PROC FS) : YES. N´cessaire pour e activer le routage (IP forward) Compilation du noyau et mise en place Si le r´pertoire /lib/modules/2.2.17 existe d´j`, on le sauvegardera. e ea make dep;make clean make zImage; make modules make modules_install cp arch/i386/boot/zImage /boot/vmlinuz-2.2.17 rm /vmlinuz ln -s /boot/vmlinuz-2.2.17 /vmlinuz vi /etc/lilo.conf /sbin/lilo reboot

7.2.2

Configuration du masquage

La machine Linux Routeur a 2 interfaces r´seaux. Le noyau sait reconnaˆ e ıtre une deuxi`me carte, mais si ce sont des cartes ISA, il faut veiller ` ce qu’elles e a n’aient pas mˆmes IRQ et adresses IO. e [morel@phoebus morel]$ ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:62531 errors:0 dropped:0 overruns:0 frame:0 TX packets:62531 errors:0 dropped:0 overruns:0 carrier:0

` ´ ´ ´ ` 7.2. MASQUAGE : PERMETTRE A UN RESEAU PRIVE D’ACCEDER A INTERNET105 Collisions:0 eth0 Link encap:Ethernet HWaddr 00:20:AF:AA:AE:93 inet addr:193.54.230.3 Bcast:193.54.230.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:108164 errors:770 dropped:0 overruns:795 frame:770 TX packets:61826 errors:0 dropped:0 overruns:0 carrier:0 Collisions:91 Interrupt:10 Base address:0x300

eth1

Link encap:Ethernet HWaddr 00:60:08:70:7A:4A inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:42523 errors:0 dropped:0 overruns:0 frame:0 TX packets:665 errors:0 dropped:0 overruns:0 carrier:0 Collisions:2 Interrupt:5 Base address:0x340 [morel@phoebus morel]$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface localnet * 255.255.255.0 U 0 0 0 eth0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth1 default 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 configur´. e Le masquage s’´crit avec au moins 3 commandes : e /sbin/ipchains -P forward DENY /sbin/ipchains -A forward -s 192.168.1.0/24 -j MASQ echo "1" > /proc/sys/net/ipv4/ip_forward – Ligne 1 : forward interdit sauf pour ce qui est sp´cifi´ ` la suite e ea – Ligne 2 : pour les paquets dont l’adresse source provient du r´seau interne, e forward avec masquage – Ligne 3 : activation du IP forward, le routage IP. Il serait dangereux de faire du masquage le d´faut en ´crivant : e e /sbin/ipchains -P forward MASQ echo "1" > /proc/sys/net/ipv4/ip_forward Ces commandes peuvent ˆtre automatis´es par un shell script activ´ au boot. e e e On lui fera ´galement charger les modules n´cessaires. e e #!/bin/sh # # rc.firewall - SIMPLE IP Masquerade test for 2.2.x kernels using IPCHAINS # # Load all required IP MASQ modules /sbin/depmod -a

106CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP /sbin/modprobe ip_masq_ftp #CRITICAL: Enable IP forwarding echo "1" > /proc/sys/net/ipv4/ip_forward # MASQ timeouts # # 2 hrs timeout for TCP session timeouts # 10 sec timeout for traffic after the TCP/IP "FIN" packet is received # 160 sec timeout for UDP traffic (Important for MASQ’ed ICQ users) # /sbin/ipchains -M -S 7200 10 160 /sbin/ipchains -P forward DENY /sbin/ipchains -A forward -s 192.168.1.0/24 -j MASQ

7.2.3

Configuration d’une machine du r´seau interne e

Toute machine du r´seau interne doit d´finir Linux Routeur comme gateway. e e Configuration d’une Linux Debian du r´seau interne : e [morel@auger morel]$ cat /etc/init.d/network #! /bin/sh ifconfig lo 127.0.0.1 route add -net 127.0.0.0 IPADDR=192.168.1.2 NETMASK=255.255.255.0 NETWORK=192.168.1.0 BROADCAST=192.168.1.255 GATEWAY=192.168.1.1 ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST} route add -net ${NETWORK} [ "${GATEWAY}" ] && route add default gw ${GATEWAY} metric 1 Le r´seau ´tant lanc´, on a : e e e auger:/etc/init.d# ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:18 errors:0 dropped:0 overruns:0 frame:0 TX packets:18 errors:0 dropped:0 overruns:0 carrier:0 Collisions:0 eth0 Link encap:Ethernet HWaddr 00:00:1C:B5:C6:96 inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:500 errors:0 dropped:0 overruns:0 frame:0 TX packets:41 errors:0 dropped:0 overruns:0 carrier:0 Collisions:1 Interrupt:10 Base address:0xe400 Kernel IP routing table

7.3. LA COMMANDE IPCHAINS Destination 192.168.1.0 default Gateway * 192.168.1.1 Genmask 255.255.255.0 0.0.0.0

107 Flags Metric Ref U 0 0 UG 1 0 Use Iface 0 eth0 0 eth0

La machine Linux Routeur est donc gateway.

7.2.4

Tests

Sur cette machine du r´seau interne e – ping 192.168.1.1 – ping isis.u-strasbg.fr : une machine d’Internet – ssh zoroastre.c-strasbourg.fr – ftp zoroastre.c-strasbourg.fr Durant la session lanc´e par ssh zoroastre, la commande sur zoroastre e netstat -tn montre : [morel@zoroastre morel]$ netstat -tn Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address tcp 0 0 193.54.230.20:22

Foreign Address 193.54.230.3:61003

State ESTABLISHED

que c’est la machine d’adresse 193.54.230.3 donc le Linux Routeur qui a appel´ zoroastre d’adresse 193.54.230.20 sur le port 22. e La machine du r´seau interne qui a fait ssh zoroastre, netstat montre e qu’elle a bien appel´ 193.54.230.20 sur le port 22. e [morel@auger morel]$ netstat -tn Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address tcp 0 0 192.168.1.2:1023

Foreign Address 193.54.230.20:22

State ESTABLISHED

7.3

La commande ipchains

La commande ipchains permet d’indiquer au noyau Linux les r`gles de e filtrage en entr´e, en sortie ou lors du routage. Elle permet aussi le masquage. e Elle est r´serv´e ` root. e e a Syntaxe : ipchains -h

7.3.1

Chaˆ ınes pr´d´finies e e

Au d´part, 3 listes de r`gles sont pr´d´finies : input, output, forward. Elles e e e e sont appel´es chaˆ e ınes firewall ou chaˆ ınes tout court. Quand un paquet arrive par l’interface r´seau dans la machine, le noyau e utilise la chaˆ input pour d´cider ce qu’il fait de ce paquet. Si ce paquet ıne e survit ` cette ´tape, alors le noyau d´cide o` il va l’envoyer, c’est le routage. a e e u S’il est destin´ ` une autre machine il consulte la chaˆ forward. Enfin, juste ea ıne quand le paquet va sortir, le noyau consulte la chaˆ ıneoutput. Une chaˆ est une liste de r`gles. Chaque r`gle dit ”si le paquet a tel header, ıne e e voici ce qu’il faut en faire”. Si le header du paquet ne correspond pas ` la r`gle, a e le noyau examine la r`gle suivante de la mˆme chaˆ Finalement s’il n’y a plus e e ıne.

108CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP de r`gle, le noyau consulte la ”policy” de la chaˆ e ıne, c’est ` dire la d´cision par a e d´faut. Si on veille ` la s´curit´ cette d´cision par d´faut est DENY ou REJECT. e a e e e e En Linux Debian ipchains fait partie du package netbase. La version 1.3.4 n’est pas la plus r´cente mais elle est stable. e L’utilisateur peut aussi d´finir ses propres chaˆ e ınes.

7.3.2

Manipulation des chaˆ ınes

– -F : (F comme flush) supprime toutes les r`gles d’une chaˆ e ıne, (mais pas la policy). – -A : ajoute une r`gle ` une chaˆ e a ıne – -P : fixe la policy (c’est ` dire l’action par d´faut) d’une chaˆ ` target a e ıne a – -L : liste les r`gles d’une chaˆ si sp´cifi´e, de toutes sinon. e ıne e e – -D : effacement d’une r`gle dans une chaˆ e ıne – -N : cr´ation d’une chaˆ e ıne – -X : suppression d’une chaˆ ıne Exemples : – ipchains -F input : supprime toutes les r`gles de la chaˆ input e ıne – ipchains -F : supprime toutes les r`gles de toutes les chaˆ e ınes – ipchains -A forward -s 192.168.1.0/24 -j MASQ : ajoute une r`gle e a ` la chaˆ forward ıne – ipchains -P forward DENY fixe la policy de la chaˆ forward ` DENY ıne a – ipchains -L : liste les r`gles de toutes les chaˆ e ınes (mais n’indique pas l’interface). phoebus:/home/morel# ipchains -L Chain input (policy DENY): target prot opt source destination ports ACCEPT all ------ anywhere anywhere n/a ACCEPT all ------ 192.168.1.0/24 anywhere n/a ACCEPT all ------ anywhere phoebus.c-strasbourg.fr n/a DENY all ----l- 192.168.1.0/24 anywhere n/a Chain forward (policy DENY): MASQ all ------ 192.168.1.0/24 Chain output (policy DENY): ACCEPT all ------ anywhere ACCEPT all ------ anywhere ACCEPT all ------ localnet/24 DENY all ----l- anywhere

anywhere

n/a

anywhere 192.168.1.0/24 anywhere 192.168.1.0/24

n/a n/a n/a n/a

7.3.3

Sp´cification d’une r`gle e e
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 ` 193.54.230.255 a 4. 193.54.230.0/24 : mˆme tranche d’adresses. 0/0 d´signe toute adresse e e IP.

– -s : Adresse IP source, s’´crit de 4 mani`res : e e

7.4. EXEMPLES DE FILTRAGE

109

Dans le cas de TCP ou UDP, un num´ro ou un nom de port peut suivre. e Dans le cas de ICMP, on peut indiquer le type ICMP. Liste par ipchains -h icmp – -d : Adresse IP destination, mˆme r`gles d’´criture e e e – -i : interface. Dans la chaˆ input c’est celui par o` arrive le paquet, ıne u dans output par o` il sort, dans forward vers o` il est dirig´. Si l’interface u u e n’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 : d´truit le paquet e – REJECT : d´truit le paquet et en plus g´n`re un message de r´ponse e e e e ICMP host unreachable – MASQ : masquage du paquet (valable uniquement dans la chaˆ forıne e e ward) CONFIG IP MASQUERADE doit ˆtre d´fini dans le noyau. – REDIR : redirige vers un port local, on peut l’indiquer ` la suite. Valable a pour la chaˆ input et les chaˆ ıne ınes utilisateur. (uniquement pour TCP et UDP) CONFIG IP TRANSPARENT PROXY doit ˆtre configur´ dans e e le noyau – RETURN : revient ` la chaˆ appelante, sinon ex´cute l’action d´finie a ıne e e par -P chaˆ ıne. – autre nom : chaˆ d´finie par l’utilisateur ıne e – -l : log Certains param`tres peuvent ˆtre ni´s par le caract`re !, ainsi : e e e e – -i ! eth0 : tout interface sauf eth0 – -p ! tcp : tout protocole sauf tcp – -p tcp ! -y : tout paquet tcp sauf ceux marqu´s du flag SYN. e – -s ! 192.168.1.1 : toute adresse IP source sauf 192.168.1.1

7.4
7.4.1

Exemples de filtrage
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 entr´e tout paquet ICMP ayant comme adresse source 127.0.0.1 e – ping localhost ne marche plus – on efface la r`gle pr´c´dente e e e – ping localhost remarche phoebus:/home/morel# ping -c 1 localhost PING localhost (127.0.0.1): 56 data bytes 64 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 loss round-trip min/avg/max = 0.8/0.8/0.8 ms phoebus:/home/morel# ipchains -A input -s localhost -p icmp -j DENY

110CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP phoebus:/home/morel# ping -c 1 localhost PING localhost (127.0.0.1): 56 data bytes --- localhost ping statistics --1 packets transmitted, 0 packets received, 100% packet loss phoebus:/home/morel# ipchains -D input -s localhost -p icmp -j DENY phoebus:/home/morel# ping -c 1 localhost PING localhost (127.0.0.1): 56 data bytes 64 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 loss round-trip min/avg/max = 0.6/0.6/0.6 ms

7.4.2

Masquage standard

Le package Debian ipmasq g´n`re au boot les chaˆ e e ınes de filtrages et de masquage. Lancement par /etc/init.d/ipmasq Par ipmasq -d, il g´n`re les commandes ipchains sans les ex´cuter. Voici e e e pour notre machine Linux Routeur ` deux interfaces Ethernet : a /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains /sbin/ipchains -P -P -P -F -F -F -A -A -A -A -A -A -A -A -A input DENY output DENY forward DENY input output forward input -j ACCEPT -i lo input -j ACCEPT -i eth1 -s 192.168.1.1/255.255.255.0 input -j ACCEPT -i eth0 -d 193.54.230.3/32 input -j DENY -i eth0 -s 192.168.1.1/255.255.255.0 -l forward -j MASQ -i eth0 -s 192.168.1.1/255.255.255.0 output -j ACCEPT -i lo output -j ACCEPT -i eth1 -d 192.168.1.1/255.255.255.0 output -j ACCEPT -i eth0 -s 193.54.230.3/255.255.255.0 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 ` DENY : aucun a paquet IP ne rentre, ne sort, n’est rout´. e – On supprime toutes les r`gles des chaˆ e ınes input, output et forward. – On ajoute ` la chaˆ input la r`gle -j ACCEPT -i lo : on accepte tout a ıne e paquet qui rentre sur l’interface lo – On ajoute ` la chaˆ input la r`gle -j ACCEPT -i eth1 -s 192.168.1.1/255.255.255.0 a ıne e : on accepte tout paquet qui rentre sur l’interface eth1 et ayant pour adresse source les adresses 192.168.1.1 ` 192.168.1.255, c’est ` dire le r´seau a a e interne. – On ajoute ` la chaˆ input la r`gle -j ACCEPT -i eth0 -d 193.54.230.3/32 : a ıne e on accepte tout paquet qui rentre sur l’interface eth0 et ayant comme

7.4. EXEMPLES DE FILTRAGE

111

adresse destination 193.54.230.3 c’est ` dire l’adresse Internet de Linux a Routeur. – On ajoute ` la chaˆ input la r`gle -j DENY -i eth0 -s 192.168.1.1/255.255.255.0 a ıne e -l : on rejette tout paquet qui rentre sur l’interface eth0 et ayant comme adresse source une adresse du r´seau interne et on ´crit les acc`s dans e e e le log (spoofing). Tous les autres paquets sont rejet´s conform´ment ` la e e a policy de input, mais sans ˆtre logg´s. Si on veut les logger il faut ajouter e e une derni`re r`gle : e e ipchains -A input -l -j DENY – On ajoute ` la chaˆ forward la r`gle -j MASQ -i eth0 -s 192.168.1.1/255.255.255.0 : a ıne e on masque tout paquet qui va sur l’interface eth0 et ayant comme adresse source une adresse du r´seau interne. e On ajoute dans la chaˆ output les r`gles suivantes : ıne e – 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 r´seau e interne. – -j ACCEPT -i eth0 -s 193.54.230.3/255.255.255.0 : on accepte tout ce qui sort par l’interface eth0 ayant comme adresse source celle du Linux Routeur. – -j DENY -i eth0 -d 192.168.1.1/255.255.255.0 -l : on rejette tout ce qui sort par l’interface eth0 ayant comme adresse de destination une adresse du r´seau interne et on logge les infractions. e

7.4.3

Antispoofing

Debian ex´cute au boot dans le fichier /etc/init.d/netbase deux r`gles e e antispoofing : if [ -e /proc/net/ip_fwchains ]; then echo -n "Setting up IP spoofing protection..." ipchains -D input -j DENY -l -s 127.0.0.0/8 -i ! lo 2>/dev/null || true ipchains -A input -j DENY -l -s 127.0.0.0/8 -i ! lo # 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 || true ipchains -A input -j DENY -l -s $my_ip -i ! lo echo "done." fi La premi`re r`gle ajout´e ` la chaˆ input rejette en entr´e sur tout interface e e e a ıne e autre que loopback tout paquet avec comme adresse source 127.0.0.0 et logge ces tentatives d’acc`s. e La deuxi`me ajout´e ` la chaˆ input rejette en entr´e sur tout interface e e a ıne e autre que loopback tout paquet avec comme adresse source l’adresse de la machine.

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 n´cessite l’option du noyau IPPORTFW et ... e real audio player avec module ip masq raudio.o quake avec module ip masq quake.o H.323 programs (MS Netmeeting, Netscape Cooltalk) : non support´s e

7.5.1

Autoriser l’acc`s TCP dans un sens e

On peut vouloir autoriser les connexions TCP dans un sens et pas dans l’autre. Par exemple on veut pouvoir acc´der ` un serveur WWW, mais on e a refuse que celui-ci initialise des connexions depuis ce serveur. Si on interdit les paquets TCP venant de ce serveur, on ne pourra plus l’acc´der car une connexion TCP est une circulation TCP dans les deux sens. e La solution est de bloquer uniquement les paquets qui demandent une connexion. Ces paquets appel´s SYN packets ont le flag SYN positionn´ et les flags ACK e e et FIN non positionn´s. On peut les s´lectionner par l’option -y. Ainsi pour e e d´signer les SYN packets venant de 192.168.1.1 on ´crit : -p TCP -s 192.168.1.1 e e -y Exemple : on veut pouvoir acc´der au serveur smtp 130.79.200.3 mais on e refuse 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
7.7.1

Serveurs proxy
http

– junkbuster is an instrumentable proxy that filters the HTTP stream between 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

´ ´ ` 7.8. RACCORDEMENT D’UN RESEAU PRIVE A INTERNET PAR PPP113

7.8

Raccordement d’un r´seau priv´ ` Internet e e a par PPP

IP MASQUERADING permet l’acc`s ` Internet ` tout un r´seau priv´ en e a a e e souscrivant un seul abonnement aupr`s d’un fournisseur d’acc`s. Si c’est un e e acc`s t´l´phonique par PPP, ceci n’est pratiquable que si le lancement de pppd e ee sur le firewall peut ˆtre d´clench´ automatiquement par diald. Sur Debian, e e e installer le package diald. Attention, mˆme si on utilise PPP, il faut configurer le support de SLIP dans e le noyau.

7.9

Documentation

– Linux IPCHAINS HOWTO – Linux MASQUERADE HOWTO – apache

114CHAPITRE 7. FILTRAGE, ROUTAGE ET MASQUAGE DES PAQUETS IP

Chapitre 8

Cryptage des communications par ssh
8.1 Introduction

Ce document d´crit comment installer et utiliser ssh sur Unix, Linux en e particulier. Il r´sume la documentation fournie avec le logiciel. Merci ` Benoˆ e a ıt Speckel pour ses conseils. L’utilisation de ssh, en fait OpenSSH, version libre de SSH est vivement recommand´e pour communiquer avec une machine distante sur Internet. ssh e crypte les paquets transmis sur le r´seau et ´vite en particulier que des indise e crets d´couvre des mots de passe en ´coutant le r´seau. Mais en plus c’est une e e e parade ` certains trous de s´curit´ d’Internet notamment que des paquets IP a e e soient trafiqu´s de mani`re qu’une machine se fasse passer pour une autre. e e – ssh ou slogin remplace rlogin, rsh et telnet . Les applications X11 lanc´es depuis une session ssh circulent dans un canal crypt´. On n’a plus e e ` s’occuper de la variable DISPLAY et l’authentification X11 par xauth a est automatique. – scp (secure copy) remplace rcp ou par extension ftp. – On peut s’authentifier par un syst`me de cl´s publiques et priv´es RSA e e e qui permet de se passer du password Unix. On trouvera ssh dans le package ssh en Linux Debian. Le package ssh se compose : – d’un serveur sshd – d’un client ssh (aussi appel´ slogin) e – d’outils de gestion de cl´s : ssh-keygen, ssh-agent, ssh-add, make-ssh-known-hosts. e

8.2

Documentation

http ://www.ssh.org – man ssh – man scp – man ssh-keygen – man ssh-add 115

116

CHAPITRE 8. CRYPTAGE DES COMMUNICATIONS PAR SSH

– man ssh-agent – man make-ssh-known-hosts – RFC : The SSH (Secure Shell) Remote Login Protocol : Internet Draft d´crivant le protocole e Livres – ”R´seaux” par Andrew Tanenbaum, Inter´ditions : explique au chapitre 7 e e la s´curit´ dans les r´seaux, les bases de la cryptographies, les algorithmes e e e DES, 3DES, IDEA, les algorithmes ` cl´ publique, RSA, les protocoles a e d’authentification. – ”Applied Cryptography” par Bruce Schneier, John Wiley & Sons, 1996 traduit en fran¸ais sous le titre ”Crytographie appliqu´e” c e

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 sa machine. Apr`s avoir install´ le package, le fichier de configuration de sshd se e e trouve en : /etc/ssh/sshd_config on lance le daemon sshd sous Linux Debian par : /etc/init.d/ssh start sshd ´coute le port tcp 22. e

8.4.1

Contrˆles d’acc`s o e

La librairie tcp-wrapper contrˆle les acc`s ` sshd avec les fichiers /etc/hosts.allow o e a et /etc/hosts.deny. Exemple : cat /etc/hosts.deny ALL:ALL cat /etc/hosts.allow sshd : in2p3.fr u-strasbg.fr c-strasbourg.fr sshdfwd-pop3 : in2p3.fr u-strasbg.fr c-strasbourg.fr sshdfwd-imap2 : in2p3.fr u-strasbg.fr c-strasbourg.fr Sont ainsi autoris´s : e – les acc`s ` sshd depuis les domaines in2p3.fr u-strasbg.fr c-strasbourg.fr e a – les applications X11 via le tunnel ssh sont autoris´es pour les mˆmes doe e maines – le forward de port est autoris´ pour pop et imap au profit des mˆmes. e e

8.5. SSH CLIENT

117

8.5

ssh client

Si on veut utiliser ssh entre les machines A et B, ssh doit ˆtre install´ sur les e e deux, sinon ssh se comporte comme rsh, la communication n’est pas crypt´e. e

8.5.1

Cr´ation des cl´s RSA : ssh-keygen e e

1. Sur la machine A, cr´er les cl´s par la commande ssh-keygen qui cr´e e e e une cl´ : e – publique dans ~/.ssh/id rsa.pub. Cette cl´ publique doit ˆtre copi´e e e e sur les autres machines si l’on veut s’authentifier par RSA en s’y connectant. – et une priv´e dans ~/.ssh/id rsa e En plus elle demande une passphrase qui sert ` prot´ger la cl´ priv´e a e e e (mais n’est pas un password UNIX). Une bonne passphrase doit avoir de 10 ` 30 caract`res. Une simple phrase n’est pas une bonne passphrase car a e trop facilement devinable ou n’offrant pas une entropie suffisante, c’est ` a dire pas assez de d´sordre. e 2. Copier la cl´ publique de la machine A (fichier ~/.ssh/id rsa.pub sur e machine-A) sur la machine B dans ~/.ssh/authorized keys . Attention, une cl´ fait une ligne. Dans ce fichier ~/.ssh/authorized keys de la e machine B, on ajoutera les cl´s publiques des machines depuis lesquelles e on se connectera sur B. Attention, faire : chmod 600 $HOME/.ssh/authorized_keys De mˆme .ssh ne doit pas ˆtre group writable e e ls -ld ~/.ssh drwxr-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 mˆme sur machine-B si on veut se connecter de B vers A e Si on veut changer la passphrase on fait : ssh-keygen -p

8.5.2

Connexion : slogin ou ssh

1. Sur A, pour se connecter ` B on fera a slogin machine-B (ou ssh B) Enter passphrase for RSA key ’user@A’: On fournit cette passphrase et on est connect´ sur B. On n’a pas eu ` e a fournir son password Unix sur B. Si on a le diagnostic Bad passphrase ou s’il y a un autre probl`me, le password Unix est demand´ mais la e e communication est toujours crypt´e. e Si on a un probl`me, on fait e slogin -v machine-B

118

CHAPITRE 8. CRYPTAGE DES COMMUNICATIONS PAR SSH (-v comme verbose). Causes de probl`mes : e – Les permissions sur les fichiers de cl´s dans .ssh/ sont trop laxistes. e Elles doivent ˆtre comme ceci : e -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 mˆme userid sur machine-B , on fait : e 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 ˆtre effac´s e e parce qu’ils sont dangereux. ssh remplace rsh On peut par ssh ex´cuter des commandes sur une machine distante sans s’y e connecter. Ainsi sur la machine A : slogin machine-B w

fait ex´cuter la commande w sur la machine B. Le r´sultat s’affiche sur mon e e ´cran de la machine A. e Authentification par ssh On a pr´sent´ ci-dessus l’authentification par cl´ RSA, mais en fait ssh e e e accepte 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 les r-commandes. – cl´ RSA (SSH AUTH RSA) e – fichier .rhosts ou (.shosts) et cl´ RSA cumul´s (SSH AUTH RHOSTS RSA) e e Options de ssh – L’option -v (verbose) d´crit les ´tapes de l’´tablissement de la connexion. e e e Utile quand ssh ne marche pas. – L’option -f met ssh en arri`re plan. e slogin -f machine-B xterm – L’option -n met ssh en arri`re plan et redirige stdin depuis /dev/null. e C’est utilis´ pour lancer une application X11 depuis une machine distante. e Exemple : ssh -n machine-B emacs & Ceci ne marche pas si ssh doit demander un password ou une passphrase. – L’option -C comprime (par la m´thode de gzip) les paquets ´chang´s. e e e Vivement recommand´ pour une session PPP par modem t´l´phonique. e ee – L’option -c permet de choisir la m´thode de chiffrement : e – idea (d´faut) e

8.5. SSH CLIENT – des – 3des – blowfish – arcfour – none (On tiendra compte des options prises ` l’installation.) a

119

8.5.3

Transfert de fichiers : scp

On peut copier des fichiers par scp (secure copy) qui demande l’authentification et crypte la communication. Exemple : scp machine-B:adm/users/ajout ajout copie le fichier adm/users/ajout de mon r´pertoire sur la machine distante e machine-B dans mon r´pertoire courant sur la machine locale. e Syntaxe des noms de fichiers : Un nom de fichier peut contenir un nom d’utilisateur et de machine, ainsi on peut ´crire : e 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 r´cursive de fichiers (copie le r´pertoire et les fichiers qu’il contient). e e – p : pr´serve date et permissions des fichiers copi´s. e e – c : choix de la m´thode de cryptage e

8.5.4

Automatisation de l’authentification par cl´ publique e

L’inconv´nient dans l’authentification par cl´ publique est d’avoir ` taper la e e a passphrase ` chaque nouvelle connexion. ssh-agent est un processus tournant a en permanence qui g`re les cl´s priv´es pour l’identification par cl´ publique. e e e e Une fois lanc´, on lui communique par ssh-add son identit´, c’est ` dire ses cl´s e e a e $HOME/.ssh/id rsa, $HOME/.ssh/id dsa et $HOME/.ssh/identity en tapant la passphrase. Par la suite, c’est ssh-agent qui fournit ces cl´s. e Au lancement de ssh-agent, deux variables d’environnement sont g´n´r´es e ee qui permettent aux commandes ssh ult´rieures de communiquer avec ssh-agent : e – SSH AGENT PID : num´ro du processus ssh-agent e – SSH AUTH SOCK : nom du socket Unix (=tube nomm´) permettant de come muniquer avec ssh-agent La communication avec ssh-agent se fait de deux mani`res : e – Soit ssh-agent lance une commande indiqu´e en argument, un shell ou e Windows dans un sous-processus (il fait un fork ) par exemple : ssh-agent bash Dans ce shell bash les deux variables d’environnement SSH AGENT PID et SSH AUTH SOCK sont d´finies et permettent la communication avec ssh-agent. e Quand on termine ce shell, ssh-agent est tu´. e – Soit on r´cup´re la d´finition de des deux variables que ssh-agent copie e e e sur stdout :

120

CHAPITRE 8. CRYPTAGE DES COMMUNICATIONS PAR SSH

ssh-agent > fichier fichier contient la d´finition de ces deux variables que l’on peut activer e ailleurs dans un autre shell en y faisant : . fichier ssh-add communique ` ssh-agent ma cl´ priv´e contenue dans $HOME/.ssh/identity. a e e $ ssh-add Enter passphrase for /home/morel/.ssh/id_rsa: Identity added: /home/morel/.ssh/id_rsa (/home/morel/.ssh/id_rsa) Identity added: /home/morel/.ssh/identity (morel@helios) Je tape la passphrase une fois. Par la suite quand je me connecterai ` a d’autres machines, je n’aurai plus ` taper la passphrase a Options de ssh-add – ssh-add -l liste les cl´s g´r´es par ssh-agent. e ee – ssh-add -D invalide toutes les cl´s aupr`s de ssh-agent. e e Le fonctionnement de ssh-agent est visible en passant les commandes suivantes : – ps aux|grep ssh-agent – ssh-agent bash : On est dans un nouveau shell. – ps aux|grep ssh-agent : nouveau process ssh-agent est lanc´. Rep´rer e e son PID – echo $SSH AGENT PID : c’est le PID de ssh-agent – echo $SSH AUTH SOCK : V´rifier que c’est le chemin d’un socket de nom e /tmp/ssh-xxxxxxxxx/agent.nnn – Faites slogin machine : la passphrase vous est demand´e parce que vous e n’avez encore communiqu´e aucune identit´ ` ssh-agent e ea – ssh-add -l. Vous obtenez la r´ponse The agent has no identities. e – ssh-add : Votre passphrase est demand´e. Vos cl´s priv´es sont lues et e e e conserv´es par ssh-agent e – slogin machine : Vous pouvez maintenant vous connectez sans passphrase aux machines o` vous avez d´fini votre cl´ publique. u e e – 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/sh xrdb -load $HOME/.Xresources exec /usr/bin/ssh-agent fvwm95 Je fais ssh-add dans la premi`re fenˆtre xterm que j’ouvre. e e 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 ` la main. a Le script suivant de Benoˆ Speckel est encore mieux. Appel´ dans .xsession ıt e ou .bash profile il appelle ssh-agent s’il n’est pas lanc´ ou bien positionne e dans le shell courant les variables d’environnement SSH AUTH SOCK et SSH AGENT PID

8.5. SSH CLIENT

121

qui permettent de communiquer avec ssh-agent. De cette mani`re on tape une e fois et une seule la passphrase quelque soit la fenˆtre X11 ou la console virtuelle e o` on se trouve. u #!/bin/sh #set -x # fichier .ssh-setup.sh : if [ -z "$SSH_AUTH_SOCK" ] then agentfile=$HOME/.ssh/ssh-agent.info # r´cup´rer et v´rifier SSH_AUTH_SOCK et SSH_AGENT_PID e e e if [ -f $agentfile ] then . $agentfile >/dev/null ps --pid $SSH_AGENT_PID 2>/dev/null | grep -q "^$LOGNAME .*ssh-agent" || SSH_AUTH_SOCK= fi # d´marrage ssh-agent e if [ -z "$SSH_AUTH_SOCK" ] then [ -f $agentfile ] && \rm $agentfile ( trap ’’ 1 ; exec ssh-agent -s > $agentfile ) . $agentfile > /dev/null [ -n "$SSH_AUTH_SOCK" ] && [ -t 0 -o -n "$DISPLAY" ] && ssh-add fi unset agentfile fi Le principe est le suivant : Quand ssh-agent est lanc´, il cr´e un ”tube e e nomm´” (named pipe), c’est un fichier, par exemple /tmp/ssh-morel/ssh-24842-agent e qui permet aux autres applications ssh de communiquer avec lui. Le nom de ce fichier est retenu dans la variable SSH AUTH SOCK et le num´ro de processus de e ssh-agent est dans SSH AGENT PID. Quand on lance ssh-agent, (-s signifie shell sh, mettre -c pour csh) il affiche a e ` l’´cran : ssh-agent -s SSH_AUTH_SOCK=/tmp/ssh-morel/ssh-20765-agent; export SSH_AUTH_SOCK; SSH_AGENT_PID=20766; export SSH_AGENT_PID; echo Agent pid 20766; L’astuce est de d´tourner ces d´finitions de variables dans un fichier, ici e e $HOME/.ssh/ssh-agent.info et de les utiliser pour mettre en communication d’autres shells avec ssh-agent. si $SSH_AUTH_SOCK est vide alors si le fichier $HOME/.ssh/ssh-agent.info existe je le fais ex´cuter e si le process $SSH_AGENT_PID ` mon LOGNAME ne tourne pas a alors SSH_AUTH_SOCK=vide

122

CHAPITRE 8. CRYPTAGE DES COMMUNICATIONS PAR SSH si $SSH_AUTH_SOCK est vide alors si le fichier $HOME/.ssh/ssh-agent.info existe, je l’efface j’inhibe l’interruption 1 (SIGHUP) j’ex´cute ssh-agent ` la place du process courant et e a d´tourne sa sortie dans le fichier $HOME/.ssh/ssh-agent.info e j’ex´cute ce fichier pour valoriser les variables SSH_AGENT_PID e et SSH_AUTH_SOCK je lance ssh-add

8.6

Autres impl´mentations de ssh e

– putty est une version de ssh pour Windows : permet slogin depuis Windows mais pas scp. – WinSCP est une version de scp pour Windows – niftytelnet-1.1-ssh-r3-beta.cpt ´quivalent MacIntosh de Teraterm e avec ajout ssh : http://www.lysator.liu.se/~jonasw/freeware/niftyssh/ – LeechFTP client ftp Windows pouvant fonctionner au travers d’un tunnel ssh http://stud.fh-heilbronn.de/~jdebis/leechftp/ – lsh is a free implementation of the ssh version 2 protocol http://www.net.lut.ac.uk/psst/

Chapitre 9

Clonage d’une machine Linux Debian
9.1 Introduction

La proc´dure d’installation en plusieurs ´tapes de la distribution Linux Dee e bian permet d’installer une machine en installant juste les disquettes ”Rescue” et ”Drivers” puis en recopiant le syst`me d’une autre machine par nfs en r´seau loe e cal. Cette proc´dure est une id´e de Benoˆ Speckel <Benoit.Speckel@IReS.in2p3.fr>. e e ıt Cette manoeuvre de ”clonage” est d´licate en soi, elle est d’autant plus diffie cile que les outils dont on dispose sur la disquette rescue Debian sont vraiment restreints et primitifs : mount, vi, zcat (filtre), star, ps, df, lilo... Ce vi est en r´alit´ ae qui est beaucoup plus limit´ que le vrai vi, ce star e e e n’est pas le tar de GNU.

9.2
9.2.1

Configuration d’une machine m`re e
Compilation d’un noyau

Il faut inclure le support de tous les devices des machines ` cloner, en para ticulier : – cartes Ethernet (en modules) – disques SCSI

9.2.2

Packages

Il faut charger les packages qui seront utiles aux autres machines, au moins au d´part. En particulier : e – serveur X11 pour les diff´rentes cartes graphiques : xserver... e

9.3

Pr´paration archive sur machine m`re e e

Machine m`re = auger pour l’exemple. e 123

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 / pour ne pas avoir un r´pertoire sans nom e #!/bin/sh # archive de clonage ARCHIVE=~morel/clone.tar.gz LIST=~morel/tarlist.txt if [ ‘id -u‘ -ne 0 ] then echo "Vous devez etre root" exit fi cd / tar -c -z -f $ARCHIVE bin dev usr boot etc lib root var sbin \ --exclude=var/lock/* --exclude=var/spool/mail/* \ --exlude=var/log/*.gz \ --exclude=var/tmp/* --exclude=usr/src/* --exclude=var/state/apt/lists tar tzvf $ARCHIVE > $LIST Il faut regarder attentivement la liste de l’archive. Regarder si elle ne contient pas des ././@LongLink pour des noms de fichiers de plus de 100 caract`res. Ceci e n’est pas support´ par star. Les exclure, c’est le cas plus haut de /var/state/apt/lists. e Taille de l’archive de clonage : de l’ordre de 150 Meg.

9.3.2

Exportation

Exemple : r´pertoire /home/morel export´ pour les machines du r´seau e e e 193.54.230.0. vi /etc/exports /home/morel 193.54.230.0/255.255.255.0(ro) :wq /etc/init.d/nfs-server restart 193.54.230.0/255.255.255.0(ro) autorise toutes les machines de ce r´seau e de classe C ` monter ce r´pertoire. a e Voyez aussi les autorisations d’acc`s du tcp wrapper dans /etc/hosts.allow e et /etc/hosts.deny

9.4

Installation de Debian sur la nouvelle machine

1. Initialisation – copier resc1440.bin (rescue) et drv1440.bin (drivers) sur disquettes par : dd if=resc1440.bin of=/dev/fd0 bs=512 conv=sync ; sync dd if=drv1440.bin of=/dev/fd0 bs=512 conv=sync ; sync

9.4. INSTALLATION DE DEBIAN SUR LA NOUVELLE MACHINE

125

– boot disquette rescue, ´chec possible (mauvaise disquette, mauvais lece teur) – config clavier – cr´ation filesystem ext2 + swap On peut la faire par le menu ou ` la main e a par Alt-F2. Exemple : cr´ation d’un filessystem ext2 sur /dev/hda2 e avec un inode pour 16K octets, 4% d’espace r´serv´ et contrˆle des e e o badblocks : mke2fs /dev/hda2 -i 16384 -m 4 -c – montage / (sera appel´ /target) e – Install Operating System & Drivers. Choisir le media d’installation : /dev/fd0 – relecture disquette rescue : mise en place noyau – lecture disquette driver : (´chec possible) e – choix des modules : net (3c509, ne2k-pci, tulip, ...), fs (nfs) – configuration r´seau e – Choose Network Interface : Choisissez eth0 2. Copie de l’archive. Quitter le menu ` Install the base system : a Alt-F2 ifconfig (test r´seau: v´rifiez que eth0 appara^t) e e ı mount -t nfs -o rsize=8192 auger:/home/morel /mnt df On doit avoir quelque chose du genre : /dev/ram0 /dev/hda2 auger:/home/morel / /target /mnt

Si ´chec du mount, soit probl`me d’autorisation d’acc`s au serveur, diage e e nostic : mount RPC : Program not registered (voir syslog du serveur), soit mauvaise lecture de la disquette drivers. Copier l’archive par : cd /target zcat </mnt/clone.tar.gz|star sync sync pour ˆtre sˆr que tout est ´crit sur disque. e u e 3. Param´trage e – Configuration des filesystems ` monter a On corrige les noms de devices dans fstab : vi etc/fstab – Configuration de lilo Correction du lilo.conf de la machine m`re : adaptez les noms des dee vices. vi etc/lilo.conf On a le choix entre le noyau de l’installation Debian (vmlinuz-2.0.38) ou le noyau copi´ depuis la machine m`re. e e Exemple : cat etc/lilo.conf boot=/dev/hda2

126

CHAPITRE 9. CLONAGE D’UNE MACHINE LINUX DEBIAN root=/dev/hda2 install=/boot/boot.b map=/boot/map vga=normal delay=20 image=/boot/vmlinuz-2.0.38 label=linux read-only Ex´cuter lilo. La commande lilo fait un chroot /target. C’est donc e /target/etc/lilo.conf qui est pris en compte. S’assurer que la partition o` on met lilo est bootable u Ici /dev/hda2. Le v´rifier par fdisk -l /dev/hda. si ce n’est pas le cas e basculer le flag de boot en faisant : fdisk /dev/hda Configuration des modules ` charger au boot a Entrer en particulier le module du driver de la carte r´seau e vi etc/modules Configuration du r´seau : e Il faut changer le nom de machine et son adresse IP, l’adresse du routeur, des DNS. vi etc/hostname (nom machine) vi etc/init.d/network vi etc/resolv.conf Nettoyage r´pertoire var e Nettoyage var/log Cr´ation des r´pertoires manquants : e e mkdir tmp ; chmod 1777 tmp mkdir proc mkdir home V´rification des daemons ` d´marrer au boot e a e cd etc/rc2.d;ls On empˆchera xdm de d´marrer sur la console au prochain boot (sinon e e vous risquez des probl`mes avec le moniteur) en mettant en commentaire e la ligne : #:0 local /usr/bin/X11/X vt7 dans /etc/X11/xdm/Xservers D´montage du filesystem e cd / umount /target

– – –

9.5

Reboot

Le filesystem /target ´tant d´mont´ on peut arrˆter sans crainte la machine e e e e et la relancer. Si LILO ´choue, c’est qu’il est mal install´. On doit rebooter avec la disquette e e rescue, monter la partition contenant / sur /target. On y corrige etc/lilo.conf et r´ex´cute lilo. e e – Changer le password de root (c’est actuellement le mˆme que sur la mae chine m`re). e – Configurer X-Window par xf86config ou bien en allant ´diter directee

9.5. REBOOT ment /etc/X11/XF86Config et /etc/X11/Xserver – V´rifier la souris /dev/mouse ps ax|grep gpm e – Nettoyage /etc/passwd /etc/group /etc/shadow /etc/hosts, – Charger /var/state/apt/lists

127

128

CHAPITRE 9. CLONAGE D’UNE MACHINE LINUX DEBIAN

Chapitre 10

Sendmail
10.1 Le service de mail de l’Internet

Le service de mail est constitu´ de plusieurs fonctions : e – MTA : Un Mail Transfert Agent (MTA) envoit, re¸oit, route les messages c suivant le protocole SMTP. Exemples : sendmail, smail, exim, postfix. – MDA : L’´criture des messages dans les boˆ aux lettres se fait par les e ıtes Mail Delivery Agent (MDA). Exemple : procmail, postfix. – MUA : Les logiciels de messagerie qui permettent de r´diger des mese sages ou consulter sa boˆ aux lettres sont des Mail User Agent (MUA). ıte Exemples : mail, xmailtool, exmh, elm, pine, mutt. Ces MUA peuvent consulter des boˆ aux lettres sur des machines distantes par les protoıtes coles POP ou IMAP : fetchmail, Netscape. Sur PC : Eudora, Netscape. Le service est organis´ de mani`re ` ne pas perdre de message. L’exp´diteur e e a e ne re¸oit de notification que lorsque la d´livrance au destinataire n’a pu se faire. c e Le service de mail reste le moyen qui permet de communiquer avec le plus de personnes y compris sur des r´seaux non Internet. e

10.2

SMTP

C’est le protocole d’´change de mail d’Internet d´crit par RFC 821 (J.B. e e Postel 1982). Il utilise le port tcp 25. Exemple d’envoi d’un mail : On tape ces lignes au clavier : telnet machine 25 helo phoebus.c-strasbourg.fr mail from: <chirac@elysee.fr> rcpt to: <morel@phase.c-strasbourg.fr> data Date: Wed, 26 Jun 1996 11:05:01 +0200 (MET DST) From: Jacques CHIRAC <chirac@elysee.fr> To: <morel@phase.c-strasbourg.fr> Subject: Felicitations Bravo pour vos efforts en faveur du logiciel libre. 129

130 Presidentiellement votre. JC . quit

CHAPITRE 10. SENDMAIL

Remarques : – Pour chaque ligne envoy´ par le client, le serveur r´pond, sauf quand on e e est dans le corps du message. – Les mots cl´s helo, mail from etc sont en majuscules ou minuscules. e – Le message, entre data et ”.” a une syntaxe d´crite dans RFC 822. Il est e form´ d’un en-tˆte compos´ de lignes commen¸ant par Date, From, etc, e e e c suivi d’une ligne vide puis du corps du message. Les indications From :, To : qu’il contient ne serve pas au transport. Elles peuvent ˆtre falsifi´es. e e – Comme on le voit sur cet exemple, dans SMTP, on n’est pas assur´ de e l’authenticit´ du message, de l’exp´diteur en particulier. e e – machine est un nom de machine sur laquelle un serveur de mail comme sendmail ´coute sur le port tcp 25. e Pour chaque ligne envoy´ par le client, le serveur r´pond, sauf quand on est e e dans le corps du message.

10.2.1

Codes retour

Le code renvoy´ par le serveur est compos´ de 3 chiffres : e e – Le premier chiffre indique si la r´ponse est bonne (2) ou s’il y a une erreur e (5). – Le deuxi`me chiffre indique une erreur de syntaxe (0) ou une r´ponse du e e “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 connecter sur son port 25 en TCP, exemple :

$ telnet amon.u-strasbg.fr 25 Trying 130.79.200.3... Connected to amon.u-strasbg.fr. Escape character is ’^]’. 220 amon.u-strasbg.fr ESMTP Sendmail 8.9.3+Sun/8.9.0; Thu, 22 Jun 2000 23:22:14 +0200 quit <-------------commande ` taper a 221 amon.u-strasbg.fr closing connection Connection closed by foreign host. [morel@zoroastre nmap-2.53]$ On lit que, sur le port 25 de la machine amon, sendmail version 8.9.3 attend des mails.

10.2.3

V´rification de l’existence d’une boˆ aux lettres e ıte

La commande VRFY permet de tester l’existence d’une boˆ aux lettres. ıte Soit ` v´rifier la validit´ de l’adresse <jacques.morel@iness.c-strasbourg.fr> a e e On v´rifie l’existence de la partie domaine de l’adresse par : e

` 10.3. EXTENSIONS A SMTP : ESMTP, MIME

131

$ host -t mx iness.c-strasbourg.fr iness.c-strasbourg.fr mail is handled by 5 zoroastre.c-strasbourg.fr Le serveur de mail ` contacter est donc zoroastre.c-strasbourg.fr. On a le fait en appelant le serveur par nc sur le port 25 et en passant la commande vrfy jacques.morel : $ nc zoroastre.c-strasbourg.fr 25 220 auger.c-strasbourg.fr ESMTP Sendmail 8.12.3/8.12.3/Debian-7.1; Wed, 21 Sep 2005 19:06:53 +0200; (No UCE/UBE) logging access from: helios.c-strasbourg.fr(OK)-morel@helios.c-strasbourg.fr [193.54.230.78] vrfy jacques.morel 250 2.1.5 <jacques.morel@auger.c-strasbourg.fr> quit 221 2.0.0 auger.c-strasbourg.fr closing connection – Le serveur s’annonce par une ligne commen¸ant par le code 220 et se c terminant par l’adresse IP de la machine appelante. – Le client envoie vrfy jacques.morel – Le serveur r´pond 250 2.1.5 <jacques.morel@auger.c-strasbourg.fr>. e Le code 250 est une r´ponse positive, suit l’adresse l´gale (zoroastre est e e un alias de auger). Une r´ponse n´gative est accompagn´e du diagnostic User unknown : e e e $ nc zoroastre 25 220 auger.c-strasbourg.fr ESMTP Sendmail 8.12.3/8.12.3/Debian-7.1; Wed, 21 Sep 2005 19:17:16 +0200; (No UCE/UBE) logging access from: helios.c-strasbourg.fr(OK)-morel@helios.c-strasbourg.fr [193.54.230.78] vrfy dupond 550 5.1.1 dupond... User unknown quit 221 2.0.0 auger.c-strasbourg.fr closing connection Attention, des serveurs peuvent renvoyer toujours une r´ponse positive. e

10.2.4

V´rification d’un alias e

La commande EXPN de RFC 821 permet de r´soudre (expand) les alias. e Cherchons par exemple qui est l’administrateur de la machine zoroastre.c-strasbourg.fr : $ nc zoroastre.c-strasbourg.fr 25 expn root 250 2.1.5 Jacques Morel <morel@auger.c-strasbourg.fr> Cette possibilit´ permet bien des indiscr´tions. Il est possible de la supprimer e e sur le serveur.

10.3

Extensions ` SMTP : ESMTP, MIME a

SMTP est un protocole tr`s simple dont le principal inconv´nient est de e e n’autoriser que les caract`res ASCII sur 7 bits. Il y a deux extensions : e

132

CHAPITRE 10. SENDMAIL

– ESMTP : RFC 1651, permet de coder les caract`res sur 8 bits. Il les e accepte du client et, si le destinataire ne les supporte pas, sait recoder sur 7 bits (8BITMIME). Le mot cl´ EHLO ` la place de HELO invite le serveur e a a ` indiquer les extensions qu’il supporte. – MIME : RFC 2045 ` 2049, permet : a – plusieurs corps dans un message, chacun ´tant marqu´ par Content-Type : e e – chaque corps a un type MIME sous la forme type/sous-type, exemple : text/plain. Les types sont text, image, application, audio, video, multipart, message – la repr´sentation de tout caract`re sur 7 ou 8 bits : un corps peut e e ˆtre encod´ en 7bit, quoted-printable (repr´sentation presque lie e e sible de caract`res accentu´s : ”=” suivi des deux chiffres hexa du cae e ract`re), base64 (codage de 3 octets sur 4, c’est ` dire d´coupe 24 octets e a e cons´cutifs (3 x 8) en 4 paquets de 6 bits, 6 bits suffisant pour repr´senter e e un caract`re dans un alphabet commun ` toutes les machines), 8bit, e a binary (codage sur 8 bits) – l’indication du jeu de caract`re utilis´, exemple : charset=iso-8859-1 e e

10.4

Interaction avec le DNS

Le DNS comporte des entr´es MX qui indiquent pour un domaine particulier e vers quelle machine le message doit ˆtre envoy´. Exemple : e e host -t mx phase.c-strasbourg.fr phase.c-strasbourg.fr MX 5 zoroastre.c-strasbourg.fr Ainsi le courrier destin´ ` dupond@phase.c-strasbourg.fr sera envoy´ sur ea e la machine zoroastre.c-strasbourg.fr . phase.c-strasbourg.fr ne d´signe e pas une machine. On peut utiliser les MX records pour forcer le courrier ` passer par une a machine centrale, ou pour atteindre des machines qui sont sur un autre r´seau e qu’Internet.

10.5

Caract´ristiques de Sendmail e

Sendmail est un MTA, il : – envoie des messages – re¸oit c – route (relayage) – fait d´livrer les messages dans les boˆ aux lettres e ıtes – g`re la file d’attente e Sendmail 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 utilis´ (55%), c’est surtout le plus fiable. e Quelques caract´ristiques de sendmail 8.9.3 : e – Le relayage est interdit par d´faut. Le relayage consiste ` recevoir un e a message non destin´ ` la machine locale et ` le renvoyer vers la machine ea a destinataire r´elle. C’est beaucoup utilis´ par ceux qui font de la publicit´ e e e sauvage sur le r´seau. e

10.6. INSTALLATION

133

– Les messages dont le nom de domaine indiqu´ dans le champ Mail from e n’existent pas dans le DNS sont rejet´s. e

10.6

Installation

Package Debian sendmail Version : 8.12.3-7.1 (woody), 8.13.4-3 (sarge). Sendmail n´cessite aussi les packages libdb2 (gestion de base de donn´es), e e m4 (macro-processeur), procmail (d´livrance des messages dans les boˆ aux e ıtes lettres) Debian propose un shell script de configuration sendmailconfig qui s’ex´cute e lors de la configuration du package : – Le fichier de macros /etc/mail/sendmail.mc est cr´´, ee – 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 sendmail se trouvent dans /usr/share/sendmail.cf – sendmail est lanc´ e A la suite on peut corriger cette configuration en ´ditant /etc/mail/sendmail.mc e et en refaisant ex´cuter m4. e

10.7

Documentation

Elle se trouve dans le package ` part sendmail-doc. a

10.7.1

Documentation sur la configuration

– Configuration par m4 zmore /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.gz gzip -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 g´n´rer sendmail.cf e e – /etc/mail/sendmail.cf : configuration de sendmail – /etc/mail/sendmail.cw : noms de domaines pour lesquels nous acceptons le mail comme local. – /etc/mail/sendmail.ct : noms des utilisateurs habilit´s ` changer le e a champ mail from : M´thode recommand´e : e e – copier /etc/mail/sendmail.mc dans un r´pertoire accessible par vous e sans ˆtre root : e mkdir ~/adm/sendmail cd ~/adm/sendmail cp /etc/mail/sendmail.mc config.mc

134

CHAPITRE 10. SENDMAIL

– V´rifier que votre fichier contient en tˆte une ligne : e e include(‘/usr/share/sendmail.cf/m4/cf.m4’) – Cr´ation du fichier config.cf e m4 config.mc > config.cf – Examiner config.cf – Test de la config : cr´er un fichier address.resolve contenant des adresses e a ` tester. cat > address.resolve << END user user@ma_machine user@phase.c-strasbourg.fr Paul.Auchon@trou.la.la.fr ... END checksendmail -C ~/adm/sendmail/config.cf > test.txt Examinez le fichier test.txt. Vous y voyez toutes les transformations d’adresse faites. – Si on est satisfait, on peut installer la nouvelle configuration sous root : cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.old cp config.cf /etc/mail/sendmail.cf chmod 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/passwd define(‘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 names define(‘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’)dnl FEATURE(local_procmail) MAILER(procmail) MAILER(smtp) – Les commandes define affectent des valeurs ` des param`tres a e – 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 v´rifier que e l’adresse en partie droite est une adresse d´clar´e dans le DNS (prend du e e temps) – OSTYPE(‘linux’) implique des options par d´faut sur la localisation des e fichiers voir /usr/share/sendmail.cf/ostype/linux.m4 qui ne contient

10.8. CONFIGURATION

135

que : define(‘LOCAL_MAILER_PATH’, /bin/mail.local)dnl a e e – undefine(‘UUCP RELAY’) : met ` ind´fini ce param`tre : je ne fais pas relais pour UUCP ni BITNET – FEATURE(redirect) : rejette tout mail pour les adresses not´es ”address.REDIRECT” e dans /etc/aliases avec un message d’erreur : ‘551 User not local ; please try address”. Exemple : noel:noel@jipelec.com.REDIRECT – FEATURE(always add domain) : ajoute le nom du domaine local aux adresses non fqdn. Exemple : morel@zoroastre est transform´ en morel@zoroastre.ce strasbourg.fr e – FEATURE(use cw file : le fichier /etc/mail/sendmail.cw est utilis´ pour indiquer des alias. Il contient par exemple : phase.c-strasbourg.fr goa.c-strasbourg.fr strasbourg.linuxfr.org Il indique que tout courrier pour ces adresses doit ˆtre d´livr´ localement. e e e – define(‘confMAX MESSAGE SIZE’, ‘5000000’) : taille maximum en octets pour un message re¸u, sinon renvoit avec un diagnostic. c – FEATURE(access db, hash -o /etc/mail/access) : permet d’accepter ou de refuser des messages. /etc/mail/access est une table qui sera transform´e en base de donn´e acc´d´e par hash coding. Exemple de e e e e contenu : 193.54.230 OK rtc1.u-strasbg.fr RELAY usa.com 550 We don’t accept mail from spammers tnt2.everett.wa.da.uu.net 550 We don’t accept mail from spammers www.free2blieve.com 550 We don’t accept mail from spammers – OK : J’accepte les mails en provenance de mon r´seau 193.54.230. e – RELAY : J’accepte de relayer (=router) les messages en provenance de cette machine – usa.com je renvoie un message d’erreur (550) avec ce libell´. (les codes e d’erreur sont d´crits dans RFC 821) e – define(‘PROCMAIL MAILER PATH’, ‘/usr/bin/procmail’) : indique o` u se trouve procmail – FEATURE(local procmail) : dit que le courrier local sera d´livr´ par proce e mail – MAILER(procmail) : d´clare le mailer procmail e – MAILER(smtp) : d´clare le mailer smtp e Les bases de donn´es access-db sont cr´´es par : e ee cat /etc/mail/virtusertable|makemap -v hash /etc/mail/virtusertable cat /etc/mail/access|makemap -v hash /etc/mail/access

10.8.2

Limitation de la taille des messages

Il est n´cessaire de mettre une limite de la taille des messages envoy´s e e ou re¸us, faute de quoi le serveur risque des probl`mes d’allocation de pages c e m´moires. La limite doit ˆtre ´tablie en fonction de la taille de la m´moire Ram e e e e et de la swap disponible. On peut contrˆler cette taille ` l’´mission par smtp ou o a e

136

CHAPITRE 10. SENDMAIL

en local et ` la r´ception. a e – define(‘confMAX MESSAGE SIZE’, ‘5000000’) : taille maximum en octets pour un message re¸u, sinon envoi d’un diagnostic. c – define(‘SMTP MAILER MAX’, ‘20000000’) : taille maximum en octets pour un message transport´ par smtp, esmtp ou smtp8. e – define(‘PROCMAIL MAILER MAX’, ‘20000000’) : taille maximum en octets pour un message d´livr´ par procmail. e e

10.8.3

Suppression de la r´solution d’alias par EXPN e

La commande M4 : define(’confPRIVACY_FLAGS’, ’needmailhelo, noexpn’) g´n`re dans sendmail.cf : e e O PrivacyOptions=needmailhelo, noexpn Oblige qu’une commande HELO ou EHLO soit pass´e avant la commande e MAIL 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 ` a une autre dite smart host. La configuration doit comporter des r`gles antiree layage. Mais comme cette machine n’a pas ` recevoir de mail il est pr´f´rable a ee de ne pas laisser tourner sendmail en daemon. Il sera appel´ ` chaque fois qu’il ea faut envoyer un message, mais il n’a pas ` ´couter le port 25. ae 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 renvoy´ sur la machine zoroastre e – MASQUERADE AS : fait apparaˆ le mail comme venant du domaine phase.c-strasbourg.fr ıtre

10.8.5

Sites miroirs pour tests

Ce sont des adresses qui font ´cho aux mails qu’elles re¸oivent : e c echo@univ-rennes1.fr echo@cnam.fr ping@oleane.net echo@alma.fr

10.9. EXPLOITATION DE SENDMAIL

137

10.9
10.9.1

Exploitation de sendmail
S´curit´ e e

Etant suid-root, sendmail est tr`s expos´ aux attaques. Il est donc recome e mand´ de fermer l’acc`s entrant au port smtp (25) de toute machine sauf pour e e un 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’acc`s. e

10.9.2

Commandes d’exploitation

– runq : force le traitement de la file d’attente des messages localis´e dans e /var/spool/mqueue Shell script Debian ex´cutant sendmail -q e – newaliases : refait la base de donn´es des alias ` partir de /etc/aliases e a – mailq : interroge la file d’attente des messages /var/spool/mqueue – /usr/sbin/makemap : construit des base de donn´es pour sendmail e

10.9.3

Alias

Ils sont entr´s dans le fichier /etc/aliases. Exemple : e # Basic system aliases -- these MUST be present. MAILER-DAEMON: postmaster postmaster: root FaxMaster: root # Person who should get root’s mail root: morel # Other aliases Jacques.Morel: morel labo: morel, dupond, durant, Paul.Hauchon@truc.u-strasbg.fr, "|cat >>/usr/local/doc/archive-labo.txt" congres: ":include:/home/morel/congres/adr.txt" – le courrier pourroot, postmaster, etc est envoy´ ` morel ea – le courrier pour Jacques.Morel est envoy´ ` morel ea – labo est une liste : tout courrier envoy´ ` labo sera redistribu´ ` morel, ea ea dupond, etc e e – "|cat >>/usr/local/doc/phase archive.txt" est une commande ex´cut´e par sendmail : elle copie le message ` la liste labo au bout du fichier indiqu´ a e – congres est aussi une liste contenu dans le fichier indiqu´ e

10.9.4

R´glages fins e

– messages timeouts : si la machine destinataire n’est pas joignable, sendmail envoie ` l’exp´diteur un avertissement au bout de 4h et au bout de 5 jours a e le pr´vient qu’il d´truit le message. Ceci peut ˆtre modifi´ par l’option e e e e OT5d/4h de sendmail.cf ou dans sendmail.mc par :

138 define(’confTO_QUEUERETURN’, ’6d’) define(’confTO_QUEUEWARN’, ’8h’)

CHAPITRE 10. SENDMAIL

10.9.5

Fichier Log

L’activit´ de sendmail est enregistr´e dans /var/log/mail.log. Exemple e e d’entr´e : e Dec 8 10:35:34 zoroastre sendmail[6112]: KAA06112: from=<patrick.mussot@caes.cnrs.fr>, size=1329, class=0, pri=31329, nrcpts=1, msgid=<01C06102.80912A80.patrick.mussot@caes.cnrs.fr>, proto=ESMTP, relay=callisto.caes.cnrs.fr [194.57.123.5] Dec 8 10:35:34 zoroastre sendmail[6113]: KAA06112: to=<bentz@phase.c-strasbourg.fr>, delay=00:00:01, xdelay=00:00:00, mailer=local, stat=Sent – une entr´e fait une ligne, ici d´coup´e pour la clart´. e e e e – chaque message est identifi´ par sendmail, ici KAA06112 e – on voit qu’une transaction fait au moins deux entr´es (r´ception, ´mission) e e e Regarder aussi le fichier /var/log/mail.err

10.10

Routage d’un domaine virtuel avec sendmail

Exemple : rediriger le courrier ` destination du domaine strasbourg.linuxfr.org a vers tux.u-strasbg.fr Au niveau du DNS : $host -t mx strasbourg.linuxfr.org strasbourg.linuxfr.org MX 100 zoroastre.c-strasbourg.fr Au niveau de la configuration de sendmail sur zoroastre : sendmail doit accepter les courriers pour le domaine strasbourg.linuxfr.org et les router sur tux.u-strasbg.fr zoroastre.mc contient : FEATURE(‘use_cw_file’)dnl FEATURE(‘virtusertable’, ‘hash -o /etc/mail/virtusertable’)dnl On cr´e sendmail.cf par : e #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 %1@tux.u-strasbg.fr

10.10. ROUTAGE D’UN DOMAINE VIRTUEL AVEC SENDMAIL

139

On cr´e la ‘virtusertable’ et on fait relire ` sendmail sa configuration par : e a #cd /etc/mail #makemap hash virtusertable < virtusertable #kill -HUP sendmail.pid

140

CHAPITRE 10. SENDMAIL

Chapitre 11

Apache
11.1
11.1.1

Le serveur WWW Apache
WWW

HTTP, Hyper Text Transfer Protocol et HTML, Hyper Text Markup Language, ont ´t´ con¸u au CERN en 1989 par Tim Berners-Lee qui a voulu imee c pulser : ‘‘A wide-area hypermedia information retrieval initiative aiming to give universal access to a large universe of documents’’ HTTP est l’extension de la technique hypertexte au r´seau. Un hypertexte e est un texte contenant des renvois ` d’autres textes (comme dans le programme a info de GNU). Ces renvois sont des pointeurs d´signant le texte avec sa localisae tion. En HTTP, on appelle ce renvoi URL (Uniform Ressource Locator ) appel´ e maintenant URI (Uniform Ressource Identifier ). D´nomination bien connue du e type : methode://serveur:port/fichier#fragment?param`tres e qui est devenue un standard (RFC 1738) tr`s utilis´. e e La fonction d’un serveur Web est de r´pondre aux requˆtes de diff´rentes e e e ressources (pages html, images, scripts, feuilles de style,...) faites par des clients suivant le protocole HTTP. Une ressource peut ˆtre aussi l’ex´cution d’un proe e gramme sur le serveur. Dans ce cas la r´ponse du programme est renvoy´e par e e le serveur sous forme d’une page HTML. L’interfa¸age entre le serveur http et c le programme s’appelle CGI (Common Gateway Interface). Le premier serveur httpd vient du CERN, le premier client MOSAIC de NCSA. Apache est l’h´ritier du serveur httpd de NCSA. Apache est un des e serveurs les plus utilis´s sur Internet. e

11.1.2

HTTP

Versions de HTTP : – HTTP/0.9 – RFC 1945 : Hypertext Transfer Protocol – HTTP/1.0. T. Berners-Lee, R. Fielding & H. Frystyk. May 1996. 141

142

CHAPITRE 11. APACHE

– 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. June 1999. HTTP est un protocole sans ´tat dans la mesure o` le serveur traite chaque e u transaction ind´pendemment des autres. Il n’y a pas de notion de session du e moins ` l’origine car il est pr´vu depuis RFC 2068 des connexions persistantes. a e Il pr´voit le typage de la repr´sentation des donn´es (Type MIME) et maintenant e e e la possibilit´ de n´gocier ce type : un client peut dire je pr´f`re des documents e e ee en fran¸ais et des images au format *.png. c HTTP/1.1 Requˆte du client e deux lignes : Une requˆte du client au serveur en HTTP/1.1 s’´crit sur e e

Method SP Request-URI SP HTTP-Version CRLF Host: domain-server-name CRLF Il peut s’y ajouter des lignes ”Request Header Fields” permettant de passer des param`tres suppl´mentaires : e e – If-Modified-since : voir GET conditionnel plus loin. – Accept-Language : pr´f´rence sur la langue ee – Accept : pr´f´rence sur les types de media ee – ... Exemple de pr´f´rences pond´r´es par un coefficient q envoy´es par un client : ee ee e Accept-Language: fr; q=1.0, en; q=0.5 Accept: 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 indiqu´e par l’URI e – HEAD : fournit des infos sur la page demand´e (Last-Modified, Content-Length, e Content-Type...) – POST : transfert de donn´es ` l’URI indiqu´e (utilis´ pour les r´ponses e a e e e a ` un formulaire) – PUT : ´criture d’une ressource sur le serveur e – DELETE : demande au serveur d’effacer la ressource associ´e ` l’URI e a – TRACE – Request-URI : URI terme un peu plus g´n´ral que URL. Mˆme syntaxe. e e e – HTTP-Version : HTTP/1.0 ou HTTP/1.1 En principe HTTP utilise le port TCP 80. Exemple de requˆte : e Avec HEAD : HEAD / HTTP/1.1 Host: www-phase.c-strasbourg.fr Avec OPTIONS :

11.1. LE SERVEUR WWW APACHE OPTIONS * HTTP/1.1 host: www-phase.c-strasbourg.fr Avec GET : GET /phase.html HTTP/1.1 host: www-phase.c-strasbourg.fr

143

Exemple d’interrogation par telnet. C’est un bon test pour savoir si votre serveur apache marche : $ telnet localhost 80 Trying 193.54.230.20... Connected to zoroastre.c-strasbourg.fr. Escape character is ’^]’. HEAD / HTTP/1.1 Host: www-phase.c-strasbourg.fr HTTP/1.1 200 OK Date: Wed, 14 Jun 2000 18:34:27 GMT Server: Apache/1.3.3 (Unix) Debian/GNU Last-Modified: Tue, 18 Jan 2000 15:13:24 GMT ETag: "d98af-1476-38848314" Accept-Ranges: bytes Content-Length: 5238 Content-Type: text/html Connection closed by foreign host. Pour un contrˆle : o $ ls -l /var/www/phase/phase.html -rw-rw-r-1 morel web 5238 Jan 18 16:13 /var/www/phase/phase.html

<----- entr´ au clavier e <----- entr´ au clavier e

<---- date maj page d’accueil

R´ponse du serveur Toute r´ponse du serveur est pr´c´d´e d’un en-tˆte fait e e e e e e d’une ou plusieurs lignes dont : – Une Status-Line toujours pr´sente au d´but : e e HTTP-Version SP Status-Code SP Reason-Phrase CRLF – Content-type : mime type – Content-length : longueur du document – Last-Modified : date mise ` jour a – Expires : dur´e de validit´ du document (optionnel) C’est une informae e tion sur la dur´e de validit´ du document, sa date de fraˆ e e ıcheur en quelque sorte. – et d’autres entity header – CRLF une ligne vide – Exemple d’en tˆte : e HTTP-1.1 301 Now where did I leave that URL Location: http://xyz.abc.com/foo/bar.html Content-type: text/html On voit ces en-tˆtes quand par telnet on passe des commandes HEAD. e

144 HTTP/1.0

CHAPITRE 11. APACHE

HTTP/1.0 est beaucoup plus simple : il ne supporte que 3 m´thodes : GET, e POST, HEAD, OPTIONS et il n’y a pas ` envoyer de ligne Host : a Apache le supporte aussi. Exemple de requˆte : e GET /phase.html HTTP/1.0 CRCR (la requˆte doit ˆtre suivi de deux retour chariot). e e Autre exemple : $ telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is ’^]’. OPTIONS * HTTP/1.0 HTTP/1.1 200 OK Date: Sun, 18 Jun 2000 18:09:00 GMT Server: Apache/1.3.3 (Unix) Debian/GNU Content-Length: 0 Allow: GET, HEAD, OPTIONS, TRACE Connection: close Connection closed by foreign host. GET La commande GET permet de demander une ressource par un URI, mais en plus, on peut coller des param`tres ` la suite de l’URI. Dans ce cas, la e a ressource est un programme ou un script que le serveur http fait ex´cuter en lui e transmettant ces param`tres. Les r´sultats sont des pages HTML que le serveur e e renvoie au client (voir programmes CGI). La syntaxe est : GET URI?param-1=val-1&param-2=val-2& ... &param-n=val-n O` param-i sont des noms de variables et val-i des chaˆ u ınes de caract`res e o` les blancs sont remplac´s par des + et les caract`res ascii > 120 cod´s sous u e e e la forme %xx. GET conditionnel : Un GET suivi d’une condition du type : If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT permet de ne demander au serveur l’envoi de la ressource associ´e ` l’URI e a que si celle-ci est plus r´cente que celle qu’il a dans son cache (sp´cifique ` e e a HTML/1.1). Il existe d’autres types de conditions.

11.2

Caract´ristiques de Apache e

C’est un logiciel libre produit par une coop´ration organis´e entre les volone e taires qui ont continu´ ` am´liorer le serveur httpd de NCSA. Apache reprend ea e tous les param`tres de configuration de httpd NCSA. e Ses caract´ristiques : e

11.3. DOCUMENTATION

145

– choix de modules qui se chargent quand apache d´marre (Dynamic Shared e Objects), grande vari´t´ de modules ee – interface de programmation pour ´crire des modules e – sites virtuels : un mˆme serveur peut h´berger plusieurs sites Webs. e e

11.3

Documentation

– http://www.apache.org/ – ”Apache” par Ben et Peter Laurie Editions O’Reilly (pas fameux, traduction fran¸aise pire) c – la doc fournie dans le package Debian apache-doc Utilisation : lynx /usr/doc/apache/manual/index.html ou bien, si Apache fonctionne par : lynx http://localhost/doc/apache/manual/index.html

11.4

Installation

En Debian, Apache vient en 4 modules : 1. apache : Apache version 1.3.3-7 conforme ` RFC-2068 a 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 recommand´ au d´but de prendre les options par d´faut propos´es, il est toujours e e e e possible de revenir dessus plus tard. Who should the ServerAdmin be? morel@phase.c-strasbourg.fr What port should Apache listen on? [80] Do you want to manually choose which modules to load? [y/N] RC Prendre les choix par d´faut de Debian (not´ en majuscule) en tapant RC. e e

11.5

Lancement de Apache

On peut faire fonctionner Apache ` travers inetd mais ce n’est pas du tout a recommand´ pour des questions de rapidit´ de service : on l’utilise donc en e e daemon et d´s le d´part, apache se multiplie en plusieurs copies. En Debian elle e e se fait par le script : /etc/init.d/apache start Lancez apache faites : ps auxf|grep apache, vous voyez plusieurs process apache : le p`re a le userid root, les fils www-data. Le p`re ne traite pas de e e requˆtes des clients, c’est trop dangereux. Il s’occupe juste de cr´er des fils, ou e e d’en tuer !

146 $ ps auxf|grep apache USER PID %CPU %MEM root 13021 0.9 0.8 www-data 13022 0.0 0.8 www-data 13023 0.0 0.8 www-data 13024 0.1 0.8 www-data 13025 0.1 0.8 www-data 13026 0.1 0.8

CHAPITRE 11. APACHE

SIZE 1904 1924 1924 1924 1924 1924

RSS TTY STAT 1132 ? S 1128 ? S 1128 ? S 1128 ? S 1128 ? S 1128 ? S

START 20:32 20:32 20:32 20:32 20:32 20:32

TIME COMMAND 0:00 /usr/sbin/apache 0:00 \_ /usr/sbin/apache 0:00 \_ /usr/sbin/apache 0:00 \_ /usr/sbin/apache 0:00 \_ /usr/sbin/apache 0:00 \_ /usr/sbin/apache

11.6

Configuration

Les fichiers de configuration sont dans /etc/apache. Suivant la tradition de httpd NCSA il y a 3 fichiers de configuration : – httpd.conf : param`tres g´n´raux de fonctionnement + virtuals hosts e e e – access.conf : restrictions d’acc`s e – srm.conf : r´pertoires accessibles aux clients e mais il est fortement recommand´ de les fusionner dans httpd.conf. En e plus, il y a le fichier mime.types Debian ajoute un cron.conf pour faire tourner les logs. Configuration minimale : Elle se fait en ´ditant le fichier httpd.conf qui est e abondamment comment´ : e

11.6.1

Param`tres g´n´raux e e e

ServerType standalone Port 80 User www-data <------Group www-data <------ServerAdmin morel@phase.c-strasbourg.fr <------ServerRoot /etc/apache BindAddress * LoadModule env_module /usr/lib/apache/1.3/mod_env.so <------LoadModule ... <------ErrorLog /var/log/apache/error.log <------LogLevel warn LogFormat ... CustomLog /var/log/apache/access.log common <------PidFile /var/run/apache.pid LockFile /var/run/apache.lock ServerName www-phase.c-strasbourg.fr <------MinSpareServers 1 MaxSpareServers 5 StartServers 1 MaxClients 150 En Debian tout est configur´ convenablement. Vous devez faire attention au e minimum aux param`tres suivants : e – www-data : c’est le userid et le groupe sous lesquels les copies de apache s’ex´cute (et les programmes CGI). D’autres distributions Linux utilisent e nobody.

11.6. CONFIGURATION

147

– ServerRoot : c’est le r´pertoire o` vont se trouver les fichiers de configue u ration /etc/apache en Debian. – LoadModule : choix des modules, c’est important, mais au d´but vous vous e laissez guider par les choix par d´faut de Debian. e – ErrorLog, CustomLog : emplacement des fichiers logs. – ServerName : c’est ´videmment important. Cela ne se d´duit pas automae e tiquement du nom de la machine car souvent, comme chez moi, c’est un alias (un RR de type CNAME dans le DNS) – Pour les autres param`tres, les logs, le nombre de serveurs, laissez les e d´fauts, vous verrez plus tard e

11.6.2

Configuration des ressources
<-----------<------------

DocumentRoot /var/www/phase UserDir public_html DirectoryIndex index.html FancyIndexing on ... AddLanguage en .en ... LanguagePriority en fr de AccessFileName .htaccess Alias /icons/ /var/www/icons/ ScriptAlias /cgi-bin/ /var/www/cgi-bin/ Alias /doc/ /usr/doc/

<-----------<-----------<-----------<------------

– DocumentRoot : c’est le r´pertoire racine de l’arborescence des pages Web. e On peut en mettre ailleurs, voir directive Alias. – UserDir : c’est le r´pertoire dans les Home directory des utilisateurs o` se e u trouveront leurs pages web personnelles accessibles par : httt ://url de votre site/~userid – DirectoryIndex : indique que lorsque un client demande un r´pertoire e (il termine l’URL par / ou non, voir mod dir), on lui fournit la page index.html – AccessFileName : nom du fichier contenant des restrictions d’acc`s que e l’on peut placer dans un r´pertoire (d´pend de AllowOverride) e e – ScriptAlias : r´pertoire dont les fichiers s’ex´cutent comme des script e e CGI : /cgi-bin/ est l’URL path (correspond ` http ://serveur/cgi-bin) a /var/www/cgi-bin/ est le nom du r´pertoire correspondant (dans l’arboe rescence Unix) – Alias : permet de ranger des documents ailleurs que dans DocumentRoot. L’URL : http ://serveur/doc/) (n’oubliez pas le /) pointe sur le r´pertoire/usr/doc/ e de l’arborescence Unix. Cette sp´cificit´ Debian fait que toute la doc est e e lisible par le Web.

11.6.3

Restrictions d’acc`s e
<-----------<-----------<-----------<------------

<Directory /var/www> Options Indexes FollowSymLinks AllowOverride None order allow,deny

148 allow from all </Directory> <Directory /var/www/cgi-bin> AllowOverride None Options ExecCGI FollowSymLinks </Directory>

CHAPITRE 11. APACHE <------------

<Location /cgi-bin/phf*> deny from all ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi </Location> # Debian Policy assumes /usr/doc is "/doc/", at least from the localhost. <Directory /usr/doc> Options Indexes FollowSymLinks AllowOverride None order allow,deny allow from all </Directory> <DirectoryMatch ^/home/.*/public_html> Options SymLinksIfOwnerMatch Indexes AllowOverride None </DirectoryMatch> – Directory /var/www : r`gles d’acc`s au r´pertoire /var/www et ` ses souse e e a r´pertoires. e – Options Indexes FollowSymLinks ExecCGI – Indexes : si le client demande une URL correspondant ` un r´pertoire et a e qu’il n’y a pas de fichier index.html le serveur envoie une liste formatt´e e du r´pertoire. Donc tous les fichiers du r´pertoire sont visibles ` un client e e a Web. C’est donc une option d´conseill´e. e e – FollowSymLinks : le serveur suit les liens symboliques : utile pour mettre en consultation par apache des documents qui ne sont pas dans l’arborescence DocumentRoot. SymLinksIfOwnerMatch, ne suit le lien que si le fichier point´ a le mˆme owner que le r´pertoire qui contient e e e ce lien symbolique. – ExecCGI : ex´cution des scripts CGI autoris´e dans ce r´pertoire e e e – AllowOverride None : fichier .htaccess non pris en compte – order allow,deny : traitement des r`gles dans cet ordre e – allow from all : acc`s ouvert ` tout le monde. e a – ErrorDocument : En cas d’erreur Apache sort par d´faut un code d’erreur, e mais il peut aussi afficher un message ou rediriger sur une autre URL, c’est le cas ici. Autre exemple : ErrorDocument 403 "Sorry can’t allow you access today – Directory /usr/doc : La convention Debian est de donner acc`s par le e Web au r´pertoire /usr/doc par l’URL : e http://machine_Linux_Debian/doc/ (Ne pas oublier le /).

11.7. LES MODULES.

149

– DirectoryMatch : r`gles d’acc`s qui ne s’appliquent qu’aux r´pertoires e e e qui satisfont les expressions r´guli`res indiqu´es. Ici les noms de fichier e e e qui commencent par /home et se terminent par public html. Si plusieurs directives Options s’appliquent ` une mˆme r´pertoire, elles ne a e e se cumulent pas. Mais on peut faire pr´c´der chaque option d’un signe “+” ou e e “-”. Une option pr´c´d´e d’un “+” s’ajoute par rapport ` celle en cours, une e e e a pr´c´d´e d’un “-” se retranche. e e e

11.7

Les modules.

On les choisit soit en ´ditant /etc/apache/httpd.conf soit en rappelant e /usr/sbin/apacheconfig (faire man apacheconfig). En Debian Sarge, on ex´cute : e /usr/sbin/apache-modconf apache qui met ` jour /etc/apache/modules.conf. a Support for passing environment to CGI? [y/N] Module : mod env Action : passe des variables d’environnements aux scripts CGI/SSI Support for configurable logfiles [required]? [Y/n] Module : mod log config Action : permet de faire des Logs (directive TransferLog) et de d´finir e des formats (directive LogFormat), de cr´er un Log avec un format (directive e CustomLog) Support for regex based translations [standard]? [Y/n] Module : mod rewrite Action : permet de r´´crire des URL ` la vol´e ` l’aide d’expressions r´guli`res ee a e a e e (comme sendmail sait faire de la r´´criture d’adresse). On peut ainsi passer des ee arguments avec de ”fausses” URL. Directives : Rewrite... Support for determining types automagically? [y/N] Module : mod mime magic Action : d´termine le type MIME d’un fichier en examinant les premiers e octets comme la commande file de Unix. Directives : MimeMagicFile Support for determining document types [required]? [Y/n] Module : mod mime Action : g´re une ”meta information”, le Mime type pour chaque document. e En plus un handler peut ˆtre d´fini, il d´termine le traitement d’un fichier par e e e le serveur. Les directives AddEncoding, AddHandler, AddLanguage and AddType sont utilis´es pour d´terminer le type en fonction de l’extension du fichier. Elles e e fixent respectivement le Content-encoding, le handler, le Content-language et le MIME-type (ou Content-type) du document.

150

CHAPITRE 11. APACHE

Support for content negotiation [required]? [Y/n] Module : mod negotiation Action : permet de s´lectionner un document qui convient le mieux aux e caract´ristiques du client. Apache propose deux m´thodes : e e – Option MultiViews : On peut ainsi s´lectionner la langue, (Directives e AddLanguage), le type d’image. – un handler type-map permet de d´finir un fichier o` sont indiqu´es des e u e alternatives Support for server status info? [y/N] Module : mod status Action : donne l’´tat du serveur sous forme d’une page HTML : nombre de e fils actifs, oisifs, statistiques sur les acc`s. e Support for server configuration info? [y/N] Module : mod info Action : Informe sur les modules et les directives de configuration On l’interroge par : http://your.host.dom/server-info Directive AddModuleInfo Support for server-parsed HTML (XBitHack)? [y/N] Module : mod include Action : active les Server-Side Includes. Tout document avec l’extension *.shtml sera analys´ par ce module si Option +Includes figure pour les r´pertoires e e contenant ces pages. Le r´sultat aura le mime type text/html. e AddType text/html .shtml AddHandler server-parsed .shtml Support for automatic directory listings [required]? [Y/n] Module : mod autoindex Action : fabrique un index pour un r´pertoire qui n’a pas de fichier index.html e Support for index.html indices [required]? [Y/n] Module : mod dir Action : ajoute un / aux URL du type http ://servername/foo/dirname o` dirname est un r´pertoire. Appelle mod autoindex s’il n’y a pas de fichier u e index dans ce r´pertoire e Directive : DirectoryIndex Support for CGI scripts [required]? [Y/n] Module : mod cgi Action : tout fichier qui a le mime type application/x-httpd-cgi ou le handler cgi-script sera trait´ par ce module. Des fichiers peuvent avoir ce e type mime si leur extension est d´finie dans un AddType ou s’ils se trouvent e dans un r´pertoire d´fini par ScriptAlias. e e

11.7. LES MODULES. Support for sending raw HTTP data? [y/N]

151

Module : mod asis module Action : tout document avec le mime type httpd/send-as-is sera trait´ e par ce module. Utile quand on ne veut pas ajouter d’en-tˆte HTTP au fichier e (mais il faut alors que cet en-tˆte soit dans le fichier sinon le client n’est pas e content . Support for imagemaps? [y/N] Module : mod imap Action : traite les server-side image maps Support for filetype-based scripts? [y/N] Module : mod imap Action : permet de traiter un fichier comme un CGI suivant son type (directive Action) ou quand une m´thode (GET, POST, PUT, DELETE) est invoqu´e e e (directive Script) Support for automatic URL spell-correction? [y/N] Module : mod speling Action : essaie de corriger des URL fausses, par exemple des erreurs sur la casse des caract`res. e Support for user home directories [required]? [Y/n] Module : mod userdir Action : d´termine le r´pertoire d’un utilisateur pour les URL du type : e e http ://serveur/~userid Support for caching proxy service? [y/N] Module : mod proxy Action : permet ` Apache de fonctionner comme serveur proxy. a Support for aliases and redirects [required]? [Y/n] Module : mod alias Action : 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 access Action : gestion des directives allow from, deny from, order permettant de contrˆler l’acc`s suivant l’adresse IP ou le nom de domaine. o e Support for basic authentication [standard]? [Y/n] Module : mod auth Action : permet de contrˆler l’acc`s ` des documents par userid/pasword o e a Support for anonymous-FTP authentication? [y/N]

152

CHAPITRE 11. APACHE

Module : mod auth anon Action : mˆme m´thode d’acc`s que dans ftp anonymous, demande l’adresse e e e e-mail comme password Support for dbm-file authentication? [y/N] Module : mod auth dbm Action : contrˆle d’acc`s par userid/pasword avec fichier dbm o e Support for db-file authentication? [y/N] Module : mod auth db Action : idem avec Berkeley db Support for MD5 authentication? [y/N] Module : mod digest Action : contrˆle d’acc`s par authentification MD5 Digest. Mais quels clients o e le supportent ? Support for HTTP header metafiles? [y/N] Module : mod cern meta Action : ´mule les metafile de httpd CERN : ce sont des headers HTTP e Support for custom expiration times [standard]? [Y/n] Module : mod expires Action : g´n`re des en-tˆtes HTTP Expires dans les r´ponses du serveur. e e e e Support for arbitrary HTTP headers? [y/N] Module : mod headers Action : permet de contrˆler les en-tˆtes HTTP dans la r´ponse du serveur. o e e Directive : Header Support for clickstream logs? [y/N] Module : mod usertrack Action : g`re les cookies. Utilise les fichiers log. Directive : e CustomLog logs/clickstream "%{cookie}n %r %t" CookieExpires, CookieTracking Support for unique hit identifiers [standard]? [Y/n] Module : mod unique id Action : identifie une requˆte de mani`re unique (date, hostname, PID e e Support for recognizing UserAgents [required]? [Y/n] Module : mod setenvif Action : fixe des variables d’environnement suivant des conditions exprim´e e par des expressions r´guli`res. Exemple : e e BrowserMatch ^Mozilla netscape Autre directive SetEnvIf Les modules sont en /usr/lib/apache/1.3/

11.8. VIRTUAL HOSTS

153

11.8

Virtual hosts

Un mˆme serveur apache peut h´berger plusieurs sites Web diff´rents. Donc e e e qui ont des URL racines diff´rentes. La m´thode qui ne pr´suppose rien quant e e e au client est celle qui consiste ` d´finir des IP-alias. Ainsi la machine qui tourne a e apache a plusieurs adresses IP pour un seul interface r´seau. Cela permet de e d´clarer des noms de domaines diff´rents. e e Les IP-alias sont d´finis ainsi : e ifconfig eth0:0 193.54.230.104 netmask 255.255.255.0 broadcast 193.54.230.255 route add -host 193.54.230.104 dev eth0:2 Les noms de domaines sont d´clar´s dans le DNS ainsi : e e www-phase www-sfp2001 604800 604800 IN IN CNAME A zoroastre.c-strasbourg.fr. 193.54.230.104

Les virtual hosts sont d´clar´s dans httpd.conf : e e <VirtualHost www-phase.c-strasbourg.fr> ServerAdmin morel@phase.c-strasbourg.fr DocumentRoot /var/www/phase ServerName www-phase.c-strasbourg.fr ErrorLog /var/log/apache/phase-error_log TransferLog /var/log/apache/phase-access_log </VirtualHost> <VirtualHost www-sfp2001.c-strasbourg.fr> ServerAdmin morel@phase.c-strasbourg.fr DocumentRoot /var/www/sfp2001 ServerName www-sfp2001.c-strasbourg.fr ErrorLog /var/log/apache/sfp2001-error_log TransferLog /var/log/apache/sfp2001-access_log </VirtualHost>

11.9
11.9.1

Content negotiation
Multiviews

Le serveur peut tenir compte des pr´f´rences transmises par le client plutˆt ee o que de proposer un choix manuel. AddLanguage en .en AddLanguage fr .fr LanguagePriority en fr de <Directory /var/www> Options Indexes FollowSymLinks ExecCGI Multiviews AllowOverride None order allow,deny allow from all </Directory>

154

CHAPITRE 11. APACHE

Remarquez la pr´sence de l’option Multiviews. Le r´pertoire /var/www e e contient les fichiers phasnew.html.en et phasnew.html.fr. Si l’utilisateur configure, dans les pr´f´rences de son Netscape, le fran¸ais ee c celui-ci envoie une requˆte du type : e GET http://www-phase.c-strasbourg.fr/phasnew.html HTTP/1.1 host: www-phase.c-strasbourg.fr Accept-Language: fr Apache lui envoie alors le fichier phasnew.html.fr. Si l’utilisateur configure l’anglais dans ses pr´f´rences Netscape, il aura le fichier phasnew.html.en. ee L’utilisateur peut d´finir en fait un ordre de pr´f´rence. Si l’utilisateur n’en e ee communique pas, Apache suit le directive LanguagePriority. Les fichiers peuvent ˆtre indiff´remment nomm´s phasnew.html.fr ou phasnew.fr.html e e e Si l’utilisateur d´finit une autre langue, Apache envoie le fichier par d´faut e e phasnew.html.html. Si on veut envoyer la page fran¸aise par d´faut on cr´e un c e e lien : ln -s phasnew.fr.html phasnew.html.html

11.9.2

Handler type-map

Un handler type-map est associ´ ` un fichier qui d´finit des variantes d’un ea e document par exemple : AddType application/x-type-map var AddHandler type-map var DirectoryIndex index.var Fichier index.var : URI: index; vary="language" URI: index.en.html Content-type: text/html Content-language: en URI: index.it.html Content-type: text/html Content-language: it

11.10

Restrictions d’acc`s e

Il vaut mieux, pour un service plus rapide, les d´clarer dans les fichiers de e configuration plutˆt que dans les fichiers .htaccess. Elles sont d´finies soit pour o e tout l’ensemble des pages Web soit par r´pertoire particulier, l’un n’excluant pas e l’autre. Exemple : restriction d’acc`s pour usage Intranet e <Directory /var/www/phase/interne> <Limit GET> order deny,allow deny from all allow from 193.54.230 130.79.74 130.79.194 127.0.0.1

´ 11.11. AUTRES CAPACITES DE APACHE </Limit> </Directory>

155

Ce qui signifie que pour la m´thode GET l’acc`s de /var/www/phase/interne e e est interdit ` tous, sauf aux machines dont les adresses IP commencent par a 193.54.230, 130.79.74, 130.79.194 et bien sˆr localhost. u Remarque : deny,allow forme un seul mot (pas de blanc). Je voudrais autoriser l’acc`s de mes pages Web ` tous, sauf ` la direction du e a a CNRS. Je cr´e un fichier /home/morel/public html/.htaccess qui contient : e <Limit GET> order allow,deny allow from all deny from dr10.cnrs.fr </Limit>

cnrs-dir.fr

Mais attention, il faut une directive AllowOverride All pour que le fichier .htaccess soit pris en compte. On peut aussi conditionner l’acc`s par une variable. Par exemple, par BrowserMatch e je cr´e une variable d’environnement si le nom du Browser satisfait une exprese sion r´guli`re. e e deny from env=cette_variable interdira l’acc`s ` ce type de Browser. e a On peut aussi faire un contrˆle d’acc`s par userid/password o e

11.11

Autres capacit´s de Apache e

– SSI : Server-side includes. Il faut activer le module mod-include et la directive Includes. Exemple de SSI pour mettre dans une page *.shtml sa date de derni`re modification : e <!--#config timefmt="%A %d %B %Y" --> <p> Date de derni`re mise ` jour : e a <!--#echo var="LAST-MODIFIED" --> timefmt d´finit le format de la date avec la mˆme syntaxe que dans man e e strftime : %A est le jour de la semaine, %d le num´ro du jour dans le mois e %B le mois, %Y l’ann´e. e – SSL : HTTP+SSL= HTTPS. Vient de Netscape, support´ par Apache. e N´cessite d’installer la biblioth`que de chiffrement SSLeay et le patch e e Apache-SSL. – Cookies : support´ e – PHP : support´ e – Serveur proxy : mais j’utiliserais plutˆt squid ou junkbuster. o

11.12
11.12.1

Maintenance
Erreurs

Regardez les fichiers Logs, dans /var/log/apache en particulier les fichiers *-error log

156

CHAPITRE 11. APACHE

11.12.2

Statistiques

Exemple : wwwstat fait des statistiques ` partir des fichiers logs. R´sultat a e au format HTML. http://www.ics.uci.edu/pub/websoft/wwwstat/ Configuration : fichier wwwstat.rc. V´rifier $DefaultLog $Do Archive e Emploi : wwwstat -h Statistiques globales : wwwstat >stat.html Statistiques d’acc`s au r´pertoire de l’utilisateur dupond : e e wwwstat -n ’^/~dupond/’

Chapitre 12

Ex´cution de programmes e CGI sur un serveur WWW
Ce chapitre est une adaptation du document r´dig´ par Fr´d´ric Couchet, e e e e mad@bocal.cs.univ-paris8.fr de l’association APRIL, http://www.april.org

12.1
12.1.1

Introduction ` la Common Gateway Intera face
Pourquoi utiliser les programmes CGI

Un programme CGI est tout simplement un programme pouvant ˆtre ex´cut´ e e e par un serveur HTTP. Un exemple classique nous est fourni par les moteurs de recherche qui, ` a partir de mots cl´s saisis dans un formulaire, vous affichent l’ensemble des pages e au format HTML contenant ces mots cl´s. La recherche ´tant effectu´e par un e e e programme externe. La solution pour communiquer a travers une page Web avec le serveur est ` l’utilisation de la Common Gateway Interface (CGI). CGI est une interface permettant l’ex´cution de programmes externes par un serveur HTTP. Plus e g´n´ralement, CGI est en fait un standard pour l’´criture de passerelles entre des e e e serveurs d’informations tel que HTTP et des programmes externes. L’interface CGI permet de faire communiquer le programme et le serveur HTTP.

12.1.2

Pr´requis et choix techniques e

Dans ce document, je suppose connu les bases du langage HTML, le minimum pour pouvoir faire une page. Pour l’´criture des programmes, la connaise sance d’un langage de programmation plus ou moins ´volu´ est bien entendu e e n´cessaire (par exemple, C, Perl, Python ...). Nous supposons un serveur Web e tournant sur une machine Unix (tous les exemples pr´sent´s dans ce document e e ont ´t´ r´alis´s sur une machine Linux 2.0 et le serveur HTTP Apache 1.2b3). ee e e 157

´ 158CHAPITRE 12. EXECUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW

12.1.3

Configuration du serveur Web

Autant l’´criture de pages au format HTML n´cessitait juste un navigateur e e pour visualiser le r´sultat, autant l’´criture de scripts CGI n´cessite la pr´sence e e e e d’un serveur HTTP tournant sur la machine (en effet, n’oublions pas que c’est le serveur qui ex´cute le programme). e Donc premi`re ´tape, il nous faut installer un serveur HTTP. Voir chapitre e e pr´c´dent. Comme le but de ce document est d’´crire des scripts CGI, il faut e e e configurer le serveur pour qu’il puisse ex´cuter nos programmes. Dans le fichier e srm.conf, il faut d´commenter la ligne suivante (supprimer le di`se en d´but e e e de ligne) : #ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ Ainsi, si votre machine s’appelle yoda, lorsque le navigateur acc´dera ` l’url e a http ://yoda/cgi-bin/date.cgi le serveur saura que le fichier date.cgi se trouve dans le r´pertoire /usr/lib/cgi-bin et qu’il devra l’ex´cuter (voir 12.2 e e (Notions fondamentales)). Vous pouvez ´galement configurer votre serveur pour qu’il puisse ex´cuter e e n’importe quel fichier, o` qu’il se trouve, pourvu qu’il ait pour extension .cgi. u Pour cela, d´commentez, dans srm.conf, la ligne suivante : e #AddHandler cgi-script .cgi

12.2

Notions fondamentales

Lorsque vous tapez un URL (Uniform Ressource Locator ), par exemple http://www.april.org/association/index.html , votre navigateur pr´f´r´ va se connecter au serveur Web indiqu´, c’est ` dire eee e a le programme install´ sur la machine distante (dans notre exemple www.april.org), e et qui ´coute sur le port 80. Le serveur va chercher le document en question sur e son disque et l’envoie au navigateur, en utilisant le protocole HTTP (HyperText Transfer Protocol ). Il peut s’agir de n’importe quel type de fichier, un fichier au format HTML, une image, un fichier son etc. Pour savoir comment et o` chercher le document, le serveur poss`de un enu e semble de fichiers de configuration charg´s en m´moire ` son lancement (qui, e e a dans le cas de notre installation, se trouvent dans le r´pertoire /etc/apache/conf). e Dans notre exemple, le serveur ira chercher le fichier april.html dans le r´pertoire e /var/www/association (o` /var/www/ est le r´pertoire racine du serveur). Un u e autre exemple d’URL est http://www.bocal.cs.univ-paris8.fr/\~{}drieu/index.html . Le caract`re ˜ indique que la chaˆ qui suit correspond ` un nom de login e ıne a sur la machine du serveur. Ainsi, dans ce cas, le serveur va chercher le document en question dans le r´pertoire /home/drieu/public html (selon la configuration e classique du serveur). Le fichier index.html se trouve dans ce r´pertoire. Les e utilisateurs ont ainsi la possibilit´ de cr´er un r´pertoire public html (accessible e e e en lecture et ex´cution) dans leur compte pour publier sur le Web. e Mais ce type de document est statique, or il est possible d’acc´der ` de e a l’information dynamique. Une possibilit´ est l’utilisation de scripts CGI. En e effet, ce programme est ex´cut´, par le serveur, en temps r´el sur la machine e e e distante, au moment o` le navigateur fait une requˆte vers ce programme. u e

12.3. UN PROGRAMME EN BOURNE SHELL

159

Un exemple assez puissant ´tant l’acc`s, via un formulaire HTML, ` une e e a base de donn´es. Par l’interm´diaire du formulaire, vous saisissez les nom et e e pr´nom d’une personne. A l’aide d’un bouton ’valider’ pr´sent sur le formulaire, e e le serveur invoque alors un programme qui, ` partir des informations saisies a dans le formulaire, va interroger le moteur de votre base de donn´es et envoyer e en r´ponse une page au format HTML, contenant les informations concernant e cette personne, que votre navigateur va alors afficher. Mais ne nous attaquons pas tout de suite ` des requˆtes SQL, et commen¸ons a e c par beaucoup plus simple. Pour montrer le dynamisme de notre page, nous allons faire un programme qui affiche l’heure courante dans une page HTML (exemple d’´cole, car beaucoup plus facilement r´alisable avec les Server Side e e Includes).

12.3

Un programme en Bourne shell

Pour ´crire un script CGI, nous pouvons utiliser n’importe quel langage e de programmation. Nous devons simplement pouvoir lire sur l’entr´e standard, e ´crire sur la sortie standard et acc´der aux variables d’environnement. e e Nous allons ´crire notre premier programme que nous appelerons date.cgi. e Nous devons penser aux permissions de ce fichier. Le programme doit ˆtre e ex´cutable par tous, et lisible par tous dans le cas de script shell, perl ... En effet, e n’oublions pas que c’est le serveur HTTP qui va ex´cuter notre programme. Or, e le serveur tourne dans la majeure partie des cas sous l’utilisateur nobody, et donc il n’a pas de droits particuliers (retenons bien que le serveur ne s’ex´cute e pas sous l’utilisateur qui a ´crit le script). e Nous installerons notre progamme dans le r´pertoire /usr/lib/cgi-bin, qui e est le r´pertoire par d´faut des scripts CGI (encore faut-il que l’administrateur e e du syst`me nous en laisse le droit). En effet, n’importe qui n’a pas le droit e de faire des scripts CGI. L’administrateur peut limiter la possibilit´ de mettre e des scripts CGI que dans un seul r´pertoire. Il contrˆlera ainsi beaucoup plus e o facilement ces scripts. Car, il faut le savoir, les scripts CGI sont une bonne source de trous de s´curit´. e e Ainsi, le serveur sait que tous les fichiers se trouvant dans ce r´pertoire e devront ˆtre ex´cut´s et non pas envoy´s directement au navigateur, et ce seront e e e e les seuls dans ce cas. C’est le programme qui devra envoyer les informations au navigateur, par l’interm´diaire de la sortie standard (d’o` l’obligation de pouvoir e u ´crire sur la sortie standard). Donc, notre programme doit produire sur sa sortie e standard quelque chose de compr´hensible par le navigateur. Ainsi, lorsque votre e navigateur acc´dera ` l’URL correspondant ` ce fichier (par exemple : e a a http://www.april.org/cgi-bin/date.cgi ), le serveur ex´cutera le programme date.cgi qui produira un fichier au fore mat HTML contenant la date courante. Le navigateur affichera alors le r´sultat. e Source du programme Notre premier programme est ´crit sous la forme d’un script shell. Voici le e source de date.cgi : #!/bin/sh tmp=‘/bin/date‘

´ 160CHAPITRE 12. EXECUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW La date courante sur le serveur est Sun Mar 30 11:48:54 GMT+0100 1997

cat << EndFile Content-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 r´pertoire e /usr/lib/cgi-bin. Ensuite, on peut utiliser notre navigateur pour voir le r´sultat. e On acc`de ` l’URL e a http://www.april.org/cgi-bin/date.cgi et on obtient le r´sultat suivant : e Au niveau du source, on affecte ` la variable tmp le r´sultat de la commande a e /bin/date ($tmp permet ensuite d’avoir acc`s au contenu de la variable tmp). e Ensuite, il faut juste savoir que la commande cat << EndFile permet d’afficher sur la sortie standard tout ce qui suit jusqu’` ce que l’on rencontre une a ligne form´e uniquement par EndFile (la chaˆ suivant imm´diatement <<). e ıne e En fait, tout ce qui se trouve entre << EndFile et EndFile est utilis´ comme e entr´e standard de la commande cat (la chaine EndFile est choisie arbitrairee ment).1 Ce qui est important de noter, c’est la premi`re ligne ´crite sur la sortie e e standard (Content-type : text/html), c’est ` ce niveau que l’on sp´cifie le a e type de donn´es que l’on envoie au navigateur. Cette ligne fait en fait partie e du header HTTP. Ce header est indispensable pour que le navigateur puisse interpr´ter correctement les donn´es re¸ues (les autres parties du header seront e e c ajout´es par le serveur HTTP). Le type ”text/html” est le type MIME stane dard pour un document HTML. Si notre programme devait g´n´rer une image e e au format Gif (par exemple pour impl´menter un compteur graphique), nous e aurions utilis´ le type ”image/gif”. Le header doit obligatoirement ˆtre termin´ e e e par une ligne vide (comme le header de tous les protocoles). Cette ligne s´pare e l’en-tˆte de la r´ponse (c’est ` dire les informations au sujet de la r´ponse) du e e a e contenu de la r´ponse. e
1 Ce type de script shell o` les donn´es sont directement incluses dans le script s’appellent u e des documents in-line ou des here documents.

12.4. SAISIE ET TRAITEMENT DES CHAMPS D’UN FORMULAIRE 161 Ce qu’il faut retenir ` ce niveau, c’est qu’un script CGI doit produire sur a sa sortie standard quelque chose de compr´hensible par le navigateur, donc, e dans la majorit´ des cas, une sortie au format HTML. La seule obligation est la e pr´sence, sur la premi`re ligne, du header Content-type. Les autres parties du e e header seront ajout´es par le serveur HTTP. C’est pourquoi ce type de script e est appel´ Parsed Header Script. Il existe un autre type de script CGI, appel´ e e Non Parsed Header Script. Pour ce type de script, le serveur ne rajoute rien, et c’est donc le script lui-mˆme qui a la charge de fournir un header complet, e conforme au protocole HTTP. Voil`, nous avons ´cris notre premier script CGI. On y acc`de directement a e e par le navigateur. Faites le test : http://www.april.org/cgi-bin/date.cgi .

12.4

Saisie et traitement des champs d’un formulaire

L’exemple pr´c´dent ´tait relativement simple, et illustrait l’appel direct e e e d’un script CGI. Maintenant nous allons aborder un probl`me un peu plus e complexe et int´ressant. L’exercice consiste ` pouvoir saisir des donn´es dans e a e un formulaire et, grˆce ` un script CGI, effectuer un traitement quelconque sur a a ces donn´es (ce qui est le mode de fonctionnement des moteurs de recherche). e Ceci n´cessite deux ´tapes : e e – la cr´ation d’un document HTML contenant un formulaire, ce qui permete tra ` l’utilisateur de saisir des donn´es. a e – l’´criture d’un programme traitant ces donn´es. e e Pour pouvoir saisir des donn´es dans une page HTML, nous allons utiliser e la balise FORM. Cette balise permet de r´aliser un questionnaire. Les r´ponses e e saisies par l’utilisateur sont cod´es par le navigateur et transmises au serveur e HTTP. Utilisons l’exemple suivant (fichier form.html) : L’utilisateur pourra ainsi entrer son pr´nom, nom (champ de type texte) e et s´lectionner l’une des quatres valeurs possibles pour l’ˆge (champ de type e a SELECT). Le champ d’un formulaire est identifi´ par l’attribut NAME. Les donn´es e e sont transmises au serveur sous la forme de paires : name=value, cod´es au e format URL et s´par´es par le symbole &. Le format de codage URL est le e e suivant : – les caract`res non ASCII (ceux dont le code est sup´rieur ` 128) sont e e a remplac´s par la chaˆ de caract`res %xx o` xx repr´sente le code ASCII e ıne e u e du caract`re en hexad´cimal. e e – les caract`res r´serv´s sont ´galement remplac´s par leur valeur hexad´cimale. e e e e e e – le caract`re espace est remplac´ par le caract`re +. e e e il est absolument n´cessaire de connaˆ e ıtre ce codage pour ´crire des scripts e CGI. En effet, le programme doit savoir d´coder ces chaˆ e ınes. Il est ´galement e possible, en connaissant ce codage, d’appeler directement un script sans passer par la page HTML appelant le script. Le script CGI est identifi´ par l’attribut ACTION de la balise FORM, cet e

´ 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> Pr´nom : <INPUT TYPE="text" NAME=prenom SIZE=20><BR> e 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 script est le fichier treat.pl qui se trouve sur le serveur www.april.org (dans le r´pertoire /usr/lib/cgi-bin/ comme nous l’avons vu pr´c´demment). L’attrie e e but METHOD de la balise FORM sp´cifie le mode de transfert des donn´es vers e e le serveur. On peut en distinguer deux : GET et POST. Dans la m´thode GET le navigateur concat`ne ` l’URL pr´cis´e par l’ate e a e e tribut ACTION, le symbole ? et la chaˆ contenant les donn´es saisies par ıne e l’utilisateur. Et lorsque l’utilisateur clique sur le bouton ”Envoyer” on acc`de ` e a cet URL. Dans la m´thode POST la chaine contenant les donn´es saisies par l’utilisae e teur est ins´r´e dans le corps de la requˆte HTTP. ee e Si dans notre formulaire, on saisit pour le pr´nom ”Marcel”, pour le nom e ”Dugenou” et pour l’ˆge on s´lectionne ”41 ` 60 ans”, la chaˆ transmise sera a e a ıne alors la suivante : Le %E0 correspond au caract`re `. Alors, dans le cas de la m´thode GET on e a e acc´dera ` l’URL suivante : e a Ce qui montre, par ailleurs, que l’on peut donc directement acc´der ` un e a script CGI, en lui passant ses param`tres de cette fa¸on. Ceci peut ˆtre tr`s e c e e dangereux si on n’´crit pas ses scripts avec beaucoup de pr´cautions. e e Dans le cas de la m´thode POST on acc´dera ` l’URL suivante : e e a et la chaˆ prenom=Marcel&nom=Gnou&age=41+%E0+60+ans est ins´r´e dans ıne ee le corps de la requˆte, et donc le programme ira r´cup´rer cette chaˆ sur son e e e ıne entr´e standard. e http://www.april.org/cgi-bin/treat.pl?prenom=Marcel&nom=Gnou&age=41+%E0+60+ans

12.4. SAISIE ET TRAITEMENT DES CHAMPS D’UN FORMULAIRE 163 http://www.april.org/cgi-bin/treat.pl

12.4.1

R´cup´ration des informations en Perl et en shell e e

Nous avons ´crit le formulaire, on a vu comment transmettre les informations e au script (GET ou POST), maintenant on va ´crire le programme. e Pr´cisons tout de suite le rˆle du programme externe : e o – d’abord r´cup´rez les donn´es saisies par l’interm´diaire du formulaire. e e e e – traiter ces donn´es e – enfin, fournir sur sa sortie standard le r´sultat qui sera alors transmis au e client (le navigateur). La premi`re chose qui nous int´resse est d’extraire l’information envoy´e par e e e le navigateur ` l’aide du formulaire. La m´thode d´pend en fait de celle choisie a e e dans le formulaire. Dans le cas de la m´thode GET, l’information est contenue dans la variable e d’environnement QUERY STRING, qui a pour longueur la valeur de la variable CONTENT LENGTH. Ainsi dans notre exemple pr´c´dent, la variable contiendra la e e chaˆ prenom=Marcel&nom=Gnou&age=41+%E0+60+ans. ıne Dans le cas de la m´thode POST, le programme r´cup`re les informations e e e sur son entr´e standard. e Pour mettre en pratique ces principes, nous allons juste ´crire un programme e qui r´cup`re les informations, les d´code et qui ´crit sur sa sortie standard une e e e e page HTML contenant les donn´es d´cod´es (que le navigateur affichera alors). e e e La partie traitement des donn´es n’est pas abord´e ici car cela d´pend de ce que e e e doit faire votre programme, et il n’y a rien ` dire de sp´cifique par rapport au a e sujet. Nous allons utiliser deux langages diff´rents : Perl et le shell. e En g´n´ral, la phase de r´cup´ration des donn´es est toujours la mˆme, ce e e e e e e qui permet d’´crire des fonctions d’extraction r´utilisables. e e Voyons le code source de treat.pl : Etant donn´ que la m´thode choisie est GET, on r´cup`re les donn´es dans e e e e e la variable QUERY STRING, par la ligne : $buffer=$ENV{"QUERY STRING"} ;. Si nous avions, au niveau du formulaire, choisi la m´thode POST, nous aurions e r´cup´r´ les donn´es par la ligne : read(STDIN,$buffer,$ENV{"CONTENT LENGTH"}) ;. e ee e La variable CONTENT LENGTH contenant la longueur de QUERY STRING. Pour bien comprendre l’exemple, il faut ´videmment connaˆ e ıtre Perl. Les commentaires mis dans le programme l’explicitant un peu. Nous pouvons ´crire le programme avec d’autres langages, voici le code e source de treat.sh ´crit en shell. e Il suffit de remplacer treat.pl par treat.sh dans la balise FORM du formulaire. L’algorithme de d´codage utilis´ est le suivant (la chaˆ ` traiter ´tant dans e e ıne a e notre exemple prenom=Marcel&nom=Gnou&age=41+%E0+60+ans : – r´cup´ration des paires name=value (qui sont s´par´es par le caract`re e e e e e &). 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) ; – s´paration de chaque paire en name et value e

´ 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=value local(@champs) = split(/&/, $buffer); local($donnees) = ""; # affichage du debut du code HTML printf 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 printf printf printf printf printf STDOUT STDOUT STDOUT STDOUT STDOUT STDOUT "<H1>R&eacute;sultat du traitement de votre questionnaire</H1>"; "<H2>Chaine de donn&eacute;es re¸ue par le programme</H2>"; c "QUERY_STRING <STRONG>%s</STRONG>",$buffer; "<H2>Liste des informations d&eacute;cod&eacute;es</H2>"; "<UL>"; "<BL>";

# recuperation et mise en forme des donnees # on parcourt la liste des paires name=value foreach $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 resultat printf STDOUT "<LI><STRONG>%s:</STRONG>%s\n",$key,$val; } printf STDOUT "</BL>"; printf STDOUT "</UL>"; printf STDOUT "</BODY>"; printf STDOUT "</HTML>";

12.4. SAISIE ET TRAITEMENT DES CHAMPS D’UN FORMULAIRE 165

#!/bin/sh # if [ "$REQUEST_METHOD" = "POST" ]; then read QUERY_STRING fi # on split la chaine de donnees en des paires name=value OPTS=‘echo $QUERY_STRING | sed ’s/&/ /g’‘ echo echo echo echo echo echo echo echo echo echo echo "Content-type: text/html" "" "<HTML><HEAD>" "<TITLE>Reponse au questionnaire</TITLE>" "</HEAD>" "<BODY BGCOLOR=\"#ffffff\">" "<H1>R&eacute;sultat du traitement de votre questionnaire</H1>" "<H2>Chaine de donn&eacute;es re¸ue par le programme</H2>" c "QUERY_STRING <STRONG>"$QUERY_STRING "</STRONG>" "<H2>Liste des informations d&eacute;cod&eacute;es</H2>"

# recuperation et mise en forme des donnees # on parcourt la liste des paires name=value echo "<UL>" echo "<BL>" for opt in $OPTS do NAME=‘echo $opt | sed ’s/=/ /g’ | awk ’{print $1}’‘ VALUE=‘echo $opt | sed ’s/=/ /g’ | awk ’{print $2}’ | printf "<LI><STRONG>$NAME:</STRONG>$VALUE" done echo "</BL>" echo "</UL>" echo "</BODY></HTML>"

sed ’s,%,\\\x,g’ | sed ’s/+/ /g’‘

´ 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 en leur valeur alphanum´rique. e Les deux m´thodes GET et POST diff´rencient le moyen de communication e e entre le serveur et le programme. La m´thode GET est limit´e par la taille e e maximale accept´e par le serveur au niveau d’un URL, la m´thode POST n’´tant e e e pas restreinte par cette limite. Testez le formulaire et son script sur http://www.april.org/groupes/doc/cgi-bin/form.html

12.4.2

Les variables d’environnement

Les scripts CGI peuvent acc´der aux variables d’environnement. Selon les e syst`mes, on peut acc´der ` un nombre plus ou moins important de variables e e a d’environnement. Certaines variables sont relatives au serveur HTTP (par exemple HTTP HOST contient l’adresse IP de la machine h´bergeant le serveur HTTP). D’autres e sont relatives ` la connexion client-serveur (par exemple REMOTE ADDR contient a l’adresse IP de la machine cliente effectuant la requˆte. Enfin, certaines sont e relatives ` la requˆte (par exemple QUERY STRING contient la chaˆ contenant a e ıne les informations de la requˆte). e Voici deux programmes permettant l’acc`s ` l’ensemble des variables d’ene a vironnement, le premier en C, le deuxi`me en Perl : e Code de env.c : Code de env.pl : Il suffit alors de compiler env.c et de copier l’ex´cutable r´sultant dans le e e r´pertoire des cgi-bin du serveur. Pour le script Perl, il suffit de le copier dans e le r´pertoire, en n’oubliant pas de le rendre lisible et ex´cutable par tous. e e Cliquez sur les liens suivants pour voir le r´sultat : e http://www.april.org/cgi-bin/env et

´ 12.5. DEBOGUER UN SCRIPT CGI #!/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";

167

http://www.april.org/cgi-bin/env.pl

12.5

D´boguer un script CGI e

Vous venez de terminer la lecture de ce document, d’installer avec succ`s e votre serveur HTTP, d’´crire un script CGI en vous basant sur les exemples e fournis. Vous lancez votre navigateur pour faire un test. D’ailleurs, ` ce propos, a utilisez bien Ouvrir URL pour acc´der au script, et non pas Ouvrir Fichier. e Si votre machine s’appelle yoda, et que vous avez plac´ le script date.cgi dans le e r´pertoire des scripts CGI, vous devez ouvrir l’URL http ://yoda/cgi-bin/date.cgi. e Et l`, que voyez-vous apparaˆ a ıtre ` la place de la sortie attendue de votre a programme ? Le navigateur vous affiche une erreur du genre Internal server error. Affreux. Nous voil` donc lanc´ dans l’enfer du debug d’un script CGI. Disons tout de a e suite que le debug d’un script CGI n’est pas tout ` fait le mˆme probl`me que a e e le debug d’un programme normal. En effet, la plupart des programmes que vous avez ´crits jusqu’` maintenant e a ´taient lanc´s directement ` partir de la ligne de commande. Ce n’est pas le cas e e a des scripts CGI. Ils sont ex´cut´s par une autre programme, le serveur HTTP, e e et souvent sur une machine diff´rente de celle sur laquelle ils ont ´t´ ´crits. e eee Si au lieu de la sortie attendue de votre programme, vous voyez s’afficher le code source du programme c’est que le serveur HTTP n’est pas configur´ pour e pouvoir ex´cuter des scripts CGI. Contacter l’administrateur du serveur, ou si e c’est votre propre serveur relisez la partie 12.1.3 (Installation du serveur) pour voir si vous l’avez correctement configur´. e Le secret du debug est donc de bien comprendre que c’est le serveur HTTP qui ex´cute le programme. e Gardons cela en tˆte, et commen¸ons le debug de notre programme. e c La premi`re chose ` v´rifier est que le programme soit ex´cutable par tous e a e e dans le cas d’un programme compil´, et lisible et ex´cutable par tous dans le e e cas d’un script. Ceci parce que le serveur s’ex´cute sous un nom d’utilisateur e diff´rent du votre. Donc une fois votre programme install´ dans le r´pertoire e e e ad´quat n’oubliez pas de faire un petit chmod 555 date.cgi, par exemple. e Si cela ne marche toujours pas, il faut essayer d’ex´cuter le programme sur e la ligne de commande pour voir ce qu’il affiche en sortie. En effet, quand votre programme est ex´cut´ par le serveur HTTP, le r´sultat de sa sortie est envoy´ e e e e

´ 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. Votre programme peut donc s’ex´cuter correctement sur le serveur, afficher quelque e chose sur sa sortie standard, mais cette sortie est peut-ˆtre incoh´rente pour le e e navigateur, qui vous affiche alors un message d’erreur. Ex´cutez donc votre programme sur la ligne de commande, qu’affiche t’il e en sortie ? Comme nous l’avons d´j` vu pr´c´demment, la premi`re ligne afea e e e fich´e doit ˆtre le champ Content-Type du header HTTP, suivi par une ligne e e blanche. Si ce n’est pas le cas, corrigez-le. Une erreur fr´quente est, en lane gage C, l’instruction suivante : printf("Content-Type : text/html\n") ;. Cette instruction est syntaxiquement correcte, mais elle n’affiche pas de ligne blanche apr`s l’affichage de la chaˆ e ıne. Le \n ne fait aller qu’` la ligne. Il faut a deux newline. L’instruction correcte est la suivante : printf("Content-Type : text/html\n\n") ;. Ceci est une des erreurs les plus fr´quement commises au e d´but de la programmation de scripts CGI. Le reste de l’affichage, apr`s le heae e der et la ligne blanche, doit ˆtre coh´rent avec le header. Donc, dans ce cas de e e figure, 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 ˆtre suffisant si votre programme ne traite aucune donn´e e e en entr´e. Mais si votre programme traite des donn´es, par exemple par l’ine e term´diaire d’un formulaire (voir le deuxi`me exemple), il faut tester le proe e gramme dans les conditions les plus proches du r´el, et donc lui passer des e arguments en entr´e. e Si le formulaire utilise la m´thode GET, votre programme r´cup`re les e e e donn´es par l’interm´diaire de la variable d’environnement QUERY STRING. On e e peut alors facilement affecter une valeur ` cette variable sous le shell. Par a exemple, en bash : export QUERY_STRING="prenom=Marcel&nom=Gnou&age=41+%E0+60+ans" Il faut affecter une valeur la plus proche possible du r´el (donc ´ventuellement e e avec les %xx correspondant aux caract`res accentu´s et r´serv´s). On peut alors e e e e ex´cuter le programme sur la ligne de commande et ´tudier sa sortie. e e Enfin, si votre script doit ˆtre install´ sur une autre machine que celle sous lae e quelle vous l’avez ´crit, pensez ` v´rifier les chemins (path) des programmes que e a e vous utilisez. Dans l’exemple de date.cgi, le programme peut planter (et donc votre navigateur vous affiche un message d’erreur), si par exemple le programme date ne se trouve pas dans le r´pertoire /bin. Votre programme, donnant une e sortie correcte sur votre machine, ex´cut´ sur l’autre machine, affichera en sore e tie :

´ 12.5. DEBOGUER UN SCRIPT CGI ./date.cgi: /bin/date: command not found Content-type: text/html <HTML><HEAD><TITLE>Script Cgi</TITLE><HEAD> <BODY> <CENTER> <H1>La date courante sur le serveur est</H1>

169

</CENTER> </BODY> </HTML> Ce qui, vous en conviendrez, n’est pas une sortie correcte. Le probl`me peut e se poser ´galement avec les scripts ´crits en Perl. En effet, dans nos exemples, on e e supposait que Perl se trouvait dans le r´pertoire /usr/bin/ (premi`re ligne de e e nos scripts : # !/usr/bin/perl). Si sur la machine sur laquelle doit s’ex´cuter e notre programme perl ne se trouve pas dans ce r´pertoire nous aurions commme e sortie : ./env.pl: No such file or directory Ce qui n’est pas une sortie attendue par un navigateur.

´ 170CHAPITRE 12. EXECUTION DE PROGRAMMES CGI SUR UN SERVEUR WWW

Chapitre 13

Samba
13.1 Introduction

Samba sur une machine Unix offre les mˆmes services aux machines Windows e qu’un serveur Windows NT : serveur de fichier et d’impression. Samba (de Andrew Tridgell) est un serveur de fichiers et d’impression fonctionnant en UNIX, sur Linux en particulier et compatible avec les clients r´seau e Microsoft. Il rend (` peu pr`s) les mˆmes services que Windows NT serveur. a e e Donc on peut se passer de ce dernier. Il permet aux utilisateurs Windows d’acc´der ` des ressources UNIX et inversement aux utilisateurs Unix d’acc´der e a e aux ressources partag´es par les machines Windows. Utilit´ pour Windows : e e – acc`s ` des ressources distantes comme si elles ´taient locales e a e – manipulation des fichiers distants ”` la souris” a – espace disque suppl´mentaire pour chaque utilisateur (s´curis´ par des e e e sauvegardes) – espace commun pour ´changes de fichier e – acc`s aux imprimantes r´seau e e – acc`s au lecteur de cartouches pour sauvegardes e – distribution de logiciels – partage de logiciels

13.2

Protocoles Microsoft

SMB (Server Messaging Block) est le protocole utilis´ par Microsoft pour e partager fichiers et imprimantes entre WfWg, W95, W98, WNT. C’est une sorte de NFS. SMB est ´galement appel´ le protocole NetBIOS (Microsoft a repris le Nete e Bios d´velopp´ par IBM et qui a ´t´ port´ sur IP, NBT : NetBios over IP, RFC e e ee e 1001-1002) ou LanManager. CIFS (Common Internet File System) g`re les fonctions de type NFS. e L’int´rˆt de SMB est qu’il peut fonctionner soit sur NetBeui, soit sur IPX, ee (deux protocoles qu’on se d´pˆche d’oublier), soit sur IP. Nous l’utilisons ´videmment e e e sur IP. Types de serveurs : – Domain Controler 171

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 Server Samba-3 ´mule un NT4 Style Domain Controler ` l’exception des pˆssibilit´s e a o e de r´plication SAM. e Samba-3 peut ˆtre membre actif d’un Win2k Active Directory Domain. Mais e il n’a pas toutes les fonctionnalit´s d’un Active Directory Primary Domain e Controler. Les machines Windows peuvent interagir de deux mani`res : e – 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 enregistr´e dans la Domain account database. e Quelques concepts : – Workgroup (groupe de travail) : ensemble de machines auxquelles on acc`de (notion Windows 3.11 for workgroups) e – Name registration : Nom d´clar´ par une machine quand elle se connecte e e au r´seau, (doit ˆtre unique). Il est recommand´ de prendre le mˆme nom e e e e que le nom de domaine Internet – Sharename (Partage) : nom de la ressource partag´e (r´pertoire disque e e ou imprimante) – Browse : fonction ` deux niveaux : a 1. Visualiser la liste des machines qui partagent des ressources. 2. Visualiser les ressources partag´es par une machine. e – Browse list : liste des machines du workgroup – Local Browse Master : machine qui tient ` jour la browse list. N’ima porte quelle machine Windows peut ˆtre Local Browse Master (il y a un e concours). Chaque machine qui partage un service, l’annonce par un message broadcast. – Domain Browse Master : machine qui r´unit les browse lists de Worke groups r´partis sur diff´rents sous-r´seaux IP. e e e – Domain : En 1`re approximation un Domain est un Workgroup avec un e Domain Controler. – WINS : Windows Internet Name Services. WNT serveur ou Samba font serveur WINS. Le serveur WINS permet la traduction de noms NetBIOS (SMB) en adresse IP. WINS permet aussi aux clients d’avoir des informations sur les NetBIOS name type. Si un WNT serveur existe, le prendre comme serveur WINS. Sinon prendre Samba. Chaque machine Microsoft ou Samba doit indiquer le serveur WINS. – Microsoft Domain Security : permet en se loggant sur n’importe quelle machine du domaine de se retrouver dans son propre environnement. – Domain Controler : assure l’authentification des utilisateurs (g`re un e syst`me userid/password = Security Account Manager -SAM-). G`re aussi e e des logon scripts et des profils utilisateurs. – PDC : Primary Domain Controller en NT

13.2. PROTOCOLES MICROSOFT

173

– BDC : Backup Domain Controller en NT : simple copie d’un PDC Noms NetBIOS : suite d’au plus 15 caract`res plus un caract`re de type e e cod´ en hexa : e – 00 Standard Workstation Service – 20 Serveur de fichiers (et d’imprimantes) (d´faut) e – 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 Utility Types de noms de groupe : – 00 Groupe standard – 1c Serveur de logons – 1d Master Browse Name – 1e Normal group Name – 20 Internet group Name e – 01 MSBROWSE (utilis´ 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 r´seau Microsoft sur Wine dows

En W98 : – D´marrer/Param`tres/Panneau de configuration e e – Double cliquer l’icˆne r´seau o e – Ajouter : Clients/Microsoft/Client pour les r´seaux Microsoft e – Ajouter : Protocoles/Microsoft/TCP-IP – Configurer en s´lectionnant TCP-IP/Propri´t´s : remplir adresse IP ... e ee – 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 propri´taire, par exemple. e – Optionnel : Si on veut utiliser Samba comme un PDC, s´lectionnez Clients/Microsoft/”Client e pour les r´seaux Microsoft”. Dans ”Propri´t´s” : cocher la case ”ouvrir la e ee

174

CHAPITRE 13. SAMBA

session sur un domaine NT”, et indiquer le nom du DOMAINE qui est identique au WORKGROUP. – S´lectionnez ”Partage de fichiers et d’imprimantes” e – Onglet : Contrˆle d’acc`s o e Par suite, une icˆne ”voisinage r´seau” (Network Neighborhood) apparaˆ o e ıt sur le bureau. Quand on clique cette icˆne apparaissent toutes les machines o (Windows ou Unix-Samba) du groupe de travail. A l’entr´e de Windows apparaˆ e ıtra une fenˆtre demandant nom d’utilisae teur et mot de passe. On verra que pour acc´der au serveur Samba, ces usee rids/passwords doivent ˆtre d´finis en Unix (voir security=user plus loin). e e Si on a s´lectionn´ ”ouvrir la session sur un domaine NT” un 3`me champ e e e apparaˆ dans cette fenˆtre : ”Groupe de travail” ıt e

13.3
13.3.1
– – – – – –

Commandes Lan-Manager sous DOS
Commandes net

– –

Usage : net /h|more Marche : net start Arrˆt : net stop e Liste des serveurs et des partages : net view Liste des partages d’un serveur : net view \\serveur Acc`s ` un disque d’une machine distante : e a net use e: \\zoroastre\tmp e: dir net use e: /delete (fermeture de l’acc`s au disque) e Fermeture de l’acc`s ` un disque distant : e a net use e: /delete Acc`s ` une imprimante distante : e a net use lpt2: \\zoroastre\hp5m type fichier>lpt2 net use lpt2: /delete Fermeture de l’acc`s ` une imprimante distante : e a net use lpt2: /delete zoroastre est le nom du serveur, hp5m, le nom de l’imprimante, lpt2 le nom local sous lequel l’imprimante est d´clar´e e e synchronisation horloge : net time \\serveur /set/ yes

13.3.2

Interrogation de noms NetBIOS

nbtstat -a NetBIOS name

13.4
13.4.1

Le logiciel Samba
Installation

Version : Sur Debian woody 2.2.3a-15, sur Debian sarge 3.0.14a-3. Site www : http ://fr.samba.org

13.5. CONFIGURATION DE SAMBA

175

Packages Debian : samba, samba-common, smbclient, samba-doc. samba-doc est facultatif. smbclient l’est aussi mais tr`s utile pour tester en Linux le fonce tionnement d’un serveur Samba. Debian fait ` l’installation une configuration par sambaconfig qui propose a de d´marrer samba ` travers inetd (d´conseill´) ou comme daemon, de cr´er un e a e e e fichier /etc/samba/smbpasswd et de d´marrer samba s’il est en daemon. Ces e param`tres sont rang´s dans /etc/samba/debian config e e

13.4.2

Description

– Le serveur est constitu´ de deux daemons : e – smbd : serveur SMB : g`re les acc`s aux ressources partag´es e e e – nmbd : serveur de noms Netbios : permet de localiser les serveurs – Fichier de configuration : /etc/samba/smb.conf – Ports TCP et UDP : Entr´es dans /etc/services e netbios-ns 137/tcp # NETBIOS Name Service netbios-ns 137/udp netbios-dgm 138/tcp # NETBIOS Datagram Service netbios-dgm 138/udp netbios-ssn 139/tcp # NETBIOS session service netbios-ssn 139/udp – D´marrage des daemons : En Debian /etc/init.d/samba start Remarque : e smbd et nmbd peuvent ˆtre d´marr´s par inetd e e e – Test : testparm|more smbclient -L serveur_samba netstat -a|grep netbios Le test d´terminant est l’acc`s depuis Windows. e e

13.4.3
– – – –

Utilitaires

testparm : test de la configuration de Samba configuration testprns lp : teste l’acc`s ` l’imprimante lp e a 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 propos´e sous debconf Tout e le param´trage est regroup´ dans le fichier : /etc/samba/smb.conf e e Quand on modifie smb.conf il faut relancer Samba.

176

CHAPITRE 13. SAMBA

13.5.1

Structure et syntaxe

Le fichier est fait de sections (nom entre crochets) et de param`tres (nom = e valeur). La casse des caract`res est indiff´rente. Une ligne commen¸ant par ; ou e e c # est ignor´e. e ; ; /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 param`tres d´finis dans la section global sont valables dans les autres e e sections. Exemple : [global] printing = bsd printcap name = /etc/printcap load printers = yes guest account = nobody invalid users = root hosts allow = 193.54.230. 127. security = user workgroup = PHASE server string = %h server (Samba %v) socket options = IPTOS_LOWDELAY TCP_NODELAY SO_SNDBUF=4096 SO_RCVBUF=4096 socket address = 193.54.230.121 interfaces = 193.54.230.121 encrypt passwords = true smb passwd file = /etc/samba/private/smbpasswd wins support = yes ; wins server = 172.16.0.10 os level = 65

13.5. CONFIGURATION DE SAMBA ; domain master = no local master = yes preferred master = yes name resolve order = host wins bcast max log size = 1000 debug level = 0

177

Explications : voir man smb.conf – printing : type de syst`me d’impression Unix : BSD, SYSV, LPRNG, ... e – printcap name : nom du fichier o` les imprimantes sont d´finies u e – load printers : si yes (d´faut) toutes les imprimantes du fichier printcap e sont rendues visibles. – guest account : userid utilis´ pour les services ”guest ok”. Par exemple e un client lira la browse list tenue par samba comme guest. Si guest account est absent, il ne pourra le faire. – invalid users : liste d’utilisateurs interdits – hosts allow : adresses IP des machines autoris´es ` acc´der au service. e a e 193.54.230. d´signe un r´seau de classe C e e – security : si user (d´faut) le userid/password donn´ en entr´e de session e e e Windows doit ˆtre d´fini sur Unix (/etc/passwd ...) e e – encrypt passwords : par d´faut en W98 et WNT les passwords sont e crypt´s (il faut modifier la base de donn´es de registres pour qu’ils soient en e e clair). Il est recommand´ maintenant de mettre encrypt passwords=yes. e – smb passwd file : nom du fichier des mots de passe. En version 3.0, les mots de passe sont g´r´s dans une base de donn´es SAM. Cette ligne ee e est remplac´e par : passdb backend = tdbsam guest. Les mots de passe e sont dans le fichier /var/lib/samba/passdb.tdb et manipul´s par la come mande pdbedit. Au passage de la version 2.2 ` 3.0 l’installateur Debian a propose une conversion automatique. – workgroup : nom du groupe de travail. On n’utilise pas les domaines NT. – server string : chaˆ de caract`res apparaissant en commentaire dans ıne e la ”Browse List”. %h d´signe le nom du serveur, %v la version de Samba. e – socket options : param`tres d’optimisation de l’interface r´seau e e – socket address : adresse IP ´cout´e par Samba. Utile en cas de IPe e aliasing. – interfaces : pr´cise le ou les interfaces r´seaux ` utiliser pour le browsing, e e a 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-r´seaux IP) e – local master : yes Samba tiendra ` jour la browse list de son workgroup a – preferred master : force nmbd ` gagner le concours de master browser a au d´marrage e – name resolve order : ordre de consultation des services de noms pour r´soudre les hostnames en adresses IP. host d´signe le fichier /etc/hosts e e et le serveur DNS, wins interroge le WINS server, bcast l’envoi d’un broadcast.

178

CHAPITRE 13. SAMBA

– max log size : taille en Kilooctets du fichier log apr`s quoi smbd le pr´fixe e e en .old et en recr´e un autre. Fichiers log : Depuis Samba 2.2 ils sont en e Debian dans /var/log/samba/. Ce sont /var/log/samba/log.smbd et /var/log/samba/log.nmbd – debug level : niveau de debug (si probl`me, voir les messages dans fie chiers logs.)

13.5.3

Partage

Un partage (share) ou service est d´fini par un r´pertoire auquel il permet e e d’acc`der et des conditions d’acc`s. C’est soit un partage de fichiers, soit un e e partage d’imprimante. Les droits d’acc`s aux fichiers sont conditionn´s par les e e permissions Unix.

13.5.4

Section ”homes”

Si une section ”homes” existe, ` la connexion d’un utilisateur un partage est a cr´´ ` la vol´e avec pour nom son userid, pour chemin d’acc`s (path) son home ee a e e directory et comme param`tres ceux de la section ”homes”. Cela suppose que e l’utilisateur Windows a un login Unix. Ces partages ne seront accessibles qu’` a leur propri´taire. e [homes] comment = Home Directories browseable = no read only = no create mask = 0755 directory mask = 0755 – browseable Si no, n’apparaˆ pas dans la browse list. ıt – create mask : Les permission sur les fichiers Linux sont obtenues en faisant un AND logique entre ce masque et le DOS mode. La valeur par d´faut de ce masque enl`ve les permissions write et execute pour group et e e others. Exemples : – create mask = 0700 (c’est l’option par d´faut) donne rw------e – create mask = 0700 donne rw------– create mask = 0700 donne rw------– directory mask : idem pour les r´pertoires e

13.5.5

Section ”printers”

[printers] comment = All Printers browseable = no path = /tmp printable = yes public = no writable = no create mode = 0700

13.5. CONFIGURATION DE SAMBA

179

Toutes les imprimantes d´crites dans /etc/printcap seront acc´d´es comme e e e c’est d´crit ici. path est le r´pertoire o` les fichiers sont stoqu´s avant d’ˆtre e e u e e envoy´s ` l’impression. e a

13.5.6

Partage accessible par tous en lecture/´criture e

Permet aux utilisateurs Windows d’´changer des fichiers sans passer par la e messagerie ou ftp. [tmp] comment = Espace public temporaire path = /tmp read only = no public = yes

13.5.7

Partage accessible par tous en lecture, r´serv´ en e e ´criture e

Ce r´pertoire est public mais seuls christof et weymann ont le droit d’´criture. e e [fournis] comment = Base de donnees des fournisseurs path = /home/fournis public = yes writable = yes printable = no write list = christof, weymann

13.5.8

Partage ` acc`s r´serv´ a e e e

Seul le userid christof peut acc´der ` ce r´pertoire e a e [pv] comment = Pages Web photovoltaique path = /var/www/phase/pv valid users = christof public = no writable = yes printable = no

13.5.9

Authentification

La m´thode recommand´e est d’utiliser security=user et de prendre comme e e userid/password Windows les mˆmes userid/password qu’en Unix. e Si pour un partage on a mis la clause guest ok = yes, alors aucun password n’est demand´ pour l’acc´der. e e Mots de passe crypt´s e [global] security = user

180

CHAPITRE 13. SAMBA

encrypt passwords = yes smb passwd file = /etc/samba/private/smbpasswd Ce fichier /etc/samba/private/smbpasswd ne doit ˆtre lisible que par root. e Faire : chmod 500 /etc/samba/private Passage aux mots de passe crypt´s : e cat /etc/passwd | mksmbpasswd >/etc/samba/private/smbpasswd chmod 600 /etc/samba/private/smbpasswd mksmbpasswd cr´e une entr´e par utilisateurs, mais les passwords crypt´s ne e e e sont pas entr´s. Pour le faire, dans smb.conf ajouter : e encrypt passwords = no smb passwd file = /etc/samba/private/smbpasswd update encrypted = yes Les machines clientes continuent ` envoyer des passwords en clair mais ils a sont entr´s sous forme crypt´e dans /etc/samba/private/smbpasswd. Quand e e ils sont tous entr´s on passe ` la forme crypt´e en modifiant sur le serveur e a e smb.conf ainsi : encrypt passwords = yes smb passwd file = /etc/samba/private/smbpasswd update encrypted = no et sur les clients en modifiant la base des registres pour que les passwords soient crypt´s. e Les passwords peuvent ˆtre modifi´s par l’utilisateur, il suffit de taper smbpasswd e e comme pour passwd de Unix. Documentation :zmore /usr/doc/samba-doc/ENCRYPTION.txt.gz Gestion des mots de passe par tdbedit

13.6
– – – – –

Audit :

testparm : contrˆle la validit´ du fichier de configuration de Samba o e ping : test connectivit´ du client, du serveur e smbclient -L serveur : affiche les partages de la machine serveur netstat -a|grep netbios : contrˆle des sockets ouverts o nmblookup : interrogation de noms NetBios Il y a deux types de r´solution de nom NetBIOS : Broadcast (option -B), e point ` point (option -U). a – nmblookup -B serveur SAMBA : teste d’un serveur Samba (B comme adresse de broadcast) – nmblookup SAMBA : teste tous les serveurs Samba – nmblookup ’*’ : teste toutes les machines actives supportant NetBios/SMB dans la mˆme zone de broadcast e – nmblookup -S serveur : liste les noms d´clar´s par un serveur (S comme e e node status query)

13.7. INCIDENTS

181

[morel@zoroastre morel]$ nmblookup -S zoroastre Sending queries to 193.54.230.255 193.54.230.20 zoroastre<00> Looking up status of 193.54.230.20 received 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 zoroastre pour le nom PHASE (U comme Unicast)

13.7

Incidents

– Si probl`me consultez les log avec un niveau de debug 2 ou 3. e – ”Si je veux aller sur le serveur samba a partir de windows 95 par l’icˆne o Voisinage r´seau. il ouvre une fenetre et me demande un password pour e \\serveur_samba\IPC$ Quel est ce password ? Pourquoi cette requete ?” Soit vous n’avez pas r´pondu ` la question userid/password en d´but de e a e session Windows, soit votre userid/password n’est pas conforme ` celui du a serveur Samba, soit il y a d´saccord sur le cryptage des passwords entre e le serveur et votre machine.En Windows 98 par d´faut les passwords pour e les ´changes r´seau sont crypt´s. Pour l’empˆcher modifier ainsi la base de e e e e registres : D´marrer/Ex´cuter/regedit e e HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Vxd\VNETSUP\ Menu Edit/Nouveau/Valeur DWORD Mettre le nom ` EnablePlainTextPassword a (Attention aux majuscules) S´lectionner ce nom puis e Menu Edit/Modifier/Donn´es de la valeur:00000001 e Puis rebooter.

13.8

Acc`s depuis Unix aux ressources Windows e

Le client Unix est smbclient, il permet d’acc`der aux fichiers et imprie mantes Windows. Le support de smbfs par le noyau Linux permet de monter des filesystems Windows ` travers Samba. a

13.8.1

smbclient : acc`s aux fichiers Windows ` la ftp e a

– smbclient -L zoroastre -U% : liste des partages de la machine zoroastre 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 d´signe le userid. e Si % cela signifie password vide.

182

CHAPITRE 13. SAMBA

– smbclient ’\\zoroastre\public’ -U% : acc`s au partage ”public” de e zoroastre, sans password. On acc`de aux fichiers ` la mani`re de ftp, come a e mandes ls, put, get, faire help On utilise des quotes pour empˆcher le e shell d’interpr´ter ’\’. e – smbclient //aline/java -U% : acc`s au partage java de la machine aline. e On remarque qu’on peut utiliser ’/’ au lieu de ’\’. Les quotes ne sont plus n´cessaires. e

13.8.2

Messages Winpopup

echo "salut Eric"| smbclient -M canyon : message envoy´ ` Winpopup ea de la machine canyon.

13.8.3

smbtar

smbtar est un shell script qui appelle smbclient. Il permet de sauver sur un lecteur de cartouche Unix les fichiers d’un partage Windows. Appel : smbtar -s aline -x java -t /dev/nst0 -v sauvegarde par tar le partage java de la machine de nom NetBIOS aline sur le lecteur de cartouches SCSI /dev/nst0 en mode verbose.

13.8.4

smbmount

Le support de smbfs doit ˆtre configur´ dans le noyau et, en Debian, il faut e e le package smbfs. – smbmount-2.0.x //aline/java smb -n : monte le partage java de la machine aline sur le r´pertoire smb sans mot de passe (-n). Il n’est pas e n´cessaire d’ˆtre root. e e – smbmount-2.0.x -h : d´crit les options e – smbumount-2.0.x smb : d´monte le filesystem e

13.8.5

smbprint

smbprint est un shell script qui appelle smbclient pour envoyer un fichier ` a imprimer sur une imprimante Windows. Pour imprimer il suffit de se connecter ` un service d’impression et de faire a print 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:\

13.9. APPLICATIONS DE SAMBA :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 .config server=ananda service=laser password="" Ex´cute : e (echo "print -"; cat)| smbclient ’\\ananda\laser’

183

13.9
13.9.1

Applications de samba
Distribution de logiciels pour Windows

Au lieu de faire une installation d’un logiciel sur le disque local d’une machine, il peut ˆtre install´ sur un partage d’un serveur Samba par exemple. e e

13.9.2

Fonction Primary Domain Controller de Samba

Comme WNT, Samba peut authentifier les utilisateurs Windows et d´finir e un environnement personnalis´ : raccourcis du menu d´marrer, icones du bureau, e e pr´f´rences comme fond d’´cran ou couleurs que chacun retrouvera quelque soit ee e la machine sur laquelle il se connecte. Cette fonctionnalit´ n’est disponible qu’` partir de Samba 2.1 pour des e a clients Windows NT. Pour W85/98, dans Configuration R´seau s´lectionnez e e Clients/Microsoft/Client pour les r´seaux Microsoft Dans ”Propri´t´s” : cocher e ee la case ”ouvrir la session sur un domaine NT”, et indiquer le nom du DOMAINE qui est identique au WORKGROUP. Script de logon Cela se fait par un fichier *.bat rang´ sur le serveur Samba. e [global] security=user domain logons = Yes logon script=%U.bat [netlogon] comment = Network Logon Services path=/home/samba/netlogon writeable= no guest ok = no browseable = no locking = no case sensitive = no

184

CHAPITRE 13. SAMBA

%U prend comme valeur le nom de l’utilisateur. Le partage netlogon est l’endroit o` sont rang´s les scripts *.bat. Ainsi pour l’utilisateur dupond il y aura u e un fichier : /home/samba/netlogon/dupond.bat Exemple d’un script dupond.bat echo Mise a l’heure net time \\zoroastre /set /yes echo Ouverture de partages net use h: \\zoroastre\tmp Ce script sera ex´cut´ sous Windows, il doit avoir des fins de ligne ` la e e a MSDOS. Le script de logon peut ˆtre collectif, par exemple : e logon script=startup.bat Profil mobile (roaming profile) Il permet de garder le mˆme environnement de travail tout en changeant de e machine : l’environnement est stock´ sur le serveur. e [global] domain logons = yes security = user logon path = \\zoroastre\profile\%U [profile] comment = User profiles path = /home/samba/profile create mode = 0600 directory mode = 0700 writable = yes browsable = no Le partage profile contiendra les profils utilisateurs. Par exemple le r´pertoire e /home/samba/profile/dupond. Des fichiers sont copi´s dans ce r´pertoire ` la e e a 1`re connexion, notamment un user.dat. e L’utilisateur Windows peut changer son profil. L’administrateur peut rendre un profil obligatoire (mandatory) en renommant user.dat en user.man et en mettant les fichiers read-only.

13.9.3

Installation partag´e de drivers d’imprimante pour e W9x

Quand on clique depuis W95 sur une imprimante partag´e par Samba, le e driver peut-ˆtre install´ automatiquement comme depuis un serveur WNT. e e Ceci ne marche pas sur WNT. 1. Cr´er un r´pertoire et un partage par exemple : e e [printer$] comment = Pilotes d’imprimante

13.9. APPLICATIONS DE SAMBA path=/home/samba/printer public=yes writable=no browseable=yes 2. Installer les drivers sur une machine W95. 3. Rep´rer les drivers n´cessaires pour une imprimante. Copier e e c:\windows\inf\msprint*.inf sur Linux dans /home/samba/lib. Ex´cuter, par exemple : e

185

cd /home/samba/lib make_printerdef msprint.inf "Apple LaserWriter" >> printers.def ce programme affiche sur stderr tous les fichiers n´cessaires. Copiez les e dans /home/samba/printer 4. Ajoutez deux param`tres dans /etc/samba/smb.conf. Dans la section e [global] ’printer driver file’ doit pointer sur printers.def que l’on vient de cr´er. L’autre ’printer driver location’ pour chaque e partage d’imprimante pointe sur le r´pertoire o` le client trouvera les e u drivers Exemple : [global] printer driver file=/home/samba/lib/printers.def [lp] comment = My old printer laser browseable = yes printable = yes public = yes writable = no create mode = 0700 printer driver=Apple LaserWriter printer driver location=\\%h\printer$ %h donnera le nom du serveur Samba, et printer$ est le nom du partage cr´´ plus haut. ee Voir /usr/doc/samba-doc/PRINTER DRIVER.txt.gz

13.9.4

Serveurs virtuels

La commande netbios aliases permet ` un serveur de porter plusieurs a noms NetBios. La commande include permet d’inclure de mani`re dynamique des pae ram`tres de configuration. e [global] netbios aliases = admin other include = /etc/samba/smb.conf.%L

186

CHAPITRE 13. SAMBA

Ici le serveur apparaˆ ıtra dans le voisinage r´seau des clients sous son nom e par exemple zoroastre et aussi sous admin et other. %L prendra les valeurs zoroastre, admin et other. Le fichier /etc/samba/smb.conf.admin peut contenir une section global et des partages. S’il n’existe pas, cela ne fait pas d’erreur.

Chapitre 14

Netatalk : serveur AppleTalk
14.1 Une impl´mentation du protocole Applee Talk en Unix BSD like

Netatalk est une impl´mentation du protocole AppleTalk pour les syst`mes e e voisins 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 la suivante : AFP | ASP PAP \ / ATP RTMP NBP ZIP AEP | | | | | -+---------------------------------------------------+- (kernel boundary) | Socket | +-----------------------+------------+--------------+ | | TCP | UDP | | DDP (kernel) +------------+--------------+ | | IP | +-----------------------+---------------------------+ | Network-Interface | +---------------------------------------------------+

– Couche r´seau : e – DDP : Datagram Delivery Protocol – Couche transport : – RTMP : Routing Table Maintenance Protocol (´met un paquet RTMP e tous les 10 secondes) – AEP : Appletalk Echo Protocol : ping utilis´ au d´part de chaque e e session 187

188

CHAPITRE 14. NETATALK : SERVEUR APPLETALK

– ATP : Appletalk Transaction Protocol : assure la livraison des paquets sans perte – NBP : Name Binding Protocol : assure la correspondance entre adresses Appletalk et entit´s nomm´es sous la forme ”objet :type@zone”. Le e e s´lecteur du Mac permet de s´lectionner les entit´s nomm´es. e e e e – Couche session : – ASP : Appletalk Session Protocol : sert ` ´tablir une session ae – PAP : Printer Access Protocol : fait communiquer une station et un service d’impression – ZIP : Zone Information Protocol permet avec RTMP de g´rer la correse pondance entre num´ros de r´seaux et noms de zone. e e – Couche pr´sentation : e – AFP : AppleTalk Filing Protocol : permet d’acc´der ` des fichiers dise a tants, utilis´ par Appleshare. e

14.2

Impl´mentation en Linux e

– DDP est dans le noyau (mettez le de pr´f´rence en module sinon pour ee arrˆter Netatalk vous ˆtes oblig´ de faire shutdown) e e e – atalkd impl´mente RTMP, NBP, ZIP, and AEP. C’est l’´quivalent Ape e pleTalk de ”routed” – afpd donne aux Mac l’acc`s aux filesystem Unix e – papd permet aux Mac l’acc`s aux imprimantes Unix e – pap permet ` Unix l’acc`s aux imprimantes Mac a e

14.3

Documentation :

http://www.umich.edu/\~{}rsug/netatalk/

14.4

Installation

Package Debian netatalk Version : 2.0.2-3 Compilation du noyau : Appletalk DDP doit ˆtre compil´ sous forme de module. Sinon on ne peut e e red´marrer les serveurs netatalk. Il est pr´f´rable d’autoriser le multicast. e ee Appletalk DDP (CONFIG_ATALK) [M/n/y/?] M CONFIG_IP_MULTICAST = Y Le module appletalk fait appel au module psnap qui appelle p8022. D´marrage : Le shell script /etc/init.d/netatalk d´marre les daemons e e afpd papd atalkd. /etc/init.d/netatalk start Starting AppleTalk daemons (this will take a while): Le package libslp1 est requis. Il met en oeuvre le protocole SLP (Service Location Protocol RFC 2614) qui permet de localiser des services.

14.5. CONFIGURATION

189

14.5
14.5.1

Configuration
atalkd

/etc/netatalk/atalkd.conf : en g´n´ral vide. Peut contenir : e e eth0 -phase 2 -net 0-65534 -addr 65280.215 65280.215 est l’adresse de notre machine. Ce fichier peut ˆtre n´cessaire si e e on a plusieurs interfaces r´seau. e

14.5.2

afpd

afpd : daemon interface avec AppleTalk Filing Protocol(AFP) Configuration – /etc/netatalk/afpd.conf : en g´n´ral vide. e e – /etc/netatalk/AppleVolumes.default : r´pertoires accessibles depuis e le chooser d’un Mac # default user-specific volumes to be exported go here. # this file can be overridden by a file named ’AppleVolumes’ in the # user’s home directory. # local directory name of macintosh volume ~/ "Home Directory" – $HOME/.AppleVolumes : contient les r´pertoires auxquels le user ` acc`s e a e – /etc/netatalk/AppleVolumes.system : d´finit les correspondances pour e les extensions de fichiers. Documentationman afpd Dans chaque r´pertoire du serveur Linux o` acc`des un Mac par Netatalk e u e un r´pertoire ”invisible” .AppleDouble est cr´´ qui contient les mˆmes noms de e ee e fichiers que le r´pertoire o` il se trouve. Ces fichiers sont de type AppleDouble e u encoded Macintosh file.

14.5.3

papd

Le serveur papd permet aux Mac d’imprimer sur des imprimantes Unix. Configuration dans /etc/netatalk/papd.conf : 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 faut configurer une imprimante Unix avec les filtres de /usr/lib/atalk/filters/ qui utilisent /usr/sbin/psf.

14.6

Commandes

– aecho (=ping) aecho "LaserWriter Select 360":LaserWriter@* – nbplkup : affiche toutes les entit´s AppleTalk e

190 $ nbplkup

CHAPITRE 14. NETATALK : SERVEUR APPLETALK

zoroastre:AFPServer 65280.102:128 zoroastre:netatalk 65280.102:4 zoroastre:Workstation 65280.102:4 phoebus:AFPServer 65280.8:128 phoebus:netatalk 65280.8:4 phoebus:Workstation 65280.8:4 HP LaserJet 4050 Series :SNMP Agent 65281.4:8 HP LaserJet 4050 Series :LaserWriter 65281.4:157 HP LaserJet 4050 Series :HP LaserJet 65281.4:158 LaserJet 5:SNMP Agent 65281.128:8 LaserJet 5:LaserWriter 65281.128:157 LaserJet 5:LaserJet 5 65281.128:158 direction:ARA - Client-Only 10707.22:2 direction: Power Macintosh 10707.22:252 direction:Workstation 10707.22:4 – Impression depuis Linux sur imprimante Mac – pap -p nbpname file : envoie un fichier sur l’imprimante nbpname Exemple : pap -p"Stylus Color" :EPSONLQ2 fichier – papstatus -p nbpname . Exemple : papstatus -p"LaserWriter Select 360" – Enregistrement de nom dans la base NBP – nbprgstr -p 4 nbpname : enregistre un nom dans la base NBP – nbpunrgstr nbpname : signale ` atalkd que nbpname est parti a – megatron est utilis´ pour transformer des fichiers de BinHex, MacBinary, e AppleSingle, ou les fichiers en format AppleDouble ` la mani`re netatalk a e en MacBinary ou AppleDouble ` la mani`re netatalk. Le format Applea e Double ` la mani`re netatalk est le format de fichier utilis´ par afpd, le a e e Apple Filing Protocol (AppleShare) du serveur netatalk. BinHex, MacBinary, and AppleSingle sont des formats de fichier usuels pour transf´rer des e fichiers Macintosh entre machines par mail ou ftp. Si megatron est appel´ e sous le nom unhex, unbin, ou unsingle, il essaiera de convertir le ou les fichiers de BinHex, MacBinary, ou AppleSingle en format AppleDouble.

14.7

Incidents

Starting AppleTalk Daemons (this will take a while):socket: Address family not s upported by protocol socket: Address family not supported by protocol atalkd: can’t get interfaces, exiting. atalkd afpd papd Cause : le module appletalk n’est pas charg´, faites e modprobe appletalk

Chapitre 15

HylaFAX
HylaFAX est un serveur de Fax sur Unix ´crite par Sam Leffler (1990-1996) e Silicon Graphics Inc. R´f´rences HylaFAX ee – Documentation HylaFAX : http://www.hylafax.org/ – Documentation de votre serviteur : http://www-phase.c-strasbourg.fr/inform/fax.html D´chargement : e 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 r´pandu ` l’heure actuelle. Suit les avis T.30 et T.4 de l’ITU. e a – Group 4 : 1984 : Standard de transmission de fax sur r´seau ISDN (RNIS) e ` 64kbps a

15.1.2

Standards ITU de vitesse de transmission

– V.17 : 14,400 bps, synchrone, half duplex, utilis´ pour la transmission de e l’image – V.29 : 9600 bps, synchrone, half duplex, utilis´ pour la transmission de e l’image – V.27ter : 4800 bps, synchrone, half duplex, utilis´ en repli e – V.21 : 300 bps, utilis´ pour la n´gociation du d´but e e e

15.1.3

Protocoles d’envoi de fax

– ITU T.4 : D´finit le format standard de l’image transmise par fax. L’image e est comprim´e de plusieurs fa¸ons : e c 191

192

CHAPITRE 15. HYLAFAX

– 1-D : sch´ma de codage ` une dimension (ou MH : Modified Hoffman) e a En r´solution ”fine” (7.7 lignes/mm) un fax A4 fait 3.8 millions de pixels e soit 464KB. La compression 1-D le r´duit ` 20-50KB. e a – 2-D : codage ` deux dimensions (ou MR : Modified Read) : rare a – ITU T.30 : D´finit le dialoque entre deux machines de fax sur les lignes e t´l´phoniques. Inclut les standards de modulation et de format de donn´es.Le ee e dialogue se fait en cinq phases : – A - Initialisation de l’appel – B - Proc´dure avant message : identification et choix des options e – C - Transmission du message – D - Proc´dure apr`s message e e – E dit ce qu’il veut faire : – envoi d’une autre page – terminer EOP – demande intervention op´rateur e – R envoie son accus´ de r´ception de la page pr´c´dente e e e e – MCF : message confirmation : bien re¸u c – RTN : retrain negative : il y a des erreurs dans la transmission – si erreur aller ` B a – si autre page aller ` C a – si EOP aller a E ` – E - Fin de communication – Remarque sur T.30 :D´tection d’erreur, mais pas de correction sauf si e extension ECM, Error Correction Mode Les normes de Fax Modems – Classe 1 (1988) EIA/TIA-578 C’est une extension du jeu de commandes Hayes (commandes AT+F...) permettant ` des ordinateurs d’envoyer et a de recevoir des fax par modem. C’est un protocole de bas niveau, car l’ordinateur doit faire : – la rast´risation e – la compression T.4 – la gestion du protocole T.30 L’avantage est que le protocole T.30 ´tant g´r´ par logiciel, les corrections e ee sont faciles. Les inconv´nients : e – le d´veloppeur du logiciel doit respecter T.30 qui est complexe. e – un logiciel classe 1 est tr`s sensible aux contraintes de temps et les e syst`mes multitˆches comme UNIX ont des probl`mes pour les respece a e ter. (voir modems classe 4 avec buffers) – Classe 2 (1988-1992) Comme groupe 1 mais ici l’essentiel de T.30 est pris en charge par le modem. L’ordinateur doit toujours faire la rast´risation e et la compression T.4. Avantages : – l’´criture des logiciels est plus facile e – le logiciel n’est plus assujetti ` des contraintes de temps de r´ponse tr`s a e e strictes : c’est donc fait pour UNIX. Mais probl`mes : e – le standard a mis beaucoup de temps pour ˆtre adopt´ par le groupe e e TR-29.2 de l’ITU-T – en 1988 le standard est ”vot´ mais non adopt´” : draft SP-2388 e e

15.1. LES NORMES DE FAX – – – – –

193

en 1989 r´vision mais toujours non adopt´e : e e draft SP-2388 document TR-29/89-21R8 du 21 mars 90 draft SP-2388-A du 30 aoˆt 1991 u les industriels adoptent ce draft c’est la ”vieille” classe 2. pire : des erreurs ont ´t´ commises dans l’impl´mentation de SP-2388. ee e Ils faut distinguer : – la vraie classe 2 : modems Everex 24/96D et modems MultiTech – les autres bas´es en particulier sur les chips Rockwell ou EXAR e – Classe 2.0 EIA/TIA/ANSI-592 – apr`s 92 on d´cide d’appeler le standard officiel classe 2.0 e e – 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 specification : (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 (4800 bits/sec), 2 (7200 bits/sec), 3 (9600 bits/sec), 4 (12200 bits/sec), 5 (14400 bits/sec) wd indicates 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 151 mm), 4 (864 pixels in 107 mm) ln indicates which page lengths are supported : 0 (A4, 297 mm), 1 (B4, 364 mm), 2 (unlimited length) df indicates which data formats are supported : 0 (1-D Modified Huffman), 1 (2-D Modified Huffman), 2 (2-D Uncompressed Mode), 3(2-D Modified Modified Read) ec indicates whether or not the optional Error Correction Mode (ECM) is supported : 0 (disable ECM), 1 (enable T.30 Annex A, ECM), 2 (enable T.30 Annex C, half duplex), 3 (enable T.30 Annex C, full duplex) bf indicates whether or not the optional Binary File Transfer (BFT) protocol is supported : 0 (disable file transfer modes), 1 (select BFT, T.434) st indicates 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/5 ms), 3 (scan time/line : 10 ms/10 ms), 4 (scan time/line : 20 ms/10 ms), 5

194

CHAPITRE 15. HYLAFAX (scan time/line : 20 ms/20 ms), 6 (scan time/line : 40 ms/20 ms), 7 (scan time/line : 40 ms/40 ms)

15.2

Fonctions de HylaFAX

Hylafax est un logiciel de t´l´communication pour machines UNIX permetee tant : – d’envoyer et de recevoir des faxdepuis des machines en r´seau TCP/IP e – de partager un modem de mani`re transparente entre plusieurs machines e sur r´seau TCP/IP e Ses caract´ristiques sont les suivantes : e – Les fax peuvent ˆtre de toutes tailles (A4, B4), soit 98 or 196 lpi et transmis e ou re¸us soit en format 1D-encoded ou 2D-encoded. c – Hylafax supporte tout modem de Class 1, Class 2, ou Class 2.0. – Les documents qui peuvent ˆtre transmis sont en format Postscript ou e TIFF Class F – Hylafax peut g´n´rer des pages de gardes. e e – Hylafax fournit une passerelle avec la messagerie. – Les documents re¸us sont en format TIFF Class F ils peuvent ˆtre converc e tis en Postscript par fax2ps et imprim´s ou envoy´s par mail en attachment e e en fonction du num´ro de fax de l’exp´diteur. e e – Le modem-fax est partag´ avec les applications de communications sore 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 donn´es e autres qu’un fax se pr´sentent en entr´e. e e – Plusieurs modems peuvent ˆtre utilis´s par le serveur. e e – Hylafax poss`de une architecture client-serveur et supporte 2 protocoles : e – HylaFAX Client-Server Protocol sur TCP – Le serveur g`re la file d’attente des fax, il permet de programmer l’envoi e 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 d´pos´e de Silicon Grae e phics Inc. Il a pour auteur Sam Leffler <sam@engr.sgi.com> et la derni`re e mise ` jour date de 1996/08/16. C’est un free software. a

15.3

Sur quelles machines fonctionne Hylafax ?

HylaFAX est pr´vu pour fonctionner sur tout syst`me UNIX qui dispose de : e e – fichiers sp´ciaux FIFO ou tubes nomm´s (named pipes) commande mkfifo e e – sockets ` la BSD et protocoles TCP/IP a – m´canisme de locking ` la BSD (flock) ou fonctionnalit´ ´quivalente pere a ee mettant de l’´muler (fcntl, lockf) e – interfaces POSIX 1003.1 incluant termios pour manipuler les devices tty.

15.4. CHOISIR ET INSTALLER UN MODEM : Linux a ces fonctionnalit´s. e

195

15.4
15.4.1

Choisir et installer un modem :
Hylafax et les modems :

– Class 1 : En classe 1 avec un USR Sporster Voice 33.6 kbps nous avons eu des probl`mes. Les modems de class 1 sont d´conseill´s pour HylaFAX. e e e – Class 2 : HylaFAX a ´t´ bien test´ sur beaucoup de modems de class 2. Il il ee e fournit mˆme des solutions pour contourner des erreurs d’impl´mentation e e de T.30. – Class 2.0 : c’est un standard encore jeune. Le driver 2.0 a ´t´ ´crit pour eee USR Courier puis test´ sur ZyXEL 1496E e

15.4.2

Les modems recommand´s : e

– 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 ` la vente en Europe. ZyXEL Elite a 2864 avec Flash EPROM, extensible RNIS (2990F HT) ´quivalent ? e On choisira un modem externe, parce que : – si on veut r´initialiser le modem, suite ` un num´ro brˆl´, on n’est pas e a e ue oblig´ d’arrˆter l’ordinateur e e – les voyants lumineux permettent de voir l’activit´ du modem e – le modem peu ais´ment ˆtre d´plac´ sur une autre machine e e e e

15.4.3

Installer le modem sur un PC

1. Tester le port s´rie e – V´rifier les switchs sur la carte s´rie pour les num´ros de port COM. et e e e les num´ros d’IRQ e – sous root activer le contrˆle de flux hardware :sttty -a crtscts </dev/ttyS0 o 2. Connecter le modem 3. Tester le modem :Avec un logiciel type cu ou minicom : – Tester si le modem r´pond :Taper : ATE1QV1 e Le modem doit r´pondre : OK e – Demander les classes de modem-fax support´es : AT+FCLASS= ? e – Demander les possibilit´s en fax : e – en Class1 : AT+FTM= ? – en Class 2 : AT+FDCC= ? – en Class 2.0 : AT+FCC= ? – Essayer un appel : ATDT0388....

196

CHAPITRE 15. HYLAFAX

15.5
15.5.1

Installation de HylaFAX
Pr´requis : e

– 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 recommand´s e – ghostscript version 2.6.1 et suivantes – http ://www.cs.wisc.edu/ ghost/ghostscript – il faut les drivers tiffg3 et tiffg32dv´rifier par : gs -h e – 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 utilis´ dans les shell-scripts.These uses are reasonably simple, e but will not work if your awk is old enough that it does not support functions or the -v command line option for setting variable values before the BEGIN action is executed. If you encounter problems using the standard awk on your system, try the GNU awk : gawk. – sed de GNU – /bin/test avec option -c

15.5.2
– – – –

Proc´dure d’installation e

cd hylafax-v4.0pl1 ./configure (emplacement des logiciels, librairies ...) make make install (sous root)

15.5.3

Documentation

man hylafax man hfaxd man config lynx /usr/doc/hylafax-doc/index.html (en Debian)

15.6
15.6.1

Configuration de HylaFAX
Les scripts de configuration

L’essentiel du travail de configuration est fait par le script faxsetup – contrˆle l’installation des logiciels et de l’arborescence /var/spool/fax o – cr´e un user fax de mˆme uid et gid que uucp. e e – cr´e pour le daemon client-serveur hfaxd dans /etc/services les entr´es : e e flexfax 4557/tcp # Ancien protocol hylafax hylafax 4559/tcp fax # Hylafax et dans /etc/inetd.conf :

15.7. ENVOI D’UN FAX

197

hylafax stream tcp nowait fax /usr/local/sbin/hfaxd hfaxd -I flexfax stream tcp nowait fax /usr/local/sbin/hfaxd hfaxd -O – appelle faxaddmodem faxaddmodem ttyS0 – cr´e un fichier de configuration /var/spool/fax/etc/config.ttyS0 en e fonction du modem (il y a des configurations types dans /var/spool/fax/config – teste le modem par probemodem ttyS0 – faxaddmodem sert ` ajouter un autre modem a

15.6.2

Les fichiers de configuration :

– /var/spool/fax/etc/config contrˆle le ”scheduler” faxq o – /var/spool/fax/etc/config.ttyS0 contrˆle les programmes utilisant ce o port : faxgetty qui re¸oit les fax, getty lanc´ par faxgetty si on permet c e le mode ”donn´es” (des connexions) sur ce modem et faxsend e – /var/spool/fax/etc/dialrules contient les r`gles pour composer les e num´ros de t´l´phone. e ee – /var/spool/fax/etc/hosts.hfaxd contient les noms des machines clients autoris´es ` acc´der hfaxd e a e – /var/spool/fax/etc/hfaxd.conf configure hfaxd – /var/spool/fax/etc/hyla.conf configure les clients Hylafax. En particulier, 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

D´marrage de HylaFAX e

HylaFAX est servi par trois daemons : hfaxd, faxq, faxgetty – le daemon client-serveur hfaxd est d´marr´ par inetd (ou au boot dans e e /etc/init.d/hylafax) – le ”scheduler” faxq est d´marr´ au boot dans /etc/init.d/hylafax e e – si on autorise la r´ception de fax sur un modem on lance faxgetty sur son e port par init en mettant dans /etc/inittab : S0:2345:respawn:/usr/local/sbin/faxgetty ttyS0 – si on n’utilise un modem qu’en ´mission de fax, on indique le modem ` e a faxq par faxmodem :

15.7
15.7.1

Envoi d’un fax
Commande d’envoi de fax sur Unix : sendfax

sendfax -n -d faxnum1 -d faxnum2 fichier1 fichier2 ...

– -d indique le num´ro du fax destinataire, on peut le r´p´ter e e e – fichier.. sont des fichiers Postscript ou Tiff. Les fichiers ASCII sont aussi support´s mais il s’agit d’ASCII ` 7 bits donc les minuscules accentu´es e a e

198

CHAPITRE 15. HYLAFAX

du fran¸ais ne sont pas support´es. Nous utiliserons donc de pr´f´rence du c e ee Postscript (g´n´r´ par dvips pour les TeX groupies). e ee Le fax exp´di´ est la concat´nation des fichiers indiqu´s sur la ligne de e e e e commande. Exemple : sendfax -n -d 0388106335 fichier.ps

15.7.2

Contrˆle de l’envoi : o

La commande faxstat permet de voir les files d’attente : – faxstat -s : liste les fax en attente d’envoi – faxstat -d : liste des fax envoy´s e – faxrm num job : tue un fax en instance d’envoi Vous recevez syst´matiquement dans votre mailbox un message qui vous e renseigne si le fax a ´t´ bien envoy´ : ee e From: Hylafax User <fax@zoroastre.c-strasbourg.fr> To: morel@zoroastre.c-strasbourg.fr Subject: facsimile job 60 to 6293 completed Your facsimile job to 6293 was completed successfully. Pages: 2 Quality: Normal Page Width: 209 (mm) Page Length: 296 (mm) Signal Rate: 9600 bit/s Data Format: 1-D MR Submitted From: localhost JobID: 60 GroupID: 60 CommID: c00000133 Processing time was 1:24.

15.8
– – – –

R´ception d’un fax e

faxgetty doit fonctionner. Il g`re le protocole T.30 en r´ception. e e Le fax re¸u est un fichier TIFF/F, il est stock´ dans /var/spool/fax/recvq c e faxgetty appelle le script /var/spool/fax/bin/faxrcvd Le script faxrcvd : – regarde le num´ro du fax exp´diteur par faxinfo e e – si ce num´ro est associ´ ` un nom d’utilisateur du serveur HylaFAX par e ea le script etc/FaxDispatch : le fichier TIFF/F est converti en Postscript par fax2ps et envoy´ par e mail en attachement MIME au destinataire. – ce script peut dans les autres cas imprimer le fax par une commande du genre : fax2ps /var/spool/fax/recvq/faxVAAa0051G 2>/dev/null|lpr -Plp

15.9. CONFIGURATION DES CLIENTS HYLAFAX SUR UNE MACHINE LINUX199 ou ˆtre visualis´ par : e e fax2ps /var/spool/fax/recvq/faxVAAa0051G 2>/dev/null|ghostview – Un utilisateur peut voir la file des fax re¸us par : c 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 ou 196lpi

15.9

Configuration des clients Hylafax sur une machine Linux

Sur une autre machine que le serveur, machine Linux ou Unix, on installe la partie cliente de HylaFAX. En Debian c’est le package hylafax-client. Pour le configurer faire : man hylafax-client L’essentiel de la configuration consiste ` indiquer la machine serveur Hylaa FAX dans le fichier /etc/hylafax/hyla.conf : # /etc/hylafax/hyla.conf # System-wide client configuration file Host: helios.c-strasbourg.fr DialRules: "/etc/hylafax/dialrules" # envoi un mail de notification a l’´metteur du fax dans tous les cas e Notify: done Un utilisateur peut avoir une configuration particuli`re dans ~/.hylarc. e Exemple : MailAddr: Notify: morel@phase.c-strasbourg.fr done

15.10

Les clients HylaFAX

Contrˆle d’acc`s : Tous les clients doivent ˆtre d´clar´s dans le fichier /var/spool/fax/etc/hosts.hfaxd o e e e e – Client Unix : sendfax, faxstat, faxrm – Client sur PC et Mac :

200

CHAPITRE 15. HYLAFAX

– Le service de fax apparaˆ comme une imprimante particuli`re, donc ıt e tout logiciel qui sait imprimer peut envoyer un fax – L’interface offre moins de possibilit´ que senfax : On ne peut envoyer e un fax qu’` un destinataire ` la fois a a – La r´ponse par mail doit ˆtre redemand´e ` chaque fois e e e a – L’utilisateur dispose d’un carnet d’adresse de fax – On peut contrˆler l’envoi du fax (´quivalent de faxstat -s) et tuer un o e fax en cours ou en attente d’envoi Client windows 3.1/3.11 : Winflex Winflex apparaˆ comme un port ıt d’impression. On lui attache un driver Postscript. Il utilise l’ancien protocole flexfax (port 4557) ftp ://ftp.Progressive-Systems.Com/pub/unsupported/windows/winflexa4.zip Client Mac : MacFlex ftp://ftp.eats.com/pub/MacFlex-15b1.sea.hqx ftp://eats.com/pub/MacFlex-1-0-B2.sea.hqx Windows 95 et NT : Whfc http://www.rgw-express.de/whfc/ ftp://ftp.rgw-express.de/pub/whfc/whfc.0.3e_dynamic.zip Choisissez de pr´f´rence le driver ”HP LaserJet 4/4M Postscript” ee Dans les options du driver prendre : Postscript optimis´ pour portabilit´. e e

15.11
15.11.1

Gestion du serveur HylaFAX
Optimisation des envois

HylaFAX maintient une base de donn´es des caract´ristique des fax avec qui e e il a ´chang´ en vue d’une optimisation de l’envoi la fois suivante. Exemple : e e bash$ less /var/spool/fax/info/14126249163 supportsHighRes:yes supports2DEncoding:yes supportsPostScript:no calledBefore:yes maxPageWidth:1728 maxPageLength:-1 maxSignallingRate:"14400" minScanlineTime:"20ms/10ms" remoteCSI:"" sendFailures:0 dialFailures:0

15.11.2

Contrˆle d’acc`s o e

Il est possible d’interdire d’envoyer vers certains num´ros de fax ou de recee voir de ces num´ros. e

15.12. CONCLUSION

201

15.11.3

Statistiques

2 tˆches quotidiennes sont lanc´es par cron : a e 0 23 * * * root /usr/local/sbin/faxqclean 25 23 * * * root sh /usr/local/sbin/faxcron | mail -s HylaFax FaxMaster – faxqclean nettoie les spools – faxcron envoie les statistiques d’utilisation ` l’administrateur ainsi que a les rapports d’incidents

15.11.4

Incidents

Pour r´soudre les incidents li´s a l’envoi de fax l’administrateur dispose des e e ` outils suivants : – il est averti par mail – il a une trace des ´changes des modems e – pour d´brouiller son probl`me, il a : e e – la documentation sous forme man et html – les FAQ de HylaFax – la Mailing List : flexfax@sgi.com dont les archives sont ` ftp.celestial.com a – il doit avoir une doc d´taill´e sur son modem e e – une documentation simplifi´e sur le protocole T.30 e Quelques incidents – Demande du Password lors de l’envoi d’un fax sur une machine cliente. Cause : la machine cliente n’est pas cit´e dans /etc/hylafax/hosts.hfaxd e

15.12

Conclusion

Int´rˆt d’un serveur de fax e e – ´conomie de modems et de lignes t´l´phoniques e ee – permet de limiter les points d’acc`s par modems ` des ordinateurs e a Retour d’exp´rience sur HylaFAX e – A condition que le modem soit choisi parmi ceux recommand´s pour Hye laFAX, le fonctionnement est satisfaisant – En cas d’incident, l’administrateur doit connaˆ ıtre un minimum sur son modem et le protocole T.30.

Sign up to vote on this title
UsefulNot useful