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.