¿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.
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.
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.
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:
- cd ~/EasyRSA-3.0.4/
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:
- cp vars.example vars
Abra este archivo nuevo con su editor de texto preferido:
- nano vars
Encuentre los ajustes que establecen los valores de campos predeterminados para nuevos certificados. El aspecto será similar a este:
. . .
#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:
. . .
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:
- ./easyrsa init-pki
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.
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:
- cd EasyRSA-3.0.4/
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:
- ./easyrsa init-pki
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:
- cd EasyRSA-3.0.4/
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:
- cd EasyRSA-3.0.4/
Desde ahí, cree una clave segura Diffie-Hellman para usarla durante el intercambio de claves escribiendo:
- ./easyrsa gen-dh
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.
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:
OutputType 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.
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:
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:
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:
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:
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:
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.
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:
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:
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.
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.
# Optional!
port 443
Algunas veces, el protocolo se limita a ese puerto también. Si esto sucede, cambie proto
de UDP a TCP:
# 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:
# 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.
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:
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.
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:
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:
- sudo sysctl -p
Outputnet.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:
- ip route | grep default
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:
Outputdefault 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:
#
# 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
:
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.
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:
- ip addr show tun0
Esto dará como resultado una interfaz configurada:
Output4: 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.
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:
. . .
# 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:
proto udp
Luego, elimine los comentarios de las directivas user
y group
quitando “;” al inicio de cada línea:
# 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:
# 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:
# 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
:
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:
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.
# 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:
#!/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.
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
Outputclient1.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:
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ó.
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 Files\OpenVPN\config
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 Sí. 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.
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.
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
Verifique si su distribución incluye una secuencia de comandos /etc/openvpn/update-resolv-conf
:
- ls /etc/openvpn
Outputupdate-resolv-conf
A continuación, edite el archivo de configuración de cliente de OpenVPN que transfirió:
- nano client1.ovpn
Si pudo encontrar un archivo update-resolv-conf
, elimine los comentarios de las tres líneas de agregó para modificar los ajustes de DNS:
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:
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.
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.
.
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.
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.
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.
.
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.
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.
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.
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:
- cd EasyRSA-3.0.4/
Luego, ejecute la secuencia de comandos easyrsa
con la opción revoke
seguida del nombre del cliente que desee rechazar:
- ./easyrsa revoke client2
Con esto, se solicitará que confirme el rechazo ingresando yes
:
OutputPlease confirm you wish to revoke the certificate with the following subject:
subject=
commonName = client2
Type the word 'yes' to continue, or any other input to abort.
Continue with revocation: yes
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:
- ./easyrsa gen-crl
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:
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:
./easyrsa revoke nombre_cliente
.crl.pem
nuevo a su servidor de OpenVPN y cópielo al directorio /etc/openvpn
para sobrescribir la lista anterior.Puede usar este proceso para rechazar cualquier certificado emitido anteriormente para su servidor.
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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Buenas tardes. Al ejecutar el comando “sudo ./make_config.sh client1” me arroja el siguiente error: “/make_config.sh: línea 1: !/bin/bash: No existe el fichero o el directorio ./make_config.sh: línea 9: /root/client-configs/files/ronald.ovpn: No existe el fichero o el directorio”.
Seguí todos los pasos al pie de la letra. Agradecería sus comentarios.
Saludos cordiales.