Microordenadores - Desarrollos modernos para sistemas retro

Router firewall seguro con OpenBSD y EdgeRouter Lite
9 de Junio de 2017

Llevo unos meses usando un EdgeRouter Lite corriendo OpenBSD funcionando de forma estable. El EdgeRouter Lite tiene 3 puertos Gigabit ethernet, y hace muy buenas migas con OpenBSD, un sistema operativo que trae de serie el excelente software de firewall Packet Filter con soporte de QoS y un excelente historial en cuanto a seguridad, que junto a su código bien probado y una exquisita atención a los detalles y a la calidad se puede afirmar que es el sistema operativo más seguro del mundo e ideal para un router. Su mantenimiento es muy sencillo y las actualizaciones de seguridad muy raras al usar simplemente el sistema operativo base sin programas de terceros.

El ERL para otras tareas que no sean de router tiene un rendimiento bajo, y para compilar programas es muy lento, aunque esto no es problema para usarlo como mero router/firewall, al menos a velocidades usuales que ofrecen los ISP. Su consumo es muy bajo y está en torno a los 8 watios. Además, al ser una arquitectura exótica (octeon) tenemos un plus de seguridad, muy bienvenido en un router que constantemente recibirá ataques.

En climas cálidos el router se calienta bastante en verano, aunque cumple su función perfectamente y para mi es la mejor opción para tener un simple router firewall barato, seguro y estable. Si quieres más potencia y no te importa que la arquitectura sea amd64, una buena alternativa también de bajo consumo es el PC Engines APU2, relativamente abierto y con mejor soporte en OpenBSD.

Lectura recomendada

Herramientas necesarias

Instalación de OpenBSD

La instalación de OpenBSD es muy sencilla y viene perfectamente explicada en el FAQ, por lo que no la voy a repetir aquí, salvo la parte correspondiente a lanzar el instalador.

El servidor TFTP debe tener el archivo bsd.rd del directorio snapshots/octeon en /tftproot. Para arrancar el instalador necesitas conectarte al router a través del puerto serie con el cable Cisco conectado. Esto se hace de la siguiente forma:

  • En OpenBSD: cu -s 115200 si usas el puerto serie del ordenador o cu -l cuaU0 -s 115200 si usas adaptador USB.
  • En Linux puedes usar el programa minicom.

Arrancas el router e interrumpes el arranque pulsando una tecla; aparecerá una linea de comandos. Con dhcp conseguirá ip, entonces ejecutas el comando tftpboot 0 bsd.rd que cargará el instalador por tftp, y finalmente ejecutas bootoctlinux para que arranque bsd.rd y con ello el instalador de OpenBSD.

A partir de ahí la instalación será estándar. Solo tienes que tener en cuenta que el ERL no tiene un reloj interno con batería, por lo que después de la instalación, en /etc/rc.conf.local deberás añadir la línea ntpd_flags="-s" para que se sincronice el reloj en cada arranque.

Una vez instalado y tras reiniciar, tendrás que configurar uboot del ERL para que arranque OpenBSD. Esto se hace de la siguiente forma (tras interrumpir el arranque del router pulsando una tecla y conectado a través del puerto serie):

setenv bootcmd 'fatload usb 0 $loadaddr bsd; bootoctlinux rootdev=/dev/sd0'
saveenv

Configurar Packet Filter para hacer un router firewall está muy bien explicado en el apartado Building a router del FAQ de OpenBSD.

Como activar los dos cores de la CPU

Hay que grabar el archivo bsd.mp a /dev/sd0i, borrando el archivo bsd.rd para que haya suficiente espacio. El comando de arranque de uboot es setenv bootcmd 'fatload usb 0 $loadaddr bsd.mp; bootoctlinux rootdev=/dev/sd0 coremask=0x3'.

Como actualizar OpenBSD en el EdgeRouter Lite

OpenBSD es el sistema que es más cómodo de mantener seguro y actualizado que existe. Es raramente difícil que aparezcan fallos de seguridad que afecten al router, aunque puedes beneficiarte de continuas mejoras de seguridad que se hacen en el sistema actualizando.

OpenBSD/octeon, a diferencia de otros ports, no tiene bootloader por lo que el proceso es más manual. Aún así es trivial, sólo hay que montar la partición /dev/sd0i y escribir el nuevo bsd.rd (verificándolo previamente con signify) del directorio snapshots/octeon del FTP de OpenBSD y hacer el proceso de actualización como explica el FAQ. Al disponer de poco espacio puede ser necesario borrar el archivo obsd (la copia de seguridad que se genera en las actualizaciones del sistema) en caso de que exista.

Para que al reiniciar cargue el kernel para actualizar

setenv bootcmd 'fatload usb 0 $loadaddr bsd.rd; bootoctlinux rootdev=/dev/sd0'
saveenv

Después de actualizar, que cargue el kernel usual

setenv bootcmd 'fatload usb 0 $loadaddr bsd; bootoctlinux rootdev=/dev/sd0'
saveenv

Ya está, tan sólo falta ejecutar como root pkg_add -u para actualizar paquetes si es necesario y leer Following -current para saber las cosas que van cambiando, aunque para la mera función de router todo suele ir como la seda.

Como bloquear publicidad mediante DNS con EdgeRouter Lite

Simplemente configura unbound que es un servidor de DNS con caché y descarga esta lista de hosts de redes publicitarias de yoyo.org: curl -sS -L --compressed "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=unbound&showintro=0&mimetype=plaintext" > ads_list. Si quieres un método más completo para bloquear publicidad y malware tanto por DNS como a nivel de IP echa un vistazo a estos scripts.

Configuración como gateway

Aunque no dispones de una interfaz web para configurar OpenBSD el proceso es muy sencillo y viene explicado en la sección Firewall del FAQ oficial con una configuración de ejemplo donde sólo tendrás que cambiar el nombre de la interfaz.

Como abrir puertos en el EdgeRouter Lite con OpenBSD

Supongamos que cnmac2 es la interfaz WAN conectada a internet, y quieres redirigir el puerto 22 al ordenador de tu red con IP 192.168.2.100. La línea correspondiente de la configuración de Packet Filter sería:

pass in on cnmac2 inet proto tcp from { 149.210.171.149 } to (egress) port 22 rdr-to 192.168.2.110

¿Cómo añado Wifi a mi red?

El Edgerouter Lite no tiene Wifi, y por otra parte el soporte de AP en OpenBSD todavía no es muy bueno. Esto no es problema, ya que el router tiene 3 NICs Ethernet, con lo que en uno de ellos puedes conectar un router Wifi. Yo uso el Huawei HG556a con LEDE que conseguí por 3€ en una tienda de segunda mano.

Uno de los puertos va conectado al Router de mi ISP (en modo Cable modem), otro a mi ordenador y otro al router Wifi. Mi red la he dividido en dos segmentos:

  • 192.168.1.0/24: a esta subred está conectado mi ordenador y el Edgerouter.
  • 192.168.2.0/24: a esta subred va conectado el router wifi con IP 192.168.2.1.

Como en la subred 192.168.2.0/24 van conectados dispositivos que considero inseguros, tales como móviles, tablets y equipos de invitados, añado una regla en elfirewall para bloquear el acceso a los ordenadores de la otra subred:

block in from 192.168.2.0/24 to 192.168.1.0/24

Para evitar ataques de ARP spoofing, tanto en el router como en mis equipos configuro las entradas ARP permanentes al arranque editando el archivo /etc/rc.local:

arp -Fs 192.168.1.10 00:25:90:a5:ab:12 permanent > /dev/null
arp -Fs 192.168.2.20 00:40:10:20:02:01 permanent > /dev/null
arp -Fs 192.168.2.30 64:16:f2:db:fb:7a permanent > /dev/null
arp -Fs 192.168.2.40 28:f3:67:41:a9:de permanent > /dev/null

Contenido relacionado: