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?
- 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 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/
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.
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’.
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
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/’.
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
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.
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’.
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.
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/
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
Compruébalo con los siguientes comandos.
netstat -plntu
systemctl status openvpn@server
El servidor OpenVPN está funcionando en el puerto de protocolo udp ‘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 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/*
scp [email protected]:/etc/openvpn/client01.tar.gz .
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.