Hace algunos días fue liberada la nueva version de OpenVPN 2.4.9, siendo esta una version correctiva que fue lanzada con la finalidad de corregir la vulnerabilidad CVE-2.020-11.810, que permite traducir una sesión de cliente a una nueva dirección IP, que hasta entonces no había sido registrada.
El problema se puede usar para interrumpir a un cliente recién conectado en la etapa en que ya se ha generado la identificación de igual, pero la negociación de las claves de sesión no se ha completado (un cliente puede detener las sesiones de otros clientes).
Sobre OpenVPN
Para quienes desconocen de OpenVPN, deben saber que esta es una herramienta de conectividad basada en software libre, SSL (Secure Sockets Layer), VPN Virtual Private Network (red virtual privada).
OpenVPN ofrece conectividad punto-a-punto con validación jerárquica de usuarios y host conectados remotamente. Resulta una muy buena opción en tecnologías Wi-Fi (redes inalámbricas IEEE 802.11) y soporta una amplia configuración, entre ellas balanceo de cargas.
OpenVPN es una herramienta multiplataforma que ha simplificado la configuración de VPN’s frente a otras más antiguas y difíciles de configurar como IPsec y haciéndola más accesible para gente inexperta en este tipo de tecnología.
¿Qué hay de nuevo en OpenVPN 2.4.9?
Además de la solución en el error antes mencionado, esta nueva version también implementa un cambio en el procedimiento para verificar los servicios de usuario interactivos (en Windows, primero se verifica la ubicación de configuración y luego se envía una solicitud al controlador de dominio).
Cuando se usa la opción «- auth-user-pass file», si solo hay un nombre de usuario en el archivo para solicitar una contraseña, ahora se requiere una interfaz para administrar las credenciales (se detiene la solicitud de una contraseña usando OpenVPN a través del indicador de la consola).
En la plataforma Windows, está permitido usar cadenas de búsqueda unicode en la opción «–cryptoapicert».
También se solucionó un problema con la imposibilidad de descargar múltiples CRL (Lista de revocación de certificados) ubicada en el mismo archivo cuando se usa la opción «–crl-verificar» en sistemas con OpenSSL.
Y se han resuelto los problemas de compilación en la plataforma FreeBSD utilizando el indicador –enable-async-push.
Se corrigieron los avisos de frase de contraseña de clave privada OpenSSL y se pasan los certificados caducados al almacén de certificados de Windows.
¿Cómo instalar OpenVPN?
Para quienes estén interesados en poder instalar OpenVPN en su sistema, podrán hacerlo siguiendo las instrucciones que compartimos a continuación.
Lo primero sera instalar la herramienta y Easy RSA ya que para emitir certificados de confianza, se debe configurar una autoridad de certificación (CA) simple:
sudo apt update sudo apt install openvpn easy-rsa
Ahora vamos a configurar la autoridad de certificado con:
make-cadir ~/openvpn-ca cd ~/openvpn-ca
Y vamos a editar algunas de las variables que ayudan a decidir cómo crear los certificados:
gedit vars
Busquen la sección easy-rsa y editamos para que quede algo así:
Después de algunos ajustes:
# These are the default values for fields # which will be placed in the certificate. # Don't leave any of these fields blank. export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="Tustin" export KEY_ORG="SSD Nodes" export KEY_EMAIL= class="hljs-string">"joel@example.com" export KEY_OU="Marketing" # X509 Subject Field export KEY_NAME="vpnserver"
Guardas y tecleas en la terminal:
source vars ./build-ca
Se creará una nueva clave RSA y se les pedirá que confirme los detalles que ingresaron en el archivo. Hecho esto ahora toca crear las claves públicas/privadas del cliente, en donde en [server] colocan el nombre que quieran.
./build-key-server [server]
Luego, necesitan construir las llaves de Diffie-Hellman.
./build-dh
Finalmente, deben generar una firma HMAC para fortalecer el certificado.
openvpn --genkey --secret keys/ta.key source vars ./build-key client1
Y si desean crear credenciales protegidas con contraseña:
source vars
./build-key-pass client1
Ahora vamos a configurar el servidor OpenVPN
cd ~/openvpn-ca/keys sudo cp ca.crt ca.key vpnserver.crt vpnserver.key ta.key dh2048.pem /etc/openvpn gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Ahora necesitamos hacer algunas ediciones en el archivo de configuración.
sudo nano /etc/openvpn/server.conf
Primero, asegurémonos de que OpenVPN esté buscando el derecho .crty los .keyarchivos.
Antes de:
ca ca.crt cert server.crt key server.key # This file should be kept secret
Después:
ca ca.crt cert vpnserver.crt key vpnserver.key # This file should be kept secret
A continuación, aplicamos HMAC idéntico entre los clientes y el servidor.
Antes de:
;tls-auth ta.key 0 # This file is secret
Después:
tls-auth ta.key 0 # This file is secret key-direction 0
Si prefiere usar un DNS que no sea opendns, debe cambiar las dos líneas que comienzan con push «dhcp-option.
Antes de:
# If enabled, this directive will configure # all clients to redirect their default # network gateway through the VPN, causing # all IP traffic such as web browsing and # and DNS lookups to go through the VPN # (The OpenVPN server machine may need to NAT # or bridge the TUN/TAP interface to the internet # in order for this to work properly). ;push "redirect-gateway def1 bypass-dhcp" # Certain Windows-specific network settings # can be pushed to clients, such as DNS # or WINS server addresses. CAVEAT: # http://openvpn.net/faq.html#dhcpcaveats # The addresses below refer to the public # DNS servers provided by opendns.com. ;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220"
Después:
# If enabled, this directive will configure # all clients to redirect their default # network gateway through the VPN, causing # all IP traffic such as web browsing and # and DNS lookups to go through the VPN # (The OpenVPN server machine may need to NAT # or bridge the TUN/TAP interface to the internet # in order for this to work properly). push "redirect-gateway def1" # Certain Windows-specific network settings # can be pushed to clients, such as DNS # or WINS server addresses. CAVEAT: # http://openvpn.net/faq.html#dhcpcaveats # The addresses below refer to the public # DNS servers provided by opendns.com. push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
Luego tenemos que seleccionar los cifrados para usar:
Antes de:
# Select a cryptographic cipher. # This config item must be copied to # the client config file as well. ;cipher BF-CBC # Blowfish (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES
Después:
# Select a cryptographic cipher. # This config item must be copied to # the client config file as well. ;cipher BF-CBC # Blowfish (default) cipher AES-256-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES auth SHA512
Finalmente, hagamos que OpenVPN use una cuenta de usuario sin privilegios en lugar de root, lo que no es particularmente seguro.
user openvpn group nogroup
Ahora podemos guardar y cerrar este archivo para crear ese usuario:
sudo adduser --system --shell /usr/sbin/nologin --no-create-home openvpn
Y activamos el servicio con:
sudo systemctl enable openvpn@server sudo systemctl start openvpn@server