Instalador OpenVPN para Debian, Ubuntu, Fedora, CentOS, Arch Linux, Oracle Linux, Rocky Linux y AlmaLinux.
Este script le permitirá configurar su propio servidor VPN seguro en sólo unos segundos.
También puede consultar wireguard-install, un instalador sencillo para un protocolo VPN más sencillo, seguro, rápido y moderno.
Primero, obtenga el script y hágalo ejecutable:
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
Luego ejecútelo:
./openvpn-install.sh
Debe ejecutar el script como root y tener habilitado el módulo TUN.
La primera vez que lo ejecutes, tendrás que seguir al asistente y responder algunas preguntas para configurar tu servidor VPN.
Cuando OpenVPN esté instalado, puede ejecutar el script nuevamente y tendrá la opción de:
En su directorio de inicio, tendrá archivos .ovpn
. Estos son los archivos de configuración del cliente. Descárgalos desde tu servidor y conéctate usando tu cliente OpenVPN favorito.
Si tiene alguna pregunta, diríjase primero a las preguntas frecuentes. Lea todo antes de abrir un problema.
POR FAVOR no me envíen correos electrónicos o mensajes privados pidiendo ayuda. El único lugar para obtener ayuda son los problemas. Es posible que otras personas puedan ayudar y, en el futuro, es posible que otros usuarios también se encuentren con el mismo problema que usted. Mi tiempo no está disponible gratis solo para ti, no eres especial.
También es posible ejecutar el script sin cabeza, por ejemplo, sin esperar la entrada del usuario, de forma automatizada.
Uso de ejemplo:
AUTO_INSTALL=y ./openvpn-install.sh
# or
export AUTO_INSTALL=y
./openvpn-install.sh
Luego se establecerá un conjunto predeterminado de variables, pasando la necesidad de la entrada del usuario.
Si desea personalizar su instalación, puede exportarlos o especificarlos en la misma línea, como se muestra arriba.
APPROVE_INSTALL=y
APPROVE_IP=y
IPV6_SUPPORT=n
PORT_CHOICE=1
PROTOCOL_CHOICE=1
DNS=1
COMPRESSION_ENABLED=n
CUSTOMIZE_ENC=n
CLIENT=clientname
PASS=1
Si el servidor está detrás de NAT, puede especificar su punto final con la variable ENDPOINT
. Si el punto final es la dirección IP pública detrás de la cual se encuentra, puede usar ENDPOINT=$(curl -4 ifconfig.co)
(el script será el predeterminado). El punto final puede ser un IPv4 o un dominio.
Se pueden configurar otras variables según su elección (cifrado, compresión). Puede buscarlos en la función installQuestions()
del script.
Los clientes protegidos por contraseña no son compatibles con el método de instalación sin cabeza, ya que Easy-RSA espera la entrada del usuario.
La instalación sin cabeza es más o menos idempotente, ya que se ha hecho segura para ejecutarse varias veces con los mismos parámetros, por ejemplo, por un proveedor estatal como Ansible/Terraform/Salt/Chef/Puppet. Solo instalará y regenerará la PKI Easy-RSA si aún no existe, y solo instalará OpenVPN y otras dependencias ascendentes si OpenVPN aún no está instalado. Recreará toda la configuración local y regenerará el archivo del cliente en cada ejecución sin cabeza.
También es posible automatizar la adición de un nuevo usuario. Aquí, la clave es proporcionar el valor (cadena) de la variable MENU_OPTION
junto con las variables obligatorias restantes antes de invocar el script.
El siguiente script Bash agrega un nuevo usuario foo
a una configuración OpenVPN existente
#! /bin/bash
export MENU_OPTION= " 1 "
export CLIENT= " foo "
export PASS= " 1 "
./openvpn-install.sh
nobody
/ nogroup
El script admite estas distribuciones de Linux:
Apoyo | |
---|---|
AlmaLinux 8 | ✅ |
Amazon Linux 2 | ✅ |
Arco Linux | ✅ |
CentOS 7 | ✅ |
Corriente CentOS >= 8 | ✅ ? |
Debian >= 10 | ✅ ? |
Sombrero >= 35 | ✅ ? |
Oráculo Linux 8 | ✅ |
Linux rocoso 8 | ✅ |
Ubuntu >= 18.04 | ✅ ? |
A tener en cuenta:
amd64
.systemd
. Este guión se basa en el gran trabajo de Nyr y sus colaboradores.
Desde 2016, los dos guiones han divergido y ya no se parecen, especialmente bajo el capó. El objetivo principal del guión era mejorar la seguridad. Pero desde entonces, el guión se ha reescrito por completo y se han añadido muchas funciones. Sin embargo, el script sólo es compatible con distribuciones recientes, por lo que si necesita utilizar un servidor o cliente muy antiguo, le recomiendo utilizar el script de Nyr.
Más preguntas y respuestas en FAQ.md.
P: ¿Qué proveedor recomienda?
R: Te recomiendo estos:
P: ¿Qué cliente OpenVPN recomiendas?
R: Si es posible, un cliente OpenVPN 2.4 oficial.
openvpn
de su distribución. Existe un repositorio APT oficial para distribuciones basadas en Debian/Ubuntu.P: ¿Estoy a salvo de la NSA usando su script?
R: Revise sus modelos de amenazas. Incluso si este script tiene en mente la seguridad y utiliza cifrado de última generación, no deberías utilizar una VPN si quieres esconderte de la NSA.
P: ¿Existe documentación de OpenVPN?
R: Sí, diríjase al Manual de OpenVPN, que hace referencia a todas las opciones.
Más preguntas y respuestas en FAQ.md.
Las soluciones que aprovisionan un servidor OpenVPN listo para usar basado en este script de una sola vez están disponibles para:
openvpn-terraform-install
openvpn-ephemeral
Abra un problema antes de enviar un PR si desea discutir un cambio, especialmente si es grande.
Usamos shellcheck y shfmt para hacer cumplir las pautas y buenas prácticas de estilo de bash. Se ejecutan para cada confirmación/PR con GitHub Actions, por lo que puedes consultar la configuración aquí.
Advertencia Esto no se ha actualizado para OpenVPN 2.5 y posteriores.
La configuración predeterminada de OpenVPN es bastante débil en cuanto a cifrado. Este script tiene como objetivo mejorar eso.
OpenVPN 2.4 fue una gran actualización con respecto al cifrado. Agregó soporte para ECDSA, ECDH, AES GCM, NCP y tls-crypt.
Si desea obtener más información sobre una de las opciones que se mencionan a continuación, diríjase al manual de OpenVPN. Es muy completo.
La mayoría de las cosas relacionadas con el cifrado de OpenVPN son administradas por Easy-RSA. Los parámetros predeterminados se encuentran en el archivo vars.example.
De forma predeterminada, OpenVPN no habilita la compresión. Este script proporciona soporte para los algoritmos LZ0 y LZ4 (v1/v2), siendo este último más eficiente.
Sin embargo, se desaconseja utilizar la compresión ya que el ataque VORACLE la utiliza.
OpenVPN acepta TLS 1.0 de forma predeterminada, que tiene casi 20 años.
Con tls-version-min 1.2
aplicamos TLS 1.2, que es el mejor protocolo disponible actualmente para OpenVPN.
TLS 1.2 es compatible desde OpenVPN 2.3.3.
OpenVPN utiliza un certificado RSA con una clave de 2048 bits de forma predeterminada.
OpenVPN 2.4 agregó soporte para ECDSA. La criptografía de curva elíptica es más rápida, ligera y segura.
Este script proporciona:
prime256v1
/ secp384r1
/ secp521r1
2048
/ 3072
/ 4096
bits El valor predeterminado es ECDSA con prime256v1
.
OpenVPN utiliza SHA-256
como hash de firma de forma predeterminada, al igual que el script. No ofrece otra opción a partir de ahora.
De forma predeterminada, OpenVPN utiliza BF-CBC
como cifrado del canal de datos. Blowfish es un algoritmo antiguo (1993) y débil. Incluso la documentación oficial de OpenVPN lo admite.
El valor predeterminado es BF-CBC, una abreviatura de Blowfish en el modo Cipher Block Chaining.
Ya no se recomienda el uso de BF-CBC debido a su tamaño de bloque de 64 bits. Este pequeño tamaño de bloque permite ataques basados en colisiones, como lo demuestra SWEET32. Consulte https://community.openvpn.net/openvpn/wiki/SWEET32 para obtener más detalles. Los investigadores de seguridad de INRIA publicaron un ataque a cifrados de bloques de 64 bits, como 3DES y Blowfish. Muestran que pueden recuperar texto sin formato cuando los mismos datos se envían con suficiente frecuencia y muestran cómo pueden utilizar vulnerabilidades de secuencias de comandos entre sitios para enviar datos de interés con suficiente frecuencia. Esto funciona a través de HTTPS, pero también funciona para HTTP a través de OpenVPN. Consulte https://sweet32.info/ para obtener una explicación mucho mejor y más elaborada.
El cifrado predeterminado de OpenVPN, BF-CBC, se ve afectado por este ataque.
De hecho, AES es el estándar actual. Es el cifrado más rápido y seguro disponible en la actualidad. SEED y Camellia no son vulnerables hasta la fecha, pero son más lentos que AES y relativamente menos confiables.
De los cifrados actualmente admitidos, OpenVPN recomienda utilizar AES-256-CBC o AES-128-CBC. OpenVPN 2.4 y posteriores también serán compatibles con GCM. Para 2.4+, recomendamos usar AES-256-GCM o AES-128-GCM.
AES-256 es un 40% más lento que AES-128 y no hay ninguna razón real para usar una clave de 256 bits en lugar de una clave de 128 bits con AES. (Fuente: 1,2). Además, AES-256 es más vulnerable a los ataques de sincronización.
AES-GCM es un cifrado AEAD, lo que significa que proporciona simultáneamente garantías de confidencialidad, integridad y autenticidad de los datos.
El script admite los siguientes cifrados:
AES-128-GCM
AES-192-GCM
AES-256-GCM
AES-128-CBC
AES-192-CBC
AES-256-CBC
Y el valor predeterminado es AES-128-GCM
.
OpenVPN 2.4 agregó una función llamada "NCP": Parámetros criptográficos negociables . Significa que puede proporcionar un conjunto de cifrado como HTTPS. Está configurado en AES-256-GCM:AES-128-GCM
de forma predeterminada y anula el parámetro --cipher
cuando se usa con un cliente OpenVPN 2.4. En aras de la simplicidad, el script configuró tanto --cipher
como --ncp-cipher
con el cifrado elegido anteriormente.
OpenVPN 2.4 negociará el mejor cifrado disponible de forma predeterminada (por ejemplo, ECDHE+AES-256-GCM)
El script propone las siguientes opciones, según el certificado:
TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384
TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256
TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
El valor predeterminado es TLS-ECDHE-*-WITH-AES-128-GCM-SHA256
.
OpenVPN utiliza una clave DH de 2048 bits de forma predeterminada.
OpenVPN 2.4 agregó soporte para claves ECDH. La criptografía de curva elíptica es más rápida, ligera y segura.
Además, generar claves DH clásicas puede llevar muchísimo tiempo. Las claves ECDH son efímeras: se generan sobre la marcha.
El script proporciona las siguientes opciones:
prime256v1
/ secp384r1
/ secp521r1
2048
/ 3072
/ 4096
bits El valor predeterminado es prime256v1
.
De la wiki de OpenVPN, sobre --auth
:
Autentique los paquetes del canal de datos y (si está habilitado) los paquetes del canal de control tls-auth con HMAC utilizando el algoritmo de resumen de mensajes alg. (El valor predeterminado es SHA1). HMAC es un algoritmo de autenticación de mensajes (MAC) de uso común que utiliza una cadena de datos, un algoritmo hash seguro y una clave para producir una firma digital.
Si se elige un modo de cifrado AEAD (por ejemplo, GCM), el algoritmo --auth especificado se ignora para el canal de datos y en su lugar se utiliza el método de autenticación del cifrado AEAD. Tenga en cuenta que alg todavía especifica el resumen utilizado para tls-auth.
El script proporciona las siguientes opciones:
SHA256
SHA384
SHA512
El valor predeterminado es SHA256
.
tls-auth
y tls-crypt
De la wiki de OpenVPN, sobre tls-auth
:
Agregue una capa adicional de autenticación HMAC encima del canal de control TLS para mitigar los ataques DoS y los ataques a la pila TLS.
En pocas palabras, --tls-auth habilita una especie de "firewall HMAC" en el puerto TCP/UDP de OpenVPN, donde los paquetes del canal de control TLS que llevan una firma HMAC incorrecta se pueden descartar inmediatamente sin respuesta.
Acerca de tls-crypt
:
Cifre y autentique todos los paquetes del canal de control con la clave del archivo de claves. (Consulte --tls-auth para obtener más información).
Cifrar (y autenticar) paquetes del canal de control:
- proporciona más privacidad al ocultar el certificado utilizado para la conexión TLS,
- hace que sea más difícil identificar el tráfico OpenVPN como tal,
- proporciona seguridad post-cuántica para "hombres pobres", contra atacantes que nunca conocerán la clave precompartida (es decir, sin secreto directo).
Por tanto, ambos proporcionan una capa adicional de seguridad y mitigan los ataques DoS. OpenVPN no los utiliza de forma predeterminada.
tls-crypt
es una característica de OpenVPN 2.4 que proporciona cifrado además de autenticación (a diferencia de tls-auth
). Es más respetuoso con la privacidad.
El script admite ambos y usa tls-crypt
de forma predeterminada.
¡Puedes decir gracias si quieres!
Muchas gracias a los contribuyentes y al trabajo original de Nyr.
Este proyecto está bajo la licencia MIT.