OPNsense es un firewall serio. Pero la GUI puede generar confusión sobre el orden correcto de operaciones — especialmente cuando combinas VLANs, interfaces, y reglas de firewall que dependen unas de otras. Este post sigue el orden exacto en que debes hacer cada paso para llegar a una configuración funcional y segura.

Escenario

Un único puerto físico (em1) actúa como trunk hacia un switch administrado. Cinco VLANs para segmentos distintos:

VLANIDRedPropósito
MGT1010.0.10.0/24Gestión de red
SRV2010.0.20.0/24Servidores internos
USR3010.0.30.0/24Usuarios / endpoints
IOT4010.0.40.0/24Dispositivos IoT
DMZ5010.0.50.0/24Servicios publicados

El router tiene IP .1 en cada subred. WAN en em0.


1. Crear las VLANs

Interfaces → Other Types → VLAN → Add

Repite para cada VLAN:

ParentVLAN tagDescription
em110VLAN_MGT
em120VLAN_SRV
em130VLAN_USR
em140VLAN_IOT
em150VLAN_DMZ

Guarda cada una. Aún no son interfaces asignadas — son solo subinterfaces lógicas.


2. Asignar interfaces

Interfaces → Assignments → Add

Asigna cada VLAN a una interfaz con nombre descriptivo:

Network portInterface name
em1.10 (VLAN_MGT)MGT
em1.20 (VLAN_SRV)SRV
em1.30 (VLAN_USR)USR
em1.40 (VLAN_IOT)IOT
em1.50 (VLAN_DMZ)DMZ

Guarda. Ahora aparecen en Interfaces → como entradas editables.


3. Configurar cada interfaz

Interfaces → MGT (repite para cada una):

  • Enable: ✓
  • IPv4 Configuration Type: Static IPv4
  • IPv4 address: 10.0.10.1 / 24
  • Block private networks: ✗ (esto va en WAN, no aquí)
  • Block bogon networks: ✗

Guarda y aplica. Haz lo mismo para SRV (.20.1), USR (.30.1), IOT (.40.1), DMZ (.50.1).

Si no habilitas la interfaz explícitamente, OPNsense no crea la entrada en la tabla de rutas ni activa DHCP para esa red.


4. DHCP por VLAN

Services → ISC DHCPv4 → [Interface]

Para cada interfaz:

InterfazRange startRange endDNS
MGT10.0.10.10010.0.10.20010.0.10.1
SRV10.0.20.10010.0.20.20010.0.20.1
USR10.0.30.10010.0.30.20010.0.30.1
IOT10.0.40.10010.0.40.20010.0.40.1
DMZ10.0.50.10010.0.50.20010.0.50.1

Activa Enable DHCP server on [interface] y guarda.


5. Lógica de firewall: el modelo mental

OPNsense evalúa reglas por interfaz de entrada, de arriba hacia abajo, primera coincidencia gana. Hay un deny implícito al final de cada interfaz — no necesitas escribirlo.

El objetivo para cada VLAN interna:

  1. Permitir tráfico hacia internet (cualquier IP que no sea RFC 1918 ni bogon).
  2. Bloquear tráfico hacia otras VLANs y redes privadas (aislamiento).
  3. Permitir consultas DNS y DHCP hacia el router si usas el resolver local.
  4. Bloquear acceso a la GUI de OPNsense desde VLANs no administrativas.

El orden importa: coloca los bloques específicos antes de los permisos amplios.


6. Alias: RFC 1918 y Bogons

Antes de escribir reglas, define aliases reutilizables.

Firewall → Aliases → Add

Alias: RFC1918

CampoValor
NameRFC1918
TypeNetwork
Networks10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
DescriptionEspacio privado RFC 1918

Alias: VLANS_ALL (todas las subredes propias, útil para reglas de bloqueo)

CampoValor
NameVLANS_ALL
TypeNetwork
Networks10.0.10.0/24, 10.0.20.0/24, 10.0.30.0/24, 10.0.40.0/24, 10.0.50.0/24

Alias: OPNSENSE_GUI (proteger acceso a la gestión)

CampoValor
NameOPNSENSE_GUI
TypePort
Ports443, 80

7. Reglas de firewall por interfaz

Las reglas se crean en Firewall → Rules → [Interface].

Plantilla aplicable a USR, IOT y DMZ

Estas tres VLANs son las menos confiables. Aplica este set de reglas en ese orden:

Regla 1 — Permitir DNS hacia el router (opcional si usas Unbound)

CampoValor
ActionPass
InterfaceUSR / IOT / DMZ
ProtocolTCP/UDP
SourceUSR net / IOT net / DMZ net
DestinationThis Firewall
Dest. PortDNS (53)
DescriptionPermitir DNS local

Regla 2 — Bloquear acceso a la GUI del firewall

CampoValor
ActionBlock
ProtocolTCP
Source*net
DestinationThis Firewall
Dest. PortOPNSENSE_GUI
DescriptionBloquear acceso GUI

Regla 3 — Bloquear hacia RFC 1918 (aislamiento inter-VLAN)

CampoValor
ActionBlock
Protocolany
Source*net
DestinationRFC1918
DescriptionBloquear RFC 1918

Regla 4 — Permitir hacia internet

CampoValor
ActionPass
Protocolany
Source*net
Destinationany
DescriptionPermitir internet

El orden 2→3→4 es el que importa. La regla 3 bloquea todas las IPs privadas (incluyendo las otras VLANs y el propio router excepto el DNS ya permitido en regla 1). La regla 4 solo alcanza lo que no fue bloqueado antes — es decir, IPs públicas.

MGT — Interfaz administrativa

MGT es la red desde donde administras equipos. Tiene más permisos pero sigue sin acceso directo a IOT ni DMZ sin regla explícita:

Regla 1 — Permitir todo desde MGT (o limitar por puerto si quieres ser estricto)

CampoValor
ActionPass
Protocolany
SourceMGT net
Destinationany
DescriptionMGT acceso total

Si el principio de mínimo privilegio importa aquí, sustituye “any” por un alias con destinos explícitos. En muchos entornos MGT es la red del operador y esta concesión es aceptable.

SRV — Servidores internos

Los servidores pueden necesitar hablar entre ellos y hacia internet, pero no deben iniciar conexiones hacia USR ni IOT:

Regla 1 — Bloquear hacia USR e IOT

CampoValor
ActionBlock
SourceSRV net
DestinationUSR net, IOT net

Regla 2 — Permitir hacia DMZ (si los servidores publican hacia DMZ)

CampoValor
ActionPass
SourceSRV net
DestinationDMZ net

Regla 3 — Permitir internet

CampoValor
ActionPass
SourceSRV net
Destinationany

8. Reglas en WAN: proteger el perímetro

Firewall → Rules → WAN

OPNsense por defecto bloquea todo tráfico entrante en WAN sin regla explícita — el deny implícito es suficiente para lo que no publiques. Refuerza el perímetro con estas reglas adicionales:

Bloquear RFC 1918 entrante (spoofing de origen privado)

CampoValor
ActionBlock
InterfaceWAN
SourceRFC1918
Destinationany
Log
DescriptionBloquear spoof RFC1918 desde WAN

Bloquear Bogons (ya hay opción en la interfaz WAN, pero una regla explícita permite logging)

Alternativamente, activa Block private networks y Block bogon networks directamente en Interfaces → WAN — OPNsense genera estas reglas internamente y las aplica antes que las reglas manuales.

Permitir servicios publicados desde DMZ (si aplica)

Solo agrega reglas de permitir para los puertos que realmente publicas. Ejemplo para HTTPS:

CampoValor
ActionPass
InterfaceWAN
ProtocolTCP
DestinationDMZ net
Dest. Port443
DescriptionHTTPS público → DMZ

9. Verificación

Confirmar que las interfaces tienen IP:

Interfaces → Overview — cada VLAN debe mostrar su IP .1 y estado up.

Confirmar rutas:

System → Routes → Status

Debes ver una entrada /24 por cada VLAN apuntando a su interfaz respectiva.

Probar aislamiento desde un cliente en USR:

# Debe fallar (RFC 1918 bloqueado)
ping 10.0.20.1       # SRV gateway
ping 10.0.40.50      # dispositivo IoT

# Debe funcionar
ping 8.8.8.8
curl https://example.com

Ver logs de bloqueos en tiempo real:

Firewall → Log Files → Live View — filtra por interfaz y acción block para confirmar que los bloqueos se están generando con las reglas correctas.

Diagnóstico desde la GUI:

Interfaces → Diagnostics → Ping — selecciona la interfaz de origen para simular tráfico desde cada VLAN sin necesitar un cliente físico.


10. Hardening adicional del perímetro

Deshabilitar acceso a la GUI desde WAN:

System → Settings → Administration → desactiva acceso HTTP/HTTPS desde WAN si no usas gestión remota. Usa una VPN para administración remota.

IDS/IPS con Suricata:

Services → Introspection → Suricata — actívalo en la interfaz WAN en modo IPS (inline). El conjunto de reglas ET Open cubre amenazas comunes sin coste adicional.

Limitar intentos de acceso a la GUI:

System → Settings → Administration → Login Protection — activa el rate limiting. Evita fuerza bruta contra la GUI incluso desde redes internas.

Actualizaciones automáticas de reglas IDS:

Services → Introspection → Suricata → Download — configura actualización diaria de reglas. Las amenazas cambian; las reglas estáticas envejecen mal.


Resumen del modelo de confianza

Desde \ HaciaMGTSRVUSRIOTDMZInternet
MGT
SRV
USR
IOT
DMZ
WANPuerto específico

El principio es simple: cada segmento puede salir a internet pero no puede hablar lateralmente con otros segmentos salvo que haya una regla explícita que lo justifique. MGT es la excepción controlada — es la red desde la que operas, y tiene visibilidad total a propósito.