Configuración del router y firewall pfSense (Internet, VLANs, DHCP y más)

pfSense es un sistema operativo orientado a firewall que también actúa como router profesional, ya que tendremos cientos de opciones de configuración avanzadas, e incluso la posibilidad de instalar software adicional para ampliar aún más sus funcionalidades. Si alguna vez has querido probar pfSense, pero no sabes por dónde emepzar, hoy en RedesZone os vamos a enseñar cómo configurar la conexión a Internet, cómo crear VLANs para segmentar el tráfico, configurar el servidor DHCP con su correspondiente Static DHCP, e incluso configurar el servidor DNS, el UPnP y también a abrir puertos en la NAT (Port forwarding).

Lo primero que tenemos que hacer es entrar en pfSense con la puerta de enlace predeterminada. Por defecto, tenemos dos interfaces con la siguiente configuración:

  • WAN: configurada como DHCP cliente sin VLANs ni ninguna configuración adicional. No se permite acceso a la administración por defecto.
  • LAN: configurada con 192.168.1.1/24 y con DHCP activado. Se permite acceso a la administración por defecto.

Por tanto, para acceder a la administración del firewall y router deberemos poner en la barra de direcciones https://192.168.1.1, el nombre de usuario es «admin» y la clave es «pfsense», así accederemos directamente al menú de configuración vía web, donde podremos ver lo siguiente:

Configurar conexión a Internet

pfSense está diseñado para conectarse directamente a Internet y tener la dirección IP pública que nos proporciona el operador, es muy importante tener una IP pública y no estar detrás de CGNAT, de lo contrario, no podremos hacer reenvío de puertos ni acceder remotamente al propio pfSense. En España, es muy habitual que los operadores de FTTH utilicen diferentes VLAN ID para proporcionar su conexión a Internet. En algunas ocasiones, como Movistar / O2, podemos poner el router en monopuesto y configurar únicamente el PPPoE, pero en otras ocasiones como Grupo masmovil, debemos configurar un VLAN ID en la WAN de Internet para que funcione, de lo contrario, no tendremos conexión a Internet.

Si tu operador necesita hacer uso de un VLAN ID, en pfSense debemos seguir los pasos que os detallamos a continuación, si no necesitas VLANs, puedes saltarte este paso:

  1. Irnos a «Interfaces / Interface Assignments«, en la pestaña de «VLANs» es donde tendremos que crearlas.
  2. Parent Interface: asegurarnos de que elegirmos el puerto asignado a la WAN de Internet, no a la LAN.
  3. VLAN Tag: Crear el VLAN ID que se corresponde con la conexión a Internet, en Movistar/O2 es el 6, en Grupo Masmovil indirecto es VLAN ID 20, esto depende de cada operador.
  4. VLAN Priority: podemos dejarlo vacío.
  5. Descripción: ponemos un nombre descriptivo, por ejemplo, «Internet».

Una vez que hayamos creado al VLAN, tenemos que aplicarla en la WAN de Internet. Volvemos al menú de Interfaces / Interface Assignments y en la sección de WAN, seleccionamos «VLAN 20 on em0», es decir, la VLAN que acabamos de crear. Una vez hecho, pinchamos en «Save» para guardar los cambios.

Ahora tendremos que irnos a «Interfaces / WAN» y realizar la configuración que nos brinda el operador, por ejemplo, Grupo Masmovil hace uso de DHCP, pero Movistar/O2 hace uso de PPPoE. Dependiendo del operador tendremos un tipo de conexión u otro, un nombre de usuario/clave u otro, pero todas las opciones de cara a la WAN están en esta sección. Es muy recomendable marcar las dos casillas de la parte inferior, tanto «Block private networks and loopback addresses» como «Block bogon networks», para meter reglas en el firewall bloqueando estas redes en la WAN de Internet.

Llegados a este punto, ya deberíamos tener conexión a Internet sin problemas, obteniendo la IP pública del operador y los servidores DNS que nos proporcionan a nivel de red.

Crear VLANs para segmentar tráfico

Las VLANs (Virtual LAN) nos permite separar el tráfico de diferentes redes para aumentar la seguridad de la red, podremos crear varias VLANs para separar las redes y tener diferentes niveles de permisos y accesos en cada red local creada. Una arquitectura de red típica, consiste en tener todas las VLANs creadas en el pfSense, y conectar un cable desde un puerto físico de la LAN hasta un puerto de un switch gestionable en modo trunk, de esta forma, estaremos pasándoles todas las VLANs (con etiqueta) creadas en el switch al pfSense para hacer inter-vlan routing, y también para tener la posibilidad de configurar diferentes reglas.

Lo primero que tenemos que hacer para crear VLANs en la LAN, es irnos a la sección de «Interfaces / Interface Assignments«.

Una vez aquí, pinchamos en la sección de VLANs para crearlas correctamente, por defecto no tenemos ninguna VLAN creada, tal y como podéis ver a continuación:

Para crear una nueva VLAN, pinchamos en «Add», y a continuación realizamos los siguientes pasos:

  1. Parent Interface: asegurarnos de que elegirmos el puerto asignado a la LAN (no a la WAN de Internet).
  2. VLAN Tag: Crear el VLAN ID que se corresponde con el del switch.
  3. VLAN Priority: podemos dejarlo vacío.
  4. Descripción: ponemos un nombre descriptivo, por ejemplo, «Gestión».

Podremos crear todas las VLANs que queramos, siempre «colgando» de la interfaz LAN física. Por ejemplo, hemos creado otras dos VLANs adicionales, una VLAN para equipos y otra para invitados. El procedimiento es exactamente el mismo:

Una vez creadas, nos iremos nuevamente a «Interfaces / Interface Assignments«, aquí podremos ver un resumen de las interfaces físicas y del puerto de red. Por defecto, tendremos la WAN de Internet (con o sin VLAN), y también la LAN. Para añadir estas nuevas interfaces a la LAN, simplemente seleccionamos la interfaz «VLAN 2 on em1…» y pinchamos en «Add», y lo mismo con las demás, tal y como podéis ver en las siguientes capturas:

Una vez que las hayamos creado, en el desplegable de «Interfaces» nos aparecerán todas, con el nombre por defecto que son «OPT1», «OPT2» etc. Por defecto, tenemos la interfaz de la LAN activada, con su correspondiente dirección IPv4 privada, tomando como base esta configuración, podremos hacer el resto:

La configuración del resto de interfaces es exactamente igual, tendremos que habilitarla, poner un nombre descriptivo, poner la configuración IPv4 y/o IPv6 correspondiente, guardar cambios y aplicarlos.

Una vez configurada, podremos ver que ahora el nombre se le ha cambiado, tendremos que hacer lo mismo con las demás. Cuando hayamos terminado, en la sección de «Interface Assignments» podremos ver el nombre que le hemos dado a cada una de ellas.

Ahora, cuando conectemos diferentes equipos al switch en una VLAN de acceso en concreto, podremos acceder a esta subred local, pero debemos recordar que el servidor DHCP aún no está activado en estas VLANs recién creadas, es justamente lo siguiente que vamos a configurar.

Servidor DHCP de las interfaces LAN

Normalmente cada una de las VLAN tendrán configurado un servidor DHCP. Para hacerlo, nos vamos a la sección de «Services / DHCP Server». Justo debajo tendremos unas pestañas de LAN, gestión, equipos e invitados, las mismas redes que hemos creado anteriormente. Aquí podremos ver la subred a la que pertenece cada interfaz, y qué rango de DHCP les podemos proporcionar como máximo.

Para configurar el servidor DHCP, lo que podemos hacer es poner la misma configuración que la LAN, cambiando únicamente la subred. De esta forma, nos aseguraremos de que todo funciona bien. En estos menús también podremos añadir varios «pools» e incluso definir unos servidores WINS y DNS, también tendremos opciones de configuración avanzadas que tenemos justo en la parte inferior.

Las opciones de configuración del resto de redes que acabamos de crear son exactamente las mismas que en la LAN, lo que sí debemos tener en cuenta es poner un rango dentro de la misma subred, y que tengan suficientes hosts para que la red funcione correctamente.

Static DHCP

El static DHCP es la funcionalidad de un servidor DHCP que nos permite proporcionar la misma IP privada a la misma tarjeta de red. Poniendo la dirección MAC de la tarjeta de red y la IP privada que queramos que tenga, el servidor DHCP le brindará siempre la misma. En esta sección lo único que tendremos que rellenar es lo siguiente:

  1. MAC Address
  2. IP Address
  3. Hostname: para darle un nombre y acceder vía dominio a él.
  4. Descripción: un nombre descriptivo
  5. Pinchar en «Create an ARP Table Static» para enlazar la IP y MAC.

A continuación, tenemos la posibilidad de definir servidores WINS y DNS, así como otros parámetros. Si lo dejamos todo en blanco, automáticamente va a heredar la configuración del «pool» principal, por lo que no tenemos de qué preocuparnos.

A continuación, podéis ver cómo hacerlo con nuestra MAC de un PC y la IP que queramos, faltaría por poner el hostname y una descripción.

Configurar los servidores DNS y el DNS Resolver

Para configurar los servidores DNS, nos tenemos que meter en «System / General Setup«, aquí deberemos incorporar los servidores DNS que nosotros queramos, uno por uno, por defecto se encuentra un servidor DNS pero podremos añadir un secundario. Además, podremos poner el hostname del servidor DNS para la verificación TLS, siempre que queramos tener DNS over TLS en nuestro pfSense.

Lo más importante viene en la sección de «Service / DNS Resolver», aquí lo habilitamos y permitimos que los clientes nos envíen queries, aunque lo normal es que los clientes envíen las queries a través del puerto 53 siempre, sin SSL/TLS a no ser que tengamos un cliente instalado. El resto de opciones de configuración son para definir dónde «escuchar» las peticiones de los clientes, en «Network interfaces» elegimos solamente las que nosotros queramos, la LAN, gestión, equipos, invitados y la «localhost» para que el propio pfSense se pregunte a sí mismo sobre los DNS.

También tendremos que definir la interfaz de salida, en este caso la WAN. El resto de opciones son las de habilitar soporte para DNSSEC, habilitar el módulo de python que es nuevo en pfSense, y otras opciones avanzadas. Lo normal es tener la opción de «DNS Query Forwarding» desactivado, para que sea el propio servidor DNS de pfSense quien resuelva las consultas, y posteriormente usar los DNS que nosotros pongamos.

En la sección de «opciones avanzadas» tenemos la posibilidad de configurar el DNS over TLS, podremos hacerlo añadiendo estas reglas:

server:
forward-zone:
name: "."
forward-ssl-upstream: yes
forward-addr: 1.1.1.1@853
forward-addr: 8.8.8.8@853

Luego tenemos otras opciones en las demás pestañas del DNS resolver, en principio no deberíamos tocarlas, pero nos permitirán configurar opciones muy avanzadas relacionadas con el servidor DNS, y también crear listas de control de acceso para usar o no el DNS resolver.

Configurar UPnP y NAT-PMP con seguridad

El UPnP es un protocolo que nos permite abrir puertos en el firewall y router pfSense de forma automática, cuando un cliente solicite dicha apertura. Esto es un riesgo para la seguridad de la red, porque es posible que una determinada aplicación abra un puerto que nosotros no hemos solicitado. De cara a la seguridad, lo mejor que se puede hacer es deshabilitar siempre el protocolo UPnP y NAT-PMP.

En caso de que tengas que activarlo sí o sí, es recomendable solamente hacerlo en las direcciones IP privadas que se necesiten, y no en toda la red, con el objetivo de proteger el resto de dispositivos que están conectados.

Abrir puertos en la NAT (Port forwarding)

Cuando estamos en un entorno NAT, es posible que necesites abrir puertos para acceder desde el exterior a determinados servicios. Si tienes un servidor NAS con un servidor FTP, VPN o SSH, y quieres acceder desde el exterior a todos estos servicios, deberás abrir diferentes puertos en la NAT para permitir iniciar la conexión. Si abres puertos en la NAT, pero tienes el CG-NAT de tu operador, de nada te va a servir.

Para abrir la NAT, lo primero que tenemos que hacer es irnos a la sección de «Firewall / NAT», y en la pestaña de «Port forward» crear una nueva regla.

En este menú tendremos diferentes opciones de configuración, pero básicamente lo que deberemos rellenar es lo siguiente:

  • Interface: WAN
  • Address Family: IPv4
  • Protocol: elegimos el protocolo, en el ejemplo es TCP
  • Source: vacío
  • Destination: WAN Address
  • Destination Port Range: Tenemos que configurar un rango de puertos o solamente uno, si queremos un rango de puertos, en el «From» ponemos un puerto, por ejemplo el 60000, y en el «To» ponemos el puerto final, el 61000. En el ejemplo hemos abierto el puerto 51400.
  • Redirect target IP: type Single host, Address la dirección IP privada a la que quieres abrir el puerto
  • Redirect target port: debe ser el mismo puerto que en «Destination Port Range». Esta función, nos permite que de cara a la WAN tengamos abierto el 51400, pero de cara interno podamos «modificarlo» al vuelo y usar el 51500, por ejemplo.

En las siguientes capturas podéis ver cómo hacerlo:

pfSense nos permite utilizar una gran cantidad de protocolos, TCP, UDP, ambos, ICMP y muchos otros. Lo más normal es abrir puertos TCP o UDP, pero también podremos abrir muchos más tipos de protocolos.

Una vez que lo hayamos configurado, lo veremos en la tabla de «Firewall / NAT / Port Forward«, también debemos asegurarnos que la NAT está realizada correctamente, en «Outbound» lo podremos verificar. Ahora mismo estaremos «nateando» todas las subredes creadas. Por último, debemos comprobar que en «Firewall / Rules» y en la pestaña WAN está la regla que hemos creado en la NAT, es muy importante el orden de esta regla, si, por ejemplo, tenemos un «denegar todo» arriba después de las reglas de permiso, esta nueva regla se colocará abajo del todo, y debemos reordenarla.

Debemos recordar que las reglas se analizan en serie, desde arriba hacia abajo, si ponemos una regla muy general arriba, y abajo las más específicas, estas últimas nunca se van a satisfacer, porque anteriormente se ha cumplido una regla más general.

Configurar reglas en el firewall

Las reglas que creamos en el firewall de pfSense es la parte más importante para segmentar correctamente la red, y permitir o denegar cierto tráfico de red que fluye por las diferentes interfaces físicas y lógicas que hemos creado. En la sección de «Firewall / Rules» podremos ver diferentes pestañas para crear reglas en las diferentes interfaces, nosotros tenemos un total de cinco interfaces ahora mismo: WAN, LAN, Gestión, Equipos, Invitados.

Tenemos una pestaña adicional llamada «Floating», estas son unas reglas especiales que afectan a una o varias interfaces, y que se colocan por encima de las reglas que vamos a definir específicamente en cada una de las interfaces. Es decir, las reglas que tengamos en «Floating», si afectan a una interfaz, se verificarán antes que las reglas que vamos a definir a específicamente en la interfaz. Estas reglas de «Floating» se pueden activar en las direcciones de entrada, salida o ambas, el uso de filtrado de entrada y salida podría ser más complejo, por lo que deberás revisarlas bien antes de aplicarlas. Para ciertas aplicaciones, las «Floating Rules» son muy útiles, como para pfblocker-ng, aunque normalmente estas reglas «Floating» no se usarán.

En la sección de «Firewall / Rules / WAN» podremos ver dos reglas predefinidas, las cuales se activan al bloquear las «private networks» y «bogon networks», tal y como os hemos explicado anteriormente. La tercera regla es la de apertura de puertos que hemos realizado.

En la LAN también tenemos unas reglas predefinidas, básicamente tendremos una regla que nos impide bloquearnos a nosotros mismos para acceder a la interfaz web de administración del pfSense, si tuviéramos el servidor SSH activado, también se incorporaría aquí una regla para permitir acceso al puerto de SSH. A continuación, tenemos permiso para acceder a cualquier lugar desde la LAN, tanto con IPv4 como con IPv6.

Debemos recordar que las reglas se verifican desde arriba hacia abajo, si en la parte superior ponemos un «bloquear todo», automáticamente nos quedaremos sin conexión.

El resto de redes que hemos configurado con su correspondiente VLAN, están totalmente vacías. Si estás vacías, eso significa que tenemos un denegar todo de manera implícita, es decir, tendremos que incorporar una regla de permitir para dejar pasar el tráfico de red.

La interfaz gráfica de usuario para crear una regla es la misma para todas las interfaces, en la parte superior podremos configurar diferentes aspectos de esta regla que vamos a crear desde cero:

  • Action: si queremos permitir (pass) el tráfico, bloquearlo (block), o rechazarlo (reject). Es lo primero que deberemos definir, en caso de aplicar esta regla y que se verifique, el firewall actuará en consecuencia.
  • Disabled: permite deshabilitar una regla creada, esto no se debería tocar si queremos que la regla funcione.
  • Interface: elegimos la interfaz física o lógica donde queremos aplicar esta regla.
  • Address Family: seleccionamos el protocolo IPv4, IPv6 o ambos.
  • Protocol: aquí tendremos una lista de todos los protocolos que podremos permitir o bloquear, como TCP, UDP, TCP y UDP, ESP, OSPF y mucho más.

En la siguiente galería se pueden ver todas las opciones para interface, address family y también para protocol.

Una vez que hayamos definido lo anterior, ahora tendremos que seleccionar el origen del tráfico (Source). En este caso podremos elegir cualquier origen (any), o definir un origen en concreto para una subred específica, un host individual o un alias (posteriormente os explicaremos qué es esto). También podremos elegir como origen a clietnes PPPoE, clientes L2TP, o directamente una red o dirección IP de la interfaz creada.

Exactamente las mismas opciones de configuración tendremos en la sección de «Destination», podremos elegir cualquiera, un host individual, alias, o las diferentes redes que tenemos disponibles.

Si pinchamos en la sección de «Source» en «Display Advanced» podremos ver que también tenemos la posibilidad de filtrar por origen de los puertos, proporcionando un único puerto un rango de puertos.

Si en la sección de «Protocol» elegimos el protocolo TCP u otro, y pinchamos en «Extra options / Advanced Options / Display Advanced» podremos ver las opciones avanzadas de este protocolo en concreto, para filtrarlo todo en detalle.

Una vez que hayamos rellenado todo, tendremos que pinchar en «Save», y posteriormente en «Aplicar cambios» en el pfSense, ya que nos saldrá un botón en color verde.

Aliases

Las aliases son muy útiles para proporcionar un nombre a un conjunto de direcciones IP, subredes o puertos. Esto es ideal para que, con una sola regla en el firewall, poder bloquear varias direcciones IP automáticamente, sin tener que crear 50 o más reglas para bloquear todas las direcciones IP.

En la sección de «Firewall / Aliases» podremos ver la interfaz gráfica de usuario, tendremos la posibilidad de añadir IP (hosts o redes), y también puertos. Además, en al sección de URL podremos introducir la dirección a un archivo de texto para realizar al descarga automática en el pfSense de cientos o miles de direcciones IP, redes y puertos.

Imaginemos que queremos crear un alias llamado «Ip bloquear», con un listado de direcciones IP que posteriormente queremos bloquear en el firewall. Entramos en la sección de «IP», pinchamos en «add», le damos un nombre, descripción y también un tipo. A continuación, justo debajo vamos introduciendo una a una las diferentes direcciones IP, además, podremos darle una descripción «Ordenador de pepe», para saber a qué equipo se corresponde esa IP. Una vez creado, nos aparecerá en el listado de aliases IP:

Lo mismo ocurre con los puertos, podremos crear un aliases para «bloquear puertos», y definir uno o varios puertos que posteriormente bloquearemos en el firewall.

La interfaz gráfica de usuario de URL sería de la siguiente forma, y deberemos elegir el tipo que sea, IPs o puertos.

Una vez que tengamos el aliases creado, basta con irnos a la sección de «Firewall», y podremos cargarla en origen y/o destino, elegimos la opción de «Single host or alias», y justo a la derecha escribimos el nombre del aliases que hemos creado, automáticamente lo reconocerá y nos saldrá un listado de aliases que empiezan por la misma letra que hemos introducido. Y lo mismo ocurre si vamos a configurar puertos, pero aquí tendremos que ponerlo en la sección de puertos de origen y/o destino.

Tal y como habéis visto, utilizar pfSense como router y firewall en nuestra casa es realmente fácil y rápido, es un sistema operativo muy profesional y completo, pero con esta guía de puesta en marcha estamos seguros que podéis empezar con una buena base de cómo configurarlo.