GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo configurar un servidor OpenVPN en Debian 9

Ya sea que desee acceder a Internet de manera segura mientras está conectado a una red Wi-Fi pública que no es confiable, omitir el contenido restringido geográficamente o permitir que sus compañeros de trabajo se conecten de manera segura a la red de su empresa cuando trabajan de forma remota, usar una VPN es la mejor solución.

Una VPN le permite conectarse a servidores VPN remotos, lo que hace que su conexión sea encriptada y segura, y navegar por la web de forma anónima al mantener la privacidad de sus datos de tráfico.

Hay muchos proveedores comerciales de VPN entre los que puede elegir, pero nunca puede estar realmente seguro de que el proveedor no esté registrando su actividad. La opción más segura es configurar su propio servidor VPN.

Este tutorial explicará cómo instalar y configurar OpenVPN en Debian 9. También le mostraremos cómo generar certificados de clientes y crear archivos de configuración

OpenVPN es una solución VPN de capa de sockets seguros (SSL) de código abierto y con todas las funciones. Implementa la extensión de red segura de capa 2 o 3 de OSI utilizando el protocolo SSL/TLS.

Requisitos previos #

Para completar este tutorial, necesitará:

  • Sudo accede a un servidor Debian 9 con un firewall UFW básico configurado sobre el cual instalaremos el servicio OpenVPN.
  • Máquina dedicada separada para servir como su CA (autoridad de certificación). Si no desea utilizar una máquina dedicada para su CA, puede crear la CA en su servidor OpenVPN o en su máquina local. Una vez que haya terminado de crear la CA, se recomienda mover el directorio de la CA a un lugar seguro o fuera de línea.

Este tutorial asume que la CA está en una máquina Debian 9 separada. Se aplicarán los mismos pasos (con pequeñas modificaciones) si está utilizando su servidor como CA.

Estamos utilizando una máquina CA separada para evitar que los atacantes se infiltren en el servidor. Si un atacante logra acceder a la clave privada de CA, podría usarla para firmar nuevos certificados, lo que le dará acceso al servidor VPN.

Creando CA con EasyRSA #

El primer paso es crear una infraestructura de clave pública (PKI) que incluya lo siguiente:

  • Un certificado de autoridad certificadora (CA) y una clave privada.
  • Un certificado independiente y un par de claves privadas para el servidor emitido por nuestra CA.
  • Un certificado independiente y un par de claves privadas para cada cliente emitido por nuestra CA.

Como se menciona en los requisitos previos por razones de seguridad, construiremos la CA en una máquina independiente.

Usaremos una utilidad CLI llamada EasyRSA para crear CA, generar solicitudes de certificados y firmar certificados.

Realice los siguientes pasos en su máquina CA :

  1. Comience descargando la última versión de EasyRSA desde el repositorio del proyecto Github con el siguiente comando wget:

    cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz
  2. Una vez que se complete la descarga, extraiga el archivo:

    tar xzf EasyRSA-unix-v3.0.6.tgz
  3. Navegue al directorio EasyRSA y cree un archivo de configuración llamado vars copiando el vars.example archivo:

    cd ~/EasyRSA-v3.0.6/cp vars.example vars
  4. Abra el archivo y descomente y actualice las siguientes entradas para que coincidan con su información.

    nano ~/EasyRSA-v3.0.6/vars
    ~/EasyRSA-v3.0.6/vars
    set_var EASYRSA_REQ_COUNTRY    "US"
    set_var EASYRSA_REQ_PROVINCE   "Pennsylvania"
    set_var EASYRSA_REQ_CITY       "Pittsburgh"
    set_var EASYRSA_REQ_ORG        "Linuxize"
    set_var EASYRSA_REQ_EMAIL      "[email protected]"
    set_var EASYRSA_REQ_OU         "Community"
  5. Antes de generar un par de claves de CA, primero debe inicializar una nueva PKI con:

    ./easyrsa init-pki
    init-pki complete; you may now create a CA or requests.
    Your newly created PKI dir is: /home/causer/EasyRSA-v3.0.6/pki
  6. El siguiente paso es construir la CA:

    ./easyrsa build-ca

    Si no desea que se le solicite una contraseña cada vez que firme sus certificados, ejecute build-ca comando usando el nopass opción:./easyrsa build-ca nopass .

    ...
    Enter PEM pass phrase:
    Verifying - Enter PEM pass phrase:
    -----
    ...
    -----
    Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
    
    CA creation complete and you may now import and sign cert requests.
    Your new CA certificate file for publishing is at:
    /home/causer/EasyRSA-v3.0.6/pki/ca.crt

    Se le pedirá que establezca una contraseña para la clave de CA e ingrese un nombre común para su CA.

    Una vez completado, el script creará dos archivos:certificado público de CA ca.crt y clave privada de CA ca.key .

    Usaremos los archivos de la autoridad de certificación (CA) para firmar solicitudes de certificado para nuestro servidor y clientes OpenVPN.

Instalando OpenVPN y EasyRSA #

El siguiente paso es instalar el paquete OpenVPN que está disponible en los repositorios de Debian y descargar la última versión de EasyRSA en el servidor OpenVPN.

Los siguientes pasos se realizan en el servidor OpenVPN .

  1. La instalación de OpenVPN es bastante sencilla, simplemente ejecute los siguientes comandos en el servidor OpenVPN :

    sudo apt updatesudo apt install openvpn
  2. Descargue la última versión de EasyRSA:

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

    Una vez que se complete la descarga, escriba el siguiente comando para extraer el archivo:

    tar xzf EasyRSA-unix-v3.0.6.tgz

    Aunque ya inicializamos una PKI en la máquina CA, también necesitamos crear una nueva PKI en el servidor OpenVPN. Para hacerlo, use los mismos comandos que antes:

    cd ~/EasyRSA-v3.0.6/./easyrsa init-pki

    Si aún se pregunta por qué necesitamos dos instalaciones de EasyRSA, es porque usaremos esta instancia de EasyRSA para generar solicitudes de certificado que se firmarán con la instancia de EasyRSA en la máquina CA. .

    Puede sonar complicado y un poco confuso, pero una vez que lea todo el tutorial, verá que realmente no es complicado.

Creación de claves Diffie-Hellman y HMAC #

En esta sección, generaremos una clave fuerte Diffie-Hellman que se usará durante el intercambio de claves y un archivo de firma HMAC para agregar una capa adicional de seguridad a la conexión.

  1. Primero navegue al directorio EasyRSA en su servidor OpenVPN .

    cd ~/EasyRSA-v3.0.6/
  2. Genere una clave Diffie-Hellman:

    ./easyrsa gen-dh

    El script generará parámetros DH de 2048 bits de longitud. Dependiendo de los recursos de su sistema, la generación puede tomar algún tiempo. Una vez completado, se imprimirá el siguiente mensaje en su pantalla:

    DH parameters of size 2048 created at /home/serveruser/EasyRSA-v3.0.6/pki/dh.pem

    Copie el dh.pem archivo al /etc/openvpn directorio:

    sudo cp ~/EasyRSA-v3.0.6/pki/dh.pem /etc/openvpn/
  3. Generar una firma HMAC:

    openvpn --genkey --secret ta.key

    Una vez hecho esto, copie el ta.key archivo al /etc/openvpn directorio:

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

Creación de certificado de servidor y número de clave privada

Esta sección describe cómo generar una clave privada y una solicitud de certificado para el servidor OpenVPN.

  1. Navegue al directorio EasyRSA en su servidor OpenVPN y genere una nueva clave privada para el servidor y un archivo de solicitud de certificado:

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

    Estamos usando el nopass argumento porque queremos iniciar el servidor OpenVPN sin ingresar una contraseña. También en este ejemplo, estamos usando server1 como un identificador de nombre de servidor (entidad). Si elige un nombre diferente para su servidor, no olvide ajustar las instrucciones a continuación donde se usa el nombre del servidor.

    El comando creará dos archivos, una clave privada (server1.key ) y un archivo de solicitud de certificado (server1.req ).

    -----
    Common Name (eg: your user, host, or server name) [server1]:
    
    Keypair and certificate request completed. Your files are:
    req: /home/serveruser/EasyRSA-v3.0.6/pki/reqs/server1.req
    key: /home/serveruser/EasyRSA-v3.0.6/pki/private/server1.key
  2. Copie la clave privada en /etc/openvpn directorio:

    sudo cp ~/EasyRSA-v3.0.6/pki/private/server1.key /etc/openvpn/
  3. Transfiera el archivo de solicitud de certificado a su máquina CA:

    scp ~/EasyRSA-v3.0.6/pki/reqs/server1.req causer@your_ca_ip:/tmp

    En este ejemplo estamos usando scp para transferir el archivo, también puede usar rsync sobre ssh o cualquier otro método seguro.

  4. Inicie sesión en su máquina CA , cambie al directorio EasyRSA e importe el archivo de solicitud de certificado:

    cd ~/EasyRSA-v3.0.6./easyrsa import-req /tmp/server1.req server1

    El primer argumento es la ruta al archivo de solicitud de certificado y el segundo es el nombre corto (entidad) del servidor. En nuestro caso, el nombre del servidor es server1 .

    The request has been successfully imported with a short name of: server1
    You may now use this name to perform signing operations on this request.

    Este comando simplemente copia el archivo de solicitud en pki/reqs directorio.

  5. Mientras aún está en el directorio EasyRSA en máquina CA ejecute el siguiente comando para firmar la solicitud:

    cd ~/EasyRSA-v3.0.6./easyrsa sign-req server server1

    El primer argumento puede ser server o client y el segundo es el nombre corto (entidad) del servidor.

    Se le pedirá que verifique que la solicitud proviene de una fuente confiable. Escribe yes y presiona enter para confirmar:

    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                = server1
    
    Type the word 'yes' to continue, or any other input to abort.
    Confirm request details: yes
    ...

    Si su clave de CA está protegida con contraseña, se le pedirá que ingrese la contraseña. Una vez verificado, el script generará el certificado SSL e imprimirá la ruta completa.

    ...
    Certificate is to be certified until Sep 17 10:54:48 2021 GMT (1080 days)
    
    Write out database with 1 new entries
    Data Base Updated
    
    Certificate created at: /home/causer/EasyRSA-v3.0.6/pki/issued/server1.crt
  6. El siguiente paso es transferir el certificado firmado server1.crt y ca.crt archivos de vuelta a su servidor OpenVPN. Nuevamente puedes usar scp , rsync o cualquier otro método seguro:

    scp ~/EasyRSA-v3.0.6/pki/issued/server1.crt serveruser@your_server_ip:/tmpscp ~/EasyRSA-v3.0.6/pki/ca.crt serveruser@your_server_ip:/tmp
  7. Inicie sesión en su servidor OpenVPN y mueva el server1.crt y ca.crt archivos en el /etc/openvpn/ directorio:

    sudo mv /tmp/{server1,ca}.crt /etc/openvpn/

Al completar los pasos descritos en esta sección, debería tener los siguientes archivos nuevos en su servidor OpenVPN :

  • /etc/openvpn/ca.crt
  • /etc/openvpn/dh.pem
  • /etc/openvpn/ta.key
  • /etc/openvpn/server1.crt
  • /etc/openvpn/server1.key

Configurando el Servicio OpenVPN #

Ahora que tiene el certificado del servidor firmado por su CA y transferido a su servidor OpenVPN , es hora de configurar el servicio OpenVPN.

Usaremos el archivo de configuración de muestra proporcionado con el paquete de instalación de OpenVPN como punto de partida y luego le agregaremos nuestras propias opciones de configuración personalizadas.

Comience por extraer el archivo de configuración al /etc/openvpn/ directorio:

sudo sh -c "gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server1.conf"

Abre el archivo con tu editor de texto favorito:

sudo nano /etc/openvpn/server1.conf
  • Busque las directivas de parámetros Certificate, Key y DH y cambie los nombres de los archivos:

    /etc/openvpn/server1.conf
    cert server1.crt
    key server1.key 
    
    dh dh.pem
  • Para redirigir el tráfico de los clientes a través de la VPN, busque y descomente redirect-gateway y dhcp-option opciones:

    /etc/openvpn/server1.conf
    push "redirect-gateway def1 bypass-dhcp"
    
    push "dhcp-option DNS 208.67.222.222"
    push "dhcp-option DNS 208.67.220.220"

    Por defecto, se utilizan resolutores OpenDNS. Puede cambiarlo y usar CloudFlare, Google o cualquier otro solucionador de DNS que desee.

  • Encuentra el user y group directivas y elimine el comentario de estas configuraciones eliminando el "; ” al principio de cada línea:

    /etc/openvpn/server1.conf
    user nobody
    group nogroup
  • Agregue la siguiente línea al final del archivo. Esta directiva cambiará el algoritmo de autenticación de mensajes (HMAC) de SHA1 a SHA256

    /etc/openvpn/server1.conf
    auth SHA256

Una vez que haya terminado, el archivo de configuración del servidor (excluyendo los comentarios) debería verse así:

/etc/openvpn/server1.conf
port 1194
proto udp
dev tun
ca ca.crt
cert server1.crt
key server1.key  # This file should be kept secret
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
verb 3
explicit-exit-notify 1
auth SHA256

Iniciando servicio OpenVPN #

En este tutorial, hemos usado server1.conf como un archivo de configuración. Para iniciar el servicio OpenVPN con esta configuración, debemos especificar el nombre del archivo de configuración después del nombre del archivo de la unidad systemd:

En su servidor OpenVPN ejecute el siguiente comando para iniciar el servicio OpenVPN:

sudo systemctl start openvpn@server1

Verifique si el servicio se ha iniciado correctamente escribiendo:

sudo systemctl status openvpn@server1

Si el servicio está activo y ejecutándose, la salida se verá así:

[email protected] - OpenVPN connection to server1
   Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-03-19 03:49:53 PDT; 3s ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
  Process: 1722 ExecStart=/usr/sbin/openvpn --daemon ovpn-server1 --status /run/openvpn/server1.status 10 --cd /etc/openvpn --config /etc/openvpn/server1.conf --writepid /run/openvpn/server1.pid (code=exited, status=0/SUCCESS)
 Main PID: 1723 (openvpn)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/system-openvpn.slice/[email protected]
           └─1723 /usr/sbin/openvpn --daemon ovpn-server1 --status /run/openvpn/server1.status 10 --cd /etc/openvpn --config /etc/openvpn/server1.conf --writepid /run/openvpn/server1.pid

Habilite el servicio para que se inicie automáticamente al arrancar con:

sudo systemctl enable openvpn@server1
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected].
Si el servicio OpenVPN no se inicia, verifique los registros con sudo journalctl -u openvpn@server1

Al iniciar, el servidor OpenVPN crea un dispositivo tun tun0 . Para verificarlo use el siguiente comando ip:

ip a show tun0

La salida debería verse así:

3: 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

En este punto, su servidor OpenVPN está configurado y funcionando correctamente.

Número de configuración de redes de servidor y firewall

Para reenviar los paquetes de red correctamente, debemos habilitar el reenvío de IP.

Los siguientes pasos se realizan en el servidor OpenVPN .

Abra el /etc/sysctl.conf archivo y agregue o descomente la línea que dice net.ipv4.ip_forward = 1 :

sudo nano /etc/sysctl.conf
/etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Una vez que haya terminado, guarde y cierre el archivo.

Aplique la nueva configuración ejecutando el siguiente sysctl comando:

sudo sysctl -p
net.ipv4.ip_forward = 1

Si siguió los requisitos previos, ya debería tener un firewall UFW ejecutándose en su servidor.

Ahora necesitamos agregar reglas de firewall para habilitar el enmascaramiento. Esto permitirá que el tráfico salga de la VPN, dando a sus clientes de VPN acceso a Internet.

Antes de agregar las reglas, debe conocer la interfaz de red pública de su servidor Debian OpenVPN. Puede encontrar fácilmente la interfaz ejecutando el siguiente comando:

ip -o -4 route show to default | awk '{print $5}'

En nuestro caso, la interfaz se llama eth0 como se muestra en la salida a continuación. Su interfaz probablemente tendrá un nombre diferente.

eth0

De forma predeterminada, cuando se usa UFW, los paquetes reenviados se eliminan. Tendremos que cambiar eso e indicarle a nuestro firewall que permita los paquetes reenviados.

Abra el archivo de configuración de UFW, localice la DEFAULT_FORWARD_POLICY clave y cambie el valor de DROP para ACCEPT :

sudo nano /etc/default/ufw
/etc/default/ufw
...
# Set the default forward policy to ACCEPT, DROP or REJECT.  Please note that
# if you change this you will most likely want to adjust your rules
DEFAULT_FORWARD_POLICY="ACCEPT"
...

A continuación, debemos establecer la política predeterminada para el POSTROUTING cadena en la tabla nat y establezca la regla de mascarada.

Para hacerlo, abra el /etc/ufw/before.rules archivo y agregue las líneas resaltadas en amarillo como se muestra a continuación.

sudo nano /etc/ufw/before.rules

No olvide reemplazar eth0 en el -A POSTROUTING línea para que coincida con el nombre de la interfaz de red pública que encontró en el comando anterior. Pegue las líneas después de la última línea que comienza con COMMIT .

/etc/ufw/before.rules
...
# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic through eth0 - Change to public network interface
-A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

Cuando haya terminado, guarde y cierre el archivo.

También necesitamos abrir el tráfico UDP en el puerto 1194 que es el puerto OpenVPN predeterminado. Para hacerlo, ejecute el siguiente comando:

sudo ufw allow 1194/udp

En caso de que haya olvidado abrir el puerto SSH, para evitar el bloqueo, ejecute el siguiente comando para abrir el puerto:

sudo ufw allow OpenSSH

Finalmente, vuelva a cargar las reglas de UFW deshabilitando y volviendo a habilitar UFW:

sudo ufw disablesudo ufw enable

Para verificar los cambios, ejecute el siguiente comando para enumerar las reglas POSTROUTING:

sudo iptables -nvL POSTROUTING -t nat
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  *      eth0    10.8.0.0/16          0.0.0.0/0  

Creando la Infraestructura de Configuración del Cliente #

En este tutorial, crearemos un certificado SSL separado y generaremos un archivo de configuración diferente para cada cliente VPN.

La clave privada del cliente y la solicitud de certificado se pueden generar en la máquina del cliente o en el servidor. Para simplificar, generaremos la solicitud de certificado en el servidor y luego la enviaremos a la CA para que la firme.

Todo el proceso de generación del certificado de cliente y el archivo de configuración es el siguiente:

  1. Generar una clave privada y una solicitud de certificado en el servidor OpenVPN.
  2. Envíe la solicitud a la máquina CA para que la firme.
  3. Copie el certificado SSL firmado en el servidor OpenVPN y genere un archivo de configuración.
  4. Envíe el archivo de configuración a la máquina del cliente VPN.

Comience creando un conjunto de directorios para almacenar los archivos de los clientes:

mkdir -p ~/openvpn-clients/{configs,base,files}
  • base El directorio almacenará los archivos base y la configuración que se compartirá entre todos los archivos del cliente.
  • configs directorio almacenará la configuración del cliente generada.
  • files El directorio almacenará el par de claves/certificado específico del cliente.

Copie el ca.crt y ta.key archivos a ~/openvpn-clients/base directorio:

cp ~/EasyRSA-v3.0.6/ta.key ~/openvpn-clients/base/cp /etc/openvpn/ca.crt ~/openvpn-clients/base/

A continuación, copie el archivo de configuración del cliente VPN de muestra en client-~/openvpn-clients/base directorio. Usaremos este archivo como configuración base:

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

Ahora necesitamos editar el archivo para que coincida con la configuración y la configuración de nuestro servidor. Abra el archivo de configuración con su editor de texto:

nano ~/openvpn-clients/base/client.conf
  • Busque la directiva remota y cambie el marcador de posición predeterminado con la dirección IP pública de su servidor OpenVPN:

    ~/openvpn-clients/base/client.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
  • Ubique y comente el ca , cert y key directivas. Los certificados y claves se agregarán dentro del archivo de configuración:

    ~/openvpn-clients/base/client.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
  • Agregue la siguiente línea al final del archivo para que coincida con la configuración del servidor:

    ~/openvpn-clients/base/client.conf
    auth SHA256

Una vez que haya terminado, el archivo de configuración del servidor debería verse así:

~/openvpn-clients/base/client.conf
client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth SHA256
key-direction 1

A continuación, cree un script bash simple que combinará la configuración base y los archivos con el certificado y la clave del cliente, y almacenará la configuración generada en ~/openvpn-clients/configs directorio.

Abre tu editor de texto y crea el siguiente script:

nano ~/openvpn-clients/gen_config.sh
~/openvpn-clients/gen_config.sh
#!/bin/bash

FILES_DIR=$HOME/openvpn-clients/files
BASE_DIR=$HOME/openvpn-clients/base
CONFIGS_DIR=$HOME/openvpn-clients/configs

BASE_CONF=${BASE_DIR}/client.conf
CA_FILE=${BASE_DIR}/ca.crt
TA_FILE=${BASE_DIR}/ta.key

CLIENT_CERT=${FILES_DIR}/${1}.crt
CLIENT_KEY=${FILES_DIR}/${1}.key

# Test for files
for i in "$BASE_CONF" "$CA_FILE" "$TA_FILE" "$CLIENT_CERT" "$CLIENT_KEY"; do
    if [[ ! -f $i ]]; then
        echo " The file $i does not exist"
        exit 1
    fi

    if [[ ! -r $i ]]; then
        echo " The file $i is not readable."
        exit 1
    fi
done

# Generate client config
cat > ${CONFIGS_DIR}/${1}.ovpn <<EOF
$(cat ${BASE_CONF})
<key>
$(cat ${CLIENT_KEY})
</key>
<cert>
$(cat ${CLIENT_CERT})
</cert>
<ca>
$(cat ${CA_FILE})
</ca>
<tls-auth>
$(cat ${TA_FILE})
</tls-auth>
EOF

Guarda el archivo y hazlo ejecutable con chmod :

chmod u+x ~/openvpn-clients/gen_config.sh

Creación de clave privada de certificado de cliente y número de configuración

El proceso de generar una clave privada de cliente y una solicitud de certificado es el mismo que hicimos cuando generamos una clave de servidor y una solicitud de certificado.

Como ya mencionamos en la sección anterior, generaremos la clave privada del cliente y la solicitud de certificado en el servidor OpenVPN. En este ejemplo, el nombre del primer cliente VPN será client1 .

  1. Navegue al directorio EasyRSA en su servidor OpenVPN y genere una nueva clave privada y un archivo de solicitud de certificado para el cliente:

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

    El comando creará dos archivos, una clave privada (client1.key ) y un archivo de solicitud de certificado (client1.req ).

    Common Name (eg: your user, host, or server name) [client1]:
    
    Keypair and certificate request completed. Your files are:
    req: /home/serveruser/EasyRSA-v3.0.6/pki/reqs/client1.req
    key: /home/serveruser/EasyRSA-v3.0.6/pki/private/client1.key
  2. Copie la clave privada client1.key a ~/openvpn-clients/files directorio que creó en la sección anterior:

    cp ~/EasyRSA-v3.0.6/pki/private/client1.key ~/openvpn-clients/files/
  3. Transfiera el archivo de solicitud de certificado a su máquina CA:

    scp ~/EasyRSA-v3.0.6/pki/reqs/client1.req causer@your_ca_ip:/tmp

    En este ejemplo estamos usando scp para transferir el archivo, también puede usar rsync sobre ssh o cualquier otro método seguro.

  4. Inicie sesión en su máquina CA , cambie al directorio EasyRSA e importe el archivo de solicitud de certificado:

    cd ~/EasyRSA-v3.0.6./easyrsa import-req /tmp/client1.req client1

    El primer argumento es la ruta al archivo de solicitud de certificado y el segundo es el nombre del cliente.

    The request has been successfully imported with a short name of: client1
    You may now use this name to perform signing operations on this request.
  5. Desde dentro del directorio EasyRSA en máquina CA ejecute el siguiente comando para firmar la solicitud:

    cd ~/EasyRSA-v3.0.6./easyrsa sign-req client client1

    Se le pedirá que verifique que la solicitud proviene de una fuente confiable. Escribe yes y presiona enter para confirmar:

    Si su clave de CA está protegida con contraseña, se le pedirá que ingrese la contraseña. Una vez verificado, el script generará el certificado SSL e imprimirá la ruta completa.

    ...
    Certificate created at: /home/causer/EasyRSA-v3.0.6/pki/issued/client1.crt
  6. A continuación, transfiera el certificado firmado client1.crt archivo de vuelta a su servidor OpenVPN. Puedes usar scp , rsync o cualquier otro método seguro:

    scp ~/EasyRSA-v3.0.6/pki/issued/client1.crt serveruser@your_server_ip:/tmp
  7. Inicie sesión en su servidor OpenVPN y mueva el client1.crt archivo en ~/openvpn-clients/files directorio:

    mv /tmp/client1.crt ~/openvpn-clients/files
  8. El paso final es generar una configuración de cliente usando gen_config.sh texto. Cambie a ~/openvpn-clients directorio y ejecute el script usando el nombre del cliente como argumento:

    cd ~/openvpn-clients./gen_config.sh client1

    El script creará un archivo llamado client1.ovpn en el ~/client-configs/configs directorio. Puede verificar listando el directorio:

    ls ~/openvpn-clients/configs
    client1.ovpn

En este punto se crea la configuración del cliente. Ahora puede transferir el archivo de configuración al dispositivo que desea utilizar como cliente.

Por ejemplo, para transferir el archivo de configuración a su máquina local con scp debe ejecutar el siguiente comando:

scp ~/openvpn-clients/configs/client1.ovpn your_local_ip:/

Para agregar clientes adicionales, simplemente repita los mismos pasos.

Conectando Clientes #

Linux #

Su distribución o entorno de escritorio puede proporcionar una herramienta o una interfaz gráfica de usuario para conectarse a servidores OpenVPN. En este tutorial, le mostraremos cómo conectarse al servidor usando openvpn herramienta.

  • Instale OpenVPN en Ubuntu y Debian

    sudo apt updatesudo apt install openvpn
  • Instale OpenVPN en CentOS y Fedora

    sudo yum install epel-releasesudo yum install openvpn

Una vez que el paquete está instalado, para conectarse al servidor VPN use el openvpn comando y especifique el archivo de configuración del cliente:

sudo openvpn --config client1.ovpn

macOS #

Tunnelblick es una interfaz gráfica de usuario gratuita y de código abierto para OpenVPN en OS X y macOS.

Windows #

Descargue e instale la última versión de la aplicación OpenVPN en la página de descargas de OpenVPN.

Copie el .ovpn archivo a la carpeta de configuración de OpenVPN (\Users\<Name>\OpenVPN\Config o \Program Files\OpenVPN\config ).

Inicie la aplicación OpenVPN.

Haga clic derecho en el icono de la bandeja del sistema de OpenVPN y el nombre del archivo de configuración de OpenVPN que copió aparecerá en el menú. Haz clic en Conectar.

Android y iOS #

Una aplicación VPN desarrollada por OpenVPN está disponible tanto para Android como para iOS. Instale la aplicación e importe el cliente .ovp archivo.

  • Conexión OpenVPN de Android
  • Conexión OpenVPN de iOS

Revocación de certificados de cliente n.º

Revocar un certificado significa invalidar un certificado firmado para que ya no pueda usarse para acceder al servidor OpenVPN.

Para revocar un certificado de cliente, siga los pasos a continuación:

  1. Inicie sesión en su máquina CA y cambie al directorio EasyRSA:

    cd EasyRSA-v3.0.6
  2. Ejecute el script easyrsa usando revoke argumento, seguido del nombre del cliente que desea revocar:

    ./easyrsa revoke client1

    Se le pedirá que verifique que desea revocar el certificado. Escribe yes y presiona enter para confirmar:

    Please confirm you wish to revoke the certificate with the following subject:
    
    subject=
        commonName                = client1
    
    Type the word 'yes' to continue, or any other input to abort.
    Continue with revocation: yes
    ...

    Si su clave de CA está protegida con contraseña, se le pedirá que ingrese la contraseña. Una vez verificado, el script revocará el certificado.

    ...
    Revocation was successful. You must run gen-crl and upload a CRL to your
    infrastructure in order to prevent the revoked cert from being accepted.
  3. Usa el gen-crl opción para generar una lista de revocación de certificados (CRL):

    ./easyrsa gen-crl
    An updated CRL has been created.
    CRL file: /home/causer/EasyRSA-v3.0.6/pki/crl.pem
  4. Cargue el archivo CRL en el servidor OpenVPN:

    scp ~/EasyRSA-v3.0.6/pki/crl.pem serveruser@your_server_ip:/tmp
  5. Inicie sesión en su servidor OpenVPN servidor y mueva el archivo a /etc/openvpn directorio:

    sudo mv /tmp/crl.pem /etc/openvpn
  6. Abra el archivo de configuración del servidor OpenVPN:

    sudo nano /etc/openvpn/server1.conf

    Pegue la siguiente línea al final del archivo

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

    Guarde y cierre el archivo.

  7. Reinicie el servicio OpenVPN para que la directiva de revocación surta efecto:

    sudo systemctl restart openvpn@server1

    En este punto, el cliente ya no debería poder acceder al servidor OpenVPN usando el certificado revocado.

Si necesita revocar certificados de cliente adicionales, simplemente repita los mismos pasos.


Debian
  1. Cómo configurar un servidor Samba en Debian 10 Buster

  2. Cómo configurar un servidor LAMP en Debian 10 Buster

  3. Establecer una IP estática en Debian 11 - ¿Cómo hacerlo?

  4. Cómo configurar un servidor SFTP en Debian 11 Server

  5. Cómo configurar un servidor OpenVPN en Debian 10

Cómo configurar el servidor y el cliente NTP en Debian 11

Configurar OpenConnect VPN Server (ocserv) en Debian 11 Bullseye

Configure su propio servidor VPN WireGuard en Debian 11 y Debian 10

Configurar OpenConnect VPN Server (ocserv) en Debian 10 Buster

Cómo instalar el servidor OpenVPN en Debian 11

Cómo configurar WireGuard VPN en Debian 11