Redirigir peticiones http de una maquina a otra sin perder hostname con mod_proxy

Hace unos dias me encontré con el siguiente problema, tengo que migrar el site foo.com del servidor A al servidor B, no podemos tener el site caido mucho tiempo mas allá de unos pocos minutos (lo que tardamos en hacer un dump de los datos y una copia de ficheros), tampoco queremos cambiar el dominio del site  (por ejemplo usando una redirección del estilo.foo.com a new.foo.com).

Resumiendo: queremos que todas las peticiones que entren al servidor A para el virtual host foo.com le lleguen al servidor B que tiene tambien configurado ese mismo dominio en sus virtual hosts.

Afortunadamente Apache 2 es el servidor web del dominio foo.com.

¿Como lo hacemos?

Voy a proponer una solución al problema utilizando mod_proxy:

Añadimos estas 3 lineas a la configuración del servidor A.

ProxyPass / http://192.240.2.93/

ProxyPassReverse / http://192.240.2.93/

ProxyPreserveHost On

Explicamos para que sirven los parametros:

  • ProxyPass redirige la petición del servidor A a la ip del servidor B.
  • ProxyPassReverse cambia la URL en las cabeceras Location, Content-Location y URI de las respuestas HTTP redirect. Se utiliza para que la respuesta de la petición vaya al cliente a traves del host A, lo cual es muy util cuando redirigimos peticiones a hosts en una red privada que no tienen acceso a internet. En nuestro caso esta directiva es opcional y podemos decidir que sea el host B el que responda al cliente directamente.
  • ProxyPreserveHost mantiene la cabecera Host de la petición en la redirección al servidor B, esta pensado especificamente para poder hacer redirecciones a servidores que utilicen virtual hosts basados en nombres de dominio.

En el host B tenemos que tener una configuración similar a esta para que acepte las peticiones que le entran desde el servidor A:

<virtualhost *:80>
ServerName foo.com
DocumentRoot /var/www/foo

<directory «/var/www/foo»>
Order allow,deny
Allow from all
</directory>

ErrorLog /var/log/apache2/foo.err
CustomLog /var/log/apache2/foo.log combined
</virtualhost>

Curso completo de Redes Cisco CCNA

Aqui os dejo un pedazo de curso CISCO CCNA  que para los que querrais sacaros la titulación CCNA os va a venir de lujo.

Contenido:

Semestre I

0 : Recorrido rapido del curriculum
1: Informatica basica
2: El Modelo Osi
3: Redes de ares local (LAN)
4: Capa 1 – Electronica y señales
5: Capa 1 – Medios, Conexiones y Colisiones
6: Capa 2 – Conceptos
7: Capa 2 – Tecnologias
8: Diseño y documentacion
9: Proyecto y cableado estructurado
10: Capa3 – Enrutamiento y direccionamiento
11: Capa3 – Protocolos
12: Capa4 – Capa de transporte
13: Capa5 – Capa de sesion
14: Capa6 – Capa de presentacion
15: Capa7 – Capa de aplicacion

Semestre II

i: Recorrido rapido del curriculum
1: Repaso
2: WAN y routers
3: CLI de router
4: Componentes del router
5: Inicio y configuracion del router
6: Configuracion del router 1
7: Imagenes IOS
8: Configuracion del router 2
9:TCP/IP
10: Direccionamiento IP
11: Enrutamiento
12: Protocolos de Enrutamiento
13: Diagnostico de fallas de red

Semestre III

i: Recorrido del Curriculum
1: Repaso: El modelo de referencia OSI y el enrutamiento
2: Conmutacion de LAN
3: LAN virtuales (VLAN)
4: Diseño de LAN
5: Protocolo de Enrutamiento de gateway interior (IGRP)
6: Listas de Control de acceso (ACL)
7: IPX de Novell
8: Administracion de Red

Semestre IV

i: Recorrido rapido del curriculum
1: Repaso
2: WAN
3: Diseño de WAN
4: Protocolo punto a punto (PPP)
5: Red Digital de Servicios Integrados (RDSI)
6: Frame Relay
7: Administracion de red
8: Repaso para el Examen de Certificacion + Red
9: Repaso para el Examen de Certficadcion CCNA

* Tamaño: 53 Mb
* Idioma: Español

Link:

http://www.ziddu.com/download/4788960/BlogofsysAdmiins.com-Curso_Redes_Cisco.rar.html

Password:  http://blogofsysadmins.com

Obtener tu ip pública desde la linea de comandos

Esta es una de las múltiples maneras que hay de obtener tu ip pública desde linea de comandos, teneis que editar vuestro fichero .profile o .bashrc o .bash_profile y añadir la siguiente linea:

alias myip=”lynx -dump http://whatismyip.com/automation/n09230945.asp”

Saludos amigos 😀

Borrar una linea en el fichero known_hosts

Si has reinstalado el sistema operativo en un servidor, o le has cambiado la ip, seguramente cuando vuelvas a intentar acceder a la máquina por ssh te impedirá el acceso y recibiras un mensaje como este:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
b1:3b:85:a5:b3:ab:37:a9:6d:3e:98:7a:d5:9d:78:15.
Please contact your system administrator.
Add correct host key in /home/ghosti/.ssh/known_hosts to get rid of this message.
Offending key in /home/ghosti/.ssh/known_hosts:240
RSA host key for 29.23.11.34 has changed and you have requested strict checking.
Host key verification failed.

La solución es eliminar la linea número 240 del fichero known_hosts, puedes hacerlo con un editor de texto, pero es mas cómodo teclear lo siguiente:

ssh-keygen -R hostname|ip

Si no has tocado nada, ten cuidado, puede que alguien este intentando acceder a tu servidor con técnicas man in the middle.

Crear un proxy Socks usando un tunel ssh

Si tienes una cuenta ssh en algún ordenador de internet la puedes utilizar como proxy para navegar desde ese ordenador remoto. En esencia un proxy es un ordenador que utilizas como puente para acceder a Internet a través de él. Esto puede ser útil para muchas situaciones. Por ejemplo:

  • Tienes que conectarte a una página a la que no puedes acceder desde tu red por estar «prohibida».
  • Quieres conectar a una página pero no quieres que sepan de entrada desde que ordenador estás consultando. Aclaración: siempre, repito, siempre se puede averiguar desde dónde se ha consultado una página, es una cuestión de tiempo y recursos (como los que tiene la policía)
  • Estas configurando un servidor de páginas web en tu red local y quieres comprobar si funciona desde Internet. Puedes llamar a un amigo para que se conecte o puedes hacerlo tú desde el proxy.

Basta con tener un cliente de ssh instalado y una cuenta en internet. En mi caso tengo una cuenta en el servidor de Hostmonster que permite acceso de ssh. Si no tienes ninguna cuenta y no quieres alquilarla hay muchos sitios en internet que te ofrecen cuentas shell gratuítas con servicios limitados.

Lo primero que haremos será usar el cliente de ssh para crear la conexión y abrir el proxy. En linux lo puedes hacer con el siguiente comando:

ssh -D 9999 usuario@direccion_servidor_ssh

Tras esto y una vez introducida la contraseña ya tendremos preparada la conexión y el puente SOCKS en el puerto 9999 de nuestro ordenador. Por supuesto se puede cambiar el número de puerto y los valores «usuario» y «direccion_servidor_ssh» correponderán con los de nuestra cuenta ssh.

La segunda parte es configurar el navegador web (o cualquier otro programa que queramos usar) para que use el puente SOCKS. En el ejemplo utilizaré el navegador Firefox. Vamos al menú «Editar->Preferencias» y en la ventana que se abre seleccionamos «Avanzado» y la pestaña «Red».

Preferencias firefox
Preferencias firefox

Una vez aquí pinchamos en «Configuración» y introducimos los datos como sigue cambiando el número de puerto 9999 si hemos seleccionado otro al crear el túnel.

Preferencias firefox
Preferencias firefox

Si hemos realizado los pasos correctamente nos conectamos a cualquier página para comprobar si funciona. Será algo más lenta que la navegación directa pero hay veces que no hay otra solución que utilizar este método.