Continuando con la serie de artículos de VPN, ahora instalamos OpenVPN en el servidor Ubuntu 16.04. OpenVPN es un software VPN bien conocido de la compañía del mismo nombre. Es un poco más difícil de configurar que otro software VPN, por lo que nos concentraremos en la configuración del lado del servidor y en la creación de archivos ovpn en este artículo. Esta guía está diseñada para ejecutarse como usuario no root. Si ha iniciado sesión como root, primero comenzamos agregando el usuario no root.
adduser newuser
Luego le damos derechos de sudo e inicia sesión como usuario
usermod -aG sudo newuser
su newuser
Puede omitir esos pasos si ya tiene usuarios no root, y lo más probable es que los tenga.
Ahora ingresado como usuario nuevo o cualquier otro usuario no root, instalaremos openvpn
sudo apt-get install openvpn easy-rsa
Certificados de servidor y cliente
En primer lugar, necesitamos hacer dir para la autoridad de certificación y editar el archivo vars is
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
nano vars
Encuentra las líneas que tienen export KEY_ en ellas y hazlas así
export KEY_COUNTRY="US"
export KEY_PROVINCE="New York State"
export KEY_CITY="New York City"
export KEY_ORG="Linoxide"
export KEY_EMAIL="[email protected]"
export KEY_OU="LinuxGeeks"
También hay una línea llamada KEY_NAME en el mismo archivo, por lo que simplemente pondremos el servidor como nombre
export KEY_NAME="server"
Después de guardar el archivo vars, lo siguiente que escribimos es:
source vars
que debería darle la nota sobre el comando ./clean-all. Por lo tanto, escribamos para asegurarnos de que estamos ejecutando el entorno limpio.
./clean-all
Ahora pasamos a la parte de creación de certificados:
./build-ca
Le hará algunas preguntas, pero dado que editamos vars, los nuevos valores predeterminados deberían estar bien para que pueda presionar Intro en todos los aspectos.
./build-key-server server
Vuelva a entrar, pero no en todos los aspectos esta vez. Cuando te pida poner contraseña, no la pongas, y al final presiona y para crear certificado. El siguiente es Diffie Hellman:
./build-dh
Tomará algún tiempo, así que sea paciente. A continuación, necesitamos la ta.key para mejorar la seguridad del servidor.
openvpn --genkey --secret keys/ta.key
Y luego copiamos todos los archivos relevantes al directorio /etc/openvpn, ya que openvpn solo lee desde allí.
cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
Hemos terminado con el certificado del servidor, por lo que ahora creamos un certificado para client100.
cd ~/openvpn-ca
source vars
./build-key client100
Los valores predeterminados de origen vuelven a estar bien, así que solo presione enter y y al final.
Configuración del servidor
Como punto de partida, copiamos la configuración de muestra con el siguiente comando:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
A continuación, debemos editar server.conf para que nuestro servidor funcione. Puede usar cualquier editor, pero ahora usaremos el comando sed
sudo sed -i 's/;push "redirect-gateway def1 bypass-dhcp"/push "redirect-gateway def1 bypass-dhcp"/g' /etc/openvpn/server.conf
sudo sed -i 's/;push "dhcp-option DNS 208.67.222.222"/push "dhcp-option DNS 208.67.222.222"/g' /etc/openvpn/server.conf
sudo sed -i 's/;push "dhcp-option DNS 208.67.220.220"/push "dhcp-option DNS 208.67.220.220"/g' /etc/openvpn/server.conf
sudo sed -i 's/;user nobody/user nobody/g' /etc/openvpn/server.conf
sudo sed -i 's/;group nogroup/group nogroup/g' /etc/openvpn/server.conf
sudo sed -i 's/;log-append/log-append/g' /etc/openvpn/server.conf
Cosas que hicimos aquí:configuramos todo el tráfico para pasar por OpenVPN, configuramos el grupo y el usuario en ningún grupo y nadie, y configuramos los registros para que vayan a /etc/openvpn/openvpn.log. Después de eso, necesitamos un cambio más sobre ta.key:
sudo nano /etc/openvpn/server.conf
Y encuentra esta línea
tls-auth ta.key 0 # This file is secret
key-direction 0
Eso es todo para server.conf, luego necesitamos habilitar el reenvío de paquetes para nuestro servidor Ubuntu
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sudo sysctl -p
Las reglas de ufw también deben cambiarse para permitir el enmascaramiento, así que agregue esto al principio, antes de *filter
sección
sudo nano /etc/ufw/before.rules
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
Tenga en cuenta que lo más probable es que deba cambiar la parte eth0 para reflejar el nombre real de su interfaz de red orientada a Internet, por lo que lo resalté. A continuación, habilitamos el reenvío en ufw como lo hicimos en sysctl:
sudo sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
Configuramos el cortafuegos
sudo ufw allow 1194/udp
sudo ufw disable
sudo ufw enable
sudo systemctl start openvpn@server
sudo systemctl status -l openvpn
Si todo salió bien, habilite el inicio de openvpn en el arranque
sudo systemctl enable openvpn@server
Configuración del cliente
Con la parte de configuración del cliente, usamos certificados que ya hicimos, por ejemplo client100. También necesitamos archivos de configuración del cliente
mkdir -p ~/client-configs/files
chmod 700 ~/client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
El archivo que copiamos es una configuración básica, por lo que debe editarse.
nano ~/client-configs/base.conf
Y luego busque una línea que diga remoto. Cámbielo también apunte a la dirección IP de su servidor de FQDN.
remote your.serv.ipor.fqdn 1194
Guarde eso, ya que el resto de la edición lo haremos con los comandos sed y echo:
sudo sed -i 's/;user nobody/user nobody/g' ~/client-configs/base.conf
sudo sed -i 's/;group nogroup/group nogroup/g' ~/client-configs/base.conf
sudo sed -i 's/ca ca.crt/#ca ca.crt/g' ~/client-configs/base.conf
sudo sed -i 's/cert client.crt/#cert client.crt/g' ~/client-configs/base.conf
sudo sed -i 's/key client.key/#key client.key/g' ~/client-configs/base.conf
sudo echo key-direction 1 >> ~/client-configs/base.conf
Entonces, ¿qué hicimos aquí? Primero configuramos el usuario y el grupo como nadie y sin grupo. Luego, comentamos las rutas de los certificados, ya que integraremos los certificados en línea en el archivo .ovpn. Luego, agregamos el parámetro de dirección clave 1.
Script para realizar configuraciones de clientes
Para incrustar la configuración del cliente, las claves y los certificados en un solo archivo .ovpn para facilitar la transferencia a clientes remotos, usaremos un script simple. Hagamos
nano ~/client-configs/make_config.sh
Y luego pegue este pastebin allí. Después de guardar esto, necesitamos agregar el bit ejecutable, así que ejecute este comando:
chmod +x ~/client-configs/make_config.sh
Entonces podemos crear fácilmente archivos de configuración
cd ~/client-configs
./make_config.sh client100
ls ~/client-configs/files
La sintaxis del comando es fácil, debe estar dentro del directorio de configuración del cliente y ejecutar el comando con el argumento que dice el nombre del cliente que creó anteriormente. Si necesita más clientes, cree más certificados de cliente con otro nombre y vuelva a ejecutar este comando. Si todo salió bien, en el directorio client-configs/files debería haber archivos ovpn. Debe transferirlos a su cliente o clientes y conectarse. Lo haré con scp, desde mi laptop Fedora hice un comando así
scp [email protected]:/home/newuser/client-configs/files/client100.ovpn /home/miki/Documents/
Desde allí, puede cargarlo en un teléfono Android con un cable USB o a través de AirDroid, en una máquina virtual de Windows o en una Mac. Para el administrador de red de Linux, deberá desensamblar el archivo
Conclusión
Esto es todo acerca de la configuración del servidor, luego necesitaríamos conectarnos desde varios clientes. Para Android podemos usar OpenVPN Connect, para Mac Tunnelblick, para Windows hay OpenVPN del sitio oficial, y para Linux hay administrador de red. En algunos de los siguientes artículos cubriremos todo esto.