Debian + kernel 2.6.30.1 + l7-filter + ipp2p

Imagen de RazaMetaL

Tema: 

El siguiente manual describe como parchar y habilitar en Debian Lenny:

- Kernel 2.6.30.1
- l7-filter
- iptables 1.4.4
- xtables-addons
- xtables ipp2p

Instalamos dependencias:

aptitude install module-assistant


m-a prepare


aptitude install kernel-package quilt autoconf automake libtool libncurses5-dev pkg-config checkinstall build-essential zlib1g-dev iptables-dev

Removemos los fuentes del kernel que vienen en lenny:

aptitude purge linux-headers-2.6.26-1-686 linux-headers-2.6.26-1-common iptables-dev

Descargamos xtables, l7-filter, nuevo kernel e iptables:

cd /usr/src
wget http://ufpr.dl.sourceforge.net/sourceforge/xtables-addons/xtables-addons-1.17.tar.bz2
wget http://ufpr.dl.sourceforge.net/sourceforge/l7-filter/netfilter-layer7-v2.21.tar.gz
wget http://ufpr.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-2009-05-28.tar.gz
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.30.1.tar.bz2
wget http://iptables.org/projects/iptables/files/iptables-1.4.4.tar.bz2

Descomprimimos los paquetes:

tar -jvxf xtables-addons-1.17.tar.bz2
tar -zvxf netfilter-layer7-v2.21.tar.gz
tar -zvxf l7-protocols-2009-05-28.tar.gz
tar -jvxf linux-2.6.30.1.tar.bz2
tar -jvxf iptables-1.4.4.tar.bz2

Creamos links simbólicos:

ln -s xtables-addons-1.17 xtables-addons
ln -s linux-2.6.30.1 linux
ln -s iptables-1.4.4 iptables

Parchamos el kernel:

cd /usr/src/linux
patch -p1 < ../netfilter-layer7-v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch

Seleccionamos las opciones para habilitar l7 y grabamos la nueva configuración para luego compilar el kernel:

make menuconfig
-*- Networking support --->
Networking options --->
[*] Network packet filtering framework (Netfilter) --->
Core Netfilter Configuration --->
Netfilter connection tracking support
"layer7" match support
< exit >
< exit >
< exit >
< exit >
< exit >
< Yes >

Compilamos nuestro nuevo kernel:

make-kpkg --append-to-version=-l7 --initrd kernel-image

Si necesitan los paquetes linux-headers y linux-source para esta nueva versión de kernel y si quieren compilar algún nuevo driver la línea quedaría de esta manera:

make-kpkg --append-to-version=-l7 --initrd kernel-image kernel-headers kernel-source

Reiniciamos con el nuevo kernel.

init 6

Parchamos iptables:

cd /usr/src/iptables/extensions
cp ../../netfilter-layer7-v2.21/iptables-1.4.1.1-for-kernel-2.6.20forward/libxt_layer7.* .
sed -i 's/exit_error(/xtables_error(/' libxt_layer7.c

Compilamos iptables:

cd /usr/src/iptables
./configure --with-ksource=/usr/src/linux --prefix=/usr --with-xtlibdir=/lib/xtables --libdir=/lib --enable-libipq --enable-devel
make
checkinstall

Instalamos los regex de protocolos soportados por l7-filter:

cd /usr/src/l7-protocols-2009-05-28
make install

Compilamos xtables-addons:

cd /usr/src/xtables-addons
./configure --with-xtables=/lib --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --libexecdir=/lib --with-ksource=/usr/src/linux --includedir=/usr/include/
make
checkinstall

Podemos probar la instalación ejecutando:

iptables -m ipp2p --help
iptables -m layer7 --help

Para bloquear con ipp2p podemos agregar estas líneas a nuestro firewall:

iptables -A FORWARD -p tcp -m ipp2p --edk -j DROP
iptables -A FORWARD -p udp -m ipp2p --edk -j DROP
iptables -A FORWARD -p tcp -m ipp2p --dc -j DROP
iptables -A FORWARD -p tcp -m ipp2p --kazaa -j DROP
iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP
iptables -A FORWARD -p tcp -m ipp2p --gnu -j DROP
iptables -A FORWARD -p udp -m ipp2p --gnu -j DROP
iptables -A FORWARD -p tcp -m ipp2p --bit -j DROP
iptables -A FORWARD -p udp -m ipp2p --bit -j DROP
iptables -A FORWARD -p tcp -m ipp2p --apple -j DROP
iptables -A FORWARD -p tcp -m ipp2p --winmx -j DROP
iptables -A FORWARD -p tcp -m ipp2p --soul -j DROP
iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP

Si queremos bloquear ares con l7-filter agregamos:

iptables -A FORWARD -p tcp -m layer7 --l7proto ares -j DROP

Estos nuevos módulos nos pueden servir además para marcar los paquetes de determinado protocolo y luego manejar el ancho de banda o prioridades con htb.init.

Podemos obtener una completa lista de protocolos que l7-filter soporte en:
[url]http://l7-filter.sourceforge.net/protocols[/url]

Estas son las líneas que tengo aplicadas para que l7-filter bloquée el trafico p2p:

iptables -A INPUT -m layer7 --l7proto edonkey -j ACCEPT
iptables -A OUTPUT -m layer7 --l7proto edonkey -j ACCEPT
iptables -A FORWARD -m layer7 --l7proto edonkey -j DROP

iptables -A INPUT -m layer7 --l7proto ares -j ACCEPT
iptables -A OUTPUT -m layer7 --l7proto ares -j ACCEPT
iptables -A FORWARD -m layer7 --l7proto ares -j DROP

iptables -A INPUT -m layer7 --l7proto bittorrent -j ACCEPT
iptables -A OUTPUT -m layer7 --l7proto bittorrent -j ACCEPT
iptables -A FORWARD -m layer7 --l7proto bittorrent -j DROP

iptables -A INPUT -m layer7 --l7proto gnutella -j ACCEPT
iptables -A OUTPUT -m layer7 --l7proto gnutella -j ACCEPT
iptables -A FORWARD -m layer7 --l7proto gnutella -j DROP

iptables -A INPUT -m layer7 --l7proto applejuice -j ACCEPT
iptables -A OUTPUT -m layer7 --l7proto applejuice -j ACCEPT
iptables -A FORWARD -m layer7 --l7proto applejuice -j DROP

iptables -A INPUT -m layer7 --l7proto directconnect -j ACCEPT
iptables -A OUTPUT -m layer7 --l7proto directconnect -j ACCEPT
iptables -A FORWARD -m layer7 --l7proto directconnect -j DROP

iptables -A INPUT -m layer7 --l7proto imesh -j ACCEPT
iptables -A OUTPUT -m layer7 --l7proto imesh -j ACCEPT
iptables -A FORWARD -m layer7 --l7proto imesh -j DROP

iptables -A INPUT -m layer7 --l7proto soulseek -j ACCEPT
iptables -A OUTPUT -m layer7 --l7proto soulseek -j ACCEPT
iptables -A FORWARD -m layer7 --l7proto soulseek -j DROP

Noten que en el INPUT y OUTPUT estan en ACCEPT, deben hacerlo así para que l7filter pueda bloquear :evil:

También se puede limitar el ancho de banda para cada protocolo, se debe marcar cada paquete y luego con tc se limita el ancho de banda:

iptables -t mangle -A FORWARD -m layer7 --l7proto edonkey -j MARK --set-mark 123

Comentarios

XTABLES NO COMPILA SOLUCIONADO

Me corrijo solo ese error, aunque habia hecho la compilacion del kernel con la linea de linix headers y source no me instalo, entonces instale linux-headers-$(uname -r), volvi a parchar y compilar el iptables y todo salio bien, chau p2p, muy bueno el tutorial, me ayudo mucho y aprendi basatnte.

layer 7

Por favor ayuda

A mi me aparece el siguiente cuando ejecuto /usr/src/linux# patch -p1 < ../netfilter-layer7-v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch

que ubico en.... File to patch:

server:/usr/src/linux# patch -p1 < ../netfilter-layer7-v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch
patching file net/netfilter/Kconfig
Hunk #1 succeeded at 749 with fuzz 1 (offset -46 lines).
patching file net/netfilter/Makefile
Hunk #1 succeeded at 78 with fuzz 2 (offset -6 lines).
patching file net/netfilter/xt_layer7.c
patching file net/netfilter/regexp/regexp.c
patching file net/netfilter/regexp/regexp.h
patching file net/netfilter/regexp/regmagic.h
patching file net/netfilter/regexp/regsub.c
can't find file to patch at input line 2062
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|--- linux-2.6.28-stock/net/netfilter/nf_conntrack_core.c 2009-01-07 16:05:35.000000000 -0600
|+++ linux-2.6.28/net/netfilter/nf_conntrack_core.c 2009-01-07 16:07:31.000000000 -0600
--------------------------
File to patch:

Problema con xtables y debian 6

Desde hace tiempo hice varias compilaciones exitosas en versiones anteriores, pero con la ultima version de Debian al querer formar el paquete de xtables me da el sgte error que copie abajo, ademas note que cambia las versiones del linux headers a linux-headers-2.6.32-5 creo que por ahi anda el problema pero necesito una mano

root@BridgeHYH:/usr/src/xtables-addons# make
make all-recursive
make[1]: se ingresa al directorio `/usr/src/xtables-addons-1.17'
Making all in extensions
make[2]: se ingresa al directorio `/usr/src/xtables-addons-1.17/extensions'
GEN modules
make[3]: se ingresa al directorio `/usr/src/linux-headers-2.6.32-5-686'
CC [M] /usr/src/xtables-addons-1.17/extensions/xt_DELUDE.o
/usr/src/xtables-addons-1.17/extensions/xt_DELUDE.c: In function ‘delude_send_reset’:
/usr/src/xtables-addons-1.17/extensions/xt_DELUDE.c:122: error: ‘struct sk_buff’ has no member named ‘dst’
/usr/src/xtables-addons-1.17/extensions/xt_DELUDE.c:123: error: ‘struct sk_buff’ has no member named ‘dst’
/usr/src/xtables-addons-1.17/extensions/xt_DELUDE.c:123: error: ‘struct sk_buff’ has no member named ‘dst’
/usr/src/xtables-addons-1.17/extensions/xt_DELUDE.c:130: error: ‘struct sk_buff’ has no member named ‘dst’
/usr/src/xtables-addons-1.17/extensions/xt_DELUDE.c:134: error: ‘struct sk_buff’ has no member named ‘dst’
make[6]: *** [/usr/src/xtables-addons-1.17/extensions/xt_DELUDE.o] Error 1
make[5]: *** [_module_/usr/src/xtables-addons-1.17/extensions] Error 2
make[4]: *** [sub-make] Error 2
make[3]: *** [all] Error 2
make[3]: se sale del directorio `/usr/src/linux-headers-2.6.32-5-686'
make[2]: *** [modules] Error 2
make[2]: se sale del directorio `/usr/src/xtables-addons-1.17/extensions'
make[1]: *** [all-recursive] Error 1
make[1]: se sale del directorio `/usr/src/xtables-addons-1.17'
make: *** [all] Error 2

Problema de instalación de xtables-addons

Al llegar al proceso de instalación de xtables-addons me manda el siguiente error:


Seleccionando el paquete xtables previamente no seleccionado.
(Leyendo la base de datos ... 125144 ficheros o directorios instalados actualmente.)
Desempaquetando xtables (de .../xtables_addons-1_i386.deb) ...
dpkg: error al procesar /usr/src/xtables-addons/xtables_addons-1_i386.deb (--install):
intentando sobreescribir `/lib/xtables/libxt_TEE.so', que está también en el paquete iptables 1.4.13-1
Procesando disparadores para man-db ...
Se encontraron errores al procesar:
/usr/src/xtables-addons/xtables_addons-1_i386.deb

Alguna sugerencia???
Gracias.

no pudimos instalarlo

Hola! Vemos que este tema salió hace ya varios años, pero me atrevo de dejar este mensaje a ver si alguien que siga usando esto me responde. Ayer intentamos hacerlo con un debian 6.0.7 que es la ultima versión estable al día de hoy, esto es: una version 2.26.32 de kernel; y anoche me encontré ya al finalizar el tutorial con el mismo error que "paloke" en su ultimo comentario (el mismo, textual) y por lo visto para esa version de kernel no hay posibilidad de instalar los filtros l7 estos porque ya hemos intentado con otros tutoriales sin resultados satisfactorios.

Entonces decidí hacerlo de nuevo con la versión que trabajan ustedes, pero me quedan dudas si es de verdad esa: estoy usando un debian "Lenny" 5.0.3-686 de 32 bits; sin embargo, cuando llego a la parte de "compilar iptables", al ejecutar make, larga el siguiente error:

make all-recursive
make[1]: se ingresa al directorio `/usr/src/iptables-1.4.4'
Making all in extensions
make[2]: se ingresa al directorio `/usr/src/iptables-1.4.4/extensions'
CC libxt_layer7.oo
libxt_layer7.c:25:39: warning: linux/netfilter/xt_layer7.h: No existe el fichero o el directorio
libxt_layer7.c:48: warning: ‘struct xt_layer7_info’ declared inside parameter list
libxt_layer7.c:48: warning: its scope is only this definition or declaration, which is probably not what you want
libxt_layer7.c: In function ‘parse_protocol_file’:
libxt_layer7.c:92: error: ‘MAX_PROTOCOL_LEN’ undeclared (first use in this function)
libxt_layer7.c:92: error: (Each undeclared identifier is reported only once
libxt_layer7.c:92: error: for each function it appears in.)
libxt_layer7.c:95: error: dereferencing pointer to incomplete type
libxt_layer7.c:101: error: ‘MAX_PATTERN_LEN’ undeclared (first use in this function)
libxt_layer7.c:103: error: dereferencing pointer to incomplete type
libxt_layer7.c: At top level:
libxt_layer7.c:249: warning: ‘struct xt_layer7_info’ declared inside parameter list
libxt_layer7.c: In function ‘parse_layer7_protocol’:
libxt_layer7.c:270: warning: passing argument 3 of ‘parse_protocol_file’ from incompatible pointer type
libxt_layer7.c:48: note: expected ‘struct xt_layer7_info *’ but argument is of type ‘struct xt_layer7_info *’
libxt_layer7.c:284: error: dereferencing pointer to incomplete type
libxt_layer7.c:284: error: dereferencing pointer to incomplete type
libxt_layer7.c:284: error: ‘MAX_PATTERN_LEN’ undeclared (first use in this function)
libxt_layer7.c: In function ‘parse’:
libxt_layer7.c:296: warning: passing argument 2 of ‘parse_layer7_protocol’ from incompatible pointer type
libxt_layer7.c:249: note: expected ‘struct xt_layer7_info *’ but argument is of type ‘struct xt_layer7_info *’
libxt_layer7.c:298: error: dereferencing pointer to incomplete type
libxt_layer7.c: In function ‘print’:
libxt_layer7.c:339: error: dereferencing pointer to incomplete type
libxt_layer7.c:340: error: dereferencing pointer to incomplete type
libxt_layer7.c: In function ‘save’:
libxt_layer7.c:348: error: dereferencing pointer to incomplete type
libxt_layer7.c:348: error: dereferencing pointer to incomplete type
libxt_layer7.c: At top level:
libxt_layer7.c:355: error: invalid application of ‘sizeof’ to incomplete type ‘struct xt_layer7_info’
libxt_layer7.c:356: error: invalid application of ‘sizeof’ to incomplete type ‘struct xt_layer7_info’
make[2]: *** [libxt_layer7.oo] Error 1
make[2]: se sale del directorio `/usr/src/iptables-1.4.4/extensions'
make[1]: *** [all-recursive] Error 1
make[1]: se sale del directorio `/usr/src/iptables-1.4.4'
make: *** [all] Error 2

Busqué si tenían una situación así entre sus comentarios, pero no encontré nada.

Voy a seguir probando y de tener resultados buenos posteo cómo hice, o quizás me abra un tema propio así lo vemos.

Desde ya muchas gracias!
Mariano Medina.

Mariano

Hola de nuevo

Hola, ya pudimos solucionar el problema, se debía a que al descargar la fuente del kernel y realizar el enlace simbólico SÍ O SÍ DEBE llamarse "linux" (yo le habia puesto linux1 porque tenía otra carpeta con ese nombre) porque despues el make hace cosas automáticamente con ese nombre de enlace simbólico.

Termina de instalarse totalmente; ambas ayudas funcionan ( iptables -m ipp2p --help y iptables -m layer7 --help) y tambien anda bien cuando quiero agregar una regla ipp2p; pero al intentar hacer algo como

iptables -A INPUT -m layer7 --l7proto http -j ACCEPT

nos da el siguiente error:

iptables: No chain/target/match by that name

Sucede que el mismo error sucedio con el debian squeeze que teníamos antes y que compilamos hace un par de semanas usando otro tutorial parecido a este (http://wasdak.blogspot.com.ar/2012/06/iptables-traffic-shaping-debian-squeeze.html).

Cabe destacar que todo esto lo estamos haciendo en distribuciones instaladas en maquinas virtuales, con lo que he empezado a sospechar que podría tratarse de eso, porque es demasiada coincidencia. Ademas no tenemos idea de qué significa ese error y nadie más parece saberlo, por lo que buscamos en internet y otros foros.

Edito el comentario: Hoy probamos con un tuto que habiamos usado antes de llegar a este foro y que se hacía con Debian Squeeze (creo que ya hable de esto) ya dejando el lado las maquinas virtuales y usando una máquina física real, pero sin resultados óptimos:

Al ejecutar la ayuda iptables -m layer 7 -h, la ayuda se muestra como siempre.. pero al ejecutar

iptables -A INPUT -m layer7 --l7proto imesh -j ACCEPT

por ejemplo, el error persiste: "iptables: No chain/target/match by that name".

Buscando sobre ese error llegamos a que puede deberse a fallas de SINTAXIS(????) dónde?? jaja.

Les doy las gracias por las ayudas.

Mariano.

Mariano

haber pero por que no colocas

Imagen de falcom

haber pero por que no colocas todas las reglas de un protocolo para q pruebes bien ?
iptables -A INPUT -m layer7 --l7proto bittorrent -j ACCEPT
iptables -A OUTPUT -m layer7 --l7proto bittorrent -j ACCEPT
iptables -A FORWARD -m layer7 --l7proto bittorrent -j DROP

luego nos comentas..

Hola

Hola, acabo de probar lo que me dices, aunque no entiendo bien cómo lo haría. Lo que sucede es que cada vez que ejecuto cada una de las 3 líneas que me planteas, da como resultado lo mismo:
iptables: No chain/target/match by that name.

Qué crees tu que podría ser? El error es el mismo que daría si en lugar de escribir INPUT escribiera IMPUT, por ejemplo.

Si puedes, me gustaría que me digas si al día de hoy lo estás usando, si anda y si lo volviste a hacer ultimamente.

Es un post muy interesando y es lo que mejor nos ando hasta ahora, gracias hermano!

Mariano.

Mariano

Hola, yo utilizaba este

Hola, yo utilizaba este detallado e importante post para filtrar el trafico, con las nuevas versiones de Debian falla este metodo; te dejo una alternativa:
Instala debian, sin recompilar ni hacer lo que dice el tuto
luego apt-get install module-assistant xtable-addons
luego module-assistant --verbose --text-mode auto-install xtables-addons
luego modprobe xt_ipp2p
y listo, ya puedes usar las reglas de blqueo con iptables.
Debes tener en cuenta que al arrancar el sistema el modulo puede no cargarse solo aun instalado, de manera que deberas agregarlo en un script de inicio o en el listado de modulos al arrancar

Espero te sirva
Saludos

0j0 lo que tu indicas se

Imagen de falcom

0j0 lo que tu indicas se aplica para programas p2p unicamente, en un post anterior puse el como instalar el xtables en centos, pero los protocolos q bloquea son escasos, lo q estan hablando aca es de como implementar L7, una solucion mucho mas amplia..

Páginas