Cómo instalar OpenVPN Server en Ubuntu 18.04 LTS

11 dic 2020 22 min di lettura
Cómo instalar OpenVPN Server en Ubuntu 18.04 LTS
Indice dei contenuti

Introducción

Una red privada virtual (VPN) le permite cruzar redes que no son de confianza de forma tan segura como en una red privada.

Cuando se combina con conexiones HTTPS, esta configuración ayuda a proteger los inicios de sesión y las transacciones inalámbricas. Puede evitar las restricciones geográficas, la censura, su ubicación y cualquier tráfico HTTP sin cifrar.

OpenVPN es una solución VPN de capa de conexión segura (SSL) completa y de código abierto que puede contener una amplia gama de configuraciones. En este tutorial, configuraremos OpenVPN en un servidor Ubuntu 18.04 LTS.

Prerrequisitos

Para este tutorial, necesitará un servidor Ubuntu 18.04 para usar con el servicio OpenVPN. Debe configurar un usuario que no sea root con privilegios sudo antes de comenzar esta guía. Puede seguir nuestra guía de configuración inicial de Ubuntu 18.04 para configurar un usuario con los permisos adecuados.

Necesitará una computadora separada para actuar como una autoridad de certificación (CA) . Si bien es posible utilizar su propio servidor VPN o computadora local como CA, no se recomienda, ya que abre su VPN a algunas vulnerabilidades de seguridad. De acuerdo con la documentación oficial de OpenVPN, debe colocar la CA en una computadora independiente dedicada a importar y firmar solicitudes de certificados. Por esta razón, esta guía asume que la CA está en un servidor Ubuntu 18.04 separado que también tiene un usuario no root con privilegios sudo.

Tenga en cuenta que si deshabilita la autenticación de contraseña al configurar estos servidores, puede experimentar dificultades al transferir archivos. Para resolver este problema, puede volver a habilitar la autenticación de contraseña en cada servidor. Alternativamente, se puede generar una clave SSH par para cada servidor, a continuación, añadir clave SSH pública del servidor OpenVPN para el servidor de CA authorized_keys archivo, y viceversa.

Los servidores utilizados en este ejemplo se diferencian así:

Server VPN: IP_SERVER_VPN
Server CA: IP_SERVER_CA

Conexión al servidor

Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:

ssh root@IP_DEL_SERVER

A continuación, deberá ingresar la contraseña del usuario root.

Si no usa el usuario root, puede iniciar sesión con otro nombre de usuario usando el mismo comando, luego cambie root a su nombre de usuario:

ssh nome_utente@IP_DEL_SERVER

Luego se le pedirá que ingrese su contraseña de usuario.

El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:

ssh nome_utente@IP_DEL_SERVER -p PORTA

Ahora está conectado a su servidor, está listo para comenzar a instalar OpenVPN en Ubuntu 18.04 LTS.

Instale OpenVPN y EasyRSA

Actualice el índice de paquetes del servidor VPN e instale OpenVPN. OpenVPN está disponible en los repositorios predeterminados de Ubuntu, por lo que puede usar apt para la instalación:

sudo apt update
sudo apt install openvpn

OpenVPN es una VPN TLS / SSL. Esto significa que utiliza certificados para cifrar el tráfico entre el servidor y los clientes. Usaremos la última versión de EasyRSA para construir nuestra infraestructura de clave pública de CA (PKI).

Construiremos la CA en un servidor independiente. La administración de la CA desde un servidor independiente ayuda a evitar que usuarios no autorizados accedan a la VPN.

Descargue la última versión de EasyRSA tanto en el servidor CA como en el servidor OpenVPN . Para obtener la última versión, vaya a la página oficial del proyecto en GitHub de EasyRSA , copie el enlace de descarga del archivo que termina en .tgz , luego descárguelo con el comando wget:

VPN del servidor:

wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz

CopiarLuego extraiga el tarball con el comando tar :

cd ~
cd ~
tar xvf EasyRSA-nix-3.0.5.tgz
tar xvf EasyRSA-nix-3.0.5.tgz

El software necesario se ha instalado correctamente en el servidor OpenVPN y el servidor de CA.

Configurar EasyRSA y CA

EasyRSA se instala con un archivo de configuración que se puede editar para la CA.

Conéctese al servidor de CA

En el servidor de CA , vaya al directorio EasyRSA con el comando cd:

cd ~/EasyRSA-3.0.5/

Dentro de este directorio hay un archivo llamado vars.example . Haga una copia de este archivo y asigne un nombre a la copia vars sin extensión de archivo:

cp vars.example vars

Abra el archivo vars con un editor de prueba, en este tutorial usamos nano:

nano vars

CopiarBusque la siguiente configuración:

...
#set_var EASYRSA_REQ_COUNTRY    "US"
#set_var EASYRSA_REQ_PROVINCE   "California"
#set_var EASYRSA_REQ_CITY       "San Francisco"
#set_var EASYRSA_REQ_ORG        "Copyleft Certificate Co"
#set_var EASYRSA_REQ_EMAIL      "[email protected]"
#set_var EASYRSA_REQ_OU         "My Organizational Unit"
...

Descomente estas líneas y cambie los valores a los que le gusten, no los deje en blanco:

...
set_var EASYRSA_REQ_COUNTRY    "US"
set_var EASYRSA_REQ_PROVINCE   "NewYork"
set_var EASYRSA_REQ_CITY       "New York City"
set_var EASYRSA_REQ_ORG        "Noviello"
set_var EASYRSA_REQ_EMAIL      "[email protected]"
set_var EASYRSA_REQ_OU         "Community"
...

Cuando termine, guarde y cierre el archivo.

Dentro del directorio EasyRSA existe un script llamado easyrsa que está llamado para realizar una serie de funciones relacionadas con la creación y gestión de la CA. Ejecute este script con la opción init-pki para iniciar la infraestructura de clave pública en el servidor de CA:

./easyrsa init-pki

Debería recibir un mensaje de salida similar al siguiente:

. . .
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/TUO_NOME_UTENTE/EasyRSA-3.0.5/pki

Después de esto, vuelva a invocar el script easyrsa, siguiéndolo con la opción build-ca . Esto creará la CA y creará dos archivos importantes, ca.crt y ca.key , que componen el lado público y privado de un certificado SSL.

ca.crt es el archivo de certificado público de la CA que, en el contexto de OpenVPN. Su servidor y todos sus clientes necesitarán una copia de este archivo.

ca.key es la clave privada utilizada por el servidor de CA para firmar claves y certificados para servidores y clientes. Este archivo .key solo debe estar en su servidor de CA e idealmente su servidor de CA debe mantenerse fuera de línea cuando no se firman solicitudes de certificado como medida de seguridad adicional.
Si no desea que se le solicite una contraseña cada vez que interactúe con la CA, puede ejecutar el comando build-ca con la opción nopass , así:

./easyrsa build-ca nopass

Debería recibir un mensaje de salida similar al siguiente:

. . .
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:

El nombre común es el nombre que se utiliza para hacer referencia a este servidor en el contexto de la autoridad de certificación. Puede ingresar cualquier cadena de caracteres para el nombre común de CA, pero para simplificar, presione ENTER para aceptar el nombre predeterminado.

Cree el certificado y la clave del servidor

Ahora que tiene una CA lista, puede generar una clave privada y una solicitud de certificado desde su servidor VPN y luego pasar la solicitud a su CA para que la firme, creando el certificado requerido.

Conéctese al servidor VPN

Ingrese al directorio EasyRSA en el servidor OpenVPN:

cd EasyRSA-3.0.5/

CopiarEjecute el script easyrsa con la opción init-pki . Aunque ya ha ejecutado este comando en el servidor de CA, debe ejecutarlo aquí porque su servidor VPN y CA tendrán directorios PKI separados:

./easyrsa init-pki

Luego vuelve a llamar al script easyrsa , esta vez con la opción gen-req seguida de un nombre común para el servidor. Este podría ser cualquier nombre. En este tutorial, el nombre común del servidor OpenVPN será simplemente " servidor ". Asegúrese de incluir también la opción nopass . De lo contrario, el archivo de solicitud estará protegido con contraseña, lo que podría causar problemas de autorización más adelante:

ATENCIÓN: si eliges aquí un nombre diferente a " servidor ", que es el que usaremos para el resto de la guía, tendrás que tener cuidado de modificar algunos comandos que vendrán.

Luego ejecute el siguiente comando:

./easyrsa gen-req server nopass

Esto creará una clave privada para el servidor y un archivo de solicitud de certificado llamado server.req . Copie la clave del servidor en el directorio /etc/openvpn / con el comando cp:

sudo cp ~/EasyRSA-3.0.5/pki/private/server.key /etc/openvpn/

Con un método seguro (como SCP , en nuestro ejemplo a continuación), transfiera el archivo server.req al servidor de CA:

scp ~/EasyRSA-3.0.5/pki/reqs/server.req TUO_NOME_UTENTE@IP_SERVER_CA:/tmp

Conéctese al servidor de CA

A continuación, en el servidor de CA , vaya al directorio EasyRSA:

cd EasyRSA-3.0.5/

Usando el script easyrsa nuevamente, importe el archivo server.req, siguiendo la ruta del archivo con su nombre común:

./easyrsa import-req /tmp/server.req server

Luego, firme la solicitud ejecutando el script easyrsa con la opción sign-req , seguida del tipo de solicitud y el nombre común. El tipo de solicitud puede ser cliente o servidor, por lo que para la solicitud de certificado del servidor OpenVPN, asegúrese de utilizar el tipo de solicitud del servidor:

./easyrsa sign-req server server

En el resultado, se le pedirá que verifique que la solicitud proviene de una fuente confiable. Escriba sí y luego presione ENTER para confirmar esto:

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 3650 days:

subject=
    commonName                = server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Si ha cifrado su clave CA, se le pedirá la contraseña en este momento.

A continuación, transfiera el certificado firmado a su servidor VPN utilizando un método seguro:

scp pki/issued/server.crt TUO_NOME_UTENTE@IP_SERVER_VPN:/tmp

Antes de desconectarse del servidor de CA, también transfiera el archivo ca.crt al servidor:

scp pki/ca.crt TUO_NOME_UTENTE@IP_SERVER_VPN:/tmp

Conéctese al servidor VPN

Vuelva a iniciar sesión en el servidor VPN y copie los archivos server.crt y ca.crt en el directorio /etc/openvpn/:

sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/

Luego vaya a su directorio EasyRSA:

cd EasyRSA-3.0.5/

Cree una clave Diffie-Hellman para usar al intercambiar claves escribiendo:

./easyrsa gen-dh

Esto puede tardar unos minutos en completarse.
Cuando termine, genere una firma HMAC para fortalecer las capacidades de verificación de integridad TLS del servidor:

openvpn --genkey --secret ta.key

Ahora copie los dos archivos nuevos en el directorio /etc/openvpn/:

sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/
sudo cp ~/EasyRSA-3.0.5/pki/dh.pem /etc/openvpn/

Se han generado todos los certificados y archivos clave necesarios para su servidor.

Genere un certificado de cliente y un par de claves

Generaremos una única clave de cliente y un par de certificados. Si tiene más de un cliente, puede repetir este proceso para cada uno de ellos. Sin embargo, tenga en cuenta que debe pasar un valor de nombre único al script para cada cliente. En este tutorial, el primer par de certificado / clave se denomina cliente1 .

Comience creando una estructura de directorio, con el comando mkdir, dentro del directorio de inicio para almacenar el certificado del cliente y los archivos clave:

mkdir -p ~/client-configs/keys

Dado que este directorio almacena certificados, claves y archivos de configuración del cliente, debe bloquear los permisos como medida de seguridad con el comando chmod:

chmod -R 700 ~/client-configs

Luego, regrese al directorio EasyRSA y ejecute el script easyrsa con las opciones gen-req y nopass , junto con el nombre común del cliente:

cd ~/EasyRSA-3.0.5/
./easyrsa gen-req client1 nopass

Presione ENTER para confirmar el nombre común. A continuación, copie el client1.key archivo al directorio /client-configs/keys/ creó anteriormente:

cp pki/private/client1.key ~/client-configs/keys/

Luego, transfiera el archivo client1.req al servidor de CA utilizando un método seguro:

scp pki/reqs/client1.req TUO_NOME_UTENTE@IP_SERVER_CA:/tmp

Conéctese al servidor de CA

Inicie sesión en el servidor de CA , acceda al directorio EasyRSA e importe la solicitud de certificado:

cd EasyRSA-3.0.5/
./easyrsa import-req /tmp/client1.req client1

Luego firme la solicitud como lo hizo para el servidor en el paso anterior. Esta vez, sin embargo, asegúrese de especificar el tipo de solicitud del cliente:

./easyrsa sign-req client client1

Cuando se le solicite , ingrese para confirmar que tiene la intención de firmar la solicitud de certificado y que proviene de una fuente confiable:

Debería recibir un mensaje de salida similar al siguiente:

Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Esto creará un archivo de certificado de cliente llamado client1.crt . Transfiera este archivo al servidor VPN:

scp pki/issued/client1.crt TUO_NOME_UTENTE@IP_SERVER_VPN:/tmp

Conéctese al servidor VPN

Conéctese al servidor VPN nuevamente y copie el certificado del cliente en el directorio /client-configs/keys/:

cp /tmp/client1.crt ~/client-configs/keys/

A continuación, copie también los archivos ca.crt y ta.key en el directorio /client-configs/keys/:

cp ~/EasyRSA-3.0.5/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

Los certificados y claves del servidor y del cliente se han generado y almacenado en los directorios correspondientes del servidor.

Configurar el servicio OpenVPN

Ahora que se han generado tanto los certificados como los certificados de cliente y servidor, puede comenzar a configurar el servicio OpenVPN para usar estas credenciales.

Comience copiando un archivo de configuración de OpenVPN de muestra en el directorio de configuración y luego extráigalo con el comando gzip para usarlo como base para su configuración:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gzip -d /etc/openvpn/server.conf.gz

Abra el archivo de configuración del servidor:

sudo nano /etc/openvpn/server.conf

Busque la sección HMAC buscando la directiva tls-auth . Esta línea ya debería estar descomentada, pero si no lo está, elimínela ;para descomentarla. Debajo de esta línea, agregue el parámetro de key-direction, establecido en 0:

tls-auth ta.key 0 # This file is secret
key-direction 0

A continuación, busque la sección sobre cifrados criptográficos buscando las líneas de cifrado comentadas. AES-256-CBC cifrado ofrece un nivel bueno de cifrado y esté bien sujeto. Nuevamente, esta línea ya debería estar descomentada, pero si no lo está, simplemente elimínela ;precediéndola:

cipher AES-256-CBC

A continuación, agregue una directiva de autenticación para seleccionar el algoritmo de resumen de mensajes HMAC. Para esto, SHA256 es una buena opción:

auth SHA256

A continuación, busque la línea que contiene una directiva dh que define los parámetros Diffie-Hellman. Debido a algunos cambios recientes en EasyRSA, el nombre de archivo para la clave Diffie-Hellman puede ser diferente al que se muestra en el archivo de configuración del servidor de muestra. Si es necesario, cambie el nombre del archivo que se enumera aquí eliminando el 2048 para que se alinee con la clave generada en el paso anterior:

dh dh.pem

Finalmente, busque la configuración de user y group  y elimine ; al principio de cada comentario elimine estas líneas:

user nobody
group nogroup

Los cambios realizados en el archivo server.conf de muestra hasta este punto son necesarios para que OpenVPN funcione. Los cambios que se describen a continuación son opcionales, aunque también son necesarios para muchos casos de uso comunes.

(Opcional) Cambie el DNS para redirigir todo el tráfico a través de la VPN

La configuración anterior creará la conexión VPN entre las dos máquinas, pero no forzará ninguna conexión para usar el túnel. Si desea utilizar VPN para enrutar todo el tráfico, es probable que desee enviar la configuración de DNS a las computadoras cliente.

Hay algunas directivas en el archivo server.conf que necesita cambiar para habilitar esta funcionalidad. Busque la sección redirect-gateway y elimine el punto y coma ";" desde el principio de la línea redirect-gateway para descomentarlo:

push "redirect-gateway def1 bypass-dhcp"

Justo debajo, busque la sección dhcp-option . Nuevamente, elimine ";" delante de ambas líneas para descomentarlas:

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Esto ayudará a los clientes a reconfigurar su configuración de DNS para usar el túnel VPN como puerta de enlace predeterminada.

(Opcional) Cambiar el puerto y el protocolo

De forma predeterminada, el servidor OpenVPN usa el puerto 1194 y el protocolo UDP para aceptar conexiones de clientes. Si necesita utilizar un puerto diferente. Si no está utilizando software como Apache, Nginx o similar, también puede usar el popular puerto 443, ya que generalmente lo permiten las reglas del firewall.

#opzionale
port 443

A menudo, el protocolo se limita a ese puerto. Si es así, cambie proto de UDP a TCP:

#opzionale
proto tcp

Si pasa el protocolo a TCP, deberá cambiar el valor de la directiva notificar-salir-notificar de 1 a 0 , ya que esta directiva solo la usa UDP. No hacer esto mientras usa TCP provocará errores al iniciar el servicio OpenVPN:

#opzionale
explicit-exit-notify 0

Si no necesita usar un puerto y protocolo diferente, es mejor dejar estas dos configuraciones como predeterminadas.

(Opcional) Apunta a credenciales no predeterminadas

Si seleccionó un nombre diferente durante el comando ./build-key-server anteriormente, cambie el certificado y las líneas de clave que ve para que apunten a los archivos .crt y .key correspondientes . Si usó el nombre predeterminado, " servidor ", esto ya está configurado correctamente:

cert server.crt
key server.key

Cuando termine, guarde y cierre el archivo.

Una vez que haya realizado todos los cambios necesarios en la configuración de OpenVPN de su servidor para su caso de uso específico, puede comenzar a realizar algunos cambios en la red de su servidor.

Configurar la red del servidor

Hay algunos aspectos de la configuración de red del servidor que deben cambiarse para que OpenVPN enrute correctamente el tráfico a través de la VPN. El primero de ellos es el reenvío de IP, un método para determinar dónde enrutar el tráfico de IP. Esto es esencial para la funcionalidad de VPN que proporcionará su servidor.

Ajuste la configuración de reenvío de IP predeterminada de su servidor editando el archivo /etc/sysctl.conf :

sudo nano /etc/sysctl.conf

En el interior, busque la línea comentada que establece net.ipv4.ip_forward . Quite el carácter "#" del principio de la línea para descomentar esta configuración:

net.ipv4.ip_forward=1

Guarde y cierre el archivo.

Para leer el archivo y ajustar los valores de la sesión actual, escriba:

sudo sysctl -p

Debería recibir un mensaje de salida similar al siguiente:

net.ipv4.ip_forward = 1

Algunas reglas de firewall deben modificarse para permitir el masquerading, un concepto de iptables que proporciona una traducción dinámica de direcciones sobre la marcha para enrutar correctamente las conexiones del cliente.

Antes de abrir el archivo de configuración del firewall para agregar reglas de masquerading, primero debe encontrar la interfaz de red pública de su computadora. Para hacer esto, escriba:

ip route | grep default

Su interfaz pública es la cadena que se encuentra en la salida de este comando después de la palabra "dev". Por ejemplo, este resultado muestra la interfaz llamada wlp11s0, que se resalta a continuación:

Debería recibir un mensaje de salida similar al siguiente:

default via 203.0.113.1 dev wlp11s0 proto static

Cuando tenga la interfaz asociada con su ruta predeterminada, abra el archivo /etc/ufw/before.rules para agregar la configuración relevante:

sudo nano /etc/ufw/before.rules

Las reglas de UFW se agregan normalmente mediante el comando ufw. Las reglas enumeradas en el archivo before.rules , sin embargo, se leen y promulgan antes de que se carguen las reglas UFW convencionales. Hacia la parte superior del archivo, agregue las líneas resaltadas a continuación. Esto establecerá la política predeterminada para la cadena POSTROUTING en la tabla nat y enmascarará todo el tráfico proveniente de la VPN. Recuerde reemplazar wlp11s0 en la línea -A POSTROUTING a continuación con la interfaz que encontró en el comando anterior:


#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0] 
# Allow traffic from OpenVPN client to wlp11s0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o wlp11s0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

# Don't delete these required lines, otherwise there will be errors
*filter
. . .

Guarde y cierre el archivo.

A continuación, también debe indicarle a UFW qué paquetes se reenvían por defecto. Para hacer esto, abra el archivo /etc/default/ufw:

sudo nano /etc/default/ufw

En el interior, busque la directiva DEFAULT_FORWARD_POLICY y cambie el valor de DROP a ACCEPT:

DEFAULT_FORWARD_POLICY="ACCEPT"

Guarde y cierre el archivo.

Luego, ajuste el firewall para permitir el tráfico a OpenVPN. Si no ha cambiado el puerto y el protocolo en el archivo /etc/openvpn/server.conf , deberá abrir el tráfico UDP en el puerto 1194 . Si se ha cambiado el puerto y / o el protocolo, reemplace los valores seleccionados aquí.

Si olvidó agregar el puerto SSH, agréguelo aquí también:

sudo ufw allow 1194/udp
sudo ufw allow OpenSSH

Después de agregar esas reglas, deshabilite y vuelva a habilitar UFW para reiniciarlo y cargar los cambios de cualquier archivo que haya editado:

sudo ufw disable
sudo ufw enable

Su servidor ahora está configurado para manejar correctamente el tráfico OpenVPN.

Inicie y active el servicio OpenVPN

Inicie el servidor OpenVPN especificando el nombre del archivo de configuración como una variable de instancia después del nombre del archivo de la unidad systemd. El archivo de configuración de su servidor se llama /etc/openvpn/server.conf, así que agregue @server al final del archivo de la unidad cuando lo llame:

sudo systemctl start openvpn@server

Vuelva a verificar que el servicio se haya iniciado correctamente escribiendo:

sudo systemctl status openvpn@server

Si todo salió bien, el resultado se verá así:

[email protected] - OpenVPN connection to server
   Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-01-02 15:30:05 EDT; 47s ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
  Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta
 Main PID: 5856 (openvpn)
    Tasks: 1 (limit: 512)
   CGroup: /system.slice/system-openvpn.slice/[email protected]
           └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid

También puede verificar que la interfaz tun0 de OpenVPN esté disponible con el comando ip :

ip addr show tun0

Esto producirá una interfaz configurada:

4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever

Después de iniciar el servicio, habilítelo para que se inicie automáticamente al inicio:

sudo systemctl enable openvpn@server

Su servicio OpenVPN ya está en funcionamiento. Sin embargo, antes de que pueda comenzar a usarlo, primero debe crear un archivo de configuración para la computadora cliente. Ya hemos cubierto cómo crear pares de certificado / clave para clientes, y en el siguiente paso demostraremos cómo crear una infraestructura que genere fácilmente archivos de configuración del cliente.

Cree la infraestructura de configuración del cliente

Cada cliente debe tener su propia configuración y cada uno debe estar alineado con la configuración descrita en el archivo de configuración del servidor. Primero deberá crear un archivo de configuración "base", luego crear un script que le permita generar archivos de configuración de cliente únicos, certificados y claves si es necesario.

Empiece por crear un nuevo directorio donde guardará los archivos de configuración del cliente dentro del directorio de configuración del cliente que creó anteriormente:

mkdir -p ~/client-configs/files

A continuación, copie un archivo de configuración de cliente de ejemplo en el directorio client-configs para usarlo como configuración base:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Abra el siguiente archivo:

nano ~/client-configs/base.conf

En el interior, ubique la directiva remota. Esto le dice al cliente la dirección del servidor OpenVPN - la dirección IP pública del servidor OpenVPN. Si ha decidido cambiar el puerto en el que escucha el servidor OpenVPN, también deberá cambiar 1194 en el puerto seleccionado:

. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 1194
. . .

Asegúrese de que el protocolo coincida con el valor que está utilizando en la configuración del servidor:

proto udp

Luego, elimine los comentarios de las directivas de user  y group eliminando ; al principio de cada línea:

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

Busque las directivas que establecen ca , cert y key . Comente estas directivas, ya que agregará certificados y claves dentro del archivo en sí:

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key

Del mismo modo, comente la directiva tls-auth, ya que agregará ta.key directamente en el archivo de configuración del cliente:

# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1

Agregue o modifique los parámetros de cipher y auth en el archivo /etc/openvpn/server.conf:

cipher AES-256-CBC
auth SHA256

A continuación, agregue la directiva de key-direction en algún lugar del archivo. Debe configurarlo 1para que la VPN funcione correctamente en el servidor del cliente:

key-direction 1

Finalmente, agregue algunas líneas comentadas. Si bien puede incluir estas directivas en cada archivo de configuración de cliente, solo deben habilitarse para los clientes de Linux que se envían con un archivo /etc/openvpn/update-resolv-conf. Este script usa la utilidad resolvconf para actualizar la información de DNS para los clientes de Linux.

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Si su cliente está ejecutando Linux y tiene un archivo /etc/openvpn/update-resolv-conf, descomente estas líneas del archivo de configuración del cliente después de que se haya generado.

Guarde y cierre el archivo.

A continuación, cree un script simple que compile la configuración básica con sus certificados, claves y archivos de cifrado y luego coloque la configuración generada en el directory ~/client-configs/files. Abra un nuevo archivo llamado make_config.sh en el directorio ~/client-configs:

nano ~/client-configs/make_config.sh

En el interior, agregue el siguiente contenido:

#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/client-configs/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

Guarde y cierre el archivo.

Antes de continuar, asegúrese de marcar este archivo como ejecutable escribiendo:

chmod 700 ~/client-configs/make_config.sh

Este script crea una copia del archivo base.conf que creó, recopila todos los certificados y archivos clave que ha creado para su cliente, extrae su contenido, los agrega a la copia del archivo de configuración base y exporta todo este contenido a un nuevo archivo de configuración de cliente. Esto significa que, en lugar de tener que administrar la configuración del cliente, el certificado y los archivos de claves por separado, toda la información requerida se almacena en un solo lugar. El beneficio de esto es que si alguna vez necesita agregar un cliente en el futuro, simplemente puede ejecutar este script para crear rápidamente el archivo de configuración y asegurarse de que toda la información importante se almacene en una única ubicación de fácil acceso.

Tenga en cuenta que cada vez que agregue un nuevo cliente, deberá generar nuevas claves y certificados.

Generar configuraciones de cliente

Si siguió la guía, creó un certificado de cliente y una clave client1.crt y client1.key respectivamente . Puede generar un archivo de configuración para estas credenciales navegando a su directorio ~/client-configs y ejecutando el script que ejecutó al final del paso anterior:

cd ~/client-configs
sudo ./make_config.sh client1

Esto creará un archivo llamado client1.ovpn en su directorio ~/client-configs/files:

ls ~/client-configs/files

Debería recibir el siguiente mensaje de salida:

client1.ovpn

Debe transferir este archivo al dispositivo que desea utilizar como cliente. Por ejemplo, podría ser su computadora local o un dispositivo móvil.

Las aplicaciones exactas utilizadas para realizar esta transferencia dependerán del sistema operativo del dispositivo y las preferencias personales, un método confiable y seguro es usar SFTP (protocolo de transferencia de archivos SSH) o SCP (Copia segura) en el backend. Esto llevará los archivos de autenticación de VPN del cliente a través de una conexión encriptada.

A continuación, se muestra un comando SFTP de ejemplo con el ejemplo client1.ovpn que puede ejecutar desde su computadora local (macOS o Linux). Coloque el archivo .ovpn en su directorio de inicio:

sftp TUO_NOME_UTENTE@IP_SERVER_VPN:client-configs/files/client1.ovpn ~/

Instalación y configuración del cliente

Esta sección explica cómo instalar un perfil VPN de cliente en Windows, macOS, Linux.

La conexión OpenVPN tendrá el mismo nombre que el que nombró el archivo .ovpn . En cuanto a este tutorial, eso significa que la conexión se llama client1.ovpn, alineada con el primer archivo de cliente generado.

Instalación para Windows

Descargue la aplicación cliente OpenVPN para Windows desde la página de descargas de OpenVPN . Elija la versión de instalación adecuada para su versión de Windows.

Nota: OpenVPN requiere privilegios de administrador.

Después de instalar OpenVPN, copie el archivo .ovpn a:

C:\Program Files\OpenVPN\config

Cuando inicie OpenVPN, verá automáticamente el perfil y lo hará disponible.

Debe ejecutar OpenVPN como administrador cada vez que lo utilice, incluso desde cuentas administrativas. Para hacer esto sin tener que hacer clic con el botón derecho y seleccionar Ejecutar como administrador cada vez que use la VPN, debe configurarlo previamente desde una cuenta administrativa. Esto también significa que los usuarios estándar deberán ingresar la contraseña de administrador para usar OpenVPN. Por otro lado, los usuarios estándar no pueden conectarse al servidor correctamente a menos que la aplicación OpenVPN en el cliente tenga derechos de administrador, por lo que se requieren privilegios elevados.

Para configurar la aplicación OpenVPN para que siempre se ejecute como administrador, haga clic con el botón derecho en el icono de acceso directo y vaya a Propiedades. En la parte inferior de la pestaña Compatibilidad, haga clic en el botón para cambiar la configuración de todos los usuarios. En la nueva ventana, seleccione Ejecutar este programa como administrador.

Siempre que inicie la GUI de OpenVPN, Windows le preguntará si desea permitir que el programa realice cambios en su computadora. Haga clic en . Al iniciar la aplicación cliente OpenVPN, el subprograma solo se coloca en la bandeja del sistema para que pueda conectar y desconectar la VPN según sea necesario; en realidad, no establece la conexión VPN.

Después de iniciar OpenVPN, inicie una conexión accediendo al subprograma de la bandeja del sistema y haciendo clic derecho en el icono del subprograma OpenVPN. Esto abre el menú contextual. Seleccione client1 en la parte superior del menú (es su perfil de client1.ovpn ) y elija Conectar.

Se abrirá una ventana de estado que muestra la salida del registro mientras se establece la conexión y se mostrará un mensaje una vez que el cliente esté conectado.

Desconéctese de la VPN de la misma manera: vaya al subprograma de la bandeja del sistema , haga clic con el botón derecho en el icono del subprograma OpenVPN, seleccione el perfil del cliente y haga clic en Desconectar.

Instalación para macOS

Tunnelblick es un cliente OpenVPN de código abierto gratuito para macOS. Puede descargar la última imagen de disco de la página de descargas de Tunnelblick . Haga doble clic en el archivo .dmg descargado y siga las instrucciones de instalación.

Hacia el final del proceso de instalación, Tunnelblick le preguntará si tiene el archivo de configuración. Seleccione el archivo de configuración y deje que Tunnelblick termine. Abra una ventana del Finder y haga doble clic en client1.ovpn. Tunnelblick instalará el perfil del cliente. Se requieren privilegios administrativos.

Inicie Tunnelblick haciendo doble clic en el icono de Tunnelblick en la carpeta Aplicaciones. Una vez que se inicia Tunnelblick, habrá un icono de Tunnelblick en la barra de menú en la parte superior derecha de la pantalla para verificar las conexiones. Haga clic en el icono y luego en el elemento de menú Connect client1 para iniciar la conexión VPN.

Instalación para Linux

Si está usando Linux, hay una variedad de herramientas que puede usar dependiendo de su distribución. El entorno de escritorio o el administrador de ventanas también pueden incluir utilidades de conexión.

Sin embargo, la forma más universal de conexión es simplemente usar el software OpenVPN.

En Ubuntu o Debian , puede instalarlo como lo hizo en el servidor escribiendo:

sudo apt update
sudo apt install openvpn

En CentOS, puede habilitar repositorios EPEL y luego instalarlo escribiendo:

sudo yum install epel-release
sudo yum install openvpn

Compruebe si su distribución incluye un script /etc/openvpn/update-resolv-conf:

ls /etc/openvpn

Debería recibir el siguiente mensaje de salida:

update-resolv-conf

A continuación, edite el archivo de configuración del cliente OpenVPN transferido:

nano client1.ovpn

Si pudo encontrar un archivo update-resolv-conf, descomente las tres líneas agregadas para ajustar la configuración de DNS:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Si usa CentOS, cambie la directiva de group de nogroup a nobody para que coincida con los grupos disponibles de la distribución:

group nobody

Guarde y cierre el archivo.

Ahora puede conectarse a la VPN simplemente apuntando el comando openvpn al archivo de configuración del cliente:

sudo openvpn --config client1.ovpn

Esto debería conectarte a tu VPN.

Revocación de certificados de cliente

En ocasiones, es posible que sea necesario revocar un certificado de cliente para evitar un mayor acceso al servidor VPN.

Para hacer esto, vaya al directorio EasyRSA en el servidor de CA:

cd EasyRSA-3.0.5/

A continuación, ejecute el script easyrsa con la opción de revocación, seguido del nombre del cliente que desea revocar:

./easyrsa revoke client2

Esto le pedirá que confirme la revocación ingresando .

Debería recibir el siguiente mensaje de salida:

Please confirm you wish to revoke the certificate with the following subject:

subject=
    commonName                = client2


Type the word 'yes' to continue, or any other input to abort.
  Continue with revocation: yes

Después de confirmar la acción, la CA revocará completamente el certificado del cliente. Sin embargo, su servidor OpenVPN actualmente no tiene forma de verificar si los certificados de cliente han sido revocados y el cliente aún tendrá acceso a la VPN. Para corregir esto, cree una lista de revocación de certificados (CRL) en el servidor de CA:

./easyrsa gen-crl

Esto generará un archivo llamado crl.pem. Transfiera de forma segura este archivo a su servidor OpenVPN:

scp ~/EasyRSA-3.0.5/pki/crl.pem TUO_NOME_UTENTE@IP_SERVER_VPN:/tmp

En su servidor OpenVPN, copie este archivo en su directorio /etc/openvpn/:

sudo cp /tmp/crl.pem /etc/openvpn

Luego, abra el archivo de configuración del servidor OpenVPN:

sudo nano /etc/openvpn/server.conf

En la parte inferior del archivo, agregue la opción crl-verify, que le indicará al servidor OpenVPN que verifique la lista de revocación de certificados que creamos cada vez que se realiza un intento de conexión:

crl-verify crl.pem

Guarde y cierre el archivo.

Finalmente, reinicie OpenVPN para implementar la revocación de certificados:

sudo systemctl restart openvpn@server

El cliente ya no debería poder conectarse al servidor con las credenciales anteriores.

Conclusión

La instalación y configuración de OpenVPN en Ubuntu 18.04 LTS está completa.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.