Tunnel with graffiti and lights

Cree su propia red privada virtual de Linux con OpenVPN

Las redes privadas virtuales (VPN) le permiten ocultar sus transmisiones de datos en línea y mejorar su seguridad mientras navega por Internet desde lugares públicos. Muchos proveedores de servicios en línea ofrecen opciones de VPN gratuitas y de pago para su uso. Sin embargo, incluso los planes mejor pagados pueden ser poco confiables o lentos en ocasiones.

Si tan solo pudieras crear tu propia VPN entre tu computadora móvil y la computadora de tu casa.

En realidad, ese proceso es más fácil de lo que piensas. Hoy discutiremos cómo puede usar OpenVPN para crear una conexión segura entre un cliente y un servidor en una máquina Linux.

Tenga en cuenta que crearemos una configuración de enrutamiento y no una puente uno, que debería estar bien para la mayoría de los casos de uso. Los usuarios de Windows pueden seguir leyendo el Documentación de OpenVPN, comenzando con la sección sobre la creación de una Autoridad de Certificación. Los comandos utilizados en Windows serán similares a los que se muestran a continuación.

Que necesitas

Necesitará dos computadoras: una es la máquina servidor y la otra es el cliente. La máquina del servidor puede ser su escritorio doméstico o una instancia de Linux desde océano digital o Linodo. La máquina cliente es la computadora que usa regularmente. Como este tutorial se realiza en Linux, ambas computadoras también deben ejecutar Linux.

Nota: En este tutorial, usaremos Ubuntu como nuestra distribución tanto para el servidor como para la máquina cliente.

Instalación de OpenVPN

Para comenzar, debe instalar OpenVPN y Easy-RSA en su servidor. Luego instale OpenVPN en su máquina cliente.

En Ubuntu, debe instalar Easy-RSA desde esta página de Github. Ubuntu incluye Easy-RSA versión 2 en sus repositorios. El enlace de Github ofrece la versión 3 de Easy-RSA, que sigue los comandos que usaré en este artículo.

sudo apt-get install openvpn
git clone https://github.com/OpenVPN/easy-rsa.git

En el directorio en el que clonó el repositorio de Github, copie el directorio «easyrsa3» que contiene en «/etc/easy-rsa/».

sudo mkdir /etc/easy-rsa
sudo cp -r ./easyrsa3/* /etc/easy-rsa/

Infraestructura de clave pública (PKI)

OpenVPN hace uso de una infraestructura de clave pública (PKI) para establecer la identidad de servidores y clientes para que esas entidades separadas puedan comunicarse entre sí. La PKI utiliza una autoridad de certificación (CA) maestra junto con certificados individuales y claves privadas para cada servidor y cliente.

La CA debe firmar los certificados del servidor y del cliente. OpenVPN luego verifica que el servidor autentique la identidad de cada cliente y, al mismo tiempo, cada cliente verifica la identidad del servidor.

La configuración aquí es más complicada de lo que podría encontrar para las conexiones de estilo PPTP, pero brinda una mejor seguridad a los usuarios y le da al servidor más libertad para aceptar o rechazar las conexiones de clientes entrantes solicitadas.

Creación del certificado CA

Para mayor seguridad, se recomienda que su máquina CA sea diferente de su servidor. Para abreviar, este artículo usará la misma máquina para ambas tareas. Debe modificar sus procedimientos de copia de archivos para adaptarlos a su situación, ya sea utilizando scp para transferencias de red o usando una llave USB para mover archivos manualmente.

Nota: si usa una computadora separada como su CA, necesitará instalar Easy-RSA en esa máquina.

1. Cambie los directorios a “/etc/easy-rsa/:”

2. Si es necesario, copie “/etc/easy-rsa/vars.example” a “/etc/easy-rsa/vars”. Luego, abra vars para editar su contenido:

sudo cp ./vars.example ./vars
sudo nano ./vars

3. Ingrese los detalles como su país, provincia, ciudad, organización y correo electrónico. Descomente las líneas que se muestran aquí eliminando el «#» al comienzo de cada una.

Variables de OpenVPN

Una vez que haya terminado con la edición, guarde (Ctrl + o) y salga (Ctrl + x).

4. Inicialice su nueva PKI y genere el par de claves de la autoridad de certificación que usará para firmar certificados individuales de servidor y cliente:

export EASYRSA=$(pwd)
sudo ./easyrsa init-pki
sudo ./easyrsa build-ca

Copie el archivo ca.crt que acaba de crear en el directorio de su servidor OpenVPN. También debe cambiar su propietario y grupo con Chown:

sudo cp /etc/easy-rsa/pki/ca.crt /etc/openvpn/server/
sudo chown root:root /etc/openvpn/server/ca.crt

Crear el certificado del servidor y la clave privada

Vuelva a su directorio Easy-RSA y genere el certificado del servidor y su clave privada:

cd /etc/easy-rsa
sudo ./easyrsa init-pki
sudo ./easyrsa gen-req ServerName nopass

Puede cambiar «ServerName» en el comando anterior a cualquier nombre que desee. Asegúrese de reflejar ese cambio cuando copie su nueva clave en el directorio del servidor OpenVPN:

sudo cp /etc/easy-rsa/pki/private/ServerName.key /etc/openvpn/server/

Archivo de parámetros Diffie-Hellman

OpenVPN utiliza el método de intercambio de claves Diffie-Hellman (DH) para intercambiar claves criptográficas de forma segura a través de una red. Creará un archivo de parámetros DH con el siguiente comando:

sudo openssl dhparam -out /etc/openvpn/server/dh.pem 2048

El número final, 2048, en ese comando muestra la cantidad de bits utilizados para crear el archivo. Por ejemplo, podría usar 4096, pero llevaría mucho más tiempo generar el archivo y no mejoraría mucho la seguridad. El valor predeterminado es 2048 y ese valor es suficiente para la mayoría de los casos de uso.

Autenticación de mensajes basada en hash

OpenVPN también utiliza una firma de autenticación de mensajes basada en hash (HMAC) para protegerse contra las vulnerabilidades en los protocolos de enlace SSL/TLS. Cree el archivo con este comando:

sudo openvpn --genkey --secret /etc/openvpn/server/ta.key

Archivos de clientes

En este punto, habrá creado una serie de archivos para su servidor. Ahora es el momento de crear archivos para sus clientes. Puede repetir este proceso varias veces para tantos clientes como necesite. Puede crear archivos de cliente de forma segura en cualquier computadora con Easy-RSA instalado.

Ingrese al directorio Easy-RSA e inicialice la PKI nuevamente si aún no lo ha hecho:

cd /etc/easy-rsa
sudo ./easyrsa init-pki

Cree una clave de cliente y un certificado. Cambia de directorio si te saltaste el paso anterior.

cd /etc/easy-rsa
sudo ./easyrsa gen-req ClientName nopass

Si repite el proceso, no necesita inicializar la PKI para cada nuevo cliente. Solo asegúrese de cambiar «ClientName» para que sea único cada vez.

Firma de certificados de servidor y cliente

La CA debe firmar ahora sus certificados de servidor y cliente.

Si busca en su archivo «/etc/easy-rsa/pki/reqs/», debería ver todos los archivos de solicitud (.req) que Easy-RSA creó en la anterior easyrsa gen-req comandos

Directorio de requisitos de OpenVPN

En esta captura de pantalla solo hay dos archivos .req. Su número variará si hizo más de un cliente en el paso anterior.

Si usó una máquina CA separada, ahora debe transferir esos archivos .req a la CA para firmar. Una vez que esté completo, cambie al directorio Easy-RSA y firme sus archivos con los siguientes comandos, asegurándose de reflejar la ubicación adecuada de cada .req y el nombre de cada servidor y cliente.

cd /etc/easy-rsa
sudo ./easyrsa import-req /etc/easy-rsa/pki/reqs/ServerName.req Server1
sudo ./easyrsa import-req /etc/easy-rsa/pki/reqs/ClientName.req Client1
sudo ./easyrsa sign-req server Server1
sudo ./easyrsa sign-req client Client1

Tenga en cuenta que deberá proporcionar a Easy-RSA un nombre diferente para sus certificados de servidor y cliente. ServerName.req se utilizará aquí, por ejemplo, para crear Server1.crt.

Ahora debería encontrar dos archivos nuevos, “/etc/easy-rsa/pki/issued/Server1.crt” y “/etc/easy-rsa/pki/issued/Client1.crt”, que transferirá a sus respectivos máquinas (visto en la siguiente sección de este artículo). Puede eliminar cualquier archivo .req que quede.

Pasar los archivos .CRT

Ahora los certificados firmados (cada .crt) están listos para funcionar para sus propietarios. Mueva el archivo del servidor a su ubicación OpenVPN y cree un nuevo directorio para los certificados del cliente:

sudo mv /etc/easy-rsa/pki/issued/Server1.crt /etc/openvpn/server/
sudo chown root:root /etc/openvpn/server/Server1.crt
sudo mkdir /etc/easy-rsa/pki/signed
sudo mv /etc/easy-rsa/pki/issued/Client1.crt /etc/easy-rsa/pki/signed/

La creación de la carpeta “…pki/firmado/” aquí le proporciona una ubicación etiquetada para colocar varios certificados de cliente.

Archivos compartidos de servidor y cliente

Ahora debería tener cinco archivos en su directorio «/etc/openvpn/server/»: ca.crt, dh.pem, Server1.crt, ServerName.key y ta.key.

Necesitará dos de esos mismos archivos en la carpeta de su cliente OpenVPN en la máquina del cliente. Cópielos usando scp o un disco flash según corresponda. Copie «/etc/openvpn/server/ca.crt» y «/etc/openvpn/server/ta.key» en el archivo «/etc/openvpn/client/» de su cliente.

Asegúrese de copiar el certificado y la clave de su cliente en esa misma ubicación. Copie «/etc/easy-rsa/pki/signed/Client1.crt» y «/etc/easy-rsa/pki/private/ClientName.key» en el archivo «/etc/openvpn/client/» de su cliente. Repita este proceso para cualquier cliente adicional que haya creado.

Para cualquier cliente, ahora debería tener cuatro archivos en “/etc/openvpn/client:” Client1.crt, ClientName.key, ca.crt y ta.key.

Archivos de configuración de servidor y cliente

Su último paso antes de iniciar la VPN es editar los archivos de configuración para el servidor y el cliente. Primero, ubique los archivos “default server.conf” y “client.conf”. Es probable que estén en uno de estos lugares:

  • “/usr/share/openvpn/ejemplos”
  • “/usr/share/doc/openvpn/examples/sample-config-files/” (las configuraciones de Ubuntu se encuentran aquí)

Nota: En Ubuntu necesitará descomprimir el archivo “server.conf.gz”. Usar gunzip -d ./server.conf.gz para obtener el archivo server.conf del paquete comprimido.

Copie cada archivo de configuración en su respectivo directorio «/etc/openvpn/server/» y «/etc/openvpn/client/».

En server.conf realice los siguientes cambios. Asegúrese de que los nombres y ubicaciones de su ca.crt, Server1.crt, ServerName.key y dh.pem estén enumerados en su archivo de configuración. Es posible que deba usar rutas completas, como una línea que diga «cert /etc/openvpn/server/Server1.crt».

Archivo de configuración del servidor OpenVPN

Cambiar el tls-auth... línea para leer tls-crypt ta.key. Nuevamente, puede ser necesaria una ruta completa.

Archivo de configuración del servidor OpenVPN

Descomente (elimine el «;») de las líneas «usuario nadie» y «grupo nadie».

Archivo de configuración del servidor OpenVPN

Para su cliente hará cambios similares. Después de crear el archivo de configuración, refleje los nombres y ubicaciones de su ca.crt, Client1.crt, ClientName.key y ta.key (con el mismo movimiento desde tls-auth... a tls-crypt...), inserte el nombre o la dirección IP y el puerto de su servidor.

Archivo de configuración del cliente OpenVPN

Hora de conectarse

Ahora puede iniciar su servidor y cliente. Este es un asunto simple si todo lo anterior salió según lo planeado.

Inicie el servidor con:

openvpn /etc/openvpn/server/server.conf

y el cliente con:

openvpn /etc/openvpn/client/client.conf

La creación exitosa de una VPN mostrará la lectura de salida del cliente «Secuencia de inicialización completada» al final de su salida. También encontrará un nuevo tipo de conexión en sus interfaces de red disponibles.

Comando mostrar dirección IP

Esta captura de pantalla muestra la interfaz “tun0”. Eso es lo que hizo el servidor OpenVPN. Puede ver su dirección como 10.8.0.1 y hacer ping a esa dirección desde el cliente para verificar una conexión exitosa.

Comando de ping

Enrutamiento del tráfico de Internet a través del servidor

En este punto, probablemente querrá acceder a Internet a través de su servidor desde su cliente remoto. Para hacer esto, primero deberá cambiar el archivo de configuración de su servidor. Añadir la línea push ‘redirect-gateway def1 al archivo de configuración de su servidor.

echo "push \"redirect-gateway def1\"" | sudo tee -a /etc/openvpn/server/server.conf

También deberá indicarle a su servidor que enrute correctamente las solicitudes de tráfico de Internet del cliente. Este comando alterará las reglas de filtrado de paquetes de Iptables:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Si no ha cambiado la línea «servidor 10.8.0.0 255.255.255.0» en su archivo server.conf, la dirección IP en ese comando debería funcionar. Deberá cambiar «eth0» para que coincida con la interfaz ethernet de su servidor. Puede ver en capturas de pantalla anteriores que mi máquina usa «enp19s0».

A continuación, puede enviar la configuración de DNS al cliente. Cualquier dirección a la que un cliente pueda llegar puede ser empujada. Puede utilizar este comando como punto de partida:

echo "push \"dhcp-option DNS 10.8.0.1\"" | sudo tee -a /etc/openvpn/server/server.conf

Finalmente, puede habilitar el reenvío de paquetes en el servidor de la siguiente manera:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Ahora debería poder usar su cliente para acceder a Internet a través de la VPN.

Conclusión

Sé que este ha sido un largo camino. Es de esperar que haya tenido éxito al crear una VPN y conectarse a Internet de manera segura.

Por lo menos, esta habrá sido una buena experiencia de aprendizaje sobre lo que se necesita para crear un túnel digital seguro. Gracias por acompañarme hasta el final.

Deja un comentario

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

Experto Geek - Tu Guía en Tendencias Tecnológicas