OpenVPN es una aplicación de código abierto que le 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 proporciona varios mecanismos de autenticación, como claves precompartidas basadas en certificados y autenticación de nombre de usuario/contraseña.
En este tutorial, le mostraremos cómo instalar y configurar paso a paso OpenVPN en CentOS 7.6. E implementaremos la autenticación OpenVPN basada en certificados.
Requisitos
- Cent OS 7.6
- Privilegios de raíz
¿Qué haremos?
- Instalar OpenVPN y Easy-RSA
- Configurar Easy-RSA 3 Vars
- Crear claves OpenVPN
- Configurar servidor OpenVPN
- Configurar el cortafuegos y habilitar el reenvío de puertos
- Configuración del cliente
- Pruebas
Paso 1:instalar OpenVPN y Easy-RSA
En este tutorial, usaremos la última versión del servidor centos (7.5), y usaremos OpenVPN 2.4 con easy-rsa 3. Antes de instalar los paquetes OpenVPN y easy-rsa, asegúrese de que el repositorio 'epel' está instalado en el sistema. Si no lo tiene, instale el repositorio de epel usando el comando yum a continuación.
yum install epel-release -y
Ahora instale OpenVPN 2.4 con easy-rsa 3 en el sistema.
yum install openvpn easy-rsa -y
Cuando se complete la instalación, verifique la versión de openvpn y easy-rsa.
openvpn --version
ls -lah /usr/share/easy-rsa/
Se ha instalado OpenVPN 2.4 con easy-rsa 3.
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.
Vaya al directorio '/etc/openvpn/' y copie el script 'easy-rsa'.
cd /etc/openvpn/
cp -r /usr/share/easy-rsa /etc/openvpn/
Ahora vaya al directorio 'easy-rsa/3/' y cree un nuevo archivo vars usando vim.
cd /etc/openvpn/easy-rsa/3/
vim vars
Pegue la configuración de vars easy-rsa 3 a continuación.
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"
Guardar y salir.
- Cambie los valores de las variables según lo necesite.
- Aumente el 'EASYRSA_KEY_SIZE' para mayor seguridad.
- Cambie 'EASYRSA_CA_EXPIRE' y 'EASYRSA_CERT_EXPIRE'.
Ahora haga que el archivo 'vars' sea ejecutable cambiando el permiso del archivo.
chmod +x vars
Se ha creado el archivo vars para la configuración de Easy-RSA 3.
Paso 3:crear claves OpenVPN
En este paso, construiremos las claves de OpenVPN basadas en el archivo 'vars' de easy-rsa 3 que hemos creado. Crearemos la clave de CA, las claves de servidor y cliente, el archivo DH y CRL PEM.
Construiremos todas esas claves usando la línea de comando 'easyrsa'. Vaya al directorio '/etc/openvpn/easy-rsa/3'.
cd /etc/openvpn/easy-rsa/3/
Inicialización y creación de CA
Antes de construir cualquier clave, necesitamos inicializar el directorio PKI y construir la clave CA.
Inicie el directorio PKI y cree la clave de CA usando el siguiente comando.
./easyrsa init-pki
./easyrsa build-ca
Ahora escriba la contraseña de su clave de CA y obtendrá sus archivos 'ca.crt' y 'ca.key' en el directorio 'pki'.
Construir clave de servidor
Ahora queremos construir la clave del servidor, y construiremos la clave del servidor llamada 'hakase-server'.
Cree la clave del servidor 'hakase-server' usando el siguiente comando.
./easyrsa gen-req hakase-server nopass
- sin pase =opción para deshabilitar la contraseña para la clave 'hakase-server'.
Y firme la clave 'hakase-server' usando nuestro certificado CA.
./easyrsa sign-req server hakase-server
Se le pedirá la contraseña 'CA', escriba la contraseña y presione Entrar. Y obtendrá el archivo de certificado 'hakase-server.crt' en el directorio 'pki/issued/'.
Verifique el archivo del certificado usando el comando OpenSSL y asegúrese de que no haya ningún error.
openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crt
Se han creado todas las claves de certificado del servidor. La clave privada del servidor se encuentra en 'pki/private/hakase-server.key' y el certificado del servidor en 'pki/issued/hakase-server.crt'.
Crear clave de cliente
Ahora necesitamos construir claves para el cliente. Generaremos una nueva clave de cliente llamada 'client01'.
Genere la clave 'client01' usando el siguiente comando.
./easyrsa gen-req client01 nopass
Ahora firme la clave 'client01' usando nuestro certificado CA como se muestra a continuación.
./easyrsa sign-req client client01
Escriba 'sí' para confirmar la solicitud de certificado de cliente, luego escriba la contraseña de CA.
Se ha generado el certificado de cliente llamado 'client01', verifique el certificado de cliente usando el comando openssl.
openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
Crear clave Diffie-Hellman
Esta acción llevará mucho tiempo, dependiendo de la longitud de clave que elijamos y la entropía disponible en el servidor. Usaremos la clave de longitud que definimos en el archivo 'vars'.
Genere la clave Diffie-Hellman usando el siguiente comando.
./easyrsa gen-dh
Se ha generado la clave DH, ubicada en el directorio 'pki'.
Opcional:generar la clave CRL
La clave CRL (Lista de revocación de certificados) se utilizará para revocar la clave del cliente. Si tiene varios certificados de cliente en su servidor vpn y desea revocar alguna clave, solo necesita revocar usando el comando easy-rsa.
Si desea revocar alguna clave, ejecute el comando como se muestra a continuación.
./easyrsa revoke someone
Y luego genere la clave CRL.
./easyrsa gen-crl
El archivo CRL PEM se generó en el directorio 'pki'; el siguiente es un ejemplo en mi servidor.
Copiar archivos de certificados
Se han generado todos los certificados, ahora copie los archivos de certificado y los archivos PEM.
Copie la clave del servidor y el certificado.
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/
Copie 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/
Copie 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.
Vaya al directorio '/etc/openvpn/' y cree un nuevo archivo de configuración 'server.conf' usando vim.
cd /etc/openvpn/
vim server.conf
Pegue la siguiente configuración del servidor OpenVPN allí.
# 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
Guardar y salir.
Se ha creado la configuración para OpenVPN.
Paso 5:habilite el reenvío de puertos y configure el firewall de enrutamiento
En este paso, habilitaremos el módulo del kernel de reenvío de puertos y configuraremos el enrutamiento 'Firewalld' para OpenVPN.
Habilite el módulo kernel de reenvío de puertos ejecutando los siguientes comandos.
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
A continuación, configure el enrutamiento mediante Firewalld para OpenVPN.
Agregue el servicio 'openvpn' al servicio de lista de firewalld y agregue la interfaz 'tun0' a la zona de confianza de firewalld.
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-interface=tun0
Habilite 'MASQUERADE' en el cortafuegos de la zona 'confiable'.
firewall-cmd --permanent --zone=trusted --add-masquerade
Habilite 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 recargar firewalld.
firewall-cmd --reload
El reenvío de puertos y el enrutamiento de Firewalld se han completado, ahora inicie el servicio openvpn y permita que se inicie automáticamente cada vez que se inicie el sistema.
systemctl start [email protected]
systemctl enable [email protected]
Compruébalo usando los comandos a continuación.
netstat -plntu
systemctl status [email protected]
El servidor OpenVPN está funcionando en el puerto de protocolo udp '1194'.
Paso 6:configuración del cliente OpenVPN
Vaya al directorio '/etc/openvpn/client' y cree un nuevo archivo de configuración de cliente openvpn 'client01.ovpn' usando vim.
cd /etc/openvpn/client
vim client01.ovpn
Pegue la siguiente configuración de cliente OpenVPN allí.
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
Guardar y salir.
Ahora comprima el directorio '/etc/openvpn/client' en el archivo 'zip' o 'tar.gz' y descargue el archivo comprimido usando scp desde su computadora local.
Comprima 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
Pruebas en los Clientes.
- En Linux
Instale el paquete OpenVPN y, si desea una configuración de GUI, instale el administrador de red OpenVPN.
sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome -y
Si desea conectarse mediante un shell de terminal, ejecute el siguiente comando OpenVPN.
openvpn --config client01.ovpn
Cuando esté conectado a OpenVPN, abra una nueva pestaña de terminal y verifique la conexión usando el comando curl.
curl ifconfig.io
Y obtendrá la dirección IP del servidor OpenVPN.
En Mac OS
Descarga Tunnelblick e instálalo.
Extraiga el archivo 'client01.tar.gz' y cambie el nombre del directorio 'client' a 'client01.tblk'.
tar -xzvf client01.tar.gz
mv client client01.tblk
Haga doble clic en 'client01.tblk' y Tunnelblick detectará automáticamente la configuración de OpenVPN y luego la importará.
Ahora conéctese a través de Tunnelblick en la barra superior.
En Windows
Descarga el cliente openvpn para windows e importa la configuración.