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.

Security and Speed – Flawed by Design?

Releases/FeatureBootShutdownSpeedup – Fedora Project Wiki

Just giving a quick read to the notes in that entry of the Fedora Wiki, it dawned in my mind (it hit me like a rock, in fact) that surely many of those GNU/Linux boxes 0wn3d by crackers out there, are running Fedora. Sure, netfilter is enabled by default, but that only goes to show the inherent weakness (phoniness?) of the security philosophy used. Simplicity and parsimony are the landmark of well thought-out solutions, hypothesis and theories.

And no, I’m not cuttting any slack to the other big players of the distro wars. Neither Debian nor SUSE, nor Mandriva, much less PCLinuxOS, have truly lock down default network setups; I can’t comment much on the other 500 distros out there. Ubuntu gets closer but it should give weenies the addition of a locked down and licked up netfilter configuration so they can shoot themselves in the foot. Oh! There is a Google Summer of Code project to address exactly that. Expect questions like: “I installed the firewall and now I can’t download my pr0n”.

Hagamos trampa usando GNU/Linux

Las cosas que se hayan en los viajes cronópicos. Buscando información acerca de algo completamente diferente en Google, me he dado de manos a boca con esta página: Good to have-Cheat Sheets. Salid al mundo a hacer pasteles como decimos por acá.

Eso sí de pronto les toca aprender la lengua de Johann Wolfgang von Goethe y de Reiner Maria Rilke para entender el blog donde está la página; afortunadamente, todos los documentos mencionados están en inglés (espero que eso no sea un problema).

Incidentalmente, Der Panther es mi poema favorito, en la lengua original.

joe, un editor de texto excelente

¡Caray! He escrito un comentario en Ubuntu Life y me equivoqué de entrada. Eso me pasa por escribir antes de tomar el primer café de la mañana… Así que lo haré como un trackback, con mis disculpas…

joe es excelente. Alguna vez, en otra vida, fué mi editor favorito tanto en UNIX como en MS-DOS (Linux era un juguete que se bajaba de comp.sources.misc en ese entonces; ¡eso era divertido!). De hecho llegué al punto de darle una cuenta en nuestra estación de trabajo DEC-5000 del laboratorio de investigación (la bella y escultural Joline) a Joe Allen para que me lo arreglara y así poder compilar la última versión del momento (1.2.4, si mal no recuerdo. ¿O era 1.2.8p<algo>?) en Ultrix 4.3.

Desafortunadamente, Joe perdió el interés y ese parche nunca llegó a la versión oficial. Tomó casi 10 años, y un par de rusos locos abriendo un proyecto en SourceForge para que Joe Allen retomara el desarrollo de su editor: Joe’s Own Editor. Una de las cosas que hace a joe tan atractivo es que puede emular otros editores, además de tener su manera propia de hacer las cosas que es ser un clon de Brief de Borland (R.I.P.). Así, por ejemplo, pueden usarlo como si fuese Emacs (jmacs), o WordStar (jstar) o Pico/Nano (jpico). Es una gran combinación con mutt.

Bueno, eso fue una caminadita corta por la calle de los recuerdos. Usé muchos Unices que solo tenían vi y en los cuales no tenía privilegios administrativos, así que finalmente aprendí a usar vi e emacs. joe se convirtió en un bello recuerdo de tiempos pasados, ¡pero que recuerdos!

Las nuevas fuentes de impresión «Liberation»

Red Hat News | Liberation Fonts

RedHat a puesto a disposición del público en general un juego de fuentes de impresión llamadas «Liberation». El juego consiste de tres familas: Serif, Sans y Mono, que son métricamente equivalentes a Times New Roman, Arial y Courier New respectivamente. Estas fuentes de impresión están licenciadas bajo los mismos términos de las fuentes de impresión PostScript que URW++ donó hace ya 14 años al proyecto Ghostscript y que se han vuelto ubicuas en todas las distribuciones de GNU/Linux (GPL sin infectabilidad de documentos que las incluyan).

Mi opinión es que ¡son realmente bonitas! Me gustan y para usarlas, he escrito un archivo de configuración de fontconfig que pueden guardar como o incluir en ~/.fonts.conf. No olviden copiar las fuentes de impresión al directorio ~/.fonts y correr fc-cache -f -v ~/.fonts desde un terminal.

Compilando Pidgin 2.0 en Ubuntu 7.04

He gastado dos noches y buena parte de la mañana del sábado tratando de compilar el paquete de código fuente de Pidgin con pbuilder sin exito, hasta que encontré esta entrada en el diario de Pascal de Bruijn en la que comenta que Pidgin espera que los archivos de encabezado estén en /usr/include[nss|nspr] pero, posiblemente debido al branding, en Ubuntu están en /usr/include/firefox/[nss|nspr]. Pascal se acerca pero esa no es la razón. La razón es que Debian usa XULRunner mientras que Ubuntu usa el runtime de Firefox para las aplicaciones que usan Gecko.

¿Que puedo decir? Su observación me ha ahorrado mucha perplejidad y ansiedad. Después de leer su artículo, edité debian/control y debian/rules regeneré el paquete de código fuente y logré crear paquetes binarios funcionales, que pude instalar al lado de gaim (que es una dependencia de ubuntu-desktop).

Supongo que se preguntan como lo hice… Esto es más avanzado que usar checkconfig pero a cambio, se obtiene un paquete de instalación completamente funcional y con los parches necesarios para integrarlo dentro del ambiente Debian (y derivados) así que no lo explicaré el día de hoy. Me limitaré a dar pistas acerca de como hacerlo:

  1. Descargar los paquetes de código fuente de Pidgin de un espejo de Debian.
  2. Desempacar con “dpkg-source -x blah
  3. Editar debian/control así:
    • Cambiar dependencia de libnss3-dev (XULRunner) a libnss-dev (Firefox).
    • Comentar las lineas de “Replaces:” para instalarlo lado a lado con Gaim
  4. Editar debian/rules para incluir
    --with-nss-includes=/usr/include/firefox/nss --with-nspr-includes=/usr/include/firefox/nspr
  5. Reempacar con “dpkg-source -b blah
  6. Compilar con “sudo pbuilder build blah
  7. Instalar.
  8. Usar.