Redes privadas virtuales (VPN)

Este artículo fue publicado en la revista Linux+ Noviembre 2007 (Nº 37) (Web de la revista) y que amablemente me han cedido y dado permiso para publicarlo. El artículo está escrito por Fernando González.


Las VPN constituyen uno de los métodos más habituales para aumentar la seguridad en la interconexión de dos redes o varios ordenadores remotos a través de Internet. Mediante este artículo trataremos de dar una breve introducción a lo que son las redes privadas virtuales (VPN en inglés) y mostraremos la instalación y configuración básica de OPENVPN, una de las implementaciones de software abierto de VPN existentes.
Las redes privadas virtuales o VPN consisten básicamente en un sistema de encapsulamiento (tunneling
en inglés) del tráfico entre dos subredes o entre una red y un ordenador remoto, utilizando otra red para el transporte de dicho tráfico (por ejemplo Internet), habitualmente con objeto de cifrar, separar o aislar dicho tráfico específico de la red utilizada para el transporte.
Dicho de otra manera, nos permite unir dos subredes a través de otra red como Internet, de un modo transparente para cualquiera de los elementos de dichas redes de tal manera que parece que formaran parte de la misma red física (Figura 1), y todo ello asegurando la privacidad mediante el cifrado de datos.

¿Para qué sirven las VPN?

Habitualmente las VPN se utilizan para conectar dos subredes distantes geográficamente de una empresa, utilizando para ello la red Internet, lo que supone un importante ahorro en costes comparándolo con lo que supondría por ejemplo una línea punto a punto, o también para que un trabajador de la empresa pueda conectarse desde su ordenador portátil a la red de la oficina principal, utilizando Internet en lugar de una costosa conexión telefónica, todo ello con la máxima seguridad obtenida mediante el cifrado de la información que viaja por Internet.

Tipos de VPN

Hay varios tipos de implementaciones de VPN. Quizás la más sencilla podría ser el conocido SSH. No es una VPN propiamente dicha, aunque permite encapsular tráfico a través de un puerto de un modo relativamente sencillo.
Las implementaciones de software abierto más extendidas de VPN son básicamente Openswan y OpenVPN. También existen otras implementaciones comerciales, aunque en este artículo no las vamos a contemplar.

Openswan

Openswan es una implementación completa del conjunto de protocolos IPSec para Linux. Este conjunto de protocolos se encarga de autentificar y/o encriptar cada paquete IP de una transmisión de paquetes de datos TCP/IP. Su característica principal es que funciona en la capa de red (network layer), es decir de un modo de mucho más bajo nivel que otros sistemas como OpenVPN, que utilizan la capa de transporte (transport layer). Esta circunstancia aumenta la versatilidad al poder utilizarse para proteger tanto protocolos basados en tcp como basados en udp, aunque a su vez también aumenta la complejidad,
entre otras cosas porque por ejemplo requiere modificaciones a nivel de kernel para poder utilizarlo (básicamente aplicar un parche a las fuentes del kernel y recompilar). Los protocolos IPSec constituyen una parte de IPv6, lo que implica una forzosa compatibilidad con otros sistemas compatibles con Ipv6 (routers, firewalls, etc.).

OpenVPN

OpenVPN es un paquete de software para crear un túnel entre dos puntos (punto a punto) para la transmisión de datos cifrados a través de él. OpenVPN permite la autentificación a través de claves privadas, certificados o usuario/contraseña. Utiliza el conocido protocolo SSL para el cifrado y transmisión de datos (el mismo por ejemplo que utiliza el ssh o las páginas web con encriptación SSL).
Tal y como se ha indicado, OpenVPN es un paquete de software que consiste en dos programas (un servidor y un cliente) que se encargan de autentificar y cifrar los paquetes, por lo que no hay que modificar el kernel para utilizarlo (a diferencia de Openswan), pero sí que tenemos que tener disponible el módulo tun activado en el kernel (o compilado en el mismo).
Una de sus limitaciones es que no lo podremos usar para encriptar tráfico que utilice el protocolo UDP, por otro lado, una de sus ventajas es que es más sencillo de instalar que Openswan, al no requerir modificaciones del kernel, aunque tiene la dificultad de ser incompatible con otras implementaciones de VPN.

Manos a la obra

Como hemos indicado al principio, para la demostración vamos a montar OpenVPN para la autenticación y cifrado de tráfico entre un servidor y un cliente. Los dos ordenadores que vamos a utilizar para la demostración usan Debian en sus versiones Etch (última estable) y Testing, aunque cualquier distribución basada en Debian (como UBUNTU) serviría con instrucciones similares.

Instalación del software

Vamos a empezar a instalar los paquetes necesarios mediante apt-get del siguiente modo escribiendo en una terminal:

apt-get install openvpn
apt-get install lzop liblzo1 openssl

Todo ello se debe ejecutar como superusuario. Por supuesto se puede usar cualquier otro programa
de instalación de paquetes como synaptic o aptitude para ello.
La primera orden instala el programa openvpn en sí, la segunda instala la compresión de paquetes (opcional).
Una vez hecho esto normalmente tendremos creado el directorio de configuración /etc/openvpn. Dentro de este directorio instalaremos todos los ficheros de configuración y claves.
Debemos tener el dispositivo tun activado en el kernel, bien sea compilado directamente en él, o disponible como módulo (modulo tun). Para ello basta comprobar que en el directorio /dev existe el dispositivo /dev/net/tun que es el que se utiliza para general el túnel:

ls -l /dev/net/tun
crw-r--r-- 1 root root 10, 200 2005-06-06 22:33 /dev/net/tun

También debemos comprobar que el módulo tun se encuentra cargado (salvo que esté compilado directamente en el kernel) según esto:

lsmod | egrep tun

módulo TUN en el KernelEn caso de no tener el módulo tun disponible, tendremos que recompilar el kernel de nuestro sistema activando el módulo TUN (Ver Figura).
Todos los puntos de instalación explicados deben ser aplicados tanto en el servidor como en el cliente.

Configuración y puesta en marcha

A estas alturas ya tendremos el software instalado y habremos comprobado que disponemos del módulo tun, por lo que ahora ya sólo nos queda la configuración propiamente dicha de OpenVPN.

Configuración del servidor

En primer lugar vamos a crear las claves estáticas privadas correspondientes para el cifrado de los datos. Esto lo haremos ejecutando como superusuario (root) lo siguiente:

openvpn -– genkey --secret clave.txt

Debemos copiar el fichero clave.txt al directorio /etc/openvpn en el ordenador cliente.
En el directorio /etc/openvpn, creamos un fichero de nombre tunel.conf con un editor de textos simple.
En este fichero hemos añadido los siguientes parámetros:

local DIRECCIONIPSERVIDOR

DIRECCIONIPSERVIDOR es la dirección IP de nuestro controlador de red principal (habitualmente eth0) en el servidor por ejemplo 192.168.1.1.

remote DIRECCIONIPPUBLICACLIENTE

DIRECCIONIPPUBLICACLIENTE es la dirección IP pública del ordenador al que nos queremos conectar. Ésta es la IP que sale del router a Internet. Si la desconocemos podemos consultar desde el ordenador cliente la página web http://cual-es-mi-ip.net, lo que nos proporcionará el dato de la IP Pública del ordenador cliente.

  • dev tun – Aquí indicamos que busque el dispositivo /dev/net/tun para la creación del túnel.
  • Port 1194 – Esta opción indica el puerto que se va a utilizar para el túnel. En este caso el 1194 que es el estándar de OpenVPN.
  • comp-lzo – Con esta opción, además de cifrarse, se comprimen los paquetes IP.
  • user nobody – Rebaja el usuario de ejecución a nobody para más seguridad.
  • ifconfig 10.0.0.1 10.0.0.2 – 0.0.1 es la dirección IP dentro del túnel de nuestro servidor, mientras que 10.0.0.2 es la dirección del cliente.
  • ping 15 – Esta opción envía un ping cada 15 segundos para mantener la co-nexión activa, en caso de que exista unfirewall entre la conexión, que corte la conexión en caso de inactividad.
  • secret /etc/openvpn/clave.txt – Aquí especificamos la ubicación del fichero de claves que hemos generado anteriormente.

Configuración del cliente

Aquí vamos a explicar la configuración del cliente básico de openvpn, aunque existen algunos clientes gráficos (como kvpnc, basado en kde, www.kde.org) que pueden facilitar la configuración (a mí particularmente siempre me ha resultado más práctico y fiable el cliente básico).
Para configurar el cliente se siguen prácticamente
los mismos pasos. Hay que crear el fichero tunel.conf en el directorio /etc/open-vpn con los mismos datos, pero cambiados de orden. En concreto, los datos que hay que cambiar son los siguientes:

  • local DIRECCIONIPCLIENTE – DIRECCIONIPCLIENTE es la dirección IP de nuestro controlador de red principal (habitualmente eth0) en el cliente por ejemplo 192.168.0.5.
  • remote DIRECCIONIPPUBLICASERVIDOR – DIRECCIONIPPUBLICASERVIDOR es la dirección IP pública del ordenador servi-dor al que nos queremos conectar. Ésta esla IP que sale del router a Internet. Si la des-conocemos podemos consultar desde elordenador servidor la página web http://cuales-mi-ip.net, lo que nos proporcionará el dato de la IP Pública de este ordenador.
  • ifconfig 10.0.0.2 10.0.0.1 – 10.0.0 2 es la dirección IP dentro del túnel de nu-estro cliente, mientras que 10.0.0.1 es la dirección del servidor.

Una vez realizados estos pasos ya sólo nos queda ejecutar en el cliente y en el servidor la orden:

openvpn –config /etc/openvpn/tunel.conf

y si hemos seguido los pasos correctamente, podremos acceder a nuestro servidor por túnel encriptado en la dirección 10.0.0.1.
Ahora ya sólo queda crear un script y ponerlo en el directorio de arranque de Debian para que el túnel se inicie al arrancar el ordenador. Bueno, realmente no hace falta, puesto que si se ha instalado via apt-get, Debian ya se ha encargado de crearlo.

Configuración de clientes no Linux

OpenVPN es multiplataforma, y existen versiones libres para varios sistemas operativos que se pueden encontrar en http://openvpn.net/download.html. o en http://tunnelblick.net.
Algunos de ellos tienen un sistema de configuración gráfico que facilitan la conexión, por lo que con los datos básicos de la configuración de cliente Linux debería ser suficiente para la configuración de cualquier cliente de otro sistema operativo de un modo relativamente sencillo.

Consideraciones sobre routers y firewalls

En el ejemplo anterior se ha partido de la base que el servidor tiene conexión directa desde la red Internet. Si, por el contrario, hay un router o un firewall que nos limita las conexiones entrantes tendremos que tener previsto habilitar el rutado del puerto 1194 UDP al servidor, permitiendo conexiones al mismo, puesto que en caso contrario, la conexión no se establecerá. El modo de hacerlo varía dependiendo del tipo de router o firewall que se utilice, por lo que es recomendable leer el manual de uso o la documentación del mismo para obtener las instrucciones necesarias.

Conclusiones

OPENVPN es una solución simple y de rápida instalación. Aún así tiene multitud de posibilidades cuyo análisis en profundidad va más allá del objetivo de este artículo (autenticación por usuario/contraseña o certificados X.509, entre otros). Si os interesa conocer más de esta versión o de OPENSWAN, hay multitud de tutoriales accesibles por Internet con configuraciones de ejemplo de fácil aplicación, aunque quien se plantee instalar una VPN, conviene que tenga unos conocimientos más profundos sobre las diferentes posibilidades que ofrece el software libre. Para mis necesidades concretas, OPENVPN ha sido siempre más que suficiente, aunque OPENSWAN suele decirse que es más completo, más compatible (viene integrado en muchos routers) y más rápido. En cualquier caso, el software libre nos permite disfrutar de un modo muy accesible de cualquiera de estas dos modalidades.
Se puede encontrar información amplia-da de este Software para VPN en http://openswan.org y http://openvpn.net.

fuente: the-evangelist.info

2 comentarios to “Redes privadas virtuales (VPN)”

  1. quiero implementarlo no lo eh hecho pero se ve sencillo , la distribucion a usar es debian lenny mi pregunta es si es estable el servicio mediante openvpn, ya que muchos me dicen que compre un producto como netgear para vpn’s pero en verdad no soy de esa idea pretendo implementar los servers con plataformas gnu linux y usando la distro debian lenny, me podrias dar tu opinion con base a tu experiencia.

  2. javier sanabria Says:

    Estoy investigando sobre openvpn y he corrido un analizador de protocolo y cuando se conecta el cliente con el servidor me tira paquetes UDP , ahora no entiendo porqeu si openvpn utliza ssl que es un protocolo seguro utiliza UDP que es no orintada a la conexion.
    La pregutna seria ¿en que momento openvpn utiliza udp y en que momento utuliza tcp?

    POR FAVOR SI ME PUEDEN RPSONDER A MI CORREO INFINITAMENTE AGRADECIDO.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: