1 <?xml version="1.0" encoding="ISO-8859-1" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
4 <!-- English Revision : 507346 -->
5 <!-- French translation : Lucien GENTIS -->
6 <!-- Reviewed by : Vincent Deffontaines -->
9 Licensed to the Apache Software Foundation (ASF) under one or more
10 contributor license agreements. See the NOTICE file distributed with
11 this work for additional information regarding copyright ownership.
12 The ASF licenses this file to You under the Apache License, Version 2.0
13 (the "License"); you may not use this file except in compliance with
14 the License. You may obtain a copy of the License at
16 http://www.apache.org/licenses/LICENSE-2.0
18 Unless required by applicable law or agreed to in writing, software
19 distributed under the License is distributed on an "AS IS" BASIS,
20 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 See the License for the specific language governing permissions and
22 limitations under the License.
25 <manualpage metafile="dns-caveats.xml.meta">
27 <title>Problèmes liés au DNS avec Apache</title>
30 <p>Cette page pourrait se résumer ainsi : configurez Apache de façon
31 à ce qu'il n'ait pas besoin de résolution DNS pour interpréter les
32 fichiers de configuration. Si Apache doit effectuer des résolutions
33 DNS pour interpréter les fichiers de configuration, votre serveur
34 pourra présenter des problèmes de fiabilité (en d'autres termes,
35 il est possible qu'il refuse de démarrer), ou d'attaques par déni ou
36 usurpation de service (y compris le détournement d'informations
40 <section id="example">
41 <title>Un exemple simple</title>
44 # Cet exemple de configuration est invalide, ne l'utilisez pas comme base
46 <VirtualHost www.abc.dom> <br />
47 ServerAdmin webgirl@abc.dom <br />
48 DocumentRoot /www/abc <br />
52 <p>Pour fonctionner correctement, Apache a absolument besoin de deux
53 informations à propos de chaque serveur virtuel : le nom du serveur
54 défini par la directive <directive
55 module="core">ServerName</directive>, et au moins une adresse IP à
56 laquelle le serveur va se rattacher et répondre. L'exemple ci-dessus
57 ne comporte pas d'adresse IP, si bien qu'Apache devra utiliser le
58 DNS pour trouver l'adresse IP de <code>www.abc.dom</code>. Si pour
59 une raison quelconque, le DNS n'est pas disponible au moment où
60 votre serveur interprète son fichier de configuration, ce serveur
61 virtuel <strong>ne sera pas pris en compte dans la
62 configuration</strong>. Il sera incapable de
63 répondre à toute requête pour ce serveur virtuel (avec les versions
64 d'Apache antérieures à 1.2, le serveur ne démarrera tout simplement
67 <p>Supposons que l'adresse de <code>www.abc.dom</code> soit
68 192.0.2.1, et examinons cet extrait de configuration :</p>
71 # Cet exemple de configuration est invalide, ne l'utilisez pas comme base
73 <VirtualHost 192.0.2.1> <br />
74 ServerAdmin webgirl@abc.dom <br />
75 DocumentRoot /www/abc <br />
79 <p>Cette fois, Apache doit effectuer une recherche DNS inverse pour
80 trouver le nom <code>ServerName</code> de ce serveur virtuel. Si
81 cette recherche inverse échoue, le serveur virtuel sera
82 partiellement désactivé (avec les versions d'Apache antérieures à
83 1.2, le serveur ne démarrera tout simplement pas). Si le serveur
84 virtuel est à base de nom, il sera en fait totalement désactivé,
85 mais s'il est à base d'adresse IP, il fonctionnera probablement.
86 Cependant, Apache échouera s'il doit générer une URL complète pour
87 le serveur qui inclut ce nom de serveur.</p>
89 <p>Voici un extrait de configuration qui permet d'éviter ces deux
90 types de problèmes :</p>
93 <VirtualHost 192.0.2.1> <br />
94 ServerName www.abc.dom <br />
95 ServerAdmin webgirl@abc.dom <br />
96 DocumentRoot /www/abc <br />
101 <section id="denial">
102 <title>Déni de service</title>
104 <p>Il existe (au moins) deux formes possibles de déni de service. Si
105 vous utilisez une version d'Apache antérieure à 1.2, votre serveur
106 ne démarrera pas si une des deux recherches DNS mentionnées
107 ci-dessus échoue pour au moins un de vos serveurs virtuels. Dans
108 certains cas, cette recherche DNS ne sera même pas sous votre
109 contrôle ; par exemple, si <code>abc.dom</code> est un de vos
110 clients et s'il gère son propre DNS, il peut empêcher votre
111 serveur (pre-1.2) de démarrer, simplement en supprimant
112 l'enregistrement <code>www.abc.dom</code>.</p>
114 <p>La deuxième forme de déni de service est beaucoup plus subtile.
115 Examinons cet extrait de configuration :</p>
118 <VirtualHost www.abc.dom><br />
120 ServerAdmin webgirl@abc.dom<br />
121 DocumentRoot /www/abc<br />
123 </VirtualHost><br />
125 <VirtualHost www.def.dom><br />
127 ServerAdmin webguy@def.dom<br />
128 DocumentRoot /www/def<br />
133 <p>Supposons que vous avez assigné 192.0.2.1 à
134 <code>www.abc.dom</code> et 192.0.2.2 à <code>www.def.dom</code>. En
135 outre, supposons que <code>def.dom</code> gère son propre DNS. Avec
136 cette configuration, <code>def.dom</code> sera en mesure de
137 détourner tout trafic destiné à <code>abc.dom</code>. Pour y
138 parvenir, tout ce qu'ils ont à faire consiste à assigner 192.0.2.1 à
139 <code>www.def.dom</code>. Comme ils gèrent leur propre DNS, vous ne
140 pouvez pas les empêcher de faire pointer l'enregistrement
141 <code>www.def.dom</code> vers l'adresse qu'ils veulent.</p>
143 <p>Les requêtes à destination de 192.0.2.1 (y compris toutes celles
144 où l'utilisateur à tapé une URL de la forme
145 <code>http://www.abc.dom/quelquepart</code>), seront toutes servies
146 par le serveur virtuel <code>def.dom</code>. Une meilleur
147 compréhension de la raison pour laquelle ceci peut se produire
148 nécessite une discussion plus approfondie à propos de la manière
149 dont Apache associe les requêtes entrantes aux différents serveurs
150 virtuels qui vont les servir. Un document de base décrivant ceci <a
151 href="vhosts/details.html">est disponible</a>.</p>
155 <title>L'adresse du "serveur principal"</title>
157 <p>L'addition du <a href="vhosts/name-based.html">support des
158 serveurs virtuels à base de nom</a> dans la version 1.1 d'Apache
159 oblige ce dernier à connaître la/les adresse(s) IP de l'hôte sur
160 lequel <program>httpd</program> s'exécute. Pour obtenir cette
161 adresse, soit il utilise la directive <directive
162 module="core">ServerName</directive> globale (si elle est présente),
163 soit il fait appel à la fonction C <code>gethostname</code> (qui
164 doit renvoyer le même nom que la commande shell "hostname"). Il
165 effectue ensuite une recherche DNS sur cette adresse. Pour le
166 moment, il n'existe aucun moyen d'éviter cette recherche DNS.</p>
168 <p>Si vous craignez que cette recherche DNS échoue parce que votre
169 serveur DNS est arrêté, vous pouvez insérer le nom d'hôte dans le
170 fichier <code>/etc/hosts</code> (où il est probablement déjà
171 enregistré afin que la machine démarre correctement). Assurez-vous
172 ensuite que la machine est configurée pour utiliser
173 <code>/etc/hosts</code> dans le cas où la recherche DNS échoue.
174 Suivant le système d'exploitation que vous utilisez, vous y
175 parviendrez en éditant <code>/etc/resolv.conf</code>, ou
176 <code>/etc/nsswitch.conf</code>.</p>
178 <p>Si votre serveur n'a aucune autre raison d'effectuer des
179 recherches DNS, vous pouvez définir la variable d'environnement
180 <code>HOSTRESORDER</code> à "local", et vous serez alors en mesure
181 d'exécuter Apache. Tout dépend du système d'exploitation et des
182 bibliothèques de résolution de noms que vous utilisez. Elle affecte
183 aussi les programmes CGI, à moins que vous n'utilisiez
184 <module>mod_env</module> pour contrôler l'environnement. Il est
185 conseillé de consulter les pages de manuel ou les FAQs de votre
186 système d'exploitation.</p>
190 <title>Conseils pour éviter ce genre de problème</title>
194 utilisez des adresses IP au sein des <directive
195 module="core">VirtualHost</directive>
199 utilisez des adresses IP avec la directive <directive
200 module="mpm_common">Listen</directive>
204 vérifiez que tous les serveurs virtuels possèdent un nom
205 <directive module="core">ServerName</directive> explicite
208 <li>créez un serveur virtuel <code><VirtualHost
209 _default_:*></code> qui n'a aucune page à servir</li>
213 <section id="appendix">
214 <title>Appendice : orientations pour le futur</title>
216 <p>La situation concernant le DNS apparaît clairement comme non
217 souhaitable. Avec Apache 1.2, nous avons fait en sorte que le
218 serveur puisse au moins démarrer en cas d'échec de recherche DNS,
219 mais ce n'est pas ce que nous pouvons faire de mieux. En tout état
220 de cause, le fait de devoir spécifier des adresses IP explicites
221 dans les fichiers de configuration est fortement non souhaitable
222 avec l'Internet d'aujourd'hui où les changements de numérotation
223 sont une nécessité.</p>
225 <p>Il est possible d'éviter les attaques par usurpation de service
226 décrites ci-dessus en effectuant une recherche DNS inverse sur
227 l'adresse IP renvoyée par la recherche DNS directe et en comparant
228 les deux noms -- en cas de non correspondance, le serveur virtuel
229 serait désactivé. Ceci nécessite cependant une configuration
230 correcte du DNS inverse (ce avec quoi les administrateurs sont
231 familiers à cause de l'utilisation courante des doubles recherches
232 DNS inverses par les serveurs FTP et les TCP wrappers).</p>
234 <p>En tout état de cause, il ne semble pas envisageable de démarrer
235 de manière fiable un serveur web avec serveurs virtuels losqu'une
236 recherche DNS a échoué, sauf si l'on utilise des adresses IP. Les
237 solutions partielles consistant à désactiver des portions de
238 configuration pourraient s'avérer pires que ne pas démarrer du tout
239 ; tout dépend de ce que le serveur est supposé faire.</p>
241 <p>Au fur et à mesure du déploiement de HTTP/1.1, et comme les
242 navigateurs et les mandataires commencent à générer l'en-tête
243 <code>Host</code>, il devient possible d'envisager de se passer
244 complètement des serveurs virtuels à base d'adresses IP. Dans ce
245 cas, un serveur web n'a besoin d'aucune recherche DNS pendant
246 l'interprétation de ses fichiers de configuration. Cependant, au
247 mois de mars 1997, ces fonctionnalités n'ont pas été assez largement
248 déployées pour être utilisées sur des serveurs web critiques.</p>