Router firewall con OpenBSD
Por el 1 de Abril de 2022
Para configurar este router con funciones de firewall usaré OpenBSD en un EdgeRouter Lite, un pequeño router de bajo consumo con tres interfaces Gigabit ethernet:
- cnmac0 va conectado al cablemodem y en modo cliente DHCP
- cnmac1 y cnmac2 están configurados como un puente de red
- cnmac0, cnmac1 y cnmac2 corresponden a eth0, eth1 y eth2 en la carcasa del router
Este router se encargará del enrutado de toda la red, tanto del ordenador conectado directamente al router como los clientes del punto de acceso inalámbrico que va conectado en cnmac2, de forma que se evita el doble NAT y todos los equipos conectados son accesibles entre sí. En el caso de que quieras separar la red LAN de la red Wifi te recomiendo que leas el artículo Separación de redes en un router OpenBSD.
La versión de OpenBSD que he utilizado es la 7.1-current del día 20 de Marzo de 2022.
Lectura recomendada
Configuración del puente de red
Entre las interfaces cnmac1 y cnmac2 haré un puente de red usando veb(4) / vport(4), una implementación software de un switch ethernet que es el reemplazo moderno de bridge(4) y vether(4), con mayor rendimiento y más adecuado para trabajar en paralelo con múltiples CPUs de forma concurrente.
- /etc/hostname.vport0
-
inet 192.168.10.1 255.255.255.0 192.168.0.255 up
add vport0
add cnmac1
add cnmac2
up
up
up
Configuración de Packet Filter
Esta es una configuración básica con política de denegación por defecto, permitiendo conexiones salientes y tráfico interno de la red:
int_if = "vport0"
set block-policy drop
set loginterface egress
set skip on lo
match in all scrub (no-df random-id max-mss 1440)
match out on egress inet from !(egress:network) to any nat-to (egress:0)
antispoof quick for egress
block in quick log from { no-route urpf-failed }
block log all
pass out inet
pass in on $int_if inet
Para cargarlo:
# pfctl -f /etc/pf.conf
Configuración del servidor DHCP
Se usará una configuración similar a la del ejemplo de la documentación salvo que la interfaz donde escuchará el servidor será vport0:
- /etc/rc.conf.local
-
[...] dhcpd_flags="vport0" [...]
Encontrarás una configuración completa de dhcpd en Separación de redes con un router OpenBSD.
Configuración de reenvío de IP
# echo 'net.inet.ip.forwarding=1' >> /etc/sysctl.conf
# sysctl net.inet.ip.forwarding=1
Configuración en modo sólo lectura
Este artículo indica cómo configurar OpenBSD con las particiones de disco en modo sólo lectura, haciendo el sistema más estable al reiniciar tras un apagón.