Ago
15
2010
0

Múltiples VirtualHost en SSL en una única IP (SNI)



Resumiendo mucho el funcionamiento de los VirtualHost en Apache, se puede decir que el cliente (nuestro navegador) envía al servidor el nombre del dominio al que deseamos acceder y Apache lo busca en sus configuraciones para entregarte la web. De esta forma en un solo servidor podemos tener alojados múltiples páginas web, cada una con su VirtualHost.

GET /blog/ HTTP/1.1
Host: javirodriguez.com.es
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.6) Gecko/2009020911 Firefox/3.0.6
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: es,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Pero la cosa cambia si las webs deben ser transmitidas mediante HTTPS, esto es, estableciendo una conexión SSL. Gracias a esta tecnología es posible que todo el tráfico entre el servidor y nuestro navegador vaya cifrado y esta es la raíz del problema. Al tener todos los datos cifrados, el servidor no puede saber que dominio está pidiendo el navegador, por lo que los VirtualHost en base a nombres (dominios) pierden utilidad. Para paliar este problema, se ponían múltiples IPs en el servidor y se asignaba cada IP a un VirtualHost. De esta forma, cada web HTTPS tenia como destino una IP distinta y así el servidor era capaz de darte la web que estabas buscando. Esto es, se pasaba de tener VirtualHost por nombre a tenerlos por IP. Si tenías dos páginas web esto no era problema, pero si tenías 200… acelerarías la implantación de IPV6 y eso no es bueno 😉

Para solucionar este problema se publicó en 2006 el RFC 4366. En resumen, TLS pasaba a tener extensiones a nivel cliente y servidor. Una de las cuales permite que el cliente en el establecimiento de la conexión (antes de comenzar el cifrado) pueda indicar el dominio al que desea acceder. La que nos hace la magia es SNI. Para que esto funcione es necesario cumplir una serie de requisitos:

  • OpenSSL 0.9.8f o posterior con extensiones TLS (enable-tlsext)
  • Apache compilado con dicho OpenSSL
  • Navegadores Mozilla Firefox 2.0, Opera 8.0 Internet Explorer 7.0, Google Chome, Safari 3.2.1

Para activar esta extensión añadimos la siguiente línea a httpd.conf:

SSLStrictSNIVHostCheck on

Una vez hecho configuraríamos nuestros VirtualHost SSL como si fuesen los de toda la vida (sin SSL).

Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
        ServerName test1.javirodriguez.com.es
        ServerAlias test1.javirodriguez.com.es
        DocumentRoot /var/www/test1
        Options FollowSymLinks
        <Directory /var/www/test1>
        AllowOverride All
        </Directory>
        ErrorLog /var/log/apache2/test1error.log
        CustomLog /var/log/apache2/test1access.log combined env=!client-ip-request
        SSLEngine on
        SSLCertificateFile /etc/ssl/test.pem
        SSLCertificateKeyFile /etc/ssl/test.key
</VirtualHost>
<VirtualHost *:443>
        ServerName test2.javirodriguez.com.es
        ServerAlias test2.javirodriguez.com.es
        DocumentRoot /var/www/test2
        Options FollowSymLinks
        <Directory /var/www/test2>
        AllowOverride All
        </Directory>
        ErrorLog /var/log/apache2/test2error.log
        CustomLog /var/log/apache2/test2access.log combined env=!client-ip-request
        SSLEngine on
        SSLCertificateFile /etc/ssl/test.pem
        SSLCertificateKeyFile /etc/ssl/test.key
</VirtualHost>

Si vemos el siguiente error en los logs de Apache es que nuestro navegador no es compatible:

[error] No hostname was provided via SNI for a name based virtual host

Y listo, ya puedes tener múltiples VirtualHost con SSL en una única IP 🙂

Fuente: Miguel Angel Nieto

Written by Javier Rodriguez in: Linux,Web | Etiquetas: , , , ,
Oct
16
2008
0

Servidor DNS dos en uno con Bind


Este tutorial muestra cómo configurar el servidor DNS Bind9 para servir a una red interna y una red externa, al mismo tiempo con diferentes resoluciones de nombres/IP. Para lograr esto se utiliza una nueva caracteristica de Bind9 llamada “view” o vista.

Esto nos puede servir de gran ayuda cuando tenemos un servidor en la red de nuestra casa y queremos que resuelva la IP publica del servidor para las solicitudes que vienen desde Internet y que nos resuelva la IP interna para cuando lo solicitamos nosotros.

Para ello debemos modificar nuestro named.conf y añadir el siguiente codigo:

acl internals {
   127.0.0.0/8;
   192.168.1.0/24;
};

Con esto lo que queremos decir es que la ACL internals son las IPs 127.0.0.0/8 y todo el rango de IPs de la subred 192.168.1.0. De momento vamos a seguir configurando nuestro DNS.

A continuación añadimos algo similar a lo siguiente:

view "internal" {
   match-clients { internals; };
   recursion yes;
   zone "example.com" {
      type master;
      file "/etc/bind/internals/db.example.com";
   };
};
view "external" {
   match-clients { any; };
   recursion no;
   zone "example.com" {
      type master;
      file "/etc/bind/externals/db.example.com";
      allow-transfer { slaves; };
   };
};

Con esto ultimo lo que hemos querido decir, es que la vista internal solo pueden acceder los clientes (match-clients) que estan en la ACL internals y la vista external es el resto de clientes.

Con esto podemos decirle que al mismo dominio (dominio.com) coja un archivo distinto para cada una de las consultas y asi pueda resolver de una forma u otra.

A parte de lo interesante que es esto, tambien hay que decir que a los clientes de la vista internal les permitimos recursion DNS, es decir, que si solicitamos la IP de google.es nos la dara, pero la recursion de la vista external no esta permitida, por lo que si un cliente desde Internet nos pide cual es la IP de google.es no se la daremos. De esta forma configuraremos nuestros equipos de la red local para que su servidor DNS sea nuestro servidor Bind y este nos resuelva todos los DNS.

Solo cabe recalcar que hay que poner primero la vista internal y despues la external, ya que si lo hiciesemos al reves como el match-clients de la vista external es any (cualquiera) nos resolveria ese primero, ya que es el que primero esta.

Written by Javier Rodriguez in: Linux,Redes | Etiquetas:
Jul
14
2008
0

Servidor no encontrado: Cómo reparar errores de DNS


La conexión parece estar bien. Las luces del módem y del router parpadean saludablemente, y nada ha sido cambiado en la configuración respecto al día anterior. Sin embargo, al querer abrir una página que sabes que funciona perfectamente, recibes un error (incluso a veces un 404) a cambio. Antes de desechar tu red y rehacerla desde cero, deberías verificar que los servidores DNS de tu proveedor no te estén dando problemas.

¿A quién no le ha sucedido? Todo aparenta estar en orden, las conexiones físicas intactas, la configuración de Windows reluciente, y sin embargo, cada página que visitas te saluda con un temerario error de servidor. Llamas a tu proveedor de Internet, sólo para recibir como respuesta que todo funciona perfectamente, y que el problema está de tu lado. Pero hay veces en que dicen eso cuando en realidad están corriendo de aquí para allá, tratando de resucitar a sus servidores DNS, porque se cayeron de forma apocalíptica.

La importancia de los servidores DNS, es crítica. Si no fuera por ellos, deberíamos escribir cada número IP de cada página de manera manual para poder visitarla, y algo tan sencillo como www.google.com se convertiría en 72.14.207.99. En otras palabras, una pesadilla.

Entonces, ¿cómo puedes comprobar que el servidor DNS de tu proveedor te está haciendo la vida imposible? Es sencillo: Usando otro servidor DNS. Redirigir tus solicitudes de nombres a otro servidor puede sacarte del apuro en ese mal momento cuando a los servidores DNS de tu proveedor se les ocurre la mala idea de caerse. También puedes probar otro servidor DNS con el objetivo de obtener una resolución de nombres más rápida, lo que aceleraría la navegación. Sin embargo, si eres de llevar a cabo tareas muy importantes en Internet, es probable que apuntes más a la estabilidad que al rendimiento. En casos muy aislados, existe la posibilidad de que la navegación sea un poco más lenta al abrir páginas, pero al menos sabes que no te abandonará cuando estés caminando sobre las brazas.

El primer paso es determinar el estado de los servidores DNS de tu proveedor, ya sea llamando por teléfono al soporte técnico, o simplemente haciendo un ping hacia el servidor. Para hacer esto, debes abrir una consola de sistema, y usar el comando ping, seguido del número del servidor. Por ejemplo, para Telefónica de España, uno de los números de servidor DNS más conocidos es 80.58.61.250. Si el comando ping arroja un error, entonces puedes probar a buscar otros servidores del mismo proveedor, pero si el error persiste, hay que tomar medidas.

El segundo paso es conseguir un número alternativo de un servidor DNS público. Hay muchos disponibles en la red, y que además de ser gratis, ofrecen un servicio muy bueno. Para nuestro ejemplo, usaremos unos de los tantos servidores DNS que tiene Telefónica de España.

Si estás usando Windows Vista, debes ir al Panel de Control, luego a Centro de redes y recursos compartidos, y finalmente a Administrar Conexiones de red. Haz un clic con el botón secundario sobre la conexión de red que estés usando (sea una placa de red física, o una inalámbrica), y escoge Propiedades. Resalta la opción Protocolo de Internet versión 4, y haz clic en el botón Propiedades. Haz clic en Usar las siguientes direcciones de servidor DNS, y escribe 80.58.0.33 para el servidor primario, y 80.58.32.97 para el secundario. Acepta todos los cambios, y reinicia Windows Vista para aplicar la configuración.

Para los usuarios de Windows XP, los pasos a seguir son muy similares, sólo que la manera de llegar allí es diferente. Ve al Panel de Control, y luego haz un doble clic en Conexiones de Red. Luego, un clic con el botón secundario sobre la conexión de red, y un clic en Propiedades. El resto es igual que en el ejemplo de Windows Vista, con la única diferencia que el nombre es simplemente Protocolo de Internet. Coloca los mismos números en los servidores primario y secundario, y acepta los cambios. Windows XP te pedirá reiniciar para poder operar con los nuevos DNS.

Esta forma de configurar los DNS hace que sean usados en cada ordenador, y no de manera global. Si tienes un router en tu red, lo más efectivo será que configures estos DNS en el router. Entra a su configuración y busca la sección relacionada con los servidores DNS (usualmente ubicado bajo opciones de DHCP). Escribe los números, confirma los cambios, y reinicia el router para que tomen efecto. No podemos decirte con exactitud cómo debes proceder con tu router, debido a la gran cantidad de modelos existentes, pero lo cierto es que no debería ser muy complicado. Consulta el manual de tu router si tienes dudas.

Por último, deberías descartar cualquier problema que puedas tener en el caché DNS de Windows, abriendo una consola de sistema, y usando el comando ipconfig /flushdns para purgar cualquier rastro de caché existente.

Con estas cosas combinadas, podrás sortear sin problemas la pesadilla de quedarte sin servidores DNS, al menos hasta que tu proveedor pueda volver a colocarlos en línea. Puedes incluso reemplazar los DNS de tu proveedor con los de OpenDNS de manera permanente, si las fallas de tu proveedor son demasiado frecuentes. Recuerda que esto sólo afecta la resolución de los nombres de páginas web, y no debería afectar a otras aplicaciones como mensajería (MSN) y descargas p2p (BT, Emule). ¡Buena suerte!

Written by Javier Rodriguez in: Redes | Etiquetas: , , , , , , , ,

Theme: TheBuckmaker.com Blog Themes | Hostpapa customer, Berlin