Instalando OpenVPN

En este artículo describiremos cómo realizar una instalación de OpenVPN. Aquí ya hablamos de cómo funciona y qué nos aporta.

Contenido

  • Instalación
  • Configuración
  • Puesta en marcha

Hoy en día, OpenVPN es parte de las distribuciones de Linux más comunes, por lo tanto con el mismo sistema de administración de paquetes de la distribución se lo podrá instalar, y también hay incluídas herramientas de configuración, algunas de ellas con interfaz gráfica, para facilitar la configuración.

En esta guía se instalará un OpenVPN a partir del código fuente, que se puede obtener del sitio oficial.

Antes de instalar: qué hay que saber

Como ya se ha descripto, OpenVPN es un sistema de VPN basado en SSL y por lo tanto se requieren:

  • Certificado de autoridad certificante.
  • Certificado para servidor.
  • Certificado para cada cliente que se conecte.

Esta guía proporcionará instrucciones completas para generar estos certificados durante la configuración, pero si ya se dispone de certificados de este tipo y se desea utilizarlos, se indicará oportunamente cómo hacerlo.

Instalación de OpenVPN

Comenzamos bajando el código fuente desde aquí. Hoy en día, OpenVPN es un sitio que ofrece una versión paga llamada OpenVPN Access Server, y otra llamada “Community”, que es la que se utilizará en esta guía.

Pre-requisitos

Para instalar OpenVPN, se requiere que el sistema ya tenga:
– SSL y las correspondientes bibliotecas para desarrollo (paquetes “-devel”).
– LZO para comprimir el flujo encriptado.
Describir estos requisitos está fuera del alcance de esta guía.

Compilación

Ya disponemos del archivo en formato .tar.gz por lo tanto procedemos a descomprimirlo:

tar xvf openvpn-2.3.2.tar.gz

Esto genera una carpeta openvpn-2.3.2 en donde quedará el código. Vayamos ahí.

cd openvpn-2.3.2

Indicar configure sin parámetros generalmente es suficiente, pero vamos a explorar algunas de las opciones de que disponemos:

  • –enable-iproute2. Hoy en día las distribuciones modernas se alejan del típico conjunto de comandos BSD para configurar la red, y utilizan el nuevo paquete iproute2. Si se desea utilizar iproute2, hay que agregarlo especialmente con esta opción.
  • –enable-systemd. También nuevo, el Systemd es un sistema de inicialización del sistema que reemplaza el ya antiguo SystemV con el que tradicionalmente los Linux se instalan.
  • –enable-selinux. Para utilizar la seguridad avanzada que proporciona SELinux, utilizar esta opción.

Realizamos entonces la configuración del fuente:

configure --enable-systemd --enable-iproute2

Iniciamos la compilación:

make

Instalación:

-- Obtener permisos de root --
make install

Configuración

Ahora pasaremos a la configuración de OpenVPN.

Routed o bridged?

Esta es una complicada pregunta que merecería todo un capítulo explicativo. No nos vamos a detener mucho en esto, asumo que la gente que requiere esta guía está más o menos al tanto y tiene acceso a lugares como este donde se explica a grandes rasgos la diferencia entre las dos cosas.

En resumidas cuentas, significa que bridged convierte a OpenVPN en un "puente" (para los entendidos, un ethernet bridge, nivel 2) que une a los clientes de red privada virtual con el resto de la red interna. O sea que para las computadoras de la red se hace transparente el lugar físico donde están. En cambio, routed crea una red separada (que nosotros podemos especificar) para colocar ahí a los clientes de red privada virtual, y el servidor que contiene el OpenVPN debe actuar de router entre los clientes de red privada virtual y el resto de la red.

En mi experiencia de administrador de una red con OpenVPN les puedo decir lo siguiente: ambos enfoques tienen ventajas y desventajas y son apropiados para unas situaciones u otras. Si se desea tener un mayor control de a qué está autorizada una persona a ver cuando se conecta a una red privada virtual, entonces hay que elegir routed: los paquetes de OpenVPN se inyectan antes del firewall y por lo tanto deben agregarse reglas específicas en el firewall para permitir este tráfico, y a su vez, se puede controlar a qué redes dar acceso por esa razón. Si se desea usar algún servicio de red que depende de la existencia del Broadcast, como por ejemplo archivos compartidos de Windows (esto implementado tanto con un servidor Windows como con un Samba), se debe utilizar bridged. El problema con una red bridged, es que a medida que se conectan más y más clientes, se transmite mucho más tráfico y la utilidad de este sistema se reduce. Para una red de pocos usuarios, en la que además se desea archivos compartidos y demás, se recomienda bridged. Para una red grande, o de múltiples tipos de usuario que cada uno debe acceder a cosas distintas, y que se requiere tener un control de qué se necesita dar permiso, se recomienda routed.

Los parámetros a configurar para uno u otro enfoque son muy pocos y se notará específicamente la diferencia.

Bridged

En mi caso quiero instalar una configuración Bridged. Como recomienda la documentación oficial, es mejor partir de una configuración básica y hacer las modificaciones necesarias.

Parámetros relevantes:

dev tap
dev-node VPN
server-bridge 192.168.1.40 255.255.255.0 192.168.1.41 192.168.1.80

dev tap indica que se desea utilizar ethernet bridging. Para eso, se le otorga una IP a la placa que hará de puente, y se designa un rango de direcciones IP entre las cuales asignar a los clientes. dev-node es para los clientes Windows: en ellos se deberá crear un dispositivo TUN/TAP (el cual se crea solo durante la instalación del cliente OpenVPN para Windows) y luego renombrar el dispositivo de manera tal que tenga el nombre dicho en el parámetro, en este caso VPN.

Certificados

Si ya se cuenta con certificado de la autoridad certificante, del servidor, y de los clientes, colocarlos en los siguientes parámetros relevantes:

ca ca.crt
cert server.crt
key server.key  # This file should be kept secret

De lo contrario, a continuación explicaré cómo generar todos los certificados necesarios utilizando EasyRSA, que antes era parte de OpenVPN pero ahora es una aplicación separada. EasyRSA es un paquete que contiene un script bash y un archivo de configuración de OpenSSL para facilitar la creación de certificados de autoridad certificante, servidor y clientes.

Pasos para la creación de nuevos certificados

A continuación enumero todos los certificados que hace falta crear para poner en marcha el sistema:

  • Parámetros Diffie-Hellman – importantes para el intercambio inicial de claves al establecer la conexión SSL.
  • Parámetros para generar un firewall de HMAC – importantes para aumentar la seguridad de OpenVPN más allá de lo provisto por SSL, en los cuales se evitan ataques DoS y UDP port flooding.
  • Certificado y clave de autoridad certificante – se usará para firmar todos los certificados subsiguientes, y este a su vez estará auto-firmado.
  • Certificado y clave de servidor.
  • Certificado y clave para cada cliente que se desee.

Pasemos entonces a generar todos estos certificados. Para los parámetros Diffie-Hellman, se incluye el comando en la configuración del OpenVPN:

openssl dhparam -out dh2048.pem 2048

Para los parámetros de firewall HMAC:

openvpn --genkey --secret ta.key

Para los certificados, bajamos EasyRSA en un directorio a elección de aquí. Extraemos el paquete e iniciamos la generación:

tar xvf easyrsa.tar.gz

Se generará un directorio llamado EasyRSA-3.0.0rc1. De ahí se necesita el archivo easyrsa (script de bash), openss-1.0.cnf (configuración de OpenSSL) y vars.example (variables de configuración). Van a tener que renombrar vars.example a vars y luego trabajar ahí para completar a conveniencia los parámetros que luego se inyectarán en el script easyrsa al momento de generar las claves.

Una vez editados los parámetros, todo lo demás funcionará solo, gracias al script easyrsa:

./easyrsa init-pki
./easyrsa build-ca
./easyrsa build-server-full
./easyrsa build-client-full

Con estos comandos ya se generaron todos los certificados necesarios. Ahora vamos a identificar cada uno de ellos:

Archivo Propósito Secreto o compartido? Ubicación (servidor/cliente)
ca.crt Certificado público de la entidad certificante Compartido Servidor y clientes

Be the first to comment

Leave a Reply

Your email address will not be published.


*