OpenBSD

Vamos a dejar claras algunas cosas sobre OpenBSD:

  • El instalador es de chiste. Me hace gracia que la gente se quejase hace unos años de que instalar Debian era difícil. Comparar aquello con el instalador actual de OpenBSD es como comparar un BMW serie 5 con un Dacia Logan: los dos te llevan al mismo sitio, pero en uno vas un poco más cómodo que en el otro.
  • Es lento. No tengo benchmarks, pero si se creen lo que dicen de Gentoo (que por compilar toda la distribución va más rápida) sin que haya habido nunca un estudio serio que lo apoye, pueden creerse esto también. Supongo que tanto código de auditoría es lo que tiene. Aparte, el sistema de ficheros viene por defecto en modo síncrono. Es más seguro, pero tiene un precio.
  • La gestión de paquetes es inexistente. Tienes pkg_add y derivados, pero lo que instala (con sus dependencias y todo, eso sí) es un tar.gz glorificado. La otra opción es instalar desde fuentes, que todo el mundo sabe que es la mar de cómodo. Es buena idea tener un compilador instalado en un firewall, para que luego si te lo hackean puedan compilarse los exploits nativamente sin tener que bajárselos ya compilados desde algún sitio. Seguro que van mucho más rápido.
  • Soporte de dispositivos. No hay competencia. Aunque entiendo que ahí pasa como al comparar Linux con Windows: si no hay soporte de los propios fabricantes, es difícil. Pero hay que tenerlo en cuenta también.

Ahora bien: dicho todo esto, el sistema de firewalling es muy bueno (y no es otra ironía, lo digo completamente en serio). Ya había oído que la sintaxis de pf era mucho mejor que la de iptables, pero como uno es un poco talibán de lo suyo y se está convirtiendo en un carcamal reaccionario con el paso de los años, no le había prestado mucha atención.

Tengo nuevo ordenador desde hace unas semanas, y no quería "ensuciar" la instalación de escritorio con muchos programas "de servidor" que usaba para mantener una pequeña infraestructura de máquinas virtuales para pruebas: squid, dnsmasq, enmascaramiento con iptables (vean mi entrada anterior sobre Firestarter y FWBuilder), etc. Lo que hice fue crear una máquina virtual que hace todas esas cosas, conectada por un lado a la red "externa" (la que recibe IPs por DHCP desde el router de Internet) y por otro a una red interna en la que cuelgo las máquinas virtuales. Podría haberle puesto Linux, como a todas las demás, pero como soy un friki le puse OpenBSD.

La parte de configurar los "repositorios" de paquetes, instalar dnsmasq y squid y configurarlos para que arranquen con el inicio del sistema ya hizo saltar algunas de mis fobias anti-BSD. El sistema de arranque, en concreto: yo siempre he sido más de SysV, con su directorio init.d y sus miles de scripts de control de servicios; el sistema BSD de "el gran script arrancador" me parece un atavismo informático. Pero funciona, y tampoco iba a pegarme tanto con esto como para quejarme.

La parte del firewall me llevó algo más, por desconocimiento de cómo "hablar firewallés" con OpenBSD. Y fue un agradable descubrimiento. Ejemplos a continuación.

Esto es lo que quería hacer: dada una red interna (la 10.0.0.0/8) configurada en el interfaz "interno" (em1) de la máquina, en la que van a estar las máquinas virtuales, debía permitirse el paso de todo el tráfico desde esa red y enmascararlo con la IP del interfaz "externo" (em0). Con iptables serían dos reglas (suponiendo eth0 y eth1):

iptables -A FORWARD -i eth1 -s 10.0.0.0/8 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/8 -j MASQUERADE

Lo primero que se puede hacer en OpenBSD con pf y que no se puede hacer con iptables es algo tan básico como definir grupos. Por ejemplo, éste con las redes internas:

localnets = "{ 10.0.0.0/8 }"

Que podría ampliar a más redes, incluyéndolas en la misma variable. No vean la de bucles for que he hecho yo con iptables porque no tiene una cosa así. Ridículo. Hay algo llamado ipset que lo implementa, pero claro, no está en la versión "oficial". Y eso implica parchear y mantener algo distinto a lo que viene con la distribución. Que va a ser que no.

Hacer lo que quería con pf sería:

pass in on em1 from { $localnets } to any
nat on em1 from { $localnets } to any -> em0

Me rasca un poco eso del "->" para indicar la dirección IP con la que se va a hacer NAT (en este caso, la que sea que tenga el interfaz em0). Admitámoslo como una extravagancia más de OpenBSD.

Son dos líneas, exactamente igual que con iptables. Pero les reto a presentarles las dos versiones a alguien que no sepa nada ni de iptables ni de pf, y que diga cuál de las dos prefiere. La versión de OpenBSD es mucho más fácil de ver, y hace lo mismo, que es lo importante. Si un día tengo ganas y tiempo, a lo mejor intento crear la configuración de un firewall complicado que tenga ahora con iptables usando pf. Sólo por ver si la diferencia se hace todavía más grande o se mitiga un poco. Una cosa que no sé si se puede hacer en pf, por ejemplo, son cadenas de usuario para agrupar las reglas. A lo mejor metiéndose más a fondo descubro que no, y otras limitaciones que no son visibles a simple vista.

No voy a pasarme a OpenBSD, ni nada parecido. Sólo me gustaría que alguien portara pf a Linux, o hiciera un front-end tipo pf para iptables. Parece que la siguiente generación de los firewall en Linux, nftables, será más parecida a pf. Pero por lo poquísimo que he visto, parece más bien algo más complicado. Sería cambiar una cosa difícil por otra igual de difícil, que no es mucho progreso.

Aalguien debería mandarle un CD de OpenBSD a la gente de netfilter para que pensara en ello.

*BSD

*BSD no se hizo supuestamente para desktops si no para servidores y aún así mira como ha progresado desde sus inicios =D

Como siempre, cuestion de gustos

[comentario de un fan de los *BSD (pa no llevarnos a engaños)]

1- Yo creo que no puedes comparar una cosa con otra. Sinceramente, si ahora me cambian el installer de openbsd (que una vez que lo conoces te permite hacer una instalación en pocos minutos) por algo basado en anaconda (que ya hay rulando por ahi, pero nadie en su sano juicio ha querido nunca para openbsd) me hincho a rajar en misc@ (y ni te cuento si le ponen algo grafico... "ande" vamos a llegar!). Ah, y al que dijese que instalar debian era dificil, yo le regalaba un CD de winxp y que se lo pase bien, que lo suyo no es el "mundo" unix-like.

2- Que tendran que ver las churras con las merinas... Lo voy a decir mas alto, pero no mas claro ;D: "La gran ventaja de compilar software no es que vaya mas rapido, si no que te configures el software como a ti te apetezca, leñe!". Más, a que te refieres exactamente con "lento"? rendimiento de algo concreto (squid te sirve mas paginas en linux? misma version/misma configuracion? apache? iptables va mas fino que pf en temas de rendimiento?).
Decir que algo es lento es muy relativo. Si reconozco que un asunto en el que nos hemos quedado atras es el tema del sistema de ficheros. Mientras NetBSD o FreeBSD (incluso dragonfly con el hammer) han ido evolucionando los fs y mejorandolos, en OpenBSD las mejoras han sido mas bien escasas.

3- A lo de la gestion de paquetes me voy a morder la lengua, que si te tengo que decir lo que opino yo del de debian... ;D. En openbsd gestionar (instalar,desinstalar,actualizar) binarios con pkg_add, que siguen las deps de cada paquete y si el paquete no te sirve (por que resulta que esta compilado sin tal o cual opcion) puedes instalarlo desde ports e incluso hacer tu propio paquete de forma rapida (make package) para luego copiarlo a un firewall sin ports y hacer pkg_add paquete para instalarlo.

Lo del gcc en el fw es un poco chorrada... no tienes por que tener gcc en tus firewalls openbsd, pq de hecho recomiendan (si le echas un ojo en la http://openbsd.org/faq) que instales binarios usando pkg_add, no los ports), ademas, si consiguen acceso suficiente como para poder compilar algo, tu crees que va a importar que tengas o no gcc?

4- Totalmente de acuerdo. Lo del soporte de dispositivos, como bien dices, depende mucho del soporte del fabricante. Ahora bien, por un lado te diria que comparases la comunidad de desarrolladores que hay detras de linux (no solo gente, si no empresas, universidades, etc) y detras de openbsd. Aun asi, por mi experiencia personal, que llevo unos cuantos años montando soluciones con openbsd, te puedo decir que no me he encontrado con problemas de hardware "serios" (nada no solucionable, como en cualquier otro *bsd o distro de linux)

Ya para terminar (menudo chapazo). Totalmente de acuerdo en lo de PF. Te recomiendo que le eches un vistazo a las tablas (http://cvs.openbsd.org/faq/pf/tables.html) o a authpf (http://cvs.openbsd.org/faq/pf/authpf.html) por ponerte dos ejemplos. Es una solucion para firewall muy muy completa. Ademas, PF no solo esta disponible para openbsd, si no que puedes usarlo con netbsd o freebsd (por si necesitas PF, pero tambien necesitas algo concreto que en openbsd no tienes).

Ah, y enhorabuena por el review!

P.D: mmm, como no tengo cuenta, por si quieres contactar conmigo para dudas o lo que sea, Wu - http://blog.e-shell.org

No te enfades con los de

No te enfades con los de netfilter si sabes que en el fondo iptables rules.