Balanceador Web Pound: Redirigir de http a https

El objetivo de Pound es poder redirigir una petición de entrada entre varios servidores. Así, si tenemos una pagina web con carga, podemos tener varios servidores detrás que la tengan alojado. Los clientes cuando accedan a nuestra web, creerán que es la misma pagina web, pero realmente Pound va enviando las peticiones entre varios servidores.

Esta el objetivo principal de Pound, pero otra función no menos importante de Pound, es la capacidad de recibir conexiones https y enviarlas por http a nuestro servidor real. De esta forma la conexión entre el cliente y nuestra sede esta encriptada y desde round hasta el servidor final (en nuestro caso web) va en texto claro, pero ya vamos dentro de nuestro entorno.

Bien nosotros en este ejemplo vamos a usar la segunda opción de Pound, redirigir de https a http.

PRE-REQUISITOS

– Distribución de Linux, nosotros vamos a usar Centos 5,5 64 bits, podemos usar cualquiera.

– Ejecutable de Pound para nuestra distribución de linux(pound-2.4.3-1.el5.rf.x86_x64.rpm)

– IP Estatica de entrada.

– Tantos servidores web como quedaramos😉

INSTALACION DE POUND

Para hacer la instalación de Pound necesitamos permisos administrador sobre la maquina Linux.

sudo rpm –ihv pound-2.4.3-1.el5.rf.x86_64.rpm

Si no tenemos alguna dependencia no instalada, nos lo indicará y tendremos que instalarlas.

CONFIGURACION DE POUND

Para que Pound funcione correctamente, debemos deshabilitar SeLenux, para ello desde la consola de Centos, escribirmos el comando

setup

Nos vamos a Configuracion del Firewall. Marcando como vemos las opciones “Deshabilitado” tanto para Nivel de seguridad como para SELinux

Aceptamos y guardamos para salvar los cambios.

GENERAR UN CERTIFICADO DIGITAL AUTOFIRMADO

En el siguiente paso vamos a crear un certificado temporal ssl (si lo tuviésemos ya, solo tenemos que copiarlo a la ruta /etc/ssl)

 mkdir /etc/ssl

cd /etc/ssl

openssl genrsa -out server.key 1024

cp server.key server.key.org

openssl rsa -in server.key.org -out server.key

openssl req -new -key server.key -out server.csr

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

openssl x509 -in server.crt -text

openssl x509 -in server.crt -out server.pem

Openssl rsa -in server.key >> server.pem 

Ya tendremos nuestro certificado de pruebas, guardado en la ruta /etc/ssl en el fichero server.pem

Bien ahora vamos a lo interesante, configurar el servidor de Pound.

En este último paso vamos a poner un ejemplo de cómo configurar Pound, para que acepte peticiones HTTPS y las envíe a diferentes servidores web sobre HTTP, usando el certificado anteriormente creado.

Ejemplo:

Todo el tráfico entrante a la maquina por el puerto 443 y que tenga como dominio en la petición http “alvarofernandezdoblas.wordpress.com” lo debe enviar a 10.0.13.25 por el puerto 80

Todo el tráfico entrante a la maquina por el puerto 443 y que tenga como dominio en la petición http “vdi.alvarofernandez” lo debe enviar a 10.0.13.70 por el puerto 80

Vamos a ponerlo de forma grafica:

Todo la configuración de Pound se encuentra en el fichero /etc/pound, lo editamos con nuestro editor favorito (nano, vi, vim…)

nano /etc/pound

Modificamos el fichero para que quede como sigue:

User “www-data”

Group “www-data”

 

ListenHTTPS

                 Address 0.0.0.0

                 Port 443

                 Cert “/etc/ssl/server.pem”

 

                 Service

                                   HeadRequire “Host:.*alvarofernandezdoblas.wordpress.com.*”

                                   BackEnd

                                                    Address 10.0.13.25

                                                    Port 80

                                   End

                 End

 

                 Service

                                   HeadRequire “Host:.*vdi.alvarofernandez.*”

                                   BackEnd

                                                    Address 10.0.13.70

                                                    Port 80

                                   End

                 End


End

Detallo la configuración:

Con estas tres lineas definimos que escuchamos por cualquier  interfaz de nuestro servidor Pound y que escuchamos por el puerto 443 y que el certificado se encuentra en la ruta /etc/ssl con el nombre de server.pem

Address 0.0.0.0

Port 443

Cert “/etc/ssl/server.pem”

En cada campo “Service” definimos que estamos esperando en la cabecera de la petición http y donde lo enviamos y el puerto de conexión entre Pound y el servidor

En “HeadRequire” es donde definimos que estamos esperando para enviarlo a un servidor o a otro.

Ejemplo: Todo las peticiones a la url alvarofernandezdoblas.wordpress.com lo vas a enviar a los servidores que defina en la sección “BackEnd

HeadRequire “Host:.*alvarofernandezdoblas.wordpress.com.*” 

En el campo “BackEnd” dentro del servicio, establezco los servidores a donde voy a redirigir las peticiones en caso de que coincidan con el HeadRequire anterior.

Ejemplo: Todolo que coincida con alvarofernandezdoblas.wordpress.com envialo a los servidores 10.0.13.25 y 10.0.13.26 (que son los servidores con apache donde esta la pagina web alojada), podemos poner tantos como queramos, y envía la petición al servidor  por el puerto 80

                                   BackEnd

                                                    Address 10.0.13.25 

                                                    Address 10.0.13.26 

                                                    Port 80

                                   End

                 End

Como otro ejemplo de configuración, voy a poner la configuración para escuchar directamente peticiones a un servidor Pound y este a varios servidores web para balancear la carga entre ellos:

User “www-data”

Group “www-data”

 

ListenHTTPS

                 Address 0.0.0.0

                 Port 80

 

                 Service

                                   BackEnd

                                                    Address 10.0.13.25

                                                    Address 10.0.13.26

                                                    Address 10.0.13.27

                                                    Address 10.0.13.28

                                                    Port 80

                                   End

                 End


End

Espero que os haya sido de utilidad, nos vemos en el próximo.