El sistema operativo pfSense que está orientado a firewall y router, dispone de varios protocolos de VPN para interconectar sedes a través de VPN Site-to-Site, y también podremos configurar VPN de acceso remoto para interconectar diferentes clientes móviles entre sí, y para que todo el tráfico de Internet pase a través del propio sistema operativo. OpenVPN es uno de los softwares más utilizados para crear redes privadas virtuales, gracias a su seguridad, flexibilidad y buen funcionamiento. Hoy en RedesZone os vamos a explicar paso a paso cómo configurar el servidor OpenVPN que está dentro de pfSense.
Es posible que ya te hayas planteado usar el servidor OpenVPN en pfSense, pero no sepas cuál es la mejor configuración posible para sacar el máximo rendimiento y así disfrutar de la máxima seguridad posible. Lo bueno es que en las siguientes líneas vamos a conocer todos los puntos que se debe tener en cuenta a la hora de usar este tipo de servicio en el sistema pfSense. De esta manera, podrás ver de primera mano cómo se tiene que configurar, aunque antes de todo esto, veremos las ventajas de utilizar este sistema y conoceremos más a fondo cuál es su rendimiento.
¿Qué es un servidor VPN?
Antes de entrar en cómo configurar un servidor openvpn, es importante comprender qué es un servidor VPN y para qué se utiliza. De esta manera, podremos tener más en cuenta los usos que se pueden sacar partido de este tipo de herramientas de seguridad.
De primeras, hay que tener claro que un servidor VPN es una herramienta muy importante en el ámbito de la seguridad y la privacidad en línea. Este tipo de servidor crea una conexión segura y cifrada entre un dispositivo, como un ordenador o un smartphone y una red privada a través de Internet. Su objetivo principal es proporcionar un túnel seguro para la transmisión de datos, protegiendo la información sensible de posibles amenazas externas.
La función principal de un servidor VPN es crear una capa de privacidad y seguridad al enrutar el tráfico a través de una conexión cifrada. Esto es especialmente importante al utilizar redes públicas, como las de cafeterías, aeropuertos o cualquier otro lugar con acceso WiFi, donde los datos pueden ser vulnerables a ataques cibernéticos. No obstante, no es la única funcionalidad de la que se puede sacar provecho de este tipo de herramientas de seguridad.
Cuando te conectas a un servidor VPN, puedes hacerlo mediante una aplicación específica o configurando la conexión directamente en tu sistema operativo. Una vez establecida la conexión, el tráfico de datos se encripta, lo que significa que, incluso si un tercero intercepta tu información, los datos serán ilegibles sin la clave de cifrado correspondiente.
Además de proporcionar seguridad, un servidor VPN también ofrece otros beneficios. En primer lugar, permite acceder a recursos de red privados, como archivos y aplicaciones, como si el dispositivo estuviera físicamente conectado a la red privada, incluso si se encuentra a miles de kilómetros de distancia. Algo muy útil para empresas donde se teletrabaja, por ejemplo. Además, otro de los beneficios de usar una VPN es el acceso a webs bloqueadas en tu zona geográfica. Al no presentarte con tu dirección IP real, podrás acceder a ciertos sitios que en tu situación geográfica está bloqueado mientras que en la situación del servidor VPN al que estás conectado, tiene acceso.
¿Qué es y para qué sirve el OpenVPN integrado en pfSense?
OpenVPN es un software que nos permite levantar redes privadas virtuales, tendremos un canal de control donde se gestionará el levantamiento del túnel y la negociación de los protocolos de cifrado, y tendremos un canal de datos donde todo el tráfico del túnel irá cifrado punto a punto. Uno de los puntos fuertes de OpenVPN en pfSense, es que la gran mayoría de opciones disponibles las tenemos a través de una interfaz gráfica de usuario muy intuitiva, esto nos permitirá configurarlo sin necesidad de incorporar ninguna directiva de manera manual en el campo de «opciones avanzadas». El software OpenVPN que tenemos integrado en pfSense nos permitirá crear y configurar dos tipos de arquitecturas:
- VPN de acceso remoto: los clientes remotos se conectarán al servidor VPN de pfSense, y saldrán a Internet a través de nosotros. También podrán acceder a las subredes que nosotros indiquemos. Este tipo de VPN están orientadas a teletrabajadores, técnicos de redes y sistemas etc.
- VPN Site-to-Site: esta arquitectura nos permite intercomunicar una sede con otra, para intercomunicar diferentes sedes a través de Internet y que todo el tráfico esté protegido punto a punto. Por ejemplo, con este tipo de VPN podremos comunicar oficinas, sedes de empresas etc.
OpenVPN soporta decenas de configuraciones diferentes, tanto para mejorar el rendimiento como la seguridad. pfSense permite diferentes tipos de autenticaciones, pero la más recomendable es la basada en certificados SSL/TLS para asegurar la autenticidad, confidencialidad e integridad, no siendo recomendable hacer uso de claves precompartidas. Además de incorporar la autenticación basado en certificados SSL/TLS, también podríamos incorporar una autenticación adicional con usuario/contraseña, para tener un sistema más robusto. pfSense permite exportar la clave privada de los certificados con una contraseña, de esta forma, para poder usar estos certificados también tendríamos que incorporar una contraseña adicional, de lo contrario, no funcionaría.
El servidor OpenVPN integrado en pfSense nos permitirá conectarnos a nuestro hogar o trabajo de forma remota, rápida y segura, independientemente de que la red sea cableada o WiFi. Todo el tráfico irá cifrado punto a punto desde nuestro cliente OpenVPN (que está instalado en un ordenador, smartphone o tablet) hasta el servidor OpenVPN de pfSense. Un detalle muy importante, es que el servidor OpenVPN debe estar instalado en una conexión a Internet fuera de CG-NAT, y con las reglas en el firewall abiertas para permitir la conexión, de lo contrario, no podremos conectarnos a través de Internet.
Por supuesto, en el servidor podremos añadir diferentes subredes para enrutar el tráfico a través de las diferentes subredes que tengamos en el pfSense, e incluso podremos configurar en el firewall si queremos permitir o no esos accesos desde una dirección IP del servidor OpenVPN en concreto. Con OpenVPN tenemos dos formas de gestión de los paquetes y cómo trabajan a nivel de capa de transporte:
- TUN: este modo de funcionamiento permite encapsular todos los paquetes que se transportan a través de él como segmentos TCP o datagramas UDP. Todos los clientes se les proporcionará una subred nueva específica, por defecto la subred de OpenVPN es la 10.8.0.0/24 pero podremos configurar la que nosotros queramos.
- TAP: este modo de funcionamiento simula una interfaz de red Ethernet, también se conoce como puente o bridge, y este túnel virtual lo que hace es encapsular directamente paquetes Ethernet. El modo de funcionamiento puente es útil para intercomunicar usuarios remotos de manera fácil, pero si la red privada de origen coincide con la de destino, tendremos un problema de enrutamiento y la comunicación no funcionará.
En este tutorial para configurar OpenVPN en pfSense usaremos una subred virtual 10.8.0.0/24 donde tendremos a todos los clientes VPN cuando se conecten, será muy fácil identificar a los diferentes clientes VPN que tenemos conectados a la red, además, podremos «forzar» a que cada cliente con un certificado en concreto siempre tenga la misma dirección IP privada del túnel VPN.
En este manual os vamos a enseñar cómo realizar una configuración de OpenVPN muy segura en pfSense, personalizando los algoritmos de cifrado simétrico, asimétrico y de hash. De esta forma, podremos tener el mejor cifrado posible de las comunicaciones.
Resumen de la criptografía a utilizar
- Certificados digitales: OpenVPN permite hacer uso de certificados digitales basados en RSA o también EC (Curvas Elípticas), nosotros haremos usa del algoritmo de EC secp521r1, aunque tenemos disponibles muchos otros a través de la gestión de certificados de pfSense. El algoritmo hash que utilizaremos será SHA512, uno de los más seguros que podemos usar actualmente. Todos los clientes VPN a partir de la versión 2.4 deberían ser compatibles con esta configuración, en nuestro caso, tanto el servidor como los clientes hacen uso de OpenVPN 2.5 o superior, por lo que no debería haber problemas.
- Canal de control OpenVPN: utilizaremos TLS 1.3 para tener la máxima seguridad, y siempre utilizando PFS (Perfect Forward Secrecy). Utilizaremos las tres suites criptográficas de TLS 1.3 para establecer la comunicación: TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256 y TLS_AES_128_GCM_SHA256. Si quieres comprobar si tu servidor o cliente soporta este tipo de cifrado, deberás poner en consola «openvpn –show-tls».
- Canal de datos OpenVPN: utilizaremos el algoritmo de cifrado simétrico AES-256-GCM, uno de los más seguros actualmente y que se ha incorporado la compatibilidad en OpenVPN 2.4 y posterior. No obstante, también haremos uso de CHACHA20-POLY1305 y AES-128-GCM para que el cliente VPN elija el que quiera, dando prioridad al primero de ellos. Si quieres comprobar si tu servidor o cliente soportan estos tipos de cifrado, deberás poner en consola «openvpn –show-ciphers».
Para definir en el canal de datos que queramos hacer uso de TLS 1.3, tendremos que usar la directiva «tls-ciphersuites» en lugar del típico «tls-cipher» como hemos usado siempre. Quedaría de la siguiente forma:
tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
Adicionalmente a estas medidas de seguridad, incluiremos una firma HMAC para la primera negociación de TLS, esto nos permitirá proteger el servidor OpenVPN frente a posibles ataques DoS. Si el cliente no posee la firma HMAC correcta, automáticamente es bloqueado y no pasará a comprobar los certificados digitales. Haremos uso de tls-crypt que está disponible a partir de OpenVPN 2.4 y siguientes, para tener la mejor seguridad porque nos permite autenticar y cifrar el canal para que nadie sea capaz de capturar esta clave precompartida.
Por último, utilizaremos el protocolo UDP en lugar de TCP, porque es más fuerte frente a ataques de denegación de servicio, debemos recordar que UDP es no conectivo, no fiable y no orientado a conexión. No obstante, podremos usar TCP sin ningún problema para dotar a la VPN de todos los beneficios de este protocolo.
Ventajas de usar pfSense
pfSense incluye una gran lista de paquetes, los cuales nos permiten aumentar sus funciones de forma sencilla, de forma que no se comprometa la seguridad e integridad del sistema. Todo esto empleando un cortafuegos SP basado en reglas. Entre otras ventajas podemos destacar algunas como:
- Puede realizar cifrados dinámicos de los paquetes.
- Se trata de software libre.
- Cuenta con una gran comunidad.
- Se actualiza constantemente para ser más segura.
- Aprovecha muy bien el hardware, de forma que logra un mejor rendimiento.
- Nos permite realizar enrutamiento.
- Acepta generar restricciones de ancho de banda a base de la prioridad del tráfico.
- Opción de uso de diferentes tecnologías de VPN. Como pueden ser OpenVPN, L2TP o IPsec.
- Permite el balanceo de carga entre diferentes ISP.
- Establece DNS dinámico, en caso de que se cuente con una IP pública estática.
- Dispone de conexión a servicios como DynDNS para buscar nuevos Firewall.
- Admite asignación de direcciones IP de forma automática a los usuarios de la red LAN.
- Posibilidad de deshabilitar la filtración para utilizarlo como router.
- Se puede monitorizar de red de forma gráfica y por consola.
- Contiene un bandwidth, para poder visualizar gráficos de uso de ancho de banda.
Rendimiento de pfSense
Cuando hablamos de pfSense, tenemos que hablar de un sistema que es muy conocido por sus capacidades para manejar grandes volúmenes de tráfico. Esto lo hace sin que se llegue a comprometer la estabilidad de los sistemas. Por lo cual está diseñado para poder trabajar con entornos donde es necesario un rendimiento muy alto, y una conectividad confiable y sobre todo, segura. Pero una de sus mejores características, es la capacidad de procesamiento de paquetes a altas velocidades. Donde utiliza una arquitectura muy optimizada junto con diferentes técnicas de enrutamiento, que hacen de este proceso algo mucho más eficiente y rápido con los paquetes de datos.
Por otro lado, si no nos llegará con este rendimiento, podemos utilizar todas sus medidas de configuración y personalización. Esto nos permite adaptarlo a las necesidades que requerimos, y sobre todo las específicas para nuestra red. Lo cual le da un alto nivel de adaptabilidad. Esto es un proceso muy sencillo, ya que tenemos un interfaz que facilita mucho todas estas tareas de administración y configuración. Lo cual, combinado con las demás funcionalidades, puede hacer que el rendimiento mejore, y tengamos un control mucho mayor sobre toda la estructura de nuestra red en estos términos.
Aparte, podremos implementar otras tecnologías de seguridad. Sean VPNs, filtros de contenido o incluso detecciones de intrusión. Estas al ser elegibles, también nos permite adaptar más si cabe el rendimiento que vamos a necesitar. Suplementando a todas las funciones de seguridad. Todo esto hace que la escalabilidad sea un punto fuerte de pfSense. Lo cual es muy necesario no solo por el crecimiento de la red, sino para que todo siga funcionando de la forma más óptima posible y sin problemas en todos los dispositivos. Sean en los que está instalado pfSense, como en todos los que están en la misma red.
Pero una de sus más llamativas ventajas, es que es muy sencillo de utilizar y configurar, no siendo necesarios amplios conocimientos en la línea de comandos de UNIX.
Requisitos para instalar pfSense
Para llegar a instalar sin inconvenientes el sistema pfSense para mejorar la seguridad y usar el plugin OpenVPN, lo cierto es que debes tener en cuenta que se deben contar con una serie de requisitos mínimos en el equipo para que su instalación se complete sin problemas. Por ello, debes tener en cuenta los siguientes elementos:
- Hace falta un procesador 600Mhz, aunque es recomendable que sea una opción superior y que cuente con 64 Bits.
- Mínimo 512 MB de RAM, no obstante, nuevamente es mejor alternativa tener más memoria RAM para evitar problemas.
- Mínimo 4 GB de espacio de disco duro, aunque al igual que en opciones anteriores, si se tiene más, mejor.
- 2 tarjetas de red. Una que se corresponda a la LAN y otra a la WAN.
- Puerto USB o DVD si lo tenemos en ISO.
- Contar con conexión a Internet.
Instalar el plugin OpenVPN Client para generar la configuración
Aunque OpenVPN se encuentra instalado por defecto en pfSense, ya sea en su modo de servidor o cliente, no tenemos un paquete preinstalado que nos permita generar automáticamente la configuración para los clientes. Si nos vamos al gestor de paquetes en «System / Package Manager» y nos vamos a la pestaña de «Available Packages» podremos instalar el paquete «OpenVPN-client-export» que nos permitirá realizar justamente esta acción, para facilitarnos enormemente la configuración de los clientes, importando la configuración del servidor con sus correspondientes certificados digitales.
Gracias a este paquete adicional que podemos instalar de forma opcional, el plugin será capaz de detectar la configuración de OpenVPN que hayamos realizado en el servidor, e incluso podrá detectar los certificados digitales orientados específicamente al servidor OpenVPN y a los clientes VPN, de esta forma, podremos exportar la configuración con todo lo necesario para realizar la comunicación sin necesidad de crear nosotros desde cero este archivo de configuración. Aunque si has trabajando anteriormente con este software, sabrás que no tiene demasiada dificultad, e incluso es posible que tengas plantillas para crear la configuración desde cero, es muy útil este plugin, sobre todo para no complicarnos la vida creando todos los ficheros de configuración desde cero.
Cuando lo instalamos, si no tenemos los certificados digitales creados o si no tenemos un servidor VPN levantado, no realizará ninguna función. En la parte final de este tutorial podréis ver en detalle cómo se utiliza para generar los certificados.
Una vez instalado, estaremos listos para pasar al siguiente paso, crear los certificados digitales.
Crear los certificados digitales en el propio pfSense
Para configurar un servidor OpenVPN con autenticación «Remote access SSL/TLS» deberemos hacer uso de unos certificados digitales. Tendremos que crear una autoridad de certificación (CA) con la que firmar los diferentes certificados, tenemos que crear un certificado específico para el servidor OpenVPN y de tipo servidor, así como todos los certificados digitales de los clientes VPN que queramos dar de alta.
También podremos crear una lista de revocación de certificados, si un certificado se ve comprometido porque lo hemos perdido, podremos anularlo directamente para que no sea válido. En caso de que un usuario ilegítimo lo utilice, no podrá conectarse a nuestro servidor VPN de ninguna forma, dará error automáticamente porque la CA se encargará de detectar que ese certificado ha sido revocado.
Además de crear certificados digitales para firmarlos, las CA también se encargan de revocar los diferentes certificados. En el caso de este software de VPN podremos crear una lista de revocación de certificados que consultará con cada conexión de VPN que se realice.
Crear la CA (Autoridad de Certificación)
Una autoridad de certificación, es una entidad de confianza de un emisor y receptor de un mensaje. La confianza entre ambos extremos, permite que cualquiera de los dos confíe en los mensajes de esta forma. De esta forma llegan identificados por un propietario, lo que nos lleva a los certificados.
En la sección de «CAs» es donde debemos pinchar en «Add» para crear una nueva autoridad de certificación, hacer esto es fundamental para hacer funcionar correctamente todos los certificados digitales, tanto el del servidor como los de los clientes VPN que se vayan a conectar. En este menú deberemos elegir las siguientes opciones:
- Create /Edit CA
- Descriptive Name: ponemos un nombre descriptivo a esta CA, el que nosotros queramos.
- Method: Create an internal Certificate Authority.
- Internal Certificate Authority
- Key type: ECDSA con secp521r1 que es compatible con OpenVPN.
- Digest Algorithm: sha512
- Lifetime Days: 3650 (10 años)
- Common-name: el CN debe ser un nombre descriptivo, que describa inequívocamente a esta CA. En nuestro caso solamente tenemos una CA para OpenVPN, así que hemos puesto simplemente «openvpn-ca»
- Country Code: none. Esto ya no es necesario rellenarlo en los nuevos certificados de OpenVPN.
La configuración de la CA quedaría de la siguiente forma:
En los diferentes menús podremos elegir otras opciones de configuración, como importar una CA que ya tengamos creada, o crear una CA intermedia, nosotros vamos a crear una CA y después los certificados, sin usar ninguna CA intermedia.
También podremos elegir entre RSA o ECDSA, e incluso usar diferentes longitudes de clave de RSA y diferentes algoritmos EC para la creación de la CA. En «Digest algorithm» podremos elegir diferentes algoritmos de hash, los más recomendables son sha256, sha384 y sha512, nunca deberías utilizar sha1 por seguridad.
Una vez creada la CA, nos aparecerá en el listado de CA como podéis ver aquí:
En este menú podremos ver la cantidad de certificados que tiene asociados, el CN, la validez del certificado y si actualmente tenemos esta CA en uso. Cuando tenemos una CA o un certificado en uso, no podremos eliminarlo. En la sección de «Actions» podremos editar la descripción del certificado, exportar la clave pública de la CA, la clave privada, renovar la CA e incluso eliminar la CA que acabamos de crear.
Crear el certificado del servidor OpenVPN
Cuando hablamos de un certificado, nos referimos a un fichero que se emite desde la Autoridad de Certificación, y que nos garantiza que existe un vínculo entre la identidad de un usuario o sistema y su clave pública. Por lo tanto, hace que se pueda confiar en ese emisor o receptor
Ahora tenemos que crear el certificado que usará al servidor OpenVPN integrado en pfSense. Nos vamos a la sección de «Certificates» y pinchamos en «Add/Sign», siempre tendremos un certificado preconfigurado en pfSense porque el protocolo HTTPS lo utiliza para poder conectarse, de lo contrario, no podría funcionar. Este certificado lo crea automáticamente al realizar la instalación del sistema operativo.
El menú de creación de los certificados es muy similar al anterior, tendremos que elegir entre tres opciones:
- Method:
- Create an internal certificate.
- Import an existing certificate.
- Create a certificate signing request.
- Sign a certificate signing request.
Nosotros vamos a seleccionar la primera opción, crear un certificado interno.
A continuación, tendremos que ponerle un nombre descriptivo, el que nosotros queramos, y la configuración debe ser la siguiente:
- Add / Sign a New Certificate
- Method: Create an internal Certificate Authority.
- Descriptive Name: ponemos un nombre descriptivo a este certificado, el que nosotros queramos.
- Internal Certificate
- Certificate Authority: debemos elegir la CA anterior que acabamos de crear en el paso anterior.
- Key type: ECDSA con secp521r1 que es compatible con OpenVPN. El mismo que la CA.
- Digest Algorithm: sha512
- Lifetime Days: 3650 (10 años)
- Common-name: el CN debe ser un nombre descriptivo, que describa inequívocamente a este certificado del servidor. En nuestro caso solamente tenemos un certificado para servidor, así que hemos indicado openvpn-servidor simplemente.
- Country Code: none. Esto ya no es necesario rellenarlo en los nuevos certificados de OpenVPN.
Si tenemos un certificado con una duración superior a 398 días es posible que nos de fallos en algunas plataformas, esto es de forma general, pero no para OpenVPN. Por tanto, podremos poner la duración que nosotros queramos sin problemas, no nos dará fallo.
En la parte inferior, deberemos elegir las siguientes opciones:
- Certificate Attributes:
- Certificate Type: server certificate
- Alternative Name: lo podemos dejar sin nada, completamente vacío.
Debemos tener en cuenta que ahora mismo estamos configurando el certificado digital para el servidor OpenVPN, por tanto, debemos elegir «Server Certificate».
La sección de «Alternative Name» se suele utilizar para los certificados de IPsec, pero no lo usaremos en OpenVPN.
Una vez creado, lo veremos en el listado de certificados, además, también podremos ver la CA con la que hemos firmado el certificado y si es de tipo servidor.
Este certificado digital para el servidor es el que tendremos que poner a la hora de configurar el servidor OpenVPN en el pfSense, debemos acordarnos muy bien del nombre que le hemos dado, porque después nos sacará un listado con todos los certificados.
Crear los certificados de todos los clientes
Para crear uno o varios certificados digitales para los clientes, debemos hacer exactamente el mismo proceso que para el certificado del servidor.
- Add / Sign a New Certificate
- Method: Create an internal Certificate Authority.
- Descriptive Name: ponemos un nombre descriptivo a este certificado del cliente.
- Internal Certificate
- Certificate Authority: debemos elegir la CA anterior que hemos creado en el primer paso.
- Key type: ECDSA con secp521r1 que es compatible con OpenVPN. El mismo que la CA.
- Digest Algorithm: sha512
- Lifetime Days: 3650 (10 años)
- Common-name: el CN debe ser un nombre descriptivo, que describa inequívocamente a este certificado del cliente. En nuestro caso solamente tenemos un certificado para cliente, así que hemos indicado openvpn-cliente1 simplemente.
- Country Code: none. Esto ya no es necesario rellenarlo en los nuevos certificados de OpenVPN.
En la sección de «Certificate Attributes» tendremos que configurarlo de la siguiente forma:
- Certificate Attributes:
- Certificate Type: user certificate
- Alternative Name: lo podemos dejar sin nada, completamente vacío.
Una vez creado, podremos ver el listado nuevo de certificados creados en pfSense.
Si pinchamos en editar, lo único que podremos hacer es modificar el nombre descriptivo, pero también podremos exportar la clave privada con una contraseña de paso, si ponemos clave, la propia clave privada se cifrará con AES-256-CBC para proteger su contenido, y, por tanto, evitar que si cae en malas manos puedan leerlo y utilizarlo. Esto es lo que hemos usado nosotros para exportar el certificado de los clientes, como posteriormente os enseñaremos.
Si queremos crear más certificados de clientes lo podremos hacer de la misma forma, lo único que tenemos que hacer es poner una descripción diferente y también un CN diferente.
Una vez que hayamos terminado de crear todos los certificados de los clientes que se van a conectar al servidor OpenVPN, procedemos a configurar paso a paso el servidor.
Configurar el servidor OpenVPN con todas las opciones explicadas
Para configurar el servidor OpenVPN, lo único que tenemos que hacer es irnos al menú principal de pfSense, pinchar en la sección de «VPN» y seleccionar «OpenVPN«. En este menú es donde tendremos todas las opciones de configuración disponibles para empezar con la configuración avanzada y con la mejor seguridad posible de este servidor VPN que nos proporcionará acceso a la red profesional o doméstica, y también reenvío de tráfico de forma opcional.
En la sección de «OpenVPN» debemos pinchar en «Servers» y pinchamos en «Add» para agregar un nuevo servidor OpenVPN. Hay una opción de «Wizards» que nos permitirá crear el servidor VPN paso a paso con un asistente de configuración, y posteriormente editar la configuración creada para adaptarlas a nuestras necesidades. No obstante, es mejor crear desde cero el servidor con la mejor seguridad posible, ideal para no tener ningún tipo de problema. Con este tutorial podrás configurar esta VPN con la mejor seguridad posible, aunque debemos recordar que la seguridad al 100% no existe, además, podríamos configurar de manera opcional un «segundo factor de autenticación» basado en un servidor RADIUS que podemos instalar en pfSense.
Dentro de la configuración del servidor OpenVPN, deberemos elegir las siguientes opciones:
- General Information:
- Server Mode: Remote Access (SSL/TLS)
- Protocol: UDP
- Device Mode: tun
- Interface WAN
- Local Port: 1194, por defecto es este puerto, es recomendable cambiarlo.
- Description: ponemos una descripción de este servidor OpenVPN, porque podremos crear varios.
Ya en la sección de «Protocol» tenemos diferentes opciones de configuración, por defecto es «UDP on IPv4 only», ya que también podremos usar TCP, e incluso TCP y UDP, y también para las redes IPv6, si es que usamos este protocolo de red. Dentro de la sección de «Device Mode» podremos elegir tun o tap, como os hemos explicado anteriormente, tun es a nivel de capa 3, y tap es a nivel de capa 2, con sus puntos fuertes y sus puntos débiles. En la sección de «Interface» lo más normal es utilizar la WAN, pero podremos estar escuchando con este servidor OpenVPN en todas las interfaces. Por último, en «Local port» podemos modificar el puerto TCP y/o UDP que nosotros queramos, es recomendable no utilizar el puerto por defecto que es el 1194.
Ya en la sección de «Cryptographic Settings» podremos configurar todo respecto a los certificados digitales SSL/TLS, a continuación, os explicamos todas las opciones:
- Cryptographic Settings
- TLS Configuration: habilitamos usar una clave TLS, para hacer uso del tls-crypt, pinchamos en generar automáticamente la clave TLS. Al guardar los cambios, nos aparecerá si queremos usar «Autenticación» o también «Encriptación», es recomendable este último para hacer uso del nuevo tls-crypt en lugar de tls-auth que teníamos anteriormente.
- Peer Certificate Authority: seleccionamos la CA que hemos creado en el propio pfSense para este servidor OpenVPN.
- Peer certificate Revocation list: si creamos una lista de revocación de certificados, lo creamos en la sección de «System > Cert.Manager» y seleccionamos aquí el listado que lo hemos creado anteriormente.
- Server Certificate: elegimos el servidor OpenVPN, en nuestro caso, es «OpenVPN_ServidorOVPN (Server: Yes)»
- DH Parameter Length: ECDH Only
- ECDH Curve: elegimos secp521r1
En la sección de «Data Encryption Negotiation» lo habilitamos, y elegimos los cifrados simétricos que queremos usar para el canal de datos. En nuestro caso, hemos elegido un total de 3: AES-256-GCM, AES-128-GCM y también el nuevo CHACHA20-POLY1305 que han incorporado recientemente. También deberemos elegir un algoritmo de «Fallback» por si el cliente OpenVPN no es compatible, en este caso elegimos AES-256-CBC, pero si quieres la máxima seguridad, os recomendamos elegir AES-256-GCM para forzar a que no se conecte si no usamos cifrados robustos, nada de usar AES-256-CBC, si hay clientes antiguos debemos actualizarlos.
Luego, en»Auth Digest Algorithm» elegiremos SHA256 o SHA512, siempre funciones hash seguras.
Ya en la sección de «Hardware Crypto»: si tenemos aceleración de cifrado por hardware, lo elegiremos aquí para que funcione más rápida la conexión a la VPN, si no tenemos o no queremos habilitarla, dejamos el valor por defecto.
En «Certificate Depth» seleccionamos «One (Client + Server)».
Y en la sección de «Tunnel Settings» tendremos que configurar las siguientes opciones:
- IPv4 Tunnel Network: pondremos la subred específica para los clientes OpenVPN, debe ser una subred libre que no hayamos utilizado anteriormente. En nuestro caso hemos elegido la 10.8.0.0/24 que es la de por defecto en este software, pero podremos usar cualquier subred.
- IPv6 Tunnel Network: lo mismo que en IPv4, pero si utilizas redes IPv6.
- Redirect IPv4 Gateway y IPv6: si habilitamos esta opción, todo el tráfico de los clientes OpenVPN pasarán por el servidor OpenVPN y tendrán acceso a todas las subredes del sistema operativo, podremos bloquear el acceso a ciertas subredes a través de las opciones de configuración del firewall, pero los clientes recibirán la ruta para llegar a todas las subredes. Si vamos a hacer Full-Tunnel VPN activamos esta opción, si vamos a usar Split-Tunnel entonces lo deshabilitaremos, y tendremos que introducir abajo las subredes a las que queremos que tengan acceso.
- Concurrent Connections: 10, es el número máximo de clientes conectados simultáneamente, esto dependerá de tus necesidades.
- Allow Compression: Refuse, no queremos compresión para evitar ataques.
- Push Compression: podremos proporcionar esta opción de compresión (sin compresión) a los clientes.
- Inter-client communication: podremos permitir o denegar que los clientes OpenVPN se puedan comunicar entre ellos, por seguridad es recomendable desactivarlo, pero en ciertos casos es necesario e incluso recomendable que haya comunicación, esto dependerá de tus necesidades.
- Duplicate Connection: esta opción normalmente debería estar desactivada, cada cliente OpenVPN debería tener sus propias credenciales, y no usar el mismo cliente con el mismo certificado para conectarnos. Esta opción es útil si queremos usar los mismos certificados en nuestro smartphone, ordenador y tablet (3 dispositivos), y vamos a conectarnos simultáneamente. Nuestra recomendación es emitir un certificado por cada dispositivo.
En «Client Settings» podremos proporcionar a los clientes una IP dinámica, luego podremos especificar que cada cliente tenga una IP del rango 10.8.0.0/24 específico. En «Topology» elegimos «subnet» que es mucho más eficiente que net30 que es la forma antigua.
Después, en»Ping Settings» podremos configurar los pings para ver si un cliente sigue conectado o ha perdido la conectividad.
En «Advanced Client Settings» podremos configurar los servidores DNS, ya sean servidores DNS externos como el popular 8.8.8.8 o un servidor DNS local del propio pfSense. También podremos seleccionar la opción de «Bloquear el acceso a servidores DNS» excepto los del túnel VPN para mejorar la seguridad.
En la sección de «Advanced Configuration» podremos añadir reglas adicionales avanzadas que no tenemos en la interfaz gráfica de usuario, por ejemplo, nos interesa que siempre negocie con TLS 1.3 como mínimo, si un cliente no es compatible no se conectará, porque no estaremos permitiendo TLS 1.2.
Tal y como os hemos explicado antes, al guardar por primera vez la configuración del servidor OpenVPN, en la sección de «TLS Key» nos saldrá la clave TLS generada automáticamente por pfSense, y deberemos elegir «TLS Encryption and Authentication».
Una vez configurado, podremos ver el resumen de la configuración a continuación:
Otra configuración que podremos realizar respecto a las rutas, es que, en lugar de forzar a todos los clientes a enviar todo el tráfico por el túnel VPN, podremos definir que solamente podamos acceder a ciertas redes, las que nosotros queramos, y automáticamente los clientes recibirán las rutas a estas redes.
Una vez que hemos configurado el servidor OpenVPN, vamos a configurar el firewall para permitir conexiones entrantes.
Configurar las reglas en el firewall para permitir acceso
En la sección de «Firewall / Rules» pinchamos en WAN, y creamos una regla con los siguientes valores:
- Action: PASS
- Interface: WAN
- Address Family: IPv4
- Protocol: UDP
- Source: Any, cualquier origen ya que no sabemos siempre qué IP pública vamos a tener
- Destination: WAN Address en el puerto OpenVPN 1194, o en el puerto que hayamos configurado el servidor.
Guardamos y ya tendremos la regla creada en la WAN de Internet.
Ahora nos tenemos que ir a la sección de «Firewall / Rules / OpenVPN», en esta sección es donde vamos a definir los accesos de los clientes OpenVPN. Si queremos permitir que los clientes OpenVPN accedan a cualquier subred de pfSense y también a Internet, tendremos que crear una regla de «Pass todo», definiendo lo siguiente:
- Action: PASS
- Interface: OpenVPN
- Address Family: IPv4
- Protocol: Any
- Source: Any
- Destination: Any
Si queremos crear reglas específicas para denegar el tráfico a ciertas subredes, pues tendremos que crear reglas que cumplan esta condición.
Una vez que ya tenemos acceso desde la WAN de Internet, y también a cualquier subred del sistema operativo y redirección a Internet, vamos a exportar el archivo de configuración OpenVPN para los clientes.
Exportar el archivo de configuración OpenVPN para los clientes
Nos vamos a la sección de «VPN / OpenVPN / Client Export», aquí configuraremos la extensión para generar la configuración automática para los clientes:
- Remote Access Server: elegiremos el servidor VPN que hayamos configurado, podemos tener varios, por tanto, elegiremos el que nos interese.
- Host Name resolution: el dominio DDNS que tengamos configurado en pfSense, o la dirección IP de la WAN, tendremos varias posibilidades.
- Verify Server CN: Automatic – use verify-x509-name
- Block outside DNS: habilitamos esta opción.
- Use random local port: habilitamos esta opción.
Una vez configurado todo lo anterior, deberemos pinchar en los clientes a exportar, lo más normal es seleccionar «Inline Configurations: Most Clients» y nos exportará en un mismo archivo de configuración la CA, clave pública y privada del certificado del cliente, y toda la configuración.
Nuestra recomendación es elegir esta opción de «Inline Configurations: Most Clients», pero añadiendo la clave privada del cliente cifrada, para que si este archivo de configuración cae en malas manos, no pueda acceder a nuestro servidor VPN. Para exportar la clave privada cifrada, debemos irnos a la sección de «System / Cert Manager» e irnos a «Edit» el certificado del cliente, ponemos una contraseña de paso y pinchamos en «Export private Key»:
Y ahora con un editor de texto, abrimos esta clave cifrada y el archivo de configuración recién descargado:
- En el archivo de configuración completo de OpenVPN borramos todo lo que hay dentro de «<key></key>»
- Copiamos el contenido completo de la clave privada exportada dentro de «<key></key>» y guardamos cambios.
Ahora, al usar la clave privada para conectarnos al servidor, tendremos que introducir esta contraseña que protege el certificado. Ahora vamos a comprobar que el servicio está levantado, y nos conectaremos con el primer cliente.
Comprobar estado del servicio y de los clientes conectados
En la sección de «Status / OpenVPN» podremos ver si está activado o no, lo activamos y conectaremos el primer cliente sin ningún tipo de problema.
Una recomendación adicional que podéis hacer con pfSense, es proporcionar a un mismo cliente VPN que usa un certificado en concreto, la misma dirección IP siempre. Para hacer esto, simplemente tenemos que meternos en «Client Specific Overrides», añadimos uno nuevo, elegimos el servidor y el CN del cliente específico y en la sección de «Advanced» ponemos:
ifconfig-push 10.8.0.2 255.255.255.0;
Y este cliente VPN con ese determinado CN siempre tendrá esta dirección IP privada dentro del túnel VPN.
Alternativas a PFSense
Puede darse el caso de que PFSense no sea una herramienta que se adapta perfectamente a las necesidades que se requieren. Por lo cual siempre se puede buscar alguna otra opción, buscando ese nivel de complementación con nuestro sistema, o porque resulta más sencilla a los usuarios en sí. Algunas de las alternativas más conocidas son:
- Sophos UTM: Se trata de una herramienta de seguridad que incorpora un Firewall, VPN, antimalware, filtrado web y muchas más características importantes. Por lo cual es una muy buena opción para todos los usuarios que necesitan una solución de seguridad integral para toda su red.
- Zentyal: Se trata de un servidor Linux, el cual está diseñado para que sea utilizado como un firewall, router, servidor de correo, de archivos, y otras muchas aplicaciones que pueden venir muy bien a nivel empresarial, por ejemplo. Es una buena alternativa, ya que resulta muy sencillo de utilizar, y cuenta con una gama de características muy amplia.
- Untangle NG Firewall: Se trata de una completa herramienta de seguridad que incorpora un firewall, conexión VPN, antimalware y filtrado web, entre otras muchas funciones. De nuevo estamos ante una buena opción, ya que resulta simple de utilizar, y nos da muchas características añadidas.
- Fortinet: Se trata de un firewall UTM, con protección completa frente a amenazas y que cuenta con muchas características de seguridad. Entre ellas, podemos destacar la conexión VPN, detección de intrusos, antimalware y filtrado web.
- Checkpoint: Se trata de una gran solución para empresas, ya que cuenta con una gran gama de características en una sola herramienta. Siendo muy recomendable para empresas, sobre todo.
- MikroTik: Estamos ante un sistema operativo basado en Linux, que fue específicamente diseñado para funcionar como un firewall, un router o un punto de acceso inalámbricos. Se trata de una de las alternativas más flexibles y escalables.
Estas son solo unas pocas de todas las alternativas a pfSense que nos podemos encontrar. Para elegir la adecuada, lo mejor que podemos hacer es tener un listado de los requerimientos que vamos a tener con estas soluciones. Esto nos ayudará a tomar la mejor decisión posible al elegir una de ellas.