OpenVPN

Literalmente, hay una lista de razones por las que es posible que desee utilizar una VPN, pero mantener sus datos seguros es el número 1 en nuestra lista.

Y si bien hay algunos servicios VPN de pago que son bastante fáciles de usar en su billetera …

Si está tratando de mantener sus datos seguros, ¿por qué confiaría en ellos a una empresa súper secreta que puede o no tener conexiones con las operaciones de minería de datos ?

Respuesta: no deberías.

Especialmente cuando es tan fácil y económico configurar su propia VPN rápida en su SSD Nodes VPS.

Así que hoy, le mostraremos cómo instalar OpenVPN en Debian 10 para mantener sus datos verdaderamente seguros.

Requisitos previos para instalar OpenVPN en Debian 10

Dos VPS que ejecutan Debian 10, uno para alojar el servicio OpenVPN y otro para servir como su Autoridad de certificación (CA). No se recomienda usar su servidor OpenVPN como su CA, esto abre su VPN a las vulnerabilidades de seguridad.

Una cuenta regular (no root) con privilegios de sudo. Consulte nuestro tutorial de claves SSH para obtener más información.

NOTA: Si deshabilita la autenticación de contraseña mientras configura estos servidores, puede tener dificultades al transferir archivos entre ellos más adelante en esta guía. Para resolver este problema, puede volver a habilitar la autenticación de contraseña en cada servidor. O bien, puede generar un par de claves SSH para cada servidor, luego agregar la clave SSH pública del servidor OpenVPN al archivo autorizado de claves de la máquina de CA y viceversa.

¿Cuál es la MEJOR OFERTA en el alojamiento en la nube?
Desarrolle a alta velocidad con un VPS de rendimiento de nodos SSD. DOBLAMOS la cantidad de almacenamiento NVMe increíblemente rápido en nuestro plan más popular y reforzamos la oferta de CPU en estos planes. No hay nada más parecido en el mercado, al menos no a estos precios.

¡Obtenga un VPS de rendimiento de 16GB con 160GB de almacenamiento NVMe por solo $ 89 / año por tiempo limitado!

¡Obtén ofertas por tiempo limitado! ⚡

Paso 1: Instale OpenVPN y EasyRSA

Comencemos actualizando nuestro aptcaché e instalándolo openvpn.

$ sudo apt update
$ sudo apt install openvpn

OpenVPN utiliza SSL / TLS para la autenticación y el intercambio de claves para cifrar el tráfico entre el servidor y los clientes.
Para emitir certificados de confianza, configurará su autoridad de certificación (CA) simple. Para hacer esto, descargaremos la última versión de EasyRSA, que usaremos para construir nuestra infraestructura de clave pública (PKI) de CA, desde el repositorio oficial de GitHub del proyecto .

NOTE:Se recomienda mantener el servidor de CA apagado cuando no se utilice para firmar claves como medida de precaución adicional.

Para comenzar a construir la infraestructura de CA y PKI, utilice wgetpara descargar la última versión de EasyRSA tanto en su máquina de CA como en su servidor OpenVPN .

wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz

Luego extrae el tarball:

cd ~
tar xvf EasyRSA-unix-v3.0.6.tgz

Ha instalado con éxito todo el software requerido en su servidor y máquina CA. Continúe para configurar las variables utilizadas por EasyRSA y para configurar un directorio de CA, desde el cual generará las claves y certificados necesarios para que su servidor y sus clientes accedan a la VPN.

Paso 2: configuración de las variables de EasyRSA y creación de la CA

EasyRSA viene instalado con un archivo de configuración que puede editar para definir una serie de variables para su CA.

En su máquina CA , navegue al directorio EasyRSA:

cd ~/EasyRSA-v3.0.6/

Podemos utilizar la plantilla haciendo una copia de un archivo existente en este directorio y renombrándolo :easy-rsavars.examplevars

cp vars.example vars

Necesitamos editar algunas de las variables que ayudan a decidir cómo crear los certificados. Use nano, u otro editor favorito, para abrir el archivo. Vamos a editar algunas variables hacia el final del archivo.

nano vars

Encuentre la configuración que establece los valores predeterminados de campo para los nuevos certificados. Se verá algo como esto:

#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      "me@example.net"
#set_var EASYRSA_REQ_OU         "My Organizational Unit"

Descomente estas líneas y actualice los valores resaltados a lo que prefiera, pero no los deje en blanco:

set_var EASYRSA_REQ_COUNTRY    "MX"
set_var EASYRSA_REQ_PROVINCE   "Sinaloa"
set_var EASYRSA_REQ_CITY       "Mazatlan"
set_var EASYRSA_REQ_ORG        "FIMaz"
set_var EASYRSA_REQ_EMAIL      "dsantana@fimaz.net"
set_var EASYRSA_REQ_OU         "TI"

Cuando haya terminado, guarde y cierre el archivo.

Dentro del directorio EasyRSA hay un script llamado easyrsaque se llama para realizar una variedad de tareas relacionadas con la construcción y administración de la CA. Ejecute este script con la init-pkiopción de iniciar la infraestructura de clave pública en el servidor de CA:

./easyrsa init-pki
Output
. . .
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/debian/EasyRSA-v3.0.6/pki

Después de esto, easyrsavuelva a llamar al script, siguiéndolo con la build-caopción. Esto creará la CA y creará dos archivos importantes, ca.crtca.keyque conforman los lados público y privado de un certificado SSL.

  • ca.crtes el archivo de certificado público de la CA que, en el contexto de OpenVPN, el servidor y el cliente usan para informarse mutuamente que son parte de la misma red de confianza y no alguien que realiza un ataque de hombre en el medio. Por esta razón, su servidor y todos sus clientes necesitarán una copia del ca.crtarchivo.
  • ca.keyes la clave privada que la máquina de CA usa para firmar claves y certificados para servidores y clientes. Si un atacante obtiene acceso a su CA y, a su vez, a su ca.keyarchivo, podrá firmar solicitudes de certificados y acceder a su VPN, lo que impide su seguridad. Es por eso que su ca.keyarchivo solo debe estar en su máquina CA y que, idealmente, su máquina CA debe mantenerse fuera de línea cuando no se firman las solicitudes de certificado como medida de seguridad adicional.

Si no desea que se le solicite una contraseña cada vez que interactúa con su CA, puede ejecutar el build-cacomando con la nopassopción, como esta:

./easyrsa build-ca nopass

En la salida, se le pedirá que confirme el nombre común para su CA:

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

El nombre común es el nombre utilizado para referirse a esta máquina en el contexto de la autoridad de certificación. Puede ingresar cualquier cadena de caracteres para el nombre común de la CA pero, por simplicidad, presione ENTERpara aceptar el nombre predeterminado.

Con eso, su CA está en su lugar y está lista para comenzar a firmar solicitudes de certificados.

Paso 3: creación del certificado del servidor, la clave y los archivos de cifrado

Ahora que tiene una CA lista para funcionar, puede generar una clave privada y una solicitud de certificado desde su servidor y luego transferir la solicitud a su CA para que se firme, creando el certificado requerido. También es libre de crear algunos archivos adicionales utilizados durante el proceso de cifrado.

Comience navegando al directorio EasyRSA en su servidor OpenVPN :

cd EasyRSA-v3.0.6/

A partir de ahí, ejecute el easyrsascript con la init-pkiopción. Aunque ya ejecutó este comando en la máquina de CA, es necesario ejecutarlo aquí porque su servidor y CA tendrán directorios PKI separados:

./easyrsa init-pki

Luego easyrsa, vuelva a llamar al script, esta vez con la gen-reqopción seguida de un nombre común para la máquina. Una vez más, esto podría ser lo que quiera, pero puede ser útil para que sea algo descriptivo. A lo largo de este tutorial, el nombre común del servidor OpenVPN será simplemente «servidor». Asegúrese de incluir también la nopassopción. De lo contrario, protegerá con contraseña el archivo de solicitud, lo que podría provocar problemas de permisos más adelante:

NOTA: Si elige un nombre que no sea «servidor» aquí, deberá ajustar algunas de las instrucciones a continuación. Por ejemplo, al copiar los archivos generados en el /etc/openvpndirectorio, deberá sustituir los nombres correctos. También tendrá que modificar el /etc/openvpn/server.confarchivo posteriormente a punto para el correcto .crt.keyarchivos.

./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/:

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

Usando un método seguro (como SCP, en nuestro ejemplo a continuación), transfiera el archivo vpnserver.reqa su máquina CA:

scp ~/EasyRSA-v3.0.6/pki/reqs/server.req debian@your_CA_ip:/tmp

A continuación, en su máquina CA , navegue al directorio EasyRSA:

cd EasyRSA-v3.0.6/

Utilizando easyrsa scriptnuevamente, importe el archivo vpnserver.req, siguiendo la ruta del archivo con su nombre común:

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

Luego, firme la solicitud ejecutando el scrip easyrsa con la opcion sign-req, seguido del tipo de solicitud y el nombre común. El tipo de solicitud puede ser clientserver, por lo tanto, para la solicitud de certificado del servidor OpenVPN, asegúrese de utilizar el tipo server de solicitud:

./easyrsa sign-req server server

En la salida, se le pedirá que verifique que la solicitud proviene de una fuente confiable. Escriba yesy presione ENTERpara 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 1080 days:

subject=
    commonName                = server


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

Si cifró su clave CA, se le pedirá su contraseña en este momento.

Luego, transfiera el certificado firmado a su servidor VPN utilizando un método seguro:

scp pki/issued/server.crt debian@your_server_ip:/tmp

Antes de cerrar sesión en su máquina CA, transfiera el archivo ca.crta su servidor también:

scp pki/ca.crt debian@your_server_ip:/tmp

Luego, vuelva a iniciar sesión en su servidor OpenVPN y copie los archivos server.crtca.crten su directorio /etc/openvpn/:

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

Luego navegue a su directorio EasyRSA:

cd EasyRSA-v3.0.6/

A partir de ahí, cree una clave fuerte de Diffie-Hellman para usar durante el intercambio de claves escribiendo:

./easyrsa gen-dh

Esto puede tardar unos minutos en completarse. Una vez que lo haga, genere una firma HMAC para fortalecer las capacidades de verificación de integridad TLS del servidor:

sudo openvpn --genkey --secret ta.key

Cuando finalice el comando, copie los dos archivos nuevos en su directorio /etc/openvpn/:

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

Con eso, se han generado todos los archivos de certificados y claves que necesita su servidor. Está listo para crear los certificados y claves correspondientes que su máquina cliente utilizará para acceder a su servidor OpenVPN.

Paso 4: generar un certificado de cliente y un par de claves

Aunque puede generar una clave privada y una solicitud de certificado en su máquina cliente y luego enviarla a la CA para que la firme, esta guía describe un proceso para generar la solicitud de certificado en el servidor. El beneficio de esto es que podemos crear un script que generará automáticamente archivos de configuración del cliente que contienen todas las claves y certificados requeridos. Esto le permite evitar tener que transferir claves, certificados y archivos de configuración a los clientes y agiliza el proceso de unirse a la VPN.

Generaremos una sola clave de cliente y un par de certificados para esta guía. Si tiene más de un cliente, puede repetir este proceso para cada uno. Sin embargo, tenga en cuenta que deberá pasar un valor de nombre único al script para cada cliente. En este tutorial, se hace referencia al primer par de certificado / clave client1.

Comience creando una estructura de directorio dentro de su directorio de inicio para almacenar el certificado del cliente y los archivos clave:

mkdir -p ~/client-configs/keys

Dado que los pares de certificado / clave de sus clientes y los archivos de configuración se almacenarán en este directorio, bloquee sus permisos como medida de seguridad:

chmod -R 700 ~/client-configs

Luego, regrese al directorio de EasyRSA y ejecute el scrip easyrsa con las opciones gen-reqnopass, junto con el nombre común del cliente:

cd ~/EasyRSA-v3.0.6/
./easyrsa gen-req client1 nopass

Presione ENTERpara confirmar el nombre común. Luego, copie el archivo client1.keyen el directorio/client-configs/keys/que creó anteriormente:

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

Luego, transfiera el client1.reqarchivo a su máquina CA utilizando un método seguro:

scp pki/reqs/client1.req debian@your_CA_ip:/tmp

Inicie sesión en su máquina de CA, navegue al directorio EasyRSA e importe la solicitud de certificado:

ssh debian@your_CA_ip
cd EasyRSA-v3.0.6/
./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 client:

./easyrsa sign-req client client1

Cuando se le solicite, ingrese sí para confirmar que tiene la intención de firmar la solicitud de certificado y que proviene de una fuente confiable. obtendrías el siguiente resultado

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

Nuevamente, si cifró su clave de CA, se le solicitará su contraseña aquí.

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

scp pki/issued/client1.crt debian@your_server_ip:/tmp

SSH de nuevo en su servidor OpenVPN y copie el certificado del cliente en el directorio /client-configs/keys/:

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

A continuación, copie los archivos ca.crty también ta.keyen el directorio /client-configs/keys/:

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

Con eso, los certificados y claves de su servidor y cliente se han generado y se almacenan en los directorios apropiados en su servidor. Todavía hay algunas acciones que deben realizarse con estos archivos, pero vendrán en un paso posterior. Por ahora, puede pasar a configurar OpenVPN en su servidor.

Paso 5: configuración del servicio OpenVPN

Ahora que se han generado los certificados y las claves de su 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 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 en su editor de texto preferido:

sudo nano /etc/openvpn/server.conf

Encuentre la sección HMAC buscando la directiva tls-auth. Esta línea ya no debería estar comentada, pero si no lo está, elimine » «Para descomentarlo.

/etc/openvpn/server.conf
tls-auth ta.key 0 # This file is secret

A continuación, busque la sección sobre cifrados criptográficos buscando las cipherlíneas comentadas . El AES-256-CBCcifrado ofrece un buen nivel de cifrado y está bien soportado. Una vez más, esta línea ya no debería estar comentada, pero si no lo está, simplemente elimine » «Precediéndolo:

/etc/openvpn/server.conf
cipher AES-256-CBC

Debajo de esto, agregue una authdirectiva para seleccionar el algoritmo de resumen de mensajes HMAC. Para esto, SHA256es una buena opción:

/etc/openvpn/server.conf
auth SHA256

Luego, encuentre la línea que contiene una dhdirectiva que define los parámetros de Diffie-Hellman. Debido a algunos cambios recientes realizados en EasyRSA, el nombre de archivo para la clave Diffie-Hellman puede ser diferente de lo que aparece en el archivo de configuración del servidor de ejemplo. Si es necesario, cambie el nombre del archivo que se muestra aquí quitando el 2048para que se alinee con la clave que generó en el paso anterior:

/etc/openvpn/server.conf
dh dh.pem

Por último, encontrar las usergrouplos ajustes y quitar el “ «Al comienzo de cada una para descomentar estas líneas:

/etc/openvpn/server.conf
user nobody
group nogroup

Los cambios que ha realizado en el server.confarchivo de muestra hasta este punto son necesarios para que OpenVPN funcione. Los cambios descritos a continuación son opcionales, aunque también son necesarios para muchos casos de uso comunes.

(Opcional) Empuje los cambios de 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 obligará a ninguna conexión a usar el túnel. Si desea utilizar la VPN para enrutar todo su tráfico, es probable que desee enviar la configuración de DNS a las computadoras cliente.

Hay algunas directivas en el archivo server.confque debe cambiar para habilitar esta funcionalidad. Encuentra la seccion redirect-gatewayy elimina el punto y coma » «Desde el principio de la linea redirect-gateway para descomentarla:

/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"

Justo debajo de esto, encuentre la dhcp-optionsección. Nuevamente, elimine el » «Desde delante de ambas líneas para descomentarlas:

/etc/openvpn/server.conf
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) Ajuste el puerto y el protocolo

Por defecto, el servidor OpenVPN usa el puerto 1194y el protocolo UDP para aceptar conexiones de clientes. Si necesita usar un puerto diferente debido a los entornos de red restrictivos en los que se encuentran sus clientes, puede cambiar la portopción. Si no está alojando contenido web en su servidor OpenVPN, el puerto 443es una opción popular ya que generalmente se permite a través de reglas de firewall./etc/openvpn/server.conf

# Optional!
port 443

A menudo, el protocolo está restringido a ese puerto también. Si es así, cambie protode UDP a TCP:/etc/openvpn/server.conf

# Optional!
proto tcp

Si lo hace cambiar el protocolo de TCP, que tendrá que cambiar el explicit-exit-notifyvalor de la directiva de 1que 0, ya que esta Directiva sólo es utilizado por UDP. Si no lo hace mientras usa TCP, se producirán errores al iniciar el servicio OpenVPN:/etc/openvpn/server.conf

# Optional!
explicit-exit-notify 0

Si no necesita usar un puerto y protocolo diferente, es mejor dejar estos dos ajustes como sus valores predeterminados.

(Opcional) Apunte a credenciales no predeterminadas

Si seleccionó un nombre diferente durante el ./build-key-servercomando anterior, modifique las líneas certkeyque ve para apuntar a los archivos .crty apropiados .key. Si utilizó el nombre predeterminado, «servidor», esto ya está configurado correctamente:/etc/openvpn/server.conf

cert server.crt
key server.key

Cuando haya terminado, guarde y cierre el archivo.

Después de revisar y realizar los cambios necesarios en la configuración de OpenVPN de su servidor para su caso de uso específico, puede comenzar a hacer algunos cambios en la red de su servidor.

Paso 6 – Ajuste de la configuración de red del servidor

Hay algunos aspectos de la configuración de red del servidor que deben modificarse para que OpenVPN pueda enrutar 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 debe enrutarse el tráfico de IP. Esto es esencial para la funcionalidad VPN que proporcionará su servidor.

Ajuste la configuración predeterminada de reenvío de IP de su servidor modificando el /etc/sysctl.confarchivo:

sudo nano /etc/sysctl.conf

En el interior, busque la línea comentada que se establece net.ipv4.ip_forward. Elimine el carácter » # » del principio de la línea para descomentar esta configuración:/etc/sysctl.conf

net.ipv4.ip_forward=1

Guarde y cierre el archivo cuando haya terminado.

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

sudo sysctl -p
Outputnet.ipv4.ip_forward = 1

Si siguió la guía de configuración inicial del servidor Debian 10 que figura en los requisitos previos, debe tener un firewall UFW en su lugar. Independientemente de si usa el firewall para bloquear el tráfico no deseado (lo que casi siempre debe hacer), para esta guía necesita un firewall para manipular parte del tráfico que ingresa al servidor. Algunas de las reglas del firewall deben modificarse para habilitar el enmascaramiento, un concepto de iptables que proporciona traducción dinámica de direcciones de red (NAT) sobre la marcha para enrutar correctamente las conexiones del cliente.

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

ip route | grep default

Su interfaz pública es la cadena que se encuentra dentro de la salida de este comando que sigue a la palabra «dev». Por ejemplo, este resultado muestra la interfaz nombrada eth0, que se resalta a continuación:

Outputdefault via 203.0.113.1 dev eth0 proto static

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

sudo nano /etc/ufw/before.rules

Las reglas UFW generalmente se agregan usando el ufwcomando. Sin before.rulesembargo, las reglas enumeradas en el archivo se leen y se ponen en su lugar antes de cargar 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 POSTROUTINGcadena en la nattabla y enmascarará cualquier tráfico proveniente de la VPN. Recuerde reemplazar eth0en la -A POSTROUTINGlínea a continuación con la interfaz que encontró en el comando anterior:/etc/ufw/before.rules

#
# 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 eth0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

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

Guarde y cierre el archivo cuando haya terminado.

A continuación, también debe indicarle a UFW que permita los paquetes reenviados de manera predeterminada. Para hacer esto, abra el /etc/default/ufwarchivo:

sudo nano /etc/default/ufw

En el interior, encuentre la DEFAULT_FORWARD_POLICYdirectiva y cambie el valor de DROPACCEPT:/ etc / default / ufw

DEFAULT_FORWARD_POLICY="ACCEPT"

Guarde y cierre el archivo cuando haya terminado.

A continuación, ajuste el firewall en sí para permitir el tráfico a OpenVPN. Si no cambió el puerto y el protocolo en el /etc/openvpn/server.confarchivo, deberá abrir el tráfico UDP al puerto 1194. Si modificó el puerto y / o protocolo, sustituya los valores que seleccionó aquí.

Además, en caso de que no haya agregado el puerto SSH al completar el tutorial de requisitos previos, 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 todos los archivos que ha modificado:

sudo ufw disable
sudo ufw enable

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

Paso 7: inicio y habilitación del servicio OpenVPN

Finalmente está listo para iniciar el servicio OpenVPN en su servidor. Esto se hace usando la utilidad systemd systemctl.

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. Se llama al archivo de configuración de su servidor , así que agréguelo al final del archivo de su unidad cuando lo llame:/etc/openvpn/server.conf@server

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, su salida se verá así:

Output● openvpn@server.service - OpenVPN connection to server
   Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
   Active: active (running) since Wed 2019-07-17 03:39:24 UTC; 29s ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
 Main PID: 3371 (openvpn)
   Status: "Initialization Sequence Completed"
    Tasks: 1 (limit: 3587)
   Memory: 1.2M
   CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
           └─3371 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --writepid /run/openvpn/

También puede verificar que la tun0interfaz OpenVPN esté disponible escribiendo:

ip addr show tun0

Esto generará una interfaz configurada:

Output3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast 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
    inet6 fe80::dd60:3a78:b0ca:1659/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

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

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 máquina cliente. Este tutorial ya explicaba cómo crear pares de certificado / clave para clientes, y en el siguiente paso demostraremos cómo crear una infraestructura que generará fácilmente archivos de configuración del cliente.

Paso 8: creación de la infraestructura de configuración del cliente

Crear archivos de configuración para clientes OpenVPN puede ser algo complicado, ya que cada cliente debe tener su propia configuración y cada uno debe alinearse con la configuración descrita en el archivo de configuración del servidor. En lugar de escribir un solo archivo de configuración que solo se puede usar en un cliente, este paso describe un proceso para construir una infraestructura de configuración del cliente que puede usar para generar archivos de configuración sobre la marcha. Primero creará un archivo de configuración «base» y luego creará un script que le permitirá generar archivos de configuración del cliente, certificados y claves únicos según sea necesario.

Comience creando un nuevo directorio donde almacenará los archivos de configuración del cliente dentro del directorio client-configsque creó anteriormente:

mkdir -p ~/client-configs/files

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

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

Abra este nuevo archivo en su editor de texto:

nano ~/client-configs/base.conf

En el interior, ubique la remotedirectiva. Esto señala al cliente a la dirección de su servidor OpenVPN: la dirección IP pública de su servidor OpenVPN. Si decidió cambiar el puerto en el que está escuchando el servidor OpenVPN, también deberá cambiar 1194al puerto que seleccionó:

~ / client-configs / base.conf
. . .
# 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:

~ / client-configs / base.conf
proto udp

A continuación, descomente las directivas usergroupeliminando el » «Al comienzo de cada línea:

~ / client-configs / base.conf
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

Encuentra las directivas que establecen el cacertkey. Comente estas directivas, ya que agregará los certificados y claves dentro del archivo en breve:

~ / client-configs / base.conf
# 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 tls-authdirectiva, ya que agregará directamente ta.keyal archivo de configuración del cliente:

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

Refleje la configuración cipherauthque establece en el archivo /etc/openvpn/server.conf:

~ / client-configs / base.conf
cipher AES-256-CBC
auth SHA256

A continuación, agregue la key-directiondirectiva en algún lugar del archivo. Usted debe ajustarlo a “1” para la VPN de funcionar correctamente en la máquina cliente:

~ / client-configs / base.conf
key-direction 1

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

~ / client-configs / base.conf
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Si su cliente está ejecutando Linux y tiene un archico /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 cuando haya terminado.

Luego, cree una secuencia de comandos simple que compile su configuración base con los certificados, claves y archivos de cifrado relevantes y luego coloque la configuración generada en el directorio ~/client-configs/files. Abra un nuevo archivo llamado make_config.shdentro del directorio ~/client-configs:

nano ~/client-configs/make_config.sh

En el interior, agregue el siguiente contenido, asegurándose de cambiarlo debianal de la cuenta de usuario no root de su servidor :~ / client-configs / make_config.sh

#!/bin/bash

# First argument: Client identifier

KEY_DIR=/home/debian/client-configs/keys
OUTPUT_DIR=/home/debian/client-configs/files
BASE_CONFIG=/home/debian/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 cuando haya terminado.

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

chmod 700 ~/client-configs/make_config.sh

Este script hará una copia del base.confarchivo que creó, recopilará todos los archivos de certificados y claves que ha creado para su cliente, extraerá su contenido, los agregará a la copia del archivo de configuración base y exportará todo este contenido a un Nuevo archivo de configuración del 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 para poder ejecutar este script y generar su archivo de configuración. Aprenderá a usar este script en el siguiente paso.

Paso 9: generación de configuraciones de cliente

Si siguió la guía, creó un certificado de cliente y una clave llamada client1.crtclient1.key, respectivamente, en el Paso 4. Puede generar un archivo de configuración para estas credenciales moviéndose a su directorio ~/client-configs y ejecutando el script que realizó al final del anterior paso:

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

Esto creará un archivo nombrado client1.ovpnen su directorio ~/client-configs/files:

ls ~/client-configs/files
Outputclient1.ovpn

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

Si bien las aplicaciones exactas utilizadas para realizar esta transferencia dependerán del sistema operativo de su dispositivo y sus preferencias personales, un método confiable y seguro es utilizar SFTP (protocolo de transferencia de archivos SSH) o SCP (Copia segura) en el back-end. Esto transportará los archivos de autenticación VPN de su cliente a través de una conexión cifrada.

Aquí hay un ejemplo de comando SFTP que utiliza el client1.ovpnejemplo que puede ejecutar desde su computadora local (macOS o Linux). Coloca el .ovpnarchivo en su directorio de inicio:

sftp debian@your_server_ip:client-configs/files/client1.ovpn ~/

Aquí hay varias herramientas y tutoriales para transferir archivos de forma segura desde el servidor a una computadora local:

Paso 10: instalación de la configuración del cliente

Esta sección cubre cómo instalar un perfil VPN de cliente en Windows, macOS, Linux, iOS y Android. Ninguna de estas instrucciones para el cliente depende la una de la otra, por lo tanto, siéntase libre de omitir la que corresponda a su dispositivo.

La conexión OpenVPN tendrá el mismo nombre que el que haya llamado el .ovpnarchivo. Con respecto a este tutorial, esto significa que se nombra la conexión client1.ovpn, alineándose con el primer archivo de cliente que generó.

Ventanas

Instalando

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

Nota: OpenVPN necesita privilegios administrativos para instalar.

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

C:\Program Files\OpenVPN\config

Cuando inicie OpenVPN, verá automáticamente el perfil y lo pondrá a disposición.

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

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

Conectando

Cada vez que inicie la GUI de OpenVPN, Windows le preguntará si desea permitir que el programa realice cambios en su computadora. Haz clic en  . El lanzamiento de la aplicación cliente OpenVPN solo coloca el applet en la bandeja del sistema para que pueda conectar y desconectar la VPN según sea necesario; en realidad no hace la conexión VPN.

Una vez que se inicia OpenVPN, inicie una conexión entrando en el applet de la bandeja del sistema y haciendo clic derecho en el icono del applet de OpenVPN. Esto abre el menú contextual. Seleccione cliente1 en la parte superior del menú (ese es su client1.ovpnperfil) 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 applet de la bandeja del sistema, haga clic con el botón derecho en el ícono de applet OpenVPN, seleccione el perfil del cliente y haga clic en Desconectar .

Mac OS

Instalando

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

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

Conectando

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

Linux

Instalando

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

Sin embargo, la forma más universal de conectarse es usar el software OpenVPN.

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

sudo apt update
sudo apt install openvpn

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

sudo yum install epel-release
sudo yum install openvpn

Configurando

Verifique si su distribución incluye un /etc/openvpn/update-resolv-confscript:

ls /etc/openvpn
Outputupdate-resolv-conf

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

nano client1.ovpn

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

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

Si está usando CentOS, cambie la groupdirectiva de nogroupnobodypara que coincida con los grupos disponibles de la distribución:

client1.ovpn
group nobody

Guarde y cierre el archivo.

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

sudo openvpn --config client1.ovpn

Esto debería conectarte a tu VPN.

iOS

Instalando

Desde iTunes App Store, busque e instale OpenVPN Connect , la aplicación de cliente oficial de iOS OpenVPN. Para transferir la configuración de su cliente iOS al dispositivo, conéctelo directamente a una computadora.

El proceso de completar la transferencia con iTunes se describe aquí. Abra iTunes en la computadora y haga clic en iPhone > aplicaciones . Desplácese hacia abajo hasta la sección Compartir archivos y haga clic en la aplicación OpenVPN. La ventana en blanco a la derecha, Documentos OpenVPN , es para compartir archivos. Arrastre el .ovpnarchivo a la ventana Documentos de OpenVPN.

iTunes muestra el perfil VPN listo para cargar en el iPhone

Ahora inicie la aplicación OpenVPN en el iPhone. Recibirá una notificación de que un nuevo perfil está listo para importar. Toque el signo más verde para importarlo.

La aplicación OpenVPN para iOS que muestra un nuevo perfil listo para importar

Conectando

OpenVPN ahora está listo para usar con el nuevo perfil. Inicie la conexión deslizando el botón Conectar a la posición Encendido . Desconecte deslizando el mismo botón a Apagado .

Nota: El conmutador VPN en Configuración no se puede usar para conectarse a la VPN. Si lo intentas, recibirás un aviso para conectarte solo con la aplicación OpenVPN.

La aplicación iOS OpenVPN conectada a la VPN

Androide

Instalando

Abre Google Play Store. Busque e instale Android OpenVPN Connect , la aplicación cliente oficial de Android OpenVPN.

Puede transferir el .ovpnperfil conectando el dispositivo Android a su computadora por USB y copiando el archivo. Alternativamente, si tiene un lector de tarjetas SD, puede quitar la tarjeta SD del dispositivo, copiar el perfil y luego insertar la tarjeta nuevamente en el dispositivo Android.

Inicie la aplicación OpenVPN y toque el menú para importar el perfil.

La selección del menú de importación del perfil de la aplicación de Android OpenVPN

Luego navegue a la ubicación del perfil guardado (la captura de pantalla usa /sdcard/Download/) y seleccione el archivo. La aplicación tomará nota de que el perfil se importó.

La aplicación de Android OpenVPN que selecciona el perfil VPN para importar

Conectando

Para conectarse, simplemente toque el botón Conectar . Se le preguntará si confía en la aplicación OpenVPN. Elija Aceptar para iniciar la conexión. Para desconectarse de la VPN, regrese a la aplicación OpenVPN y elija Desconectar .

La aplicación de Android OpenVPN lista para conectarse a la VPN

Paso 11: prueba de la conexión VPN (opcional)

Nota: Este método para probar su conexión VPN solo funcionará si optó por enrutar todo su tráfico a través de la VPN en el Paso 5.

Una vez que todo está instalado, una simple comprobación confirma que todo funciona correctamente. Sin tener una conexión VPN habilitada, abra un navegador y vaya a DNSLeakTest .

El sitio le devolverá la dirección IP asignada por su proveedor de servicios de Internet y tal como aparece en el resto del mundo. Para verificar su configuración de DNS a través del mismo sitio web, haga clic en Prueba Extendida y le dirá qué servidores DNS está utilizando.

Ahora conecte el cliente OpenVPN a la VPN de su Droplet y actualice el navegador. Ahora debería aparecer una dirección IP completamente diferente (la de su servidor VPN), y así es como se le aparece al mundo. Nuevamente, la Prueba Extendida de DNSLeakTest verificará su configuración de DNS y confirmará que ahora está utilizando los solucionadores de DNS empujados por su VPN.

Paso 12: revocación de certificados de cliente

Ocasionalmente, es posible que deba revocar un certificado de cliente para evitar un mayor acceso al servidor OpenVPN.

Para hacerlo, navegue al directorio EasyRSA en su máquina CA:

cd EasyRSA-v3.0.6/

A continuación, ejecute el easyrsascript con la revokeopción, seguido del nombre del cliente que desea revocar:

./easyrsa revoke client2

Esto le pedirá que confirme la revocación ingresando yes:

OutputPlease 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á por completo el certificado del cliente. Sin embargo, su servidor OpenVPN actualmente no tiene forma de verificar si los certificados de algún 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 su máquina CA:

./easyrsa gen-crl

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

scp ~/EasyRSA-v3.0.6/pki/crl.pem debian@your_server_ip:/tmp

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

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

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

sudo nano /etc/openvpn/server.conf

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

/etc/openvpn/server.conf
crl-verify crl.pem

Guarde y cierre el archivo.

Finalmente, reinicie OpenVPN para implementar la revocación del certificado:

sudo systemctl restart openvpn@server

El cliente ya no debería poder conectarse con éxito al servidor utilizando la credencial anterior.

Para revocar clientes adicionales, siga este proceso:

  1. Revocar el certificado con el comando./easyrsa revoke client_name
  2. Generar una nueva CRL
  3. Transfiera el nuevo crl.pemarchivo a su servidor OpenVPN y cópielo en el /etc/openvpndirectorio para sobrescribir la lista anterior.
  4. Reinicie el servicio OpenVPN.

Puede utilizar este proceso para revocar cualquier certificado que haya emitido previamente para su servidor.

Conclusión

Ahora está atravesando de forma segura Internet protegiendo su identidad, ubicación y tráfico de intrusos y censores.

Para configurar más clientes, solo necesita seguir los pasos 4 y 9-11 para cada dispositivo adicional. Para revocar el acceso a los clientes, solo siga el paso 12 .