Firewall de alta disponibilidad con balanceo de carga (Clúster)

1
14017

Firewall de alta disponibilidad con balanceado de carga sobre dos apaches

Índice de contenidos

1. Introducción

En este tutorial vamos a ver cómo montar un laboratorio de pruebas en virtual box con cuatro máquinas virtuales, todas ubuntu 12.04, de las cuales 2 van a hacer de firewall de alta disponibilidad y harán el balanceo de carga sobre las otras dos máquinas virtuales que contendrán cada una un apache.

La red que queremos montar va a quedar así:

La anterior imagen está realizada desde la página cacoo.com.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 17′ (2,93 GHz Intel Core 2 Duo, 8GB 1067 Mhz DDR3, 320GB Flash Storage).

  • VirtualBox-4.3.6

  • Sistemas Operativo: Ubuntu Server 12.04 LTS

  • Keepalived v1.2.2

  • Conntrack v1.0

3. Preparación del entorno

Lo primero que tenemos que haces es bajarnos el VirtualBox, desde su página oficial y siguiendo los pasos es muy fácil de instalar.

También nos vamos a descargar las máquinas ubuntu ya preparadas para VirtualBox de esta página.

Una vez descargado la imagen de ubuntu, abrimos el archivo *.vbox y se nos cargará en el VirtualBox. Para tener nuestras 4 máquinas lo único que tenemos que hacer es clonar la máquina 3 veces. Dejamos claro en el nombre la función de cada una de nuestras máquinas, por ejemplo, FW1, FW2, Apache1, Apache2.

Hay que tener en cuenta que nos clona la máquina con todas las consecuencias, con lo que hay que tener en cuenta que las interfaces van a tener la misma MAC y nos causará problemas si no corregimos esto. Para solucionarlo tenemos que generar nuevas MAC desde vbox pulsando con el botón derecho sobre la imagen –> Settings –> Network . Añadir 3 interfaces en las máquinas FW y 1 en los apaches. En la parte de avanzado podemos cambiar las mac de las interfaces. Una vez renovada las mac, tenemos que hacerlas coincidir con el archivo /etc/udev/rules.d/70-persistent-net.rules

4. Configuración interfaces

Arrancamos la máquina FW1 y FW2, que serán las encargadas de llevar el balanceo de carga y la alta disponibilidad.

La configuración de red en las interfaces de las máquinas tiene que quedas así:

  • FW1:
    • Eth0: 192.168.0.231 (Red externa)
    • Eth0:1 192.168.0.230 (IP virtual)
    • Eth1: 10.0.1.1 (Red interna)
    • Eth1:1 10.0.1.230 (IP virtual)
    • Eth2: 10.0.2.1 (Red de sincronización)
  • FW2:
    • Eth0: 192.168.0.232 (Red externa)
    • Eth0:1 192.168.0.230 (IP virtual)
    • Eth1: 10.0.1.2 (Red interna)
    • Eth1:1 10.0.1.230 (IP virtual)
    • Eth2: 10.0.2.2 (Red de sincronización)

Para dejar la configuración como se ha propuesto, tenemos que configurar los ficheros /etc/network/interfaces de las dos máquinas y dejarlos de la siguiente manera:

Para la máquina 1:

Para la máquina 2:

Ahora vamos a configurar las máquinas de los Apaches, las arrancamos e instalamos el apache con:

Y configuramos sus archivos /etc/network/interfaces para el gateway apunte a la ip virtual, quedando así:

Apache1:

Apache2:

5. Configuración de keepalived y conntrack

5.1. Configuración de conntrack

Es recomendable, pero no imprescindible, hacer los siguientes comandos para tener las máquinas actualizadas:

Ahora vamos a instalarnos las herramientas que vamos a necesitar, para ello ejecutamos el siguiente comando en las dos máquinas:

Ahora tenemos que copiar unos archivos de configuración que vienen en la instalación de conntrack y que nos ayudarán a configurar la instalación. Para ello:

Ahora tenemos que configurar el fichero /etc/conntrack/conntrack.conf y comentamos todo lo que está descomentado de la parte de Multicast {}, ya que solo vamos a tener dos máquinas y lo haremos unicast. En el bloque unicast tenemos que dejarlo como sigue:

Para FW1:

Para FW2:

Y dejar el bloque Adress Ignore de las dos máquinas así:

5.2. Configuración de keepalived

Lo primero es sacar el hash de la página index.html para la comprobación de si está caído el servicio, se va a necesitar para la configuración de keepalived y se saca así:

Como veis, los dos hash son iguales, ya que tienen la misma página index.html de ejemplo. Por lo que ese hash nos vale para la configuración de keepalive de los dos apaches en nuestras dos máquinas FW.

Ahora vamos con el fichero de configuración de keepalived, que no lo crea la instalación así que tenemos que crearle en la ruta: /etc/keepalived/keepalived.conf y contendrá la siguiente configuración:

Para FW1:

Ahora la configuración de FW2:

Como veis, son prácticamente iguales, se diferencian en el estado inicial, (MASTER|BACKUP) y en el número de prioridad. El que tenga mayor prioridad será el MASTER, aunque en el estado ponga que es BACKUP.

He comentado la primera configuración con las cosas más básicas.

Ahora vamos a crear el último archivo que nos queda pendiente. Es un script que nos va a permitir definir reglas iptables para redirigir el tráfico en caso de que no seamos el master y borrar la iptable de redirigir en caso de que lo seamos.

El archivo estará en /etc/keepalived/notify.sh y contendrá lo siguiente:

Ya tenemos todo configurado, nos falta habilitar el ip forward para que pueda redirigir paquetes.

Para hacerlo, descomentamos la línea net.ipv4.ip_forward=1 del archivo /etc/sysctl.conf

Ahora tenemos que reiniciar todas las máquinas para que se cargen todos los ajustes. (Podríamos reiniciar los daemons de las herramientas y nos valdría, pero es un paso más sencillo reiniciar y que se carge de nuevo todo).

6. Testear la instalación

Para comprobar que está todo funcionando correctamente vamos a seguir los siguientes test:

Lo primero que vamos a verificar es si está funcionando bien la redirección, para ello ejecutamos el siguiente comando en las máquinas FW.

La salida tiene que ser como esta:

Si tenemos la misma salida, vamos a realizar una prueba de concepto para verificar que el resultado es el que esperabamos. Para realizarlo yo he optado por tener una máquina Debian (virtual también) enganchada a la red 192.168.0.0/24 y desde ella, con el comando wget voy a traerme el fichero index.html limitando la velocidad para que me de tiempo a ir reiniciando máquinas y verificar que no se corta la conexión.

El comando usado ha sido :

Y mientras se ha ido descargando he ido reiniciando las máquinas alternativamente (Siempre dejando una máquina FW y un Apache) .

7. Problemas

Me ha dado algún quebradero de cabeza hacer funcionar conntrack porque no lograba sincronizarse entre los FW, y la solución era levantar un módulo que no se levanta automáticamente. Para comprobar si tenéis el mismo problema ejecutad el comando:

En las máquinas FW. Si os sale vacío (como me pasaba a mí) puede que sea porque no levanta el módulo ip_conntrack. Para levantarlo hacemos:

Y volvemos a revisar con el anterior comando (conntrack -L). Si ahora ya aparecen las conexiones, tenemos que agregarlo al inico de la máquina con el comando:

También hay que tener en cuenta que si iniciamos la máquina MASTER antes que la de BACKUP, tenemos que agregar manualmente las siguientes reglas iptables:

Esto es para que redirija los paquetes si está en BACKUP. Ésto se hace automáticamente cuando se cambian los roles, pero al iniciar antes MASTER no se realiza y por eso lo tenemos que poner a mano.

Para revisar otros posibles fallos que puedan ocurrir es conveniente leer los logs de conntrack (/var/log/conntrack.log) y de keepalived (va a syslog ( (/var/log/syslog) )

8. Referencias

9. Conclusiones

Hemos visto que no es tan difícil montar una alta disponibilidad con balanceo de carga ayudado por herramientas opensource de las distribuciones linux. Esto es sola la base sobre la que montar otras cosas a tener en cuenta como la seguridad ( podemos encontrar un inicio a la seguridad en linux en este tutorial), configurar apache para aceptar más conexiones, etc..

Un saludo y cualquier duda en los comentarios.

1 Comentario

Dejar respuesta

Please enter your comment!
Please enter your name here