netfilter sin dolor en Debian, Ubuntu y otros derivados

Bueno, tanto como «sin dolor» es una exageración. Netfilter, el subsistema de filtrado de paquetes de Linux 2.4 y 2.6, es extraordinariamente poderoso y la sintaxis de iptables, la herramienta de espacio de usuario («userspace») es, a veces, como ponerse el cilicio y cargar un paso del viacrucis. Por supuesto hay herramientas disponibles para «facilitar» las cosas. Desde adefesios tan inflexibles como Firestarter (para principiantes, o mejor dicho expatriados de MS-Windows) hasta herramientas que si sirven para algo más de tres cosas y requieren un título en ciencias de cohetería, como Shorewall. A veces uno tiene necesidades particulares, como cuando se usa un programa P2P. Claro, siempre se puede usar moblock —hay instaladores binarios para Debian— el cual es la preferencia del paranóico, pero a veces un uso juicioso de netstat y de iptables además de saber como funciona el subsistema de redes en Debian es suficiente para detener a los «malos».

Eso me sucedió recientemente. Los malos tienen como costumbre alquilar subredes clase C dentro de una misma subred clase B para montar sus ataques contra las redes P2P y no hablo solamente de bloquear la descarga de un archivo popular, sino de inyectar virus y troyanos en los computadores de los usuarios descuidados que quieren curiosear cuanto pr0n0 pueden encontrar por ahí, usualmente usando archivos de Windows Media Video con DRM (Administración Digital de Derechos).

¿Y como se hace? Lo primero es abrir una emulación de terminal (usando GNOME Terminal, Konsole, etc.) como root. En Ubuntu abrimos una emulación de terminal y escribimos sudo -i. Luego usamos netstat -tcp para observar las conexiones de nuestro cliente P2P y allí veremos a los malos. ¿Como lo sabremos? En general, no tienen resolución inversa de nombres, así que las máquinas se verán como direcciones numéricas agrupadas en subredes clase B. Debemos apuntar estas direcciones en algún lugar accesible. Ahora, crearemos un pequeño script ejecutable que colocaremos en /etc/network/if-up.d/. Llamemoslo netfilter para ser originales. El contenido del script es algo como esto:

#!/bin/sh

LIST=" \\
        209.66.0.0/16 \\
        209.133.0.0/16  \\
        38.100.0.0/16  \\
        208.10.0.0/16  \\
        "

iptables -F

for ip in $LIST; do
        iptables -A INPUT -s $ip -j DROP;
        iptables -A OUTPUT -d $ip -j DROP;
done;

Este script será ejecutado cada vez que una interface de red sea activada en el sistema. Le daré puntos extra al que me diga por qué puse iptables -F en el script.

Advertisements

7 thoughts on “netfilter sin dolor en Debian, Ubuntu y otros derivados

  1. MoBlock, protege tu aMule de IP’s Anti-P2P « El Blog de rubensa

  2. Porque dices que vas a dar puntos extras al que te diga por que pusiste iptables -F en el script, jaja que tipo de puntos daras? iptables -F sirve para dar flush a las reglas de iptables, osea del firewall o cortafuegos, con esa regla puedes iniciar un script para borrar todas las reglas de iptables que hayas puesto antes o que esten corriendo.

  3. José,

    los puntos son del librito de deudas del dia del juicio final. Como en “te lo tendré en cuenta para el dia del juicio”.

    La razón por la que digo tal cosa es por que hay que motivar al lector a que aprenda cosas por sí mismo y no se limite a copiar sin pensar, lo que es muy peligroso. En la teoría y en la práctica GNU/Linux es muy seguro y tal pero si usas netfilter, primero eres root (¡Inclinaos ante el todopoderoso, impíos mortales!) y segundo si no te fijas en lo que haces o matas tu acceso a internet o dejas un boquete por el que te pueden meter al Titanic.

    Por cierto, debo cambiar la rutinita para que use su propia cola dentro del filtro de paquetes, así no hay que matar toda la configuración para cambiar este hack en particular.

  4. Hola buenas,

    Estoy intentando por medio de netfilter introducir un retraso en todos los paquetes que me lleguen antes de reenviarlos. Entiendo que para ello he de utilizar de alguna manera algo como:

    iptables -A INPUT –source 122.X.X.X -j QUEUE

    Y después de ello algo utilizando la librería libnetfilter_queue, pero no termino de saber cómo introducirle un retraso a todos los paquetes de digamos… 200ms…

    Agradecería mucho una ayudita si es posible,

    Gracias!

  5. Muchas gracias por tu respuesta, seguiré buscando, si encuentro la forma de hacerlo lo comentaré.
    El problema de lo que has encontrado es que usa una librería que ya está obsoleta… he de utilizar libnetfilter_queue pero claro… ahora mi objetivo es crear un programita en C que utilice esta librería para “tomar” los paquetes de netfilter e introducirles un retraso antes de “devolverlos”. Lo ves lógico? Crees que puede funcionar?

    Gracias de nuevo.

    Un saludo.

  6. En ese caso creo que ya tienes mucho adelantado. Mira en el código fuente de moblock, encontrarás los enlances mencionados arriba; este usa libnetfilter_queue para, precisamente, crear retrasos infinitos en las conexiones entrantes y salientes. De hecho, es mejor que uses libnetfilter_nfqueue, moblock es un ejemplo de com ousar ambos.

    ¡Suerte con eso!

Comments are closed.