Gulp y los mecanismos de rendimiento en herramientas de captura de red .pcap.

Hace algún tiempo, en twitter, escribí sobre los mecanismos que algunas herramientas como Bro IDS, Suricata IDS/IPS, netsniff-ng, Snort, Vortex IDS, etc, implementan para evitar pérdida de paquetes y aumentar el rendimiento, muy importante en redes de más de 1Gbit y mucho tráfico. En este artículo pongo en orden estos tips sobre rendimiento y avanzaremos un poco más.

En esta ocasión, además, instalaremos y podremos en prueba la herramienta Gulp para mejorar el rendimiento de tcpdump, tshark,  etc.
Al lío……

Breve descripción de los mecanismos de rendimiento en los capturadores de paquetes.

No pretende ser muy exhaustivo este artículo, simplemente un guía. Además me centraré en las herramientas y no en el sistema opetrativo que también puede ser optimizado.

Hay muchas formas de mejorar el rendimiento de captura en IDS como Snort, por ejemplo y estre otros métodos, la escritura correcta y optimizada de reglas o el uso de barnyard2 y el formato unified2. También podemos usar archivos de filtros BPF para segmentar el tráfico o establecer que paquetes queremos que Snort procese.

icosnort1.png

No podemos olvidar el uso de PF_RING o el uso de DAQ (Data Acquisition Library) que permite el acceso de Snort a la interface de red sin utilizar libpcap.

Pruebas de rendimiento con IDS Snort, DAQ y PF_RING: «Inline Snort multiprocessing with PF_RING»

Otro documento sobre mejoramiento de rendimiento en redes 1/10 Gbit. usando PF_RING / DAQ y Snort.

Otra forma que es común a cualquier sniffer, IDS/IPS y, en definitiva, cualquier herramienta de captura de paquetes, es el uso de adaptadores de red tipo Napatech. Este tipo de adaptadores son capaces de proporcionar cero pérdida de paquetes y optimizar mucho el rendimiento de los capturadores.

Respecto a Suricata IDS/IPS decir que es multithreaded, es decir, puede procesar los paquetes en uno o más threads o hilos de ejecución para de esta manera usar y aprovechar los núcleos de los procesadores y usa CUDA para la mejora del rendimiento además de cpu_affinity y modo ejecución «autopf«. Con autopf todos paquetes procedentes de un flujo se asignan a un mismo flujo detección y thread de salida dando como resultado una mejora sustancial del rendimiento.

¿ Y qué es CUDA ?. Aquí teneis una muy buena explicación.

Para configurar Suricata en el modo de ejecución CUDA (drivers CUDA) añadiremos al ./configure las opciones relativas a CUDA quedando por ejemplo:

/configure –enable-debug –enable-cuda –with-cuda-includes=/usr/local/cuda/include/ –with-cuda-libraries=/usr/local/cuda/lib64/ –enable-nfqueue –prefix=/opt/suricata/ –enable-unittests

Chequeamos el uso correcto de Suricata con esta opción: sudo /opt/suricata/bin/suricata -uUCuda

Para la instalación de Suricata con CUDA y PF_RING en Ubuntu Server 12.04 teneis aquí una guía.

¿ Que productos de NVIDIA implementan CUDA ?: http://www.nvidia.es/object/cuda_gpus_es.html

Algo más arriba he hablado sobre cpu_affinity que es una opción para la signación de uno o más procesadores del host donde se encuentr el sensor Suricata a los distintos hilos de ejecución. Esta opción se configura el el archivo suricata.yaml.

Sobre Bro 2.0 IDS decir que, al ser single-threaded, sus mecanísmos de rendimiento se basan en Bro-Cluster y el balanceo de carga, así como PF_RING.

Vortex IDS también tiene un buen rendimiento y hace uso de multithreading con xpipes. Sobre Vortex IDS teníes aquí en el blog un artículo.

Arquitectura Vortex IDS

Wireshark soporta también el adaptador red Napatech, que hemos visto antes, (40 GbE, 10 GbE y GbE 1) junto a su API.  http://www.napatech.com/features/software_support/api_interfaces.html

¿ Y como funciona el adaptador de red Napatech con Wireshark ?. Aquí teneís una guia que aunque dqata de 2009 es muy ilustrativa.

Sobre mejorar en rendimiento en captura con Wireshark, teneis aquí una guía.

Otros sniffers o capturadores de red tienen sus propios mecanismos de rendimiento de forma nativa. Tal es el caso de netsniff-ng. En este caso, no se hace uso de las librerías libpcap. aún así sí soporta filtros BPF y .pcap.

Gulp. Una herramienta para mejorar el rendimiento y evitar pérdida de paquetes.

Brévemente. Gulp es una herramienta que mejora el rendimiento de la captura de paquetes tanto leyendo desde una interface de red, como .pcap. Pero su uso más interesante es mediante pipes o tuberías con sniffer del tipo tcpdump. Es capaz de usar uno o varios procesadores y núcleos.

Instalación.

mkdir gulp
cd gulp
wget http://corey.elsewhere.org/gulp/gulp.tgz
tar -xvzf gulp.tgz

compilamos:

sudo cc -g -O gulp.c -o gulp -lpthread -lpcap

Ejecución básica.

~/gulp$ sudo ./gulp -i eth1 > cap.pcap
^C
4498 packets captured
4499 packets received by filter
0 packets dropped by kernel
ring buffer use: 0.1% of 100 MB

A prueba.

Vamos a poner a prueba Gulp de forma muy básica. ejecutamos tcpdump y gulp para obtener resultado relativo a pérdida de paquetes o drops:

~/gulp$ ./gulp -ieth1 -s0 > captura2.pcap
^C
980911 packets captured
980911 packets received by filter
0 packets dropped by kernel

~/gulp$ tcpdump -ieth1 -qtn -s0 -w captura1.pcap
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
^C977075 packets captured
977817 packets received by filter
742 packets dropped by kernel

No tiene porque ser siempre 0 pero en este caso sí.

Otro ejemplos los teneis aquí:  http://corey.elsewhere.org/gulp/

.

La foto del rack cortesía de @fpalenzuela. -> http://franciscopl.wordpress.com/

==================

Hasta aquí por hoy. Hasta la próxima.

Esta entrada fue publicada en Herramientas, Seguridad y redes y etiquetada . Guarda el enlace permanente.

5 respuestas a Gulp y los mecanismos de rendimiento en herramientas de captura de red .pcap.

  1. franciscopl dijo:

    Excelente como siempre, muchas gracias….

  2. Trojan dijo:

    Trabajo en servicios informáticos Barcelona y el tipo de información que publicas es muy interesante, sigue con la calidad de información que brindas

  3. pepe dijo:

    Ante todo agradecerte tu esfuerzo, impresionante. Una dudilla, yo uso tshark para capturar el tráfico de unas 30 máquinas, recomiendas seguir con tshark o mejor gulp, lo comento por la posible pérdida de paquetes.
    Muchas gracias y un saludo.

    • Alfon dijo:

      Gracias Pepe por tus comentarios. Yo lo usaría más que nada con tcpdump. Con tshark también puedes, depende también del nivel de tráfico. Pior rendimiento y casi nula pérdida puedes usar tambiçen netsniff-ng.
      Saludos,

  4. pepe dijo:

    Muchas gracias por la respuesta Alfon. Estoy usando netsniff-ng gracias a tu recomendación.
    Un saludo

Replica a pepe Cancelar la respuesta