One place for hosting & domains

      OpenVPN

      Cómo instalar y configurar un servidor de OpenVPN en CentOS 8


      Introducción

      Una red privada virtual (VPN), le permite atravesar redes no fiables como si estuviese en una red privada. Le permite acceder a internet de forma segura desde su smartphone o equipo portátil cuando se conecta a una red no fiable, como la WiFi de un hotel o de una cafetería.

      Cuando se combina con conexiones HTTPS, esta configuración le permite proteger los inicios de sesión y las operaciones que realiza por medios inalámbricos. Puede evadir censuras y restricciones geográficas, y proteger su ubicación y el tráfico de HTTP no cifrado contra la actividad de las redes no fiables.

      OpenVPN es una solución VPN de seguridad en la capa de transporte (TLS) de código abierto y con características completas que aloja muchas configuraciones. En este tutorial, configurará OpenVPN en un servidor CentOS 8 y, luego, lo configurará para que sea accesible desde la máquina de un cliente.

      Nota: Si planea configurar un servidor de OpenVPN en un Droplet de DigitalOcean tenga en cuenta que, como muchos proveedores de host, cobraremos por excesos de ancho de banda. Por este motivo, controle el volumen de tráfico que maneja su servidor.

      Consulte esta página para obtener más información.

      Requisitos previos

      Para este tutorial, necesitará lo siguiente:

      Nota: Si bien es técnicamente posible usar su servidor de OpenVPN o su máquina local como CA, no se recomienda, dado que expone su VPN a algunas vulnerabilidades de seguridad. Según la documentación oficial de OpenVPN, debería colocar su CA en una máquina independiente dedicada a importar y firmar solicitudes de certificado. Por ello, esta guía presupone que su CA está en un servidor separado de CentOS 8 que también tiene un non-root user con privilegios sudo y firewall básico habilitado.

      Además de eso, necesitará una máquina de cliente que usará para conectarse a su servidor de OpenVPN. En esta guía, lo llamaremos Cliente de OpenVPN. A los efectos de este tutorial, le recomendamos que use su máquina local como el cliente de OpenVPN.

      Una vez implementados estos requisitos previos, estará listo para comenzar a instalar y configurar un servidor de OpenVPN en CentOS 8.

      Nota: Tenga en cuenta que si deshabilita la autenticación de contraseña mientras configura estos servidores, es posible que experimente dificultades al transferir archivos entre ellos más adelante en esta guía. Para solucionar este problema, puede volver a habilitar la autenticación de contraseña en cada servidor. De manera alternativa, puede generar un par de claves SSH para cada servidor, luego agregar la clave SSH pública del servidor de OpenVPN al archivo authorized_keys y viceversa. Consulte Cómo configurar claves SSH en CentOS 8 para obtener instrucciones sobre cómo aplicar cualquiera de estas soluciones.

      Paso 1: Instalar OpenVPN y Easy-RSA

      El primer paso de este tutorial es instalar OpenVPN y Easy-RSA. Easy-RSA es una herramienta de gestión de infraestructura de clave pública (PKI) que usará en el servidor de OpenVPN para generar una solicitud de certificado que, luego, verificará y firmará en el servidor CA.

      Sin embargo, OpenVPN y Easy-RSA no vienen predeterminadas en CentOS 8, por lo que deberá habilitar el repositorio Extra Packages for Enterprise Linux (EPEL). El Proyecto Fedora gestiona el EPEL, que contiene paquetes no estándar, pero populares, para Fedora, CentOS y otras distribuciones de Linux que usan el formato de paquete RPM. Inicie sesión en su servidor de OpenVPN como el non-root sudo user que creó durante los pasos de configuración iniciales y ejecute lo siguiente:

      • sudo dnf install epel-release
      • sudo dnf install openvpn easy-rsa

      A continuación, deberá crear un directorio nuevo en el servidor de OpenVPN como su non-root user llamado ~/easy-rsa:

      Ahora, deberá crear un symlink desde la secuencia de comandos de easyrsa que el paquete instaló en el directorio ~/easy-rsa que acaba de crear:

      • ln -s /usr/share/easy-rsa/3/* ~/easy-rsa/

      Nota: Aunque otras guías le indiquen que copie los archivos del paquete easy-rsa a su directorio de la PKI, en este tutorial, usaremos enlaces simbólicos. Como resultado, toda actualización del paquete easy-rsa se reflejará automáticamente en las secuencias de comandos de su PKI.

      Por último, asegúrese de que el propietario del directorio sea su non-root sudo user y restrinja el acceso a ese usuario usando chmod:

      • sudo chown sammy ~/easy-rsa
      • chmod 700 ~/easy-rsa

      Cuando haya instalado estos programas y se hayan movido a las ubicaciones correctas en su sistema, el siguiente paso es crear una infraestructura de clave pública (PKI) en el servidor de OpenVPN para que pueda solicitar y administrar certificados TLS para clientes y otros servidores que se conecten a su VPN.

      Paso 2: Crear una PKI para OpenVPN

      Antes de poder crear la clave y el certificado privados de su servidor de OpenVPN, deberá crear un directorio local de infraestructura de clave pública en su servidor de OpenVPN. Usará este directorio para gestionar las solicitudes de certificado de clientes y del servidor en vez de hacerlas directamente en su servidor CA.

      Para crear un directorio de PKI en su servidor de OpenVPN, deberá completar un archivo llamado vars con algunos valores predeterminados. Primero, usará cd para ingresar al directorio easy-rsa y, luego, creará y editará el archivo vars con el editor de texto que prefiera.

      El editor de texto predeterminado que viene con CentOS 8 es vi. vi es un editor de texto extremadamente potente, pero puede ser un tanto obtuso para los usuarios que carecen de experiencia con él. Posiblemente desee instalar un editor más sencillo, como nano, para facilitar la edición de los archivos de configuración en su servidor de CentOS 8.

      Cuando se le solicite instalar nano ingrese y para proceder con los pasos de la instalación. Con eso, estará listo para editar el archivo vars:

      Una vez abierto el archivo, pegue las siguientes dos líneas:

      ~/easy-rsa/vars

      set_var EASYRSA_ALGO "ec"
      set_var EASYRSA_DIGEST "sha512"
      

      Estas líneas garantizarán que se configuren sus claves y solicitudes de certificado privadas para que la moderna Elliptic Curve Cryptography (ECC) genere claves y firmas seguras para sus clientes y su servidor de OpenVPN.

      Configurar sus servidores de OpenVPN y CA para que usen ECC significa que cuando un cliente y un servidor intenten establecer una clave simétrica compartida, pueden usar algoritmos de Elliptic Curve para realizar el intercambio. Usar ECC para un intercambio de claves es mucho más rápido que usar solo Diffie-Hellman con el clásico algoritmo RSA, dado que los números son mucho más pequeños y los cálculos son más rápidos.

      Antecedentes: Cuando los clientes se conectan a OpenVPN, usan el cifrado asimétrico (también conocido como la clave pública/privada) para realizar un protocolo de enlace TLS. Sin embargo, al transmitir tráfico de VPN cifrado, el servidor y los clientes usan el cifrado simétrico, que también se conoce como cifrado de clave compartida.

      Hay mucha menos estructura informática con cifrado simétrico que con el asimétrico: los números que se utilizan son mucho más pequeños y las CPU modernas integran instrucciones para realizar operaciones de cifrado simétricas optimizadas. Para hacer el cambio de cifrado de asimétrico a simétrico, el servidor de OpenVPN y el cliente usarán el algoritmo Elliptic Curve Diffie-Hellman (ECDH) para acordar una clave secreta compartida lo antes posible.

      Cuando haya completado el archivo vars, puede continuar creando el directorio PKI. Para ello, ejecute la secuencia de comandos easyrsa con la opción init-pki. Aunque ya ejecutó este comando en el servidor CA como parte de los requisitos previos, debe ejecutarlo aquí porque su servidor de OpenVPN y el de CA tienen directorios PKI separados:

      Tenga en cuenta que no necesita crear una entidad de certificación en su servidor de OpenVPN. Su servidor de CA es el único responsable de validar y firmar certificados. La PKI de su servidor VPN solo se usa como una ubicación adecuada y centralizada para almacenar solicitudes de certificado y certificados públicos.

      Después de iniciar su PKI en el servidor de OpenVPN, estará listo para continuar con el siguiente paso: crear una solicitud de certificado de servidor de OpenVPN y una clave privada.

      Paso 3: Crear una solicitud de certificado de servidor de OpenVPN y una clave privada

      Ahora que su servidor de OpenVPN tiene todos los requisitos previos instalados, el siguiente paso es generar una clave privada y una solicitud de firma de certificados (CSR) en su servidor de OpenVPN. A continuación, transferirá la solicitud a su CA para que se firme, lo que creará el certificado requerido. Cuando tenga un certificado firmado, lo transferirá de vuelta al servidor de OpenVPN y lo instalará para que el servidor lo use.

      Para comenzar, diríjase al directorio ~/easy-rsa de su servidor de OpenVPN como su non-root user:

      Invoque easyrsa con la opción gen-req seguida de un nombre común (CN) para la máquina. El CN puede ser el que prefiera, pero puede resultarle útil que sea descriptivo. Durante este tutorial, el CN del servidor de OpenVPN será server. Asegúrese de incluir también la opción nopass. Si no lo hace, se protegerá con contraseña el archivo de solicitud, lo que puede generar problemas de permisos más adelante.

      Nota: Si elige otro nombre que no sea server, deberá modificar algunas de las instrucciones a continuación. Por ejemplo, al copiar los archivos generados al directorio /etc/openvpn, deberá sustituir los nombres que correspondan. También deberá modificar el archivo /etc/openvpn/server.conf más adelante para señalar los archivos .crt y .key correctos.

      • ./easyrsa gen-req server nopass

      Output

      Common Name (eg: your user, host, or server name) [server]: Keypair and certificate request completed. Your files are: req: /home/sammy/easy-rsa/pki/reqs/server.req key: /home/sammy/easy-rsa/pki/private/server.key

      Con esto, se crearán una clave privada para el servidor y un archivo de solicitud de certificado llamado server.req. Copie la clave del servidor al directorio /etc/openvpn/server:

      • sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/

      Tras completar estos pasos, habrá creado correctamente una clave privada para su servidor de OpenVPN. También generó una solicitud de firma de certificado para el servidor de OpenVPN. Ahora la CSR está listo para firmar por su CA. En la siguiente sección de este tutorial, aprenderá a firmar una CSR con la clave privada de su servidor CA.

      Paso 4: Firmar la solicitud de certificado del servidor de OpenVPN

      En el paso anterior, creó una solicitud de firma de certificado (CSR) y una clave privada para el servidor de OpenVPN. Ahora el servidor de CA necesita conocer el certificado server y validarlo. Una vez que el CA valide y devuelva el certificado al servidor de OpenVPN, los clientes que confían en su CA podrán confiar también en el servidor de OpenVPN.

      En el servidor de OpenVPN, como su non-root user, use SCP u otro método de transferencia para copiar la solicitud de certificado server.req al servidor CA para firmar lo siguiente:

      • scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp

      Ahora inicie sesión en el servidor CA como el non-root user que posee el directorio easy-rsa, donde creó su PKI. Importe la solicitud del certificado usando la secuencia de comandos easyrsa:

      • cd ~/easy-rsa
      • ./easyrsa import-req /tmp/server.req server

      Output

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

      A continuación, firme la solicitud ejecutando la secuencia de comandos easyrsa con la opción sign-req seguida del tipo de solicitud y el nombre común. El tipo de solicitud puede ser client o server. Como estamos trabajando con la solicitud de certificado del servidor de OpenVPN, asegúrese de usar el tipo de solicitud server:

      • ./easyrsa sign-req server server

      En el resultado, se le solicitará que verifique que la solicitud provenga de una fuente de confianza. Escriba yes y pulse ENTER para confirmar:

      Output

      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 . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt

      Tenga en cuenta que si cifró su clave privada CA, se le solicitará su contraseña en este momento.

      Completados estos pasos, ha firmado la solicitud de certificado del servidor de OpenVPN usando la clave privada del servidor de CA. El archivo server.crt resultante contiene la clave de cifrado pública del servidor de OpenVPN, así como una nueva firma del servidor de CA. El objetivo de la firma es indicar a todos los que confían en el servidor de CA que también pueden confiar en el servidor de OpenVPN cuando se conecten a él.

      Para terminar de configurar los certificados, copie los archivos server.crt y ca.crt desde el servidor de CA al servidor de OpenVPN:

      • scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
      • scp pki/ca.crt sammy@your_vpn_server_ip:/tmp

      Ahora vuelva a su servidor de OpenVPN, copie los archivos de /tmp a /etc/openvpn/server:

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

      Ahora su servidor de OpenVPN está casi listo para aceptar conexiones. En el siguiente paso, realizará algunos pasos adicionales para aumentar la seguridad del servidor.

      Paso 5: Configurar materiales de cifrado de OpenVPN

      Para obtener una capa de seguridad adicional, añadiremos una clave secreta extra compartida que el servidor y todos los clientes usarán con la directiva tls-crypt de OpenVPN. Esta opción se usa para confundir el certificado TLS que se usa cuando un servidor y un cliente se conectan inicialmente. También lo usa el servidor de OpenVPN para realizar comprobaciones rápidas de los paquetes entrantes: si se firma un paquete usando la clave previamente compartida, el servidor lo procesa; si no se firma, el servidor sabe que es de una fuente no confiable y puede descartarlo sin tener que realizar otras tareas de descifrado.

      Esta opción lo ayudará a asegurarse de que su servidor de OpenVPN pueda hacer frente al tráfico sin autenticación, a los escáneres de puerto y a los ataques de denegación de servicio, que pueden restringir recursos del servidor. También hace que sea más difícil identificar el tráfico de red de OpenVPN.

      Para generar la clave tls-crypt antes compartida, ejecute lo siguiente en el servidor de OpenVPN en el directorio ~/easy-rsa:

      • cd ~/easy-rsa
      • openvpn --genkey --secret ta.key

      El resultado será un archivo llamado ta.key. Cópielo en el directorio /etc/openvpn/server/:

      • sudo cp ta.key /etc/openvpn/server

      Con estos archivos implementados en el servidor de OpenVPN, estará listo para crear certificados de cliente y archivos de clave para sus usuarios, que usará para conectarse con la VPN.

      Paso 6: Generar un par de certificado y clave de cliente

      Aunque puede generar una solicitud de claves y certificados privados en su máquina cliente y, luego, enviarla a la CA para que la firme, en esta guía se describe un proceso para generar la solicitud de certificado en el servidor de OpenVPN. El beneficio de este enfoque es que podemos crear una secuencia de comandos que generará de manera automática archivos de configuración de cliente que contienen las claves y los certificados necesarios. Esto le permite evitar la transferencia de claves, certificados y archivos de configuración a los clientes y optimiza el proceso para unirse a la VPN.

      Generaremos un par individual de clave y certificado de cliente para esta guía. Si tiene más de un cliente, puede repetir este proceso para cada uno. Tenga en cuenta que deberá pasar un valor de nombre único a la secuencia de comandos para cada cliente. En este tutorial, el primer par de certificado y clave se denominará client1.

      Comience por crear una estructura de directorios dentro de su directorio de inicio para almacenar los archivos de certificado y clave de cliente:

      • mkdir -p ~/client-configs/keys

      Debido a que almacenará los pares de certificado y clave de sus clientes y los archivos de configuración en este directorio, debe bloquear sus permisos ahora como medida de seguridad:

      • chmod -R 700 ~/client-configs

      Luego, diríjase al directorio EasyRSA y ejecute la secuencia de comandos ​​​​​​easyrsa con las opciones gen-req y nopass, junto con el nombre común para el cliente:

      • cd ~/easy-rsa
      • ./easyrsa gen-req client1 nopass

      Presione ENTER para confirmar el nombre común. Luego, copie el archivo client1.key al directorio ~/client-configs/keys/ que creó antes:

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

      Luego, transfiera el archivo client1.req a su servidor de CA usando un método seguro:

      • scp pki/reqs/client1.req sammy@your_ca_server_ip:/tmp

      Ahora inicie sesión en su servidor de CA. A continuación, diríjase al directorio de EasyRSA e importe la solicitud de certificado:

      • cd ~/easy-rsa
      • ./easyrsa import-req /tmp/client1.req client1

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

      • ./easyrsa sign-req client client1

      Cuando se le solicite, ingrese yes para confirmar que desea firmar la solicitud de certificado y que esta provino de una fuente confiable:

      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á la contraseña en este punto.

      Con esto, se creará un archivo de certificado de cliente llamado client1.crt. Transfiera este archivo de vuelta al servidor:

      • scp pki/issued/client1.crt sammy@your_server_ip:/tmp

      Vuelva a su servidor de OpenVPN, copie el certificado del cliente al directorio ~/client-configs/keys/:

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

      Luego copie los archivos ca.crt y ta.key al directorio ~/client-configs/keys/ también y establezca los permisos correspondientes para su usuario sudo:

      • cp ~/easy-rsa/ta.key ~/client-configs/keys/
      • sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
      • sudo chown sammy.sammy ~/client-configs/keys/*

      Con esto, se generarán los certificados y las claves de su servidor y cliente, y se almacenarán en los directorios correspondientes de su servidor de OpenVPN. Aún quedan algunas acciones que se deben realizar con estos archivos, pero se realizarán más adelante. Por ahora, puede continuar con la configuración de OpenVPN.

      Paso 7: Configurar OpenVPN

      Al igual que muchas otras herramientas de código abierto ampliamente usadas, OpenVPN tiene muchas opciones de configuración disponibles para personalizar su servidor para sus necesidades específicas. En esta sección, le daremos instrucciones para instalar una configuración de un servidor de OpenVPN basada en uno de los archivos de configuración de muestra incluidos en la documentación de este software.

      Primero, copie el archivo de muestra server.conf como punto de inicio para su propio archivo de configuración:

      • sudo cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/

      Abra el archivo nuevo para editarlo con el editor de texto que prefiera. Usaremos nano en nuestro ejemplo:

      • sudo nano /etc/openvpn/server/server.conf

      Deberá cambiar algunas líneas en este archivo. Primero, encuentre la sección HMAC de la configuración buscando la directiva tls-auth. Esta línea no debería tener comentarios. Elimine los comentarios agregando un ; al comienzo de la línea. Luego, añada una nueva línea después que contenga solo el valor tls-crypt ta.key:

      /etc/openvpn/server.conf

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

      Luego, busque las líneas cipher para encontrar la sección de cifrado. El valor predeterminado está configurado para AES-256-CBC; sin embargo, el cipher de AES-256-GCM ofrece un mejor nivel de cifrado, de rendimiento y es muy compatible con los clientes de OpenVPN actualizados. Eliminaremos el valor predeterminado añadiendo un signo ; al inicio de esta línea y, luego, añadiremos otra línea que contenga el valor actualizado de AES-256-GCM:

      /etc/openvpn/server.conf

      ;cipher AES-256-CBC
      cipher AES-256-GCM
      

      Justo después de esta línea, añada una directiva auth para seleccionar el algoritmo de codificación de mensajes HMAC. SHA256 es una buena opción:

      /etc/openvpn/server.conf

      auth SHA256
      

      Luego, encuentre la línea que contenga la directiva dh que define los parámetros Diffie-Hellman. Como hemos configurado todos los certificados para usar Elliptic Curve Cryptography, no necesita un archivo seed Diffie-Hellman. Elimine la línea existente que se parece a dh dh2048.pem o dh dh.pem. El nombre del archivo para la clave Diffie-Hellman puede ser diferente al indicado en el archivo de configuración del servidor de ejemplo. Luego, añada una línea después con el contenido dh none:

      /etc/openvpn/server.conf

      ;dh dh2048.pem
      dh none
      

      A continuación, queremos que OpenVPN se ejecute sin privilegios cuando se inicie, por lo que debemos indicarle que se ejecute con un usuario y grupo de nobody. Para ello, encuentre y elimine el comentario de las líneas user nobody y group nobody eliminando el signo ; desde el inicio de cada línea:

      /etc/openvpn/server.conf

      user nobody
      group nobody
      

      (Opcional) Aplicar cambios de DNS para redireccionar todo el tráfico a través de la VPN

      Con los ajustes anteriores, creará la conexión de VPN entre su cliente y el servidor, pero no se forzarán conexiones para usar el túnel. Si desea usar la VPN para dirigir todo su tráfico de clientes a la VPN, probablemente le convenga aplicar algunos ajustes más a las computadoras de clientes.

      Para comenzar, encuentre y elimine el comentario de la línea que contenga push "redirect-gateway def1 bypass-dhcp". Al hacerlo le indicará a su cliente que redirija todo su tráfico a través de su servidor de OpenVPN. Tenga en cuenta que habilitar esta funcionalidad puede causar problemas de conectividad con otros servicios de red, como SSH:

      /etc/openvpn/server.conf

      push "redirect-gateway def1 bypass-dhcp"
      

      Debajo de esta línea, encontrará la sección dhcp-option. Nuevamente, elimine ; del inicio de ambas líneas para quitar los comentarios:

      /etc/openvpn/server.conf

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

      Estas líneas le indicarán a su cliente que use los solucionadores OpenDNS gratuitos en las direcciones IP en la lista. Si prefiere otros solucionadores DNS, puede sustituirlos en lugar de las IP resaltadas.

      Esto ayudará a los clientes a configurar de nuevo sus ajustes de DNS para usar el túnel de la VPN como puerta de enlace predeterminada.

      (Opcional) Ajustar el puerto y el protocolo

      Por defecto, el servidor de OpenVPN usa el puerto 1194 y el protocolo UDP para aceptar las conexiones de los clientes. Si necesita usar un puerto diferente debido a restricciones de los entornos de red que sus clientes puedan emplear, puede cambiar la opción port. Si no aloja contenido web en su servidor de OpenVPN, el puerto 443 es una opción común, ya que se suele permitir en las reglas de firewall.

      Para hacer que OpenVPN escuche en el puerto 443, abra el archivo server.conf y encuentre la línea que tiene el siguiente aspecto:

      /etc/openvpn/server.conf

      port 1194
      

      Edítela para que el puerto sea 443:

      /etc/openvpn/server.conf

      # Optional!
      port 443
      

      Algunas veces, el protocolo se limita a ese puerto también. Si es así, encuentre la línea proto debajo de la línea port y cambie el protocolo de udp a tcp:

      /etc/openvpn/server.conf

      # Optional!
      proto tcp
      

      Si cambia el protocolo a TCP, deberá cambiar el valor de la directiva explicit-exit-notify de 1 a 0, ya que solo UDP la usa. Si no lo hace al usar TCP, se producirán errores al iniciar el servicio de OpenVPN.

      Busque la línea explicit-exit-notify al final del archivo y cambie el valor a 0:

      /etc/openvpn/server.conf

      # Optional!
      explicit-exit-notify 0
      

      Si no tiene necesidad de usar un puerto y protocolo distintos, es mejor dejar estos ajustes sin cambiar.

      (Opcional) Apuntar a credenciales no predeterminadas

      Si seleccionó antes un nombre diferente durante el comando ./easyrsa gen-req server, modifique las líneas cert y key en el archivo de configuración server.conf para que apunten a los archivos .crt y .key correspondientes. Si usa el nombre predeterminado, server, ya está configurado correctamente:

      /etc/openvpn/server.conf

      cert server.crt
      key server.key
      

      Cuando termine, guarde y cierre el archivo.

      Ya ha terminado de configurar sus ajustes generales de OpenVPN. En el siguiente paso, personalizaremos las opciones de redes del servidor.

      Paso 6: Ajustar la configuración de redes del servidor de OpenVPN

      Hay algunos aspectos de la configuración de redes del servidor que deben modificarse para que OpenVPN pueda dirigir el tráfico de manera correcta a través de la VPN. El primero es el reenvío IP, un método para determinar a dónde se debe dirigir el tráfico de IP. Esto es esencial para la funcionalidad de VPN que proporcionará su servidor.

      Para ajustar su configuración de IP predeterminada de su servidor de OpenVPN, abra el archivo /etc/sysctl.conf usando nano o su editor preferido:

      • sudo nano /etc/sysctl.conf

      Luego, añada la siguiente línea en la parte superior del archivo:

      /etc/sysctl.conf

      net.ipv4.ip_forward = 1
      

      Guarde y cierre el archivo cuando termine.

      Para leer el archivo y cargar los nuevos valores de la sesión actual, escriba lo siguiente:

      Output

      net.ipv4.ip_forward = 1

      Ahora, su servidor de OpenVPN podrá reenviar el tráfico entrante de un dispositivo ethernet a otro. Este ajuste garantiza que el servidor pueda dirigir tráfico desde los clientes que se conectan en la interfaz de VPN virtual fuera de sus otros dispositivos de ethernet físicos. Esta configuración enviará todo el tráfico web de su cliente a través de la dirección IP de su servidor y la dirección IP pública de su cliente se ocultará de manera eficaz.

      En el siguiente paso, deberá configurar algunas reglas de firewall para asegurarse de que el tráfico hacia y desde su servidor de OpenVPN fluye adecuadamente.

      Paso 9: Configuración del firewall

      Hasta ahora, instaló OpenVPN en su servidor, lo configuró y generó las claves y los certificados necesarios para que su cliente acceda a la VPN. Sin embargo, aún no ha proporcionado ninguna instrucción a OpenVPN sobre a dónde enviar el tráfico web entrante de los clientes. Puede especificar cómo el servidor debería gestionar el tráfico de clientes estableciendo algunas reglas de firewall y configuraciones de enrutamiento.

      Asumiendo que ha seguido los requisitos previos al inicio de este tutorial, ya debería tener instalado firewalld y ejecutándose en su servidor. Para permitir OpenVPN en el firewall, debe saber qué zona de firewalld está activa. Búsquelo con el siguiente comando:

      • sudo firewall-cmd --get-active-zones

      Output

      public Interfaces: eth0

      Si no ve una zona trusted que indique la interfaz tun0, ejecute los siguientes comandos para agregar el dispositivo VPN a esa zona:

      • sudo firewall-cmd --zone=trusted --add-interface=tun0
      • sudo firewall-cmd --permanent --zone=trusted --add-interface=tun0

      A continuación, agregue el servicio openvpn a la lista de servicios permitidos por firewalld dentro de su zona activa y, luego, haga que el ajuste sea permanente ejecutando el comando de nuevo pero añadiendo la opción --permanent:

      • sudo firewall-cmd --permanent --add-service openvpn
      • sudo firewall-cmd --permanent --zone=trusted --add-service openvpn

      Para aplicar los cambios en el firewall, ejecute:

      • sudo firewall-cmd --reload

      Ahora puede verificar que el servicio se haya añadido correctamente con el siguiente comando:

      • sudo firewall-cmd --list-services --zone=trusted

      Output

      openvpn

      Luego, añadiremos una regla de mascarada al firewall. Enmascarar permite a su servidor de OpenVPN traducir las direcciones de sus clientes de OpenVPN a la dirección pública propia del servidor y hacer lo contrario con el tráfico que se envía de vuelta a los clientes. Este proceso también se conoce como Traducción de la dirección de red (NAT).

      Añada reglas de enmascaramiento con los siguientes comandos:

      • sudo firewall-cmd --add-masquerade
      • sudo firewall-cmd --add-masquerade --permanent

      Puede verificar que el enmascaramiento se haya añadido correctamente con este comando:

      • sudo firewall-cmd --query-masquerade

      Output

      yes

      A continuación, deberá crear la regla de enmascaramiento específica para su subred de OpenVPN solo. Puede hacerlo creando primero una variable shell (DEVICE en nuestro ejemplo) que representará la interfaz de red principal usada por su servidor y, luego, usar esa variable para añadir de manera permanente la regla de enrutamiento:

      • DEVICE=$(ip route | awk '/^default via/ {print $5}')
      • sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $DEVICE -j MASQUERADE

      Asegúrese de volver a cargar firewalld para que se activen todos sus cambios:

      • sudo firewall-cmd --reload

      Los comandos con el indicador --permanent se asegurarán de que las reglas persistirán en los reinicios. El comando firewall-cmd --reload garantiza que se apliquen todos los cambios pendientes en el firewall. Con las reglas de firewall implementadas, podemos iniciar el servicio de OpenVPN en el servidor.

      Paso 10: Iniciar OpenVPN

      OpenVPN se ejecuta como servicio systemd, por lo que podemos usar systemctl para administrarlo. Configuraremos OpenVPN para que se inicie en el arranque para que pueda conectarse a su VPN en cualquier momento siempre que su servidor se esté ejecutando. Para ello, habilite el servicio de OpenVPN añadiéndolo a systemctl:

      Luego, inicie el servicio de OpenVPN:

      Vuelva a verificar que el servicio de OpenVPN está activo con el siguiente comando. Debería ver active (running) en el resultado:

      Output

      [email protected] - OpenVPN service for server Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; vendor preset: disabled) Active: active (running) since Tue 2020-04-07 02:32:07 UTC; 1min 52s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 15868 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 5059) Memory: 1.2M CGroup: /system.slice/system-openvpnx2dserver.slice/[email protected] └─15868 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --cipher AES-256-GCM --ncp-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC:BF-CBC --config server.conf . . .

      Ya completamos la configuración de la parte del servidor para OpenVPN. A continuación, configurará su máquina de cliente y se conectará con el servidor de OpenVPN.

      Paso 11: Crear la infraestructura de configuración de clientes

      Es posible que se deban crear archivos de configuración para clientes de OpenVPN, ya que todos los clientes deben tener su propia configuración y alinearse con los ajustes mencionados en el archivo de configuración del servicio. En este paso, en lugar de detallarse el proceso para escribir un único archivo de configuración que solo se pueda usar en un cliente, se describe un proceso para crear una infraestructura de configuración de cliente que puede usar para generar archivos de configuración sobre la marcha. Primero creará un archivo de configuración “de base” y, luego, una secuencia de comandos que le permitirá generar archivos de configuración, certificados y claves de clientes exclusivos según sea necesario.

      Comience creando un nuevo directorio en el que almacenará archivos de configuración de clientes dentro del directorio client-configs creado anteriormente:

      • mkdir -p ~/client-configs/files

      Luego, copie un archivo de configuración de cliente de ejemplo al directorio client-configs para usarlo como su configuración de base:

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

      Abra este archivo nuevo con nano o su editor de texto preferido:

      • nano ~/client-configs/base.conf

      Dentro de este, ubique la directiva remote. Esto dirige al cliente a la dirección de su servidor de OpenVPN: la dirección IP pública de su servidor de OpenVPN. Si decidió cambiar el puerto en el que el servidor de OpenVPN escucha, también deberá cambiar 1194 por el puerto seleccionado:

      ~/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 usa en la configuración del servidor:

      ~/client-configs/base.conf

      proto udp
      

      Luego, elimine los comentarios de las directivas user y group quitando el signo ; al inicio de cada línea:

      ~/client-configs/base.conf

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

      Encuentre las directivas que establecen ca, cert y key. Elimine los comentarios de estas directivas, ya que pronto agregará los certificados y las claves dentro del archivo:

      ~/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
      

      De modo similar, elimine la directiva tls-auth, ya que añadirá ta.key directamente al archivo de configuración del cliente (y se configura el servidor para que use tls-crypt):

      ~/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 los ajustes de cipher y auth establecidos en el archivo /etc/openvpn/server/server.conf:

      ~/client-configs/base.conf

      cipher AES-256-GCM
      auth SHA256
      

      Luego, agregue la directiva key-direction en algún lugar del archivo. Es necesario que fije el valor “1” para esta, a fin de que la VPN funcione de manera correcta en la máquina cliente:

      ~/client-configs/base.conf

      key-direction 1
      

      Por último, agregue algunas líneas no incluidas. Aunque puede incluir estas directivas en todos los archivos de configuración de clientes, solo debe habilitarlas para clientes Linux que incluyan un archivo /etc/openvpn/update-resolv-conf. Esta secuencia de comandos usa la utilidad resolvconf para 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 tiene Linux instalado y un archivo /etc/openvpn/update-resolv-conf, elimine los comentarios de estas líneas del archivo de configuración de cliente luego de que se haya generado.

      Guarde y cierre el archivo cuando termine.

      A continuación, cree una secuencia de comandos que compile su configuración de base con el certificado, la clave y los archivos de cifrado pertinentes, y, luego, ubique la configuración generada en el directorio ~/client-configs/files. Abra un nuevo archivo llamado make_config.sh en el directorio ~/client-configs:

      • nano ~/client-configs/make_config.sh

      Dentro de este, agregue el siguiente contenido:

      ~/client-configs/make_config.sh

      #!/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-crypt>') 
      ${KEY_DIR}/ta.key 
      <(echo -e '</tls-crypt>') 
      > ${OUTPUT_DIR}/${1}.ovpn
      

      Guarde y cierre el archivo cuando termine.

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

      • chmod 700 ~/client-configs/make_config.sh

      Esta secuencia de comandos realizará una copia del archivo base.conf que creó, recopilará todos los archivos de certificados y claves que haya confeccionado para su cliente, extraerá el contenido de estos y los anexará a la copia del archivo de configuración de base, y exportará todo este contenido a un nuevo archivo de configuración de cliente. Esto significa que se evita la necesidad de administrar los archivos de configuración, certificado y clave del cliente por separado, y que toda la información necesaria se almacena en un solo lugar. El beneficio de este método es que, si alguna vez necesita agregar un cliente más adelante, puede simplemente ejecutar esta secuencia de comandos para crear de manera rápida el archivo de nueva configuración y asegurarse de que toda la información importante se almacene en una sola ubicación de acceso sencillo.

      Tenga en cuenta que siempre que agregue un nuevo cliente, deberá generar claves y certificados nuevos para poder ejecutar esta secuencia de comandos y generar su archivo de configuración. Podrá practicar con este comando en el siguiente paso.

      Paso 12: Generar las configuraciones de clientes

      Si siguió la guía, creó un certificado y una clave de cliente llamados client1.crt y client1.key, respectivamente, en el paso 6. Puede generar un archivo de configuración para estas credenciales si se dirige al directorio ~/client-configs y ejecuta la secuencia de comandos que realizó al final del paso anterior:

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

      Con esto, se creará un archivo llamado client1.ovpn en su directorio ~/client-configs/files:

      • ls ~/client-configs/files

      Output

      client1.ovpn

      Debe transferir este archivo al dispositivo que planee usar como cliente. Por ejemplo, puede ser su computadora local o un dispositivo móvil.

      Si bien las aplicaciones exactas empleadas para lograr esta transferencia dependerán del sistema operativo de su dispositivo y sus preferencias personales, un método seguro y confiable consiste en usar el protocolo de transferencia de archivos SSH (SFTP ) o la copia segura (SCP) en el backend. Con esto, se transportarán los archivos de autenticación de VPN de su cliente a través de una conexión cifrada.

      Aquí tiene un comando SFTP de ejemplo que puede ejecutar desde su computadora local (macOS o Linux). Esto copiará el archivo client1.ovpn que hemos creado en el último paso a su directorio de inicio:

      • sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/

      A continuación, se muestran diferentes herramientas y tutoriales para transferir de manera segura los archivos del servidor de OpenVPN a una computadora local:

      Paso 13: Instalar la configuración de cliente

      En esta sección, se aborda la forma de instalar un perfil de VPN de cliente en Windows, macOS, Linux, iOS y Android. Ninguna de estas instrucciones para clientes depende de la otra. Por lo tanto, no dude en dirigirse directamente a la que corresponda para su dispositivo.

      La conexión de OpenVPN tendrá el mismo nombre que usó para el archivo .ovpn. En lo que respecta a este tutorial, esto significa que la conexión se llama client1.ovpn y guarda correspondencia con el primer archivo de cliente que generó.

      Windows

      Instalación

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

      Nota: OpenVPN necesita privilegios administrativos para instalarse.

      Luego de instalar OpenVPN, copie el archivo .ovpn a esta ubicación:

      C:Program FilesOpenVPNconfig
      

      Cuando inicie OpenVPN, este detectará el perfil de manera automática y lo dejará disponible.

      Debe ejecutar OpenVPN como administrador cada vez que lo use, aun en cuentas administrativas. Para realizar esto sin tener que hacer clic con el botón secundario y seleccionar Ejecutar como administrador cada vez que use la VPN, debe fijarlo como ajuste predeterminado desde una cuenta administrativa. Esto también significa que los usuarios estándares deberán ingresar la contraseña del administrador para usar OpenVPN. Por otro lado, los usuarios estándares no pueden conectarse de manera adecuada al servidor a menos que la aplicación OpenVPN del cliente tenga derechos de administrador. Por lo tanto, se necesitan privilegios elevados.

      Para configurar la aplicación OpenVPN de modo que se ejecute siempre con privilegios de administrador, haga clic con el botón secundario en su ícono de acceso directo y diríjase a Propiedades. Al final de la pestaña Compatibilidad, haga clic en el botón Cambiar la configuración para todos los usuarios. En la nueva ventana, seleccione Ejecutar este programa como administrador.

      Conexión

      Cada vez que inicie OpenVPN GUI, Windows le preguntará si quiere que el programa realice cambios en su computadora. Haga clic en . Iniciar la aplicación OpenVPN de cliente solo ubica el applet en la bandeja del sistema para que pueda conectar y desconectar la VPN según sea necesario; no establece la conexión de VPN.

      Una vez que se inicie OpenVPN, establezca una conexión ingresando al área de notificación y haga clic con el botón secundario en el ícono de OpenVPN. Con esto, se abrirá el menú contextual. Seleccione client1 en la parte superior del menú (su perfil client1.ovpn) y, luego, Connect.

      Una ventana de estado se abrirá y mostrará el resultado de 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 forma: ingrese al applet de la bandeja del sistema, haga clic con el botón secundario en el icono de OpenVPN, seleccione el perfil del cliente y haga clic en Disconnect.

      macOS

      Instalación

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

      Al finalizar el proceso de instalación, Tunnelblick le preguntará si tiene algún archivo de configuración. Responda I have configuration files (tengo archivos de configuración) y deje que Tunnelblick finalice el proceso. Abra una ventana de Finder, busque client1.ovpn y haga doble clic en él. Tunnelblick instalará el perfil de cliente. Se necesitan privilegios de administrador.

      Conexión

      Inicie Tunnelblick haciendo doble clic en el icono de Tunnelblick de la carpeta Aplicaciones. Una vez que se haya iniciado Tunnelblick, su icono aparecerá en la barra de menú de la esquina superior derecha de la pantalla para controlar las conexiones. Haga clic en el icono y, luego, en el elemento de menú Connect client1 para iniciar la conexión de VPN.

      Linux

      Instalación

      Si usa Linux, dispone de varias herramientas según su distribución. En su entorno de escritorio o gestor de ventanas, también pueden incluirse utilidades de conexión.

      Sin embargo, el método de conexión más universal consiste en simplemente usar el software OpenVPN.

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

      • sudo apt update
      • sudo apt install openvpn

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

      • sudo yum install epel-release
      • sudo yum install openvpn

      Configuración

      Verifique si su distribución incluye una secuencia de comandos /etc/openvpn/update-resolv-conf:

      Output

      update-resolv-conf

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

      Si pudo encontrar un archivo update-resolv-conf, elimine los comentarios de las tres líneas de agregó para modificar los ajustes de DNS:

      client1.ovpn

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

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

      client1.ovpn

      group nobody
      

      Guarde y cierre el archivo.

      Ahora, podrá conectarse a la VPN simplemente apuntando el comando openvpn hacia el archivo de configuración de cliente:

      • sudo openvpn --config client1.ovpn

      Esto debería permitirle establecer conexión con la VPN.

      iOS

      Instalación

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

      El proceso para completar la transferencia con iTunes se describe aquí. Abra iTunes en la computadora y haga clic en iPhone > apps. Deslícese hacia la parte inferior, hasta la sección Compartir archivos, y haga clic en la app OpenVPN. La ventana en blanco de la derecha, Documentos OpenVPN, sirve para compartir archivos. Arrastre el archivo .ovpn a la ventana de documentos de OpenVPN. iTunes con el perfil de 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 importarse. Toque el símbolo verde del signo de suma para importarlo.

      La app OpenVPN de iOS muestra un nuevo perfil listo para importarse Connecting (Conectando)

      De esta manera, OpenVPN estará listo para usarse con el nuevo perfil. Inicie la conexión deslizando el botón Connect (Conectar) a la posición On (Activado). Finalice la conexión deslizando el mismo botón a la posición Off (Desactivado).

      Nota: El conmutador de VPN de Settings (Ajustes) no se puede usar para establecer conexión con la VPN. Si lo intenta, recibirá un aviso que le indicará conectarse únicamente utilizando la aplicación OpenVPN.

      Aplicación OpenVPN de iOS conectada a la VPN

      Android

      Instalación

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

      Puede transferir el perfil .ovpn conectando el dispositivo Android a su computadora a través de un puerto USB y copiando el archivo. De manera alternativa, si tiene un lector de tarjetas SD, puede quitar la tarjeta SD del dispositivo, copiar el perfil a ella y, luego, insertarla tarjeta de vuelta en el dispositivo Android.

      Inicie la aplicación OpenVPN y haga clic en el menú FILE (Archivo) para importar el perfil.

      Selección del menú de importación de perfiles de la aplicación OpenVPN de Android.

      Luego, diríjase a la ubicación del perfil guardado (en la captura de pantalla se usa /storage/emulated/0/openvpn​​​) y seleccione su archivo .ovpn. Haga clic en el botón IMPORT para terminar de importar este perfil.

      Selección de un perfil de VPN para su importación en la aplicación OpenVPN de Android.

      Connecting (Conectando) Cuando se añada el perfil, verá una pantalla como esta:

      La aplicación de Android de OpenVPN con un nuevo perfil añadido

      Para conectarse, haga clic en el botón de activar para el perfil que desea usar. Verá datos en tiempo real de su conexión y tráfico enrutados a través de su servidor de OpenVPN: la aplicación de Android de OpenVPN conectada a la VPN

      Para desconectarse, solo haga clic en el botón de alternancia en la parte superior izquierda de nuevo. Se le solicitará que confirme que desea desconectarse de su VPN.

      Paso 14: Probar la conexión de su VPN (opcional)

      Nota: Este método para probar su conexión de VPN solo funcionará si optó por enrutar todo el tráfico a través de la VPN en el paso 7 cuando editó el archivo server.conf para OpenVPN.

      Una vez que todo esté instalado, con una simple revisión confirmará que todo funciona de forma correcta. Sin tener una conexión VPN habilitada, abra un explorador e ingrese a DNSLeakTest.

      El sitio mostrará la dirección de IP asignada por su proveedor de servicio de Internet y la forma en que aparece para el resto del mundo. Para corroborar sus ajustes de DNS a través del mismo sitio web, haga clic en Extended Test (Prueba extendida). Esto le indicará los servidores DNS que usa.

      Ahora, conecte el cliente de OpenVPN a la VPN de su Droplet y actualice el navegador. Con esto, debería aparecer una dirección de IP totalmente distinta (la de su servidor de VPN). De esta manera, aparecerá ante el mundo. Una vez más, la opción Extended Test de DNSLeakTest revisará sus ajustes de DNS y confirmará que ahora use los solucionadores de DNS enviados por su VPN.

      Paso 15: Revocar certificados de clientes

      Es posible que, de tanto en tanto, deba rechazar un certificado de cliente para evitar más accesos al servidor de OpenVPN.

      Para ello, siga el ejemplo en el tutorial de requisitos previos Cómo instalar y configurar una entidad de certificación en CentOS 8 en la sección Revocar un certificado.

      Cuando haya revocado un certificado para un cliente usando estas instrucciones, deberá copiar el archivo crl.pem generado a su servidor de OpenVPN en el directorio /etc/openvpn/server:

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

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

      • sudo nano /etc/openvpn/server/server.conf

      Al final del archivo, agregue la opción crl-verify, que indicará al servidor OpenVPN que revise la lista de rechazo de certificados que creamos cada vez que se realice un intento de conexión:

      /etc/openvpn/server/server.conf

      crl-verify crl.pem
      

      Guarde y cierre el archivo.

      Por último, reinicie OpenVPN para implementar el rechazo de certificados:

      El cliente ya no debería poder conectarse de manera correcta al servidor usando la credencial anterior.

      Para rechazar clientes adicionales, siga este proceso:

      1. Rechace el certificado con el comando ./easyrsa revoke client-name.
      2. Genere una nueva CRL.
      3. Transfiera el archivo crl.pem nuevo a su servidor de OpenVPN y cópielo al directorio /etc/openvpn/server/ para sobrescribir la lista anterior.
      4. Reinicie el servicio de OpenVPN.

      Puede usar este proceso para rechazar cualquier certificado emitido anteriormente para su servidor.

      Conclusión

      Ahora debería tener una red privada completamente funcional ejecutándose en su servidor de OpenVPN. Puede navegar en la web y descargar contenido sin preocuparse porque individuos malintencionados rastreen su actividad.

      Hay varios pasos que podría seguir para personalizar su instalación de OpenVPN aún más, como configurar su cliente para que se conecte a la VPN de manera automática o configurar reglas específicas para los clientes y políticas de acceso. Para esto y para otras personalizaciones de OpenVPN, debería consultar la documentación oficial de OpenVPN.

      Para configurar más clientes, solo debe seguir los pasos 6 y 11-13 para cada dispositivo adicional. Para rechazar el acceso de los clientes, siga el paso 15.



      Source link

      How To Set Up and Configure an OpenVPN Server on CentOS 8


      Introduction

      A Virtual Private Network (VPN) allows you to traverse untrusted networks as if you were on a private network. It gives you the freedom to access the internet safely and securely from your smartphone or laptop when connected to an untrusted network, like the WiFi at a hotel or coffee shop.

      When combined with HTTPS connections, this setup allows you to secure your wireless logins and transactions. You can circumvent geographical restrictions and censorship, and shield your location and any unencrypted HTTP traffic from untrusted networks.

      OpenVPN is a full featured, open-source Transport Layer Security (TLS) VPN solution that accommodates a wide range of configurations. In this tutorial, you will set up OpenVPN on a CentOS 8 server, and then configure it to be accessible from a client machine.

      Note: If you plan to set up an OpenVPN Server on a DigitalOcean Droplet, be aware that we, like many hosting providers, charge for bandwidth overages. For this reason, please be mindful of how much traffic your server is handling.

      See this page for more info.

      Prerequisites

      To follow this tutorial, you will need:

      Note: While it is technically possible to use your OpenVPN Server or your local machine as your CA, this is not recommended as it opens up your VPN to some security vulnerabilities. Per the official OpenVPN documentation, you should place your CA on a standalone machine that’s dedicated to importing and signing certificate requests. For this reason, this guide assumes that your CA is on a separate CentOS 8 server that also has a non-root user with sudo privileges and a basic firewall enabled.

      In addition to that, you’ll need a client machine which you will use to connect to your OpenVPN Server. In this guide, we’ll call this the OpenVPN Client. For the purposes of this tutorial, it’s recommended that you use your local machine as the OpenVPN client.

      With these prerequisites in place, you are ready to begin setting up and configuring an OpenVPN Server on CentOS 8.

      Note: Please note that if you disable password authentication while configuring these servers, you may run into difficulties when transferring files between them later on in this guide. To resolve this issue, you could re-enable password authentication on each server. Alternatively, you could generate an SSH keypair for each server, then add the OpenVPN Server’s public SSH key to the CA machine’s authorized_keys file and vice versa. See How to Set Up SSH Keys on CentOS 8 for instructions on how to perform either of these solutions.

      Step 1 — Installing OpenVPN and Easy-RSA

      The first step in this tutorial is to install OpenVPN and Easy-RSA. Easy-RSA is a public key infrastructure (PKI) management tool that you will use on the OpenVPN Server to generate a certificate request that you will then verify and sign on the CA Server.

      However, OpenVPN and Easy-RSA are not available by default in CentOS 8, so you will need to enable the Extra Packages for Enterprise Linux (EPEL) repository. EPEL is managed by the Fedora Project and contains non-standard but popular packages for Fedora, CentOS, and other Linux distributions that use the RPM package format. Log in to your OpenVPN Server as the non-root sudo user that you created during the initial setup steps and run the following:

      • sudo dnf install epel-release
      • sudo dnf install openvpn easy-rsa

      Next you will need to create a new directory on the OpenVPN Server as your non-root user called ~/easy-rsa:

      Now you will need to create a symlink from the easyrsa script that the package installed into the ~/easy-rsa directory that you just created:

      • ln -s /usr/share/easy-rsa/3/* ~/easy-rsa/

      Note: While other guides might instruct you to copy the easy-rsa package files into your PKI directory, this tutorial adopts a symlink approach. As a result, any updates to the easy-rsa package will be automatically reflected in your PKI’s scripts.

      Finally, ensure the directory’s owner is your non-root sudo user and restrict access to that user using chmod:

      • sudo chown sammy ~/easy-rsa
      • chmod 700 ~/easy-rsa

      Once these programs are installed and have been moved to the right locations on your system, the next step is to create a Public Key Infrastructure (PKI) on the OpenVPN server so that you can request and manage TLS certificates for clients and other servers that will connect to your VPN.

      Step 2 — Creating a PKI for OpenVPN

      Before you can create your OpenVPN server’s private key and certificate, you need to create a local Public Key Infrastructure directory on your OpenVPN server. You will use this directory to manage the server and clients’ certificate requests instead of making them directly on your CA server.

      To build a PKI directory on your OpenVPN server, you’ll need to populate a file called vars with some default values. First you will cd into the easy-rsa directory, then you will create and edit the vars file with your preferred text editor.

      The default text editor that comes with CentOS 8 is vi. vi is an extremely powerful text editor, but it can be somewhat obtuse for users who lack experience with it. You might want to install a more user-friendly editor such as nano to facilitate editing configuration files on your CentOS 8 server:

      When you are prompted to install nano, enter y to continue with the installation steps. Now you are ready to edit the vars file:

      Once the file is opened, paste in the following two lines:

      ~/easy-rsa/vars

      set_var EASYRSA_ALGO "ec"
      set_var EASYRSA_DIGEST "sha512"
      

      These lines will ensure that your private keys and certificate requests are configured to use modern Elliptic Curve Cryptography (ECC) to generate keys and secure signatures for your clients and OpenVPN server.

      Configuring your OpenVPN & CA servers to use ECC means when a client and server attempt to establish a shared symmetric key, they can use Elliptic Curve algorithms to do their exchange. Using ECC for a key exchange is significantly faster than using plain Diffie-Hellman with the classic RSA algorithm since the numbers are much smaller and the computations are faster.

      Background: When clients connect to OpenVPN, they use asymmetric encryption (also known as public/private key) to perform a TLS handshake. However, when transmitting encrypted VPN traffic, the server and clients use symmetric encryption, which is also known as shared key encryption.

      There is much less computational overhead with symmetric encryption compared to asymmetric: the numbers that are used are much smaller, and modern CPUs integrate instructions to perform optimized symmetric encryption operations. To make the switch from asymmetric to symmetric encryption, the OpenVPN server and client will use the Elliptic Curve Diffie-Hellman (ECDH) algorithm to agree on a shared secret key as quickly as possible.

      Once you have populated the vars file you can proceed with creating the PKI directory. To do so, run the easyrsa script with the init-pki option. Although you already ran this command on the CA server as part of the prerequisites, it’s necessary to run it here because your OpenVPN server and CA server have separate PKI directories:

      Note that on your OpenVPN server there is no need to create a Certificate Authority. Your CA server is solely responsible for validating and signing certificates. The PKI on your VPN server is only used as a convenient and centralized place to store certificate requests and public certificates.

      After you’ve initialized your PKI on the OpenVPN server, you are ready to move on to the next step, which is creating an OpenVPN server certificate request and private key.

      Step 3 — Creating an OpenVPN Server Certificate Request and Private Key

      Now that your OpenVPN server has all the prerequisites installed, the next step is to generate a private key and Certificate Signing Request (CSR) on your OpenVPN server. After that you’ll transfer the request over to your CA to be signed, creating the required certificate. Once you have a signed certificate, you’ll transfer it back to the OpenVPN server and install it for the server to use.

      To start, navigate to the ~/easy-rsa directory on your OpenVPN Server as your non-root user:

      Now you’ll call the easyrsa with the gen-req option followed by a Common Name (CN) for the machine. The CN can be anything you like but it can be helpful to make it something descriptive. Throughout this tutorial, the OpenVPN Server’s CN will be server. Be sure to include the nopass option as well. Failing to do so will password-protect the request file which could lead to permissions issues later on.

      Note: If you choose a name other than server here, you will have to adjust some of the instructions below. For instance, when copying the generated files to the /etc/openvpn directory, you will have to substitute the correct names. You will also have to modify the /etc/openvpn/server.conf file later to point to the correct .crt and .key files.

      • ./easyrsa gen-req server nopass

      Output

      Common Name (eg: your user, host, or server name) [server]: Keypair and certificate request completed. Your files are: req: /home/sammy/easy-rsa/pki/reqs/server.req key: /home/sammy/easy-rsa/pki/private/server.key

      This will create a private key for the server and a certificate request file called server.req. Copy the server key to the /etc/openvpn/server directory:

      • sudo cp /home/sammy/easy-rsa/pki/private/server.key /etc/openvpn/server/

      After completing these steps, you have successfully created a private key for your OpenVPN server. You have also generated a Certificate Signing Request for the OpenVPN server. The CSR is now ready for signing by your CA. In the next section of this tutorial you will learn how to sign a CSR with your CA server’s private key.

      Step 4 — Signing the OpenVPN Server’s Certificate Request

      In the previous step you created a Certificate Signing Request (CSR) and private key for the OpenVPN server. Now the CA server needs to know about the server certificate and validate it. Once the CA validates and relays the certificate back to the OpenVPN server, clients that trust your CA will be able to trust the OpenVPN server as well.

      On the OpenVPN server, as your non-root user, use SCP or another transfer method to copy the server.req certificate request to the CA server for signing:

      • scp /home/sammy/easy-rsa/pki/reqs/server.req sammy@your_ca_server_ip:/tmp

      Now log in to the CA server as the non-root user that owns the easy-rsa directory, where you created your PKI. Import the certificate request using the easyrsa script:

      • cd ~/easy-rsa
      • ./easyrsa import-req /tmp/server.req server

      Output

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

      Next, sign the request by running the easyrsa script with the sign-req option, followed by the request type and the Common Name. The request type can either be client or server. Since we’re working with the OpenVPN server’s certificate request, be sure to use the server request type:

      • ./easyrsa sign-req server server

      In the output, you’ll be prompted to verify that the request comes from a trusted source. Type yes then press ENTER to confirm:

      Output

      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 . . . Certificate created at: /home/sammy/easy-rsa/pki/issued/server.crt

      Note that if you encrypted your CA private key, you’ll be prompted for your password at this point.

      With those steps complete, you have signed the OpenVPN server’s certificate request using the CA server’s private key. The resulting server.crt file contains the OpenVPN server’s public encryption key, as well as a signature from the CA server. The point of the signature is to tell anyone who trusts the CA server that they can also trust the OpenVPN server when they connect to it.

      To finish configuring the certificates, copy the server.crt and ca.crt files from the CA server to the OpenVPN server:

      • scp pki/issued/server.crt sammy@your_vpn_server_ip:/tmp
      • scp pki/ca.crt sammy@your_vpn_server_ip:/tmp

      Now back on your OpenVPN server, copy the files from /tmp to /etc/openvpn/server:

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

      Now your OpenVPN server is nearly ready to accept connections. In the next step you’ll perform some additional steps to increase the security of the server.

      Step 5 — Configuring OpenVPN Cryptographic Material

      For an additional layer of security, we’ll add an extra shared secret key that the server and all clients will use with OpenVPN’s tls-crypt directive. This option is used to obfuscate the TLS certificate that is used when a server and client connect to each other initially. It is also used by the OpenVPN server to perform quick checks on incoming packets: if a packet is signed using the pre-shared key, then the server processes it; if it is not signed, then the server knows it is from an untrusted source and can discard it without having to perform additional decryption work.

      This option will help ensure that your OpenVPN server is able to cope with unauthenticated traffic, port scans, and Denial of Service attacks, which can tie up server resources. It also makes it harder to identify OpenVPN network traffic.

      To generate the tls-crypt pre-shared key, run the following on the OpenVPN server in the ~/easy-rsa directory:

      • cd ~/easy-rsa
      • openvpn --genkey --secret ta.key

      The result will be a file called ta.key. Copy it to the /etc/openvpn/server/ directory:

      • sudo cp ta.key /etc/openvpn/server

      With these files in place on the OpenVPN server you are ready to create client certificates and key files for your users, which you will use to connect to the VPN.

      Step 6 — Generating a Client Certificate and Key Pair

      Although you can generate a private key and certificate request on your client machine and then send it to the CA to be signed, this guide outlines a process for generating the certificate request on the OpenVPN server. The benefit of this approach is that we can create a script that will automatically generate client configuration files that contain all of the required keys and certificates. This lets you avoid having to transfer keys, certificates, and configuration files to clients and streamlines the process of joining the VPN.

      We will generate a single client key and certificate pair for this guide. If you have more than one client, you can repeat this process for each one. Please note, though, that you will need to pass a unique name value to the script for every client. Throughout this tutorial, the first certificate/key pair is referred to as client1.

      Get started by creating a directory structure within your home directory to store the client certificate and key files:

      • mkdir -p ~/client-configs/keys

      Since you will store your clients’ certificate/key pairs and configuration files in this directory, you should lock down its permissions now as a security measure:

      • chmod -R 700 ~/client-configs

      Next, navigate back to the EasyRSA directory and run the easyrsa script with the gen-req and nopass options, along with the common name for the client:

      • cd ~/easy-rsa
      • ./easyrsa gen-req client1 nopass

      Press ENTER to confirm the common name. Then, copy the client1.key file to the ~/client-configs/keys/ directory you created earlier:

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

      Next, transfer the client1.req file to your CA Server using a secure method:

      • scp pki/reqs/client1.req sammy@your_ca_server_ip:/tmp

      Now log in to your CA Server. Then, navigate to the EasyRSA directory, and import the certificate request:

      • cd ~/easy-rsa
      • ./easyrsa import-req /tmp/client1.req client1

      Next, sign the request the same way as you did for the server in the previous step. This time, though, be sure to specify the client request type:

      • ./easyrsa sign-req client client1

      When prompted, enter yes to confirm that you intend to sign the certificate request and that it came from a trusted source:

      Output

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

      Again, if you encrypted your CA key, you’ll be prompted for your password here.

      This will create a client certificate file named client1.crt. Transfer this file back to the server:

      • scp pki/issued/client1.crt sammy@your_server_ip:/tmp

      Back on your OpenVPN server, copy the client certificate to the ~/client-configs/keys/ directory:

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

      Next, copy the ca.crt and ta.key files to the ~/client-configs/keys/ directory as well, and set the appropriate permissions for your sudo user:

      • cp ~/easy-rsa/ta.key ~/client-configs/keys/
      • sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
      • sudo chown sammy.sammy ~/client-configs/keys/*

      With that, your server and client’s certificates and keys have all been generated and are stored in the appropriate directories on your OpenVPN server. There are still a few actions that need to be performed with these files, but those will come in a later step. For now, you can move on to configuring OpenVPN.

      Step 7 — Configuring OpenVPN

      Like many other widely used open-source tools, OpenVPN has numerous configuration options available to customize your server for your specific needs. In this section, we will provide instructions on how to set up an OpenVPN server configuration based on one of the sample configuration files that is included within this software’s documentation.

      First, copy the sample server.conf file as a starting point for your own configuration file:

      • sudo cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/

      Open the new file for editing with the text editor of your choice. We’ll use nano in our example:

      • sudo nano /etc/openvpn/server/server.conf

      We’ll need to change a few lines in this file. First, find the HMAC section of the configuration by searching for the tls-auth directive. This line should be uncommented. Comment it out by adding a ; to the beginning of the line. Then add a new line after it containing the value tls-crypt ta.key only:

      /etc/openvpn/server.conf

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

      Next, find the section on cryptographic ciphers by looking for the cipher lines. The default value is set to AES-256-CBC, however, the AES-256-GCM cipher offers a better level of encryption, performance, and is well supported in up-to-date OpenVPN clients. We’ll comment out the default value by adding a ; sign to the beginning of this line, and then we’ll add another line after it containing the updated value of AES-256-GCM:

      /etc/openvpn/server.conf

      ;cipher AES-256-CBC
      cipher AES-256-GCM
      

      Right after this line, add an auth directive to select the HMAC message digest algorithm. For this, SHA256 is a good choice:

      /etc/openvpn/server.conf

      auth SHA256
      

      Next, find the line containing a dh directive, which defines Diffie-Hellman parameters. Since we’ve configured all the certificates to use Elliptic Curve Cryptography, there is no need for a Diffie-Hellman seed file. Comment out the existing line that looks like dh dh2048.pem or dh dh.pem. The filename for the Diffie-Hellman key may be different than what is listed in the example server configuration file. Then add a line after it with the contents dh none:

      /etc/openvpn/server.conf

      ;dh dh2048.pem
      dh none
      

      Next, we want OpenVPN to run with no privileges once it has started, so we need to tell it to run with a user and group of nobody. To enable this, find and uncomment the user nobody and group nobody lines by removing the ; sign from the beginning of each line:

      /etc/openvpn/server.conf

      user nobody
      group nobody
      

      (Optional) Push DNS Changes to Redirect All Traffic Through the VPN

      The settings above will create the VPN connection between your client and server, but will not force any connections to use the tunnel. If you wish to use the VPN to route all of your client traffic over the VPN, you will likely want to push some extra settings to the client computers.

      To get started, find and uncomment the line containing push "redirect-gateway def1 bypass-dhcp". Doing this will tell your client to redirect all of its traffic through your OpenVPN Server. Be aware that enabling this functionality can cause connectivity issues with other network services, like SSH:

      /etc/openvpn/server.conf

      push "redirect-gateway def1 bypass-dhcp"
      

      Just below this line, find the dhcp-option section. Again, remove the ; from the beginning of both of the lines to uncomment them:

      /etc/openvpn/server.conf

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

      These lines will tell your client to use the free OpenDNS resolvers at the listed IP addresses. If you prefer other DNS resolvers you can substitute them in place of the highlighted IPs.

      This will assist clients in reconfiguring their DNS settings to use the VPN tunnel as the default gateway.

      (Optional) Adjust the Port and Protocol

      By default, the OpenVPN server uses port 1194 and the UDP protocol to accept client connections. If you need to use a different port because of restrictive network environments that your clients might be in, you can change the port option. If you are not hosting web content on your OpenVPN server, port 443 is a popular choice since it is usually allowed through firewall rules.

      To change OpenVPN to listen on port 443, open the server.conf file and find the line that looks like this:

      /etc/openvpn/server.conf

      port 1194
      

      Edit it so that the port is 443:

      /etc/openvpn/server.conf

      # Optional!
      port 443
      

      Oftentimes, the protocol is restricted to that port as well. If so, find the proto line below the port line and change the protocol from udp to tcp:

      /etc/openvpn/server.conf

      # Optional!
      proto tcp
      

      If you do switch the protocol to TCP, you will need to change the explicit-exit-notify directive’s value from 1 to 0, as this directive is only used by UDP. Failing to do so while using TCP will cause errors when you start the OpenVPN service.

      Find the explicit-exit-notify line at the end of the file and change the value to 0:

      /etc/openvpn/server.conf

      # Optional!
      explicit-exit-notify 0
      

      If you have no need to use a different port and protocol, it is best to leave these settings unchanged.

      (Optional) Point to Non-Default Credentials

      If you selected a different name during the ./easyrsa gen-req server command earlier, modify the cert and key lines in the server.conf configuration file so that they point to the appropriate .crt and .key files. If you used the default name, server, this is already set correctly:

      /etc/openvpn/server.conf

      cert server.crt
      key server.key
      

      When you are finished, save and close the file.

      You have now finished configuring your OpenVPN general settings. In the next step, we’ll customize the server’s networking options.

      Step 8 — Adjusting the OpenVPN Server Networking Configuration

      There are some aspects of the server’s networking configuration that need to be tweaked so that OpenVPN can correctly route traffic through the VPN. The first of these is IP forwarding, a method for determining where IP traffic should be routed. This is essential to the VPN functionality that your server will provide.

      To adjust your OpenVPN server’s default IP forwarding setting, open the /etc/sysctl.conf file using nano or your preferred editor:

      • sudo nano /etc/sysctl.conf

      Then add the following line at the top of the file:

      /etc/sysctl.conf

      net.ipv4.ip_forward = 1
      

      Save and close the file when you are finished.

      To read the file and load the new values for the current session, type:

      Output

      net.ipv4.ip_forward = 1

      Now your OpenVPN server will be able to forward incoming traffic from one ethernet device to another. This setting makes sure the server can direct traffic from clients that connect on the virtual VPN interface out over its other physical ethernet devices. This configuration will route all web traffic from your client via your server’s IP address, and your client’s public IP address will effectively be hidden.

      In the next step you will need to configure some firewall rules to ensure that traffic to and from your OpenVPN server flows properly.

      Step 9 — Firewall Configuration

      So far, you’ve installed OpenVPN on your server, configured it, and generated the keys and certificates needed for your client to access the VPN. However, you have not yet provided OpenVPN with any instructions on where to send incoming web traffic from clients. You can stipulate how the server should handle client traffic by establishing some firewall rules and routing configurations.

      Assuming you followed the prerequisites at the start of this tutorial, you should already have firewalld installed and running on your server. To allow OpenVPN through the firewall, you’ll need to know what your active firewalld zone is. Find this with the following command:

      • sudo firewall-cmd --get-active-zones

      Output

      public Interfaces: eth0

      If you do not see a trusted zone that lists the tun0 interface, run the following commands to add the VPN device to that zone:

      • sudo firewall-cmd --zone=trusted --add-interface=tun0
      • sudo firewall-cmd --permanent --zone=trusted --add-interface=tun0

      Next, add the openvpn service to the list of services allowed by firewalld within your active zone, and then make that setting permanent by running the command again but with the --permanent option added:

      • sudo firewall-cmd --permanent --add-service openvpn
      • sudo firewall-cmd --permanent --zone=trusted --add-service openvpn

      To apply the changes on the firewall, run:

      • sudo firewall-cmd --reload

      You can now check that the service was added correctly with the following command:

      • sudo firewall-cmd --list-services --zone=trusted

      Output

      openvpn

      Next, we’ll add a masquerade rule to the firewall. Masquerading allows your OpenVPN server to translate your OpenVPN clients’ addresses into the server’s own public address, and then do the reverse with traffic that is sent back to clients. This process is also known as Network Address Translation (NAT).

      Add masquerade rules with the following commands:

      • sudo firewall-cmd --add-masquerade
      • sudo firewall-cmd --add-masquerade --permanent

      You can check that the masquerade was added correctly with this command:

      • sudo firewall-cmd --query-masquerade

      Output

      yes

      Next, you’ll need to create the specific masquerade rule for your OpenVPN subnet only. You can do this by first creating a shell variable (DEVICE in our example) which will represent the primary network interface used by your server, and then using that variable to permanently add the routing rule:

      • DEVICE=$(ip route | awk '/^default via/ {print $5}')
      • sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $DEVICE -j MASQUERADE

      Be sure to reload firewalld so that all your changes take effect:

      • sudo firewall-cmd --reload

      The commands with the --permanent flag will ensure that the rules will persist across reboots. The firewall-cmd --reload command makes sure that all the outstanding changes to the firewall are applied. With the firewall rules in place, we can start the OpenVPN service on the server.

      Step 10 — Starting OpenVPN

      OpenVPN runs as a systemd service, so we can use systemctl for managing it. We will configure OpenVPN to start up at boot so you can connect to your VPN at any time as long as your server is running. To do this, enable the OpenVPN service by adding it to systemctl:

      Then start the OpenVPN service:

      Double check that the OpenVPN service is active with the following command. You should see active (running) in the output:

      Output

      [email protected] - OpenVPN service for server Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; vendor preset: disabled) Active: active (running) since Tue 2020-04-07 02:32:07 UTC; 1min 52s ago Docs: man:openvpn(8) https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage https://community.openvpn.net/openvpn/wiki/HOWTO Main PID: 15868 (openvpn) Status: "Initialization Sequence Completed" Tasks: 1 (limit: 5059) Memory: 1.2M CGroup: /system.slice/system-openvpnx2dserver.slice/[email protected] └─15868 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --cipher AES-256-GCM --ncp-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC:BF-CBC --config server.conf . . .

      We’ve now completed the server-side configuration for OpenVPN. Next, you will configure your client machine and connect to the OpenVPN Server.

      Step 11 — Creating the Client Configuration Infrastructure

      Creating configuration files for OpenVPN clients can be somewhat involved, as every client must have its own config and each must align with the settings outlined in the server’s configuration file. Rather than writing a single configuration file that can only be used on one client, this step outlines a process for building a client configuration infrastructure which you can use to generate config files on-the-fly. You will first create a “base” configuration file then build a script which will allow you to generate unique client config files, certificates, and keys as needed.

      Get started by creating a new directory where you will store client configuration files within the client-configs directory you created earlier:

      • mkdir -p ~/client-configs/files

      Next, copy an example client configuration file into the client-configs directory to use as your base configuration:

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

      Open this new file using nano or your preferred text editor:

      • nano ~/client-configs/base.conf

      Inside, locate the remote directive. This points the client to your OpenVPN server address — the public IP address of your OpenVPN server. If you decided to change the port that the OpenVPN server is listening on, you will also need to change 1194 to the port you selected:

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

      Be sure that the protocol matches the value you are using in the server configuration:

      ~/client-configs/base.conf

      proto udp
      

      Next, uncomment the user and group directives by removing the ; sign at the beginning of each line:

      ~/client-configs/base.conf

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

      Find the directives that set the ca, cert, and key. Comment out these directives since you will add the certs and keys within the file itself shortly:

      ~/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
      

      Similarly, comment out the tls-auth directive, as you will add ta.key directly into the client configuration file (and the server is set up to use tls-crypt):

      ~/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
      

      Mirror the cipher and auth settings that you set in the /etc/openvpn/server/server.conf file:

      ~/client-configs/base.conf

      cipher AES-256-GCM
      auth SHA256
      

      Next, add the key-direction directive somewhere in the file. You must set this to “1” for the VPN to function correctly on the client machine:

      ~/client-configs/base.conf

      key-direction 1
      

      Finally, add a few commented out lines. Although you can include these directives in every client configuration file, you only need to enable them for Linux clients that ship with an /etc/openvpn/update-resolv-conf file. This script uses the resolvconf utility to update DNS information for Linux clients.

      ~/client-configs/base.conf

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

      If your client is running Linux and has an /etc/openvpn/update-resolv-conf file, uncomment these lines from the client’s configuration file after it has been generated.

      Save and close the file when you are finished.

      Next, we’ll create a script that will compile your base configuration with the relevant certificate, key, and encryption files and then place the generated configuration in the ~/client-configs/files directory. Open a new file called make_config.sh within the ~/client-configs directory:

      • nano ~/client-configs/make_config.sh

      Inside, add the following content:

      ~/client-configs/make_config.sh

      #!/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-crypt>') 
      ${KEY_DIR}/ta.key 
      <(echo -e '</tls-crypt>') 
      > ${OUTPUT_DIR}/${1}.ovpn
      

      Save and close the file when you are finished.

      Before moving on, be sure to mark this file as executable by typing:

      • chmod 700 ~/client-configs/make_config.sh

      This script will make a copy of the base.conf file you made, collect all the certificate and key files you’ve created for your client, extract their contents, append them to the copy of the base configuration file, and export all of this content into a new client configuration file. This means that, rather than having to manage the client’s configuration, certificate, and key files separately, all the required information is stored in one place. The benefit of using this method is that if you ever need to add a client in the future, you can run this script to quickly create a new config file and ensure that all the important information is stored in a single, easy-to-access location.

      Please note that any time you add a new client, you will need to generate new keys and certificates for it before you can run this script and generate its configuration file. You will get some practice using this script in the next step.

      Step 12 — Generating Client Configurations

      If you followed along with the guide, you created a client certificate and key named client1.crt and client1.key, respectively, in Step 6. You can generate a config file for these credentials by moving into your ~/client-configs directory and running the script you made at the end of the previous step:

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

      This will create a file named client1.ovpn in your ~/client-configs/files directory:

      • ls ~/client-configs/files

      Output

      client1.ovpn

      You need to transfer this file to the device you plan to use as the client. For instance, this could be your local computer or a mobile device.

      While the exact applications used to accomplish this transfer will depend on your device’s operating system and your personal preferences, a dependable and secure method is to use SFTP (SSH file transfer protocol) or SCP (Secure Copy) on the backend. This will transport your client’s VPN authentication files over an encrypted connection.

      Here is an example SFTP command which you can run from your local computer (macOS or Linux). This will copy the client1.ovpn file we’ve created in the last step to your home directory:

      • sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/

      Here are several tools and tutorials for securely transferring files from the OpenVPN server to a local computer:

      Step 13 — Installing the Client Configuration

      This section covers how to install a client VPN profile on Windows, macOS, Linux, iOS, and Android. None of these client instructions are dependent on one another, so feel free to skip to whichever is applicable to your device.

      The OpenVPN connection will have the same name as whatever you called the .ovpn file. In regards to this tutorial, this means that the connection is named client1.ovpn, aligning with the first client file you generated.

      Windows

      Installing

      Download the OpenVPN client application for Windows from OpenVPN’s Downloads page. Choose the appropriate installer version for your version of Windows.

      Note: OpenVPN needs administrative privileges to install.

      After installing OpenVPN, copy the .ovpn file to:

      C:Program FilesOpenVPNconfig
      

      When you launch OpenVPN, it will automatically locate the profile and make it available.

      You must run OpenVPN as an administrator each time it’s used, even by administrative accounts. To do this without having to right-click and select Run as administrator every time you use the VPN, you must preset this from an administrative account. This also means that standard users will need to enter the administrator’s password to use OpenVPN. On the other hand, standard users can’t properly connect to the server unless the OpenVPN application on the client has admin rights, so the elevated privileges are necessary.

      To set the OpenVPN application to always run as an administrator, right-click on its shortcut icon and go to Properties. At the bottom of the Compatibility tab, click the button to Change settings for all users. In the new window, check Run this program as an administrator.

      Connecting

      Each time you launch the OpenVPN GUI, Windows will ask if you want to allow the program to make changes to your computer. Click Yes. Launching the OpenVPN client application only puts the applet in the system tray so that you can connect and disconnect the VPN as needed; it does not actually make the VPN connection.

      Once OpenVPN is started, initiate a connection by going into the system tray applet and right-clicking on the OpenVPN applet icon. This opens the context menu. Select client1 at the top of the menu (that’s your client1.ovpn profile) and choose Connect.

      A status window will open showing the log output while the connection is established, and a message will show once the client is connected.

      Disconnect from the VPN the same way: Go into the system tray applet, right-click the OpenVPN applet icon, select the client profile and click Disconnect.

      macOS

      Installing

      Tunnelblick is a free, open source OpenVPN client for macOS. You can download the latest disk image from the Tunnelblick Downloads page. Double-click the downloaded .dmg file and follow the prompts to install.

      Towards the end of the installation process, Tunnelblick will ask if you have any configuration files. Answer I have configuration files and let Tunnelblick finish. Open a Finder window and double-click client1.ovpn. Tunnelblick will install the client profile. Administrative privileges are required.

      Connecting

      Launch Tunnelblick by double-clicking the Tunnelblick icon in the Applications folder. Once Tunnelblick has been launched, there will be a Tunnelblick icon in the menu bar at the top right of the screen for controlling connections. Click on the icon, and then the Connect client1 menu item to initiate the VPN connection.

      Linux

      Installing

      If you are using Linux, there are a variety of tools that you can use depending on your distribution. Your desktop environment or window manager might also include connection utilities.

      The most universal way of connecting, however, is to just use the OpenVPN software.

      On Ubuntu or Debian, you can install it just as you did on the server by typing:

      • sudo apt update
      • sudo apt install openvpn

      On CentOS you can enable the EPEL repositories and then install it by typing:

      • sudo yum install epel-release
      • sudo yum install openvpn

      Configuring

      Check to see if your distribution includes an /etc/openvpn/update-resolv-conf script:

      Output

      update-resolv-conf

      Next, edit the OpenVPN client configuration file you transfered:

      If you were able to find an update-resolv-conf file, uncomment the three lines you added to adjust the DNS settings:

      client1.ovpn

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

      If you are using CentOS, change the group directive from nogroup to nobody to match the distribution’s available groups:

      client1.ovpn

      group nobody
      

      Save and close the file.

      Now, you can connect to the VPN by just pointing the openvpn command to the client configuration file:

      • sudo openvpn --config client1.ovpn

      This should connect you to your VPN.

      iOS

      Installing

      From the iTunes App Store, search for and install OpenVPN Connect, the official iOS OpenVPN client application. To transfer your iOS client configuration onto the device, connect it directly to a computer.

      The process of completing the transfer with iTunes is outlined here. Open iTunes on the computer and click on iPhone > apps. Scroll down to the bottom to the File Sharing section and click the OpenVPN app. The blank window to the right, OpenVPN Documents, is for sharing files. Drag the .ovpn file to the OpenVPN Documents window.
      iTunes showing the VPN profile ready to load on the iPhone

      Now launch the OpenVPN app on the iPhone. You will receive a notification that a new profile is ready to import. Tap the green plus sign to import it.

      The OpenVPN iOS app showing new profile ready to import
      Connecting

      OpenVPN is now ready to use with the new profile. Start the connection by sliding the Connect button to the On position. Disconnect by sliding the same button to Off.

      Note: The VPN switch under Settings cannot be used to connect to the VPN. If you try, you will receive a notice to only connect using the OpenVPN app.

      The OpenVPN iOS app connected to the VPN

      Android

      Installing

      Open the Google Play Store. Search for and install Android OpenVPN Connect, the official Android OpenVPN client application.

      You can transfer the .ovpn profile by connecting the Android device to your computer by USB and copying the file over. Alternatively, if you have an SD card reader, you can remove the device’s SD card, copy the profile onto it and then insert the card back into the Android device.

      Start the OpenVPN app and tap the FILE menu to import the profile.

      The OpenVPN Android app profile import menu selection

      Then navigate to the location of the saved profile (the screenshot uses /storage/emulated/0/openvpn) and select your .ovpn file. Tap the IMPORT button to finish importing this profile.

      The OpenVPN Android app selecting VPN profile to import

      Connecting
      Once the profile is added, you will see a screen like this:

      The OpenVPN Android app with new profile added

      To connect, tap the toggle button close to the profile you want to use. You’ll see real time stats of your connection and traffic being routed through your OpenVPN server:
      The OpenVPN Android app connected to the VPN

      To disconnect, just tap the toggle button on the top left once again. You will be prompted to confirm that you want to disconnect from your VPN.

      Step 14 — Testing Your VPN Connection (Optional)

      Note: This method for testing your VPN connection will only work if you opted to route all your traffic through the VPN in Step 7 when you edited the server.conf file for OpenVPN.

      Once everything is installed, a simple check confirms everything is working properly. Without having a VPN connection enabled, open a browser and go to DNSLeakTest.

      The site will return the IP address assigned by your internet service provider and as you appear to the rest of the world. To check your DNS settings through the same website, click on Extended Test and it will tell you which DNS servers you are using.

      Now connect the OpenVPN client to your Droplet’s VPN and refresh the browser. A completely different IP address (that of your VPN server) should now appear, and this is how you appear to the world. Again, DNSLeakTest’s Extended Test will check your DNS settings and confirm you are now using the DNS resolvers pushed by your VPN.

      Step 15 — Revoking Client Certificates

      Occasionally, you may need to revoke a client certificate to prevent further access to the OpenVPN server.

      To do so, follow the example in the prerequisite tutorial on How to Set Up and Configure a Certificate Authority on CentOS 8 under the Revoking a Certificate section.

      Once you have revoked a certificate for a client using those instructions, you’ll need to copy the generated crl.pem file to your OpenVPN server in the /etc/openvpn/server directory:

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

      Next, open the OpenVPN server configuration file:

      • sudo nano /etc/openvpn/server/server.conf

      At the bottom of the file, add the crl-verify option, which will instruct the OpenVPN server to check the certificate revocation list that we’ve created each time a connection attempt is made:

      /etc/openvpn/server/server.conf

      crl-verify crl.pem
      

      Save and close the file.

      Finally, restart OpenVPN to implement the certificate revocation:

      The client should no longer be able to successfully connect to the server using the old credential.

      To revoke additional clients, follow this process:

      1. Revoke the certificate with the ./easyrsa revoke client_name command
      2. Generate a new CRL
      3. Transfer the new crl.pem file to your OpenVPN server and copy it to the /etc/openvpn/server/ directory to overwrite the old list.
      4. Restart the OpenVPN service.

      You can use this process to revoke any certificates that you’ve previously issued for your server.

      Conclusion

      You should now have a fully operational virtual private network running on your OpenVPN Server. You can browse the web and download content without worrying about malicious actors tracking your activity.

      There are several steps you could take to customize your OpenVPN installation even further, such as configuring your client to connect to the VPN automatically or configuring client-specific rules and access policies. For these and other OpenVPN customizations, you should consult the official OpenVPN documentation.

      To configure more clients, you only need to follow steps 6 and 11-13 for each additional device. To revoke access to clients, follow step 15.



      Source link

      Comment configurer un serveur OpenVPN sur Ubuntu 18.04


      Une version précédente de ce tutoriel a été rédigée par Justin Ellingwood

      Introduction

      Vous voulez accéder à Internet en toute sécurité depuis votre smartphone ou votre ordinateur portable connecté à un réseau non sécurisé tel que le WiFi d’un hôtel ou d’un café ? Un réseau privé virtuel (VPN) vous permet de traverser des réseaux non fiables de manière privée et sécurisée comme si vous étiez sur un réseau privé. Le trafic est issu du serveur VPN et continue son voyage jusqu’à destination.

      Combinée aux connexions HTTPS, cette configuration vous permet de sécuriser vos connexions et transactions sans fil. Vous pouvez contourner les restrictions géographiques et la censure, et protéger votre emplacement et tout trafic HTTP non chiffré contre un réseau non fiable.

      OpenVPN est une solution SSL (Secure Socket Layer) VPN complète et open source qui s’adapte à un large éventail de configurations. Dans ce tutoriel, vous allez configurer un serveur OpenVPN sur un serveur Ubuntu 18.04, puis configurer l’accès à celui-ci depuis Windows, macOS, iOS et/ou Android. Ce tutoriel vise à rendre les étapes d’installation et de configuration aussi simples que possible pour chacune de ces configurations.

      Remarque : si vous prévoyez de configurer un serveur OpenVPN sur une Droplet DigitalOcean, sachez que, comme de nombreux fournisseurs d’hébergement, nous facturons les dépassements de bande passante. Veillez donc à surveiller la quantité de trafic gérée par votre serveur.

      Consultez cette page pour plus d’informations.

      Conditions préalables

      Pour suivre ce tutoriel, vous devrez avoir accès à un serveur Ubuntu 18.04 pour héberger votre service OpenVPN. Vous devrez configurer un utilisateur non root avec privilèges sudo avant de commencer ce guide. Vous pouvez suivre notre guide de configuration initiale de serveur Ubuntu 18.04 pour configurer un utilisateur avec les permissions appropriées. Le tutoriel joint permettra également de mettre en place un pare-feu, supposé rester en place tout au long de ce guide.

      En outre, vous aurez besoin d’une machine distincte qui servira d’autorité de certification (AC). Bien qu’il soit techniquement possible d’utiliser votre serveur OpenVPN ou votre machine locale comme AC, ce n’est pas recommandé car cela expose votre VPN à certaines failles de sécurité. Selon la documentation officielle d’OpenVPN, vous devez placer votre AC sur une machine autonome qui est dédiée à l’importation et à la signature des demandes de certificats. Ce guide suppose donc que votre AC se trouve sur un serveur Ubuntu 18.04 distinct qui possède également un utilisateur non root avec privilèges sudo et un pare-feu de base.

      Veuillez noter que si vous désactivez l’authentification par mot de passe lors de la configuration des serveurs, vous risquez de rencontrer des difficultés lors du transfert de fichiers entre ces serveurs plus loin dans ce guide. Pour résoudre ce problème, vous pourrez réactiver l’authentification par mot de passe sur chaque serveur. Sinon, vous pourrez générer une paire de clés SSH pour chaque serveur, puis ajouter la clé SSH publique du serveur OpenVPN au fichier authorized_keys de la machine AC et vice versa. Consultez Comment configurer des clés SSH sur Ubuntu 18.04 pour obtenir des instructions sur la manière d’exécuter l’une ou l’autre de ces solutions.

      Lorsque ces conditions préalables sont remplies, vous pouvez passer à l’étape 1 de ce tutoriel.

      Étape 1 – Installation d’OpenVPN et d’EasyRSA

      Pour commencer, mettez à jour l’index des packages de votre** serveur VPN** et installez OpenVPN. OpenVPN est disponible dans les référentiels par défaut d’Ubuntu, vous pouvez donc utiliser apt pour l’installation :

      • sudo apt update
      • sudo apt install openvpn

      OpenVPN est un TLS/SSL VPN. Cela signifie qu’il utilise des certificats afin de chiffrer le trafic entre le serveur et les clients. Pour émettre des certificats de confiance, vous devez mettre en place votre propre autorité de certification (AC). Pour ce faire, nous téléchargerons la dernière version d’EasyRSA, que nous utiliserons pour construire l’infrastructure à clés publiques (PKI) de notre AC, à partir du référentiel officiel GitHub du projet.

      Comme mentionné dans les conditions préalables, nous construirons l’AC sur un serveur distinct. La raison de cette approche est la suivante : si un attaquant parvenait à infiltrer votre serveur, il pourrait accéder à votre clé privée de l’AC et l’utiliser pour émettre de nouveaux certificats, ce qui lui donnerait accès à votre VPN. Par conséquent, la gestion de l’AC à partir d’une machine distincte permet d’empêcher les utilisateurs non autorisés d’accéder à votre VPN. Notez également qu’il est recommandé, par mesure de précaution supplémentaire, de laisser le serveur de l’AC éteint lorsqu’il n’est pas utilisé pour signer des clés.

      Pour commencer à construire l’infrastructure de l’AC et de la PKI, utilisez wget pour télécharger la dernière version d’EasyRSA à la fois sur votre machine de l’AC et sur votre serveur OpenVPN. Pour obtenir la dernière version, consultez la page Releases du projet GitHub officiel EasyRSA, copiez le lien de téléchargement du fichier se terminant par .tgz, puis collez-le dans la commande suivante :

      • wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz

      Extrayez ensuite le tarball :

      • cd ~
      • tar xvf EasyRSA-3.0.4.tgz

      Vous avez installé tous les logiciels requis sur votre serveur et votre machine AC. Continuez ci-dessous pour configurer les variables utilisées par EasyRSA et mettre en place un répertoire AC, à partir duquel vous générerez les clés et les certificats requis par votre serveur et vos clients pour accéder au VPN.

      Étape 2 – Configuration des variables EasyRSA et construction de l’AC

      EasyRSA est installé avec un fichier de configuration que vous pouvez modifier pour définir un certain nombre de variables pour votre AC.

      Sur votre machine AC, naviguez jusqu’au répertoire EasyRSA :

      Dans ce répertoire, vous trouverez un fichier nommé vars.example. Faites une copie de ce fichier, et nommez la copie vars sans extension de fichier :

      Ouvrez ce nouveau fichier en utilisant votre éditeur de texte préféré :

      Trouvez les paramètres qui définissent les champs par défaut pour les nouveaux certificats. Ils ressembleront à cela :

      ~/EasyRSA-3.0.4/vars

      . . .
      
      #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"
      
      . . .
      

      Décommentez ces lignes et mettez à jour les valeurs mises en évidence selon vos préférences, mais ne les laissez pas vides :

      ~/EasyRSA-3.0.4/vars

      . . .
      
      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        "DigitalOcean"
      set_var EASYRSA_REQ_EMAIL      "[email protected]"
      set_var EASYRSA_REQ_OU         "Community"
      
      . . .
      

      Lorsque vous avez terminé, enregistrez et fermez le fichier.

      Dans le répertoire EasyRSA se trouve un script appelé easyrsa qui est utilisé pour effectuer diverses tâches liées à la construction et à la gestion de l'AC. Exécutez ce script avec l'option init-pki pour lancer l'infrastructure à clé publique sur le serveur de l'AC :

      Output

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

      Ensuite, exécutez à nouveau le script easyrsa, en le faisant suivre de l'option build-ca. Cela permettra de construire l'AC et de créer deux fichiers importants - ca.crt et ca.key - qui constituent les côtés public et privé d'un certificat SSL.

      • ca.crt est le fichier de certificat public de l'AC qui, dans le contexte d'OpenVPN, est utilisé par le serveur et le client pour s'informer mutuellement qu'ils font partie du même réseau de confiance et qu'il ne s'agit pas d'une personne effectuant une attaque de l'intercepteur. Pour cette raison, votre serveur et tous vos clients auront besoin d'une copie du fichier ca.crt.
      • ca.key est la clé privée que la machine AC utilise pour signer les clés et les certificats des serveurs et des clients. Si un attaquant accède à votre AC et ensuite à votre fichier ca.key, il pourra signer des demandes de certificat et accéder à votre VPN, ce qui nuira à sa sécurité. C'est pourquoi votre fichier ca.key ne doit se trouver que sur votre machine AC et votre machine AC doit idéalement être maintenue hors ligne lorsqu'elle ne signe pas de demandes de certificat, par mesure de sécurité supplémentaire.

      Si vous ne voulez pas qu'un mot de passe vous soit demandé à chaque fois que vous interagissez avec votre AC, vous pouvez exécuter la commande build-ca avec l'option nopass, comme ceci :

      • ./easyrsa build-ca nopass

      Dans la sortie, il vous sera demandé de confirmer le nom commun ou common name de votre AC :

      Output

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

      Le nom commun est le nom utilisé pour désigner cette machine dans le contexte de l'autorité de certification. Vous pouvez saisir n'importe quelle chaîne de caractères pour le nom commun de l'AC mais, par souci de simplicité, appuyez sur ENTER (ENTRÉE) pour accepter le nom par défaut.

      Votre AC est ainsi en place et prête à signer les demandes de certificat.

      Étape 3 - Création du certificat, de la clé et des fichiers de chiffrement du serveur

      Maintenant que vous avez une AC prête à fonctionner, vous pouvez générer une clé privée et une demande de certificat à partir de votre serveur, puis transférer la demande à votre AC pour qu'elle la signe, créant ainsi le certificat requis. Vous êtes également libre de créer des fichiers supplémentaires utilisés pendant le processus de chiffrement.

      Commencez par rejoindre le répertoire EasyRSA sur votre serveur OpenVPN :

      De là, exécutez le script easyrsa avec l'option init-pki. Bien que vous ayez déjà exécuté cette commande sur la machine AC, il est nécessaire de l'exécuter ici car votre serveur et votre AC auront des répertoires PKI séparés :

      Puis exécutez à nouveau le script easyrsa, en activant cette fois l'option gen-req suivie d'un nom commun pour la machine. Encore une fois, vous êtes libre de choisir le nom que vous souhaitez, mais un nom descriptif peut être utile. Tout au long de ce tutoriel, le nom commun du serveur OpenVPN sera simplement « server ». Veillez à inclure également l'option nopass. Dans le cas contraire, le fichier de demande sera protégé par un mot de passe, ce qui pourrait entraîner des problèmes de permissions par la suite :

      Remarque : si vous choisissez un nom autre que « server » ici, vous devrez adapter certaines des instructions ci-dessous. Par exemple, en copiant les fichiers générés dans le répertoire /etc/openvpn, vous devrez substituer les noms corrects. Vous devrez également modifier le fichier /etc/openvpn/server.conf ultérieurement pour pointer vers les fichiers .crt et .key corrects.

      • ./easyrsa gen-req server nopass

      Cela permettra de créer une clé privée pour le serveur et un fichier de demande de certificat appelé server.req. Copiez la clé du serveur dans le répertoire /etc/openvpn/ :

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

      En utilisant une méthode sécurisée (comme SCP, dans notre exemple ci-dessous), transférez le fichier server.req sur votre machine AC :

      • scp ~/EasyRSA-3.0.4/pki/reqs/server.req sammy@your_CA_ip:/tmp

      Puis, sur votre machine AC, naviguez jusqu'au répertoire EasyRSA :

      En utilisant à nouveau le script easyrsa, importez le fichier server.req, en suivant le chemin du fichier avec son nom commun :

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

      Signez ensuite la demande en exécutant le script easyrsa avec l'option sign-req, suivi du type de demande et du nom commun. Le type de requête peut être soit client soit server, donc pour la requête de certificat du serveur OpenVPN, assurez-vous d'utiliser le type de requête server :

      • ./easyrsa sign-req server server

      Dans la sortie, il vous sera demandé de vérifier que la demande provient d'une source fiable. Tapez yes puis appuyez sur ENTER pour confirmer :

      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 vous avez chiffré votre clé AC, on vous demandera votre mot de passe à ce stade.

      Ensuite, transférez le certificat signé sur votre serveur VPN en utilisant une méthode sécurisée :

      • scp pki/issued/server.crt sammy@your_server_ip:/tmp

      Avant de vous déconnecter de votre machine AC, transférez également le fichier ca.crt sur votre serveur :

      • scp pki/ca.crt sammy@your_server_ip:/tmp

      Ensuite, reconnectez-vous à votre serveur OpenVPN et copiez les fichiers server.crt et ca.crt dans votre répertoire /etc/openvpn/ :

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

      Naviguez jusqu'à votre répertoire EasyRSA :

      De là, créez une clé Diffie-Hellman forte à utiliser lors de l'échange de clés en tapant :

      Cela peut prendre quelques minutes. Une fois que c'est fait, générez une signature HMAC pour renforcer les capacités de vérification de l'intégrité TLS du serveur :

      • openvpn --genkey --secret ta.key

      Lorsque la commande est terminée, copiez les deux nouveaux fichiers dans votre répertoire /etc/openvpn/ :

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

      Tous les fichiers de certificats et de clés nécessaires à votre serveur ont été générés. Vous êtes prêt à créer les certificats et clés correspondants que votre machine cliente utilisera pour accéder à votre serveur OpenVPN.

      Étape 4 - Création d'une paire certificat/clé client

      Bien que vous puissiez générer une clé privée et une demande de certificat sur votre machine cliente, puis l'envoyer à l'autorité de certification pour qu'elle la signe, ce guide décrit un processus de génération de la demande de certificat sur le serveur. L'avantage est que nous pouvons créer un script qui générera automatiquement des fichiers de configuration client contenant toutes les clés et tous les certificats requis. Cela vous évite d'avoir à transférer les clés, les certificats et les fichiers de configuration aux clients et rationalise le processus pour rejoindre le VPN.

      Nous générerons une seule paire certificat/clé client dans ce guide. Si vous avez plus d'un client, vous pouvez répéter ce processus pour chacun d'entre eux. Veuillez noter, cependant, que vous devrez transmettre une valeur de nom unique au script pour chaque client. Tout au long de ce tutoriel, la première paire certificat/clé est appelée client1.

      Commencez par créer une structure de répertoire dans votre répertoire d'origine pour stocker les fichiers du certificat et de la clé client :

      • mkdir -p ~/client-configs/keys

      Étant donné que vous stockerez les paires certificats/clés et les fichiers de configuration de vos clients dans ce répertoire, vous devriez verrouiller ses autorisations dès maintenant par mesure de sécurité :

      • chmod -R 700 ~/client-configs

      Ensuite, retournez dans le répertoire EasyRSA et exécutez le script easyrsa avec les options gen-req et nopass, ainsi que le nom commun du client :

      • cd ~/EasyRSA-3.0.4/
      • ./easyrsa gen-req client1 nopass

      Appuyez surENTERpour confirmer le nom commun. Ensuite, copiez le fichier client1.key dans le répertoire /client-configs/keys/ que vous avez créé précédemment :

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

      Ensuite, transférez le fichier client1.req sur votre machine AC en utilisant une méthode sécurisée :

      • scp pki/reqs/client1.req sammy@your_CA_ip:/tmp

      Connectez-vous à votre machine AC, naviguez jusqu'au répertoire EasyRSA et importez la demande de certificat :

      • ssh sammy@your_CA_ip
      • cd EasyRSA-3.0.4/
      • ./easyrsa import-req /tmp/client1.req client1

      Signez ensuite la demande comme vous l'avez fait pour le serveur lors de l'étape précédente. Cette fois, cependant, veillez à préciser le type de demande client :

      • ./easyrsa sign-req client client1

      Lorsque vous êtes invité à le faire, entrez yes pour confirmer que vous souhaitez signer la demande de certificat et qu'elle provient d'une source fiable :

      Output

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

      Encore une fois, si vous avez chiffré votre clé AC, vous serez invité à entrer votre mot de passe ici.

      Cela créera un fichier de certificat client nommé client1.crt. Transférez ce fichier vers le serveur :

      • scp pki/issued/client1.crt sammy@your_server_ip:/tmp

      Connectez-vous via SSH à votre serveur OpenVPN et copiez le certificat client dans le répertoire /client-configs/keys/ :

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

      Ensuite, copiez également les fichiers ca.crt et ca.key dans le répertoire /client-configs/keys/ :

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

      Les certificats et les clés de votre serveur et de votre client ont tous été générés et sont stockés dans les répertoires appropriés de votre serveur. Il reste encore quelques actions à effectuer avec ces fichiers, mais elles interviendront dans une étape ultérieure. Pour l'instant, vous pouvez passer à la configuration d'OpenVPN sur votre serveur.

      Étape 5 - Configuration du service OpenVPN

      Maintenant que les certificats et les clés de votre client et de votre serveur ont été générés, vous pouvez commencer à configurer le service OpenVPN pour utiliser ces informations d'identification.

      Commencez par copier un exemple de fichier de configuration OpenVPN dans le répertoire de configuration, puis extrayez-le afin de l'utiliser comme base pour votre installation :

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

      Ouvrez le fichier de configuration du serveur dans votre éditeur de texte préféré :

      • sudo nano /etc/openvpn/server.conf

      Trouvez la section HMAC en cherchant la directive tls-auth. Cette ligne devrait déjà être décommentée, mais si elle ne l'est pas, supprimez le « ; » pour la décommenter :

      /etc/openvpn/server.conf

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

      Ensuite, trouvez la section sur les chiffres cryptographiques en recherchant les lignes cipher commentées. Le chiffrement AES-256-CBC offre un bon niveau de cryptage et est bien pris en charge. Encore une fois, cette ligne devrait déjà être décommentée, mais si elle ne l'est pas, il suffit d'enlever le « » qui la précède :

      /etc/openvpn/server.conf

      cipher AES-256-CBC
      

      En dessous, ajoutez une directive auth pour sélectionner l'algorithme de synthèse des messages HMAC. À cette fin, SHA256 est un bon choix :

      /etc/openvpn/server.conf

      auth SHA256
      

      Ensuite, trouvez la ligne contenant une directive dh qui définit les paramètres de Diffie-Hellman. En raison de certaines modifications récentes apportées à EasyRSA, le nom de fichier de la clé Diffie-Hellman peut être différent de celui qui figure dans le fichier d'exemple de configuration du serveur. Si nécessaire, modifiez le nom de fichier indiqué ici en supprimant le 2048 afin qu'il s'aligne sur la clé que vous avez générée à l'étape précédente :

      /etc/openvpn/server.conf

      dh dh.pem
      

      Enfin, trouvez les paramètres user et group et supprimez le « ; » au début de chacun pour décommenter ces lignes :

      /etc/openvpn/server.conf

      user nobody
      group nogroup
      

      Les modifications que vous avez apportées au fichier server.conf jusqu'à présent sont nécessaires pour qu'OpenVPN puisse fonctionner. Les changements décrits ci-dessous sont facultatifs, bien qu'ils soient également nécessaires pour de nombreux cas d'utilisation courants.

      (Facultatif) Modifiez le DNS pour rediriger tout le trafic par le VPN

      Les paramètres ci-dessus créeront la connexion VPN entre les deux machines, mais ne forceront aucune connexion à utiliser le tunnel. Si vous souhaitez utiliser le VPN pour acheminer l'ensemble de votre trafic, vous voudrez probablement diriger les paramètres DNS vers les ordinateurs clients.

      Il y a quelques directives dans le fichier server.conf que vous devez modifier pour activer cette fonctionnalité. Trouvez la section redirect-gateway et retirez le point-virgule « ; » du début de la ligne redirect-gateway pour la décommenter :

      /etc/openvpn/server.conf

      push "redirect-gateway def1 bypass-dhcp"
      

      Juste en dessous, vous trouverez la section dhcp-option. Encore une fois, enlevez le « ; » devant les deux lignes pour les décommenter :

      /etc/openvpn/server.conf

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

      Cela aidera les clients à reconfigurer leurs paramètres DNS pour utiliser le tunnel VPN comme passerelle par défaut.

      (Facultatif) Ajustez le port et le protocole

      Par défaut, le serveur OpenVPN utilise le port 1194 et le protocole UDP pour accepter les connexions des clients. Si vous devez utiliser un autre port en raison des environnements réseau restrictifs de vos clients, vous pouvez changer l'option port. Si vous n'hébergez pas de contenu web sur votre serveur OpenVPN, le port 443 est un choix populaire car il est généralement autorisé par les règles de pare-feu.

      /etc/openvpn/server.conf

      # Optional!
      port 443
      

      Souvent, le protocole est également limité à ce port. Si c'est le cas, changez la valeur proto de UDP à TCP :

      /etc/openvpn/server.conf

      # Optional!
      proto tcp
      

      Si vous modifiez le protocole en TCP, vous devrez changer la valeur de la directive explicit-exit-notify de 1 à 0, car cette directive n'est utilisée que par UDP. Si vous ne la modifiez alors que vous utilisez le protocole TCP, des erreurs se produiront au démarrage du service OpenVPN :

      /etc/openvpn/server.conf

      # Optional!
      explicit-exit-notify 0
      

      Si vous n'avez pas besoin d'utiliser un port et un protocole différents, il est préférable de conserver les deux paramètres par défaut.

      (Facultatif) Pointez vers des informations d'identification autres que celles par défaut

      Si vous avez choisi un nom différent lors de la commande ./build-key-server précédente, modifiez les lignes cert et key que vous voyez pour pointer vers les fichiers .crt et .key appropriés. Si vous avez utilisé le nom par défaut « server », celui-ci est déjà correctement défini :

      /etc/openvpn/server.conf

      cert server.crt
      key server.key
      

      Lorsque vous avez terminé, enregistrez et fermez le fichier.

      Après avoir passé en revue la configuration OpenVPN de votre serveur et y avoir apporté les modifications nécessaires pour votre utilisation spécifique, vous pouvez commencer à apporter quelques changements à la mise en réseau de votre serveur.

      Étape 6 - Ajustement de la configuration réseau du serveur

      Certains aspects de la configuration réseau du serveur doivent être modifiés afin qu'OpenVPN puisse acheminer correctement le trafic à travers le VPN. Le premier d'entre eux est le transfert IP, une méthode permettant de déterminer où le trafic IP doit être acheminé. Ceci est essentiel pour la fonctionnalité VPN que votre serveur fournira.

      Ajustez le paramètre de transfert IP par défaut de votre serveur en modifiant le fichier /etc/sysctl.conf :

      • sudo nano /etc/sysctl.conf

      À l'intérieur, cherchez la ligne commentée qui définit net.ipv4.ip_forward. Supprimez le caractère « # » du début de la ligne pour décommenter ce paramètre :

      /etc/sysctl.conf

      net.ipv4.ip_forward=1
      

      Enregistrez et fermez le fichier lorsque vous avez terminé.

      Pour lire le fichier et ajuster les valeurs pour la session en cours, tapez :

      Output

      net.ipv4.ip_forward = 1

      Si vous avez suivi le guide de configuration initiale de serveur Ubuntu 18.04 indiqué dans les conditions préalables, vous devriez avoir un pare-feu UFW en place. Que vous utilisiez ou non le pare-feu pour bloquer le trafic indésirable (ce que vous devriez presque toujours faire), pour ce guide, vous avez besoin d'un pare-feu pour manipuler une partie du trafic entrant dans le serveur. Certaines des règles du pare-feu doivent être modifiées pour permettre le masquage, un concept iptables qui fournit à la volée une traduction dynamique des adresses réseau (NAT) pour acheminer correctement les connexions des clients.

      Avant d'ouvrir le fichier de configuration du pare-feu pour ajouter les règles de masquage, vous devez d'abord trouver l'interface de réseau public de votre machine. Pour ce faire, tapez :

      Votre interface publique est la chaîne de caractères qui se trouve dans la sortie de cette commande et qui suit le mot « dev ». Par exemple, ce résultat montre l'interface nommée wlp11s0, qui est mise en évidence ci-dessous :

      Output

      default via 203.0.113.1 dev wlp11s0 proto static

      Lorsque l'interface est associée à votre itinéraire par défaut, ouvrez le fichier /etc/ufw/before.rules pour ajouter la configuration appropriée :

      • sudo nano /etc/ufw/before.rules

      Les règles UFW sont généralement ajoutées à l'aide de la commande ufw. Les règles énumérées dans le fichier before.rules sont toutefois lues et mises en place avant le chargement des règles UFW conventionnelles. En haut du fichier, ajoutez les lignes mises en évidence ci-dessous. Cela permettra de définir la politique par défaut pour la chaîne POSTROUTING dans la table nat et de masquer tout trafic provenant du VPN. N'oubliez pas de remplacer wlp11s0 dans la ligne -A POSTROUTING ci-dessous par l'interface que vous avez trouvée dans la commande ci-dessus :

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

      Enregistrez et fermez le fichier lorsque vous avez terminé.

      Ensuite, vous devez indiquer à UFW d'autoriser également les paquets transmis par défaut. Pour ce faire, ouvrez le fichier /etc/default/ufw :

      • sudo nano /etc/default/ufw

      À l'intérieur, trouvez la directive DEFAULT_FORWARD_POLICY et changez la valeur de DROP à ACCEPT :

      /etc/default/ufw

      DEFAULT_FORWARD_POLICY="ACCEPT"
      

      Enregistrez et fermez le fichier lorsque vous avez terminé.

      Ensuite, ajustez le pare-feu lui-même pour permettre le trafic vers OpenVPN. Si vous n'avez pas modifié le port et le protocole dans le fichier /etc/openvpn/server.conf, vous devrez ouvrir le trafic UDP au port 1194. Si vous avez modifié le port et/ou le protocole, utilisez ici les valeurs que vous avez sélectionnées.

      Au cas où vous auriez oublié d'ajouter le port SSH en suivant le tutoriel préalable, ajoutez-le également ici :

      • sudo ufw allow 1194/udp
      • sudo ufw allow OpenSSH

      Après avoir ajouté ces règles, désactivez et réactivez UFW pour le redémarrer et charger les modifications de tous les fichiers :

      • sudo ufw disable
      • sudo ufw enable

      Votre serveur est maintenant configuré pour gérer correctement le trafic OpenVPN.

      Étape 7 - Démarrage et activation du service OpenVPN

      Vous êtes enfin prêt à lancer le service OpenVPN sur votre serveur. Faites-le en utilisant l'utilitaire systemd systemctl.

      Démarrez le serveur OpenVPN en spécifiant le nom de votre fichier de configuration comme variable d'instance après le nom de fichier de l'unité systemd. Le fichier de configuration de votre serveur s'appelle /etc/openvpn/server.conf, ajoutez donc @server à la fin de votre fichier d'unité lorsque vous l'appelez :

      • sudo systemctl start openvpn@server

      Vérifiez que le service a bien démarré en tapant :

      • sudo systemctl status openvpn@server

      Si tout s'est bien passé, votre sortie ressemblera à ceci :

      Output

      [email protected] - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-05-03 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

      Vous pouvez également vérifier que l'interface tun0 d'OpenVPN est disponible en tapant :

      Cela produira une interface configurée :

      Output

      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

      Après avoir démarré le service, activez-le afin qu'il se lance automatiquement lors du démarrage du système :

      • sudo systemctl enable openvpn@server

      Votre service OpenVPN est maintenant opérationnel. Cependant, avant de pouvoir l'utiliser, vous devez créer un fichier de configuration pour la machine cliente. Ce tutoriel a déjà abordé la manière de créer des paires certificats/clés pour les clients. Dans la prochaine étape, nous montrerons comment créer une infrastructure qui générera facilement des fichiers de configuration pour les clients.

      Étape 8 - Création de l'infrastructure de configuration du client

      La création de fichiers de configuration pour les clients OpenVPN peut être quelque peu compliquée, car chaque client doit avoir sa propre configuration et chacun doit s'aligner sur les paramètres décrits dans le fichier de configuration du serveur. Plutôt que d'écrire un seul fichier de configuration qui ne peut être utilisé que sur un seul client, cette étape décrit un processus de construction d'une infrastructure de configuration client que vous pouvez utiliser pour générer des fichiers de configuration à la volée. Vous créerez d'abord un fichier de configuration « de base », puis un script qui vous permettra de générer des fichiers de configuration client, des certificats et des clés uniques selon les besoins.

      Commencez par créer un nouveau répertoire dans lequel vous stockerez les fichiers de configuration du client dans le répertoire client-configs que vous avez créé précédemment :

      • mkdir -p ~/client-configs/files

      Ensuite, copiez un exemple de fichier de configuration client dans le répertoire client-configs pour l'utiliser comme configuration de base :

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

      Ouvrez ce nouveau fichier dans votre éditeur de texte :

      • nano ~/client-configs/base.conf

      Dans celui-ci, localisez la directive remote. Le client est alors dirigé vers l'adresse de votre serveur OpenVPN - l'adresse IP publique de votre serveur OpenVPN. Si vous avez décidé de modifier le port sur lequel le serveur OpenVPN écoute, vous devrez également changer 1194 pour le port que vous avez sélectionné :

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

      Assurez-vous que le protocole correspond à la valeur que vous utilisez dans la configuration du serveur :

      ~/client-configs/base.conf

      proto udp
      

      Ensuite, décommentez les directives user et group en supprimant le « ; » au début de chaque ligne :

      ~/client-configs/base.conf

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

      Trouvez les directives qui fixent ca, cert et key. Commentez ces directives, car vous ajouterez bientôt les certificats et les clés dans le dossier lui-même :

      ~/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
      

      De même, commentez la directive tls-auth, car vous ajouterez ca.key directement dans le fichier de configuration du client :

      ~/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
      

      Utilisez les mêmes paramètres cypher et auth que ceux que vous avez définis dans le fichier /etc/openvpn/server.conf :

      ~/client-configs/base.conf

      cipher AES-256-CBC
      auth SHA256
      

      Ensuite, ajoutez la directive key-direction quelque part dans le fichier. Vous devez régler ce paramètre sur « 1 » pour que le VPN fonctionne correctement sur la machine cliente :

      ~/client-configs/base.conf

      key-direction 1
      

      Enfin, ajoutez quelques lignes commentées. Bien que vous puissiez inclure ces directives dans chaque fichier de configuration client, vous ne devez les activer que pour les clients Linux qui sont livrés avec un fichier /etc/openvpn/update-resolv-conf. Ce script utilise l'utilitaire resolvconf pour mettre à jour les informations DNS pour les clients Linux.

      ~/client-configs/base.conf

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

      Si votre client fonctionne sous Linux et possède un fichier /etc/openvpn/update-resolv-conf, décommentez ces lignes du fichier de configuration du client après qu'il a été généré.

      Enregistrez et fermez le fichier lorsque vous avez terminé.

      Ensuite, créez un simple script qui compilera votre configuration de base avec les fichiers de certificat, de clé et de chiffrement appropriés, puis placez la configuration générée dans le répertoire ~/client-configs/files. Ouvrez un nouveau fichier appelé make_config.sh dans le répertoire ~/client-configs :

      • nano ~/client-configs/make_config.sh

      Dans ce fichier, ajoutez le contenu suivant :

      ~/client-configs/make_config.sh

      #!/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
      

      Enregistrez et fermez le fichier lorsque vous avez terminé.

      Avant de poursuivre, veillez à marquer ce fichier comme exécutable en tapant :

      • chmod 700 ~/client-configs/make_config.sh

      Ce script fera une copie du fichier base.conf que vous avez créé, rassemblera tous les fichiers de certificats et de clés que vous avez créés pour votre client, extraira leur contenu, les ajoutera à la copie du fichier de configuration de la base et exportera tout ce contenu dans un nouveau fichier de configuration du client. Cela signifie que, plutôt que de devoir gérer séparément les fichiers de configuration, de certificat et de clé du client, toutes les informations requises sont stockées en un seul endroit. L'avantage est que si vous avez besoin d'ajouter un client à l'avenir, vous pouvez simplement exécuter ce script pour créer rapidement le fichier de configuration et vous assurer que toutes les informations importantes sont stockées dans un seul endroit facile d'accès.

      Veuillez noter qu'à chaque fois que vous ajouterez un nouveau client, vous devrez générer de nouvelles clés et de nouveaux certificats pour lui avant de pouvoir exécuter ce script et générer son fichier de configuration. Vous vous entraînerez à utiliser ce script dans la prochaine étape.

      Étape 9 - Création de configurations du client

      Si vous avez suivi le guide, vous avez créé un certificat de client et une clé nommés respectivement client1.crt et client1.key à l'étape 4. Vous pouvez générer un fichier de configuration pour ces certificats en vous déplaçant dans votre répertoire ~/client-configs et en exécutant le script que vous avez créé à la fin de l'étape précédente :

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

      Cela créera un fichier nommé client1.ovpn dans votre répertoire ~/client-configs/files :

      • ls ~/client-configs/files

      Output

      client1.ovpn

      Vous devez transférer ce fichier sur l'appareil que vous prévoyez d'utiliser en tant que client. Il peut s'agir, par exemple, de votre ordinateur local ou d'un appareil mobile.

      Bien que les applications exactes utilisées pour effectuer ce transfert dépendent du système d'exploitation de votre appareil et de vos préférences personnelles, utiliser le SFTP (protocole de transfert de fichiers SSH) ou le SCP (Secure Copy) en back-end constitue une méthode fiable et sûre. Cela permettra de transporter les fichiers d'authentification VPN de votre client sur une connexion chiffrée.

      Voici un exemple de commande SFTP utilisant l'exemple client1.ovpn que vous pouvez exécuter depuis votre ordinateur local (macOS ou Linux). Il place le fichier .ovpn dans votre répertoire de base :

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

      Voici plusieurs outils et tutoriels pour transférer en toute sécurité des fichiers du serveur vers un ordinateur local :

      Étape 10 - Installation de la configuration client

      Cette section explique comment installer un profil VPN client sur Windows, macOS, Linux, iOS et Android. Aucune de ces instructions du client ne dépend d'une autre, alors n'hésitez pas à passer à celle qui s'applique à votre appareil.

      La connexion OpenVPN portera le même nom que celui du fichier .ovpn. Pour ce tutoriel, cela signifie que la connexion est nommée client1.ovpn, s'alignant sur le premier fichier client que vous avez généré.

      Windows

      Installation

      Téléchargez l'application client OpenVPN pour Windows depuis la page de téléchargement d'OpenVPN. Choisissez la version d'installation appropriée pour votre version de Windows.

      Remarque


      OpenVPN a besoin de privilèges administratifs pour s'installer.

      Après avoir installé OpenVPN, copiez le fichier .ovpn dans :

      C:Program FilesOpenVPNconfig
      

      Lorsque vous lancez OpenVPN, il voit automatiquement le profil et le rend disponible.

      Vous devez exécuter OpenVPN en tant qu'administrateur à chaque fois qu'il est utilisé, même par des comptes administratifs. Pour effectuer cette action sans avoir à cliquer sur le bouton droit de la souris et à sélectionner Exécuter en tant qu'administrateur chaque fois que vous utilisez le VPN, vous devez le pré-régler à partir d'un compte administratif. Cela signifie également que les utilisateurs standard devront entrer le mot de passe de l'administrateur pour utiliser OpenVPN. Les utilisateurs standard ne peuvent pas se connecter correctement au serveur à moins que l'application OpenVPN sur le client n'ait des droits d'administrateur, les privilèges élevés sont donc nécessaires.

      Pour que l'application OpenVPN s'exécute toujours en tant qu'administrateur, cliquez avec le bouton droit de la souris sur son icône de raccourci et allez dans Propriétés. En bas de l'onglet Compatibilité, cliquez sur le bouton Modifier les paramètres pour tous les utilisateurs. Dans la nouvelle fenêtre, cochez Exécuter ce programme en tant qu'administrateur.

      Connexion

      À chaque fois que vous lancez l'interface graphique d'OpenVPN, Windows vous demande si vous souhaitez autoriser le programme à apporter des modifications à votre ordinateur. Cliquez sur Oui. Le lancement de l'application client OpenVPN ne fait que placer l'applet dans la barre d'état système afin que vous puissiez connecter et déconnecter le VPN selon vos besoins : il n'établit pas réellement la connexion VPN.

      Une fois qu'OpenVPN est lancé, initiez une connexion en vous rendant dans l'applet de la barre d'état système et en cliquant avec le bouton droit de la souris sur l'icône de l'applet OpenVPN. Cela ouvre le menu contextuel. Sélectionnez client1 en haut du menu (c'est votre profil client1.ovpn) et choisissez Connecter.

      Une fenêtre d'état s'ouvrira, montrant la sortie du journal pendant que la connexion est établie, et un message s'affichera une fois que le client sera connecté.

      Déconnectez-vous du VPN de la même manière : allez dans l'applet de la barre d'état système, cliquez avec le bouton droit de la souris sur l'icône de l'applet OpenVPN, sélectionnez le profil du client et cliquez sur Déconnecter.

      macOS

      Installation

      Tunnelblick est un client OpenVPN gratuit et open source pour macOS. Vous pouvez télécharger la dernière image disque à partir de la page de téléchargement de Tunnelblick. Double-cliquez sur le fichier .dmg téléchargé et suivez les instructions pour l'installer.

      Vers la fin du processus d'installation, Tunnelblick vous demandera si vous avez des fichiers de configuration. Répondez J'ai des fichiers de configuration et laissez Tunnelblick finir. Ouvrez une fenêtre du Finder et double-cliquez sur client1.ovpn. Tunnelblick installera le profil du client. Des privilèges administratifs sont requis.

      Connexion

      Lancez Tunnelblick en double-cliquant sur l'icône de Tunnelblick dans le dossier Applications. Lorsque Tunnelblick est lancé, une icône Tunnelblick apparaît dans la barre de menu en haut à droite de l'écran pour contrôler les connexions. Cliquez sur l'icône, puis sur l'élément de menu Connecter client1 pour lancer la connexion VPN.

      Linux

      Installation

      Si vous utilisez Linux, vous pouvez utiliser plusieurs outils en fonction de votre distribution. Votre environnement de bureau ou votre gestionnaire de fenêtres peut également inclure des utilitaires de connexion.

      La façon la plus universelle de se connecter, cependant, est d'utiliser simplement le logiciel OpenVPN.

      Sur Ubuntu ou Debian, vous pouvez l'installer comme vous l'avez fait sur le serveur en tapant :

      • sudo apt update
      • sudo apt install openvpn

      Sur CentOS, vous pouvez activer les référentiels EPEL et les installer ensuite en tapant :

      • sudo yum install epel-release
      • sudo yum install openvpn

      Configuration

      Vérifiez que votre distribution comprend un script /etc/openvpn/update-resolv-conf :

      Output

      update-resolv-conf

      Ensuite, modifiez le fichier de configuration client OpenVPN que vous avez transféré :

      Si vous avez trouvé un fichier update-resolv-conf, décommentez les trois lignes que vous avez ajoutées pour ajuster les paramètres DNS :

      client1.ovpn

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

      Si vous utilisez CentOS, changez la directive group de nogroup à nobody pour qu'elle corresponde aux groupes disponibles de la distribution :

      client1.ovpn

      group nobody
      

      Enregistrez et fermez le fichier.

      Maintenant, vous pouvez vous connecter au VPN en pointant simplement la commande openvpn sur le fichier de configuration client :

      • sudo openvpn --config client1.ovpn

      Cela devrait vous connecter à votre VPN.

      iOS

      Installation

      Depuis l'App Store d'iTunes, recherchez et installez OpenVPN Connect, l'application client OpenVPN officielle pour iOS. Pour transférer la configuration de votre client iOS sur l'appareil, connectez-le directement à un ordinateur.

      La procédure à suivre pour effectuer le transfert avec iTunes est décrite ici. Ouvrez iTunes sur l'ordinateur et cliquez sur iPhone > apps. Faites défiler vers le bas jusqu'à la section Partage de fichiers et cliquez sur l'application OpenVPN. La fenêtre vide à droite, Documents OpenVPN, est destinée au partage de fichiers. Faites glisser le fichier .ovpn vers la fenêtre Documents OpenVPN.

      iTunes showing the VPN profile ready to load on the iPhone

      Lancez maintenant l'application OpenVPN sur l'iPhone. Vous recevrez une notification vous informant qu'un nouveau profil est prêt à être importé. Appuyez sur le signe + vert pour l'importer.

      The OpenVPN iOS app showing new profile ready to import

      Connexion

      OpenVPN est maintenant prêt à être utilisé avec le nouveau profil. Démarrez la connexion en faisant glisser le bouton Connect sur la position On. Déconnectez-vous en faisant glisser le même bouton sur Off.

      Remarque 


      Le bouton VPN sous Settings ne peut pas être utilisé pour se connecter au VPN. Si vous essayez, vous recevrez un avis vous invitant à vous connecter uniquement à l'aide de l'application OpenVPN.

      The OpenVPN iOS app connected to the VPN

      Android

      Installation

      Ouvrez le Google Play Store. Recherchez et installez Android OpenVPN Connect, l'application client officielle d'OpenVPN sur Android.

      Vous pouvez transférer le profil .ovpn en connectant l'appareil Android à votre ordinateur par USB et en copiant le fichier dessus. Sinon, si vous disposez d'un lecteur de carte SD, vous pouvez retirer la carte SD de l'appareil, y copier le profil, puis réinsérer la carte dans l'appareil Android.

      Lancez l'application OpenVPN et cliquez sur le menu pour importer le profil.

      The OpenVPN Android app profile import menu selection

      Naviguez ensuite jusqu'à l'emplacement du profil enregistré (la capture d'écran utilise /sdcard/Download/) et sélectionnez le fichier. L'application vous notifiera que le profil a été importé.

      The OpenVPN Android app selecting VPN profile to import

      Connexion

      Pour vous connecter, cliquez simplement sur le bouton Connect. On vous demandera si vous faites confiance à l'application OpenVPN. Choisissez OK pour lancer la connexion. Pour vous déconnecter du VPN, retournez sur l'application OpenVPN et choisissez Disconnect.

      The OpenVPN Android app ready to connect to the VPN

      Étape 11 - Test de votre connexion VPN (Facultatif)

      Remarque : cette méthode pour tester votre connexion VPN ne fonctionnera que si vous avez choisi de faire passer tout votre trafic par le VPN à l'étape 5.

      Une fois que tout est installé, une simple vérification confirme que tout fonctionne correctement. Sans avoir activé de connexion VPN, ouvrez un navigateur et allez sur DNSLeakTest.

      Le site renvoie l'adresse IP attribuée par votre fournisseur d'accès à Internet et telle que vous apparaissez au reste du monde. Pour vérifier vos paramètres DNS sur le même site web, cliquez sur Extended test et il vous indiquera quels serveurs DNS vous utilisez.

      Connectez maintenant le client OpenVPN au VPN de votre Droplet et rafraîchissez le navigateur. Une adresse IP complètement différente (celle de votre serveur VPN) devrait maintenant apparaître, et c'est ainsi que vous apparaissez au monde. Encore une fois, le test Extended Test de DNSLeakTest vérifiera vos paramètres DNS et confirmera que vous utilisez maintenant les résolveurs DNS poussés par votre VPN.

      Étape 12 - Révocation des certificats des clients

      Il peut arriver que vous deviez révoquer le certificat d'un client pour empêcher tout accès ultérieur au serveur OpenVPN.

      Pour ce faire, accédez au répertoire EasyRSA sur votre machine AC :

      Ensuite, lancez le script easyrsa avec l'option revoke, suivi du nom du client que vous souhaitez révoquer :

      Il vous sera demandé de confirmer la révocation en entrant yes :

      Output

      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

      Après avoir confirmé l'action, l'AC révoquera entièrement le certificat du client. Cependant, votre serveur OpenVPN n'a actuellement aucun moyen de vérifier si les certificats des clients ont été révoqués et le client aura toujours accès au VPN. Pour corriger cela, créez une liste de révocation de certificats (CRL) sur votre machine AC :

      Cette action entraînera la création d'un fichier appelé crl.pem. Transférez ce fichier vers votre serveur OpenVPN en toute sécurité :

      • scp ~/EasyRSA-3.0.4/pki/crl.pem sammy@your_server_ip:/tmp

      Sur votre serveur OpenVPN, copiez ce fichier dans votre répertoire /etc/openvpn/ :

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

      Ensuite, ouvrez le fichier de configuration du serveur OpenVPN :

      • sudo nano /etc/openvpn/server.conf

      Au bas du fichier, ajoutez l'option crl-verify, qui demandera au serveur OpenVPN de vérifier la liste de révocation de certificats que nous avons créée à chaque tentative de connexion :

      /etc/openvpn/server.conf

      crl-verify crl.pem
      

      Enregistrez et fermez le fichier.

      Enfin, redémarrez OpenVPN pour implémenter la révocation du certificat :

      • sudo systemctl restart openvpn@server

      Le client ne devrait plus être en mesure de se connecter au serveur en utilisant les anciennes informations d'identification.

      Pour révoquer d'autres clients, procédez comme suit :

      1. Révoquez le certificat avec la commande ./easyrsa revoke client-name
      2. Générez un nouveau fichier CRL
      3. Transférez le nouveau fichier crl.pem sur votre serveur OpenVPN et copiez-le dans le répertoire /etc/openvpn pour écraser l'ancienne liste.
      4. Redémarrez le service OpenVPN.

      Vous pouvez utiliser cette méthode processus pour révoquer tout certificat que vous avez précédemment émis pour votre serveur.

      Conclusion

      Vous naviguez désormais en toute sécurité sur Internet en protégeant votre identité, votre emplacement et votre trafic des espions et des censeurs.

      Pour configurer davantage de clients, il vous suffit de suivre les étapes 4 et 9-11 pour chaque appareil supplémentaire. Pour révoquer l'accès aux clients, il suffit de suivre l'étape 12.



      Source link