martes, 19 de febrero de 2013

Creación de un Virtual Appliance para control de Internet con VMware (parte 1)

Esta es la primera entrega de varios artículos que voy a publicar en los próximos días mostrando un caso práctico de creación de un appliance virtual para controlar el acceso a Internet de una compañía usando exclusivamente software gratuito.

La guía que vamos a desarrollar podría perfectamente valer para crear un appliance tradicional basado en un equipo headless cualquiera; además no es necesario un equipo de extremada potencia por lo que es la excusa perfecta para reutilizar cualquier PC al que íbamos a dar matarile. Sin embargo, he escogido el formato de máquina virtual porque así de paso nos aprovechamos de las distintas ventajas de usar una plataforma como VMware para usos que no siempre son tan conocidos o habituales.


Requisitos previos


Para realizar este proyecto os propongo un escenario ideal, aunque se pueden hacer variaciones adecuándolo a nuestras necesidades y, por supuesto, nuestros recursos. En este escenario necesitaríamos:

  • Un acceso a Internet por Ethernet. Sería válido tanto un router en modo bridge (la IP pública iría a nuestro appliance) o disponer de un acceso detrás de otro router/firewall (en cuyo caso usaríamos una IP del lado privado para la pata WAN de nuestro Appliance). En nuestro ejemplo usaremos esta segunda opción.
  • Un servidor o PC con dos interfaces de red Ethernet, capaz de correr VMware ESXi (excepto si optamos por hacer un appliance físico).
  • Un switch gestionable y compatible con el estándar 802.1Q para segmentar la red mediante VLANs.
  • Una pizca de paciencia ☺

Una vez entendamos el objetivo del proyecto y la configuración, veremos que los puntos anteriores son fácilmente modificables a nuestro antojo.

Funcionalidades y características


Nuestro appliance tendrá al menos las siguientes características y funciones que cito a continuación:

  • Enrutador
  • Firewall básico
  • Proxy web transparente
  • Proxy web con autenticación de usuarios
  • Proxy SOCKS5
  • Integración con usuarios y grupos de Active Directory
  • Control por usuarios/destino/contenido
  • Control de ancho de banda y tráfico web por usuario
  • Caché de contenidos web
  • Registro exhaustivo de los accesos realizados a Internet
  • Visualización de estadísticas

Además, dejamos abierta la puerta a futuras funcionalidades como control de tráfico y ancho de banda por protocolo y contenido (traffic shaping con DPI).

Software utilizado


Como cualquier lector se habrá dado cuenta a estas alturas, este proyecto está claramente orientado a un sistema operativo de "tipo Unix". Podemos elegir entre muchos de sus "sabores" (Linux, Solaris, Mac OS X...) pero por una cuestión de gusto personal, he escogido montarlo todo sobre FreeBSD. La razón es que soy más partidario de la rama de Berkeley quizás por tradición y porque se dice que los BSDs son más robustos y seguros que el kernel Linux. Hoy en día no creo que haya razones objetivas para sostener esa creencia, pero aún así daremos una oportunidad a nuestro gran aliado FreeBSD.

La base del propio FreeBSD nos servirá para configurarlo como router. Las funciones de firewall, por supuesto dependerán de IPFW (el firewall integrado con FreeBSD).

El proxy (transparente y autenticado) será el maravilloso SQUID, que se apoyará en Samba para la autenticación y control de usuarios del dominio Active Directory de la compañía. Squid será también el responsable de filtrar o prohibir contenidos, realizar logs completos de la actividad de los usuarios y el control de ancho de banda y tráfico de las conexiones web.

Por último agregaremos un proxy SOCKS5 complementario usando un simple pero efectivo túnel SSH.

Esta configuración es robusta, muy fiable y está ampliamente probada por equipos IT de todo el mundo. En total podemos hacer una estimación de ahorro de varios miles de euros en software respecto de una alternativa basada en Microsoft Windows Server + Microsoft ISA Server, aparte de necesitar un hardware mucho más modesto.

En el próximo artículo definiremos la arquitectura y filosofía de la implementación, así como los primeros pasos (instalación de FreeBSD, paquetes, etc.).