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

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 por nombre de usuario/contraseña.

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

Requisitos previos

  • CentOS 7.6
  • Privilegios de root

¿Qué vamos a hacer?

  1. Instalar OpenVPN y Easy-RSA
  2. Configurar Easy-RSA 3 Vars
  3. Construir las claves de OpenVPN
  4. Configurar el servidor OpenVPN
  5. Configurar Firewalld y habilitar el reenvío de puertos
  6. Configuración del cliente
  7. Prueba de

Paso 1 – Instalar OpenVPN y Easy-RSA

En este tutorial, utilizaremos la última versión del servidor centos (7.5), y usaremos el OpenVPN 2.4 con el easy-rsa 3. Antes de instalar los paquetes OpenVPN y easy-rsa, asegúrate de que el repositorio ‘epel’ está instalado en el sistema. Si no lo tienes, instala el repositorio epel utilizando el comando yum que aparece a continuación.

yum install epel-release -y

Ahora instala OpenVPN 2.4 con easy-rsa 3 en el sistema.

yum install openvpn easy-rsa -y

Cuando la instalación esté completa, comprueba la versión de openvpn y easy-rsa.

openvpn --version
ls -lah /usr/share/easy-rsa/

Instalar OpenVPN

OpenVPN 2.4 con easy-rsa 3 ha sido instalado.

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/’ y copia el script ‘easy-rsa’.

cd /etc/openvpn/
cp -r /usr/share/easy-rsa /etc/openvpn/

Ahora ve al directorio ‘easy-rsa/3/’ y crea un nuevo archivo vars utilizando vim.

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

Pega la configuración de 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-1.0.cnf"
set_var EASYRSA_DIGEST          "sha256"

Guarda y sal.

Nota:

  • Cambia los valores de las variables según tus necesidades.
  • Aumenta el valor de ‘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

El archivo vars para la configuración de Easy-RSA 3 ha sido creado.

EasyRSA

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/3’.

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

Inicialización y construcción de la CA

Antes de construir cualquier clave, tenemos que inicializar el directorio PKI y construir la clave CA.

Inicializa el directorio 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’.

Inicialización y construcción CA

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/’.

Solicitud de Firma EasyRSA

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’.

Construir la clave del cliente

Ahora tenemos que construir las claves del 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.

Firmar la clave del cliente

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

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

Construir la clave Diffie-Hellman

Esta acción llevará mucho tiempo, dependiendo de la longitud de la clave que hayamos elegido y de la entropía disponible en el servidor. Utilizaremos la longitud de clave que definamos en el archivo ‘vars’.

Genera la clave Diffie-Hellman con el siguiente comando.

./easyrsa gen-dh

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 cliente en tu servidor vpn, y quieres revocar alguna clave, sólo tienes que revocar utilizando el comando easy-rsa.

Si quieres revocar alguna clave, ejecuta el comando como se indica a continuación.

./easyrsa revoke someone

Y luego genera la clave CRL.

./easyrsa gen-crl

El archivo CRL PEM se ha generado en el directorio ‘pki’ – a continuación se muestra 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 certificados 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/

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/’ y crea un nuevo archivo de configuración ‘server.conf’ usando vim.

cd /etc/openvpn/
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.10.1.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 client to connect with 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
comp-lzo yes
daemon
user nobody
group nobody

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

Guarda y sal.

La configuración para OpenVPN ha sido creada.

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

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.

Añade el servicio ‘openvpn’ a la lista de servicios de firewalld y añade la interfaz ‘tun0’ a la zona de confianza de firewalld.

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

Habilita ‘MASQUERADE’ en la zona de confianza firewalld.

firewall-cmd --permanent --zone=trusted --add-masquerade

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

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

Y recarga firewalld.

firewall-cmd --reload

El reenvío de puertos y el enrutamiento de Firewalld se han completado, ahora inicia el servicio openvpn y habilítalo para que se inicie automáticamente cada vez que se inicie el sistema.

systemctl start openvpn@server
systemctl enable openvpn@server

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

Compruébalo con los siguientes comandos.

netstat -plntu
systemctl status openvpn@server

El servidor OpenVPN está funcionando en el puerto de protocolo udp ‘1194’.

Comprobar el estado del servidor OpenVPN

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 139.xx.xx.xx 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 lzo
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

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

Copiar al cliente

Paso 7 – Prueba de OpenVPN

Prueba en los clientes.

– En Linux

Instala el paquete OpenVPN y si quieres una configuración con 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 comando OpenVPN que aparece a continuación.

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’ a ‘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

https://openvpn.net/

También te podría gustar...