| <?xml version="1.0" encoding="ISO-8859-1" ?> | 
 | <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd"> | 
 | <?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?> | 
 | <!-- English Revision: 151405 --> | 
 | <!-- French Translation by Vincent Deffontaines, review by alain B --> | 
 |  | 
 | <!-- | 
 |  Copyright 2005 The Apache Software Foundation or its licensors, as | 
 |  applicable. | 
 |  | 
 |  Licensed under the Apache License, Version 2.0 (the "License"); | 
 |  you may not use this file except in compliance with the License. | 
 |  You may obtain a copy of the License at | 
 |  | 
 |      http://www.apache.org/licenses/LICENSE-2.0 | 
 |  | 
 |  Unless required by applicable law or agreed to in writing, software | 
 |  distributed under the License is distributed on an "AS IS" BASIS, | 
 |  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |  See the License for the specific language governing permissions and | 
 |  limitations under the License. | 
 | --> | 
 |  | 
 | <manualpage metafile="dns-caveats.xml.meta"> | 
 |  | 
 |   <title>Problèmes DNS avec Apache</title> | 
 |  | 
 |   <summary> | 
 |     <p>L'ensemble de cette page pourrait se résumer à la phrase : ne  | 
 |     jamais configurer Apache de telle sorte qu'il s'appuie sur des  | 
 |     résolutions DNS pour parcourir ses fichiers de configuration.  | 
 |     Une telle configuration risque d'engendrer des problèmes de  | 
 |     fiabilité (le serveur peut ne pas démarrer), des attaques de type  | 
 |     déni et de vol de service (comme par exemple des utilisateurs volant  | 
 |     les hits d'autres utilisateurs).</p> | 
 |   </summary> | 
 |  | 
 |   <section id="example"> | 
 |     <title>Un exemple simple</title> | 
 |  | 
 |     <example> | 
 |       <VirtualHost www.abc.dom> <br /> | 
 |       ServerAdmin webgirl@abc.dom <br /> | 
 |       DocumentRoot /www/abc <br /> | 
 |       </VirtualHost> | 
 |     </example> | 
 |  | 
 |     <p>Pour qu'Apache fonctionne correctement, il a absolument besoin  | 
 |     de deux informations pour chacun de ses serveurs virtuels : | 
 |     <directive module="core">ServerName</directive> ainsi qu'au moins une | 
 |     adresse IP à laquelle le serveur s'attachera pour répondre. | 
 |     L'exemple ci-dessus ne précise pas l'adresse IP, si bien qu'Apache doit | 
 |     utiliser le DNS pour trouver l'adresse de <code>www.abc.dom</code>.  | 
 |     Si, pour une raison ou une autre, le DNS ne fonctionne pas au moment  | 
 |     où Apache lit ses fichiers de configuration, le serveur virtuel  | 
 |     <strong>ne sera pas configuré</strong>. Il sera incapable de répondre  | 
 |     aux requêtes. Jusqu'à la version 1.2, Apache refusait même de  | 
 |     démarrer dans ce cas de figure.</p> | 
 |  | 
 |     <p>Prenons le cas où l'adresse de <code>www.abc.dom</code> est 10.0.0.1  | 
 |     et considérons cet extrait de configuration :</p> | 
 |  | 
 |     <example> | 
 |       <VirtualHost 10.0.0.1> <br /> | 
 |       ServerAdmin webgirl@abc.dom <br /> | 
 |       DocumentRoot /www/abc <br /> | 
 |       </VirtualHost> | 
 |     </example> | 
 |  | 
 |     <p>Cette fois, Apache a besoin d'utiliser la résolution DNS  | 
 |     inversée pour déterminer le nom <code>ServerName</code> de ce  | 
 |     serveur virtuel. Si cette résolution n'aboutit pas, le serveur  | 
 |     virtuel sera partiellement mis hors service (jusqu'à la version  | 
 |     1.2, Apache refusait même de démarrer dans ce cas de figure). Si  | 
 |     le serveur virtuel est un serveur basé sur un nom (name-based),  | 
 |     il sera totalement hors service, mais s'il s'agit d'un serveur  | 
 |     par IP (IP-based), il fonctionnera correctement. Cependant, dans  | 
 |     le cas où Apache doit générer une adresse complète URL en  | 
 |     s'appuyant sur le nom du serveur, il échouera à fournir une  | 
 |     adresse valide.</p> | 
 |  | 
 |     <p>Voici un extrait de configuration qui résout ces deux problèmes :</p> | 
 |  | 
 |     <example> | 
 |       <VirtualHost 10.0.0.1> <br /> | 
 |       ServerName www.abc.dom <br /> | 
 |       ServerAdmin webgirl@abc.dom <br /> | 
 |       DocumentRoot /www/abc <br /> | 
 |       </VirtualHost> | 
 |     </example> | 
 |   </section> | 
 |  | 
 |   <section id="denial"> | 
 |     <title>Déni de Service</title> | 
 |  | 
 |     <p>Il existe (au moins) deux problèmes possibles de déni de service. | 
 |     Les versions d'Apache antérieures à 1.2 ne démarreront pas si  | 
 |     l'une des deux requêtes DNS citées ci-dessus n'aboutissent pas pour  | 
 |     un de vos serveurs virtuels. Dans certains cas, les entrées DNS  | 
 |     sont hors de contrôle de l'administrateur Web ; par exemple si  | 
 |     <code>abc.dom</code> appartient à un de vos clients qui a la  | 
 |     maîtrise de son propre DNS, celui-ci peut empêcher votre serveur  | 
 |     Web (avant la version 1.2) de démarrer, simplement en effaçant  | 
 |     l'enregistrement <code>www.abc.dom</code> du DNS.</p> | 
 |      | 
 |     <p>L'autre problème possible est bien plus pernicieux. Dans la  | 
 |     configuration suivante :</p> | 
 |  | 
 |     <example> | 
 |       <VirtualHost www.abc.dom> <br /> | 
 |         ServerAdmin webgirl@abc.dom <br /> | 
 |         DocumentRoot /www/abc <br /> | 
 |       </VirtualHost> <br /> | 
 |       <br /> | 
 |       <VirtualHost www.def.dom> <br /> | 
 |         ServerAdmin webguy@def.dom <br /> | 
 |         DocumentRoot /www/def <br /> | 
 |       </VirtualHost> | 
 |     </example> | 
 |  | 
 |     <p>Supposons que <code>www.abc.dom</code> ait l'adresse 10.0.0.1,  | 
 |     et que <code>www.def.dom</code> ait l'adresse 10.0.0.2. Supposons  | 
 |     également que <code>def.com</code> ait la main sur son DNS.  | 
 |     Cette configuration peut permettre à <code>def.dom</code> de  | 
 |     détourner vers son serveur tout le trafic destiné à  | 
 |     <code>abc.dom</code>. Pour ce faire, il doit simplement | 
 |     positionner le champ DNS de <code>www.def.dom</code> sur 10.0.0.1,  | 
 |     et rien ne peut l'empêcher de faire, puisqu'il a la main sur  | 
 |     son DNS.</p> | 
 |  | 
 |     <p>Les requêtes à destination de 10.0.0.1 (incluant celles dont  | 
 |     l'URL contient <code>http://www.abc.com/tout_et_n_importe_quoi</code>)  | 
 |     seront envoyées au serveur virtuel de <code>def.dom</code>. Une  | 
 |     bonne compréhension des mécanismes internes d'Apache concernant  | 
 |     la gestion des serveur virtuels est requise.  | 
 |     <a href="vhosts/details.html">Ce document</a> explique ce  | 
 |     fonctionnement.</p> | 
 |   </section> | 
 |  | 
 |   <section id="main"> | 
 |     <title>L'Adresse du "serveur principal"</title> | 
 |  | 
 |     <p>L'implémentation du support des serveur virtuels <a  | 
 |     href="vhosts/name-based.html">par nom</a> depuis Apache 1.1 suppose | 
 |     qu'Apache connaisse la ou les adresse(s) IP sur lesquelles le serveur  | 
 |     écoute. Pour déterminer cette adresse, Apache utilise soit la  | 
 |     directive globale <directive module="core">ServerName</directive>  | 
 |     (si elle est présente), soit un appel à la fonction C  | 
 |     <code>gethostname</code> (cet appel renvoie le même résultat  | 
 |     que la commande "hostname" entrée sur une ligne de commande).  | 
 |     Une résolution DNS est alors effectuée sur l'adresse obtenue.  | 
 |     Pour l'instant, il n'existe aucun moyen de contourner cette  | 
 |     requête DNS.</p> | 
 |  | 
 |     <p>Pour se prémunir du cas où cette résolution DNS échouerait à  | 
 |     cause de la défaillance du serveur DNS, le nom d'hôte peut être  | 
 |     ajouté dans <code>/etc/hosts</code> (il y est probablement déjà).  | 
 |     Assurez vous que votre machine est configurée pour lire ce fichier  | 
 |     <code>/etc/hosts</code> en cas de défaillance du serveur DNS.  | 
 |     Pour cela, selon votre système d'exploitation, il vous faudra configurer  | 
 |     <code>/etc/resolv.conf</code> ou <code>/etc/nsswitch.conf</code>.</p> | 
 |  | 
 |     <p>Au cas où votre serveur n'a pas besoin de réaliser des requêtes  | 
 |     DNS pour d'autres raisons que de démarrer Apache, il est possible  | 
 |     que vous puissiez vous en sortir en positionnant la variable  | 
 |     d'environnement <code>HOSTRESORDER</code> sur "local". Ceci dépend  | 
 |     cependant de votre système d'exploitation et des librairies de  | 
 |     résolution DNS que vous utilisez. Ceci affecte également le  | 
 |     comportement des scripts CGIs, à moins que vous n'utilisiez  | 
 |     <module>mod_env</module> pour contrôler leur environnement. La  | 
 |     meilleure solution est de consulter les pages "man" ou les FAQs  | 
 |     spécifiques à votre système d'exploitation.</p> | 
 |   </section> | 
 |  | 
 |   <section id="tips"> | 
 |     <title>Comment éviter ces problèmes</title> | 
 |  | 
 |     <ul> | 
 |       <li> | 
 |         spécifier les adresses IP dans les  | 
 |         <directive module="core">VirtualHost</directive> | 
 |       </li> | 
 |  | 
 |       <li> | 
 |         spécifier les adresses IP au moyen de | 
 |         <directive module="mpm_common">Listen</directive> | 
 |       </li> | 
 |  | 
 |       <li> | 
 |         s'assurer que tous les serveurs virtuels spécifient explicitement  | 
 |         leur <directive module="core">ServerName</directive> | 
 |       </li> | 
 |  | 
 |       <li>créer un serveur virtuel <code><VirtualHost _default_:*></code> | 
 |       qui ne sert aucune page</li> | 
 |     </ul> | 
 |   </section> | 
 |  | 
 |   <section id="appendix"> | 
 |     <title>Appendice: Perspectives futures</title> | 
 |  | 
 |     <p>Les problèmes liés au DNS sont très indésirables. À partir  | 
 |     d'Apache 1.2, nous avons travaillé à ce qu'Apache démarre même  | 
 |     dans le cas où les requêtes DNS échouent, mais ce n'est pas  | 
 |     forcément la meilleure des solutions. En tous cas, obliger  | 
 |     l'administrateur à spécifier explicitement des adresses IP est  | 
 |     également très indésirable sur le réseau Internet tel qu'il  | 
 |     existe actuellement, où le nombre d'adresses IP commence à manquer.</p> | 
 |      | 
 |     <p>Une réponse possible au problème de vol de trafic décrit ci-avant | 
 |     pourrait être de réaliser une résolution inverse DNS sur l'adresse IP  | 
 |     renvoyée par la première requête, et de comparer les deux noms  | 
 |     obtenus -- lorsqu'ils sont différents, le serveur virtuel serait  | 
 |     désactivé. Ceci suppose que la configuration pour la résolution  | 
 |     inverse DNS soit faite correctement (c'est une chose à laquelle  | 
 |     les administrateurs DNS commencent à s'habituer, en raison de  | 
 |     l'utilisation de plus en plus répandue des requêtes DNS  | 
 |     "double-reverse" par les serveurs FTP et les filtrages  | 
 |     "TCP wrappers").</p> | 
 |      | 
 |     <p>Dans tous les cas de figures, il ne semble pas possible de  | 
 |     démarrer de façon fiable un serveur virtuel quand la requête  | 
 |     DNS a échoué, à moins de recourir à l'utilisation d'adresses  | 
 |     IP fixes. Des solutions partielles, telles que désactiver des  | 
 |     portions de la configuration selon les tâches attribuées au  | 
 |     serveur Web, risquent d'être pires que ne pas démarrer du tout.</p> | 
 |      | 
 |     <p>Au fur et à mesure que HTTP/1.1 se répand, et que les navigateurs  | 
 |     et les serveurs mandataires envoient l'en-tête <code>Host</code>,  | 
 |     il devient possible d'éviter complètement l'utilisation de serveurs  | 
 |     virtuels par IP. Dans ce cas, les serveurs Web n'ont plus aucun  | 
 |     besoin de réaliser des requêtes DNS lors de leur démarrage. Au 1er  | 
 |     mars 1997, ces fonctionnalités ne sont pas suffisamment déployées pour  | 
 |     que des serveurs Web sensibles les mettent en oeuvre (NdT : cette  | 
 |     remarque est aujourd'hui complètement dépassée, HTTP/1.1 est  | 
 |     désormais supporté par l'immense majorité des navigateurs et  | 
 |     des serveurs mandataires).</p> | 
 |   </section> | 
 | </manualpage> |