GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo instalar y configurar una VPN con OpenVPN en Ubuntu 18.04

Una VPN es una red privada virtual que le permite acceder a Internet oa ciertos servicios incluso desde una red que no es de confianza. Básicamente, es como si estuviera conectado físicamente a una red privada:por ejemplo, puede acceder a su cuenta bancaria o realizar pagos sin temor a que alguien esté interceptando el tráfico generado por su dispositivo.

OpenVPN es una VPN basada en los protocolos TLS (Transport Layer Security) y SSL (Secure Sockets Layer). OpenVPN utiliza algunos certificados para cifrar el tráfico entre el servidor y el cliente.

En este tutorial verá cómo configurar OpenVPN en un servidor con Ubuntu 18.04.

Para implementar este tutorial se necesita una máquina servidor y otra máquina que actúe como CA (Autoridad de Certificación), que evaluará la validez de los certificados.

Deberá conectarse a su servidor y a su CA a través de una conexión SSH. Si aún no lo ha hecho, se recomienda seguir nuestra guía para conectarse de forma segura con el protocolo SSH.

Instalación de OpenVPN

Acceda a su servidor.

OpenVPN ya está disponible en el repositorio oficial de Ubuntu de Ubuntu, por lo tanto, no es necesario agregar nada más.

Tipo:

sudo apt update
sudo apt install openvpn

En este punto, OpenVPN se habrá instalado correctamente en su servidor.

Instalación de EasyRSA

Continúe descargando EasyRSA en su servidor y en su CA escribiendo en ambas máquinas:

wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz

La última versión se puede descargar desde https://github.com/OpenVPN/easy-rsa/releases

$ cd ~
$ sudo tar xvf EasyRSA-3.0.4.tgz

El nombre puede ser diferente según la versión descargada

Configuración del servidor

Complete la configuración del servidor escribiendo:

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ sudo gzip -d /etc/openvpn/server.conf.gz
$ sudo nano /etc/openvpn/server.conf
  • Busque la sección que hace referencia a HMAC ("tls-auth"). Si la línea está comentada, elimine el ";".

  • Busque la sección sobre cifrado ("cipher"). Si está comentado, elimine el ";". Agregue una nueva línea que contenga el texto "auth SHA256" justo debajo.

  • Busque la sección "dh" que define los parámetros Diffie-Hellman y elimine "2048" del nombre ("dh dh.pem" debe ser obtenido).

  • Busque la sección "usuario" y "grupo" y elimine el ";" para descomentar las líneas.

Configuración de EasyRSA en la CA

Después de instalar EasyRSA, se ha creado en su CA un archivo de configuración para definir las variables para su CA. Escriba:

$ cd ~/EasyRSA-3.0.4/
$ cp vars.example vars
$ nano vars

Elimine el "#" de las instrucciones que se muestran en la siguiente figura:

Inicie el script "easyrsa" para inicializar la infraestructura de clave pública (PKI):

$ sudo ./easyrsa init-pki
$ sudo ./easyrsa build-ca nopass

con este comando se crearán dos archivos:

  • ca.crt:certificado de CA público utilizado por servidores y clientes para notificarse mutuamente que forman parte de la misma red de confianza.

  • ca.key:clave privada que utiliza la máquina CA para firmar claves y certificados para servidores y clientes. Este archivo debe guardarse solo en la máquina CA (a la que no pueden acceder terceros), de lo contrario, la seguridad de la red puede verse comprometida.

Se le pedirá que ingrese un nombre. Déjalo en blanco y presiona Enter.

Solicitud de un certificado de servidor de la CA

Ahora que la máquina CA está configurada, haga que el servidor genere una clave privada y una solicitud de certificado y envíelos a la máquina CA para que los firme:

$ cd ~/EasyRSA-3.0.4
$ ./easyrsa init-pki
$ ./easyrsa gen-req server nopass

Para simplificar, deje "servidor" como nombre para la máquina, para evitar hacer varios cambios más tarde.

Acaba de crear una clave privada para el servidor y una solicitud de certificado llamada "server.req":

$ sudo cp ~/EasyRSA-v3.0.6/pki/private/server.key /etc/openvpn/

Copie el archivo server.req a la máquina CA:

$ sudo scp ~/EasyRSA-3.0.4/pki/reqs/server.req [email protected]_CA_ip:/tmp

Generando y firmando el certificado

En su CA en la carpeta EasyRSA, importe el archivo que acaba de copiar y fírmelo:

$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/server.req server
$ sudo ./easyrsa sign-req server server

Escriba “sí” y presione Entrar.

Transfiera el certificado firmado y el ca.crt al servidor VPN:

$ sudo scp pki/issued/server.crt [email protected]_server_ip:/tmp
$ sudo scp pki/ca.crt [email protected]_server_ip:/tmp

Luego en su Servidor

copiar los archivos recibidos en los directorios correspondientes:

$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
$ cd ~/EasyRSA-3.0.4/

Generar una clave de intercambio fuerte basada en Diffie-Hellman.

$ sudo ./easyrsa gen-dh
$ sudo openvpn --genkey --secret ta.key

Copiar los archivos generados a la carpeta "/etc/openvpn/"

$ sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
$ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/

Configuración de un cliente

Cree una carpeta para almacenar certificados y claves del cliente (dado que esta guía presenta solo un cliente, aquí se llama 'cliente1', pero la operación debe repetirse para cada cliente, usando un denominación)

$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa gen-req client1 nopass

Presione Enter para aceptar el nombre estándar propuesto.

$ sudo cp pki/private/client1.key ~/client-configs/keys/

Copie la clave del cliente en la carpeta creada anteriormente.

$ sudo scp pki/reqs/client1.req [email protected]_CA_IP:/tmp

Envíe el archivo client1.req a la máquina CA.

Importe la solicitud de certificado en su CA:

$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/client1.req client1
$ sudo ./easyrsa sign-req client client1

Escriba "sí" para autorizar la firma.

Cargar client1.crt en su servidor:

scp pki/issued/client1.crt [email protected]_SERVER:/tmp

En su servidor, copie los siguientes archivos en las carpetas correspondientes.

$ sudo mkdir -p ~/client-configs/keys

$ sudo chmod -R 700 ~/client-configs

$ sudo cp /tmp/client1.crt ~/client-configs/keys/

$ sudo cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/

$ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

Ahora se han generado tanto los certificados como las claves del servidor y del cliente.

Configuración de enrutamiento IP y cortafuegos

Cambiar las reglas de reenvío de IP:

$ sudo nano /etc/sysctl.conf

Busque la sección "net.ipv4.ip_forward" y elimine el "#" para que la instrucción sea "no comentada".

Cambie algunas reglas de firewall para enrutar correctamente las conexiones de los clientes.

$ ip route | grep default

Guarde el nombre después de "dev" (denominado "eth0" en la figura a continuación):

$ sudo nano /etc/ufw/before.rules

Agregue los comandos como en la figura a continuación, reemplazando "eth0" con el nombre de su interfaz de red.

# START OPENVPN RULES

# NAT table rules

*nat

:POSTROUTING ACCEPT [0:0] 

# Allow traffic from OpenVPN client to eth0 

-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE

COMMIT

# END OPENVPN RULES

Guardar y salir. Ahora edite el archivo de configuración de UFW:

$ sudo nano /etc/default/ufw

Cambiar el valor del parámetro "DEFAULT_FORWARD_POLICY" por "ACCEPT".

$ sudo ufw allow 1194/udp

Agregue el puerto 1194 para el tráfico UDP.

$ sudo ufw allow OpenSSH

Reiniciar UFW:

$ sudo ufw disable

$ sudo ufw enable

Inicie el servicio OpenVPN:

$ sudo systemctl start openvpn

Consulta el estado del servicio:

$ sudo systemctl status openvpn

Establecer servicio al inicio del servidor.

$ sudo systemctl enable openvpn

Cree el archivo de configuración para el cliente:

$ sudo mkdir -p ~/client-configs/files
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
$ sudo nano ~/client-configs/base.conf

Busque la sección "remoto" y asegúrese de que dice "remote IP_Server 1194"

  • IP_Server:escriba la IP del servidor

  • 1194:puerto previamente seleccionado.

Busque la sección "proto" para asegurarse de que el servidor esté configurado en UDP (encontrará la línea TCP comentada con un ";").

Busque la sección "usuario" y "grupo" y elimine el ";" para que sean "sin comentarios".

Busca las secciones "ca.crt" - "client.crt" - "client.key" - "ta.key" y coméntalas con un "#" al principio de cada línea.

Busque la sección "cipher" y agregue la declaración "auth SHA256" debajo de la declaración "cipher AES-256-CBC".

Agregue la instrucción "key-direction 1" en cualquier punto.

Agregue estas líneas comentadas en cualquier punto. Si el cliente es una máquina Linux, hágales "sin comentarios".

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Guardar y salir.

Generando la configuración para clientes

En su servidor, cree un script para compilar automáticamente la configuración de un cliente.

nano ~/client-configs/make_config.sh

Copia y pega el texto:

#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/client-configs/keys

OUTPUT_DIR=~/client-configs/files

BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \

    <(echo -e '<ca>') \

    ${KEY_DIR}/ca.crt \

    <(echo -e '</ca>\n<cert>') \

    ${KEY_DIR}/${1}.crt \

    <(echo -e '</cert>\n<key>') \

    ${KEY_DIR}/${1}.key \

    <(echo -e '</key>\n<tls-auth>') \

    ${KEY_DIR}/ta.key \

    <(echo -e '</tls-auth>') \

    > ${OUTPUT_DIR}/${1}.ovpn

Guardar y salir.

chmod 700 ~/client-configs/make_config.sh

Intente ahora generar la "configuración" del cliente del cliente.

$ cd ~/client-configs
$ sudo ./make_config.sh client1

Se creará un archivo llamado “client1.ovpn”.

Ahora transfiera este archivo al dispositivo que desea usar. Será utilizado por el software VPN para la conexión.

Revocación de certificados de Cliente

$ cd EasyRSA-3.0.4/
$ sudo ./easyrsa revoke client1

cliente1 es el nombre del cliente al que se le van a revocar las autorizaciones

Escriba "sí" para confirmar.
Generar y cargar el archivo crl.pem a su servidor:

$ sudo ./easyrsa gen-crl
$ sudo scp ~/EasyRSA-3.0.4/pki/crl.pem [email protected]_Server:/tmp

Actualice la configuración de su máquina servidor para verificar la revocación.

$ sudo cp /tmp/crl.pem /etc/openvpn
$ sudo nano /etc/openvpn/server.conf

Al final del archivo agregue "crl-verify crl.pem".

Guardar y salir.

$ sudo systemctl restart [email protected]

Reinicie el servidor para implementar los cambios.


Linux
  1. Cómo instalar y configurar el servidor Algo VPN en Ubuntu 20.04

  2. Cómo establecer y configurar una autoridad de certificación en Ubuntu 22.04

  3. Cómo instalar y configurar strongSwan VPN en Ubuntu 18.04

  4. Cómo configurar Apache con MPM Event y PHP-FPM en Ubuntu 20.04

  5. Cómo instalar y configurar el servidor OpenVPN en Ubuntu 20.04

Cómo instalar y configurar un servidor OpenVPN en Ubuntu 22.04

Cómo configurar una VPN basada en IPsec con Strongswan en Debian y Ubuntu

Cómo instalar y configurar Memcached en Ubuntu Linux

Cómo instalar y configurar ModEvasive con Apache en Ubuntu 18.04

Cómo configurar un servidor Seafile con Nginx en Ubuntu 18.04

Cómo conectarse a una VPN con OpenVPN