Problema

Los administradores de firewalls basados en pfSense Plus empiezan a recibir la versión Release Candidate 26.07, que introduce el controlador Netgate Nexus. El nuevo GUI está escrito en Go y reemplaza al legado PHP, pero su activación no es automática. En entornos de producción o laboratorios de pruebas, la transición al Nexus suele generar:

  • Inaccesibilidad al puerto 8443 después de habilitar el controlador.
  • Fallos en servicios dependientes (DNS Resolver, IPsec, OpenVPN) que siguen usando la pila antigua.
  • Incompatibilidades con máquinas virtuales que no exponen la información de hardware requerida por Nexus.
  • Dificultad para validar que componentes como CoreDNS, Threatgate o Snort v3 están realmente activos.

El reto es habilitar el Nexus de forma segura, validar su correcto funcionamiento y volver atrás sin interrumpir el tráfico crítico.

Causa

  1. Activación manual incompleta – El controlador Nexus requiere que se habilite en System → Advanced → Netgate Nexus y que el firewall se reinicie. Si el reinicio falla o se omite, el proceso queda a medio camino y el GUI no responde.

  2. Entorno virtualizado sin datos de hardware – Nexus necesita información de la CPU, número de núcleos y arquitectura para decidir la cantidad de hilos que asigna a CoreDNS y Threatgate. En hypervisores que ocultan estos datos (por ejemplo, algunos contenedores LXC o VMs con CPU pinning), el controlador se queda en modo “fallback” y no abre el puerto 8443.

  3. Conflicto de puertos – Si otro servicio ya está escuchando en 8443 (por ejemplo, un proxy inverso o una instancia previa de Nexus), el nuevo GUI no puede enlazarse y el firewall queda sin acceso web.

  4. Persistencia de configuraciones antiguas – Configuraciones de DNS Resolver, DHCP o OpenVPN que todavía apuntan a los procesos PHP pueden impedir que los nuevos componentes tomen el control, generando errores de arranque.

Solución

1. Preparación del entorno

  • Verificar que el firewall tenga al menos 2 CPU y 2 GB de RAM; Nexus ajusta sus hilos en función de estos recursos.
  • Confirmar que el puerto 8443/TCP esté libre. En caso de conflicto, liberar o reconfigurar el servicio que lo ocupa.
  • Si se ejecuta en una VM, habilitar la exposición de la información de CPU al huésped (por ejemplo, hypervisor -> CPU model = host en VirtualBox o --cpu-model host en QEMU/KVM).

2. Habilitar Netgate Nexus

  1. Acceder al GUI clásico (PHP) en https://<IP>/.
  2. Navegar a System → Advanced → Netgate Nexus.
  3. Marcar Enable Netgate Nexus y guardar.
  4. Reiniciar el firewall desde Diagnostics → Reboot o mediante CLI (pfctl -d && reboot).

3. Verificar que el nuevo GUI esté activo

  • Conectar a https://<IP>:8443/. El certificado será auto‑firmado; aceptar la excepción del navegador.
  • La pantalla de login mostrará la marca Netgate Nexus y ofrecerá acceso a los módulos CoreDNS, Threatgate y Snort v3.

4. Validar componentes críticos

CoreDNS

  • Crear una zona de prueba en Services → CoreDNS y añadir un registro A.
  • Desde un cliente, ejecutar dig @<IP> test.example.com y comprobar que la respuesta proviene del puerto 53 del firewall.

Threatgate

  • Importar una lista pública de IP maliciosas (por ejemplo, https://rules.emergingthreats.net/blockrules/emerging-Block-IPs.txt) mediante Services → Threatgate.
  • Crear una regla de firewall que bloquee la lista y probar con ping -c 1 <malicious_ip>; el ping debe ser bloqueado sin latencia significativa.

Snort v3

  • Activar el motor en Services → Snort y cargar el conjunto de reglas “community”.
  • Generar tráfico de prueba (por ejemplo, un escaneo nmap) y observar que los eventos aparecen en el log de Snort.

5. Reversión segura (si algo falla)

  • Acceder al CLI mediante consola o SSH.
  • Desactivar Nexus editando /conf/config.xml y cambiando <netgate_nexus>enabled</netgate_nexus> a disabled, o usar el comando:
pfSsh.php playback disable_nexus
  • Reiniciar el firewall. El GUI clásico volverá a estar disponible en el puerto 443.

Cuándo aplicar esta solución

  • Entorno de pruebas: siempre que se quiera validar la nueva arquitectura antes de un despliegue en producción.
  • Implementaciones nuevas: al instalar pfSense Plus 26.07 en hardware dedicado que cumpla los requisitos mínimos.
  • Actualizaciones graduales: cuando se necesite migrar gradualmente los servicios críticos (DNS, IPS) al nuevo stack sin interrumpir la operación.

No aplicar si:

  • El firewall está bajo alta carga y no se puede permitir un reinicio inmediato.
  • Se ejecuta en un hypervisor que no permite exponer la información de CPU (ej. algunos entornos de contenedores sin privilegios).
  • Se depende de plugins PHP no compatibles con Nexus.

Código

# Verificar puerto 8443 libre
netstat -an | grep 8443

# Habilitar Nexus desde CLI (alternativa a la GUI)
pfSsh.php playback enable_nexus

# Reiniciar firewall
pfctl -d && reboot

Verificación

  1. Acceso al GUI Nexus: abrir https://<IP>:8443/ y confirmar que la página carga sin errores de certificado.
  2. CoreDNS: dig @<IP> test.example.com → respuesta con TTL y dirección configurada.
  3. Threatgate: ping -c 1 <malicious_ip> → sin respuesta y sin salto de paquetes.
  4. Snort v3: tcpdump -i <interface> -nn -vvv port 443 mientras se genera tráfico sospechoso; observar eventos en Status → System Logs → Snort.

Si alguno de los pasos falla, revisar los logs en /var/log/nexus/ y /var/log/snort/ para identificar errores de inicialización.

Notas adicionales

  • En hardware limitado, ajustar los hilos de CoreDNS y Threatgate desde System → Advanced → Netgate Nexus → Advanced Settings puede evitar saturación de CPU.
  • El certificado auto‑firmado de Nexus expira cada 90 días; programar su renovación o reemplazo por uno propio en entornos productivos.
  • Algunas extensiones de terceros (por ejemplo, paquetes de captura de paquetes) todavía dependen del GUI PHP y pueden dejar de funcionar hasta que se migren a la API de Nexus.
  • Mantener una copia de seguridad del archivo config.xml antes de cualquier cambio estructural; una restauración rápida evita pérdida de configuración.