OpenVPN es sin lugar a dudas es la mejor forma cómo podemos establecer una conexión de manera segura a una red a través de Internet.
OpenVPN es un recurso VPN de código abierto que permite que como usuarios enmascaremos nuestra navegación para evitar ser víctimas del robo de información en la red. Estos son aspectos muy importantes a nivel de seguridad que debemos tener en cuenta y en esta oportunidad vamos a analizar el proceso de configuración de OpenVPN en un entorno Ubuntu 16.04.
- Proteger el tráfico durante el proceso de navegación en la red.
- Funciona como un túnel sobre cualquier dirección IP usando un solo puerto TCP o UDP.
- Configurar múltiples servidores VPN escalables.
- Usar funciones de cifrado y autenticación para proteger el tráfico.
- Intercambio de claves dinámico.
- Crear puentes de Ethernet seguros.
- Administración de VPN usando una interfaz gráfica desde entornos Windows y Mac OS.
- Usuario root
- Droplet Ubuntu 16.04
1. Cómo instalar Actualizar e instalar OpenVPN en Ubuntu 16.04
En primer lugar, actualizaremos Ubuntu 16.04 usando el siguiente comando:
sudo apt-get update
Una vez actualizado el sistema procedemos a instalar OpenVPN usando el siguiente comando. Aceptamos la descarga y respectiva instalación de los paquetes de OpenVPN.
sudo apt-get install openvpn easy-rsa
De este modo hemos instalado OpenVPN en Ubuntu 16 y ahora será necesario realizar el proceso de configuración.
2. Cómo establecer el directorio CA en Ubuntu 16.04
El directorio CA (Certificate Authority- Certificado de Autoridad) es el medio por el cual podemos emitir certificados de confianza ya que OpenVPN es una VPN que usa los protocolos TLS/SSL.
Para esto copiaremos las plantillas de easy-rsa en nuestro directorio home usando el comando make-cadir, ingresaremos lo siguiente en la terminal de Ubuntu 16.04:
make-cadir ~/openvpn-ca
Ahora accederemos a la ruta creada anteriormente:
cd ~/openvpn-ca
3. configurar las variables de los certificados de autoridad en Ubuntu 16.04
Es necesario que configuremos los valores que serán usados por los certificados de autoridad o CA y para ello debemos editar el archivo vars dentro del directorio.
Podemos abrir este archivo usando el editor preferido, en este caso será nano:
sudo nano vars
En este archivo encontramos las variables que podemos ajustar y configurar para determinar la forma en que serán creados los certificados de autoridad. Nos desplazaremos a la parte inferior del archivo hasta encontrar estas variables:
export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain" export KEY_OU="MyOrganizationalUnit"
Editamos estos valores en base a los parámetros que sean requeridos. Del mismo modo editaremos la línea export KEY_NAME asignado el nombre adecuado, en este caso la hemos llamado server.
Guardamos los cambios usando la combinación:
Ctrl + O
y salimos del editor usando
Ctrl + X
4. Cómo crear el certificado de autoridad en Ubuntu 16.04
Con estos valores definidos procedemos a la creación del certificado de autoridad.
Una vez estemos en el directorio ejecutaremos el siguiente comando:
source vars
Procedemos a ejecutar el comando indicado para tener un entorno limpio:
./clean-all
Ahora crearemos el certificado raíz CA usando el siguiente comando:
./build-ca
Podremos ver una serie de preguntas las cuales ya hemos configurado en el archivo vars por lo cual solo debemos pulsar Enter para que se completen de forma automática. De esta forma hemos creado el certificado que será útil para el resto del proceso.
5. Cómo crear certificado del servidor, clave y archivos encriptados en Ubuntu 16.04
En este punto vamos a crear el certificado del servidor y sus respectivas claves.
Para esto ejecutaremos el siguiente comando:
./build-key-server serverDebemos reemplazar el nombre servidor por el asignado en la línea export KEY_NAME del archivo vars). De forma automática se emitirán los valores ya definidos en el archivo vars por lo cual pulsamos Enter.
Podemos ver que el certificado se ha creado de forma correcta.
A continuación, crearemos otros parámetros como por ejemplo, el cifrado Diffie-Hellman el cual podrá ser usado durante el intercambio de claves, para eso usaremos la siguiente línea.
./build-dh
Este proceso toma algunos minutos en ser completado. También podemos generar una firma HMAC la cual nos permite mejorar los niveles de integridad TLS del servidor, para ello ingresamos lo siguiente.
openvpn --genkey --secret keys/ta.key
6. Cómo crear certificado del servidor, clave y archivos encriptados en Ubuntu 16.04
Este proceso puede realizarse en la maquina cliente y posteriormente firmarse usando el servidor CA pero esta vez lo ejecutaremos directamente para ahorrar tiempo.Accedemos nuevamente, si no lo estamos, al directorio ~/openvpn-ca y allí ejecutaremos el comando source vars.
Ahora ingresaremos la siguiente línea donde definimos el nombre del cliente:
./build-key solvetic1Debemos pulsar Enter en las respectivas preguntas ya configuradas anteriormente
Este comando crea credenciales sin requerir contraseña, si por seguridad deseamos establecer una credencial con contraseña debemos ejecutar la siguiente línea:
./build-key-pass (nombre cliente)
7. Cómo configurar el servicio OpenVPN en Ubuntu 16.04
El siguiente paso consiste en configurar el servicio OpenVPN para que todo funcione de la forma deseada. En primer lugar copiaremos los archivos que hemos creado en la ruta ~/openvpn-ca hacia la ruta /etc/openvpn, recordemos que se han creado los certificados CA, las claves, el archivo Diffie-Hellman y el archivo HMAC.
Para esto accederemos al siguiente directorio:
cd ~/openvpn-ca/keys
Una vez allí ejecutaremos la siguiente línea para el proceso de copia:
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
Ahora debemos copiar y descomprimir un archivo de configuración de OpenVPN en dicho directorio para usarlo como base. Para esto ingresaremos lo siguiente:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
8. Cómo Ajustar de la configuración de OpenVPN en Ubuntu 16.04
Una vez tengamos estos archivos en la ruta necesario procedemos a ajustar la configuración de OpenVPN accediendo al archivo server.conf:
sudo nano /etc/openvpn/server.conf
Allí realizaremos los siguientes ajustes. Vamos a la línea tls-auth ta.key 0 # This file is secret y debajo de ella añadiremos lo siguiente.
key-direction 0
En la línea cipher AES-128-CBC removemos el símbolo ; ubicado al inicio de la misma y debajo de esta línea ingresaremos lo siguiente.
auth SHA256
Esto es con el fin de crear una línea de autenticación para elegir el algoritmo de mensajes. En las líneas user y group removemos el símbolo de ; ubicado al inicio.
Como alternativas opcionales podemos agregar lo siguiente.
Para esto realizaremos los siguientes cambios en el archivo anterior: Descomentamos las líneas: push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220"
En primer lugar habilitaremos el reenvío del direccionamiento IP, es decir, que el servidor reenvíe el tráfico, para ello debemos editar el archivo /etc/sysctl.conf:
sudo nano /etc/sysctl.confDentro del archivo ubicaremos la línea net.ipv4.ip_forward=1 y la descomentamos removiendo el símbolo # ubicado al inicio de la misma.
Guardamos los cambios y salimos del archivo. Para que todos los cambios sean aplicados en la sesión actual ejecutaremos el siguiente comando.
sudo sysctl –p
ip route | grep default
En este ejemplo la interfaz de red pública es enp0s3. Ahora accederemos al archivo de configuración de reglas para su ajuste, ingresamos lo siguiente:
sudo nano /etc/ufw/before.rulesSe desplegará la siguiente ventana.
En este archivo se administra la configuración que debe estar antepuesta antes de ser ejecutadas las reglas UFW típicas. En la parte superior ingresaremos las siguientes líneas las cuales establecerán la configuración POSTROUTING:
# START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to (interfaz) -A POSTROUTING -s 10.8.0.0/8 -o (interfaz) -j MASQUERADE COMMIT # END OPENVPN RULES
Es importante que en el campo enp0s3 establezcamos el nombre correcto de la interfaz a usar. Guardamos los cambios usando la combinación:
Ctrl + O
y salimos del editor usando:
Ctrl + X
Ahora debemos permitir que el UFW acepte los paquetes de forma predeterminada, para ello ejecutaremos el siguiente comando:
sudo nano /etc/default/ufwEn la línea DEFAULT_FORWARD_POLICY modificamos el termino DROP por ACCEPT.
Guardamos los cambios.
sudo ufw allow 1194/udp
También añadimos el puerto SSH:
sudo ufw allow OpenSSH
Para cargar los cambios usaremos los siguientes comandos.
sudo ufw disable sudo ufw enablePodemos comprobar que las reglas han sido añadidas usando el comando sudo ufw status:
9. Cómo iniciar y habilitar el servicio de OpenVPN en Ubuntu 16.04
Con estos valores ya definidos estamos en condición de arrancar el servicio de OpenVPN en Ubuntu y para ello será necesario especificar el nombre que hemos asignado.
Para esto ejecutaremos la siguiente línea:
sudo systemctl start openvpn@server
Posteriormente validamos el estado de OpenVPN usando la línea:
sudo systemctl status openvpn@server
Podemos observar que su estado es correcto y se ha iniciado de forma satisfactoria. Pulsamos la letra q para retornar a la línea de comandos. Del mismo modo podemos verificar la interfaz tun0 de OpenVPN ingresando lo siguiente:
ip addr show tun0
Para que el servicio de OpenVPN se ejecute de forma automática en cada inicio de sesión debemos ingresar el siguiente parámetro:
sudo systemctl enable openvpn@server
10. Cómo crear la estructura del cliente de OpenVPN en Ubuntu 16.04
El siguiente paso consiste en crear los archivos de configuración del cliente, para ello crearemos esta estructura dentro del directorio personal ejecutando lo siguiente:
mkdir -p ~/client-configs/files
Bloquearemos los permisos en dicha ruta ya que allí se encuentran las claves creadas, usaremos la siguiente línea:
chmod 700 ~/client-configs/files
11. Cómo crear una base de configuración de OpenVPN en Ubuntu 16.04
En este punto copiaremos una base de configuración de cliente en el directorio para tenerla como base, ejecutamos lo siguiente:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Este archivo lo abrimos con nuestro editor preferido:
sudo nano ~/client-configs/base.conf
Allí localizamos la línea remote e ingresaremos la dirección IP del servidor la cual esta seguida del puerto UDP 1194:
En este mismo archivo realizaremos los siguientes cambios:
- Descomentamos las líneas user y group removiendo el signo ;
- Comentamos, añadiendo el símbolo #, a las líneas ca, cert y key
- Agregamos las líneas cipher AES-128-CBC y auth SHA256
- Debajo de la línea anterior escribimos key-direction 1
- Al final del archivo agregamos las siguientes líneas:
script-security 2 / # up /etc/openvpn/update-resolv-conf / # down /etc/openvpn/update-resolv-conf
Si no os funciona, probar esta otra forma de comando script-security:
script-security 2 /up /etc/openvpn/update-resolv-conf /down /etc/openvpn/update-resolv-conf
Guardamos los cambios usando la combinación:
Ctrl + O
y salimos del editor usando:
Ctrl + X
12. Cómo crear un script para la configuración de OpenVPN en Ubuntu 16.04
Este script se encargará de compilar los eventos más importantes de los archivos de certificado, clave y cifrado en la ruta ~ / client-configs / files. Crearemos un archivo llamado make_config.sh usando la siguiente sintaxis:
sudo nano ~/client-configs/make_config.sh
Se abrirá un archivo en blanco donde agregaremos las siguientes líneas:
#!/bin/bash # First argument: Client identifier KEY_DIR=~/openvpn-ca/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
Guardamos los cambios y salimos del editor. Este archivo lo haremos ejecutable ingresando lo siguiente:
sudo chmod 700 ~/client-configs/make_config.sh
13. Cómo los archivos de configuración del cliente de OpenVPN en Ubuntu 16.04
El siguiente paso consiste en crear los archivos que serán de configuración para el cliente, el cual hemos creado como Solvetic1.
Para esto ingresaremos las siguientes líneas:
cd ~/client-configs ./make_config.sh client1 [plain]Paso 2[/plain] Podemos ver el contenido de dicha carpeta usando el comando ls: ls ~/client-configs/files
Vemos que allí está el cliente Solvetic1 creado de forma correcta.
14. Cómo transferir la configuración OpenVPN a los equipos cliente OpenVPN en Ubuntu 16.04
Una vez tengamos todo el proceso de configuración realizado en Ubuntu 16 es hora de transferir el archivo Solvetic1.ovpn a los respectivos dispositivos como equipos o dispositivos móviles.
Podemos usar el cliente de transferencia que deseemos en base al sistema que usemos, un ejemplo de transferencia puede ser el siguiente en un entorno Fedora 25:
sftp solvetic@192.168.0.10:client-configs/files/Solvetic1.ovpn ~/
En este ejemplo usaremos Windows y el cliente Filezilla:
15. Cómo instalar y ejecutar OpenVPN en Ubuntu 16.04
OpenVPN está disponible para Windows, Linux, Mac OS, Android, FreeBSD, etc. En el siguiente enlace podemos descargar la versión adecuada de OpenVPN:
A continuación, veremos cómo ejecutar OpenVPN en los diversos sistemas operativos.
C:\Program Files\OpenVPN\config
Desde allí podremos dar clic derecho sobre el archivo y seleccionar la opción Start OpenVPN on this config file
De esta forma nos conectaremos con el servidor OpenVPN.
En primer lugar actualizamos el sistema e instalamos OpenVPN usando los siguientes comandos:
sudo apt-get update
sudo apt-get install openvpnSi usamos CentOS usaremos los siguientes comandos:
sudo yum install epel-release sudo yum install openvpnUna vez instalado OpenVPN ejecutaremos el siguiente comando:
ls /etc/openvpnEl siguiente paso consiste en editar el archivo .ovpn transferido con el editor deseado.
sudo nano archivo.ovpnEn el archivo abierto debemos descomentar las siguientes líneas:
script-security 2 up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conAhora podremos conectarnos a la VPN usando la siguiente sintaxis:
sudo openvpn --config Archivo.ovpn
Al ejecutar la aplicación en la barra de títulos veremos el icono correspondiente, pulsamos allí y seleccionamos Connect y elegimos el cliente que tengamos configurado, por ejemplo, Solvetic1.
El archivo .ovpn debemos transferirlo mediante USB al teléfono para su uso.
Al ejecutar la aplicación vamos al menú y seleccionamos la ubicación donde tenemos el archivo .ovpn y desde allí lo importamos. Para conectarnos pulsamos en el botón Connect.
De cualquiera de las formas indicadas el objetivo es acceder vía VPN a Ubuntu 16.04 disfrutando de las ventajas ofrecidas por OpenVPN.
Como ves configurar un servidor OpenVPN en Ubuntu es algo complejo, pero con este completo manual tienes paso a paso todo lo que debes hacer para ponerlo apunto en este sistema. Si además de Ubuntu usas otras distros, aquí te dejamos cómo configurar e instalar un servidor OpenVPN en Debian.