Cómo instalar un servidor y un cliente OpenVPN con Easy-RSA 3 en CentOS 8

OpenVPN es una aplicación de código abierto que te permite crear una red privada segura a través de la Internet pública. OpenVPN implementa una red privada virtual (VPN) para crear una conexión segura. OpenVPN utiliza la biblioteca OpenSSL para proporcionar el cifrado y ofrece varios mecanismos de autenticación, como la basada en certificados, las claves precompartidas y la autenticación con nombre de usuario y contraseña.

En este tutorial, te mostraremos cómo instalar y configurar paso a paso OpenVPN en un servidor CentOS 8. Y pondremos en práctica la autenticación OpenVPN basada en certificados.

Requisitos previos

  • Servidor CentOS 8
  • Privilegios de root

¿Qué vamos a hacer?

  • Instalar OpenVPN y Easy-RSA
  • Configurar Easy-RSA 3 Vars
  • Construir las claves de OpenVPN
  • Configurar el servidor OpenVPN
  • Configurar Firewalld y habilitar el reenvío de puertos
  • Configuración del cliente
  • Prueba de

Paso 1 – Instalar OpenVPN y Easy-RSA

En primer lugar, vamos a añadir el repositorio EPEL (Extra Package for Enterprise Linux) e instalar el último paquete de OpenVPN y descargar el script easy-rsa en el sistema CentOS 8.

Instala el repositorio EPEL con el comando dnf que aparece a continuación.

dnf install epel-release

Después, instala el último paquete OpenVPN 2.4.7.

dnf install openvpn

Una vez completada la instalación, ve a ‘/etc/openvpn’ y descarga el script easy-rsa utilizando el comando wget que aparece a continuación.

cd /etc/openvpn/
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz

Ahora extrae el archivo ‘EasyRSA-unix-v3.0.6.tgz’ y renombra el directorio a ‘easy-rsa’.

tar -xf EasyRSA-unix-v3.0.6.tgz
mv EasyRSA-v3.0.6/ easy-rsa/; rm -f EasyRSA-unix-v3.0.6.tgz

El paquete OpenVPN y el script easy-rsa se han instalado en el sistema CentOS 8.

Instalar openvpn en CentOS 8

Paso 2 – Configurar Easy-RSA 3

En este paso, configuraremos easy-rsa 3 creando un nuevo archivo ‘vars’. El archivo ‘vars’ contiene la configuración de Easy-RSA 3.

Ve al directorio ‘/etc/openvpn/easy-rsa/’ y crea un nuevo script vars utilizando el editor vim.

cd /etc/openvpn/easy-rsa/
vim vars

Pega las configuraciones vars easy-rsa 3 de abajo.

set_var EASYRSA                 "$PWD"
set_var EASYRSA_PKI             "$EASYRSA/pki"
set_var EASYRSA_DN              "cn_only"
set_var EASYRSA_REQ_COUNTRY     "ID"
set_var EASYRSA_REQ_PROVINCE    "Jakarta"
set_var EASYRSA_REQ_CITY        "Jakarta"
set_var EASYRSA_REQ_ORG         "hakase-labs CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL       "[email protected]"
set_var EASYRSA_REQ_OU          "HAKASE-LABS EASY CA"
set_var EASYRSA_KEY_SIZE        2048
set_var EASYRSA_ALGO            rsa
set_var EASYRSA_CA_EXPIRE       7500
set_var EASYRSA_CERT_EXPIRE     365
set_var EASYRSA_NS_SUPPORT      "no"
set_var EASYRSA_NS_COMMENT      "HAKASE-LABS CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR         "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF        "$EASYRSA/openssl-easyrsa.cnf"
set_var EASYRSA_DIGEST          "sha256"

Guarda y sal.

Nota:

  • Cambia los valores de las variables según tus necesidades.
  • Aumenta el ‘EASYRSA_KEY_SIZE’ para mejorar la seguridad.
  • Cambia ‘EASYRSA_CA_EXPIRE’ y ‘EASYRSA_CERT_EXPIRE’.

Ahora haz que el archivo ‘vars’ sea ejecutable cambiando el permiso del archivo.

chmod +x vars

La configuración de easy-rsa 3 se ha completado.

Configurar Easy-RSA 3

Paso 3 – Construir las claves OpenVPN

En este paso, construiremos las claves OpenVPN basándonos en el archivo ‘vars’ de easy-rsa 3 que hemos creado. Construiremos la clave de la CA, las claves del Servidor y del Cliente, el DH y el archivo PEM de la CRL.

Construiremos todas esas claves utilizando la línea de comandos ‘easyrsa’. Ve al directorio ‘/etc/openvpn/easy-rsa/’.

cd /etc/openvpn/easy-rsa/3/

– Inicialización y construcción de la CA

Antes de construir la clave del servidor y del cliente, tenemos que inicializar el directorio PKI (Infraestructura de Clave Pública) y construir la clave CA.

Inicializa el directorio de la PKI y construye la clave de la CA utilizando el siguiente comando.

./easyrsa init-pki
./easyrsa build-ca

Ahora escribe la contraseña de tu clave CA y obtendrás tus archivos ‘ca.crt’ y ‘ca.key’ en el directorio ‘pki’.

Construir claves OpenVPN

– Construir la clave del servidor

Ahora queremos construir la clave del servidor, y construiremos la clave del servidor llamada ‘hakase-server’.

Construye la clave del servidor ‘hakase-server’ utilizando el siguiente comando.

./easyrsa gen-req hakase-server nopass

Construir la clave del servidor

Nota:

  • nopass = opción para desactivar la contraseña de la clave ‘hakase-servidor’.

Y firma la clave ‘hakase-servidor’ utilizando nuestro certificado de CA.

./easyrsa sign-req server hakase-server

Se te pedirá la contraseña de la ‘CA’, escribe la contraseña y pulsa Intro. Y obtendrás el archivo de certificado ‘hakase-server.crt’ en el directorio ‘pki/issued/’.

easyrsa sign-req

Verifica el archivo de certificado con el comando OpenSSL y asegúrate de que no hay ningún error.

openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crt

Se han creado todas las claves del certificado del servidor. La clave privada del servidor se encuentra en el archivo ‘pki/private/hakase-server.key’, y el certificado del servidor en el archivo ‘pki/issued/hakase-server.crt’.

Clave privada

– Construir la clave del cliente

Ahora tenemos que construir las claves para el cliente. Generaremos una nueva clave de cliente llamada ‘cliente01’.

Genera la clave ‘client01’ utilizando el siguiente comando.

./easyrsa gen-req client01 nopass

Construir la clave del cliente

Ahora firma la clave ‘client01’ utilizando nuestro certificado de la CA como se indica a continuación.

./easyrsa sign-req client client01

Escribe «sí» para confirmar la solicitud del certificado de cliente, y luego escribe la contraseña de la CA.

easyrsa sign-req client client01

El certificado de cliente llamado ‘client01’ ha sido generado, verifica el certificado de cliente utilizando el comando openssl.

openssl verify -CAfile pki/ca.crt pki/issued/client01.crt

Asegúrate de que no hay ningún error.

verificar el archivo ca

– Construye la clave Diffie-Hellman

La clave Diffie-Hellman es necesaria para mejorar la seguridad. Y vamos a generar la clave DH ‘2048’ basándonos en el archivo de configuración ‘vars’ que se ha creado en la parte superior.

Genera la clave Diffie-Hellman con el siguiente comando.

./easyrsa gen-dh

Y se ha generado la clave DH, situada en el directorio ‘pki’.

Construye la clave Diffie-Hellman

– Opcional: Generar la clave CRL

La clave CRL (Certificate Revoking List) se utilizará para revocar la clave del cliente. Si tienes varios certificados de clientes en tu servidor VPN, y quieres eliminar alguna clave, sólo tienes que revocar utilizando el comando easy-rsa.

Si quieres revocar alguna clave, ejecuta el siguiente comando.

./easyrsa revoke someone

Y luego genera la clave CRL.

./easyrsa gen-crl

El archivo CRL PEM se ha generado en el directorio ‘pki’ – el siguiente es un ejemplo en mi servidor.

Generar la clave CRL

– Copiar los archivos de los certificados

Se han generado todos los certificados, ahora copia los archivos de certificado y los archivos PEM.

Copia la clave y el certificado del servidor.

cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/hakase-server.crt /etc/openvpn/server/
cp pki/private/hakase-server.key /etc/openvpn/server/

Copia la clave y el certificado del cliente01.

cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client01.crt /etc/openvpn/client/
cp pki/private/client01.key /etc/openvpn/client/

Copia la clave DH y CRL.

cp pki/dh.pem /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/

Todos los certificados del servidor y del cliente se han copiado en cada directorio.

Copiar archivos de certificados

Paso 4 – Configurar OpenVPN

En este paso, crearemos una nueva configuración ‘server.conf’ para el servidor OpenVPN.

Ve al directorio ‘/etc/openvpn/server/’ y crea un nuevo archivo de configuración ‘server.conf’ utilizando vim.

cd /etc/openvpn/server/
vim server.conf

Pega allí la siguiente configuración del servidor OpenVPN.

# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun

# OpenVPN Server Certificate - CA, server key and certificate
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/hakase-server.crt
key /etc/openvpn/server/hakase-server.key

#DH and CRL key
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem

# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.0.0 255.255.255.0
push "redirect-gateway def1"

# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"

#Enable multiple clients to connect with the same certificate key
duplicate-cn

# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache

# Other Configuration
keepalive 20 60
persist-key
persist-tun
compress lz4
daemon
user nobody
group nobody

# OpenVPN Log
log-append /var/log/openvpn.log
verb 3

Guarda y sal.

Y la configuración del servidor OpenVPN ha sido creada.

Paso 5 – Habilitar el reenvío de puertos y configurar el enrutamiento en Firewalld

En este paso, habilitaremos el módulo del núcleo de reenvío de puertos y configuraremos el enrutamiento ‘Firewalld’ para OpenVPN.

Habilita el módulo del núcleo de reenvío de puertos ejecutando los siguientes comandos.

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p

A continuación, configura el enrutamiento mediante el Firewalld para OpenVPN.

Activar el reenvío de puertos y configurar el enrutamiento en Firewalld

Añade el servicio OpenVPN a la zona del cortafuegos «pública» y «de confianza».

firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-service=openvpn

Después, añade el ‘tun0’ a la zona ‘de confianza’.

firewall-cmd --permanent --zone=trusted --add-interface=tun0

Ahora activa «MASQUERADE» en el cortafuegos de la zona «pública» por defecto.

firewall-cmd --permanent --add-masquerade

Activa el NAT para la dirección IP interna de OpenVPN ‘10.5.0.0/24’ a la dirección IP externa ‘SERVERIP’.

SERVERIP=$(ip route get 1.1.1.1 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s  10.5.0.0/24 -o $SERVERIP -j MASQUERADE

Y recarga firewalld.

firewall-cmd --reload

Recargar firewalld

Una vez completada la configuración del reenvío de puertos y del enrutamiento de Firewalld, inicia el servicio OpenVPN y habilítalo para que se inicie automáticamente cada vez que se inicie el sistema.

systemctl start openvpn-server@server
systemctl enable openvpn-server@server

Iniciar openvpn

Después, comprueba el servicio OpenVPN con los siguientes comandos.

netstat -plntu
systemctl status openvpn-server@server

Y obtendrás el resultado que se indica a continuación.

OpenVPN se ha iniciado con éxito

El resultado es que el servicio OpenVPN está funcionando en el protocolo UDP con el puerto por defecto «1194».

Paso 6 – Configuración del cliente OpenVPN

Ve al directorio ‘/etc/openvpn/client’ y crea un nuevo archivo de configuración del cliente openvpn ‘client01.ovpn’ utilizando vim.

cd /etc/openvpn/client
vim client01.ovpn

Pega allí la siguiente configuración del cliente OpenVPN.

client
dev tun
proto udp

remote xxx.xxx.xxx.xxx 1194

ca ca.crt
cert client01.crt
key client01.key

cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

resolv-retry infinite
compress lz4
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3

Guarda y sal.

Ahora comprime el directorio ‘/etc/openvpn/client’ en un archivo ‘zip’ o ‘tar.gz’ y descarga el archivo comprimido utilizando SCP desde tu ordenador local.

Comprime el directorio ‘/etc/openvpn/client’ en el archivo ‘client01.tar.gz’.

cd /etc/openvpn/
tar -czvf client01.tar.gz client/*

Configuración del cliente OpenVPN

Ahora puedes descargar el archivo comprimido de OpenVPN utilizando el servidor FTP o el comando scp como se indica a continuación.

scp [email protected]:/etc/openvpn/client01.tar.gz .

Paso 7 – Conéctate al OpenVPN

Prueba en los clientes.

– En Linux

Instala el paquete OpenVPN y, si quieres una configuración de interfaz gráfica, instala el gestor de red OpenVPN.

sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome -y

Si quieres conectarte utilizando un shell de terminal, ejecuta el siguiente comando OpenVPN.

openvpn --config client01.ovpn

Cuando estés conectado a OpenVPN, abre una nueva pestaña de terminal y comprueba la conexión mediante el comando curl.

curl ifconfig.io

Y obtendrás la dirección IP del servidor OpenVPN.

– En Mac OS

Descarga Tunnelblick e instálalo.

Extrae el archivo ‘client01.tar.gz’ y cambia el nombre del directorio ‘client’ por el de ‘client01.tblk’.

tar -xzvf client01.tar.gz
mv client client01.tblk

Haz doble clic en «client01.tblk» y Tunnelblick detectará automáticamente la configuración de OpenVPN y la importará.

Ahora conéctate a través del Tunnelblick en la barra superior.

– En Windows

Descarga el cliente openvpn para windows e importa la configuración.

Referencia

También te podría gustar...