Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
0.1
Prsentation e
Ce document est un cours. Il est largement inspir de laide directe, de e conseils, dcrits ou de contributions dans dirents forums des personnes suie e vantes : Beno Speckel (PLIP, SSF, clonage), Guy Brand (scurit, 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 (scurit), Frdric Couchet de April e e e e (CGI) et enn Olaf Kirch pour tout. Il reste sans nul doute bien des lacunes et des erreurs. Les chapitres sur SNMP, PHP sont en prparation. Je publie e nammoins ce texte parce quil peut tre utile ` certains et quen retour la crie e a tique est stimulante. Si ce texte est rutilis, veuillez tre assez aimable pour e e e faire rfrence ` 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 modication pour la Debian 3.1.
Avertissement : Ce document date dun cours fait en 2000 et na jamais t repris, hormis ee quelques corrections derreurs. Voici quelques remarques que lon peut faire sur les chapitres : TCP-IP : reste valable. Il ny a rien sur IPv6. Des notes sur dhcp ont t ee rajoutes. e Serveur DNS BIND : un peu mis ` jour mais incomplet. a PLIP : reste valable PPP : ` reprendre. Il manque une introduction sur le port srie et les a e modems. PPPOE pour connexions ADSL est ` crire. ae Scurit rseau : 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 lpoque). e Clonage machine Debian : ` refaire pour la distributions sarge. Mais les a ides restent valables. e Sendmail : totalement insusant et obsol`te. e Apache : reste valable. Manque apache-ssl. Samba : reste valable. Netatalk : reste valable. Hylafax : incomplet mais reste valable. Sont ` rdiger les chapitres : a e openssl php Webmail IMP Base de donnes Postgres e snmp Wi ! ! !
1 Introduction 11 1.1 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2 TCP-IP : les protocoles de lINTERNET sur Linux 2.1 TCP-IP . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 La pile TCP-IP . . . . . . . . . . . . . . . . . . . . . . 2.3 Le protocole de rseau local Ethernet . . . . . . . . . . e 2.3.1 CSMA/CD . . . . . . . . . . . . . . . . . . . . 2.3.2 Adressage . . . . . . . . . . . . . . . . . . . . . 2.3.3 Cblage . . . . . . . . . . . . . . . . . . . . . . a 2.3.4 Adaptateurs . . . . . . . . . . . . . . . . . . . . 2.3.5 Drivers Ethernet . . . . . . . . . . . . . . . . . 2.4 IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 Adresses IP, rseaux IP . . . . . . . . . . . . . e 2.4.2 Sous-rseau . . . . . . . . . . . . . . . . . . . . e 2.4.3 Paquet IP (datagram) . . . . . . . . . . . . . . 2.4.4 Routage IP . . . . . . . . . . . . . . . . . . . . 2.5 TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.1 Ports TCP . . . . . . . . . . . . . . . . . . . . 2.5.2 En-tte TCP . . . . . . . . . . . . . . . . . . . e 2.5.3 Etats dune 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 Dmarrage du rseau . . . . . . . . . . . . . . . . . . . e e 2.11.1 Conguration du noyau . . . . . . . . . . . . . 2.11.2 Identication dune machine . . . . . . . . . . . 2.11.3 Initialisation de linterface rseau . . . . . . . . e 2.11.4 La commande ifconfig . . . . . . . . . . . . . 2.11.5 La commande route . . . . . . . . . . . . . . . 2.11.6 Conguration de linterface loopback . . . . . . 2.12 Conguration dun routeur . . . . . . . . . . . . . . . 2.13 Rsolution de noms de domaines . . . . . . . . . . . . e 2.13.1 Conguration . . . . . . . . . . . . . . . . . . . 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
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
` TABLE DES MATIERES 2.13.2 Rsolution de noms de domaine . . . . . e 2.13.3 Rsolution 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 rseau . . . . . . . . . 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
3 Le serveur DNS BIND 3.1 Le Domain Name System (DNS) . . . . . . . . . 3.2 Installation en Debian . . . . . . . . . . . . . . . 3.3 Exemple de conguration dun serveur cache . . 3.4 Exemple de conguration dun serveur secondaire 3.5 La base de donnes des noms de domaines . . . . e 3.6 Administration . . . . . . . . . . . . . . . . . . . 3.6.1 Log . . . . . . . . . . . . . . . . . . . . . 4 PLIP : IP sur port parall`le e 4.1 Le cble . . . . . . . . . . . . . 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 Ct client . . . . . . . . . . . . oe 4.5 Ct 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 chiers PPP . . 5.3 Conguration du modem et du port srie. e
. . . . . . . IPCP, CCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
` TABLE DES MATIERES 5.3.1 Conguration du port srie. . . . . . . . . . . . . . . . . . e 5.3.2 Conguration du modem . . . . . . . . . . . . . . . . . . 5.4 Premiers pas avec PPP . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 Session PPP manuelle . . . . . . . . . . . . . . . . . . . . 5.4.2 Automatisation de pppd . . . . . . . . . . . . . . . . . . . 5.4.3 Authentication . . . . . . . . . . . . . . . . . . . . . . . 5.5 Conguration dun client . . . . . . . . . . . . . . . . . . . . . . . 5.5.1 Information ` runir sur le fournisseur dacc`s Internet a e e (ISP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.2 Rsolution dadresse . . . . . . . . . . . . . . . . . . . . . e 5.5.3 Paramtrage PPP . . . . . . . . . . . . . . . . . . . . . . e 5.5.4 Test de pppd . . . . . . . . . . . . . . . . . . . . . . . . . 5.6 Conguration dun serveur . . . . . . . . . . . . . . . . . . . . . . 5.6.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.2 Aectation dynamique des adresses IP : . . . . . . . . . . 5.6.3 Fichier /etc/ppp/pap-secrets sur un serveur : . . . . . 5.6.4 Login dun utilisateur PPP . . . . . . . . . . . . . . . . . 5.6.5 Log dune session PPP sur le serveur : . . . . . . . . . . . 5.7 Rglages ns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 5.8 Scurit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e e 5.9 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9.1 PPP sur cble null modem . . . . . . . . . . . . . . . . . a 5.9.2 Relier deux rseaux 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 Scurit rseau sur Linux e e e 6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Arrter sa machine quand elle nest pas utilise . . . . e e 6.3 Arrter les serveurs inutiles . . . . . . . . . . . . . . . e 6.3.1 Les daemons . . . . . . . . . . . . . . . . . . . 6.3.2 Les services activs par inetd . . . . . . . . . . e 6.4 Contrler lacc`s aux serveurs : tcp-wrapper . . . . . o e 6.5 Contrler lacc`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 scurit sur les logiciels. a e e 6.8 Dtection dincursions . . . . . . . . . . . . . . . . . . e 6.8.1 tripwire : contrle de lintgrit des chiers . o e e 6.9 Prcautions lmentaires . . . . . . . . . . . . . . . . . e ee 6.10 Principales attaques rseau et parades . . . . . . . . . e 6.10.1 SYN ooding . . . . . . . . . . . . . . . . . . . 6.10.2 smurf . . . . . . . . . . . . . . . . . . . . . . . 6.10.3 Denial of Service (DoS) attacks . . . . . . . . . 6.10.4 IP spoong . . . . . . . . . . . . . . . . . . . . 6.10.5 Non-blind spoong . . . . . . . . . . . . . . . . 6.10.6 Blind spoong . . . . . . . . . . . . . . . . . .
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 rseau . . . 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 Quest-ce quun rewall ? . . . . . . . . . . . . . . . . . . . . 7.2 Masquage : permettre ` un rseau priv daccder ` Internet . a e e e a 7.2.1 Conguration du noyau ( > 2.2.0 ) . . . . . . . . . . . 7.2.2 Conguration du masquage . . . . . . . . . . . . . . . 7.2.3 Conguration dune machine du rseau interne . . . . e 7.2.4 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 La commande ipchains . . . . . . . . . . . . . . . . . . . . . 7.3.1 Cha nes prdnies . . . . . . . . . . . . . . . . . . . . e e 7.3.2 Manipulation des cha nes . . . . . . . . . . . . . . . . 7.3.3 Spcication dune r`gle . . . . . . . . . . . . . . . . . e e 7.4 Exemples de ltrage . . . . . . . . . . . . . . . . . . . . . . . 7.4.1 Test du ping . . . . . . . . . . . . . . . . . . . . . . . 7.4.2 Masquage standard . . . . . . . . . . . . . . . . . . . . 7.4.3 Antispoong . . . . . . . . . . . . . . . . . . . . . . . 7.5 Applications clientes supportant le masquage . . . . . . . . . 7.5.1 Autoriser lacc`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 dun rseau priv ` Internet par PPP . . . . . e ea 7.9 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Cryptage des communications par ssh 8.1 Introduction . . . . . . . . . . . . . . . . . . . . 8.2 Documentation . . . . . . . . . . . . . . . . . . 8.3 Conguration de ssh . . . . . . . . . . . . . . . 8.4 ssh serveur . . . . . . . . . . . . . . . . . . . . 8.4.1 Contrles dacc`s . . . . . . . . . . . . . o e 8.5 ssh client . . . . . . . . . . . . . . . . . . . . . 8.5.1 Cration des cls RSA : ssh-keygen . . e e 8.5.2 Connexion : slogin ou ssh . . . . . . . 8.5.3 Transfert de chiers : scp . . . . . . . . 8.5.4 Automatisation de lauthentication par 8.6 Autres implmentations de ssh . . . . . . . . . e 9 Clonage dune machine Linux Debian 9.1 Introduction . . . . . . . . . . . . . . . 9.2 Conguration dune machine m`re . . e 9.2.1 Compilation dun noyau . . . . 9.2.2 Packages . . . . . . . . . . . . . 9.3 Prparation archive sur machine m`re e e 9.3.1 Fichier tar . . . . . . . . . . . . 9.3.2 Exportation . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . cl e . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . publique . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
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 lInternet . . . . . . . . . . . . . . 10.2 SMTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2.1 Codes retour . . . . . . . . . . . . . . . . . . . . 10.2.2 Test dun service SMTP . . . . . . . . . . . . . . 10.2.3 Vrication de lexistence dune bo aux lettres e te 10.2.4 Vrication dun alias . . . . . . . . . . . . . . . e 10.3 Extensions ` SMTP : ESMTP, MIME . . . . . . . . . . a 10.4 Interaction avec le DNS . . . . . . . . . . . . . . . . . . 10.5 Caractristiques de Sendmail . . . . . . . . . . . . . . . e 10.6 Installation . . . . . . . . . . . . . . . . . . . . . . . . . 10.7 Documentation . . . . . . . . . . . . . . . . . . . . . . . 10.7.1 Documentation sur la conguration . . . . . . . . 10.8 Conguration . . . . . . . . . . . . . . . . . . . . . . . . 10.8.1 Une conguration de mail host . . . . . . . . . 10.8.2 Limitation de la taille des messages . . . . . . . . 10.8.3 Suppression de la rsolution dalias par EXPN . e 10.8.4 Une conguration de null client . . . . . . . . . . 10.8.5 Sites miroirs pour tests . . . . . . . . . . . . . . 10.9 Exploitation de sendmail . . . . . . . . . . . . . . . . . . 10.9.1 Scurit . . . . . . . . . . . . . . . . . . . . . . . e e 10.9.2 Commandes dexploitation . . . . . . . . . . . . 10.9.3 Alias . . . . . . . . . . . . . . . . . . . . . . . . . 10.9.4 Rglages ns . . . . . . . . . . . . . . . . . . . . e 10.9.5 Fichier Log . . . . . . . . . . . . . . . . . . . . . 10.10Routage dun domaine virtuel avec sendmail . . . . . . . 11 Apache 11.1 Le serveur WWW Apache . . . . . . 11.1.1 WWW . . . . . . . . . . . . . 11.1.2 HTTP . . . . . . . . . . . . . 11.2 Caractristiques de Apache . . . . . e 11.3 Documentation . . . . . . . . . . . . 11.4 Installation . . . . . . . . . . . . . . 11.5 Lancement de Apache . . . . . . . . 11.6 Conguration . . . . . . . . . . . . . 11.6.1 Param`tres gnraux . . . . . e e e 11.6.2 Conguration des ressources . 11.6.3 Restrictions dacc`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 dacc`s . . . . . . . . . . e 11.11Autres capacits de Apache . . . . . e 11.12Maintenance . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
12 Excution 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 Prrequis et choix techniques . . . . . . . . . . . . e 12.1.3 Conguration du serveur Web . . . . . . . . . . . . 12.2 Notions fondamentales . . . . . . . . . . . . . . . . . . . . 12.3 Un programme en Bourne shell . . . . . . . . . . . . . . . 12.4 Saisie et traitement des champs dun formulaire . . . . . . 12.4.1 Rcupration des informations en Perl et en shell . e e 12.4.2 Les variables denvironnement . . . . . . . . . . . . 12.5 Dboguer 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 Conguration des clients rseau 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 Conguration 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, rserv en criture e e e 13.5.8 Partage ` acc`s rserv . . . . . . . . . . . . . . . . . . . a e e e 13.5.9 Authentication . . . . . . . . . . . . . . . . . . . . . . . 13.6 Audit : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.7 Incidents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.8 Acc`s depuis Unix aux ressources Windows . . . . . . . . . . . . e 13.8.1 smbclient : acc`s aux chiers 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 partage de drivers dimprimante pour W9x . e
13.9.4 Serveurs virtuels . . . . . . . . . . . . . . . . . . . . . . . 185 14 Netatalk : serveur AppleTalk 14.1 Une implmentation du protocole e 14.2 Implmentation en Linux . . . . e 14.3 Documentation : . . . . . . . . . 14.4 Installation . . . . . . . . . . . . 14.5 Conguration . . . . . . . . . . . 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 denvoi 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 recommands : . . . . . . . . . . . . e 15.4.3 Installer le modem sur un PC . . . . . . . . . . . 15.5 Installation de HylaFAX . . . . . . . . . . . . . . . . . . 15.5.1 Prrequis : . . . . . . . . . . . . . . . . . . . . . e 15.5.2 Procdure dinstallation . . . . . . . . . . . . . . e 15.5.3 Documentation . . . . . . . . . . . . . . . . . . . 15.6 Conguration de HylaFAX . . . . . . . . . . . . . . . . 15.6.1 Les scripts de conguration . . . . . . . . . . . . 15.6.2 Les chiers de conguration : . . . . . . . . . . . 15.6.3 Dmarrage de HylaFAX . . . . . . . . . . . . . . e 15.7 Envoi dun fax . . . . . . . . . . . . . . . . . . . . . . . 15.7.1 Commande denvoi de fax sur Unix : sendfax . . 15.7.2 Contrle de lenvoi : . . . . . . . . . . . . . . . . o 15.8 Rception dun fax . . . . . . . . . . . . . . . . . . . . . e 15.9 Conguration 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 Contrle dacc`s . . . . . . . . . . . . . . . . . . o e 15.11.3 Statistiques . . . . . . . . . . . . . . . . . . . . . 15.11.4 Incidents . . . . . . . . . . . . . . . . . . . . . . 15.12Conclusion . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
Chapitre 1
Introduction
Linux sur PC Intel est une plateforme conomique, able et polyvalente pour e faire un serveur rseau. e Linux supporte les protocoles : TCP/IP (v4) : logiciel able, drivers de qualit pour les cartes Ethernet e (10Base-T, 100Base-TX, Gigabit Ethernet) et les cartes PCMCIA, serveurs les plus usits sur le net : Apache, sendmail, ... e UUCP : ancien mais encore utile pour des connexions tlphoniques interee mittentes sur des rseaux peu ables. e IPv6, amlioration de IP v4 pour rpondre ` la croissance dInternet e e a IPX/SPX (Novell Netware) : routeur, serveur, client Ethertalk : serveur Netatalk : partage des chiers par AFP, des imprimantes par PAP LAN-Netbios Microsoft : serveur Samba PPP : pppd client et serveur. Nombreuses cartes sries multiports pour e serveurs dacc`s ` Internet. e a ISDN (RNIS en franais comme le service Numeris de FT), support dans c le noyau pour les cartes ISDN PC. PLIP : Ip sur port parall`le au moyen dun cble 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 rseau impore tante et de fonctionnalits comme le load balancing, le forward de port, permete tant de rpartir la charge entre plusieurs serveurs. Environ 30% des serveurs sur e Internet sont des machines Linux. Par ailleurs, Linux sait router, ltrer, masquer les paquets IP. Un simple PC Linux muni de plusieurs interfaces rseaux permet de connecter un rseau priv e e e a ` Internet et dassurer des fonctions de garde-barri`re (rewall), pour protger e e le rseau priv des incursions et des fonctions de serveur proxy pour faire des e e requtes sur Internet par dlgation pour le compte des machines du rseau 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 bientt par tlphone portable) e o ee 11
12
CHAPITRE 1. INTRODUCTION
comme si elle tait sur le rseau local. e e Plus gnralement, Linux est un Unix. Il a pour but la conformit Posix, e e e il utilise tous les produits de dveloppement Gnu. Cest pourquoi il est tr`s e e facile dinstaller un logiciel Unix sur Linux. Il faut dailleurs dire, en toute honntet, que les Unix libres pour PC de la srie BSD, NetBSD, FreeBSD, ... e e e sont souvent plus en avance en mati`re de logiciels rseau que Linux, sans doute e e a ` cause de Unix BSD mis au point en 1983 ` luniversit de Berkeley qui fut a e limplmentation la plus populaire des protocoles TCP/IP, ceux de lInternet, e largement utiliss aujourdhui de par le monde. e Lobjet ici tant de faire fonctionner un serveur, cest la distribution Linux e Debian (2.1 slink ici) qui est choisie pour sa stabilit, la facilit des mises ` jour e e a par rseau et sa promptitude ` corriger les trous de scurit. e a e e
1.1
Documentation
Avant tout il faut lire The Linux Network Administrators Guide, version 1.0 de Olaf Kirch derni`re mise ` jour de mars 96. Edit chez OReilly et e a e dchargeable 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 sr assez ancien. Le chapitre sur sendmail est un peu u dpass, les possibilits de ltrage de masquerading ne sont pas abordes. Mais e e e e sa lecture est recommande pour les nophytes en mati`re rseau 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
Les protocoles de lInternet sont dsigns par le terme gnrique de TCP-IP. e e e e Ils peuvent tre utiliss aussi en rseau local, sans connexion avec Internet, cest e e e ce quon appelle maintenant lIntranet. La lecture des documents suivants de Charles Hedrick est recommande : 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
Cest une simplication du mod`le en 7 couches de lOSI mais qui a rvl e e ee sa robustesse et son adaptabilit. e TCP/IP na 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 LINTERNET SUR LINUX La couche transport soit TCP, soit UDP qui recourent tous deux ` la a couche IP en dessous. La couche rseau : IP avec en plus ICMP pour les messages de services e La couche protocole de rseau local. Une des forces de IP est quil e peut sadapter ` de nombreux protocoles de rseau : Ethernet, Token a e Ring, FDDI, Fast Ethernet, Gigabit Ethernet, ...
OSI TCP/IP +-----------------------+-----------------------+-------------+ | 7 Application | TELNET, FTP | | +-----------------------+ SMTP | TFTP | | 6 Prsentation e | RPC | DOMAIN | +-----------------------+ X11 | NFS | | 5 Session | HTTP | | +-----------------------+-----------------------+-------------+ | 4 Transport | TCP | UDP | +-----------------------+-----------------------+-------------+ | 3 Rseau e | IP (Internet Protocol), ICMP, ARP | +-----------------------+-------------------------------------+ | 2 Data Link | Local Network Protocol | +-----------------------+ (Ethernet, Fast Ethernet, FDDI...) | | 1 Physique | | +-----------------------+-------------------------------------+ Protocol Relationships Le protocole de rseau local est en gnral gr de mani`re hardware par e e e ee e une carte interface ou adaptateur rseau appel aussi NIC (Network Interface e e Card ). Cest la carte Ethernet classique. Un logiciel, le driver, fait linterface entre cette carte et le noyau. Ce driver ne dpend pas de IP mais uniquement e de ladaptateur et du noyau Linux. Le protocole de rseau local peut aussi tre gr de mani`re logicielle. Cest e e ee e le cas de PPP pour le port srie et le modem tlphonique ou de PLIP pour le e ee port parall`le. e
2.3
Cest la norme IEEE 802.3. Il fonctionne sur le principe de la diusion (anglais broadcast). Les machines sont toutes connectes au mme cble (bus). Un e e a message envoy par lune est reu par toutes les autres. Toutes les machines e c peuvent parler en mme temps. e
2.3.1
CSMA/CD
Comment viter la cacaphonie ? On peut comme dans les runions nommer e e un prsident de sance 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 lorsquon a le jeton. Non, Ethernet utilise une autre mthode moins directive et e non dterministe : CSMA/CD e
15
Que se passe til quand la machine x veut mettre ? e x sassure que le bus est libre (Carrier Sense) si oui, x commence ` mettre ae si y met aussi (Multiple Access), alors une collision est dtecte (Collision e e e Detect), il y a signal jam. Alors, x attend durant un temps t1 x de mani`re alatoire puis essaie dmettre e e e e y attend durant un temps t2 x de mani`re alatoire puis essaie dmettre e e e e
2.3.2
Adressage
Comment une machine peut-elle sadresser ` une autre ? Chaque machine a a une adresse Ethernet unique forme de 6 octets (48 bits) et note sous forme de 6 e e nombres hexadcimaux 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 reoit les paquets qui lui sont destins ? c e Les paquets circulant sur le bus sont analyss par chaque interface Ethernet. e Si le paquet comporte ladresse de linterface en adresse destinataire, il lenvoie ` a IP, sinon il le jette. Sauf dans le cas o` linterface est mis en mode promiscuous. u Quel est le dbit ? Le dbit nominal est 10 Mgabits/sec (Mbps). En raison e e e des collisions, il est fonction de la charge, cest ` dire du nombre de machines a connectes qui veulent mettre en mme temps. Il est aussi fonction du temps e e e de parcours du paquet, donc de la longueur du bus. En pratique le dbit est de e 5 Mbps. Comment mesurer les collisions ? Elles se voient sur les voyants Col des hubs. Elles sont aussi comptabiliss et leur nombre sache quand on fait e ifconfig eth0 (voir ci-dessus) ou cat /proc/net/dev Comment diminuer le nombre de collisions ? En utilisant des switchs plutt o que des hubs. Structure dun paquet Ethernet : Il fait 1500 octets (cest pour cela quon xe MTU=1500 par dfaut dans ifconfig). e Code Type indique un protocole comme TCP/IP, DECnet, Xerox NS, IPX : on peut utiliser plusieurs protocoles dirents simultanment sur un mme e e e rseau. e Le checksum est calcul sur tout le paquet. e
2.3.3
Cblage a
10Base-5 Ethernet 10Mbps, cble coaxial thick (jaune) lmax=200m. Transa ceiver piqu sur le cble avec prise AUI ` 15 broches. Obsol`te. e a a e
16CHAPITRE 2. TCP-IP : LES PROTOCOLES DE LINTERNET 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 donnes e e e | | ... | | | | Fin de vos donnes e | +----------------------------------------------------------------------+ | Checksum Ethernet | +----------------------------------------------------------------------+ Fig. 2.1 Structure dun paquet Ethernet 10Base-2 Ethernet 10Mbps, cble coaxial thin lmax=500m. Il faut mettre a un bouchon aux 2 bouts. Prise BNC en T. Si une machine est dconnecte, e e le rseau est coup. Dconseill. e e e e 10Base-T Ethernet 10Mbps, ou paire torsade (twisted pair ), cble de e a 8 ls, 4 utiliss (1,2,3,6), norme UTP ou FTP catgorie V (supporte 100 e e Mbps), prise RJ45. Structure en toile et non en bus. Hub= rpteur et e e e concentrateur. Pas plus de 4 rpteurs entre deux machines. lmax= 100m e e entre hubs, 100m entre hub et machine. Aujourdhui on squipe de switchs e plutt que de hubs et on passe en Fast Ethernet (100 Mbps) avec le mme o e cble catgorie 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, bre optique multimode connectique ST, lmax 2000m. On peut connecter deux machines sans hub avec un cble 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 dadaptateur ISA ou 10Mbps. Prendre des adaptateurs pour bus PCI 10/100 Mbps. Linux supporte une grande varit dadaptateurs 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. Dconseill 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 conguration du noyau. Les distributions Linux actuelles ont de nombreux drivers en modules. Il ny a donc pas ` a recompiler le noyau. Driver en module ou dans le noyau ? Pour un serveur rseau on a intrt ` le mettre dans le noyau (pour des e ee a raisons de scurit vis ` vis du piratage, il est conseill de ne pas congurer 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 chargs) e rmmod tulip Documentation : On trouve le source des drivers dans /usr/src/linux/drivers/net, de la documentation dans les chiers README de ce rpertoire ou dans /usr/src/linux/Documentation/networking. e Donald Becker becker@cesdis.gsfc.nasa.gov est lauteur 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 dtecte la prsence de ladaptateur. Ceci ` condition quon e e a ait congur 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 priphrique est aect en gnral dun numro dinterruption e e e e e e (IRQ) et dune adresse dentre-sortie (IO Base address). Il ne peut fonctionner e si un autre priphrique a la mme 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 LINTERNET SUR LINUX congurer lIRQ et lIO Base address sur la carte et sur Linux. Il faut rserver e lIRQ pour la carte ISA dans le Setup du BIOS. Pour les cartes 3COM 3C509B on utilisait le logiciel fourni sous DOS par 3COM pour congurer IRQ, IO Base address et enlever loption Plug and play. Le module isapnp rgle 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 utilises par cat /proc/interrupts et les IO Base e addresses par cat /proc/ioports. La commande ifconfig eth0 ache lIRQ (Interrupt) et lIO Base address (Base address). Il est possible de passer des param`tres au driver de ladaptateur rseau : e e soit au boot, sil est dans le noyau. On peut dans /etc/lilo.conf ajouter une ligne : append ether=12,0xe000 o` 12 est lIRQ et 0xe000 lIO 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 lordre des cartes).
2.4
IP
Cest lInternet Protocol dcrit dans RFC 791. Son rle est dacheminer des e o blocs de donnes appels paquets (datagram) de la machine expditeur vers e e e la machine destinataire. Pour cela il identie de mani`re unique les machines e (hosts) du rseau par une adresse. En gnral, un paquet a un seul destinataire e e e (unicast), mais une extension de IPv4 permet de lenvoyer ` plusieurs (multia cast). Il soccupe aussi de fragmenter et de rassembler les paquets si ncessaire. e e Il communique avec la couche Protocole de rseau local, le plus souvent Ethere net. Lencapsulation dans Ethernet est dcrite dans RFC 825 et 894. e
2.4.1
Une adresse est forme de quatre octets (32 bits). On lcrit en gnral sous e e e e forme de quatre tranches de chires dcimaux spars par des points (dotted quad e e e notation). Sous cette forme chaque octet est converti en un nombre dcimal (0e 255), en omettant les zros de tte (` moins que ce nombre ne soit lui-mme un e e a e zro) et chaque octet est spar par le caract`re .. e e e e Une adresse est forme de ladresse rseau, suivi de ladresse locale dans le e e rseau. Il y a trois formats ou classes dadresses dcrites dans le tableau 2.1. e e Dans la classe A, le bit de poids le plus fort est nul. Ladresse dun rseau e est sur un octet et va de 0 ` 127. Les 24 bits suivants forment ladresse a locale. Dans la classe B, le bit de poids le plus fort est ` 1, le bit suivant est ` a a zro. La premi`re tranche de chires va de 128 ` 191. Une adresse rseau e e a e fait deux octets donc deux tranches de chires.
2.4. IP
19 ---------------------------------------------------------|Classe de |Masque de | Plage dadresses | | rseau e | rseau 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 dadresses IP
Dans la classe C, les deux bits de poids le plus fort sont ` 1, le suivant ` a a zro. Une adresse rseau fait trois octets donc trois tranches de chires. Les e e 8 derniers bits forment ladresse locale. Il ny a que 256 numros dirents. 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 rseau aura une adresse par interface. e Ladresse 0.0.0.0 nest pas aecte, elle signie nimporte quelle adresse dans e les logiciels de routage et de ltrage. localhost Par convention ladresse 127.0.0.1 est rserve pour dsigner la machine loe e e cale. De mme 127.0.0.0 est rserv pour dsigner le rseau associ. e e e e e e Masque de rseau (netmask ) e Cest un nombre de 32 bits qui sil est combin par un AND bit ` bit avec e a ladresse IP dune machine donne son adresse rseau. Ainsi : e adresse 193.54.230.20 : de classe C car la premi`re tranche de chire 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 ladresse rseau par 4 tranches de chires dcimaux mais avec la e e partie locale ` zro. a e Adresse locale ou routage ? Pour savoir comment envoyer un message ` une adresse, IP teste si cette a adresse fait partie du rseau local : e Si adresse AND netmask == adresse rseau local e Alors envoi par Ethernet Sinon routage
20CHAPITRE 2. TCP-IP : LES PROTOCOLES DE LINTERNET SUR LINUX Donc par dnition IP ne fait pas de routage ` lintrieur dun rseau. En e a e e consquence, un rseau doit tre contig, il ne peut pas tre dcompos en e e e u e e e plusieurs parties spares par des routeurs. Si on veut passer outre, on a le e e recours du tunelling IP sur IP. Adresse de broadcast (adresse de diusion). Cette adresse permet datteindre toutes les machines dun rseau. Tous les e bits de la partie locale sont ` 1. Ainsi : a Pour le rseau 193.54.230, ladresse de broadcast est 193.54.230.255. Envoi e dun ping ` ladresse de broadcast : a ping 193.54.230.255 Les syst`mes Windows Microsoft ne rpondent pas en gnral : elles ne sont e e e e pas conformes aux standards de lInternet ! Il arrive dans certaines implmentations (anciennes) de IP que ladresse de e broadcast soit ladresse rseau, dans lexemple prcdent : 193.54.230.0 Autre e e e exemple : ---------------------------------------Adresse machine (host address) Masque de rseau (network mask) e Partie rseau (network portion) e Partie machine (host portion) ---------------------------------------Adresse rseau (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 ----------------
Lautorit dattribution des adresses est lIANA. e L Internet Assigned Number Authority attribue : les adresses IP les numros de ports (RFC 1062 Assigned numbers) e donne dlgation aux oprateurs ee e En Europe les adresses IP sont distribues par RIPE (Rseaux IP Eue e ropens), on interroge leur base de donnes des rseaux 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
21
Adresses prives e Des tranches dadresses ont t prvues pour des rseaux privs non relis ` ee e e e e a lInternet ( RFC 1597) : ----------------------------------------------------------| ADRESSES POUR RSEAUX PRIVS E E | ----------------------------------------------------------| Classe | Masque de | Adresses de rseau e | | rseau | rseau 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-rseau e
Dans lexemple prcdent de ladresse IP 130.79.186.31, le masque de rseau e e e tait 255.255.255.0. Or 130 indique un rseau de classe B : 130.79.0.0. Normalee e ment le masque de rseau devrait tre 255.255.0.0. Ladresse rseau devrait tre e e e e 130.79.0.0. Or elle est 130.79.186.0. Il sagit l` dun rseau subnett. Vu de lextrieur cest un rseau de classe a e e e e B dun seul tenant, donc sans routeur. Le netmask est bien 255.255.0.0. Le routeur dentre de ce rseau lui applique le netmask 255.255.255.0 et route e e vers le routeur du sous-rseau concern. e e Autre exemple : On veut dcouper le rseau de classe C : 193.54.230.0 en 4 e e sous-rseaux, soit 2 bits de subnetting. La partie rseau 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 cest ` dire 192 dcimal. Donc e u a e le netmask sera 255.255.255.192 et les sous-rseaux : 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-rseaux doivent tre spars par des routeurs. e e e e Renater distribue actuellement des sous-rseaux de classe C. e Notation des adresses Comme on voit que la classe de ladresse ne sut pas pour dterminer le nete mask et donc ladresse du rseau auquel elle appartient, il est ncessaire de toue e jours accompagner ladresse avec ce netmask. Do` les notations address/mask : u 193.54.230.20/255.255.255.0 : adresse dune machine de classe C 193.54.230.20/24 : idem (24 signie 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 rseau. e Adresses CIDR Pour mieux utiliser lespace dadressage de IPv4 en attendant IPv6, on a dni le Classless Inter-Domain Routing. ou CIDR en abrg. Avec CIDR, les e e e
22CHAPITRE 2. TCP-IP : LES PROTOCOLES DE LINTERNET SUR LINUX prxes des sous-rseaux font entre 13 et 27 bits de longs : on obtient un plus e e grand nombre de sous-rseaux quavec la rpartition classiques en classes A, B e e et C. Les adresses sont donnes sous la forme : e 193.54.230.20/24 24 tant le nombre de bits de la partie rseau ou un masque avec 24 bits de e e poids le plus fort ` 1. a
2.4.3
Paquet IP (datagram)
Avant de lenvoyer, IP ajoute ` chaque paquet de donnes qui lui est transmis a e par les couches suprieures un en-tte comportant entre autres : e e ladresse de lexpditeur e ladresse du destinataire le numro du protocole (voir chier /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 numros de protocole voir /etc/protocols e un checksum de len tte, pour sassurer de lintgrit des adresses notame e e ment. une dure 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 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
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 dtruit. Permet e dviter les boucles. e Quand on active un interface rseau sur une machine on dnit le param`tre e e e MTU (Maximum Transmission Unit), en gnral 1500 octets. Si la taille du e e paquet ` transmettre lui est suprieur, IP le fragmente. a e A la rception, IP contrle le checksum, sil est mauvais le paquet est rejett e o e en erreur. Sinon ce header est enlev et le paquet rsultant 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 rseau. a e Routeur (Gateway) On dit parfois en franais 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 dote de plusieurs interfaces rseaux et qui traite e e la couche IP de la pile TCP/IP. Un PC Linux avec plusieurs interfaces rseaux e devient un routeur si on fait : echo "1" > /proc/sys/net/ipv4/ip_forward Il a autant dinterface et dadresses IP que de rseaux auxquels il est e connect. Ces rseaux nont pas ncessairement la mme couche Protoe e e e cole de rseau local, ce peut tre aussi une liaison point ` point (PPP, e e a PLIP,...). pour chaque paquet, lit len-tte, contrle le checksum, lit les adresses IP, e o dcrmente 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 eort). Cette possibilit de perdre des paquets vite lcroulement du e e e rseau. Dautre facteurs permettent un grand dbit : lintgrit des donnes nest e e e e e pas contrle, il ny a pas de comptabilit ni de facturation. Chaque paquet oe e appartenant ` une mme entit de dpart (un chier par exemple) est rout a e e e e indpendemment des autres. IP est dit connectionless ` (loppos 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 LINTERNET SUR LINUX En principe, le routage se fait suivant ladresse IP du destinataire. Un oprateur e de rseau doit accepter que des paquets traverse son rseau quelle que soit leur e e provenance. Dans une conguration simple, on fait du routage statique. Mais sil existe plusieurs routes pour aller dun site ` lautre on risque des boucles. a Quand il existe plusieurs routes pour accder ` une machine et/ou que le e a rseau devient grand, il faut changer avec les autres routeurs des tables de e e routage et recourir ` un algorithme pour choisir linterface sur lequel envoyer a un paquet. Les tables de routage sont des couples (adresse rseau, distance). Une dise tance peut se mesurer en : nombre de routeurs ` traverser (hops), RFC 1058 (rseaux petits et moyens) a e temps en ms, RFC 823 une note cf EGP, RFC 904 (liaisons internationales) La table de routage permet de dcider ` quel routeur voisin envoyer un e a paquet IP. Lchange de table de routage permet de faire conna e tre ` lena semble dInternet la cration dun nouveau rseau, ou un nouveau chemin vers e e un rseau. e Lalgorithme de routage est dynamique. Cest ` dire que si un lien tombe ou a sature, il peut choisir une autre route. Internet fonctionne dautant mieux que le rseau est maill. Les algorithmes les plus utiliss sont : e e e RIP (Routing Information Protocol), RFC 1058, pour rseaux 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 (prn par Renater). e o e IGRP, EIGRP OSPF (Open Shortest Path First Protocol) daemon gated pour grands rseaux type campus. e IGP utilis sur le backbone Internet e (daemon, vieux terme Unix qui signie : Disk And Extension MONitor). Faut-il prciser quil est inutile de lancer routed comme le font certaines e distributions Linux quand on na quun seul interface rseau ? e
2.5
TCP
TCP, Transmission Control Protocol, dcrit par RFC 793, est un protocole e de transfert able : il soccupe de transfrer un message (ou un chier, bref des e donnes) entre deux machines. Il utilise IP pour ce transport, il sait que IP e fait de son mieux mais que le rseau a des dfaillances. TCP est lhomme de e e conance, il est utilis par les principaux protocoles INTERNET (telnet, ftp, e smtp, http, X11,...). TCP soccupe de : dcouper le message en segments ` lmission et de les rassembler ` la e a e e a rception en les remettant dans le bon ordre. e donner ou recevoir les paquets de IP contrler lintgrit des donnes par un checksum calcul au dpart et o e e e e e contrl ` larrive oea e
2.5. TCP
25
redemander lmission des paquets manquants ou errons : TCP g`re une e e e connexion : il garde trace des paquets reus et transmis. On dit que TCP c travaille en mode connect. e grer plusieurs connexions simultanes. e e
2.5.1
Ports TCP
TCP peut soutenir plusieurs conversations simultanes (mutiplexage). Pour e les rep`rer, il attribue des numros de port. Ainsi, quand une conversation e e dmarre il lui aecte le port 1000, si une autre dmarre, elle aura le port 1001. e e Un couple (adresse IP, numro de port) est appel un socket. A lautre bout, e e sur le serveur, un port est aussi attribu. e Pour que le client (qui initie la connexion) puisse xer le port ct serveur, oe on a x des numros de ports ociels suivant le type de service demand. Par e e e exemple pour le service ftp, utilisant tcp, le port est 21. On trouve ces numros de e port rservs, appels well known ports dans le chier /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
# name-domain server
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
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 simultanes. Mais une paire de sockets (IP source, e port source, IP dest, port dest) identie une connexion de mani`re unique. e Un serveur utilisant un port infrieur ` 1024 doit avoir les privil`ges de root. e a e
2.5.2
En-tte TCP e
TCP ajoute ` chaque paquet un en-tte dau moins 20 octets qui a le format a e ci-dessus. Sequence Number : TCP ne numrote pas les paquets mais les octets. Le e numro de squence est le numro du premier octet de la partie data du paquet e e e (sauf si ag SYN). Ce numro est donn relativement ` un initial sequence e e a number (ISN) transmis lors de ltablissement de la connexion avec le ag SYN e prsent. Ce numro de squence sert ` la machine destinataire ` acquiter les e e e a a paquets reus et ` les remettre en ordre. c a Acknowledgment Number : pour tre sr que le paquet est bien arriv, le e u e destinataire doit renvoyer un accus de rception Acknowledgment. Dans ce e e paquet le ag ACK est prsent, si Acknowledgment Number vaut 1500 cela e signie quil a reu les donnes jusqu` loctet 1500 (exclus). Si lexpditeur na c e a e pas reu un Acknowledgment pour un paquet au bout dun 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 eld signicant ACK : Acknowledgment eld signicant
2.5. TCP
27
PSH : Push Function : paquet contenant des donnes 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 : Cest un contrle de ux. o Lexpditeur nattend pas de recevoir lack dun paquet pour envoyer le suie vant. Dautre part il est inutile quil envoie pleins de paquets si le destinataire narrive pas ` suivre. Par Window le destinataire indique le nombre doctets que a lexpditeur peut envoyer jusqu` nouvel ordre. Quand le destinataire reoit des e a c donnes il baisse Window. Si Window=0, lexpditeur doit sarrter. Quand le e e e destinataire est disponible, il augmente Window. Options Cest un champ de taille variable contenant entre autre : MSS : Maximum Segment Size. Envoy quand SYN est prsent. Le segment e e dsigne la partie donnes du paquet TCP. e e Etablissement dune connexion TCP Pour tablir une connexion, il sut 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 cest ce quon 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 ag SYN est positionn (S). e LISN, Initial Sequence Number est envoy gal ` 3559251011, format ee a rst :last(nombre doctets de data) A xe la Window ` 32120 octets a < ... > indique les options le maximum segment size mss est ` 1460 octets a [|tcp] : signie que le header est tronqu par tcpdump e DF : Dont Fragment Paquet 2 : B port 21 rpond ` 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 LINTERNET SUR LINUX B dit ` A : ton ISN est bien 3559251011 (ack 3559251012) a B xe sa Window ` 32736 et sa maximum segment size ` 1460 octets a a Paquet 3 : A port 2998 rpond ` B sur le port 21. e a pas de ag (.) il ny a pas de donnes donc pas de sequence number, e B dit ` A : ton ISN est bien 4146826796 (ack 4146826797) a
2.5.3
Une connexion passe par dirents tats qui sont : e e LISTEN - le serveur attend un appel entrant SYN-SENT - une demande de connexion est arrive ; attente dun ACK e (tat de A apr`s envoi du paquet 1). e e SYN-RECEIVED - une demande de connexion est arrive ; attente dun e ACK (tat de B apr`s envoi du paquet 2). e e ESTABLISHED -tat normal pour le transfert des donnes (tat de A et e e e B apr`s envoi du paquet 3). e FIN-WAIT-1 - Lapplication a indique quelle avait termin e e FIN-WAIT-2 - Lautre extrmit a accept cette libration. e e e e CLOSE-WAIT - Lautres extrmit a initi une libration e e e e CLOSING - Les deux extrmits ont essay de fermer simultanment. 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
A chaque couche de la pile IP correspond une enveloppe de paquet qui est ajoute (ou retire) ` lmission (ou ` la rception). On peut schmatiser 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
Lapplication donne ` TCP des data, disons un chier. a TCP dcoupe ce chier en segments, ajoute ` chacun un en-tte T et le e a e passe ` IP. a IP ajoute un en-tte I ` chaque paquet et le passe ` la couche Protocole e a a de rseau local. e Si cette couche est Ethernet, un en-tte E est ajout et un checksum C est e e calcul et rajout ` la n. e ea
2.7. UDP
29
2.7
UDP
UDP, User Datagram Protocol, dcrit par RFC 768, sert ` envoyer des mese a sages qui tiennent dans un paquet IP. Il ajoute un en-tte. Il na pas ` grer e a e de numros de squence. Il g`re un checksum. Il ne garde pas trace de ce quil e e e a envoy. Donc si des paquets se perdent, cest ` lapplication au-dessus de le e a contrler. Il se sert de ports comme TCP pour distinguer plusieurs conversao tions simultanes. 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 dun 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 rseau local Ethernet permet e de trouver ladresse Ethernet (dite adresse MAC) dune machine connaissant son adresse IP. Pour que IP puisse communiquer par Ethernet il faut quil connaisse ladresse Ethernet du destinataire. ARP nest pas un protocole IP, il nutilise pas de paquet IP. Si la machine 130.79.186.1 veut causer ` la machine 130.79.186.2, IP vrie a e avec le netmask quelle sont bien sur le mme rseau. Ensuite ARP regarde dans e e son cache sil 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 LINTERNET SUR LINUX Si oui, il y trouve ladresse Ethernet. Sinon, ARP lance un ARP request a ` toutes les machines comportant la question Qui a ladresse IP 130.79.186.2. Celle qui a ladresse IP spcie rpond. e e e LARP request est un message broadcast. Son adresse Ethernet destinataire a tous les bits ` 1 : : : : : :. Les machines sont obliges de prendre en a e compte ces paquets Ethernet. Si une machine est concerne elle rpond, sinon e e elle lignore. Certaines machines du rseau utilisent les ARP request pour tablir e e des tables des autres machines : cest le cas dun switch qui doit savoir quelles adresses Ethernet sont derri`re chacun de ses ports. e Exemple dun 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 prf`re des noms a ee en clair. Les noms de machines sont structurs en une hirarchie 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 qualied domain name (FQDN). Je dis indirement nom de domaine ou nom de machine. e Lespace des noms a une structure hirarchique : e Le nom de domaine zoroastre.c-strasbourg.fr fait partie du domaine c-strasbourg.fr qui lui-mme 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 linternational eee ` agences internationales : net, org noms de pays ISO-3166 :fr, de, uk, it, ru, cn, au Lautorit de nommage est le NIC : Network Information Center . En France e (top level domain fr) cest le NIC-France http://www.nic.fr Pour le domaine c-strasbourg.fr, cest ladministrateur du Domain Name System c-strasbourg.fr. Lindication de pays dans le top level domain ne signie pas que lordinateur en question sy trouve physiquement localis. e
2.10.1
Le DNS fait la correspondance entre nom de domaine et adresse IP. Au dbut e ce ntait quune table mise ` jour manuellement cf /etc/hosts. e a Cest une base de donnes rpartie : des serveurs named communiquant e e par le protocole domain (sur UDP well known port 53)
31
Les serveurs root ont linformation sur les top level domain Chaque domaine doit disposer dun DNS qui fait autorit e Chaque machine doit avoir acc`s ` au moins un DNS e a Optimisation : un DNS mmorise les informations dans un cache (durant e un temps TTL) Scurit : des DNS secondaires copies de DNS primaires e e Exemple dinterrogation adresse IP de www.cern.ch ? requte ` un DNS indiqu dans la ligne nameserver de /etc/resolv.conf e a e mon DNS na pas www.cern.ch dans son cache il demande ` un des DNS root ladresse du DNS ch a il interroge le DNS ch le DNS de ch na pas www.cern.ch dans son cache le DNS de ch interroge le DNS de cern.ch le DNS de cern.ch renvoie ladresse IP de www.cern.ch ` mon DNS qui a la garde dans son cache mon DNS me renvoie ladresse IP de www.cern.ch Types dinformations contenues dans les DNS : A : associe une adresse IP ` un nom de domaine. Cest lobjet essentiel du a DNS PTR : permet la requte 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 prfrence ` 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 prfrence 10 ee Les MX records permettent de : centraliser la messagerie dans un organisme sur une machine scurise e e de communiquer avec des machines non connectes ` Internet ( uucp, e a ...) NS pointe sur un master DNS, le serveur de nom de rfrence pour la zone ee SOA : (Start of authority) en-tte dune zone dautorit e e
2.11
2.11.1
Dmarrage du rseau e e
Conguration du noyau
Gnralement, le noyau est congur avec le support de IP Networking et e e e dun interface rseau ou de plusieurs sils 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 rseau par le noyau est fait par ls /proc/net ou bien e on regarde ce que le noyau ache 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 LINTERNET SUR LINUX TCP: Hash tables configured (ehash 16384 bhash 16384)
2.11.2
Pour connecter une machine ` un rseau, on a besoin de : a e Adresse IP de la machine Masque de rseau e Adresse de broadcast Adresse du routeur Adresse du serveur de noms de domaine (DNS).
2.11.3
On initialise linterface rseau par ifconfig et on dclare les routes par e e route En Debian, ceci tait fait dans le shell script /etc/init.d/network. Ce e chier comporte les commandes ifconfig et route. En Debian 2.2, il est recommand de lancer le rseau par ifup de larrter 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 larrt par : e /etc/init.d/networking stop Au lancement ce script excute au pralable des actions spoofprotect, syncooe e kies, ip forward, en fonction doptions que lon peut modier dans /etc/network/options. $cat /etc/network/options ip_forward=no spoofprotect=yes syncookies=no On verra plus tard leur signication. Ensuite il initialise le ou les interfaces rseaux par ifup -a . Ces interfaces e sont dnis 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 excute pour chaque interface e une commande ifconfig et une commande route. Remarques :
33
si on ajoute noauto sur la ligne iface, linterface nest pas initialis par e ifup -a ni arrt par ifdown -a. On peut le commander manuellement ee par ifup eth0, ifdown eth0, si linterface est eth0. autres informations par man 5 interfaces les lignes commenant par # sont ignores. c e up commande excute commande apr`s linitialisation de linterface. pre-up e e commande excute commande avant linitialisation. e idem avec down etpre-down pour larrt de linterface. e Nous considrons que linterface rseau est linterface Ethernet eth0, mais e e ce peut tre un deuxi`me interface Ethernet eth1 ou un interface vers un autre e e protocole rseau. On verra par la suite comment initialiser ppp0 pour PPP, e plip0 pour PLIP.
2.11.4
La commande ifconfig
Pour activer linterface rseau 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 congure linterface Ethernet eth0 avec ladresse IP 193.54.230.20 et un masque de rseau 255.255.255.0. Le up est inutile car cest le dfaut. e e On aurait pu prciser 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 ladresse IP qui est de a classe C. De mme il aurait pu deviner le netmask sauf si je fais du subnetting. e A tout instant on obtient des informations sur linterface 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 aches dans ifcong : e RX Nombre de paquets Ethernet reus c TX Nombre de paquets Ethernet transmis errors : erreur sur le checksum Ethernet ? dropped : paquets perdus probablement pour manque de mmoire e overruns : entre autre les paquets arrivent trop vite, le noyau na pas le temps de les traiter. frame ? carrier : dirents 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 LINTERNET SUR LINUX mtu : Maximum Transmission Unit : taille max dun paquet que linterface est en mesure de traiter en une transaction. Pour Ethernet cest 1500. Pour PPP peut tre plus faible. e metric : associ a lentre dans la table de routage correspondant ` cet e` e a interface, exprime le cot dune route (= nombre de routeurs ` traverser) u a pour certains protocoles de routage (RIP). Laissez le dfaut. e promisc : met linterface rseau en mode promiscuous (permet de recevoir e tous les paquets Ethernet qui passent sur le rseau. ( -promisc remet en e mode normal) allmulti : pour multicast Dans le cas de PPP (IP sur ligne tlphonique), linterface rseau se lance ee e par pppd, on na pas ` faire ifconfig. a Pour dsactiver linterface, on fait : e ifconfig eth0 down On notera que, contrairement aux autres priphriques, eth0 nest pas un e e nom de chier comme /dev/lp0 et on ne peut faire cat fichier>eth0 Exercice : Comment conna ladresse IP dune machine ? En lextrayant 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 acher la table de routage par lune 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
Flags U U UG
Metric 0 0 1
Flags U U UG
Metric 0 0 1
Etant donn un paquet dadresse 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 rseau. Si elle est tout ` zro, cest la e a e route par dfaut. e Colonne Gateway : si valeur * ou 0.0.0.0, il ny a pas de routage ` faire, a cest 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 entre cre par un message ICMP redirect e ee M si entre cre par un message ICMP redirect e ee Colonne Ref : nombre de routes derri`re cet interface e Use : nombre dutilisation de cette entre de la table de routage e Iface : interface ` utiliser a Pour modier la table de routage de mani`re statique, on utilise la commande e route. Ajout dune route vers une machine : route add -host 127.0.0.1 lo Ajout dune route vers un rseau : e route add -net 193.54.230.0 Linterface nest pas indiqu ici. Le noyau compare pour chaque interface e congur son adresse ANDed avec son netmask avec cette adresse rseau. e e Le seul interface qui convient est eth0. Ajout dune route par dfaut : e route add default gw 193.54.230.1 metric 1 Retrait dune route par dfaut : e route del default Autres param`tres : netmask : il faut le prciser quand on fait du subnetting. e e On peut spcier les param`tres mss window irtt voir man route. e e
2.11.6
Linterface 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 rseau sans interfrer avec quelquun dautre sur votre rseau. Par e e e convention, ladresse IP 127.0.0.1 lui a t assigne. 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 congure par : root# ifconfig lo 127.0.0.1 root# route add -host 127.0.0.1 lo On lutilise 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 LINTERNET 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
Supposons quune machine Linux a 3 interfaces Ethernet acc`dant ` des e a rseaux privs et un lien PPP vers lInternet. La conguration 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 dfaut nutilise pas gw ? La raison en est tr`s simple : e e le protocole PPP est point ` point il ny a quune machine ` chaque bout. a a Spcier que lautre bout de la liaison est un routeur est sans objet et redondant. e Incidents Si vous avez des diagnostics derreurs SIOCADDRT, ils peuvent tre vits e e e en ajoutant un netmask et le nom de linterface ` 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
Le Name Resolver est accd 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 chier /etc/hosts et lacc`s ` un DNS. Lacc`s au DNS se congure dans le e a e chier /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 lordre o` ils sont cits. La ligne search sert ` complter les hostnames en u e a e FQDN. Si on veut rsoudre le nom truc le rsolveur essaiera truc.c-strasbourg.fr e e et si chec truc.fr. e La conguration du rsolveur de noms se fait dans /etc/host.conf e
37
order : prcise 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 retourne : address spoong. e alert si une tentative de spoof (maquillage dadresse) est faite un message est logg. e La possibilit davoir un service NIS (Network Information Service ou Yellow e Page de Sun) est prvue dans la libc6. Il faut donc aussi congurer le chier 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
Nayant pas activ le service NIS une ligne nous intresse : e e hosts : donne lordre de consultation files chier /etc/hosts consult e en premier, ensuite dns le DNS.
2.13.2
nslookup $ nslookup www.lwn.net Server: localhost Address: 127.0.0.1 Name: lwn.net Address: 206.168.112.90
$ 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 n 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 larborescence $ nslookup Default Server: localhost Address: 127.0.0.1 . <---------- signifie la racine de larborescence 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)
39
expire = 604800 (1W) minimum ttl = 86400 (1D) server A.ROOT-SERVERS.NET <-------------- jinterroge 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 rpondre 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
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 LINTERNET 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
Si on veut compter le nombre de machines dun 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, dfaut : 53 Il existe dautres 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 Ache 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
Elle consiste ` demander quel est le nom de domaine associ ` une adresse a ea IP que lon fournit. On a vu que les commandes
41
fournissait la rponse. 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 donnes qui est dacc`s e e e squentiel et rparti !, on a cr un domains spcial 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 signie 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. Sutilise ` travers un script. a
2.14.2
traceroute
Tente de tracer la route suivie pour parvenir au site destinataire en lanant c des petits paquets UDP, dabord avec un time to live TTL=1, le paquet ne peut traverser quun routeur puis TTL=2, puis TTL=3, etc. A chaque essai traceroute se met ` lcoute du message ICMP time exceeded. Donc indique a e tous les routeurs depuis votre machine jusqu` la machine cible. Permet didena tier o` le rseau est coup. Par dfaut fait 3 essais pour chaque valeur de ttl. u e e e
42CHAPITRE 2. TCP-IP : LES PROTOCOLES DE LINTERNET SUR LINUX Indique le temps mis en msec. Si au bout de 5 secondes il ny a pas de rponse e ache *. 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 rponse possible : e !H, !N, ou !P (host, network ou protocol unreachable) !A, !C (access to the network or host, respectively, is prohibited) Le dveloppement des rewall peut faire que les messages ICMP sont ltrs. 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, acher la table de routage et acher les connexions en cours (les sockets ouverts). netstat -i donne les statistiques sur les interfaces comme ifcong 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 dtailles 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
Flags UH UH UH U U UG
Window 0 0 0 0 0 0
irtt 0 0 0 0 0 0
43
irtt : initial round trip time pour les connexions TCP : sert ` xer un a timeout au bout duquel un paquet est renvoy si lacquitement na pas t reu. e ee c Dfaut 300ms (man route e netstat -a ache les connexions en cours. On peut tre plus slectif 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 : ache le PID et le nom du processus ayant ouvert ce socket . Aide ` a identier la connexion. Il faut tre root. e -l : ache 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 LINTERNET 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 chier 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 xant le port. Exemple : Test dun 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
45
2.14.5
nc
Cest un outil lmentaire pour faire un dialogue TCP ou UDP avec une ee autre machine. Cest 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 ncessite la conguration de Packet Socket dans le noyau. Il ime prime les en-ttes des paquets passant sur un interface rseau et satisfaisant e e une expression logique. Il semploie sous root car linterface doit tre mis en e mode promiscuous. Si le rseau 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 linterface 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 donnes dans chaque paquet. Dfaut : 68. e e -t : pas de timestamp -c 10 : nanalyse que 10 paquets. Si pas doption -c tcpdump ne se termine que si on tape Ctrl-C. -e : ache le link level header cest ` dire len-tte Ethernet a e -S : imprime les TCP Sequence Number sous forme absolue plutt que o relative (par dfaut, les Initial Sequence Number (ISN) sont en absolus e mais ` la suite les Sequence Number sont donns relativement aux ISN) a e -v : sortie bavarde (ajout de ttl, id) -vv : sortie encore plus bavarde -x : sortie en hexadcimal e -w fichier : copie les paquets ` ltat brut dans chier a e -r fichier : lit les paquets copis dans chier par -w e Expression : En labsence dune expression, tous les paquets sont achs. Sinon, seuls e les paquets pour lesquels lexpression est vraie sont achs. Une expression est e faite de primitives. Une primitive est faite dun identieur (nombre ou nom) prcd dun ou plusieurs qualieur. Il y a trois sortes de qualieurs : 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 combines par and, or et not. Les parenth`ses e e e sont autorises mais doivent tre mise entre simples quotes pour ne pas tre e e e interprtes par le shell. ee Exemples dexpressions :
46CHAPITRE 2. TCP-IP : LES PROTOCOLES DE LINTERNET 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 infrieure ` 1000 octets e a len <= 1000 : idem greater 1000 : paquet de longueur suprieure ` 1000 octets e a len >= 1000 : idem ip proto //icmp : paquet IP de protocole icmp (ou udp, tcp). Le backslash sert ` distinguer de lutilisation cite plus haut en protocole. a e expr relop expr : relop peut tre =, !=, >, >=, <, <=, expr est une e expression arithmtique avec les oprateurs +, -, *, /, &,| et des oprateurs e e e qui permettent dacc`der ` des donnes dans des paquets. Exemple : e a e tcp[0] dsigne le 1er octet de len-tte TCP. e e Exemples : Ecoute dun port pour lidentier : 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 dune machine donne par son adresse IP : e tcpdump host 195.36.171.1 Paquets destins ` 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 changs entre les machines zoroastre et helios e e phoebus
2.14. OUTILS DE DIAGNOSTIC tcpdump host zoroastre and helios Ecoute dune session pop de la machine milord depuis le serveur : tcpdump host milord and port pop3 > milord.txt &
47
Exemple de paquets TCP : on ltre les paquets TCP qui ont les ags SYN ou FIN levs, ils sont dans le 13`me octet de len-tte TCP. & est loprateur 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 dun paquet TCP : src > dst: flags data-seqno ack window urgent options src et dst sont les adresses IP et les ports source et destination ags : une combinaison de S (SYN), F(FIN), P (PUSH), R (RST) ou un simple . (no ags) Data-seqno : portion de lespace de numros de squence couvertes par les e e donnes. Exemple : e 3625303099:3625303099(0) signie pas de donnes. Au dpart les numros sont donns en absolu. A la e e e e suite ils sont donns relativement au numro de squence initial. Exemple : e e e 2:21(19) signie donnes de 19 octets e Ack est le numro de squence du prochain octet attendu du partenaire e e Window : nombre doctets disponibles dans le buer de rception e urgent : donnes urgentes e options : options entre < >, exemple : <mss 1460> src, dst, ags sont toujours prsents 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 LINTERNET 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 loption -e (en-tte 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 contrler 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 ladministrateur prend soin de mmoriser les adresses Ethernet dans un e chier du type /etc/ethers il peut contrler larrive de machines intruses sur o e le rseau en analysant le cache ARP des serveurs. Cest aussi un moyen de e contrler quune machine ne prenne pas ladresse IP dune autre. o
2.14.8
Il faut penser tant aux aspects matriels que logiciels. Si le cble est coup e a e quelque part... Localisez la panne : ping vers des machines locales, le routeur ou extrieures e Si acc`s au routeur et non ` lextrieur : vous avez oubli de dclarer 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 plutt que nom de domaine : e o probl`me avec votre rsolveur de noms ou votre serveur DNS. e e Si pas dacc`s au routeur mais acc`s ` dautres machines locales : probl`me e e a e sur le rseau local : voir hub, (votre prise murale y est-elle relie ?) switch e e ou routeur lui-mme. Une simple coupure de courant... e Si aucun acc`s ni ` lintrieur ni ` lextrieur : probl`me de cblage ou e a e a e e a probl`me sur votre machine : e Vrier connexion du panneau de brassage au hub : LED allum sur le e e hub ? Vrier prise RJ45 et cble : vous en changez. e a
2.15. IP ALIASING
49
Vrier vos param`tres rseau : adresse IP, masque de rseau... Vous e e e e nutiliseriez pas ladresse IP de quelquun dautre, ou linverse ? 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 na 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 conit dIRQ ou dIO Base Address (frquent avec cartes e ISA) ? En dsespoir de cause, prenez votre tournevis, ouvrez la bcane, retirez e e la carte rseau (sans bouger les autres cartes !), retirez la poussi`re, soufe e ez 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 quune carte rseau 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 dassocier plusieurs adresses IP ` un mme interface rseau : utile a e e pour remplacer une machine par une autre en cas de panne ou de maintenance grer 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 congurer 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 rseau 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 LINTERNET 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
Flags UH U U UG
MSS 0 0 0 0
Window 0 0 0 0
irtt 0 0 0 0
2.16
Proxy ARP
Si une machine en route une autres par une liaison point ` point comme avec a PPP ou PLIP, elle va dclarer que son adresse Ethernet est celle de la machine e quelle route et rpond donc ` sa place aux requtes ARP. On appelle a du e a e c proxy ARP ou ARP par dlgation. 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 ladresse IP de la machine route, 00 :50 :04 :F9 :33 :82 e est ladresse 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. Cest utilis pour permettre a e a ` des machines sans disque de booter. Le support RARP doit tre congur dans le noyau (CONFIG INET RARP), e e si on veut que Linux rponde ` de telles requtes. e a e
2.18
DHCP
DHCP (Dynamic Host Conguration Protocol) est un protocole dcrit par la e RFC 2131 qui permet dattribuer dynamiquement des adresses IP. Cest utilis e par les Internet Service Provider qui ont beaucoup de clients mais un nombre limit dadresses IP ou pour attribuer des adresses IP ou machines nomades e comme les ordinateurs portables. En plus de ladresse IP, le netmask, ladresse de broadcast, les DNS sont aussi attribus. Lutilisation de DHCP rend la cone guration rseau beaucoup plus facile. e
2.18.1
DHCP client
Une machine Linux qui veut obtenir une adresse IP (cas des machines disposant dun interface Ethernet reli ` un cable-modem) doit installer un client ea comme pump ou dhcpcd. En Debian cest le package dhcpcd. A linstallation du package, la conguration est propose. Le script de lancement est /etc/init.d/dhcpcd. Cone guration dans /etc/dhcpc/config : mettre IFACE=eth0, eth0 tant linterface e choisi. Si on ne veut pas lancer dhcpcd mettre IFACE=none.
2.18. DHCP
51
Si le rseau 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 dmarrera dhcpcd e Cest la commande ifup qui soccupe dappeler 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 dune attribution dadresse 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
2.18.2
DHCP serveur
On peut installer un serveur DHCP (package Debian dhcp) qui distribuera des adresse IP prises dans certaines plages. Cest un daemon dhcpd lanc par /etc/init.d/dhcp start. Il coute le e e port UDP 67 (bootps) par dfaut 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 LINTERNET SUR LINUX Option du noyau prrequise : e CONFIG_FILTER=y La conguration est dans le chier /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 indique 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 ladresse 193.54.230.3. Fichier log : /var/log/daemon.log Attribution dune 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 dun 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 Mmoire des adresses attribues aux machines dans le chier /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
Toute machine connecte sur Internet est identie par une adresse IP unique. e e Comme ces adresses sont dicilement mmorisables, 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) dnit e une structure hirarchique pour cet espace de nommage, lautorit de nommage e e et le mcanisme 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 qualied domain name (fqdn) est zoroastre.c-strasbourg.fr. Le DNS est une base de donnes rpartie constitue par des serveurs qui e e e communiquent entre eux par le protocole domain. Cest une base de donnes e tr`s sollicite qui a dmontr sa robustesse. e e e e Toute machine connecte sur Internet doit avoir un nom enregistr pour e e linterrogation directe et inverse dans le DNS. BIND (The Berkeley Internet Name Domain) est une implmentation du e protocole Domain Name System (DNS). Il est constitu dun daemon named, e cest le serveur de nom de domaine. Il y plusieurs types de conguration de named : Primary nameserver (master) : serveur de noms faisant autorit sur une e zone. Il fait des authoritative answers. Son administrateur a dlgation ee du NIC (Network Information Center) pour grer sa zone. e Secondary nameserver (slave) : copie dun serveur de nom primaire, ne fait pas autorit, se met rguli`rement ` jour. Tr`s utile quand le primaire e e e a e est inaccessible Cache nameserver (hint) : ne fait que grer un cache des prcdentes e e e requtes DNS e Un serveur de noms primaire dnit une zone. Une zone est un sur-ensemble e de rseau. Pour reprendre lexemple dOlaf Kirch sur la partie de lespace des e noms groucho.edu attribue ` lUniversit Groucho Marx, alsacien cl`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 aects dune toile marquent le dbut dune zone. Ils sont e e e associs ` 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 ninclut que les machines gres directement ee par le Computing Center comme gauss.maths.groucho.edu. Les machines du dpartement de Physique appartiennent ` une zone dirente : physics.groucho.edu9 e a e Un rseau avec un netmask non sur une fronti`re doctets ne peut constituer e e une zone dautorit (en raison de linterrogation 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 conguration : /etc/bind/named.conf Tous les chiers de conguration statiques sont placs dans /etc/bind : Les e zones pour lesquelles on est primary name server, la zone localhost et la zone inverse. Le rpertoire de travail de named est /var/cache/bind. Tous les chiers e transitoires crs par named y sont rangs 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
Cest la conguration par dfaut 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 DUN 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
On est rarement responsable dune zone dautorit, donc de ladministration e dun primary nameserver. Par contre il est frquent dtre responsable dun e e rseau local. Dans ce cas il est vivement recommand dinstaller 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 prcise zone "nom domaine" in {}. Je nai pas de e in dans ma cong et a marche ! c options { } directory "/var/named" : le rpertoire o` va se trouver la copie loe u cale de la base de donnes : il contiendra les chiers indiqus par les e e param`tres file suivants e zone "nom de domaine" { } : dnition dune zone de nommage. . dnit e e la racine (root) de larborescence des noms type : type de serveur hint : serveur cache, zone rduite ` la racine de larborescence des e a noms. Il y a plusieurs serveurs root, heureusement ! master : serveur ayant autorit sur la zone (master copy) e
57
slave : serveur secondaire (replica of a master zone) file : nom du chier associ ` cette zone ea masters : si je suis slave adresse des DNS masters (jai cit en premier e le master vrai, le second est un slave) Ainsi mon rpertoire /var/named contient un chier par zone : e named.ca : cache DNS, serveur racines de larborescence des noms de domaines Internet named.local : zone localhost dont cest moi le ma ! tre named.rev-local : idem pour linterrogation inverse cstr.zone.bak : zone c-strasbourg.fr, je ne suis que lesclave cstr.rev.zone.bak : idem pour linterrogation inverse La zone . est obligatoire. Si le chier de conguration na que cette zone et les zones "localhost" et "0.0.127.in-addr.arpa", cest un serveur DNS cache.
3.5
domaine : nom de domaine e opt ttl : dure de vie de linfo en secondes (optionnel) opt class : toujours IN (Internet) type : SOA : Start of Authority A : dnit le canonical name e NS : an authoritative name server CNAME : alias PTR : reverse mapping (pour linterrogation 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 complt par le nom de e ee la zone ou de ce qui est dni par $ORIGIN. Ainsi : e $ORIGIN c-strasbourg.fr. akgonul 3600 IN A 193.54.229.121 dnit ladresse 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 larborescence est note par un . e @ dnit lorigine courante donc la zone associe au chier dnie dans e e e /etc/named.conf, sauf sil y une instruction $ORIGIN avant. Exemple de RR de type SOA : notez le . | v
(domain) c-strasbourg
(type) SOA
(rdata) antares.c-strasbourg.fr.
58
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 nest pas suivi dun 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 cest celui qui a la note la plus basse qui est choisi de prfrence. ee Contenu du chier 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 chier 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
Dmarrage par /etc/init.d/bind start e Contrle par ndc Name daemon control interface o ndc status -> PID de named ndc reload -> recharge la base de donnes e ndc start -> dmarrage e ndc restart -> redmarrage e ndc stop -> arrt e
3.6.1
Log
Le chier 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 4
4.1
Le cble a
Cest un cordon parall`le DB25 mle/DB25 mle dit null-printer ou Lae a a pLink Voici le cblage 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. Youll 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 cble par leur port parall`le. Elles a e jouent un rle symtrique a priori. Mais si lune est relie ` un rseau local, o e e a e voire ` Internet par son interface Ethernet, on va lappeler serveur. a Dans lexemple qui suit, le serveur sappelle genesis et a ladresse IP : 193.54.230.56, le client sappelle phoebus et a ladresse IP : 193.54.230.115. 61
62
` CHAPITRE 4. PLIP : IP SUR PORT PARALLELE +------------------+ // // +----------------+ | genesis |--------------------| phoebus | +---------+--------+ +----------------+ 193.54.230.56 | 193.54.230.115 | Rseau 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
En noyau de version infrieure ` 2.2 on fait : e a modprobe plip On peut disposer des interfaces plip0, plip1, plip2 correspondant aux ports lp0, lp1, lp2. Voici leurs caractristiques dapr`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 rponse : e NET3 PLIP version 2.2 gniibe@mri.co.jp plip1: Parallel port at 0x378, using assigned IRQ 7. On vrie 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
Conguration 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 arrt le daemon lpd sur les deux ee machines. parport est dcoup en trois modules : e e
63
parport indpendant de larchitecture e e parport pc spcique pour plateforme Intel. On peut fournir en arguments io et irq. parport probe teste lquipement qui est au bout. e On fait : depmod -a modprobe parport_pc io=0x378 irq=7 insmod plip timid=1 timid=1 vite davoir 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 dcrit dans /proc/parport/0 chiers devices, hardware, e e irq, autoprobe.
4.4
Ct client o e
On dsactive au besoin linterface Ethernet, sinon on risque des probl`mes e e de routage : ifconfig eth0 down On congure le rseau 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
Ct serveur o e
On est en noyau 2.2.14, linterface dni est plip0, on fait : e ifconfig plip0 193.54.230.56 pointopoint 193.54.230.115
64
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 mme adresse IP sur deux interfaces dirents 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
Flags UH U U UG
Metric 0 0 0 0
Ref 0 0 0 0
Use 0 0 0 0
Le ag H indique quun seul host peut tre atteint par cette route. Le ag e U que linterface est UP, G que cest un Gateway.
4.6
Test
On teste que les deux machines communiquent par le cble 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
65
4.7
Pour que les autres machines du rseau 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 Vrication 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 Cest fastidieux. Il est plus facile dutiliser 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 ladresse Ethernet du serveur (lu sur ifcong). pub est obligatoire : il indique que linterface spci (ici eth0) est celui sur e e lequel on rpondra aux requtes ARP. Il doit tre dirent de celui sur lequel e e e e on route les paquets IP. On vrie 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 rseau. e
4.8
Test de performances
On charge un chier de 5.7 Meg par scp. Par plip1 cela dure 2 37 soit un dbit de 36 kB/s. En rebranchant la machine sur Ethernet par eth0 le mme e e transfert prend 21, soit un dbit 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 5
PPP
5.1 Introduction
PPP, Point to Point Protocol permet de faire passer le protocole IP sur une liaison srie (cble null-modem, modem et ligne tlphonique ou liaison e a ee NUMERIS -ISDN-). Il permet de se connecter ` un fournisseur dacc`s Internet a e ou de connecter ensemble deux rseaux 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 liss. e Le protocole PPP est dcrit dans la RFC1661 : The Point-to-Point Protocol e (PPP).
5.1.1
A la base du protocole, il y a HDLC, High-Level Data Link Protocol (un standard ISO, utilis dans X25) qui dcrit un format de paquet avec un e e checksum. PPP peut non seulement vhiculer dans HDLC des paquets IP mais aussi e IPX ou AppleTalk. LCP, Link Control Protocol, ngocie des options comme MRU (Maximum e Receive Unit), taille maximum du datagram que lon peut recevoir et soccupe sil y a lieu de lauthentication du client, du serveur ou des deux par PAP ou CHAP. Un Network Control Protocol (NCP) ngocie les particularits dun proe e tocole. Pour IP, IPCP (RFC1332) ngocie les adresses IP assignes de part e e et dautre. 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 mthode BSD qui utilise lalgorithme 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 mthode Deate : cest la mme e e mthode que celle de gzip. Elle est recommande. e e La compression consomme de la mmoire. Le serveur peut ne pas la e prvoir, auquel cas la demande de compression du client sera non satisfaite. e Les deux parties doivent utiliser le mme algorithme. La compression dans e PPP est plus performante si elle est bien paramtre que la compression e e faite dans le modem (V.42). Le logiciel pppd a un fonctionnement symtrique, il joue le rle de serveur e o comme de client. Les chiers de conguration servent ` la fois comme serveur et a comme client. Il ny a pas en principe de dirence 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 prfrable. Dans les documents le terme peer dsigne lautre ee e partenaire. Sur Linux, ppp est en deux parties, lune dans le noyau (traitement de HDLC) et lautre 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 Administrators 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 cest tr`s bien de mettre PPP en module. Pour e un serveur dacc`s Internet qui fait beaucoup de PPP on le mettra dans le noyau. e A partir du noyau 2.4 dautres param`tres sont optionnels. Il faut slectionner 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 chargs 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 PPPs compression protocol.
69
5.2.2
Logiciel ppp-2.3.5-2
Fourni en package. En Debian, on charge les packages : ppp : (obligatoire) daemon pppd, chiers de cong, chat, pon, po, plog. ppp-pam : utile pour un serveur pppcong : 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 rcent e et rciproquement. e Compilation (si ncessaire) : e ./configure make USE_MS_DNS=1
e Loption USE MS DNS=1 demande le support dans LCP des DNS tags utiliss par Microsoft pour passer les noms des serveurs DNS. Cest important pour un serveur qui aurait des machines Windows comme clients.
5.2.3
mgetty
5.2.4
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
root
649 May 26
1998 /etc/init.d/ppp
70
CHAPITRE 5. PPP
5.3
5.3.1
Reprer sur quel port il est branch. Vrier que lIRQ aecte au port nest e e e e pas partage par un autre priphrique. 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 lIRQ dun port srie il faut aller modier les switchs sur la e carte srie et utiliser setserial sous root. Exemple : e setserial /dev/ttyS2 irq 5 Mais les cartes m`re modernes ont deux ports srie congurables via le Setup e e du BIOS.
5.3.2
Conguration 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 congurer le nom du port srie par Ctrl-A e O et "Serial port setup" et sauvez par "Save setup as dfl". Tester le modem : ATZ : rinitialisation - rpond OK e e AT&V : Vrier les options du modem. Il faut avoir (en commande Hayes e standard) : E1 echo ON (ncessaire pour chat) e Q0 Envoie les result codes (ncessaire pour chat) e S0=0 Auto Answer OFF (sauf si vous voulez que le modem dcroche. e mgetty est capable de dcrocher au bout de n sonneries) e &C1 Carrier Detect ON only after connect &S0 Data Set Ready (DSR) always ON hardware ow control : RTS/CTS
71
Si la conguration dusine nest pas convenable on peut la modier dans la NVRAM du modem ou bien passer les commandes AT ncessaires dans e le chat-script ` chaque connexion. a Connectez vous au serveur par ATDT<numro de tlphone>. Noter exace e e tement toutes les rponses du serveur, en particulier les questions qui dee mandent login et mot de passe. Si le serveur vous envoie du charabia, cest quil utilise PAP. Sil ne rpond pas essayez de taper sur la touche Entre. e e Commandes Minicom Ctrl-A X : sortie de Minicom avec rinitialisation du modem e Ctrl-A Q : sortie de Minicom sans rinitialisation du modem e Ctrl-A O : conguration de Minicom Ctrl-A Z : menu daide
5.4
5.4.1
Pour sentir ce quest 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 dauthentication (pas de auth dans /etc/ppp/options de part et dautre.) Linterface srie utilis ici est ttyS0. e e 1. Sur le client passez root. Congurez linterface rseau lo et le rsolveur e e dadresses dans /etc/resolv.conf 2. Appelez minicom, slectionnez ttyS0 par Ctrl-A O et Serial port setup e . Connectez-vous au serveur par ATDT<numro de tlphone>. e e e 3. Supposant que sur le serveur le modem est contrl 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 dmarre pppd mais ne le met pas en background de sorte qu` e a larrt de pppd il ne reste pas de processus en attente. e 6. Sortez de minicom par Ctrl-A Q. Le modem nest pas rinitialis. 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 linterface rseau 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 ladresse IP qui est attribue au client, P-t-P : est e ladresse du serveur. 9. Testez le routage par route -n. Linterface ppp0 doit appara deux fois, tre une fois comme HOST (Flag H), une fois comme route par dfaut. Si elle e nappara pas, vous ne pourrez pas contacter par le lien PPP dautres t machine que le serveur PPP.
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 sarrter. e Sinon, appeler votre logiciel de communication (minicom -o) et envoyez +++ suivi de ATH0 15. Au besoin enlevez le chier lock par rm -f /var/lock/LCK..ttySx
5.4.2
Automatisation de pppd
La mme chose peut tre faite ainsi : e e sur le serveur : On cre 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 grer de script de conversation avec le modem. Pour cela il e passe la main par connect ` chat qui est fourni avec ppp. a Loption -v comme verbose va copier dans syslog toute la conversation. La conversation est note sous la forme de couples expect send, spars e e e par des blancs. Ainsi : au dpart, on nattend rien, do` e u on envoie la commande de numrotation ATDT5551212 pour appeler le e serveur le modem doit rpondre CONNECT e on ne lui rpond rien e on attend quil envoie la cha ogin : (le l est omis de sorte que ce peut ne tre Login ou login) e on envoie le nom dutilisateur ppp on attend le message Password par word : on envoie le password whitewater Ce type de commande est dangereux car par la commande ps quelquun pourrait dcouvrir notre login et password. Aussi on crit ce dialogue dans un e e chier ` acc`s rserv, accessible uniquement par root et on le rfrence 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 dabord dans le chier /etc/ppp/options accessible uniquement par root, ensuite sur la ligne de commande et dans le chier $HOME/.ppprc Une mani`re tr`s commode dappeler pppd comme client est : e e pppd call isp o` isp est le nom dun Internet Service Provider. Le chier /etc/ppp/peers/isp u est cr par ladministrateur 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 chier /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 prvoir le comportement de notre connexion en cas dincident. Si e le modem envoie NO CARRIER laction ABORT est lance. e 2. Ligne TIMEOUT : On peut changer le TIMEOUT qui est de 45 secondes par dfaut. e 3. Autres lignes : Elles sont formes de deux cha e nes de caract`res : e "attendue" "envoye" e
spares par des blancs. Il sut que la cha attendue concorde avec e e ne la rponse eective du modem pour que le client rponde par la cha e e ne envoye. e Toutes les rponses possibles du modem doivent tre prvues y compris e e e CONNECT qui nest pas indiqu dans lexemple prcdent. e e e On peut prvoir une action conditionnelle par exemple si on ne reoit 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 dinitialisation du modem, ainsi "at&d0&c1" \q vite que le password soit crit dans le chier log e e Ce dialogue dpend videmment du serveur. En particulier si pppd du sere e veur rclame une authentication par PAP ou CHAP, il ne faut pas faire de e dialogue login, passord, sinon on reste bloqu. e
5.4.3
Authentication
Lauthentication peut se faire de plusieurs mani`res : e 1. en dehors de pppd dans un chat-script. Cest alors un simple login sur une machine distante (voir exemple plus haut). Linconvnient est que e chaque utilisateur doit se congurer un chat-script.
74
CHAPITRE 5. PPP 2. par PAP (Password Authentication Protocol) : Ladministrateur remplit le chier /etc/ppp/pap-secrets avec un triplet, suivi ou non dadresses 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 nimporte quelle adresse IP. durant est interdit de connexion sur helios (- signie pas dadresse IP). 3. par CHAP (Challenge Handshake Authentication Protocol) : Se fait de la mme mani`re dans le chier /etc/ppp/chap-secrets. Lavantage de e e CHAP est que secret ne circule pas en clair sur la ligne et que lauthentication est redemande priodiquement durant la session. Cest donc plus e e sr que PAP. Mais il faut sassurer de linteroprabilit avec les machines u e e Microsoft. Normalement, on demandera sur le serveur ` pppd de rclamer lauthentia e cation en plaant loption auth dans le chier /etc/ppp/options. c Lauthentication est prvue pour tre symtrique. Un serveur demande nore e e malement au client de sauthentier. Mais il peut refuser davoir ` sauthentier a aupr`s du client. Dans ce cas ladministrateur du client doit mettre dans le e chier /etc/ppp/peers/isp loption noauth. Limportant ` noter est que PPP nauthentie pas un individu mais une maa chine qui, cest le cas de Linux, peut avoir plusieurs utilisateurs. Pour cette authentication de machine on peut utiliser la base de donnes des userids/passwords e Unix. Donc pour authentier une machine on le fera sous un userid dutilisateur. Do` dans /etc/ppp/pap-secrets un hostname client quon remplace par un u username.
5.5
5.5.1
son numro de tlphone e ee adresse IP dau moins un serveur de nom (DNS) : alors que pour une connexion depuis un Windows ces param`tres sont communiqus en dbut 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 til lauthentication PAP ou CHAP ? Dans ces deux cas il doit vous fournir un id (nom dutilisateur) et un secret (mot de passe) le serveur dmarre til automatiquement ppp (cest le cas gnral) ou bien e e e faut-il passer une commande sur le serveur pour dmarrer ppp ? Dans ce e dernier cas, on doit vous fournir un nom dutilisateur, un mot de passe et le nom de cette commande de dmarrage (ventuellement) ou un script de e e dmarrage e
75
le serveur vous attribue til ladresse IP dynamiquement ? Sinon lISP doit vous en donner une.
5.5.2
Rsolution dadresse e
Mettre ` jour le chier /etc/resolv.conf a search <nom du rseau du provider> e nameserver <adresse IP du nameserver du provider> et le chier /etc/host.conf order hosts,bind multi on
5.5.3
Paramtrage PPP e
En Debian on peut congurer PPP par pppconfig sous root, en RedHat par control-panel ou linuxconf. Ici on fera ` la main ce qui est plus pdagogique. a e On appellera pppd par pon provider qui excute pppd call provider o` e u provider est un nom qui peut tre chang. Loption call provider fait que e e pppd lit le chier doptions /etc/ppp/peers/provider Toujours en Debian, le script /etc/init.d/ppp est prvu pour dmarrer e e la connexion vers un serveur, ` condition que le chier /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 grons, il fait e lauthentication par PAP : numro de tlphone : 03 88 11 63 35 e ee nom dutilisateur : dupond password : hzkd0h3 le serveur attribue ladresse IP du client. nom du domaine et adresses IP des serveurs DNS : ... Le chier /etc/ppp/options Le premier chier doptions pris en compte par pppd est /etc/ppp/options. Il nest accessible que par ladministrateur. 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 signie contrle de ux hardware sur le port o srie. e crtscts contrle de ux hardware sur le port srie (il faut le positionner o e aussi sur le modem) auth demande au partenaire (peer) de sauthentier
76
CHAPITRE 5. PPP asyncmap 0 pas de squence dchappement pour caract`res de contrles e e e o lock utilisation dun lock uucp (chier /var/lock/LCK..ttySx) pour signaler aux autres logiciels que le modem est occup e
Le chier /etc/ppp/peers/provider Loption call provider de pppd fait prendre en compte ensuite un chier provider (ce nom est quelconque) dans /etc/ppp/peers. Ladministrateur ldite 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 dmarrage: 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 sauthentifier 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 numro ` 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 prvoir des directives dauthentication (auth, +pap, ...) mais e comme client ce nest pas du tout recommand (il faut que le serveur sache e sidentier). Cependant votre conguration peut tre ` la fois client et serveur. e a Adaptez le chier : /etc/chatscripts/provider ABORT ABORT ABORT ABORT "" CONNECT BUSY "NO CARRIER" VOICE "NO DIALTONE" ATDT0388116335
Si lauthentication ne se fait pas par PAP/CHAP il faut ajouter apr`s e CONNECT des lignes du genre : "ogin:" "assword:" dupond hzkd0h3
77
Mais attention, en PAP ou CHAP, il ne faut pas mettre ces deux lignes : a c vous bloque. Le chier /etc/ppp/pap-secrets En authentication PAP, on dite le chier /etc/ppp/pap-secrets : e dupond * hzkd0h3
5.5.4
Test de pppd
Appel de pppd en Debian : Tout utilisateur du groupe dip (comme dial IP) pourra faire : pon provider : lancement rseau par PPP e poff provider : arrt rseau PPP e e plog : examen du chier 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, vrier par lsmod quil est e bien charg. e Exemple : lsmod Module ppp slhc serial nfs 3c509
Pages 5 2 8 12 2
Faire ensuite ifconfig puis netstat -r. On na 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
Flags UH U UG
Window 0 0 0
irtt 0 0 0
Si a ne marche pas : c Examiner le log (ajoutez loption debug) Relire PPP-HOWTO Causes dincidents : le modem ne rpond 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 ` excuter /usr/sbin/pppd (dip en Debian). ea e on est en PAP et le chatscript comporte une identication par login do` u blocage on est en PAP et id secret nest pas bien spci (oubli de loption name) e e Diagnostic Serial line loopback dans le log : oubli dune rponse du e modem dans le chat-script, CONNECT par exemple. on acc`de au serveur mais pas ` dautres machines dInternet. Causes : e a oubli de defaultroute sur le client ou de proxyarp sur le serveur. dans netstat -r la ligne default nindique pas le serveur PPP on a une carte Ethernet et on a laiss linitialisation de eth0 qui prvoit e e le routage par eth0. Faire ifconfig eth0 down pppd sarrte ` son dmarrage par mgetty. Cause possible : erreur dans e a e un chier de conguration, par exemple pap-secrets. Tester par : pppd dryrun dryrun fait crire les options dans /var/log/messages et arrte pppd e e
5.6
5.6.1
pppd est appel par mgetty qui coute le port srie et sait reconna e e e tre un appel PPP. Conguration du noyau Il faut prvoir : e le support PPP dans le noyau ou en module IP forwarding/gatewaying pour servir de routeur pour les machines connectes e par PPP
79
On peut lancer directement pppd sur un port srie, mais il est prfrable e ee de le faire ` travers mgetty. Cela permet dutiliser 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 dappel et appeler le service adquat. tre e Il faut au moins mgetty Version 1.1.18-1. mgetty doit tre compil avec e e a loption -DAUTO PPP cest ` dire reconnaissance automatique de PPP. Cest ncessaire pour les clients Microsoft Wxx. e On met mgetty ` lcoute dun port srie en ajoutant dans /etc/inittab a e e une ligne : S1:2345:respawn:/sbin/mgetty -x0 -n 7 ttyS1 En Debian, il sut de dcommenter une ligne. e x0 signie niveau de debug 0 (pas de debug) n 7 signie le modem dcroche la ligne ` la 7`me sonnerie e a e On met ` jour init par telinit q. a Contrle de mgetty mgetty est capable de reconna un type dappel (voix, o tre fax, ppp, data). Quand mgetty reconna un appel PPP, il faut prciser comment t e mgetty doit appeler pppd. On lindique 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 congurer des options dans /etc/mgetty.config, par exemple pour un port : port ttyS0 speed 28800 toggle-dtr n debug 9 data-only y Les chiers logs se trouvent en /var/log/mgetty/ Si la ligne tlphonique est aussi utilise pour la voix, on peut empcher ee e e mgetty/ de dcrocher en crant un chier /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 tlphonique 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 fris 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. Cest le cas en Debian. Compilation de pppd Si on doit compiler, il faut faire : make -DDNS HAS_SHADOW=1 -DDNS pour congurer les adresses DNS sur les clients Windows HAS SHADOW=1 si vous avez les shadow passwords sur le serveur. Conguration de pppd Le chier /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 dchappement pour des caract`res de contrle e e o lock : lock ` la UUCP (pour rserver le port srie pour pppd) a e e crtscts : contrle de ux hardware sur le port srie o e modem : utilise les modem control lines (CD et DTR) Options dauthentication : auth : authentication du client demande e -chap : pas dauthentication CHAP +pap : authentication PAP login : les userids/passwords Unix sont utiliss pour lauthentication e Options IP : proxyarp : le serveur attribue son adresse Ethernet au client PPP. Loubli de cette option fera que le client ne peut pas communiquer avec dautre machine que le serveur. Loption defaultroute ne se met pas pour 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 ladresse IP dun serveur DNS ms-wins 193.54.230.20 : communique ladresse IP dun serveur WINS Options de gestion du lien : lcp-echo-interval 30 : envoie une demande dcho si aucun paquet na t e ee reu depuis 30 secondes pour vrier si le partenaire est toujours l` c e a lcp-echo-failure 4 : si au bout de 4 demandes dcho, le partenaire ne e rpond pas, on le suppose mort. e
5.6.2
Quand le serveur a plusieurs modems, on nindique pas ladresse IP du client dans /etc/ppp/options mais dans un chier spcique 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
# 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 "*" Sil y a un - pour ladresse IP cest quaucune est accorde. e Si on utilise les passwords Unix pour authentier (options auth +pap login) on peut mme supprimer le chier /etc/ppp/pap-secrets e
5.6.4
Si un utilisateur ne fait que du PPP, on peut lui aecter un shell comme /bin/false. Il ne fera rien dautre que du pppd sur le serveur. Son entre dans e /etc/passwd sera du type : dupond:x:1234:1234:Dupond Jean:/tmp:/bin/false
82
CHAPITRE 5. PPP
5.6.5
Dans /var/log/messages Connexion dun 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 dune 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 loption debug : le dialogue LCP, IPCP, PAP appara La session normale ci-dessous permet de reprer dans une connexion t. e dfaillante 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
Rglages ns e
mru (Maximum Receive Unit) . Sa valeur par dfaut est 1500. La valeur e minimum est 128. Une valeur de 296 est recommande pour les liaisons e lentes et un logiciel ligne ` ligne. Pour de linteractif 1500 peut tre lev a e e e (mru 542 ?) deflate nr,nt : compression par la mthode deate (cf gzip) nr et nt e entre 8 et 15 bsdcomp nr,nt : compression par la mthode BSD (cf compress Unix) nr e et nt entre 9 et 15 vj-max-slots n : xe 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 mmoire et que le modem e comprime aussi (V.42). Nammoins la compression peut amliorer le dbit. e e e Je constate que jai les meilleures performances avec les options PPP standards (mru=1500, compression VJ) mais en comprimant les chiers transfrs ee
84
CHAPITRE 5. PPP
par gzip et/ou en utilisant loption de compression -C dans ssh (slogin -C host, scp -C dpart arrive) e e
5.8
Scurit e e
pppd doit tre suid root pour pouvoir initialiser linterface rseau et modier e e la table de routage. Son acc`s doit tre rserv ` un groupe dutilisateurs (dip e e e ea en Debian). Les chiers de conguration dans /etc/ppp ne doivent tre accessibles que e par ladministrateur. De mme les chiers logs. e Sur un serveur lauthentication doit tre obligatoire. e
5.9
5.9.1
Applications
PPP sur cble null modem a
On raccorde les deux machines par un cble srie dit null modem, les ls a e transmit-receive sont croiss, voir Serial-HOWTO. e Choisissez une machine comme serveur. Installez mgetty sur un port srie. e Testez la connectivit par minicom depuis le client. Si probl`me congurer les e e ports avec setserial. Maintenant il sut de lancer pppd sur les deux machines, par exemple sur le port ttyS1 de chacune delle par : pppd -detach crtscts lock <local IP>:<remote IP> /dev/ttyS3 38400 & On teste par ifcong et ping que les deux machines communiquent. Mais on na pas de routage. Coupez le lien en tuant lun des pppd. Pour router, on suppose quune machine a un interface Ethernet connect e et lautre non. Sur la machine avec interface Ethernet on fera : pppd -detach crtscts lock proxyarp <local IP>:<remote IP> /dev/ttyS3 38400 & et sur lautre : pppd -detach crtscts lock defaultroute <local IP>:<remote IP> /dev/ttyS3 38400 &
5.9.2
Il faut avoir des adresses IP pour les machines des deux rseaux. e
5.9.3
Routage
Si lun des rseaux est connect ` Internet, on mettra defaultroute ct e e a oe client et on dnira la machine Linux qui tourne le pppd client comme routeur e par dfaut sur les machines du rseau non connect ` Internet. e e ea Sil sagit juste de connecter deux rseaux on ajoute une commande route e pour chaque rseau par le script /etc/ppp/ip-up. Il faut aussi que chaque e machine des deux rseaux 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 excutable et si oui lexcute. On peut lutiliser pour passer une commande e e route ou lancer sendmail an denvoyer 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
Dmarrer/Programmes/Accessoires/Communication/Acc`s rseau ` dise e e a tance Double cliquer avec le bouton gauche licne Nouvelle connexion o Entrez un nom pour lordinateur appel e Suivant Numro de tlphone e ee Cliquer la nouvelle icne avec le bouton droit et slectionner Proprits o e ee Onglet : type de serveur Type de serveur : PPP Internet Windows NT Serveur et Windows 98 Options avances : e (X) Se connecter ` un rseau a e (X) Activer la compression logicielle () Demander un mot de passe crypt e () Demander le cryptage des donnes e () Crer un journal pour cette connexion e Protocoles rseau autoriss e e () NetBeui () Compatible IPX/SPX (X) TCP/IP Cliquer param`tres TCP/IP e (X) Adresse IP attribue par serveur e () Spcier adresse IP e (X) Adresses de serveurs de nom attribues par serveur e () Spcier les adresses des serveurs de noms e (X) Utiliser la compression den tte IP e (X) Utiliser la passerelle par dfaut pour le rseau 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 demande. 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
Ce document donne quelques r`gles minimales de scurit pour des machines e e e Linux connectes sur Internet par une adresse IP xe et qui ne font pas de e services rseau. e Ce document est provisoire. Toute remarque est bienvenue. Linux est par nature un serveur rseau sur Internet. La plupart des distrie butions Linux dmarrent des serveurs rseaux sans mme que le propritaire de e e e e la machine, qui croit avoir une simple station de travail, sen rende compte. Ces serveurs rseau sont inutiliss, ils prennent du temps CPU, de la mmoire et ce e e e sont autant de serrures que des pirates peuvent essayer douvrir ou de forcer. Une fois quun pirate a russi ` rentrer sur votre machine, il peut par tapes e a e successives devenir root, couter ce qui passe sur le rseau local, sinstaller sur e e dautres machines... Mme sil fait a pour le sport, cest tr`s gnant. Pas e c e e seulement en raison des dgts quil peut commettre sur la machine visite, mais e a e parce que, contrlant une machine ` linsu de son responsable, le pirate peut o a mener ` partir de cette machine des actions nuisibles sur le rseau. Par exemple a e lutiliser comme relais de messages publicitaires ou comme base dattaque contre dautres machines. Toute machine visite par un pirate doit tre enti`rement recongure. e e e e Si Linux nest utilis que comme poste de travail personnel, il ne joue sur le e rseau quun rle de client, tous les serveurs qui sont activs par les procdures e o e e dinstallation des distributions actuelles, sont non seulement inutiles mais sont dangereux. Il faut les arrter. e
6.2
Cest bte, mais ecace quand on ne fait pas de service rseau. e e On peut aussi couper la machine du rseau. Mais attention, les prises RJ45 e ne sont pas inusables. 87
88
6.3
6.3.1
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 rseau ? 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 dimpression lpd sur le port tcp 515 (printer) et sendmail sur le port tcp 25 pour le service de mail (smtp). Les numros de port rpertoris dans /etc/services e e e sont remplacs par le nom du service. e Contrle des daemons en RedHat o Les scripts de lancement/arrt sont en /etc/rc.d/init.d e On peut arrter manuellement un daemon, sendmail par exemple, sous root e par : cd /etc/rc.d/init.d ./sendmail stop Ainsi on arrte le Mail Transfer Agent sendmail. e Pour que cet arrt soit permanent il faut empcher le dmarrage au boot du e e e daemon. Il faut dabord savoir dans quel run level on dmarre. En RedHat e cest 3 (multiuser sans xdm) ou 5 (multiuser avec xdm). Voir dans le chier /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 rpertoire /etc/rc.d/rc3.d ou /etc/rc.d/rc5.d e
89
Les scripts sont en /etc/init.d le runlevel est 2 par dfaut. Le rpertoire 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 dmarrage. S20 signie que son rang de dmarrage est 20. e e Pour lempcher de dmarrer 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 crer 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 rseau e sendmail Mail Transfer Agent : reoit, envoit, route du mail. Arrter le daemon c e sendmail nempche pas denvoyer du courrier. Il empche den recevoir e e sur sa machine.
Domain Name Server : peut tre utilis comme cache ou comme DNS e e primaire ou secondaire, sinon inutile. snmpd Serveur snmp pour la gestion rseau. Inutile en gnral e e e rpc.nfsd G`re les demandes de rpertoires des clients par nfs. Ne le dmarrez pas e e e si vous ne lutilisez pas. rpc.mountd Idem G`re les demandes de clients de monter des rpertoires exports. e e e Voir chier /etc/exports samba serveur pour machines Microsoft Windows . Si vous lactivez, paramtrez e le dans /etc/smb.conf. Ajouter en particulier : hosts allow = 193.54.230. 127. o` 193.54.230. est mon rseau local. u e sshd connexion scurise ` dautres 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
inetd, le super-daemon lance, ` la demande du rseau, les daemons cona e gurs dans le chier /etc/inetd.conf. e Pour viter de laisser ouvert des services inutiliss on procdera ainsi : e e e 1. se mettre sous root 2. diter le chier /etc/inetd.conf. Chaque service est dcrit sur une ligne. e e 3. Mettre un # de commentaire en tte de chaque ligne correspondant ` un e a service inutilis. Vous pouvez ainsi commenter toutes les lignes dont vous e ne connaissez pas la signication. Exemple :
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 loblige ` relire son chier de conguration. 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 dun daemon update-inetd --enable shell active le serveur rsh dsactivation dun daemon e update-inetd --disable shell dsactive le serveur rsh e ajout dune entre e update-inetd --group MAIL --add \ pop-3\t\tstream\ttcp\tnowait\troot\t/usr/sbin/tcpd\t/usr/sbin/in.pop3d ajoute une entre 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 lancs 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 lhorloge sur dautres machines par la commande rdate telnet connexion depuis une machine distante (` contrler ou interdire) a o ftp serveur de chiers (` contrler ou interdire) a o shell permet dexcuter des commandes ` distance via rsh (` contrler). e a a o login permet la connexion ` distance par rlogin (` contrler ou interdire) a a o exec permet dexcuter des commandes ` distance via rexec (` contrler ou e a a o interdire)
92 talk
permet de communiquer en temps rel (peut se prter ` des abus) e e a ntalk idem pop-x rel`ve de bo aux lettres depuis des machines distantes : ` interdire, cest e te a dangereux. imapd idem nger rpond ` la commande nger. 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 chier archa que. Surtout ` interdire a bootps permet de booter une machine par le rseau. A supprimer. e mountd permet ` une autre machine de monter par mount une partie de votre a disque dur (nfs) . Voir le daemon. rusersd rpond ` la commande rusers pour conna e a tre les utilisateurs en session sur votre machine rstatd ? saft serveur de chiers sendfiled (Simple Asynchronous File Transfer)
6.4
Si on examine le chier /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 remmorant la syntaxe ` laide de man inetd.conf, on constate que e a le super-daemon inetd nappelle pas directement le serveur telnet in.telnetd mais appelle /usr/sbin/tcpd qui appelera sous condition in.telnetd. tcpd est un tcp-wrapper. Il nappelle le daemon sollicit par le rseau que e e si le demandeur satisfait ` certaines conditions qui sont xes dans les chiers a e /etc/hosts.allow et /etc/hosts.deny. Ces chiers prcisent les conditions e de validit dun couple (daemon : client) : e
93
Si une condition du chier /etc/hosts.allow est satisfaite, laccs au e service est autoris. e Sinon, si une condition du chier /etc/hosts.deny est satisfaite, laccs e est refus. e Dans les autres cas lacc`s est autoris. e e Si les deux chiers sont absents, vides ou ne contiennent que des commentaires, lacc`s ` tous les serveurs contrls 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. Cest le dernier e lment du chemin absolu. Exemple : in.qpopper pour /usr/sbin/in.qpopper ee client est une liste de noms de domaines ou dadresses IP spars par des e e blancs ou des virgules .u-strasbg.fr dsigne toutes les machines dont le nom de domaine se tere mine par u-strasbg.fr. Noubliez pas le point au dbut. e 193.54.230. dsigne toutes les machines dadresses IP commenant par e c 193.54.230. Noubliez pas le point nal. La r`gle recommande est dinterdire tous les acc`s sauf aux machines spciquement e e e e dsignes. e e Pour cela, le chier /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 signie tous les services interdits ` tous les clients. a Le chier /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 rseau local e ALL :193.54.230. autorise tous les services ` toute machine de ce rseau. a e En loccurrence le rseau 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 lacc`s au serveur in.qpopper e aux machines de u-strasbg.fr (noter le point). in.qpopper : 130.79. autorise lacc`s au serveur in.qpopper aux mae chines du rseau de classe B 130.79.0.0 (noter le point). e imap2 : 130.79.186.0/255.255.255.0 autorise lacc`s au serveur imap2 e aux machines du sous-rseau rseau 130.79.186.0. e e tcpdcheck : contrle des rgles dacc`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 indpendants, e cest ` dire ne sont pas lancs par le super-daemon inetd mais sont compils a e e avec la librairie tcp-wrapper. On peut alors contrler leur acc`s dans les chiers o e /etc/hosts.allow et /etc/hosts.deny. Cest le cas de sendmail en Debian. tcpdmatch prdit 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
On peut contrler lacc`s par XDMCP (xdm). o e Documentation : faire man xdm Fichier de conguration : /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
Un bon mot de passe a au moins 6 caract`res, mlange minuscules et mae e juscules, chires et caract`res spciaux. Il ne doit pas tre facilement dductible e e e e dun dictionnaire. Un truc mnmotechnique est de prendre une phrase que lon 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 cest 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.6.2
Shadow passwords
Ils sont implment dans les distributions Linux rcentes et il faut lutiliser. e e e Le chier /etc/password est lisible par tous. Avec les Shadow passwords, les mots de passe (crypts) ne sont plus dans le chier /etc/password mais e dans /etc/shadow qui lui nest lisible que par root.
6.7
Lart du pirate est de parvenir a rentrer sur une machine sans conna de ` tre userid ni de password. Sil conna un trou de scurir dun logiciel rseau il peut t e e e lexploiter. Si cest un dbordement incontrl dun buer il peut arriver ` faire e oe a excuter ` votre machine ses propres instructions et en prendre le contrle. Les e a o logiciels tournant sur Linux tant tr`s connus, le cas nest pas rare. Il faut donc e e appliquer les corrections de scurit en particulier sur les serveurs rseaux. 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 daccueil 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 dune distribution sont des corrections de bugs et non des ajouts de nouvelles fonctionnalits. e Les trous de scurit sont signals sur la liste Bugtraq : e e e
echo "sub bugtraq"|mail -s"" LISTSERV@SECURITYFOCUS.COM Plus gnralement consultez : http ://www.cert.org/ e e
6.8
Dtection dincursions e
Direntes commandes permettent de dtecter des incursions ou tentatives e e dincursions last|more : liste les logins ls -l /etc/passwd /etc/group : contrle de la date de derni`re modio e cation de chiers sensibles. Si elle indique 3h du matin, on peut sinterroger. Inspection du chier log du tcpwrapper, permet de reprer des incursions e ou des tentatives. less /var/log/secure : (RedHat) less /var/log/daemon.log (Debian) Examen du chier de login par su
96
6.8.1
Lorsquun pirate arrive ` sintroduire sur un serveur, une des premi`res a e choses quil fera est laisser des programmes en local pour permettre son retour de mani`re aussi facile que possible. Cest pourquoi il est intressant de signer e e les chiers importants, et de vrier ` intervalle rgulier quils nont pas boug e a e e (tous les soirs par exemple). Le programme tripwire peut alors vous intresser. e Tripwire est un outil qui a un seul but : dtecter tout changement dans e lintgrit dun chier. Ca signie quil peut de mani`re non-discutable dire si e e e un chier protg a t altr par un moyen qui viole les r`gles dtermines e e ee ee e e e par ladministrateur rseau. Tripwire peut aussi dterminer si un chier a t e e ee ajout ou eac dun rpertoire protg. Tripwire a des r`gles tr`s exibles et e e e e e e e tr`s puissantes pour dnir exactement ` quoi il devrait faire attention. e e a Pour plus dinformations sur Tripwire, allez voir http ://www.tripwiresecurity.com/ Tripwire est un package Debian.
6.9
Prcautions lmentaires e ee
Pas de . dans le $PATH de root. Faire ./prog pour excuter un chier e du rpertoire courant. e Ne jamais faire tar x sous root dune archive importe de lextrieur. Un e e farceur peut ainsi vous faire craser votre chier /etc/passwd e A linstallation dun logiciel faites make -n install avant make install sous root. Interdisez lacc`s a certains chiers comme /etc/passwd par ftp. Un sere ` veur comme wu-ftpd-academ permet dans son chier de conguration /etc/wu-ftpd-academ/ftpaccess noretrieve /etc/passwd /etc/group
6.10
6.10.1
Description Attaque qui empche des utilisateurs lgitimes de se connecter. Exemple e e dattaque : Warning: possible SYN flood from 212.187.226.114 on 193.54.230.20:80. Sending cookies. Une attaque par syn-ood permet de perturber le service TCP sur un port particulier (ici le serveur Web). En gnral un Syn Flood est symptomatique dune attaque par dni de e e e service. Le principe est simple et bas sur les caractristiques 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 conrmer ` B la demande de e a connexion
97
A ce niveau la connexion est considre comme tablie. Point important : la ee e machine B, depuis ltape 2, a allou de la mmoire pour grer la connexion en e e e e cours jusqu` larrive dun time out ventuel si ltape 3 ne se ralise pas. a e e e e Le principe dune action SYN Flood consiste alors ` envoyer une rafale de a SYN, dallouer ainsi un maximum de mmoire au niveau du serveur, et de ne e jamais rpondre au SYN/ACK par le ACK normalement attendu. Le serveur e a alors des dicults pour rpondre aux requtes lgitimes do` le dni de e e e e u e service. Quelques SYN/ACK sans rponse peuvent tre apparents (si on a lesprit e e e large) ` des pertes de paquets qui concerneraient potentiellement la rponse a e ACK de celui qui a initialis la connexion. Si la frquence est leve, il y a sans e e e e doute un probl`me de scurit ` la cl ... e e ea e Tout serveur Web a ce genre de messages rguli`rement, sans que cela soit e e forcment une attaque. e Dtection : 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 protger. a e CONFIG SYN COOKIES : Normal TCP/IP networking is open to an attack known as SYN ooding. 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 ooded, 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 o. If you say Y here, note that SYN cookies arent enabled by default ; you can enable them by saying Y to /proc lesystem support and Sysctl support below and executing the command echo 1 >/proc/sys/net/ipv4/tcp_syncookies at boot time after the proc lesystem has been mounted. If unsure, say Y.
6.10.2
smurf
Le principe de cette attaque cest dmettre les trames avec une adresse e source modie. Le propritaire de cette adresse (et toutes les routes qui y e e m`nent) se trouvent saturs de rponse ` des pings non sollicits. Voir : ftp ://ftp.cert.org/pub/cert advisorie e e e a e
98
6.10.3
En pratique il y a 2 DoS : remplir les chiers de log de la machine cible couper la machine cible du monde si le soft est congur pour bloquer e automatiquement laccs aux services par rapport ` ladresse IP source e a dans le cadre dun stealth scan ou scan UDP. Parade Rajouter ladresse IP source dans /etc/hosts.deny ` partir de tcp wrappers a pour courir moins de risques.
6.10.4
IP spoong
Ce sont des paquets IP qui arrivent de lextrieur avec une adresse source e traque (forged), paraissant tre une adresse du rseau local. e e e Parade Prvue dans /etc/init.d/netbase activ au boot en Debian. e e If you turn on IP forwarding, you will also get the rp lter, which automatically rejects incoming packets if the routing table entry for their source address doesnt match the network interface theyre arriving on. This has security advantages because it prevents the so-called IP spoong, however it can pose problems if you use asymmetric routing (packets from you to a host take a dierent path than packets from that host to you) or if you operate a non-routing host which has several IP addresses on dierent interfaces. To turn rp lter o 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 spoong
Using the spoong 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 trac has to be passing your network device,... you might consider taking a job at some transatlantic route provider).
6.10.6
Blind spoong
Using the spoong 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 quun 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 dattaque d`s quelles arrivent. e Parade Portsentry Logge les acc`s aux ports IP. Quand il dtecte certaines ace e tions peut excuter automatiquement des parades : e Renseigne /etc/hosts.deny
99
Fait des ipchains Envoi dun message au provider de lattaquant avec les logs de ma machine (donc heure, date et IP), ce qui est en general assez dissuasif. Courtney Courtney vous permet dcouter tout un rseau local pour les e e attaques type Satan (scan de ports). Il coute le rseau local et identie les e e machines sources dattaques Satan. Courtney est un script Perl. Il reoit c des informations de tcpdump et compte le nombre de nouveaux services que contacte une machine en un temps dni. Si une machine se connecte e ` un nombre important de services dans cette priode de temps, courtney a e identie cette machine comme un pirate potentiel par attaque SATAN. Les options de courtney vous permettent de paramtrer un mail sur lequel e vous recenserez toutes les attaques sur votre serveur (ou votre rseau loe cal). On peut modier courtney pour quil rewallise les machines pirates par le biais de ipfwadm. Cette modication est tr`s simple, il sut de e rajouter ` la ligne 1231 : a system("/sbin/ipfwadm -I -a deny -S $host -o"); Loption -o de ipfwadm vous permet de continuer de logguer les connexions sur le serveur mais de ne pas y rpondre. Tr`s utile pour voir si la machine e e pirate continue dattaquer pendant longtemps. Sentry Sentry est un moyen plus radical et plus ecace 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 dtection dintrusion qui soient gnriques, stables, e e e et qui demandent peu en maintenance. Sentry a un nombre doptions pour dtecter les scans de port, et quand il en dtecte il ragit de plusieurs e e e faons : c Un log pour indiquer lincident par syslog() La machine est automatiquement ajoute dans /etc/hosts.deny pour e TCP Wrappers. Le serveur local est automatiquement recongur pour ignorer tous les e paquets de la machine pirate par le biais de ipfwadm. Pour plus dinformations ` propos de sentry allez voir : http ://www.psionic.com a
6.10.8
Ecoute du rseau e
Une machine du rseau local peut couter le rseau ou snier et ainsi e e e rcuprer des mots de passe et commettre dautres indiscrtions. e e e Parade Reprer les interfaces rseaux en mode promiscuous par un antisnier e e neped antisnier http ://apostols.org/projectz/neped dtecte les ine terfaces en mode promiscious. Voir aussi : http ://www.l0pht.com/antisniff sentinel semble un peu mieux fourni que neped (plus de mthodes de e dtection). e http ://www.packetfactory.net/Projects/sentinel/ Sentinel [3] tourne sous Linux mais necessite Libnet [3]. [3] http ://www.packetfactory.net/Projects/
100
6.11
Lutilisation de ssh est vivement recommande. ssh crypte les paquets transe mis sur le rseau et vite en particulier que des indiscrets dcouvre des mots de e e e passe en coutant le rseau. e e
6.12
En savoir plus
zmore /usr/doc/HOWTO/Security-HOWTO.gz
Chapitre 7
7.1
Un rewall est une interface qui prot`ge un rseau priv du reste dInternet. e e e Il est conu pour contrler le ux de paquets en se basant sur ladresse IP source c o et destination, le port et le type contenu dans chaque paquet. Plusieurs techniques de rewall sont disponibles : le routage (forward ) : reoit un paquet IP sur un interface rseau et la c e renvoie sur un autre le ltrage : ne route un paquet IP que sil satisfait ` des r`gles portant a e sur les adresses sources et destination, les ports, le protocole, le type de paquet et les interfaces rseau en jeu. e le masquage : le rewall fait suivre le paquet vers Internet mais en changeant les adresses et ports, faisant croire (do` le nom masquage, masu querade en anglais) que le paquet vient de lui. Au retour de la rponse il e remodie len tte du paquet et lenvoie ` la machine demandeuse. Ainsi, e a les machines du rseau interne sont compl`tement invisibles de lextrieur e e e mais peuvent nammoins faire des requtes sur Internet. e e serveur proxy : cest un serveur qui fait la requte ` la place de votre e a machine et lui renvoie le rsultat. Cest une solution pour donner lacc`s e e Internet ` des machines dun rseau priv. Utilis couramment pour le a e e e web, il demande de paramtrer le serveur proxy sur le client WWW e transparent proxy : la machine du rseau priv dnit la machine transe e e parent proxy comme routeur par dfaut. Elle fait sa requte, par exemple e e http, normalement vers Internet. Les paquets IP arrivent sur le routeur. 101
Il
Le dispositif transparent proxy redirige par exemple, les paquets pour le port de destination 80 vers le port local 8080 o` ils sont traits par le u e serveur proxy squid. Donc cest le mcanisme proxy mais il ny a pas ` e a dnir de serveur proxy sur les machines clientes. e le forward de port : normalement, les machines dun rseau priv ne sont e e pas accessibles depuis lInternet. Tous les serveurs doivent tre installs e e sur le rewall, (ou des machines sur Internet). Cependant, il est possible daccder depuis Internet un serveur du rseau priv par le forward de e e e port. Il revient ` dire que les requtes venant de lInternet pour le port 80 a e du rewall sont rediriges sur le port 80 dune machine du rseau priv. e e e existe dirents outils de rewalls pour Linux : e Fonctions de ltrage et de masquage intgr dans le noyau : ipfwadm en e e noyau < 2.2 et ipchains pour les noyaux 2.2, iptables et Netlter pour le futur noyau Linux 2.4. IPlter (origine BSD) sur noyau Linux 2.0 http ://coombs.anu.edu.au/~avalon/ip-filter.ht
7.2
Dans ce schma, la machine Linux Routeur est connecte ` 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 prives en 192.168.1.x (cf RFC e 1597). Elles sont sur un rseau priv invisible depuis Internet. La machine Linux e e Routeur est connecte ` ce rseau priv par un interface Ethernet eth1. e a e e Si la machine Linux Routeur est congure en routeur IP avec masquage e dadresses, alors :
` ` 7.2. MASQUAGE : PERMETTRE A UN RESEAU PRIVE DACCEDER A INTERNET103 si les machines A-box, B-box, ... ont dni la machine Linux Routeur e comme gateway, Linux Routeur transmet les paquets IP du rseau interne vers le rseau e e externe en changeant le port-source et mettant son adresse IP ` la place de a ladresse IP source. Il mmorise les param`tres originaux de la connexion e e TCP : (IP-source, port-source, IP-dest, port-dest). Cest le masquage. pour les machines de lInternet les paquets paraissent provenir de Linux Routeur quand Linux Routeur reoit un paquet TCP de lextrieur, il examine c e si le port-dest est un de ceux qui ont t attribus prcdemment par le ee e e e masquage. Si cest le cas il retrouve ladresse IP et le port dorigine, 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 nomme ftp-data ncessitent le chargement dun module du noyau. e e Une machine du rseau interne ne peut tre appele depuis Internet, sauf e e e si on congure sur la machine Linux Routeur le forward de port.
7.2.1
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 crer les moe dules MASQ et dactiver loption 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. Cest optionnel, mais permet de dboguer tout probl`me avec tcpdump e e Kernel/User netlink socket (CONFIG NETLINK) : YES. Optionnel mais permet le log des acc`s au rewall. e Routing messages (CONFIG RTNETLINK) : NO Network rewalls (CONFIG FIREWALL) : YES. Permet dutiliser loutil de rewall : ipchains TCP/IP networking (CONFIG INET) : YES IP : advanced router (CONFIG IP ADVANCED ROUTER) : NO. Cest indpendant 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 traqus venant de lInternet avec comme e adresse source, une adresse du rseau interne) e IP : rewalling (CONFIG IP FIREWALL) : YES IP : rewall packet netlink device (CONFIG IP FIREWALL NETLINK) : YES. Optionnel mais amliore le log des acc`s au rewall. e e IP : transparent proxy support (CONFIG IP TRANSPARENT PROXY) : YES. Permet de rediriger un paquet IP vers un autre port du rewall ce qui fait croire aux machines du rseau priv quelles interrogent directee e ment un serveur Internet alors quelles passent par un transparent proxy server install sur le rewall. La redirection sindique par ipchains -j e REDIR. IP : masquerading (CONFIG IP MASQUERADE) : YES. Active le mas-
quage dadresses IP. Cette option active automatiquement ip always defrag. Ceci vite davoir ` ltrer des fragments de paquets IP, ce qui peut tre e a e problmatique, car les fragments suivant le premier nont plus dadresse 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 daccder depuis Internet des sere veurs du rseau interne par SMTP, TELNET et WWW. FTP ncessite e e un autre patch. IP : ip fwmark masq-forwarding support (EXPERIMENTAL) (CONFIG IP MASQUERADE MF NO. Il est recommand dutiliser plutt 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 scurit rseau. e e e e Network device support (CONFIG NETDEVICES) : YES. Obligatoire : Support dinterface rseau. e Dummy net driver support (CONFIG DUMMY) : YES. Utile pour debug. /proc lesystem support (CONFIG PROC FS) : YES. Ncessaire pour e activer le routage (IP forward) Compilation du noyau et mise en place Si le rpertoire /lib/modules/2.2.17 existe dj`, 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
Conguration du masquage
La machine Linux Routeur a 2 interfaces rseaux. Le noyau sait reconna e tre une deuxi`me carte, mais si ce sont des cartes ISA, il faut veiller ` ce quelles e a naient pas mmes 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 DACCEDER 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 Dabord on teste que le noyau supporte les cha nes rewall pour IP par ls /proc/net/ip_fwchains Si ce chier est absent, le noyau est mal congur. e Le masquage scrit 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 spci ` la suite e ea Ligne 2 : pour les paquets dont ladresse source provient du rseau interne, e forward avec masquage Ligne 3 : activation du IP forward, le routage IP. Il serait dangereux de faire du masquage le dfaut en crivant : e e /sbin/ipchains -P forward MASQ echo "1" > /proc/sys/net/ipv4/ip_forward Ces commandes peuvent tre automatises par un shell script activ au boot. e e e On lui fera galement charger les modules ncessaires. 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 MASQed 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
Toute machine du rseau interne doit dnir Linux Routeur comme gateway. e e Conguration dune Linux Debian du rseau 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 rseau 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
7.2.4
Tests
Sur cette machine du rseau interne e ping 192.168.1.1 ping isis.u-strasbg.fr : une machine dInternet ssh zoroastre.c-strasbourg.fr ftp zoroastre.c-strasbourg.fr Durant la session lance 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
State ESTABLISHED
que cest la machine dadresse 193.54.230.3 donc le Linux Routeur qui a appel zoroastre dadresse 193.54.230.20 sur le port 22. e La machine du rseau interne qui a fait ssh zoroastre, netstat montre e quelle 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
State ESTABLISHED
7.3
La commande ipchains
La commande ipchains permet dindiquer au noyau Linux les r`gles de e ltrage en entre, en sortie ou lors du routage. Elle permet aussi le masquage. e Elle est rserve ` root. e e a Syntaxe : ipchains -h
7.3.1
Au dpart, 3 listes de r`gles sont prdnies : input, output, forward. Elles e e e e sont appeles cha e nes rewall ou cha nes tout court. Quand un paquet arrive par linterface rseau dans la machine, le noyau e utilise la cha input pour dcider ce quil fait de ce paquet. Si ce paquet ne e survit ` cette tape, alors le noyau dcide o` il va lenvoyer, cest le routage. a e e u Sil est destin ` une autre machine il consulte la cha forward. Enn, 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 quil 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 mme cha Finalement sil ny 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, cest ` dire la dcision par a e dfaut. Si on veille ` la scurit cette dcision par dfaut est DENY ou REJECT. e a e e e e En Linux Debian ipchains fait partie du package netbase. La version 1.3.4 nest pas la plus rcente mais elle est stable. e Lutilisateur peut aussi dnir ses propres cha e nes.
7.3.2
-F : (F comme ush) supprime toutes les r`gles dune cha e ne, (mais pas la policy). -A : ajoute une r`gle ` une cha e a ne -P : xe la policy (cest ` dire laction par dfaut) dune cha ` target a e ne a -L : liste les r`gles dune cha si spcie, de toutes sinon. e ne e e -D : eacement dune r`gle dans une cha e ne -N : cration dune cha e ne -X : suppression dune 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 xe la policy de la cha forward ` DENY ne a ipchains -L : liste les r`gles de toutes les cha e nes (mais nindique pas linterface). 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
7.3.3
109
Dans le cas de TCP ou UDP, un numro 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, mme r`gles dcriture e e e -i : interface. Dans la cha input cest celui par o` arrive le paquet, ne u dans output par o` il sort, dans forward vers o` il est dirig. Si linterface u u e nexiste pas (ex : ppp0), il ny a pas derreur. -p : protocole (tcp, udp, icmp) -y : -j : Action (Target) : ACCEPT : permet au paquet de continuer DENY : dtruit le paquet e REJECT : dtruit le paquet et en plus gn`re un message de rponse e e e e ICMP host unreachable MASQ : masquage du paquet (valable uniquement dans la cha forne e e ward) CONFIG IP MASQUERADE doit tre dni dans le noyau. REDIR : redirige vers un port local, on peut lindiquer ` 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 congur dans e e le noyau RETURN : revient ` la cha appelante, sinon excute laction dnie a ne e e par -P cha ne. autre nom : cha dnie par lutilisateur ne e -l : log Certains param`tres peuvent tre nis 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 marqus du ag SYN. e -s ! 192.168.1.1 : toute adresse IP source sauf 192.168.1.1
7.4
7.4.1
Exemples de ltrage
Test du ping
Dans lexemple suivant, sous root : ping localhost marche par ipchains -A input -s localhost -p icmp -j DENY on interdit en entre tout paquet ICMP ayant comme adresse source 127.0.0.1 e ping localhost ne marche plus on eace la r`gle prcdente 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 gn`re au boot les cha e e nes de ltrages et de masquage. Lancement par /etc/init.d/ipmasq Par ipmasq -d, il gn`re les commandes ipchains sans les excuter. 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 xe la policy des cha nes input, output et forward ` DENY : aucun a paquet IP ne rentre, ne sort, nest 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 linterface 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 linterface eth1 et ayant pour adresse source les adresses 192.168.1.1 ` 192.168.1.255, cest ` dire le rseau 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 linterface eth0 et ayant comme
111
adresse destination 193.54.230.3 cest ` dire ladresse 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 linterface eth0 et ayant comme adresse source une adresse du rseau interne et on crit les acc`s dans e e e le log (spoong). Tous les autres paquets sont rejets conformment ` la e e a policy de input, mais sans tre loggs. 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 linterface eth0 et ayant comme adresse source une adresse du rseau 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 linterface lo. -j ACCEPT -i eth1 -d 192.168.1.1/255.255.255.0 : on accepte tout ce qui sort par linterface eth1 ayant une adresse de destination du rseau e interne. -j ACCEPT -i eth0 -s 193.54.230.3/255.255.255.0 : on accepte tout ce qui sort par linterface 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 linterface eth0 ayant comme adresse de destination une adresse du rseau interne et on logge les infractions. e
7.4.3
Antispoong
Debian excute au boot dans le chier /etc/init.d/netbase deux r`gles e e antispoong : 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 ajoute ` la cha input rejette en entre 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 dacc`s. e La deuxi`me ajoute ` la cha input rejette en entre sur tout interface e e a ne e autre que loopback tout paquet avec comme adresse source ladresse de la machine.
7.5
7.5.1
On peut vouloir autoriser les connexions TCP dans un sens et pas dans lautre. Par exemple on veut pouvoir accder ` 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 laccder 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 appels SYN packets ont le ag SYN positionn et les ags ACK e e et FIN non positionns. On peut les slectionner par loption -y. Ainsi pour e e dsigner 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 accder au serveur smtp 130.79.200.3 mais on e refuse quil 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
7.7
7.7.1
Serveurs proxy
http
junkbuster is an instrumentable proxy that lters the HTTP stream between web servers and browsers. Its main purpose is to enhance privacy squid apache
7.7.2
telnet, ftp
7.8
IP MASQUERADING permet lacc`s ` Internet ` tout un rseau priv en e a a e e souscrivant un seul abonnement aupr`s dun fournisseur dacc`s. Si cest un e e acc`s tlphonique par PPP, ceci nest pratiquable que si le lancement de pppd e ee sur le rewall peut tre dclench automatiquement par diald. Sur Debian, e e e installer le package diald. Attention, mme si on utilise PPP, il faut congurer le support de SLIP dans e le noyau.
7.9
Documentation
Chapitre 8
Ce document dcrit comment installer et utiliser ssh sur Unix, Linux en e particulier. Il rsume la documentation fournie avec le logiciel. Merci ` Beno e a t Speckel pour ses conseils. Lutilisation de ssh, en fait OpenSSH, version libre de SSH est vivement recommande pour communiquer avec une machine distante sur Internet. ssh e crypte les paquets transmis sur le rseau et vite en particulier que des indise e crets dcouvre des mots de passe en coutant le rseau. Mais en plus cest une e e e parade ` certains trous de scurit dInternet notamment que des paquets IP a e e soient traqus de mani`re quune machine se fasse passer pour une autre. e e ssh ou slogin remplace rlogin, rsh et telnet . Les applications X11 lances depuis une session ssh circulent dans un canal crypt. On na plus e e ` soccuper de la variable DISPLAY et lauthentication X11 par xauth a est automatique. scp (secure copy) remplace rcp ou par extension ftp. On peut sauthentier par un syst`me de cls publiques et prives 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 : dun serveur sshd dun client ssh (aussi appel slogin) e doutils de gestion de cls : 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
man ssh-agent man make-ssh-known-hosts RFC : The SSH (Secure Shell) Remote Login Protocol : Internet Draft dcrivant le protocole e Livres Rseaux par Andrew Tanenbaum, Interditions : explique au chapitre 7 e e la scurit dans les rseaux, les bases de la cryptographies, les algorithmes e e e DES, 3DES, IDEA, les algorithmes ` cl publique, RSA, les protocoles a e dauthentication. Applied Cryptography par Bruce Schneier, John Wiley & Sons, 1996 traduit en franais sous le titre Crytographie applique c e
8.3
Conguration de ssh
Examinez les chiers de conguration : /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 daccepter des connexions ssh sur sa machine. Apr`s avoir install le package, le chier de conguration 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
Contrles dacc`s o e
La librairie tcp-wrapper contrle les acc`s ` sshd avec les chiers /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 autoriss : 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 autorises pour les mmes doe e maines le forward de port est autoris pour pop et imap au prot des mmes. e e
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 nest pas crypte. e
8.5.1
1. Sur la machine A, crer les cls par la commande ssh-keygen qui cre e e e une cl : e publique dans ~/.ssh/id rsa.pub. Cette cl publique doit tre copie e e e sur les autres machines si lon veut sauthentier par RSA en sy connectant. et une prive dans ~/.ssh/id rsa e En plus elle demande une passphrase qui sert ` protger la cl prive a e e e (mais nest pas un password UNIX). Une bonne passphrase doit avoir de 10 ` 30 caract`res. Une simple phrase nest pas une bonne passphrase car a e trop facilement devinable ou norant pas une entropie susante, cest ` a dire pas assez de dsordre. e 2. Copier la cl publique de la machine A (chier ~/.ssh/id rsa.pub sur e machine-A) sur la machine B dans ~/.ssh/authorized keys . Attention, une cl fait une ligne. Dans ce chier ~/.ssh/authorized keys de la e machine B, on ajoutera les cls publiques des machines depuis lesquelles e on se connectera sur B. Attention, faire : chmod 600 $HOME/.ssh/authorized_keys De mme .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 mme 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
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 na pas eu ` e a fournir son password Unix sur B. Si on a le diagnostic Bad passphrase ou sil y a un autre probl`me, le password Unix est demand mais la e e communication est toujours crypte. 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 chiers de cls 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 na pas le mme 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 chiers $HOME/.rhosts sont devenus inutiles, ils doivent tre eacs e e parce quils sont dangereux. ssh remplace rsh On peut par ssh excuter des commandes sur une machine distante sans sy e connecter. Ainsi sur la machine A : slogin machine-B w
fait excuter la commande w sur la machine B. Le rsultat sache sur mon e e cran de la machine A. e Authentication par ssh On a prsent ci-dessus lauthentication par cl RSA, mais en fait ssh e e e accepte les authentications suivantes : mot de passe Unix (SSH AUTH PASSWORD) chier .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 chier .rhosts ou (.shosts) et cl RSA cumuls (SSH AUTH RHOSTS RSA) e e Options de ssh Loption -v (verbose) dcrit les tapes de ltablissement de la connexion. e e e Utile quand ssh ne marche pas. Loption -f met ssh en arri`re plan. e slogin -f machine-B xterm Loption -n met ssh en arri`re plan et redirige stdin depuis /dev/null. e Cest 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. Loption -C comprime (par la mthode de gzip) les paquets changs. e e e Vivement recommand pour une session PPP par modem tlphonique. e ee Loption -c permet de choisir la mthode de chirement : e idea (dfaut) e
8.5. SSH CLIENT des 3des blowfish arcfour none (On tiendra compte des options prises ` linstallation.) a
119
8.5.3
On peut copier des chiers par scp (secure copy) qui demande lauthentication et crypte la communication. Exemple : scp machine-B:adm/users/ajout ajout copie le chier adm/users/ajout de mon rpertoire sur la machine distante e machine-B dans mon rpertoire courant sur la machine locale. e Syntaxe des noms de chiers : Un nom de chier peut contenir un nom dutilisateur 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 rcursive de chiers (copie le rpertoire et les chiers quil contient). e e p : prserve date et permissions des chiers copis. e e c : choix de la mthode de cryptage e
8.5.4
Linconvnient dans lauthentication par cl publique est davoir ` taper la e e a passphrase ` chaque nouvelle connexion. ssh-agent est un processus tournant a en permanence qui g`re les cls prives pour lidentication par cl publique. e e e e Une fois lanc, on lui communique par ssh-add son identit, cest ` dire ses cls e e a e $HOME/.ssh/id rsa, $HOME/.ssh/id dsa et $HOME/.ssh/identity en tapant la passphrase. Par la suite, cest ssh-agent qui fournit ces cls. e Au lancement de ssh-agent, deux variables denvironnement sont gnres e ee qui permettent aux commandes ssh ultrieures de communiquer avec ssh-agent : e SSH AGENT PID : numro 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 indique 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 denvironnement SSH AGENT PID et SSH AUTH SOCK sont dnies et permettent la communication avec ssh-agent. e Quand on termine ce shell, ssh-agent est tu. e Soit on rcupre la dnition de des deux variables que ssh-agent copie e e e sur stdout :
120
ssh-agent > fichier fichier contient la dnition de ces deux variables que lon peut activer e ailleurs dans un autre shell en y faisant : . fichier ssh-add communique ` ssh-agent ma cl prive 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 dautres machines, je naurai plus ` taper la passphrase a Options de ssh-add ssh-add -l liste les cls gres par ssh-agent. e ee ssh-add -D invalide toutes les cls 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. Reprer e e son PID echo $SSH AGENT PID : cest le PID de ssh-agent echo $SSH AUTH SOCK : Vrier que cest le chemin dun socket de nom e /tmp/ssh-xxxxxxxxx/agent.nnn Faites slogin machine : la passphrase vous est demande parce que vous e navez encore communique aucune identit ` ssh-agent e ea ssh-add -l. Vous obtenez la rponse The agent has no identities. e ssh-add : Votre passphrase est demande. Vos cls prives sont lues et e e e conserves par ssh-agent e slogin machine : Vous pouvez maintenant vous connectez sans passphrase aux machines o` vous avez dni 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, jai un chier .xinitrc comme suit : #!/bin/sh xrdb -load $HOME/.Xresources exec /usr/bin/ssh-agent fvwm95 Je fais ssh-add dans la premi`re fentre xterm que jouvre. e e Ceci dit, il sut que jajoute 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 lai 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 sil nest pas lanc ou bien positionne e dans le shell courant les variables denvironnement SSH AUTH SOCK et SSH AGENT PID
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 fentre 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 # rcuprer et vrifier 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 # dmarrage 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 cre un tube e e nomm (named pipe), cest un chier, par exemple /tmp/ssh-morel/ssh-24842-agent e qui permet aux autres applications ssh de communiquer avec lui. Le nom de ce chier est retenu dans la variable SSH AUTH SOCK et le numro de processus de e ssh-agent est dans SSH AGENT PID. Quand on lance ssh-agent, (-s signie shell sh, mettre -c pour csh) il ache a e ` lcran : 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; Lastuce est de dtourner ces dnitions de variables dans un chier, ici e e $HOME/.ssh/ssh-agent.info et de les utiliser pour mettre en communication dautres shells avec ssh-agent. si $SSH_AUTH_SOCK est vide alors si le fichier $HOME/.ssh/ssh-agent.info existe je le fais excuter 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 lefface jinhibe linterruption 1 (SIGHUP) jexcute ssh-agent ` la place du process courant et e a dtourne sa sortie dans le fichier $HOME/.ssh/ssh-agent.info e jexcute ce fichier pour valoriser les variables SSH_AGENT_PID e et SSH_AUTH_SOCK je lance ssh-add
8.6
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 dun 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
La procdure dinstallation en plusieurs tapes de la distribution Linux Dee e bian permet dinstaller une machine en installant juste les disquettes Rescue et Drivers puis en recopiant le syst`me dune autre machine par nfs en rseau loe e cal. Cette procdure est une ide de Beno Speckel <Benoit.Speckel@IReS.in2p3.fr>. e e t Cette manoeuvre de clonage est dlicate en soi, elle est dautant plus die cile que les outils dont on dispose sur la disquette rescue Debian sont vraiment restreints et primitifs : mount, vi, zcat (ltre), star, ps, df, lilo... Ce vi est en ralit ae qui est beaucoup plus limit que le vrai vi, ce star e e e nest pas le tar de GNU.
9.2
9.2.1
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 dpart. En particulier : e serveur X11 pour les direntes cartes graphiques : xserver... e
9.3
124
9.3.1
Fichier tar
Pas de -P au tar puisquon recopie dans /target donc se mettre dans / pour ne pas avoir un rpertoire 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 larchive. Regarder si elle ne contient pas des ././@LongLink pour des noms de chiers de plus de 100 caract`res. Ceci e nest pas support par star. Les exclure, cest le cas plus haut de /var/state/apt/lists. e Taille de larchive de clonage : de lordre de 150 Meg.
9.3.2
Exportation
Exemple : rpertoire /home/morel export pour les machines du rseau 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 rseau e de classe C ` monter ce rpertoire. a e Voyez aussi les autorisations dacc`s du tcp wrapper dans /etc/hosts.allow e et /etc/hosts.deny
9.4
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
125
boot disquette rescue, chec possible (mauvaise disquette, mauvais lece teur) cong clavier cration lesystem ext2 + swap On peut la faire par le menu ou ` la main e a par Alt-F2. Exemple : cration dun lessystem ext2 sur /dev/hda2 e avec un inode pour 16K octets, 4% despace rserv et contrle 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 dinstallation : /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) conguration rseau e Choose Network Interface : Choisissez eth0 2. Copie de larchive. Quitter le menu ` Install the base system : a Alt-F2 ifconfig (test rseau: vrifiez 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 dautorisation dacc`s au serveur, diage e e nostic : mount RPC : Program not registered (voir syslog du serveur), soit mauvaise lecture de la disquette drivers. Copier larchive par : cd /target zcat </mnt/clone.tar.gz|star sync sync pour tre sr que tout est crit sur disque. e u e 3. Paramtrage e Conguration des lesystems ` monter a On corrige les noms de devices dans fstab : vi etc/fstab Conguration 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 linstallation 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 DUNE 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 Excuter lilo. La commande lilo fait un chroot /target. Cest donc e /target/etc/lilo.conf qui est pris en compte. Sassurer que la partition o` on met lilo est bootable u Ici /dev/hda2. Le vrier par fdisk -l /dev/hda. si ce nest pas le cas e basculer le ag de boot en faisant : fdisk /dev/hda Conguration des modules ` charger au boot a Entrer en particulier le module du driver de la carte rseau e vi etc/modules Conguration du rseau : e Il faut changer le nom de machine et son adresse IP, ladresse du routeur, des DNS. vi etc/hostname (nom machine) vi etc/init.d/network vi etc/resolv.conf Nettoyage rpertoire var e Nettoyage var/log Cration des rpertoires manquants : e e mkdir tmp ; chmod 1777 tmp mkdir proc mkdir home Vrication des daemons ` dmarrer au boot e a e cd etc/rc2.d;ls On empchera xdm de dmarrer 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 Dmontage du lesystem e cd / umount /target
9.5
Reboot
Le lesystem /target tant dmont on peut arrter sans crainte la machine e e e e et la relancer. Si LILO choue, cest quil 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 rexcute lilo. e e Changer le password de root (cest actuellement le mme que sur la mae chine m`re). e Congurer X-Window par xf86config ou bien en allant diter directee
9.5. REBOOT ment /etc/X11/XF86Config et /etc/X11/Xserver Vrier 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 10
Sendmail
10.1 Le service de mail de lInternet
Le service de mail est constitu de plusieurs fonctions : e MTA : Un Mail Transfert Agent (MTA) envoit, reoit, route les messages c suivant le protocole SMTP. Exemples : sendmail, smail, exim, postfix. MDA : Lcriture 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 rdiger 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 prototes coles POP ou IMAP : fetchmail, Netscape. Sur PC : Eudora, Netscape. Le service est organis de mani`re ` ne pas perdre de message. Lexpditeur e e a e ne reoit de notication que lorsque la dlivrance au destinataire na 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 rseaux non Internet. e
10.2
SMTP
Cest le protocole dchange de mail dInternet dcrit par RFC 821 (J.B. e e Postel 1982). Il utilise le port tcp 25. Exemple denvoi dun 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
Remarques : Pour chaque ligne envoy par le client, le serveur rpond, sauf quand on e e est dans le corps du message. Les mots cls helo, mail from etc sont en majuscules ou minuscules. e Le message, entre data et . a une syntaxe dcrite dans RFC 822. Il est e form dun en-tte compos de lignes commenant par Date, From, etc, e e e c suivi dune ligne vide puis du corps du message. Les indications From :, To : quil contient ne serve pas au transport. Elles peuvent tre falsies. e e Comme on le voit sur cet exemple, dans SMTP, on nest pas assur de e lauthenticit du message, de lexpditeur 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 rpond, 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 chires : e e Le premier chire indique si la rponse est bonne (2) ou sil y a une erreur e (5). Le deuxi`me chire indique une erreur de syntaxe (0) ou une rponse du e e mail system (5).
10.2.2
Un test pour voir si une machine ore 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
La commande VRFY permet de tester lexistence dune bo aux lettres. te Soit ` vrier la validit de ladresse <jacques.morel@iness.c-strasbourg.fr> a e e On vrie lexistence de la partie domaine de ladresse par : e
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 sannonce par une ligne commenant par le code 220 et se c terminant par ladresse IP de la machine appelante. Le client envoie vrfy jacques.morel Le serveur rpond 250 2.1.5 <jacques.morel@auger.c-strasbourg.fr>. e Le code 250 est une rponse positive, suit ladresse lgale (zoroastre est e e un alias de auger). Une rponse ngative est accompagne 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 rponse positive. e
10.2.4
La commande EXPN de RFC 821 permet de rsoudre (expand) les alias. e Cherchons par exemple qui est ladministrateur 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 indiscrtions. Il est possible de la supprimer e e sur le serveur.
10.3
SMTP est un protocole tr`s simple dont le principal inconvnient est de e e nautoriser que les caract`res ASCII sur 7 bits. Il y a deux extensions : e
132
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 quil 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 reprsentation de tout caract`re sur 7 ou 8 bits : un corps peut e e tre encod en 7bit, quoted-printable (reprsentation presque lie e e sible de caract`res accentus : = suivi des deux chires hexa du cae e ract`re), base64 (codage de 3 octets sur 4, cest ` dire dcoupe 24 octets e a e conscutifs (3 x 8) en 4 paquets de 6 bits, 6 bits susant pour reprsenter e e un caract`re dans un alphabet commun ` toutes les machines), 8bit, e a binary (codage sur 8 bits) lindication du jeu de caract`re utilis, exemple : charset=iso-8859-1 e e
10.4
Le DNS comporte des entres 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 dsigne 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 rseau e quInternet.
10.5
Caractristiques de Sendmail e
Sendmail est un MTA, il : envoie des messages reoit c route (relayage) fait dlivrer les messages dans les bo aux lettres e tes g`re la le dattente 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%), cest surtout le plus able. e Quelques caractristiques de sendmail 8.9.3 : e Le relayage est interdit par dfaut. Le relayage consiste ` recevoir un e a message non destin ` la machine locale et ` le renvoyer vers la machine ea a destinataire relle. Cest beaucoup utilis par ceux qui font de la publicit e e e sauvage sur le rseau. e
10.6. INSTALLATION
133
Les messages dont le nom de domaine indiqu dans le champ Mail from e nexistent pas dans le DNS sont rejets. e
10.6
Installation
Package Debian sendmail Version : 8.12.3-7.1 (woody), 8.13.4-3 (sarge). Sendmail ncessite aussi les packages libdb2 (gestion de base de donnes), e e m4 (macro-processeur), procmail (dlivrance des messages dans les bo aux e tes lettres) Debian propose un shell script de conguration sendmailconfig qui sexcute e lors de la conguration du package : Le chier de macros /etc/mail/sendmail.mc est cr, ee son traitement par le macro-processeurm4 donne le chier /etc/mail/sendmail.cf qui est le chier de conguration 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 conguration en ditant /etc/mail/sendmail.mc e et en refaisant excuter m4. e
10.7
Documentation
10.7.1
Conguration par m4 zmore /usr/doc/sendmail/cf.README.gz Installation, emploi de sendmail et description du chier 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
Conguration
Fichiers : /etc/mail/sendmail.mc : conguration en syntaxe m4 pour gnrer sendmail.cf e e /etc/mail/sendmail.cf : conguration de sendmail /etc/mail/sendmail.cw : noms de domaines pour lesquels nous acceptons le mail comme local. /etc/mail/sendmail.ct : noms des utilisateurs habilits ` changer le e a champ mail from : Mthode recommande : e e copier /etc/mail/sendmail.mc dans un rpertoire accessible par vous e sans tre root : e mkdir ~/adm/sendmail cd ~/adm/sendmail cp /etc/mail/sendmail.mc config.mc
134
Vrier que votre chier contient en tte une ligne : e e include(/usr/share/sendmail.cf/m4/cf.m4) Cration du chier cong.cf e m4 config.mc > config.cf Examiner cong.cf Test de la cong : crer un chier 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 chier test.txt. Vous y voyez toutes les transformations dadresse faites. Si on est satisfait, on peut installer la nouvelle conguration 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
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 aectent des valeurs ` des param`tres a e confDEF USER ID : xe le uid et le gid pour le userid mail cf /etc/passwd confCHECK ALIASES : si True quand on fait newaliases va vrier que e ladresse en partie droite est une adresse dclare dans le DNS (prend du e e temps) OSTYPE(linux) implique des options par dfaut sur la localisation des e chiers 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 ` indni ce param`tre : je ne fais pas relais pour UUCP ni BITNET FEATURE(redirect) : rejette tout mail pour les adresses notes address.REDIRECT e dans /etc/aliases avec un message derreur : 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 chier /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 dlivr localement. e e e define(confMAX MESSAGE SIZE, 5000000) : taille maximum en octets pour un message reu, sinon renvoit avec un diagnostic. c FEATURE(access db, hash -o /etc/mail/access) : permet daccepter ou de refuser des messages. /etc/mail/access est une table qui sera transforme en base de donne accde par hash coding. Exemple de e e e e contenu : 193.54.230 OK rtc1.u-strasbg.fr RELAY usa.com 550 We dont accept mail from spammers tnt2.everett.wa.da.uu.net 550 We dont accept mail from spammers www.free2blieve.com 550 We dont accept mail from spammers OK : Jaccepte les mails en provenance de mon rseau 193.54.230. e RELAY : Jaccepte de relayer (=router) les messages en provenance de cette machine usa.com je renvoie un message derreur (550) avec ce libell. (les codes e derreur sont dcrits 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 dlivr par proce e mail MAILER(procmail) : dclare le mailer procmail e MAILER(smtp) : dclare le mailer smtp e Les bases de donnes access-db sont cres 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
Il est ncessaire de mettre une limite de la taille des messages envoys e e ou reus, faute de quoi le serveur risque des probl`mes dallocation de pages c e mmoires. La limite doit tre tablie en fonction de la taille de la mmoire Ram e e e e et de la swap disponible. On peut contrler cette taille ` lmission par smtp ou o a e
136
en local et ` la rception. a e define(confMAX MESSAGE SIZE, 5000000) : taille maximum en octets pour un message reu, sinon envoi dun 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 dlivr par procmail. e e
10.8.3
La commande M4 : define(confPRIVACY_FLAGS, needmailhelo, noexpn) gn`re dans sendmail.cf : e e O PrivacyOptions=needmailhelo, noexpn Oblige quune commande HELO ou EHLO soit passe avant la commande e MAIL et interdit la commande EXPN.
10.8.4
Un null-client est une machine dont le sendmail renvoie tout le courrier ` a une autre dite smart host. La conguration doit comporter des r`gles antiree layage. Mais comme cette machine na pas ` recevoir de mail il est prfrable a ee de ne pas laisser tourner sendmail en daemon. Il sera appel ` chaque fois quil ea faut envoyer un message, mais il na 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
Ce sont des adresses qui font cho aux mails quelles reoivent : e c echo@univ-rennes1.fr echo@cnam.fr ping@oleane.net echo@alma.fr
137
10.9
10.9.1
Exploitation de sendmail
Scurit e e
Etant suid-root, sendmail est tr`s expos aux attaques. Il est donc recome e mand de fermer lacc`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 dacc`s. e
10.9.2
Commandes dexploitation
runq : force le traitement de la le dattente des messages localise dans e /var/spool/mqueue Shell script Debian excutant sendmail -q e newaliases : refait la base de donnes des alias ` partir de /etc/aliases e a mailq : interroge la le dattente des messages /var/spool/mqueue /usr/sbin/makemap : construit des base de donnes pour sendmail e
10.9.3
Alias
Ils sont entrs dans le chier /etc/aliases. Exemple : e # Basic system aliases -- these MUST be present. MAILER-DAEMON: postmaster postmaster: root FaxMaster: root # Person who should get roots 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 excute par sendmail : elle copie le message ` la liste labo au bout du chier indiqu a e congres est aussi une liste contenu dans le chier indiqu e
10.9.4
Rglages ns e
messages timeouts : si la machine destinataire nest pas joignable, sendmail envoie ` lexpditeur un avertissement au bout de 4h et au bout de 5 jours a e le prvient quil dtruit le message. Ceci peut tre modi par loption e e e e OT5d/4h de sendmail.cf ou dans sendmail.mc par :
10.9.5
Fichier Log
Lactivit de sendmail est enregistre dans /var/log/mail.log. Exemple e e dentre : 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 entre fait une ligne, ici dcoupe pour la clart. e e e e chaque message est identi par sendmail, ici KAA06112 e on voit quune transaction fait au moins deux entres (rception, mission) e e e Regarder aussi le chier /var/log/mail.err
10.10
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 conguration 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 cre 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
139
On cre la virtusertable et on fait relire ` sendmail sa conguration par : e a #cd /etc/mail #makemap hash virtusertable < virtusertable #kill -HUP sendmail.pid
140
Chapitre 11
Apache
11.1
11.1.1
HTTP, Hyper Text Transfer Protocol et HTML, Hyper Text Markup Language, ont t conu 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 lextension de la technique hypertexte au rseau. Un hypertexte e est un texte contenant des renvois ` dautres textes (comme dans le programme a info de GNU). Ces renvois sont des pointeurs dsignant le texte avec sa localisae tion. En HTTP, on appelle ce renvoi URL (Uniform Ressource Locator ) appel e maintenant URI (Uniform Ressource Identier ). Dnomination 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 dun serveur Web est de rpondre aux requtes de direntes e e e ressources (pages html, images, scripts, feuilles de style,...) faites par des clients suivant le protocole HTTP. Une ressource peut tre aussi lexcution dun proe e gramme sur le serveur. Dans ce cas la rponse du programme est renvoye par e e le serveur sous forme dune page HTML. Linterfaage entre le serveur http et c le programme sappelle CGI (Common Gateway Interface). Le premier serveur httpd vient du CERN, le premier client MOSAIC de NCSA. Apache est lhritier du serveur httpd de NCSA. Apache est un des e serveurs les plus utiliss 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
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 indpendemment des autres. Il ny a pas de notion de session du e moins ` lorigine car il est prvu depuis RFC 2068 des connexions persistantes. a e Il prvoit le typage de la reprsentation des donnes (Type MIME) et maintenant e e e la possibilit de ngocier ce type : un client peut dire je prf`re des documents e e ee en franais et des images au format *.png. c HTTP/1.1 Requte du client e deux lignes : Une requte du client au serveur en HTTP/1.1 scrit sur e e
Method SP Request-URI SP HTTP-Version CRLF Host: domain-server-name CRLF Il peut sy ajouter des lignes Request Header Fields permettant de passer des param`tres supplmentaires : e e If-Modified-since : voir GET conditionnel plus loin. Accept-Language : prfrence sur la langue ee Accept : prfrence sur les types de media ee ... Exemple de prfrences pondres par un coecient q envoyes 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 indique par lURI e HEAD : fournit des infos sur la page demande (Last-Modified, Content-Length, e Content-Type...) POST : transfert de donnes ` lURI indique (utilis pour les rponses e a e e e a ` un formulaire) PUT : criture dune ressource sur le serveur e DELETE : demande au serveur deacer la ressource associe ` lURI e a TRACE Request-URI : URI terme un peu plus gnral que URL. Mme syntaxe. e e e HTTP-Version : HTTP/1.0 ou HTTP/1.1 En principe HTTP utilise le port TCP 80. Exemple de requte : 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 dinterrogation par telnet. Cest 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 contrle : o $ ls -l /var/www/phase/phase.html -rw-rw-r-1 morel web 5238 Jan 18 16:13 /var/www/phase/phase.html
Rponse du serveur Toute rponse du serveur est prcde dun en-tte fait e e e e e e dune ou plusieurs lignes dont : Une Status-Line toujours prsente au dbut : 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 : dure de validit du document (optionnel) Cest une informae e tion sur la dure de validit du document, sa date de fra e e cheur en quelque sorte. et dautres entity header CRLF une ligne vide Exemple den tte : 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-ttes quand par telnet on passe des commandes HEAD. e
144 HTTP/1.0
HTTP/1.0 est beaucoup plus simple : il ne supporte que 3 mthodes : GET, e POST, HEAD, OPTIONS et il ny a pas ` envoyer de ligne Host : a Apache le supporte aussi. Exemple de requte : e GET /phase.html HTTP/1.0 CRCR (la requte 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 lURI. Dans ce cas, la e a ressource est un programme ou un script que le serveur http fait excuter en lui e transmettant ces param`tres. Les rsultats sont des pages HTML que le serveur e e renvoie au client (voir programmes CGI). La syntaxe est : GET URI?param-1=val-1¶m-2=val-2& ... ¶m-n=val-n O` param-i sont des noms de variables et val-i des cha u nes de caract`res e o` les blancs sont remplacs par des + et les caract`res ascii > 120 cods sous u e e e la forme %xx. GET conditionnel : Un GET suivi dune condition du type : If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT permet de ne demander au serveur lenvoi de la ressource associe ` lURI e a que si celle-ci est plus rcente que celle quil a dans son cache (spcique ` e e a HTML/1.1). Il existe dautres types de conditions.
11.2
Caractristiques de Apache e
Cest un logiciel libre produit par une coopration organise entre les volone e taires qui ont continu ` amliorer le serveur httpd de NCSA. Apache reprend ea e tous les param`tres de conguration de httpd NCSA. e Ses caractristiques : e
11.3. DOCUMENTATION
145
choix de modules qui se chargent quand apache dmarre (Dynamic Shared e Objects), grande varit de modules ee interface de programmation pour crire des modules e sites virtuels : un mme serveur peut hberger plusieurs sites Webs. e e
11.3
Documentation
http://www.apache.org/ Apache par Ben et Peter Laurie Editions OReilly (pas fameux, traduction franaise 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 linstallation Debian propose une conguration interactive. Il est recommand au dbut de prendre les options par dfaut proposes, 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 dfaut de Debian (not en majuscule) en tapant RC. e e
11.5
Lancement de Apache
On peut faire fonctionner Apache ` travers inetd mais ce nest pas du tout a recommand pour des questions de rapidit de service : on lutilise donc en e e daemon et ds le dpart, 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 ls www-data. Le p`re ne traite pas de e e requtes des clients, cest trop dangereux. Il soccupe juste de crer des ls, ou e e den 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
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
Conguration
Les chiers de conguration sont dans /etc/apache. Suivant la tradition de httpd NCSA il y a 3 chiers de conguration : httpd.conf : param`tres gnraux de fonctionnement + virtuals hosts e e e access.conf : restrictions dacc`s e srm.conf : rpertoires accessibles aux clients e mais il est fortement recommand de les fusionner dans httpd.conf. En e plus, il y a le chier mime.types Debian ajoute un cron.conf pour faire tourner les logs. Conguration minimale : Elle se fait en ditant le chier httpd.conf qui est e abondamment comment : e
11.6.1
Param`tres gnraux 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 congur convenablement. Vous devez faire attention au e minimum aux param`tres suivants : e www-data : cest le userid et le groupe sous lesquels les copies de apache sexcute (et les programmes CGI). Dautres distributions Linux utilisent e nobody.
11.6. CONFIGURATION
147
ServerRoot : cest le rpertoire o` vont se trouver les chiers de congue u ration /etc/apache en Debian. LoadModule : choix des modules, cest important, mais au dbut vous vous e laissez guider par les choix par dfaut de Debian. e ErrorLog, CustomLog : emplacement des chiers logs. ServerName : cest videmment important. Cela ne se dduit pas automae e tiquement du nom de la machine car souvent, comme chez moi, cest un alias (un RR de type CNAME dans le DNS) Pour les autres param`tres, les logs, le nombre de serveurs, laissez les e dfauts, vous verrez plus tard e
11.6.2
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 : cest le rpertoire racine de larborescence des pages Web. e On peut en mettre ailleurs, voir directive Alias. UserDir : cest le rpertoire 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 rpertoire e (il termine lURL par / ou non, voir mod dir), on lui fournit la page index.html AccessFileName : nom du chier contenant des restrictions dacc`s que e lon peut placer dans un rpertoire (dpend de AllowOverride) e e ScriptAlias : rpertoire dont les chiers sexcutent comme des script e e CGI : /cgi-bin/ est lURL path (correspond ` http ://serveur/cgi-bin) a /var/www/cgi-bin/ est le nom du rpertoire correspondant (dans larboe rescence Unix) Alias : permet de ranger des documents ailleurs que dans DocumentRoot. LURL : http ://serveur/doc/) (noubliez pas le /) pointe sur le rpertoire/usr/doc/ e de larborescence Unix. Cette spcicit Debian fait que toute la doc est e e lisible par le Web.
11.6.3
Restrictions dacc`s e
<-----------<-----------<-----------<------------
148 allow from all </Directory> <Directory /var/www/cgi-bin> AllowOverride None Options ExecCGI FollowSymLinks </Directory>
<Location /cgi-bin/phf*> deny from all ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi </Location> # Debian Policy assumes /usr/doc is "/doc/", at least from the localhost. <Directory /usr/doc> Options Indexes FollowSymLinks AllowOverride None order allow,deny allow from all </Directory> <DirectoryMatch ^/home/.*/public_html> Options SymLinksIfOwnerMatch Indexes AllowOverride None </DirectoryMatch> Directory /var/www : r`gles dacc`s au rpertoire /var/www et ` ses souse e e a rpertoires. e Options Indexes FollowSymLinks ExecCGI Indexes : si le client demande une URL correspondant ` un rpertoire et a e quil ny a pas de chier index.html le serveur envoie une liste formatte e du rpertoire. Donc tous les chiers du rpertoire sont visibles ` un client e e a Web. Cest donc une option dconseille. e e FollowSymLinks : le serveur suit les liens symboliques : utile pour mettre en consultation par apache des documents qui ne sont pas dans larborescence DocumentRoot. SymLinksIfOwnerMatch, ne suit le lien que si le chier point a le mme owner que le rpertoire qui contient e e e ce lien symbolique. ExecCGI : excution des scripts CGI autorise dans ce rpertoire e e e AllowOverride None : chier .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 derreur Apache sort par dfaut un code derreur, e mais il peut aussi acher un message ou rediriger sur une autre URL, cest le cas ici. Autre exemple : ErrorDocument 403 "Sorry cant allow you access today Directory /usr/doc : La convention Debian est de donner acc`s par le e Web au rpertoire /usr/doc par lURL : e http://machine_Linux_Debian/doc/ (Ne pas oublier le /).
149
DirectoryMatch : r`gles dacc`s qui ne sappliquent quaux rpertoires e e e qui satisfont les expressions rguli`res indiques. Ici les noms de chier e e e qui commencent par /home et se terminent par public html. Si plusieurs directives Options sappliquent ` une mme rpertoire, elles ne a e e se cumulent pas. Mais on peut faire prcder chaque option dun signe + ou e e -. Une option prcde dun + sajoute par rapport ` celle en cours, une e e e a prcde dun - 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 excute : 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 denvironnements aux scripts CGI/SSI Support for configurable logfiles [required]? [Y/n] Module : mod log cong Action : permet de faire des Logs (directive TransferLog) et de dnir e des formats (directive LogFormat), de crer un Log avec un format (directive e CustomLog) Support for regex based translations [standard]? [Y/n] Module : mod rewrite Action : permet de rcrire des URL ` la vole ` laide dexpressions rguli`res ee a e a e e (comme sendmail sait faire de la rcriture dadresse). 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 : dtermine le type MIME dun chier 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 : gre une meta information, le Mime type pour chaque document. e En plus un handler peut tre dni, il dtermine le traitement dun chier par e e e le serveur. Les directives AddEncoding, AddHandler, AddLanguage and AddType sont utilises pour dterminer le type en fonction de lextension du chier. Elles e e xent respectivement le Content-encoding, le handler, le Content-language et le MIME-type (ou Content-type) du document.
150
Support for content negotiation [required]? [Y/n] Module : mod negotiation Action : permet de slectionner un document qui convient le mieux aux e caractristiques du client. Apache propose deux mthodes : e e Option MultiViews : On peut ainsi slectionner la langue, (Directives e AddLanguage), le type dimage. un handler type-map permet de dnir un chier o` sont indiques des e u e alternatives Support for server status info? [y/N] Module : mod status Action : donne ltat du serveur sous forme dune page HTML : nombre de e ls 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 conguration On linterroge 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 lextension *.shtml sera analys par ce module si Option +Includes gure pour les rpertoires e e contenant ces pages. Le rsultat 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 rpertoire qui na pas de chier 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 rpertoire. Appelle mod autoindex sil ny a pas de chier u e index dans ce rpertoire e Directive : DirectoryIndex Support for CGI scripts [required]? [Y/n] Module : mod cgi Action : tout chier qui a le mime type application/x-httpd-cgi ou le handler cgi-script sera trait par ce module. Des chiers peuvent avoir ce e type mime si leur extension est dnie dans un AddType ou sils se trouvent e dans un rpertoire dni 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 den-tte HTTP au chier e (mais il faut alors que cet en-tte soit dans le chier sinon le client nest 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 chier comme un CGI suivant son type (directive Action) ou quand une mthode (GET, POST, PUT, DELETE) est invoque 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 : dtermine le rpertoire dun 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 contrler lacc`s suivant ladresse IP ou le nom de domaine. o e Support for basic authentication [standard]? [Y/n] Module : mod auth Action : permet de contrler lacc`s ` des documents par userid/pasword o e a Support for anonymous-FTP authentication? [y/N]
152
Module : mod auth anon Action : mme mthode dacc`s que dans ftp anonymous, demande ladresse e e e e-mail comme password Support for dbm-file authentication? [y/N] Module : mod auth dbm Action : contrle dacc`s par userid/pasword avec chier 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 : contrle dacc`s par authentication MD5 Digest. Mais quels clients o e le supportent ? Support for HTTP header metafiles? [y/N] Module : mod cern meta Action : mule les metale de httpd CERN : ce sont des headers HTTP e Support for custom expiration times [standard]? [Y/n] Module : mod expires Action : gn`re des en-ttes HTTP Expires dans les rponses du serveur. e e e e Support for arbitrary HTTP headers? [y/N] Module : mod headers Action : permet de contrler les en-ttes HTTP dans la rponse du serveur. o e e Directive : Header Support for clickstream logs? [y/N] Module : mod usertrack Action : g`re les cookies. Utilise les chiers 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 : identie une requte de mani`re unique (date, hostname, PID e e Support for recognizing UserAgents [required]? [Y/n] Module : mod setenvif Action : xe des variables denvironnement suivant des conditions exprime e par des expressions rguli`res. Exemple : e e BrowserMatch ^Mozilla netscape Autre directive SetEnvIf Les modules sont en /usr/lib/apache/1.3/
153
11.8
Virtual hosts
Un mme serveur apache peut hberger plusieurs sites