Durante hoy y mañana está teniendo lugar el
Golab 2018 en Florencia, la conferencia más importante de desarrollo en Golang de Italia donde se están impartiendo una gran variedad de conferencias relacionadas con el desarrollo software, patrones, arquitecturas y
workshops. Además, participan más de 450
developers de distintos países.
ElevenPaths también está presente, nos han aprobado un
paper y nuestro compañero Jorge Lorenzo del equipo de CTO impartirá hoy la conferencia “Building a packet-based high-performance proxy for a telco”. Durante esta ponencia, contará cómo en ElevenPaths hemos sido capaces de
crear con nuestra “propia tecnología” un Safe Proxy que puede desplegarse en el core de la red de un operador telco, y es capaz de proteger el tráfico web de sus clientes (malware, control parental, privacidad y bloqueo de publicidad).
El
paper describe la ventaja de usar un
approach basado en Deep Packet Inspection versus un
proxy tradicional orientado a conexiones, y la facilidad de construir un sistema de estas características utilizando las capacidades nativas que ofrece el kernel de Linux, así como la productividad y eficiencia que ofrece el lenguaje de programación Go.
El SafeProxy permite aplicar una configuración personalizada para cada usuario de la red del operador, en la que podrá activar/desactivar las siguientes funcionalidades:
- Protección web (antiMalware y antiPhishing)
- Control parental
- Anti-Tracking
- Ad-blocking
Por ejemplo, podríamos activar la protección web y el control parental a los usuarios infantiles para evitar que accedan a contenidos inadecuados o peligrosos.
¿Cómo funciona?
Nuestro SafeProxy analiza el tráfico de los siguientes protocolos: HTTP, HTTPS, DNS y QUIC, soportando IPV4 e IPV6 en la capa de red. El SafeProxy obtiene el dominio al que se conecta el usuario y lo clasifica en una de las categorías anteriores (Protección Web, Control Parental, Anti-Tracking y Ad-Blocking), y en función de lo que tenga configurado el usuario en su perfil bloqueará o no el tráfico.
El dominio se consigue inspeccionando la capa de aplicación de los paquetes que depende del protocolo (e.g. en HTTP se obtiene de la cabecera Host pero en HTTPS se obtiene del SNI en la negociación SSL).
El SafeProxy implementa un DPI sobre las capacidades que proporciona el netfilter del kernel de Linux. En concreto, utilizamos el protocolo nfqueue para encolar aquellos paquetes TCP/IP que puedan ser de interés para extraer el dominio del tráfico del usuario, delegando la decisión de bloquear o cursar el paquete al SafeProxy (ejecutado en el espacio de usuario del sistema operativo). Esta solución simplifica la implementación, proporciona un alto rendimiento y resiliencia (e.g. si se cae el SafeProxy no se perdería ningún paquete porque nfqueue cursaría el tráfico si SafeProxy no lo resuelve en un tiempo determinado).
Proxy Orientado a Paquetes vs Proxy Orientado a Conexiones
La siguiente tabla muestra una comparación de nuestro SafeProxy orientado a paquetes frente a una solución orientada a conexiones también desarrollada en ElevenPaths en el lenguaje C++.
Conclusiones
Esta experiencia nos ha demostrado que el uso de la tecnología Go para la creación de un sistema de alto rendimiento para el procesamiento de tráfico masivo en tiempo real ha sido altamente satisfactoria:
La sencillez del lenguaje, su inmensa librería nativa incorporada en el runtime así como el modelo de concurrencia nativo que incorpora el lenguaje hace que este sea altamente productivo, poco propenso a errores y tenga un rendimiento muy alto, cercano a lenguajes como el C ó C++.
Si bien hemos de reconocer que Go no ofrece un performance al mismo nivel de C ó de C++, el cambio de paradigma hecho en el SafeProxy ha dado unos resultados espectaculares en nuestro benchmark como se puede ver en la tabla anterior dónde se ha reducido el consumo de CPU en más de un 75 % al mismo tiempo que el número de transacciones por segundo (TPS) crece un orden de magnitud con tiempos de respuesta que se reducen en más de un 90 %.
Gonzalo Fernández Rodriguez
CTO- ElevenPaths Cybersecurity Manager