Configura un servidor VPN L2TP/IPsec en pfSense para navegar seguro

El sistema operativo orientado a firewall pfSense, dispone de varios protocolos de VPN para establecer servidores VPN de acceso remoto y también túneles VPN Site-to-Site. L2TP/IPsec es una VPN muy popular que permite a clientes VPN remotos como ordenadores, smartphones y tablets, conectarse a la red local profesional o doméstica de forma segura. L2TP se encargará de establecer el túnel, y el protocolo IPsec se encargará de proporcionar la confidencialidad, autenticación e integridad a todos los datos transmitidos. Hoy en RedesZone os vamos a explicar paso a paso cómo debemos configurar el servidor VPN L2TP/IPsec para conectarnos de forma remota.

¿Para qué sirve un servidor VPN L2TP/IPsec?

Un servidor VPN en nuestro pfSense nos permitirá acceder de forma remota a las diferentes subredes que tengamos configuradas, también nos permitirá redireccionar todo el tráfico de Internet hacia el servidor VPN para salir a Internet a través de él. Gracias a la configuración de un servidor VPN, podremos conectarnos a una red insegura de forma segura, porque todo el tráfico desde el origen hasta el servidor VPN va cifrado y autenticado.

L2TP (Layer 2 Tunneling Protocol) es uno de los protocolos VPN más utilizados, hace uso del protocolo PPP para la conexión de los diferentes enlaces, además, incluye mecanismos de autenticación de PPP como PAP y CHAP, además de soportar el uso de servidores RADIUS para la autenticación de los clientes. Este tipo de protocolo VPN es multiprotocolo, y permite el acceso a redes de área local remotas. La parte negativa es que no presenta una criptografía robusta, por tanto, no es seguro utilizarlo. Solo permite autenticación entre los puntos finales del túnel, pero no para cada uno de los paquetes que viajan por él, lo mismo ocurre con la integridad de los paquetes, no se comprueba. Además, L2TP no cifra el tráfico desde el origen hasta el destino.

Teniendo en cuenta todo esto, la organización de la IETF tomó la decisión de usar los protocolos criptográficos de IPsec junto con L2TP, para proporcionar las características de confidencialidad, autenticación e integridad al túnel de L2TP. Por este motivo, siempre encontraremos este protocolo escrito como «L2TP/IPsec» en los sistemas operativos, porque hace uso de ambos protocolos simultáneamente.

Una vez que ya conocemos de manera resumida cómo funcionan ambos protocolos para VPN, vamos a proceder con la configuración. Al tener dos protocolos que configurar, L2TP y IPsec, vamos a dividir claramente la configuración en dos partes.

Configuración del protocolo L2TP

Lo primero que debemos hacer es configurar el protocolo L2TP, para ello, nos vamos a la sección de «VPN / L2TP», y lo configuramos de la siguiente forma:

  • Enable L2TP
    • Enable L2TP Server: Habilitado
  • Configuration
    • Interface: WAN
    • Server Address: 192.168.100.1; debemos poner una subred que no esté en uso, y que sirva únicamente para usarla como gateway de los clientes
    • Remote Address Range: 192.168.100.128/25; damos una subred local a los clientes que se conecten.
    • Number of L2TP Users: 10, esto se puede configurar a gusto del usuario.
    • Secret: 1234clavel2tp; podemos poner una contraseña de paso, es recomendable ponerla, aunque algunos clientes no lo requieren. Depende de la configuración.
    • Authentication Type: CHAP
    • Primary/Secondary L2TP DNS Server: podemos poner un servidor DNS para los clientes

Una vez que lo hayamos configurado y pinchado en «Guardar», nos vamos a la sección de «Users» y creamos un usuario y contraseña para acceder. Aquí es donde tendremos que dar de alta todos los usuarios del servidor VPN al que se van a conectar, la parte de dirección IP la podemos dejar en blanco sin configurar, para que el servidor asigne la IP de forma dinámica.

Una vez configurado el servidor L2TP, ya podremos configurar el protocolo IPsec.

Configuración del protocolo IPsec

Para configurar el protocolo IPsec junto con el protocolo L2TP, tendremos que realizar un total de tres acciones. La primera de ellas es habilitar los «Mobile Clients», es decir, la VPN de acceso remoto. La segunda es habilitar la fase 1 de IPsec, y a continuación, configurar la fase 2 de IPsec.

Configurar el «Mobile Clients»

Esta es una de las partes más importantes, porque si nos vamos a la sección de «Tunnels» creamos un túnel VPN Site-to-Site, y lo que queremos hacer con IPsec es configurar una VPN de acceso remoto para que se conecten los diferentes clientes.

En este menú habilitamos «Enable IPsec Mobile Client Support» y elegimos «Local Database» aunque lo la usaremos porque eso es para autenticación xAuth. Pinchamos en guardar.

En cuanto pinchemos en «Guardar», también tendremos que pinchar en «Apply Changues», a continuación, pulsamos sobre el botón verde que indica «Create Phase1».

Configurar la fase 1 de IPsec

En este menú tendremos que configurar el protocolo IPsec correctamente para usarlo con L2TP, no todas las configuraciones funcionarán, además, dependiendo del cliente VPN usado (Android, iOS, Windows…) la configuración de seguridad puede cambiar, ya que no todos los sistemas operativos soportan los mejores cifrados de VPN. Por defecto, veremos el siguiente menú donde nos ha seleccionado IKEv2, el cual no es compatible con el protocolo L2TP/IPsec que queremos configurar.

Las opciones que debemos configurar para que funcione correctamente son las siguientes:

  • General Information
    • Key Exchange version: IKEv1, si seleccionamos cualquier otro no funcionará.
    • Internet Protocol: IPv4 o IPv6
    • Interface: WAN de Internet
    • Description: ponemos una descripción.
  • Phase 1 Proposal (Authentication)
    • Authentication Method: Mutual PSK
    • Negotiation Mode: Aggresive; si seleccionamos «Main» es más seguro, pero es menos flexible, y podríamos impedir que el cliente VPN se conecte correctamente. Más adelante si todo funciona con «Aggresive» podremos probar si con «Main» funciona también.
    • My identifier: User distinguished name – redeszone@redeszone.net o el que vosotros queráis.
  • Phase 1 Proposal (Encryption)
    • Encryption Algorithm: AES de 128 bits, SHA1, DH Group 2 (1024 bits).

pfSense soporta cifrados más fuertes que este que hemos configurado, pero el problema son los clientes VPN que se van a conectar, que no soportan mayor seguridad. Para configurarlo con la mejor seguridad, podemos ir probando en base a las «propuestas recibidas» de IPsec que recibamos del cliente, de esta forma, elegiremos la más segura de todas.

El resto de opciones de configuración las podemos dejar como están, con las opciones predeterminadas.

Una vez terminado, pinchamos en «Save», y ahora nos llevará al menú principal donde tenemos todos los túneles VPN con IPsec, deberemos pinchar en el único creado y en «Show Phase 2 Entries» y posteriormente en «Create Phase 2» para continuar.

Configurar la fase 2 de IPsec

En este menú de configuración deberemos poner lo siguiente:

  • General Information
    • Mode: transport
    • Description: una descripción que nosotros queramos.
  • Phase 2 Proposal (SA / Key Exchange)
    • Protocol: ESP
    • Encryption Algoritms: AES de 128 bits
    • Hash algorithms: seleccionamos SHA-1 y SHA-256
    • PFS Key group: off, no lo soporta el protocolo.

El resto de opciones de configuración las podemos dejar por defecto.

En el menú principal de «IPsec / Tunnels» podremos ver un resumen de todo lo que hemos configurado.

Ahora nos tendremos que ir a la sección «IPsec / Pre-Shared Keys» y agregar un nuevo identificador.

Este nuevo identificador debe ser:

  • Identifier: allusers (debe ser así, sin mayúsculas y sin ningún otro nombre)
  • Secret Type: PSK
  • Pre-Shared Key: la contraseña que nosotros queramos, es compartida con todos los usuarios que se vayan a conectar.

Una vez hecho esto, ya tendremos el servidor L2TP/IPsec listo para aceptar conexiones, pero antes, debemos crear las correspondientes reglas en el firewall.

Abrir puertos en el firewall de pfSense

Tendremos que crear una regla en la sección «Firewall / Rules / WAN» con la siguiente información:

  • Action: Pass
  • Interface: WAN
  • Address Family: IPv4
  • Protocol: UDP
  • Source: any
  • Destination: WAN Address en el puerto 1701 que es el de L2TP.

Guardamos y aplicamos cambios, asegurándonos de que esta regla se va a cumplir.

Cuando creamos un servidor VPN de tipo L2TP/IPsec, tendremos dos pestañas adicionales en «Firewall / Rules», aquí podremos permitir o denegar el tráfico a ciertas subredes, definir diferentes reglas avanzadas etc. Para una primera conexión y evitar posibles fallos de configuración a nivel del firewall, os recomendamos crear una regla de «pass any any any» y aplicar cambios. Después cuando se haya establecido la comunicación, si necesitáis definir diferentes reglas, entonces sí podéis editar reglas más específicas para cumplir todos vuestros requisitos.

Una vez que hayamos configurado correctamente el firewall, tendremos que configurar el cliente VPN para probar la conexión.

Prueba de conexión

En nuestro caso, hemos establecido una conexión VPN con un smartphone Android, concretamente el Huawei P30 que incorpora un cliente L2TP/IPsec PSK. La configuración que debemos realizar es la siguiente (no podemos poner captura porque el sistema operativo lo detecta como contenido privado).

  • Nombre: le damos un nombre a la VPN
  • Tipo: L2TP/IPsec PSK
  • Servidor: IP o dominio DDNS de vuestro servidor VPN
  • L2TP Secreto: 1234clavel2tp; la clave que pusimos en la sección de L2TP que es compartida con todos los clientes.
  • Identificador de IPsec: redeszone@redeszone.net
  • Clave compartida inicial de IPsec: 12345678; la clave que pusimos para el identificador «allusers» en la sección IPsec / Pre-Shares Key.

Pinchamos en guardar, y en conectar. A la hora de conectarnos nos pedirá un usuario y contraseña, estas credenciales son las que pusimos en «L2TP Users». Una vez hecho, nos conectará sin problemas al servidor VPN y tendremos acceso a la administración del pfSense y a cualquier red.

Tal y como habéis visto, la conexión se ha establecido correctamente con éxito, y no ha habido problemas.

Recomendaciones y consejos

Dependiendo del cliente VPN que vosotros utilicéis, la configuración del servidor podría variar. Por seguridad, siempre es recomendable hacer uso de los mejores algoritmos criptográficos, por este motivo, os recomendamos modificar las opciones de seguridad y forzar a los clientes a elegir siempre las mejores, sin embargo, deberemos fijarnos en los registros de IPsec para ver qué «proposal» envían los diferentes clientes a la hora de conectarse. Algunos smartphones utilizan un cliente VPN L2TP/IPsec con soporte para los últimos cifrados, sin embargo, otros modelos no lo permiten. Deberemos probar y elegir lo más seguro posible de manera global, balanceando entre seguridad y usabilidad.

Otro consejo si vais a usar L2TP/IPsec por primera vez, es saber de antemano qué clientes vais a conectar, Android, iOS, ordenador con Windows etc, ya que, la configuración podría ser diferente dependiendo de cómo esté internamente configurado el cliente. Es posible que no puedan convivir todos al mismo tiempo, por este motivo podrías usar otros VPN como OpenVPN o IPsec xAuth entre otras.

Con este mismo tutorial, podréis configurar el L2TP/IPsec RSA, modificando el «Mutual PSK» por «Mutual RSA» y configurando los correspondientes certificados de servidor y clientes, próximamente os enseñaremos cómo hacerlo. Esto también trae complicaciones, porque si creamos una CA con un certificado de cliente que hagan uso de los últimos algoritmos, es posible que nos devuelva un error al conectarnos porque no se reconocen.