Quality of Service en Ubuntu Server

Objetivos

El objetivo es controlar el tráfico mediante colas y prioridades en un servidor Ubuntu Server.
Habría que parchear el kernel y recompilarlo para que iptables soporte filtrado con l7. Y diréis……. ¿qué es filtrado con l7 ?
L7 es filtrado a nivel 7 (capa OSI = Aplicación), lo cual nos permitiría filtrar paquetes a alto nivel, en este caso a nivel de aplicación: tráfico P2P (Azureus, amule), etc…. cosa que no podríamos hacer con la versión estándar de iptables.
No es un requisito imprescindible para hacer un QoS pero sí recomendable. No es imprescindible porque sin L7 podemos filtrar el "resto" de tráfico a un nivel de protocolo más bajo: ssh, ftp, www, smtp, etc……

Con todo esta parrafada, quiero decir que si no quereis usar L7, podéis pasar directamente al punto de configuración.

Vamos a trabajar con las siguientes versiones:

  1. Ubuntu Server Intrepid (8.10, kernel 2.6.27-7-server)
  2. iproute: contiene las herramientas tc necesarias para el árbol de preferencias (qdisc, classes,….).
  3. iptables: versión 1.4.2
  4. Layer7: nos servirá para filtrar paquetes a nivel 7 (aplicación) como protocolos P2P.

Descarga de paquetes necesarios

Layer7

L7-filter kernel

wget http://downloads.sourceforge.net/l7-filter/netfilter-layer7-v2.20.tar.gz

L7-filter userpace

wget http://downloads.sourceforge.net/l7-filter/l7-filter-userspace-0.10.tar.gz

L7 descarga de definiciones de protocolos

wget http://downloads.sourceforge.net/l7-filter/l7-protocols-2008-12-18.tar.gz

Iptables

Descarga de Iptables (versión 1.4.2)

wget http://www.netfilter.org/projects/iptables/files/iptables-1.4.2.tar.bz2

Kernel 2.6.27.7

Descarga del kernel

sudo apt-get install linux-source

Parcheo y recompilación del kernel

Instalar l7-filter y los fuentes del kernel

tar -xvf /usr/src/linux-source-2.6.27.tar.bz2
ln -s /usr/src/linux-source-2.6.27 /usr/src/linux

tar -xvf netfilter-layer7-v2.20.tar.gz

Aplicar el parche a las fuentes del kernel

cd /usr/src/linux
patch -p1 < ../netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch

Aplicar el parche e instalar Iptables 1.4.2

tar -xvf iptables-1.4.2.tar.bz2
cd iptables-1.4.2
patch -p1 < ../netfilter-layer7-v2.20/iptables-1.4-for-kernel-2.6.20forward-layer7-2.20.patch
chmod +x extensions/.layer7-test
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux

Si no funcionara la compilación, copiar los ficheros libxt_layer7.c y libxt_layer7.man del directorio:

/usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/

en el directorio:

/usr/src/iptables-1.4.2/extensions

y volver a compilar.

Instalar las definiciones de protocolos

tar -xvf l7-protocols-2008-12-18.tar.gz
cd l7-protocols-2008-12-18.tar.gz
make install

Configuración, compilación e instalación del nuevo kernel

Dependencias

Para poder compilar el kernel necesitaremos tener los siguientes paquetes instalados:

apt-get install fakeroot kernel-package libncurses5-dev

Fichero .config

Para no partir de cero en la configuración del kernel, partimos del fichero .config original y lo copiamos al directorio /usr/src/linux.

cp /boot/config-2.6.27-7-server /usr/src/linux/.config

Habilitar opciones del kernel para netfilter-L7

A continuación accedemos a los menús de configuración del kernel:

cd /usr/src/linux
make menuconfig

Y debemos asegurarnos que están seleccionadas:
* Networking support
 * Networking options
  * Network packet filtering framework (Netfilter)
   * Core Netfilter Configuration
    * Connection tracking flow accounting   
    * Connection mark tracking support
    * <M> Layer 7 match support
    *  Layer7 debugging support

Referencias

http://www.leopoldomaestro.com/instalando-un-clasificador-de-paquetes-de-capa-7-en-linux/
http://l7-filter.sourceforge.net/HOWTO

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License