Versión 2.0 del Servidor HTTP Apache

Este documento puede resumirse en la siguiente frase: no configure Apache de manera que el análisis sintáctico de los ficheros de configuración tenga que confiar en resoluciones DNS. Si Apache necesita de resoluciones DNS para analizar los ficheros de configuración, entonces su servidor puede no funcionar correctamente (por ejemplo, podría no iniciarse), o sufrir ataques de denegación o robo de servicio (incluyendo que otas web puedan "robar" peticiones de otras web).
      <VirtualHost www.abc.dom> 
      ServerAdmin webgirl@abc.dom 
      DocumentRoot /www/abc 
      </VirtualHost>
    
Para que Apache funcione correctamente, es imprescindible
    conocer dos aspectos sobre cada host virtual: el valor de la
    directiva ServerName y al
    menos una dirección IP en la que servidor escuchará y
    responderá a las peticiones que se produzcan. El ejemplo
    mostrado arriba no incluye la direccion IP, de manera que Apache
    tiene que usar una resolución DNS para encontrar la
    dirección IP correspondiente a www.abc.dom. Si
    por alguna razón la resolución DNS no está
    disponible en el momento en que su servidor está analizando
    sintánticamente su fichero de configuración, entonces
    este host virtual no se configurará y no
    será capaz de responder a ninguna de las peticiones que se
    hagan a ese host virtual (en las versiones de Apache anteriores a
    la 1.2 el servidor ni siquiera se iniciaba).
Suponga que www.abc.dom tiene como dirección
    IP la 10.0.0.1. Considere la siguiente configuración:
      <VirtualHost 10.0.0.1> 
      ServerAdmin webgirl@abc.dom 
      DocumentRoot /www/abc 
      </VirtualHost>
    
Ahora Apache necesita hacer una búsqueda DNS inversa para
    encontrar el ServerName de este host virtual. Si esta
    búsqueda inversa falla entonces el host virtual se
    desactivará parcialmente (en las versiones de Apache
    anteriores a la 1.2 el servidor ni siquiera se iniciaba). Si el
    host virtual está basado en el nombre, entonces se
    desactivará completamente, pero si está basado en la
    dirección IP, entonces funcionará para la mayor parte de
    las cosas. Sin embargo, si Apache tiene que generar en algún
    momento una URL completa que incluya el nombre del servidor, no
    será capaz de generar una URL válida.
Aquí tiene una forma de evitar ambos problemas:
      <VirtualHost 10.0.0.1> 
      ServerName www.abc.dom 
      ServerAdmin webgirl@abc.dom 
      DocumentRoot /www/abc 
      </VirtualHost>
    
Hay (al menos) dos formas de que ocurra una denegación de
    servicio. Si está ejecutando una versión de Apache
    anterior a la 1.2, entonces su servidor no se iniciará si una
    de las dos búsquedas de DNS mencionadas arriba falla para
    cualquiera de sus hosts virtuales. En algunos casos estas
    búsquedas DNS puede que no estén bajo su control; por
    ejemplo, si abc.dom es uno de sus clientes y ellos
    controlan su propia DNS, pueden forzar a su servidor (pre-1.2) a
    fallar al iniciarse simplemente borrando el registro
    www.abc.dom.
Otra formas pueden ser bastante más complicadas. Fíjese en esta configuración:
      <VirtualHost www.abc.dom> 
        ServerAdmin webgirl@abc.dom 
        DocumentRoot /www/abc 
      </VirtualHost> 
      
      <VirtualHost www.def.com> 
        ServerAdmin webguy@def.com 
        DocumentRoot /www/def 
      </VirtualHost>
    
Suponga que ha asignado la dirección 10.0.0.1 a
    www.abc.dom y 10.0.0.2 a
    www.def.com. Todavía más, suponga que
    def.com tiene el control de sus propias DNS. Con esta
    configuración ha puesto def.com en una
    posición en la que puede robar todo el trafico destinado a
    abc.dom. Para conseguirlo, todo lo que tiene que
    hacer es asignarle a www.def.com la dirección
    10.0.0.1. Como ellos controlan sus propias DNS no puede evitar que
    apunten el registro www.def.com a donde quieran.
Las peticiones dirigidas a la dirección 10.0.0.1
    (incluídas aquellas en las los usuarios escriben URLs de tipo
    http://www.abc.dom/whatever) serán todas
    servidas por el host virtual def.com. Comprender por
    qué ocurre esto requiere una discusión más profunda
    acerca de como Apache asigna las peticiones que recibe a los hosts
    virtuales que las servirán. Puede consultar aquí un documento que trata el
    tema.
El que Apache soporte hosting
    virtual basado en nombres desde la version 1.1 hace que sea
    necesario que el servidor conozca la dirección (o
    direcciones) IP del host que httpd está
    ejecutando. Para tener acceso a esta dirección puede usar la
    directiva global ServerName
    (si está presente) o llamar a la función de C
    gethostname (la cuál debe devolver el mismo
    resultado que devuelve ejecutar por línea de comandos
    "hostname"). Entonces se produce una búsqueda DNS de esa
    dirección. Actualmente, no hay forma de evitar que se
    produzca esta búsqueda.
Si teme que esta búsqueda pueda fallar porque su servidor
    DNS está desactivado entonces puede insertar el nombre de
    host en /etc/hosts (donde probablemente ya lo tiene
    para que la máquina pueda arrancar
    correctamente). Asegúrese de que su máquina está
    configurada para usar /etc/hosts en caso de que esa
    búsqueda DNS falle. En función del sistema operativo que
    use, puede conseguir esto editando /etc/resolv.conf,
    o puede que /etc/nsswitch.conf.
Si su servidor no tiene que ejecutar búsquedas DNS por
    ninguna otra razón entonces considere ejecutar Apache
    especificando el valor "local" en la variable de entorno
    HOSTRESORDER. Todo esto depende del sistema operativo
    y de las librerías de resolución que use. Esto
    también afecta a los CGIs a menos que use
    mod_env para controlar el entorno. Por favor,
    consulte las páginas de ayuda o la sección de Preguntas
    Más Frecuentes de su sistema operativo.
VirtualHost
      Listen
      ServerName
      <VirtualHost _default_:*>
      que no tenga páginas que servir.La situación actual respecto a las búsquedas DNS está lejos de ser la deseable. En Apache 1.2 se intentó hacer que el servidor al menos se iniciara a pesar de que fallara la búsqueda DNS, pero puede que esa no sea la mejor solución. En cualquier caso, requerir el uso de direcciones IP explícitas en los ficheros de configuración no es ni mucho menos una solución deseable con la situación actual de Internet, donde la renumeración es una necesidad.
Una posible solución a los ataques de robo de servicio descritos más arriba, sería hacer una búsqueda DNS inversa de la dirección IP devuelta por la búsqueda previa y comparar los dos nombres -- en caso de que sean diferentes, el host virtual se desactivaría. Esto requeriría configurar correctamente DNS inverso (una tarea con la que suelen estar familiarizados la mayoría de los administradores de sistemas).
En cualquier caso, no parece posible iniciar en las condiciones apropiadas un servidor web alojado virtualmente cuando DNS ha fallado a no ser que se usen direcciones IP. Soluciones parciales tales como desactivar partes de la configuración podrían ser incluso peores que no iniciar el servidor en absoluto, dependiendo de las funciones que se espera que realice el servidor web.
Como HTTP/1.1 está ampliamente extendido y los navegadores
    y los servidores proxy empiezan a usar la cabecera
    Host, en el futuro será posible evitar el uso de
    hosting virtual basado en direcciones IP completamente. En ese
    caso, un servidor web no tiene ninguna necesidad de hacer
    búsquedas de DNS durante la configuración. Sin embargo,
    en Marzo de 1997 esas funcionalidades no estaban lo
    suficientemente implantadas como para ponerlas en uso en
    servidores web que realizaban tareas de importancia
    crítica.