Table of Contents
|
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:
- Ubuntu Server Intrepid (8.10, kernel 2.6.27-7-server)
- iproute: contiene las herramientas tc necesarias para el árbol de preferencias (qdisc, classes,….).
- iptables: versión 1.4.2
- 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