Configurar VPN con OpenVPN en Ubuntu

OpenVPN es una herramienta estupenda para tunelizar conexiones de una forma segura
Quién sabe cuando vamos a necesitar acceder a Internet sin peligro. Puede que queramos acceder a nuestra red local para ver alguna película o pasarnos un proyecto que olvidamos en casa. Para ello podemos configurar nuestro propio servidor de VPN.

En este tutorial nos centraremos en OpenVPN, el sistema de túnel de VPN nativo de linux, que destaca sobre los demás en seguridad y es de código libre. Los pasos a seguir son los siguientes:

1/5. Crear una autoridad certificadora y generar certificados con easy-RSA
OpenVPN se basa en OpenSSL para implementar la criptografía SSL/TLS. Para ello tenemos dos opciones:

Configurar una clave privada compartida.
Configurar un certificado con el estándar X.509  basado en infraestructura de llave pública.
Para este tutorial utilizaremos la segunda opción, aprovechando que OpenVPN incorpora todo lo necesario para hacerlo.

Antes que nada deberemos proceder a instalar OpenVPN en Raspbian:

Después de la instalación, si nos dirigimos a la carpeta /usr/share/doc/openvpn/examples encontraremos distintas carpetas con ejemplos de configuración, claves, scripts y lo que ahora nos ocupa, con la carpeta easy-rsa, que nos ayudará a crear nuestra propia autoridad certificadora con RSA.

Así que procederemos a copiar esta carpeta de ejemplo a la ubicación que queramos para trabajar con ella:

Y nos dirigimos a su nueva ubicación:

El siguiente paso será editar el archivo vars llenándolo con nuestra información. Así que lo abrimos:

Y rellenamos con nuestros datos. Aquí va un ejemplo:

Después de esto ya estamos listos para exportar los datos del archivo vars.

Podemos comprobar que las variables se han exportado correctamente por ejemplo intentando mostrar el valor de $KEY_CITY por terminal:

Que nos debería devolver el nombre que hayamos introducido, en este caso Barcelona. Ahora ejecutaremos el script clean-all que se encargará de eliminar una posible carpeta de claves anteriormente creada.

Hecho esto vamos a crear el par de claves de la propia Autoridad Certificadora (CA):

Que nos preguntará acerca de los datos configurados anteriormente:
Country Name (2 letter code) [ES]:

Llegados aquí ya somos capaces de generar nuestros propios certificados firmados. Con ello crearemos nuestro certificado para el servidor VPN (clave privada) y los parámetros Diffie-Hellman utilizados para establecer la conexión SSL/TLS. Para el certificado del servidor:

Se nos preguntarán los mismos datos que en el momento de la generación de los certificados de la CA, con lo que contestaremos con los datos deseados y seguiremos las instrucciones. Ahora vamos con los parámetros Diffie-Hellman:

Y por último con la clave para cada uno de los usuarios que se conecten vía VPN:

Y seguiremos los pasos rellenando los campos que se nos pregunten. Si ahora nos vamos a la carpeta ./keys (o la que hayamos asignado en el archivo vars) encontraremos un buen puñado de archivos con distintos fines. Vamos ver qué nos interesa de aquí para esta parte del tutorial:

ca.crt: Este es el certificado público de la CA, que tendremos que usar en todos los clientes y en el servidor.
raspberry.home.local.crt y raspberry.home.local.key: Certificado público y privado respectivamente del servidor. Solo los usaremos en el servidor.
dh1024.pem: Los parámetros Diffie-Hellman que se ubicarán sólo en la carpeta de OpenVPN del servidor.
Nombreusuario.crt y Nombreusuario.key: Certificados público y privado de usuario que utilizaremos en los dispositivos de dicho usuario.
Así que vamos a distribuir los distintos archivos en su sitio dentro del servidor:

NOTA: La ubicación de los certificados se puede configurar a mano en el archivo de configuración correspondiente de OpenVPN, pero los he copiado a los directorios donde se almacenan estos archivos en Raspbian para mantener cierta coherencia en el sistema.

2/5. Archivo de configuración del servidor OpenVPN

3/5. Archivo de configuración del cliente

4/5. Archivo de configuración del firewall (/etc/rc.local). Este archivo se ejecuta en cada arranque del sistema.

5/5. Descomentar la siguiente línea en /etc/sysctl.conf para permitir forwarding

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Contacto