lunes, julio 23, 2007

Generar tráfico para probar elementos de red (servidores, IDS, etc)

Cuando se quiere probar el rendimiento de un equipo de red, o bien de alguna aplicación, como puede ser un IDS, hay que generar tráfico que se parezca lo bastante al tráfico real. Por defecto, la mayoría de las utilidades de captura de tráfico, utilizan el formato de la libpcap. Para ello, se puede usar la suite tcpreplay. Este conjunto de programas permite manejar ficheros en formato pcap, y posteriormente mandarlos de nuevo al dispositivo que queramos probar.

Un ejemplo de uso puede verse en How to test an IPS de Renau Bidou (Radware).

Aparte, necesitamos tráfico con el que probar los programas que nos interesan. Como en mi caso, lo que quiero es probar la carga de Snort, nada mejor que las capture de flag de la Defcon publicada por Shmoo. Eso sí, ese es tráfico con gran cantidad de exploits y demás fauna ;)

También puede ser interesante generar tormentas de tráfico para ver el funcionamiento de los equipos. Puede merecer la pena recurrir a ciertos programas como stream.c que nos permitirá crear un flujo de conexiones TCP, inundando la tarjeta para comprobar si somos capaces de recibir los paquetes (aunque de poca utilidad a la hora de probar un IDS, puesto que no tiene ninguna carga capaz de analizar).

Technorati Tags:

domingo, julio 22, 2007

Captura de tráfico a alta velocidad

Hace poco nos hemos encontrado con un problema.¿Cómo conseguir que un sistema Linux sea capaz de capturar tráfico a velocidad de Gigabyte, perdiendo el mínimo de tramas posibles?.

Con la arquitectura clásica de drivers se tienen dos problemas cuando se captura tráfico a alta velocidad:

  • Gran cantidad de interrupciones producidas por la cantidad de paquetes que está recibiendo en la tarjeta de red.
  • Copia de paquetes dentro de las colas del núcleo, y entre el núcleo y los programas de usuario.

Buscando información en Internet, lo primero que llama la atención es la existencia de NAPI. Este API lo que busca es mitigar las tormentas de interrupciones de recepción que se producen cuando se está capturando tráfico a gran velocidad. Hay drivers en el kernel de Linux que en vez de levantar una interrupción por cada paquete recibido, lo hace cuando se han recibido N paquetes.

Por otra parte, la copia de paquetes entre modo usuario y modo núcleo es otro de los problemas que nos encontramos. La mayoría de las aplicaciones de captura de paquetes usa la librería libpcap para capturar las tramas. La versión modificada por Phil Wood del NOC de Los Alamos National Laboratory, intenta implementar este concepto: Se exportan los buffets a través de mmap, evitando la copia entre el núcleo y el usuario. Para ello aprovecha la posibilidad que tiene Linux para utilizar (CONFIG_PACKET_MMAP).

Buscando más información sonbre este tipo de captura, merece la pena leer Improved passive packet capture: Beyond device polling de Luca Deri. El artículo compara de serie Linux y FreeBSD. Linux, de serie, sale bastante mal parado frente a FreeBSD - que implementa la mitigación de interrupciones -.

Luca Deri lo que propone es, no usar ni siquiera la posibilidad de PACKET_MMAP del kernel, sino directamente, usar los propios buffet del kernel que utiliza el dispositivo de red para almacenar los paquetes que recibe a través de DMA la tarjeta. Dichos buffet se implementan en un buffet circular, sobreescribiéndolo conforme se van capturando los paquetes.

Technorati Tags: ,

jueves, julio 12, 2007

Google para Països Catalanes

(vía El Semanal Digital). Esto es el tipo de noticias que demuestra que hay mucha gente que no entiende, que Internet, es para comunicarse: no dejen de pasar por www.google.ppcc.cat, y que cada cual saque sus conclusiones. Si hay algo interesante de Internet, es que se diluyen las fronteras, y si hay algo que siempre me ha llamado la atención de todos los nacionalismos españoles, es que al final, todos se resumen en el Santiago y cierra España de la dictadura franquista. Lo que no se dan cuenta estos nacionalismos periféricos, es que son exactamente iguales que Franco y su autarquía.

Es curioso como las lenguas como el catalán, vasco o gallego - ya saldrán más -, en vez de utilizarse para comunicarse, se acaban usando para establecer fronteras entre unos y otros. ¿Para cuando una Internet particular para cada nacionalismo?. No se crean, no tardarán mucho.

A todo esto, ¿que opinará Google de esta historia?. A fin de cuentas, están usando su imagen de marca.

Google PPC

Publicación de servicios usando multicast DNS en Linux: Avahi

Cuando se trabaja en entornos de direcciones dinámicas IP (DHCP), o en pequeñas redes donde no existe un servidor que asigne las mismas, es un poco complicado:
  • Asignar direcciones IP al sistema. Para el usuario lo ideal, sería llegar, enchufar el cable de red o activar su tarjeta WIFI, se asigna la dirección IP, la dirección del router por defecto, los DNS, etc
  • Sea fácil descubrir aquellos servicios que están corriendo en la red local a la cual el usuario se ha conectado
. Tanto Apple como Microsoft empezaron a implementar un protocolo que permitía la configuración de direcciones en ausencia de un servidor de DHCP en la red. Este protocolo asigna las mismas en el rango 169.254.0.0/16. Esto quedó al final definido en la RFC 3927. Sin embargo, el paso era ir más allá, de tal manera que fuera posible descubrir servicios.

Por ejemplo, durante mucho tiempo, Microsoft permitía ver que servicios de ficheros e impresoras tenía disponible un equipo que estuviese corriendo Windows. Sin embargo, estaba ligado al protocolo SMB y era propietario. Apple sin embargo, decidió apostar por Multicast DNS y DNS Service Discovery. De esta manera, con programas como Bonjour browser (MacOS X) el usuario puede ver que servicios está corriendo una máquina determinada en la red local a la cual está conectada, como puede verse en la siguiente captura:

Bonjour Browser

A la hora de usar este tipo de servicios en un entorno Linux se puede recurrir a Avahi, una implementación libre de los protocolos (aunque el mDNSResponder de Apple está también está disponible con licencia libre). La idea de uso de este tipo de sistemas, al menos donde estoy trabajando ahora, es poder publicar servicios como el ssh en máquinas que usan DHCP para asignar direcciones, y que nada me garantiza que vayan a tener la misma dirección al día siguiente.

En Debian es bastante sencillo de instalar: es el paquete avahi-deamon. Una vez instalado a través de apt-get, tenemos que configurar el fichero /etc/avahi/avahi-daemon.conf, donde se introduce el nombre que se le desea dar a la máquina y al dominio que pertenece, que debe ser local. El resolver de multicast DNS de avahi sólo resolverá nombres que pertenezcan a dicho dominio:

...
[server]
host-name=baldurgate
domain-name=local
...
Por otra parte, hay que ver qué servicios se tienen que publicar. En el caso de la instalación de Debian, estos ficheros de servicios están localizados en /etc/avahi/services/, son ficheros XML que indican la zona de DNS donde se instalan, el nombre del servicio y el puerto que utilizan. Por ejemplo, para el caso de ssh sería:
<service-group>

  <name replace-wildcards="yes">Remote Terminal on %h</name>

  <service>
    <type>_ssh._tcp</type>
    <port>22</port>
  </service>

</service-group>

Actualización

Existe otra ventaja de usar este tipo de servicios. Si el resolver del sistema lo permite, se puede uno conectar por el nombre que hemos asignado al usar Avahi, Así por ejemplo, si tenemos un server que publica su nombre como baldurgate.local, podremos conectarnos a él haciendo un simple ssh baldurgate.local.

El mecanismo de multicast DNS se encargará de resolver el nombre :)

Technorati Tags: , ,

miércoles, julio 11, 2007

Linux 2.6.22

(vía Barrapunto). Acaba de salir la nueva versión del kernel de Linux. En esta versión 2.6.22 tenemos varias novedades:
  • Cambio del sistema de reserva y gestión de memoria del núcleo. Hasta ahora, Linux usaba un sistema derivado del usado en Solaris, SLAB allocator que hizo su presentación en sociedad en la versión 5.4. Ha sido substituido por el SLUB Allocator. El funcionamiento del gestor original (SLAB), era bastante bueno, pero el código es complicado de seguir, y hay gente que le encontró algunas pegas tal como se comenta en el artículo.
  • Nueva pila de protocolos WIFI: Una implementación de la capa MAC en software, WEP, WPA, soporte para puentes, hostapd, QoS ... Entre otras ventajas, podremos olvidarnos de las diferentes chapuzas que hay que realizar para que funcione el WPA (wpa-supplicant), etc. Lo malo, es que actualmente no todos los drivers de las tarjetas la soportan.
  • Nueva pila de protocolos Firewire
  • Nuevo sistema de notificación de eventos. Puede verse bastante referencias en el artículo de Kernelnewbies.org que describe esta versión. En general, se trata de dotar al kernel con un API que las aplicaciones puedan usar para esperar diferentes eventos por parte del kernel (recuerda un poco a WaitForMultipleObjects de Win32.
  • Soporte para la arquitectura Blackfin, procesadores digitales de señal. El que desee desarrollar sobre dicha arquitectura puede encontrar más información aquí).
  • Soporte para nuevos dispositivos hardware
  • Se sigue con la implementación del The Completely Fair Scheduler.

Technorati Tags:

lunes, julio 09, 2007

Windows XP y WPA2

Cuando se protege una red wifi para uso personal, lo mejor es usar WPA, a ser posible la versión 2, que se corresponde con el estándar 802.11i. Normalmente, en Windows es habitual que los fabricantes del hardware, instalen, aparte de los drivers de la tarjeta, una serie de programas que permiten la gestión de las redes wireless (seleccionar la red a la cual conectarse, gestión de las claves, perfiles, etc).

Sin embargo, por simplicidad, muchas veces prefieres usar las propias herramientas de Windows para conectarse. Windows XP, con el SP2, soporta varios métodos para poder securizar las redes wifi, pero no soporta WPA2. Para ello hay que bajarse un parche, descrito en el artículo KB 893357 de la base de información de Microsoft. Una vez instalado el mismo, puede usarse WPA2 sin ningún problema.

Technorati Tags:

jueves, julio 05, 2007

MacOS X, ficheros de swap y fragmentación

MacOS X es un sistema que necesita bastante memoria para funcionar. El límite mínimo es de 512 MB, pero es aconsejable tener por lo menos 1 Gb de RAM. Normalmente, cuando MacOS X necesita usar swap, crea un fichero en el directorio /private/var/vm. Este fichero lo usa el daemon dynamic_page.

MacOS X empieza creando un fichero de 64 MB (swapfile0). Conforme va incrementándose las necesidades de memoria virtual, se van creando más ficheros para cubrir la demanda, y el tamaño se va incrementando (128MB,256 MB,...), aunque por lo que he leído, nunca llega hasta dos veces la memoria física que tiene la máquina.

Cuando se crean dichos ficheros de swap, y existe poco espacio libre en el disco duro, o está muy fragmentado es cuando empiezan los problemas. El rendimiento va bajando poco a poco, y esto, al menos en mi iBook, es debido a la fragmentación de disco, a que son discos lentos (4200RPM), y al tener que ir buscando las páginas de memoria necesaria. De hecho, si se reinicia el ordenador, empieza a ir otra vez rápido.

Por lo tanto, aparte de meter más RAM, es conveniente tener un buen espacio de disco no fragmentado para la creación de los ficheros de swap.

Technorati Tags:

martes, julio 03, 2007

¿Puede un protocolo ser GPL y afectar al programa que lo implementa?

Es conocido que el Protocolo que usa MySQL es propietario, y está cubierto por la GPL (?). Según al entrada del wiki a la que se hace referencia, consideran el protocolo como parte de un programa con dicha licencia, y por tanto, teóricamente, si implementa el protocolo, automáticamente la licencia que debería usar debería ser compatible con la GPL.

Sin embargo, desde mi punto de vista esto plantea varios problemas:

  • Si se acepta que la licencia de un determinado programa, se extiende a los protocolos y clientes que se conectan, cualquiera que se conecte a cualquier tipo de servidor se ve limitado en su licencia. Si por casualidad, la gente de MySQL AB intentara hacer valer esta cláusula, automáticamente, Microsoft haría valer sus derechos sobre el protocolo CIFS y tendríamos el fin de Samba. Se le daría un arma muy fuerte para todos aquellos que defienden formatos cerrados.
  • Llevando la razón anterior, no podría conectarse con un servicio de red GPL, cualquier software cuya licencia no fuera compatible con dicha licencia.

Desde mi punto de vista un protocolo nunca puede verse protegido por una licencia de este tipo. O es un secreto comercial, y por tanto, por cuestiones de interoperatibilidad está sujeto a la posibilidad de ingeniería inversa, o bien está patentado, y por tanto, estarían usando el sistema que tanto se critica desde el soft libre de las patentes.

Technorati Tags: