Guia VPN Parte 1 – OpenVPN RoadWarrior

may 23

Guia VPN Parte 1 – OpenVPN RoadWarrior
Hola amigos, hace mucho tiempo que no escribo por estos lados, espero que ahora pueda tener un poco más de tiempo para hacerlo, voy a volver con una serie de tutoriales sobre el servicio VPN, vamos a partir por lo más básico, RoadWarrior con OpenVPN, RoadWarrior con PPTP para poder usar el cliente nativo de Windows, luego tuneles red-red y finalmente un bridge transparente entre redes.
Una VPN es una conexión de red virtual que se realiza entre dos puntos. Un equipo hacia una red remota, dos redes remotas o hacer un bridge entre dos redes. Es una forma segura de poder trabajar de forma remota, ya que los datos que pasan por este túnel están -por lo general- encriptados.
Existen para esto una serie de programas que nos ayudarán a configurar este tipo de túneles: OpenVPN, PPTP, L2TP, VPN-1, SSH. En esta serie de guías vamos a utilizar OpenVPN y PPTP.
Ahora instalaremos un servidor VPN Standalone, siguiendo el siguiente diagrama, esta modalidad es conocida como RoadWarrior y nos servirá para conectar una serie de clientes remotos y móviles hacia un único concentrado (Nuestro Servidor VPN), tengan en cuenta que este servidor puede ser el mismo firewall el cual nos unirá a nuestra red LAN -por ejemplo- estas funcionalidades las iremos agregando más adelante en la guía.

Manos a la obra. Lo primero que debemos hacer es instalar OpenVPN, para los efectos de esta guía utilizaré Debian Lenny y apt como administrador de paquetes pero puedes replicar este proceso para cualquier otro sistema.
$ apt-get install openvpn
Como vimos anteriormente OpenVPN es un servicio de tunel VPN encriptado, esta encriptación la realiza utilizando openssl, lo que debemos hacer ahora es generar los certificados de seguridad que nos permitirán realizar la encriptación de los datos.
Tenemos la opcion de utilizar un certificado de seguridad que hayamos adquirido con algun vendedor (Cl Cert, Verisign, etc), si este es tu caso, no es necesario realizar el siguiente paso.
Por defecto tenemos que podemos crear certificados de seguridad de 1024 bits, usando md5 y con una duración de 10 años. Podemos cambiar estos parámetros cambiándolos en el archivo openssl.cnf y vars del directorio /usr/share/doc/openvpn/examples/easy-rsa/2.0
Entramos al directorio
$ cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
Configuramos los parametros generales
$ source ./vars
$ ./clean-all
Creamos nuestro certificado raíz (CA), si ya poseen un certificado raíz válido, no es necesario crearlo y sólo deberán copiarlo (junto a su llave) al directorio keys bajo el nombre ca.crt
$ ./build-ca
Al hacer esto nos pedirá algunos datos, los llenamos con los que consideremos necesarios
Generating a 1024 bit RSA private key
….++++++
……++++++
writing new private key to ‘ca.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [US]:CL
State or Province Name (full name) [CA]:RM
Locality Name (eg, city) [SanFrancisco]:Santiago
Organization Name (eg, company) [Fort-Funston]:Spooky
Organizational Unit Name (eg, section) []:Tutoriales
Common Name (eg, your name or your server’s hostname) [Fort-Funston CA]:ssl.spooky.cl
Email Address [me@myhost.mydomain]:vpn@spooky.cl
Ya tenemos nuestro certificado raíz creado. Este mismo certificado te servirá para firmar otros para ser instalados en distintos servicios (Apache, Correo, FTP, etc).
Ahora tenemos que crear el certificado cliente del servidor (el parametro debe ser distinto al Common Name del certificado raíz).
$ ./build-key-server guia-vpn.spooky.cl
Cuando nos pida los datos debemos poner los mismos datos que pusimos al crear el certificado raiz (CL, RM, Santiago, etc), nos pedirá ademas una contraseña, debemos escribir la contraseña más complicada que se nos ocurra. Finalmente nos pedirá confirmar los datos y hacer commit al certificado que acabamos de crear. Si no terminamos con lo siguiente es por que algo nos faltó.
Certificate is to be certified until May 8 23:33:44 2020 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Ahora tenemos que crear nuestra llave Diffie Hellman (esto es necesario para crear el canal SSL para nuestro túnel VPN) esto puede demorar un poco.
$ ./build-dh
Ahora tenemos todo lo necesario para comenzar la configuración de nuestro servidor. Debemos copiar los siguientes archivos al directorio /etc/openvpn
$ cd keys
$ cp dh1024.pem /etc/openvpn/
$ cp ca.crt /etc/openvpn/
$ cp guia-vpn.spooky.cl.crt /etc/openvpn/
$ cp guia-vpn.spooky.cl.key /etc/openvpn/
Ahora tenemos que crear el archivo server.conf en el directorio /etc/openvpn/

$ nano /etc/openvpn/server.conf

# Puerto por defecto
port 1194
# Protocolo por defecto
proto udp
# Tipo de dispositivo virtual a utilizar (roadwarrior usa tun)
dev tun
# Le dice que no reinicie la interfaz de red
persist-tun
# Le dice que no lea la llave ante un reinicio
persist-key
# Certificado Raiz
ca ca.crt
# Certificado de Servidor
cert guia-vpn.spooky.cl.crt
# Llave privada del servidor
key guia-vpn.spooky.cl.key
# Llave Algoritmo DH
dh dh1024.pem

# Nombre de Red y máscara para la red VPN (El servidor por defecto es el .1)
server 10.1.5.0 255.255.255.0
#Archivo donde guardará un cache con las direcciones IP de clientes
ifconfig-pool-persist ipp.txt
#Le dice que los clientes se pueden comunicar entre si
client-to-client
#Mensajes para evitar cierre de conexion (Uno cada 10 segundos y cierre de conexion luego de 120 segundos de inactividad)
keepalive 10 120
# Modo de compresión
comp-lzo
# Usuario
user nobody
# Grupo
group nogroup
# archivo log
status /var/log/vpn-status.log
#Cantidad de informacion para guardar en el log (de 0 a 11)
verb 4
Ahora que tenemos lista la configuración podemos iniciar el servicio vpn
$ /etc/init.d/openvpn start
Sólo nos queda crear los archivos de los clientes VPN. Volvemos al directorio easy-rsa/2.0 y creamos al cliente
$ cd ..
$ ./build-key mariofix.spooky.cl
Recuerden que cuando les pidan los datos, estos deben ser los mismos que pusimos cuando creamos el certificado Raíz.
En lo personal me gusta utilizar nombres de dominio para los clientes, pero esto es una decisión personal, puede ser perfectamente ./build-key mariofix
Si cerraron la sesión y desean crear otro cliente deben ejecutar primero source ./vars y luego creen la llave.
$ source ./vars
$ ./build-key mariofix.spooky.cl
Una vez ejecutado el comando, debemos copiar los siguientes archivos hacia el cliente (usando ftp, scp o algún protocolo de transferencia de archivos) ca.crt, mariofix.spooky.cl.key, mariofix.spooky.cl.crt

Al cliente tambien tenemos que instalarle OpenVPN pero como será un cliente, no es necesario pasar por la creacion de los certificados de seguridad, solo basta con instalarlo y crear el archivo /etc/openvpn/guia-vpn.conf con el siguiente contenido
$ nano /etc/openvpn/guia-vpn.conf
# Somos cliente
client
# Protocolo por defecto
proto udp
# Tipo de dispositivo virtual a utilizar (roadwarrior usa tun)
dev tun
# Direccion y puerto del servidor vpn
remote guia-vpn.spooky.cl 1194
# Si hay problemas de resolucion, intenta infinitamente
resolv-retry infinite
# No hace binding de un puerto local en particular (no sabemos cual esta libre)
nobind
# Le dice que no reinicie la interfaz de red
persist-tun
# Le dice que no lea la llave ante un reinicio
persist-key
# Certificado Raiz (el que copiamos)
ca “ca.crt”
# Certificado cliente (el que copiamos)
cert “mariofix.spooky.cl.crt”
# Llave cliente (el que copiamos)
key “mariofix.spooky.cl.key”
# Modo de compresion
comp-lzo
#Cantidad de informacion para guardar en el log (de 0 a 11)
verb 4
#Archivo log
status /var/log/guia-vpn.log
#Mensajes para evitar cierre de conexion (Uno cada 10 segundos y cierre de conexion luego de 120 segundos de inactividad)
keepalive 10 120
Luego iniciamos openvpn con una de las siguientes opciones
Opción 1 (En sistemas SysV -Debian, RedHat, etc.)
$ /etc/init.d/openvpn start
Opción 2 (en Linux/Windows)
$ openvpn –confg /etc/openvpn/guia-vpn.conf
Opción 3 (en Windows)
Descargar e instalar OpenVPN-GUI desde http://openvpn.se
Opcion 4 (Ubuntu)
$ sudo aptitude install network-manager-openvpn
Clic derecho en el notificador de Red -> Editar las conexiones -> VPN -> Añadir -> OpenVPN
Y configuramos lo que nos pidan ahí (Habiliten la compresión LZO).

2 comments

  1. gabriel /

    malisimo

  2. gracias!!

Leave a Reply