últimas noticias

Cree una red privada virtual (VPN) en Linux usando OpenVPN

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

Si tan solo pudieras crear VPN entre su computadora portátil y la computadora de su casa.

De hecho, este proceso es más fácil de lo que piensas. Hoy vamos a discutir cómo puede usar OpenVPN para crear una conexión segura entre el cliente y el servidor en una máquina Linux.

Cree una red privada virtual (VPN) en Linux con OpenVPN - Linux

Tenga en cuenta que crearemos una configuración de enrutamiento y no herramienta de acoplamiento , que debería ser adecuado para la mayoría de los casos de uso. Los usuarios de Windows pueden seguir leyendo Documentación de OpenVPN , comenzando por el apartado de constitución de la 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 un escritorio doméstico o una instancia de Linux de Digital Ocean أو Linode. La máquina cliente es la computadora que usa regularmente. Dado que este tutorial se realiza en Linux, ambas máquinas también deben ejecutar Linux.

Nota: En este tutorial, utilizaremos Ubuntu como nuestra distribución tanto para el cliente como para el servidor.

Instalar 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 2 en sus repositorios. El enlace de Github presenta 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 copió 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 utiliza Infraestructura de clave pública (PKI) para identificar servidores y clientes para que esas entidades separadas puedan comunicarse entre sí. La PKI utiliza una autoridad de certificación maestra (CA) junto con certificados individuales y claves privadas para cada servidor y cliente.

La CA debe registrar los certificados de servidor y cliente. OpenVPN luego verifica que el servidor esté autenticando la identidad de cada cliente y, al mismo tiempo, cada cliente verifica la identidad del servidor.

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

Crear un certificado de CA

Para reforzar la seguridad, se recomienda que su máquina CA sea diferente de su servidor. Para abreviar, este artículo utilizará el mismo dispositivo para ambas tareas. Los procedimientos de copia de archivos deben cambiarse para adaptarse a su situación, ya sea usando scp para transferir la red o usando una llave USB para transferir archivos manualmente.

Nota: Si está utilizando una computadora separada como dispositivo CA, deberá instalar Easy-RSA en ese dispositivo.

1. Tienes que cambiar de directorio a “/etc/easy-rsa/:”

cd /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.ejemplo ./vars

sudo nano ./vars

3. Ingrese detalles como su país, provincia, ciudad, organización y correo electrónico. Elimine las líneas aquí eliminando el "#" al comienzo de cada una.

Cree una red privada virtual (VPN) en Linux con OpenVPN - Linux
Una vez que haya terminado de editar, guarde (Ctrl + O) y salga (Ctrl + X).
4. Configure su nueva PKI y genere la clave maestra de la autoridad de certificación que usará para registrar certificados individuales de cliente y servidor:
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 dueño y grupo con Chown:
sudo cp /etc/easy-rsa/pki/ca.crt /etc/openvpn/server/

sudo chown root:root /etc/openvpn/server/ca.cr

Generar certificado de servidor y clave privada

Vuelva al directorio Easy-RSA y cree el certificado del servidor y la clave privada:
cd /etc/easy-rsa

sudo ./easyrsa init-pki

sudo ./easyrsa gen-req ServerName nopass

Puede cambiar el "Nombre del servidor" en el comando anterior a cualquier nombre que desee. Asegúrese de revertir este cambio cuando copie la nueva clave en el directorio del servidor OpenVPN:

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

método de intercambio de claves

OpenVPN utiliza el método de intercambio de claves Diffie-Hellman (DH) para intercambiar claves criptográficas de forma segura a través de la 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 este comando muestra la cantidad de bits utilizados para crear el archivo. Por ejemplo, podría usar 4096, pero llevaría más tiempo generar el archivo y no mejoraría mucho la seguridad. El valor predeterminado es 2048 y este valor es suficiente para la mayoría de los casos de uso.

Autenticación de mensajes basada en hash

OpenVPN también utiliza el registro de autenticación de mensajes basado en hash (HMAC) para protegerse contra las vulnerabilidades de autenticación de mensajes SSL/TLS. Cree el archivo con este comando:

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

archivos de clientes

En este punto, ha creado una serie de archivos para su servidor. Ahora es el momento de crear perfiles para tus clientes. Puedes repetir este proceso tantas veces como necesites. Puede crear archivos de cliente de manera segura en cualquier computadora que tenga Easy-RSA instalado.

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

cd /etc/easy-rsa

sudo ./easyrsa init-pki

Genere la clave de cliente y el 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 configurar la PKI para cada nuevo cliente. Solo asegúrese de cambiar el 'ClientName' para que sea único cada vez.

Registro de servidor y certificados de cliente

La CA ahora debería registrar sus certificados de cliente y servidor.

Si busca en el archivo "/etc/easy-rsa/pki/reqs/", debería ver todos los archivos de solicitud (.req) Easy-RSA se creó en los comandos genrc-rech anteriores de easyrsa.

Cree una red privada virtual (VPN) en Linux con OpenVPN - Linux

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

Si está utilizando una CA separada, ahora debe transferir estos archivos .req a la CA para el registro. Una vez que esto esté completo, cambie al directorio Easy-RSA y registre sus archivos con los siguientes comandos, asegurándose de reflejar la ubicación adecuada de cada dirección .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 se transferirán a ambos dispositivos ( ver en la siguiente sección de este artículo). Puede eliminar cualquier archivo .req que quede.

Pasar archivos .CRT .

Ahora los certificados firmados (todos .crt) están listos para funcionar para sus respectivos propietarios. Mueva el archivo del servidor a su sitio OpenVPN y cree un nuevo directorio para los certificados de 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/

Crear una carpeta “…pki/firmado/” aquí le dará un sitio categorizado para colocar múltiples testimonios de clientes.

Archivos compartidos de servidor y cliente

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

Necesitará dos de esos mismos archivos en la carpeta del cliente OpenVPN en la máquina cliente. Tienes que copiarlo usando scp o disco flash según corresponda. Copie "/etc/openvpn/server/ca.crt" y "/etc/openvpn/server/ta.key" en "/etc/openvpn/client/".

Asegúrese de copiar el certificado y la clave del cliente para este mismo sitio. Copie "/etc/easy-rsa/pki/signed/Client1.crt" y "/etc/easy-rsa/pki/private/ClientName.key" en su cliente "/etc/openvpn/client/". 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 una VPN es editar los archivos de configuración del servidor y del cliente. Primero, ubique los archivos predeterminados "server.conf" y el archivo "client.conf". Es probable que estén en uno de estos lugares:

“/usr/share/openvpn/examples”

"/ usr / share / doc / openvpn / examples / sample-config-files /" (توجد إعدادات Ubuntu هنا)

Nota: en Ubuntu, deberá descomprimir el archivo "server.conf.gz". Use gunzip -d ./server.conf.gz para obtener el archivo server.conf del paquete zip.

Copie cada archivo de configuración en sus respectivos directorios "/etc/openvpn/server/" y /etc/openvpn/client/.

En server.conf, realice los siguientes cambios. Asegúrese de que los nombres y las ubicaciones de ca.crt, Server1.crt, ServerName.key y dh.pem figuren en su archivo de configuración. Es posible que deba usar rutas completas, como la línea que dice "cert /etc/openvpn/server/Server1.crt".

Cree una red privada virtual (VPN) en Linux con OpenVPN - Linux

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

Cree una red privada virtual (VPN) en Linux con OpenVPN - Linux

(Elimine ";") de la línea "usuario nadie" y "grupo nadie".

Cree una red privada virtual (VPN) en Linux con OpenVPN - Linux

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

Cree una red privada virtual (VPN) en Linux con OpenVPN - Linux

tiempo de contacto

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

Inicie el servidor con:

openvpn /etc/openvpn/server/server.conf

y cliente con:

openvpn /etc/openvpn/client/client.conf

La creación exitosa de VPN aparecerá cuando el cliente lea "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.

Cree una red privada virtual (VPN) en Linux con OpenVPN - Linux

Esta captura de pantalla muestra la interfaz “tun0”. Esto es lo que ofrece 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.

Cree una red privada virtual (VPN) en Linux con OpenVPN - Linux

Enrutar el tráfico de Internet a través del servidor

En este punto, lo más probable es que necesite acceder a Internet a través de su servidor desde el cliente remoto. Para hacer esto, primero deberá cambiar el archivo de configuración del servidor. Agregue la línea "push-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 cambiará 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 el archivo server.conf, la dirección IP debería funcionar en ese comando. Deberá cambiar "eth0" para que coincida con la interfaz ethernet de su servidor. Puede ver en las capturas de pantalla anteriores que mi dispositivo "enp19s0" está usando.

Luego, puede enviar la configuración de DNS al cliente. Se puede cobrar cualquier dirección a la que el cliente pueda llegar. 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 el cliente para acceder a Internet a través de la VPN.

Conclusión

Sé que esto ha sido un largo camino. Esperamos que haya logrado crear una VPN y conectarse a Internet de manera segura.

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

Ir al botón superior