One place for hosting & domains

      OpenVPN

      Cómo configurar un servidor de OpenVPN en Debian 9


      Introducción

      ¿Desea acceder a Internet de manera segura desde su teléfono inteligente o desde su notebook cuando está conectado a una red no confiable, como la red wifi de un hotel o una cafetería? Una red privada virtual (VPN, por su sigla en inglés) le permite desplazarse por redes no confiables de manera privada y segura, como si estuviera en una red privada. El tráfico se inicia en el servidor de la VPN y continúa su camino hacia el destino.

      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 la red no confiable.

      OpenVPN es una solución de capa de conexión segura (SSL) de funciones completas y de código abierto que cuenta con una amplia variedad de configuraciones. A través de este tutorial, configurará un servidor de OpenVPN en un servidor de Debian 9 y luego el acceso a él desde Windows, macOS, iOS o Android. Se intentará brindar el mayor nivel de simplicidad posible para los pasos de instalación y configuración de cada una de las configuraciones.

      Nota: Si planea configurar un servidor de OpenVPN en un Droplet de DigitalOcean, tenga en cuenta que nosotros, como muchos proveedores de alojamiento web, aplicamos cobros por excesos de banda ancha. 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 completar este tutorial, necesitará acceso a un servidor de Debian 9 a fin de alojar su servicio de OpenVPN. Antes de comenzar a seguir los pasos de esta guía, deberá configurar un usuario no root con privilegios sudo. Puede seguir nuestra guía de configuración inicial para servidores de Debian 9 para configurar un usuario con los permisos adecuados. A través del tutorial del enlace también se podrá configurar un firewall, que para esta guía se supone que está instalado.

      Además, necesitará una máquina aparte para que funcione como su autoridad de certificación (CA). Si bien es técnicamente posible usar su servidor de OpenVPN o su máquina local como CA, esto no se recomienda porque expone su VPN a algunas vulnerabilidades de seguridad. Según la documentación oficial de OpenVPN, debe instalar su CA en una máquina independiente dedicada a importar y firmar solicitudes de certificados. Por este motivo, para esta guía se supone que su CA se encuentra en un servidor de Debian 9 independiente que también tiene un usuario no root con privilegios sudo y un firewall básico.

      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 Debian 9 para hallar instrucciones sobre cómo aplicar cualquiera de estas soluciones.

      Una vez cumplidos estos requisitos previos, podrá abordar el paso 1 de este tutorial.

      Paso 1: Instalar OpenVPN y EasyRSA

      Para comenzar, actualice el índice de paquetes de su servidor de VPN e instale OpenVPN. OpenVPN está disponible en los repositorios predeterminados de Debian, por lo que puede usar apt para la instalación:

      • sudo apt update
      • sudo apt install openvpn

      OpenVPN es una VPN TL/SSL. Esto significa que utiliza certificados para cifrar el tráfico entre el servidor y los clientes. Para emitir certificados de confianza, debe configurar su propia autoridad de certificación (CA) simple. Para hacer esto, descargaremos la última versión de EasyRSA, que usaremos para crear nuestra infraestructura de clave pública (PKI) de CA, desde el repositorio de GitHub oficial del proyecto.

      Como se mencionó en los requisitos previos, crearemos la CA en un servidor independiente. Este enfoque se basa en la idea de que si un atacante pudiera infiltrarse en su servidor, podría acceder a la clave privada de su CA y usarla para firmar nuevos certificados, con lo cual obtendría acceso a su VPN. Respectivamente, administrar la CA desde una máquina independiente ayuda a evitar que los usuarios no autorizados accedan a su VPN. Tenga también en cuenta que se recomienda mantener el servidor de CA desactivado cuando no esté en uso para firmar claves como medida de precaución adicional.

      A fin de comenzar a crear la infraestructura de CA y PKI, use wget para descargar la última versión de EasyRSA tanto en su máquina de CA como en su servidor de OpenVPN. Para obtener la última versión, diríjase a la página Releases (versiones) del proyecto oficial EasyRSA de GitHub, copie el enlace de descarga del archivo que termina en .tgz y luego péguelo en el siguiente comando:

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

      Luego extraiga el tarball:

      • cd ~
      • tar xvf EasyRSA-3.0.4.tgz

      Con esto, habrá instalado de manera correcta el software necesario en su servidor y en su máquina de CA. Podrá proseguir con la configuración de las variables empleadas por EasyRSA y la fijación de un directorio de CA, desde el cual generará las claves y los certificados necesarios para que su servidor y sus clientes accedan a la VPN.

      Paso 2: Configurar las variables de EasyRSA y crear la CA

      EasyRSA cuenta con un archivo de configuración que puede editar para definir diversas variables para su CA.

      En su *máquina *de CA, diríjase al directorio EasyRSA:

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

      Abra este archivo nuevo con su editor de texto preferido:

      Encuentre los ajustes que establecen los valores de campos predeterminados para nuevos certificados. El aspecto será similar a este:

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

      Quite los comentarios de estas líneas y cambie los valores resaltados por los que prefiera, pero no los deje vacíos:

      ~/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      "admin@example.com"
      set_var EASYRSA_REQ_OU         "Community"
      
      . . .
      

      Cuando termine, guarde y cierre el archivo.

      Dentro del directorio EasyRSA hay una secuencia de comandos llamada ​​​​easyrsa, que se usar para llevar a cabo varias tareas relacionadas con la creación y administración de la CA. Ejecute la secuencia de comandos con la opción init-pki para iniciar la infraestructura de clave pública en el servidor de CA:

      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

      Luego, ejecute la secuencia de comandos easyrsa nuevamente, seguida de la opción build-ca. Con esto, se crearán la CA y dos archivos importantes, ca.crt y ca.key, que representarán los lados públicos y privados de un certificado SSL.

      • ca.crt es el archivo de certificado público de CA que usan, en el contexto de OpenVPN, el servidor y el cliente para informarse entre sí que son parte de la misma red de confianza y no atacantes desconocidos. Por este motivo, su servidor y todos sus clientes necesitarán una copia del archivo ca.crt.
      • ca.key es la clave privada que la máquina CA usa para firmar claves y certificados para servidores y clientes. Si un atacante logra acceder a su CA, y con ello a su archivo ca.key, podrá firmar solicitudes de certificados y acceder a su VPN, lo que inhabilitará su seguridad. Esta es la razón por la cual su archivo ca.key deberá estar *únicamente *en su máquina de CA. A su vez, lo ideal sería que su máquina de CA estuviera desconectada cuando no firme solicitudes de certificados como medida de seguridad adicional.

      Si no desea que se le solicite una contraseña cada vez que interactúe con su CA, puede ejecutar el comando build-ca con la opción nopass, de la siguiente forma:

      • ./easyrsa build-ca nopass

      En el resultado, se le solicitará confirmar el nombre común de su CA:

      Output

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

      El nombre común es el que se usa para hacer referencia a esta máquina en el contexto de la autoridad de certificación. Puede ingresar cualquier secuencia de caracteres para el nombre común de la CA. No obstante, para hacerlo más simple, presione ENTER para aceptar el nombre predeterminado.

      Con esto, su CA quedará configurada y lista para comenzar a firmar solicitudes de certificado.

      Paso 3: Crear los archivos de certificado, clave y cifrado del servidor

      Ahora que ya tiene lista una CA, puede generar una solicitud de clave y certificado privados desde su servidor y luego transferirla a su CA para que la firme y cree el certificado solicitado. También puede crear algunos archivos adicionales que se usan durante el proceso de cifrado.

      Comience dirigiéndose al directorio EasyRSA en su servidor de OpenVPN:

      Desde allí, ejecute la secuencia de comandos easyrsa con la opción init-pki. Aunque ya ejecutó este comando en la máquina de CA, es necesario ejecutarlo aquí porque su servidor y su CA tendrán directorios de PKI independientes:

      Luego, ejecute la secuencia de comandos easyrsa nuevamente, esta vez con la opción gen-req seguida de un nombre común para la máquina. Este nombre, una vez más, puede ser cualquiera, aunque puede ser útil que sea descriptivo. A lo largo de este tutorial, el nombre común del servidor de OpenVPN será simplemente “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 posteriormente:

      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 apuntar a los archivos .crt y .key correctos.

      • ./easyrsa gen-req server nopass

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

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

      Transfiera el archivo server.req a su máquina de CA utilizando un método seguro (como SCP, en el ejemplo que ofrecemos a continuación):

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

      Luego, en *su *máquina de CA, diríjase al directorio EasyRSA:

      Usando nuevamente la secuencia de comandos easyrsa, importe el archivo server.req y siga la ruta de este con su nombre común:

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

      Luego, firme la solicitud ejecutando la secuencia 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. Por ello, para la solicitud de certificado del servidor de OpenVPN asegúrese de usar el tipo de solicitud server:

      • ./easyrsa sign-req server server

      Al finalizar, se le solicitará verificar que la solicitud provenga de una fuente de confianza. Escriba yes y luego presion e ENTER para confirmarlo:

      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 cifró su clave de CA, se le solicitará ingresar la contraseña en este punto.

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

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

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

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

      Luego, vuelva a iniciar sesión en su servidor de OpenVPN y copie los archivos server.crt y ca.cart a su directorio /etc/openvpn/:

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

      Luego, diríjase a su directorio EasyRSA:

      Desde ahí, cree una clave segura Diffie-Hellman para usarla durante el intercambio de claves escribiendo:

      Esta operación puede tardar unos minutos. Una vez que se complete, genere una firma HMAC para fortalecer las capacidades de verificación de integridad TLS del servidor:

      • sudo openvpn --genkey --secret ta.key

      Cuando el comando se aplique, copie los dos nuevos archivos a su directorio /etc/openvpn/:

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

      Con esto, se generarán todos los archivos de certificados y claves necesarios para su servidor. Ya está listo para crear los certificados y las claves correspondientes que usará su máquina cliente para acceder a su servidor de OpenVPN.

      Paso 4: 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. El beneficio de esto es que podemos crear una secuencia de comandos que generará de manera automática archivos de configuración 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 ~/EasyRSA-3.0.4/
      • ./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 máquina de CA usando un método seguro:

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

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

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

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

      • ./easyrsa sign-req client client1

      En la línea de comandos, 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

      Establezca una conexión de retorno de SSH en su servidor de OpenVPN y copie el certificado de cliente al directorio /client-configs/keys/:

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

      Luego, copie también los archivos ca.crt y ta.key al directorio /client-configs/keys/:

      • sudo cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
      • sudo cp /etc/openvpn/ca.crt ~/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. Aún quedan algunas acciones que se deben realizar con estos archivos, pero se realizarán más adelante. Por ahora, puede comenzar a configurar OpenVPN en su servidor.

      Paso 5: Configurar el servicio de OpenVPN

      Ahora que se generaron los certificados y las claves de su cliente y servidor, puede comenzar a configurar el servicio de OpenVPN para que use estas credenciales.

      Comience copiando un archivo de configuración de OpenVPN de muestra al directorio de configuración y luego extráigalo para usarlo como base para su configuración:

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

      Abra el archivo de configuración del servidor en su editor de texto preferido:

      • sudo nano /etc/openvpn/server.conf

      Busque la directiva tls-auth para encontrar la sección HMAC. Los comentarios de esta línea no deberían existir, pero si esto no sucede elimine “;” para quitar los comentarios:

      /etc/openvpn/server.conf

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

      Luego, busque las líneas cipher con comentarios para encontrar la sección de cifrado. El código AES-256-CBC ofrece un buen nivel de cifrado y cuenta con buen respaldo. Una vez más, no debería haber comentarios para esta línea, pero si esto no sucede simplemente elimine el “;” que la precede:

      /etc/openvpn/server.conf

      cipher AES-256-CBC
      

      Debajo, agregue 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. Debido a algunos cambios recientes realizados en EasyRSA, el nombre de archivo de la clave Diffie-Hellman puede ser distinto del que figura en el ejemplo del archivo de configuración del servidor. Si es necesario, cambie el nombre de archivo que aparece eliminando 2048 para que coincida con la clave que generó en el paso anterior:

      /etc/openvpn/server.conf

      dh dh.pem
      

      Por último, busque los ajustes user y group, y elimine “;” al inicio de cada uno para quitar los comentarios de estas líneas:

      /etc/openvpn/server.conf

      user nobody
      group nogroup
      

      Los cambios realizados al archivo de muestra server.conf hasta el momento son necesarios para que OpenVPN funcione. Los cambios mencionados a continuación son opcionales, aunque también se necesitan para muchos casos de uso comunes.

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

      Con los ajustes anteriores, se creará la conexión de VPN entre las dos máquinas, pero no se forzarán conexiones para usar el túnel. Si desea usar la VPN para dirigir todo su tráfico, probablemente le convenga aplicar los ajustes de sistemas de nombre de domino (DNS) a las computadoras clientes.

      Para habilitar esta funcionalidad, debe cambiar algunas directivas del archivo server.conf. Encuentre la sección redirect-gateway y elimine el punto y coma, “;”, del inicio de la línea redirect-gateway para quitar los comentarios:

      /etc/openvpn/server.conf

      push "redirect-gateway def1 bypass-dhcp"
      

      Debajo de esto, 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"
      

      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.

      /etc/openvpn/server.conf

      # Optional!
      port 443
      

      Algunas veces, el protocolo se limita a ese puerto también. Si esto sucede, cambie proto 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:

      /etc/openvpn/server.conf

      # Optional!
      explicit-exit-notify 0
      

      Si no tiene necesidad de usar un puerto y protocolo distintos, es mejor dejar estos dos ajustes como sus valores predeterminados.

      (Opcional) Apuntar a credenciales no predeterminadas

      Si anteriormente seleccionó un nombre distinto durante el comando ./ build-key-server, modifique las líneas cert y key que ve para apuntar a los archivos .crt y .key adecuados. Si usó el nombre predeterminado, “server”, esto ya está correctamente configurado:

      /etc/openvpn/server.conf

      cert server.crt
      key server.key
      

      Cuando termine, guarde y cierre el archivo.

      Luego de revisar y aplicar los cambios necesarios a la configuración de su servidor de OpenVPN para sus necesidades de uso específicas, puede comenzar a aplicar algunos cambios a la conexión de su servidor.

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

      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 enrutamiento *de 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 el enrutamiento de IP predeterminado de su servidor, modifique el archivo /etc/sysctl.conf:

      • sudo nano /etc/sysctl.conf

      Dentro de este, busque la línea con comentarios que configura net.ipv4.ip_forward. Elimine el carácter “#” del inicio de la línea para quitar los comentairos de este ajuste:

      /etc/sysctl.conf

      net.ipv4.ip_forward=1
      

      Guarde y cierre el archivo cuando termine.

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

      Output

      net.ipv4.ip_forward = 1

      Si siguió la guía de instalación inicial para servidores de Debian 9 mencionada en los requisitos previos, debería tener un firewall UFW establecido. Independientemente de que use el firewall para bloquear el tráfico no deseado (algo que debe hacer casi siempre), a los efectos de esta guía necesitará un firewall para manipular parte del tráfico que ingresa al servidor. Algunas de las reglas del firewall deben modificarse para permitir el enmascaramiento, un concepto de iptables que proporciona traducción de direcciones de red (NAT) dinámica sobre la marcha para dirigir de manera correcta las conexiones de los clientes.

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

      Su interfaz pública es la secuencia que se halla en el resultado de este comando después de la palabra “dev”. Por ejemplo, este resultado muestra la interfaz denominada eth0, que aparece resaltada a continuación:

      Output

      default via 203.0.113.1 dev eth0 onlink

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

      • sudo nano /etc/ufw/before.rules

      Las reglas de UFW suelen agregarse usando el comando ufw. Sin embargo, las reglas enumeradas en el archivo before.rules se leen e implementan antes de que se carguen las reglas de UFW. En la parte superior del archivo, agregue las líneas resaltadas a continuación. Con esto, se establecerá la política predeterminada de la cadena POSTROUTING en la tabla nat y se enmascarará el tráfico que provenga de la VPN. Recuerde reemplazar eth0 en la línea -A POSTROUTING siguiente por la interfaz que encontró en el comando anterior:

      /etc/ufw/before.rules

      #
      # rules.before
      #
      # Rules that should be run before the ufw command line added rules. Custom
      # rules should be added to one of these chains:
      #   ufw-before-input
      #   ufw-before-output
      #   ufw-before-forward
      #
      
      # START OPENVPN RULES
      # NAT table rules
      *nat
      :POSTROUTING ACCEPT [0:0] 
      # Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
      -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
      COMMIT
      # END OPENVPN RULES
      
      # Don't delete these required lines, otherwise there will be errors
      *filter
      . . .
      

      Guarde y cierre el archivo cuando termine.

      Luego, debe indicar a UFW que permita también los paquetes reenviados de forma predeterminada. Para hacer esto, abra el archivo /etc/default/ufw:

      • sudo nano /etc/default/ufw

      Dentro de este, encuentre la directiva DEFAULT_FORWARD_POLICY y cambie el valor de DROP a ACCEPT:

      /etc/default/ufw

      DEFAULT_FORWARD_POLICY="ACCEPT"
      

      Guarde y cierre el archivo cuando termine.

      Luego, ajuste el firewall para permitir el tráfico hacia OpenVPN. Si no cambió el puerto ni el protocolo en el archivo /etc/openvpn/server.conf, deberá abrir el tráfico UDP al puerto 1194. Si modificó el puerto o el protocolo, sustituya los valores que seleccionó aquí.

      En caso de que se haya olvidado de agregar el puerto SSH al seguir el tutorial de los requisitos previos, agréguelo aquí también:

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

      Luego de agregar esas reglas, deshabilite y vuelva a habilitar UFW para reiniciarlo y cargue los cambios de todos los archivos que haya modificado:

      • sudo ufw disable
      • sudo ufw enable

      Su servidor quedará, así, configurado para manejar de manera correcta el tráfico de OpenVPN.

      Paso 7: Iniciar y habilitar el servicio de OpenVPN

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

      Inicie el servidor de OpenVPN especificando el nombre de su archivo de configuración como una variable de instancia después del nombre del archivo de unidad de systemd. El archivo de configuración de su servidor se llama /etc/openvpn/server.conf. Por lo tanto, debe agregar @server al final de su archivo de unidad cuando lo llame:“”

      • sudo systemctl start openvpn@server

      Vuelva a controlar que el servicio se haya iniciado correctamente escribiendo lo siguiente:

      • sudo systemctl status openvpn@server

      Si todo salió bien, el resultado será similar a esto:

      Output

      ● openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; 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/openvpn@server.service └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid

      También puede controlar que la interfaz tun0 de OpenVPN esté disponible escribiendo lo siguiente:

      Esto dará como resultado una interfaz configurada:

      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

      Luego de iniciar el servicio, habilítelo para que se cargue de manera automática en el inicio:

      • sudo systemctl enable openvpn@server

      Su servicio de OpenVPN quedará, así, configurado y en funcionamiento. Sin embargo, para comenzar a usarlo debe crear primero un archivo de configuración para la máquina cliente. En el tutorial ya se explicó la forma crear pares de certificado y clave para clientes, y en el siguiente paso demostraremos la forma de crear una infraestructura que generará archivos de configuración de clientes fácilmente.

      Paso 8: 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/examples/sample-config-files/client.conf ~/client-configs/base.conf

      Abra este archivo nuevo en 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 “;” al inicio de cada línea:

      ~/client-configs/base.conf

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

      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 manera similar, elimine los comentarios de la directiva tls-auth, ya que agregará ta.key directamente al archivo de configuración de cliente:

      ~/client-configs/base.conf

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

      Refleje los ajustes de cipher y auth que estableció en el archivo /etc/openvpn/server.conf:

      ~/client-configs/base.conf

      cipher AES-256-CBC
      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 simple 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 y asegúrese de cambiar sammy por el de la cuenta no root de su servidor:

      ~/client-configs/make_config.sh

      #!/bin/bash
      
      # First argument: Client identifier
      
      KEY_DIR=/home/sammy/client-configs/keys
      OUTPUT_DIR=/home/sammy/client-configs/files
      BASE_CONFIG=/home/sammy/client-configs/base.conf
      
      cat ${BASE_CONFIG} 
          <(echo -e '<ca>') 
          ${KEY_DIR}/ca.crt 
          <(echo -e '</ca>n<cert>') 
          ${KEY_DIR}/${1}.crt 
          <(echo -e '</cert>n<key>') 
          ${KEY_DIR}/${1}.key 
          <(echo -e '</key>n<tls-auth>') 
          ${KEY_DIR}/ta.key 
          <(echo -e '</tls-auth>') 
          > ${OUTPUT_DIR}/${1}.ovpn
      

      Guarde y cierre el archivo cuando 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 esto 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 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 9: 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 4. 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
      • sudo ./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í se ofrece un comando SFTP de muestra que usa el ejemplo client1.ovpn y que usted puede ejecutar desde su computadora local (macOS o Linux). Dispone el archivo .ovpn en su directorio de inicio:“”

      • sftp sammy@your_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 a una computadora local:

      Paso 10: 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 utilizó 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 ícono 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 doble 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. Para simplificar el proceso, responda No y permita que Tunnelblick se cierre. Abra una ventana de Finder, busque client1.ovpn y haga doble clic sobre él. Tunnelblick instalará el perfil de cliente. Se necesitan privilegios de administrador.

      Conexión

      Inicie Tunnelblick haciendo doble clic sobre este en la carpeta Aplicaciones. Una vez que se haya iniciado Tunnelblick, habrá un ícono de este en la barra de menú de la esquina superior derecha de la pantalla para controlar las conexiones. Haga clic en el ícono y luego en el elemento de menú Connect *para iniciar la conexión de VPN. Seleccione la conexión *client1.

      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 de cliente de OpenVPN oficial de iOS. Para transferir su configuración de cliente de 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, OpenVPN Documents, sirve para compartir archivos. Arrastre el archivo .ovpn hacia la ventana OpenVPN Documents.

      iTunes muestra el perfil de VPN listo para cargarse 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.

      Conexión

      De esta manera, OpenVPN estará listo para usarse con el nuevo perfil. Inicie la conexión deslizando el botón de Connect hasta la posición de activación. Finalice la conexión deslizando el mismo botón hasta la posición de desactivación.

      Nota: El interruptor de VPN de Settings 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.

      La 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ú 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 /sdcard/Download/) y seleccione el archivo. La aplicación notificará que se importó el perfil.

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

      Conexión

      Para conectarse, simplemente toque el botón Connect. Se le preguntará si confía en la aplicación OpenVPN. Seleccione OK para iniciar la conexión. Para desconectarse de la VPN, vuelva a la aplicación OpenVPN y seleccione Disconnect.

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

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

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

      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 navegador e ingrese en 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. Esto le indicará los servidores DNS que usa.

      Ahora, conecte el cliente de OpenVPN a la VPN de su servidor 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 12: 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 hacerlo, en su máquina de CA, diríjase al directorio EasyRSA:

      Luego, ejecute la secuencia de comandos easyrsa con la opción revoke seguida del nombre del cliente que desee rechazar:

      Con esto, se solicitará que confirme el rechazo ingresando 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

      Una vez que se confirme la acción, la CA rechazará por completo el certificado del cliente. Sin embargo, su servidor de OpenVPN actualmente no tiene forma de corroborar si los certificados de clientes se rechazaron y si el cliente seguirá teniendo acceso a la VPN. Para corregir esto, cree una lista de rechazo de certificados (CRL) en su máquina de CA:

      Con esto, se generará un archivo llamado crl.pem. Transfiera este archivo de manera segura a su servidor de OpenVPN:

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

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

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

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

      • sudo nano /etc/openvpn/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.conf

      crl-verify crl.pem
      

      Guarde y cierre el archivo.

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

      • sudo systemctl restart openvpn@server

      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 nombre_cliente.
      2. Genere una nueva CRL.
      3. Transfiera el archivo crl.pem nuevo a su servidor de OpenVPN y cópielo al directorio /etc/openvpn 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

      De esta manera, podrá navegar por Internet protegiendo su identidad, ubicación y tráfico contra fisgones y censores. Si en este punto ya no necesita emitir certificados, recomendamos que apague su máquina de CA o la desconecte de Internet hasta que necesite agregar o rechazar certificados. Esto ayudará a evitar que los atacantes obtengan acceso a su VPN.

      Para configurar más clientes, solo debe seguir el paso 4 y los pasos 9 a 11 en el caso de cada dispositivo adicional. Para rechazar el acceso de los clientes, siga el paso 12.



      Source link

      Cómo configurar un servidor de OpenVPN en Ubuntu 18.04


      Justin Ellingwood escribió una versión anterior de este tutorial.

      Introducción

      ¿Desea acceder a Internet de manera segura desde su teléfono inteligente o desde su notebook cuando está conectado a una red no confiable, como la red wifi de un hotel o una cafetería? Una red privada virtual (VPN, por su sigla en inglés) le permite desplazarse por redes no confiables de manera privada y segura, como si estuviera en una red privada. El tráfico s inicia en el servidor de la VPN y continúa su camino hacia el destino.

      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 la red no confiable.

      OpenVPN es una solución de capa de conexión segura (SSL) de funciones completas y de código abierto que cuenta con una amplia variedad de configuraciones. A través de este tutorial, configurará un servidor de OpenVPN en un servidor de Ubuntu 18.04 y luego el acceso a él desde Windows, macOS, iOS o Android. Se intentará brindar el mayor nivel de simplicidad posible para los pasos de instalación y configuración de cada una de las configuraciones.

      Nota: Si planea configurar un servidor de OpenVPN en un Droplet de DigitalOcean, tenga en cuenta que nosotros, como muchos proveedores de alojamiento web, aplicamos cobros por excesos de banda ancha. 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 completar este tutorial, necesitará acceso a un servidor Ubuntu 18.04 a fin de alojar su servicio de OpenVPN. Antes de comenzar a seguir los pasos de esta guía, deberá configurar un usuario no root con privilegios sudo. Puede seguir nuestra guía de configuración inicial para servidores de Ubuntu 18.04 para configurar un usuario con los permisos adecuados. A través del tutorial del enlace también se podrá configurar un firewall, que para esta guía se supone que está instalado.

      Además, necesitará una máquina aparte para que funcione como su autoridad de certificación (CA). Si bien es técnicamente posible usar su servidor de OpenVPN o su máquina local como CA, esto no se recomienda porque expone su VPN a algunas vulnerabilidades de seguridad. Según la documentación oficial de OpenVPN, debe instalar su CA en una máquina independiente dedicada a importar y firmar solicitudes de certificados. Por este motivo, para esta guía se supone que su CA se encuentra en un servidor Ubuntu 18.04 independiente que también tiene un usuario no root con privilegios sudo y un firewall básico.

      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 Ubuntu 18.04 para hallar instrucciones sobre cómo aplicar cualquiera de estas soluciones.

      Una vez cumplidos estos requisitos previos, podrá abordar el paso 1 de este tutorial.

      Paso 1: Instalar OpenVPN y EasyRSA

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

      • sudo apt update
      • sudo apt install openvpn

      OpenVPN es una VPN TL/SSL. Esto significa que utiliza certificados para cifrar el tráfico entre el servidor y los clientes. Para emitir certificados de confianza, debe configurar su propia autoridad de certificación (CA) simple. Para hacer esto, descargaremos la última versión de EasyRSA, que usaremos para crear nuestra infraestructura de clave pública (PKI) de CA, desde el repositorio de GitHub oficial del proyecto.

      Como se mencionó en los requisitos previos, crearemos la CA en un servidor independiente. Este enfoque se basa en la idea de que si un atacante pudiera infiltrarse en su servidor, podría acceder a la clave privada de su CA y usarla para firmar nuevos certificados, con lo cual obtendría acceso a su VPN. Respectivamente, administrar la CA desde una máquina independiente ayuda a evitar que los usuarios no autorizados accedan a su VPN. Tenga también en cuenta que se recomienda mantener el servidor de CA desactivado cuando no esté en uso para firmar claves como medida de precaución adicional.

      A fin de comenzar a crear la infraestructura de CA y PKI, use wget para descargar la última versión de EasyRSA tanto en su máquina de CA como en su servidor de OpenVPN. Para obtener la última versión, diríjase a la página Releases (versiones) del proyecto oficial EasyRSA de GitHub, copie el enlace de descarga del archivo que termina en .tgz y luego péguelo en el siguiente comando:

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

      Luego extraiga el tarball:

      • cd ~
      • tar xvf EasyRSA-3.0.4.tgz

      Con esto, habrá instalado de manera correcta el software necesario en su servidor y en su máquina de CA. Podrá proseguir con la configuración de las variables empleadas por EasyRSA y la fijación de un directorio de CA, desde el cual generará las claves y los certificados necesarios para que su servidor y sus clientes accedan a la VPN.

      Paso 2: Configurar las variables de EasyRSA y crear la CA

      EasyRSA cuenta con un archivo de configuración que puede editar para definir diversas variables para su CA.

      En su máquina de CA, diríjase al directorio EasyRSA:

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

      Abra este archivo nuevo con su editor de texto preferido:

      Encuentre los ajustes que establecen los valores de campos predeterminados para nuevos certificados. El aspecto será similar a este:

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

      Quite los comentarios de estas líneas y cambie los valores resaltados por los que prefiera, pero no los deje vacíos:

      ~/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      "admin@example.com"
      set_var EASYRSA_REQ_OU         "Community"
      
      . . .
      

      Cuando termine, guarde y cierre el archivo.

      Dentro del directorio EasyRSA hay una secuencia de comandos llamada ​​​​easyrsa, que se usar para llevar a cabo varias tareas relacionadas con la creación y administración de la CA. Ejecute la secuencia de comandos con la opción init-pki para iniciar la infraestructura de clave pública en el servidor de CA:

      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

      Luego, ejecute la secuencia de comandos easyrsa nuevamente, seguida de la opción build-ca. Con esto, se crearán la CA y dos archivos importantes, ca.crty ca.key, que representarán los lados públicos y privados de un certificado SSL.

      • ca.crt es el archivo de certificado público de CA que usan, en el contexto de OpenVPN, el servidor y el cliente para informarse entre sí que son parte de la misma red de confianza y no atacantes desconocidos. Por este motivo, su servidor y todos sus clientes necesitarán una copia del archivo ca.crt.
      • ca.key es la clave privada que la máquina CA usa para firmar claves y certificados para servidores y clientes. Si un atacante logra acceder a su CA, y con ello a su archivo ca.key, podrá firmar solicitudes de certificados y acceder a su VPN, lo que inhabilitará su seguridad. Esta es la razón por la cual su archivo ca.key deberá estar únicamente en su máquina de CA. A su vez, lo ideal sería que su máquina de CA estuviera desconectada cuando no firme solicitudes de certificados como medida de seguridad adicional.

      Si no desea que se le solicite una contraseña cada vez que interactúe con su CA, puede ejecutar el comando build-ca con la opción nopass, de la siguiente forma:

      • ./easyrsa build-ca nopass

      En el resultado, se le solicitará confirmar el nombre común de su CA:

      Output

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

      El nombre común es el que se usa para hacer referencia a esta máquina en el contexto de la autoridad de certificación. Puede ingresar cualquier secuencia de caracteres para el nombre común de la CA. No obstante, para hacerlo más simple, presione ENTER para aceptar el nombre predeterminado.

      Con esto, su CA quedará configurada y lista para comenzar a firmar solicitudes de certificado.

      Paso 3: Crear los archivos de certificado, clave y cifrado del servidor

      Ahora que ya tiene lista una CA, puede generar una solicitud de clave y certificado privados desde su servidor y luego transferirla a su CA para que la firme y cree el certificado solicitado. También puede crear algunos archivos adicionales que se usan durante el proceso de cifrado.

      Comience dirigiéndose al directorio EasyRSA en su servidor de OpenVPN:

      Desde allí, ejecute la secuencia de comandos easyrsa con la opción init-pki. Aunque ya ejecutó este comando en la máquina de CA, es necesario ejecutarlo aquí porque su servidor y su CA tendrán directorios de PKI independientes:

      Luego, ejecute la secuencia de comandos easyrsa nuevamente, esta vez con la opción gen-req seguida de un nombre común para la máquina. Este nombre, una vez más, puede ser cualquiera, aunque puede ser útil que sea descriptivo. A lo largo de este tutorial, el nombre común del servidor OpenVPN será simplemente “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

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

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

      Transfiera el archivo server.req a su máquina de CA utilizando un método seguro (como SCP, en el ejemplo que ofrecemos a continuación):

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

      Luego, en su máquina de CA, diríjase al directorio EasyRSA:

      Usando nuevamente la secuencia de comandos easyrsa, importe el archivo server.req y siga la ruta de este con su nombre común:

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

      Luego, firme la solicitud ejecutando la secuencia 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. Por ello, para la solicitud de certificado del servidor de OpenVPN asegúrese de usar el tipo de solicitud server:

      • ./easyrsa sign-req server server

      Al finalizar, se le solicitará verificar que la solicitud provenga de una fuente de confianza. Escriba yes y luego presione ENTER para confirmarlo:

      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 cifró su clave de CA, se le solicitará ingresar la contraseña en este punto.

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

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

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

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

      Luego, vuelva a iniciar sesión en su servidor de OpenVPN y copie los archivos server.crt y ca.cart a su directorio /etc/openvpn/:

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

      Luego, diríjase a su directorio EasyRSA:

      Desde ahí, cree una clave segura Diffie-Hellman para usarla durante el intercambio de claves escribiendo:

      Esta operación puede tardar unos minutos. Una vez que se complete, genere una firma HMAC para fortalecer las capacidades de verificación de integridad TLS del servidor:

      • openvpn --genkey --secret ta.key

      Cuando el comando se aplique, copie los dos nuevos archivos a su directorio /etc/openvpn/:

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

      Con esto, se generarán todos los archivos de certificados y claves necesarios para su servidor. Ya está listo para crear los certificados y las claves correspondientes que usará su máquina cliente para acceder a su servidor de OpenVPN.

      Paso 4: 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. El beneficio de esto es que podemos crear una secuencia de comandos que generará de manera automática archivos de configuración 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 ~/EasyRSA-3.0.4/
      • ./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 máquina de CA usando un método seguro:

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

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

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

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

      • ./easyrsa sign-req client client1

      En la línea de comandos, 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

      Establezca una conexión de retorno de SSH en su servidor de OpenVPN y copie el certificado de cliente al directorio /client-configs/keys/:

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

      Luego, copie también los archivos ca.crt y ta.key al directorio /client-configs/keys/:

      • cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/
      • sudo cp /etc/openvpn/ca.crt ~/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. Aún quedan algunas acciones que se deben realizar con estos archivos, pero se realizarán más adelante. Por ahora, puede comenzar a configurar OpenVPN en su servidor.

      Paso 5: Configurar el servicio de OpenVPN

      Ahora que se generaron los certificados y las claves de su cliente y servidor, puede comenzar a configurar el servicio de OpenVPN para que use estas credenciales.

      Comience copiando un archivo de configuración de OpenVPN de muestra al directorio de configuración y luego extráigalo para usarlo como base para su configuración:

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

      Abra el archivo de configuración del servidor en su editor de texto preferido:

      • sudo nano /etc/openvpn/server.conf

      Busque la directiva tls-auth para encontrar la sección HMAC. Los comentarios de esta línea no deberían existir, pero si esto no sucede elimine “;” para quitar los comentarios:

      /etc/openvpn/server.conf

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

      Luego, busque las líneas cipher con comentarios para encontrar la sección de cifrado. El código AES-256-CBC ofrece un buen nivel de cifrado y cuenta con buen respaldo. Una vez más, no debería haber comentarios para esta línea, pero si esto no sucede simplemente elimine el “;” que la precede:

      /etc/openvpn/server.conf

      cipher AES-256-CBC
      

      Debajo, agregue 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. Debido a algunos cambios recientes realizados en EasyRSA, el nombre de archivo de la clave Diffie-Hellman puede ser distinto del que figura en el ejemplo del archivo de configuración del servidor. Si es necesario, cambie el nombre de archivo que aparece eliminando 2048 para que coincida con la clave que generó en el paso anterior:

      /etc/openvpn/server.conf

      dh dh.pem
      

      Por último, busque los ajustes user y group, y elimine “;” al inicio de cada uno para quitar los comentarios de estas líneas:

      /etc/openvpn/server.conf

      user nobody
      group nogroup
      

      Los cambios realizados al archivo de muestra server.conf hasta el momento son necesarios para que OpenVPN funcione. Los cambios mencionados a continuación son opcionales, aunque también se necesitan para muchos casos de uso comunes.

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

      Con los ajustes anteriores, se creará la conexión de VPN entre las dos máquinas, pero no se forzarán conexiones para usar el túnel. Si desea usar la VPN para dirigir todo su tráfico, probablemente le convenga aplicar los ajustes de sistemas de nombre de domino (DNS) a las computadoras clientes.

      Para habilitar esta funcionalidad, debe cambiar algunas directivas del archivo server.conf. Encuentre la sección redirect-gateway y elimine el punto y coma, “;”, del inicio de la línea redirect-gateway para quitar los comentarios:

      /etc/openvpn/server.conf

      push "redirect-gateway def1 bypass-dhcp"
      

      Debajo de esto, 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"
      

      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.

      /etc/openvpn/server.conf

      # Optional!
      port 443
      

      Algunas veces, el protocolo se limita a ese puerto también. Si esto sucede, cambie proto 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:

      /etc/openvpn/server.conf

      # Optional!
      explicit-exit-notify 0
      

      Si no tiene necesidad de usar un puerto y protocolo distintos, es mejor dejar estos dos ajustes como sus valores predeterminados.

      (Opcional) Apuntar a credenciales no predeterminadas

      Si anteriormente seleccionó un nombre distinto durante el comando ./ build-key-server, modifique las líneas cert y key que ve para apuntar a los archivos .crt y .key adecuados. Si usó el nombre predeterminado, “server”, esto ya está correctamente configurado:

      /etc/openvpn/server.conf

      cert server.crt
      key server.key
      

      Cuando termine, guarde y cierre el archivo.

      Luego de revisar y aplicar los cambios necesarios a la configuración de su servidor de OpenVPN para sus necesidades de uso específicas, puede comenzar a aplicar algunos cambios a la conexión de su servidor.

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

      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 enrutamiento de 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 el enrutamiento de IP predeterminado de su servidor, modifique el archivo /etc/sysctl.conf:

      • sudo nano /etc/sysctl.conf

      Dentro de este, busque la línea con comentarios que configura net.ipv4.ip_forward. Elimine el carácter ****“#” del inicio de la línea para quitar los comentairos de este ajuste:

      /etc/sysctl.conf

      net.ipv4.ip_forward=1
      

      Guarde y cierre el archivo cuando termine.

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

      Output

      net.ipv4.ip_forward = 1

      Si siguió la guía de instalación inicial para servidores de Ubuntu 18.04 mencionada en los requisitos previos, debería tener un firewall UFW establecido. Independientemente de que use el firewall para bloquear el tráfico no deseado (algo que debe hacer casi siempre), a los efectos de esta guía necesitará un firewall para manipular parte del tráfico que ingresa al servidor. Algunas de las reglas del firewall deben modificarse para permitir el enmascaramiento, un concepto de iptables que proporciona traducción de direcciones de red (NAT) dinámica sobre la marcha para dirigir de manera correcta las conexiones de los clientes.

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

      Su interfaz pública es la secuencia que se halla en el resultado de este comando después de la palabra “dev”. Por ejemplo, en este resultado se muestra la interfaz denominada eth0, que aparece resaltada a continuación:

      Output

      default via 203.0.113.1 dev wlp11s0 proto static

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

      • sudo nano /etc/ufw/before.rules

      Las reglas de UFW suelen agregarse usando el comando ufw. Sin embargo, las reglas enumeradas en el archivo before.rules se leen e implementan antes de que se carguen las reglas de UFW. En la parte superior del archivo, agregue las líneas resaltadas a continuación. Con esto, se establecerá la política predeterminada de la cadena POSTROUTING en la tabla nat y se enmascarará el tráfico que provenga de la VPN. Recuerde reemplazar wlp11s0​​​ en la línea -A POSTROUTING siguiente por la interfaz que encontró en el comando anterior:

      /etc/ufw/before.rules

      #
      # rules.before
      #
      # Rules that should be run before the ufw command line added rules. Custom
      # rules should be added to one of these chains:
      #   ufw-before-input
      #   ufw-before-output
      #   ufw-before-forward
      #
      
      # START OPENVPN RULES
      # NAT table rules
      *nat
      :POSTROUTING ACCEPT [0:0] 
      # Allow traffic from OpenVPN client to wlp11s0 (change to the interface you discovered!)
      -A POSTROUTING -s 10.8.0.0/8 -o wlp11s0 -j MASQUERADE
      COMMIT
      # END OPENVPN RULES
      
      # Don't delete these required lines, otherwise there will be errors
      *filter
      . . .
      

      Guarde y cierre el archivo cuando termine.

      Luego, debe indicarle a UFW que permita también los paquetes reenviados de modo predeterminado. Para hacer esto, abra el archivo /etc/default/ufw:

      • sudo nano /etc/default/ufw

      Dentro de este, encuentre la directiva DEFAULT_FORWARD_POLICY y cambie el valor de DROP a ACCEPT:

      /etc/default/ufw

      DEFAULT_FORWARD_POLICY="ACCEPT"
      

      Guarde y cierre el archivo cuando termine.

      Luego, modifique el firewall para permitir el tráfico hacia OpenVPN. Si no cambió el puerto y el protocolo en el archivo /etc/openvpn/server.conf, deberá abrir el tráfico UDP al puerto 1194. Si modificó el puerto o el protocolo, sustituya los valores que seleccionó aquí.

      En caso de que se haya olvidado de agregar el puerto SSH al seguir el tutorial de los requisitos previos, agréguelo aquí también:

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

      Luego de agregar esas reglas, deshabilite y vuelva a habilitar UFW para reiniciarlo y cargue los cambios de todos los archivos que haya modificado:

      • sudo ufw disable
      • sudo ufw enable

      Su servidor quedará, así, configurado para manejar de manera correcta el tráfico de OpenVPN.

      Paso 7: Iniciar y habilitar el servicio de OpenVPN

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

      Inicie el servidor de OpenVPN especificando el nombre de su archivo de configuración como una variable de instancia después del nombre del archivo de unidad de systemd. El archivo de configuración de su servidor se llama /etc/openvpn/server.conf. Por lo tanto, debe agregar @server al final de su archivo de unidad cuando lo llame:“”

      • sudo systemctl start openvpn@server

      Vuelva a controlar que el servicio se haya iniciado correctamente escribiendo lo siguiente:

      • sudo systemctl status openvpn@server

      Si todo salió bien, el resultado será similar a esto:

      Output

      ● openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; 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/openvpn@server.service └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid

      También puede controlar que la interfaz tun0 de OpenVPN esté disponible escribiendo lo siguiente:

      Esto dará como resultado una interfaz configurada:

      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

      Luego de iniciar el servicio, habilítelo para que se cargue de manera automática en el inicio:

      • sudo systemctl enable openvpn@server

      Su servicio de OpenVPN quedará, así, configurado y en funcionamiento. Sin embargo, para comenzar a usarlo debe crear primero un archivo de configuración para la máquina cliente. En el tutorial ya se explicó la forma crear pares de certificado y clave para clientes, y en el siguiente paso demostraremos la forma de crear una infraestructura que generará archivos de configuración de clientes fácilmente.

      Paso 8: 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/examples/sample-config-files/client.conf ~/client-configs/base.conf

      Abra este archivo nuevo en 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 “;” al inicio de cada línea:

      ~/client-configs/base.conf

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

      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 manera similar, elimine los comentarios de la directiva tls-auth, ya que agregará ta.key directamente al archivo de configuración de cliente:

      ~/client-configs/base.conf

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

      Refleje los ajustes de cipher y auth establecidos en el archivo /etc/openvpn/server.conf:

      ~/client-configs/base.conf

      cipher AES-256-CBC
      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 simple 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-auth>') 
          ${KEY_DIR}/ta.key 
          <(echo -e '</tls-auth>') 
          > ${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 esto 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 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 9: 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 4. 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
      • sudo ./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í se ofrece un comando SFTP de muestra que usa el ejemplo client1.ovpn y que usted puede ejecutar desde su computadora local (macOS o Linux). Dispone el archivo .ovpn en su directorio de inicio:“”

      • sftp sammy@your_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 a una computadora local:

      Paso 10: 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 utilizó 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.

      Note: 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 ícono 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 y deje que Tunnelblick finalice el proceso. Abra una ventana de Finder, busque client1.ovpn y haga doble clic sobre él. Tunnelblick instalará el perfil de cliente. Se necesitan privilegios de administrador.

      Conexión

      Inicie Tunnelblick haciendo doble clic en el ícono de Tunnelblick de la carpeta Aplicaciones. Una vez que se haya iniciado Tunnelblick, habrá un ícono de este en la barra de menú de la esquina superior derecha de la pantalla para controlar las conexiones. Haga clic en el ícono 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 de cliente de OpenVPN oficial 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, OpenVPN Documents, sirve para compartir archivos. Arrastre el archivo .ovpn hacia la ventana OpenVPN Documents.

      iTunes muestra el perfil de VPN listo para cargarse 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.

      Conexión

      De esta manera, OpenVPN estará listo para usarse con el nuevo perfil. Inicie la conexión deslizando el botón de Connect hasta la posición de activación. Finalice la conexión deslizando el mismo botón hasta la posición de desactivación.

      Nota: El interruptor de VPN de Settings 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.

      La 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ú 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 /sdcard/Download/) y seleccione el archivo. La aplicación notificará que se importó el perfil.

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

      Conexión

      Para conectarse, simplemente toque el botón Connect. Se le preguntará si confía en la aplicación OpenVPN. Seleccione OK para iniciar la conexión. Para desconectarse de la VPN, vuelva a la aplicación OpenVPN y seleccione ****Disconnect.

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

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

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

      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. 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 12: 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 hacerlo, en su máquina de CA, diríjase al directorio EasyRSA:

      Luego, ejecute la secuencia de comandos easyrsa con la opción revoke seguida del nombre del cliente que desee rechazar:

      Con esto, se solicitará que confirme el rechazo ingresando 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

      Una vez que se confirme la acción, la CA rechazará por completo el certificado del cliente. Sin embargo, su servidor de OpenVPN actualmente no tiene forma de corroborar si los certificados de clientes se rechazaron y si el cliente seguirá teniendo acceso a la VPN. Para corregir esto, cree una lista de rechazo de certificados (CRL) en su máquina de CA:

      Con esto, se generará un archivo llamado crl.pem. Transfiera este archivo de manera segura a su servidor de OpenVPN:

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

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

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

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

      • sudo nano /etc/openvpn/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.conf

      crl-verify crl.pem
      

      Guarde y cierre el archivo.

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

      • sudo systemctl restart openvpn@server

      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. Revoque el certificado con el comando ./easyrsa revoke nombre_cliente
      2. Genere una nueva CRL
      3. Transfiera el archivo crl.pem nuevo a su servidor de OpenVPN y cópielo al directorio /etc/openvpn 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

      De esta manera, podrá navegar por Internet protegiendo su identidad, ubicación y tráfico contra fisgones y censores.

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



      Source link

      How To Set Up an OpenVPN Server on Debian 10


      A previous version of this tutorial was written by Justin Ellingwood

      Introduction

      Want to access the Internet safely and securely from your smartphone or laptop when connected to an untrusted network such as the WiFi of a hotel or coffee shop? A Virtual Private Network (VPN) allows you to traverse untrusted networks privately and securely as if you were on a private network. The traffic emerges from the VPN server and continues its journey to the destination.

      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 the untrusted network.

      OpenVPN is a full-featured, open-source Secure Socket Layer (SSL) VPN solution that accommodates a wide range of configurations. In this tutorial, you will set up an OpenVPN server on a Debian 10 server and then configure access to it from Windows, macOS, iOS and/or Android. This tutorial will keep the installation and configuration steps as simple as possible for each of these setups.

      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 complete this tutorial, you will need access to a Debian 10 server to host your OpenVPN service. You will need to configure a non-root user with sudo privileges before you start this guide. You can follow our Debian 10 initial server setup guide to set up a user with appropriate permissions. The linked tutorial will also set up a firewall, which is assumed to be in place throughout this guide.

      Additionally, you will need a separate machine to serve as your certificate authority (CA). While it’s 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 Debian 10 server that also has a non-root user with sudo privileges and a basic firewall.

      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 Debian 10 for instructions on how to perform either of these solutions.

      When you have these prerequisites in place, you can move on to Step 1 of this tutorial.

      Step 1 — Installing OpenVPN and EasyRSA

      To start off, update your VPN server’s package index and install OpenVPN. OpenVPN is available in Debian’s default repositories, so you can use apt for the installation:

      • sudo apt update
      • sudo apt install openvpn

      OpenVPN is a TLS/SSL VPN. This means that it utilizes certificates in order to encrypt traffic between the server and clients. To issue trusted certificates, you will set up your own simple certificate authority (CA). To do this, we will download the latest version of EasyRSA, which we will use to build our CA public key infrastructure (PKI), from the project’s official GitHub repository.

      As mentioned in the prerequisites, we will build the CA on a standalone server. The reason for this approach is that, if an attacker were able to infiltrate your server, they would be able to access your CA private key and use it to sign new certificates, giving them access to your VPN. Accordingly, managing the CA from a standalone machine helps to prevent unauthorized users from accessing your VPN. Note, as well, that it’s recommended that you keep the CA server turned off when not being used to sign keys as a further precautionary measure.

      To begin building the CA and PKI infrastructure, use wget to download the latest version of EasyRSA on both your CA machine and your OpenVPN server. To get the latest version, go to the Releases page on the official EasyRSA GitHub project, copy the download link for the file ending in .tgz, and then paste it into the following command:

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

      Then extract the tarball:

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

      You have successfully installed all the required software on your server and CA machine. Continue on to configure the variables used by EasyRSA and to set up a CA directory, from which you will generate the keys and certificates needed for your server and clients to access the VPN.

      Step 2 — Configuring the EasyRSA Variables and Building the CA

      EasyRSA comes installed with a configuration file which you can edit to define a number of variables for your CA.

      On your CA machine, navigate to the EasyRSA directory:

      Inside this directory is a file named vars.example. Make a copy of this file, and name the copy vars without a file extension:

      Open this new file using your preferred text editor:

      Find the settings that set field defaults for new certificates. It will look something like this:

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

      Uncomment these lines and update the highlighted values to whatever you'd prefer, but do not leave them blank:

      ~/EasyRSA-v3.0.6/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      "admin@example.com"
      set_var EASYRSA_REQ_OU         "Community"
      
      . . .
      

      When you are finished, save and close the file.

      Within the EasyRSA directory is a script called easyrsa which is called to perform a variety of tasks involved with building and managing the CA. Run this script with the init-pki option to initiate the public key infrastructure on the CA server:

      Output

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

      After this, call the easyrsa script again, following it with the build-ca option. This will build the CA and create two important files — ca.crt and ca.key — which make up the public and private sides of an SSL certificate.

      • ca.crt is the CA’s public certificate file which, in the context of OpenVPN, the server and the client use to inform one another that they are part of the same web of trust and not someone performing a man-in-the-middle attack. For this reason, your server and all of your clients will need a copy of the ca.crt file.
      • ca.key is the private key which the CA machine uses to sign keys and certificates for servers and clients. If an attacker gains access to your CA and, in turn, your ca.key file, they will be able to sign certificate requests and gain access to your VPN, impeding its security. This is why your ca.key file should only be on your CA machine and that, ideally, your CA machine should be kept offline when not signing certificate requests as an extra security measure.

      If you don’t want to be prompted for a password every time you interact with your CA, you can run the build-ca command with the nopass option, like this:

      • ./easyrsa build-ca nopass

      In the output, you’ll be asked to confirm the common name for your CA:

      Output

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

      The common name is the name used to refer to this machine in the context of the certificate authority. You can enter any string of characters for the CA’s common name but, for simplicity’s sake, press ENTER to accept the default name.

      With that, your CA is in place and it’s ready to start signing certificate requests.

      Step 3 — Creating the Server Certificate, Key, and Encryption Files

      Now that you have a CA ready to go, you can generate a private key and certificate request from your server and then transfer the request over to your CA to be signed, creating the required certificate. You’re also free to create some additional files used during the encryption process.

      Start by navigating to the EasyRSA directory on your OpenVPN server:

      From there, run the easyrsa script with the init-pki option. Although you already ran this command on the CA machine, it’s necessary to run it here because your server and CA will have separate PKI directories:

      Then call the easyrsa script again, this time with the gen-req option followed by a common name for the machine. Again, this could be anything you like but it can be helpful to make it something descriptive. Throughout this tutorial, the OpenVPN server’s common name will simply 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

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

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

      Using a secure method (like SCP, in our example below), transfer the server.req file to your CA machine:

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

      Next, on your CA machine, navigate to the EasyRSA directory:

      Using the easyrsa script again, import the server.req file, following the file path with its common name:

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

      Then 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, so for 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 asked to verify that the request comes from a trusted source. Type yes then press ENTER to confirm this:

      You are about to sign the following certificate.
      Please check over the details shown below for accuracy. Note that this request
      has not been cryptographically verified. Please be sure it came from a trusted
      source or that you have verified the request checksum with the sender.
      
      Request subject, to be signed as a server certificate for 1080 days:
      
      subject=
          commonName                = server
      
      
      Type the word 'yes' to continue, or any other input to abort.
        Confirm request details: yes
      

      If you encrypted your CA key, you’ll be prompted for your password at this point.

      Next, transfer the signed certificate back to your VPN server using a secure method:

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

      Before logging out of your CA machine, transfer the ca.crt file to your server as well:

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

      Next, log back into your OpenVPN server and copy the server.crt and ca.crt files into your /etc/openvpn/ directory:

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

      Then navigate to your EasyRSA directory:

      From there, create a strong Diffie-Hellman key to use during key exchange by typing:

      This may take a few minutes to complete. Once it does, generate an HMAC signature to strengthen the server's TLS integrity verification capabilities:

      • sudo openvpn --genkey --secret ta.key

      When the command finishes, copy the two new files to your /etc/openvpn/ directory:

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

      With that, all the certificate and key files needed by your server have been generated. You’re ready to create the corresponding certificates and keys which your client machine will use to access your OpenVPN server.

      Step 4 — 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 server. The benefit of this is that we can create a script which 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 ~/EasyRSA-v3.0.6/
      • ./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 machine using a secure method:

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

      Log in to your CA machine, navigate to the EasyRSA directory, and import the certificate request:

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

      Then sign the request 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

      At the prompt, 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

      SSH back into your OpenVPN server and 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:

      • sudo cp ~/EasyRSA-v3.0.6/ta.key ~/client-configs/keys/
      • sudo cp /etc/openvpn/ca.crt ~/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 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 on your server.

      Step 5 — Configuring the OpenVPN Service

      Now that both your client and server’s certificates and keys have been generated, you can begin configuring the OpenVPN service to use these credentials.

      Start by copying a sample OpenVPN configuration file into the configuration directory and then extract it in order to use it as a basis for your setup:

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

      Open the server configuration file in your preferred text editor:

      • sudo nano /etc/openvpn/server.conf

      Find the HMAC section by looking for the tls-auth directive. This line should already be uncommented, but if isn’t then remove the ";" to uncomment it. Below this line, add the key-direction parameter, set to "0":

      /etc/openvpn/server.conf

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

      Next, find the section on cryptographic ciphers by looking for the commented out cipher lines. The AES-256-CBC cipher offers a good level of encryption and is well supported. Again, this line should already be uncommented, but if it isn’t then just remove the ";" preceding it:

      /etc/openvpn/server.conf

      cipher AES-256-CBC
      

      Below this, 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 the Diffie-Hellman parameters. Because of some recent changes made to EasyRSA, the filename for the Diffie-Hellman key may be different than what is listed in the example server configuration file. If necessary, change the file name listed here by removing the 2048 so it aligns with the key you generated in the previous step:

      /etc/openvpn/server.conf

      dh dh.pem
      

      Finally, find the user and group settings and remove the ";" at the beginning of each to uncomment these lines:

      /etc/openvpn/server.conf

      user nobody
      group nogroup
      

      The changes you’ve made to the sample server.conf file up to this point are necessary in order for OpenVPN to function. The changes outlined below are optional, though they too are needed for many common use cases.

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

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

      There are a few directives in the server.conf file which you must change in order to enable this functionality. Find the redirect-gateway section and remove the semicolon ";" from the beginning of the redirect-gateway line to uncomment it:

      /etc/openvpn/server.conf

      push "redirect-gateway def1 bypass-dhcp"
      

      Just below this, find the dhcp-option section. Again, remove the ";" from in front 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"
      

      This will assist clients in reconfiguring their DNS settings to use the VPN tunnel for 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.

      /etc/openvpn/server.conf

      # Optional!
      port 443
      

      Oftentimes, the protocol is restricted to that port as well. If so, change proto 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:

      /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 two settings as their defaults.

      (Optional) Point to Non-Default Credentials

      If you selected a different name during the ./build-key-server command earlier, modify the cert and key lines that you see to 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.

      After going through and making whatever changes to your server’s OpenVPN configuration are required for your specific use case, you can begin making some changes to your server’s networking.

      Step 6 — Adjusting the 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.

      Adjust your server’s default IP forwarding setting by modifying the /etc/sysctl.conf file:

      • sudo nano /etc/sysctl.conf

      Inside, look for the commented line that sets net.ipv4.ip_forward. Remove the "#" character from the beginning of the line to uncomment this setting:

      /etc/sysctl.conf

      net.ipv4.ip_forward=1
      

      Save and close the file when you are finished.

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

      Output

      net.ipv4.ip_forward = 1

      If you followed the Debian 10 initial server setup guide listed in the prerequisites, you should have a UFW firewall in place. Regardless of whether you use the firewall to block unwanted traffic (which you almost always should do), for this guide you need a firewall to manipulate some of the traffic coming into the server. Some of the firewall rules must be modified to enable masquerading, an iptables concept that provides on-the-fly dynamic network address translation (NAT) to correctly route client connections.

      Before opening the firewall configuration file to add the masquerading rules, you must first find the public network interface of your machine. To do this, type:

      Your public interface is the string found within this command’s output that follows the word "dev". For example, this result shows the interface named wlp11s0, which is highlighted below:

      Output

      default via 203.0.113.1 dev eth0 proto static

      When you have the interface associated with your default route, open the /etc/ufw/before.rules file to add the relevant configuration:

      • sudo nano /etc/ufw/before.rules

      UFW rules are typically added using the ufw command. Rules listed in the before.rules file, though, are read and put into place before the conventional UFW rules are loaded. Towards the top of the file, add the highlighted lines below. This will set the default policy for the POSTROUTING chain in the nat table and masquerade any traffic coming from the VPN. Remember to replace wlp11s0 in the -A POSTROUTING line below with the interface you found in the above command:

      /etc/ufw/before.rules

      #
      # rules.before
      #
      # Rules that should be run before the ufw command line added rules. Custom
      # rules should be added to one of these chains:
      #   ufw-before-input
      #   ufw-before-output
      #   ufw-before-forward
      #
      
      # START OPENVPN RULES
      # NAT table rules
      *nat
      :POSTROUTING ACCEPT [0:0] 
      # Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
      -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
      COMMIT
      # END OPENVPN RULES
      
      # Don't delete these required lines, otherwise there will be errors
      *filter
      . . .
      

      Save and close the file when you are finished.

      Next, you need to tell UFW to allow forwarded packets by default as well. To do this, open the /etc/default/ufw file:

      • sudo nano /etc/default/ufw

      Inside, find the DEFAULT_FORWARD_POLICY directive and change the value from DROP to ACCEPT:

      /etc/default/ufw

      DEFAULT_FORWARD_POLICY="ACCEPT"
      

      Save and close the file when you are finished.

      Next, adjust the firewall itself to allow traffic to OpenVPN. If you did not change the port and protocol in the /etc/openvpn/server.conf file, you will need to open up UDP traffic to port 1194. If you modified the port and/or protocol, substitute the values you selected here.

      Also, in case you didn't add the SSH port when completing the prerequisite tutorial, add it here as well:

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

      After adding those rules, disable and re-enable UFW to restart it and load the changes from all of the files you've modified:

      • sudo ufw disable
      • sudo ufw enable

      Your server is now configured to correctly handle OpenVPN traffic.

      Step 7 — Starting and Enabling the OpenVPN Service

      You're finally ready to start the OpenVPN service on your server. This is done using the systemd utility systemctl.

      Start the OpenVPN server by specifying your configuration file name as an instance variable after the systemd unit file name. The configuration file for your server is called /etc/openvpn/server.conf, so add @server to end of your unit file when calling it:

      • sudo systemctl start openvpn@server

      Double-check that the service has started successfully by typing:

      • sudo systemctl status openvpn@server

      If everything went well, your output will look something like this:

      Output

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

      You can also check that the OpenVPN tun0 interface is available by typing:

      This will output a configured interface:

      Output

      3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever inet6 fe80::dd60:3a78:b0ca:1659/64 scope link stable-privacy valid_lft forever preferred_lft forever

      After starting the service, enable it so that it starts automatically at boot:

      • sudo systemctl enable openvpn@server

      Your OpenVPN service is now up and running. Before you can start using it, though, you must first create a configuration file for the client machine. This tutorial already went over how to create certificate/key pairs for clients, and in the next step we will demonstrate how to create an infrastructure that will generate client configuration files easily.

      Step 8 — 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/examples/sample-config-files/client.conf ~/client-configs/base.conf

      Open this new file in your 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 ";" at the beginning of each line:

      ~/client-configs/base.conf

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

      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:

      ~/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.conf file:

      ~/client-configs/base.conf

      cipher AES-256-CBC
      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, create a simple 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, making sure to change sammy to that of your server’s non-root user account:

      ~/client-configs/make_config.sh

      #!/bin/bash
      
      # First argument: Client identifier
      
      KEY_DIR=/home/sammy/client-configs/keys
      OUTPUT_DIR=/home/sammy/client-configs/files
      BASE_CONFIG=/home/sammy/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
      

      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 this is that if you ever need to add a client in the future, you can just run this script to quickly create the 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 9 — 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 4. 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
      • sudo ./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 using the client1.ovpn example which you can run from your local computer (macOS or Linux). It places the .ovpn file in your home directory:

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

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

      Step 10 — 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 see 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 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 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 /sdcard/Download/) and select the file. The app will make a note that the profile was imported.

      The OpenVPN Android app selecting VPN profile to import

      Connecting

      To connect, simply tap the Connect button. You'll be asked if you trust the OpenVPN application. Choose OK to initiate the connection. To disconnect from the VPN, go back to the OpenVPN app and choose Disconnect.

      The OpenVPN Android app ready to connect to the VPN

      Step 11 — 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 5.

      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 12 — Revoking Client Certificates

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

      To do so, navigate to the EasyRSA directory on your CA machine:

      Next, run the easyrsa script with the revoke option, followed by the client name you wish to revoke:

      This will ask you to confirm the revocation by entering 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

      After confirming the action, the CA will fully revoke the client’s certificate. However, your OpenVPN server currently has no way to check whether any clients’ certificates have been revoked and the client will still have access to the VPN. To correct this, create a certificate revocation list (CRL) on your CA machine:

      This will generate a file called crl.pem. Securely transfer this file to your OpenVPN server:

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

      On your OpenVPN server, copy this file into your /etc/openvpn/ directory:

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

      Next, open the OpenVPN server configuration file:

      • sudo nano /etc/openvpn/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.conf

      crl-verify crl.pem
      

      Save and close the file.

      Finally, restart OpenVPN to implement the certificate revocation:

      • sudo systemctl restart openvpn@server

      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 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 are now securely traversing the internet protecting your identity, location, and traffic from snoopers and censors.

      To configure more clients, you only need to follow steps 4 and 9-11 for each additional device. To revoke access to clients, just follow step 12.



      Source link