26 noviembre 2010

Montando tu propio servidor VPN PPH

Todos sabemos lo inseguro que es navegar sin protección por una red que no sabemos si puede estar o no comprometida, y más ahora con todo el revuelo montado alrededor de Firesheep.

Hace unos días Yago Jesús comentaba aquí los métodos que disponemos para defendernos de esta extensión. Como resumen decir que se comentaban tres métodos, la utilización de aplicaciones que inyectaran ruido en el tráfico desconcertando a la extensión, la utilización de extensiones que fuercen el uso de SSL y el uso de VPNs para cifrar todo el tráfico y evitarnos las miradas indiscretas. Como podemos observar, la mejor solución es esta última.

Todos conocemos el universo Cloud y la cantidad de servicios asociados a él que no paran de aparecer. Uno de los que más me llamó la atención desde que le conocí (y ahora empieza a aparecer competencia) es el tema del alquiler de recursos/instancias por tiempos muy cortos (principalmente suelen ser intervalos de una hora). El más conocido es EC2 de Amazon pero como ya he dicho, hay otras compañías de hosting que se están subiendo al carro y ofrecen servicios muy competitivos.

Entrando ya en el tema del artículo, ¿por qué no usar estos servicios para montarnos un servidor VPN que estará activo únicamente cuando lo necesitemos? Ésto, que es tan simple, tiene dos grandes ventajas. La primera es que somos nosotros los que estamos administrando el servidor y por lo tanto no dependemos de terceros (y lo fiables que sean o no) y la segunda es que el gasto mensual cae estrepitosamente (en mi caso he pasado de pagar un servicio VPN de 12e, a una factura mensual alrededor de 1e).

Resumiendo un poco, la finalidad de este artículo es que seamos capaces de montarnos nuestro propio servidor VPN utilizando estas instancias y que esté activo únicamente cuando lo necesitemos, tardando un par de minutos en estar operativo y costándonos desde un céntimo la hora.

Como ya he comentado anteriormente, el servicio más conocido es EC2 de Amazon pero existen otros que pueden llegar a ser una mejor opción si la VPN va a ser de uso personal y no necesitamos tantos recursos. Yo recomiendo el servicio cloud de OVH pues nos ofrece una instancia muy similar a la de Amazon pero comenzando con 256mb de ram y un coste de 1c la hora, lo cual es más que suficiente para un solo usuario.

El servicio VPN va a ser a través de OpenVPN y la gestión de los usuarios se va a realizar a través de OpenLDAP ya que es más flexible y cómodo que la utilización de certificados de cliente, pues nos evitamos el crear uno para cada cliente y el manejo de las blacklists, etc.

No voy a explicar cómo utilizar el servicio cloud de OVH pues en su página web disponen de videos bastante explicativos de todo el proceso (puesta en marcha, evolución, archivado/detención y eliminación).

En primer lugar vamos a instalar y configurar OpenVPN, posteriormente haremos lo mismo con OpenLDAP y finalmente, utilizando el plugin openvpn-auth-ldap, los enlazaremos. Toda la explicación se basa en una instalación en Debian 5 de 64 bits (también ha sido probada en Ubuntu Server 10.04).

¡Comencemos con la instalación!

1. Instalación de OpenVPN

Instalamos  y configuramos OpenVPN (aseguraros de tener instalado OpenSSL y sudo): código

Creamos/configuramos el script para el fowarding/iptables que habrá que ejecutar cada vez que queramos arrancar el servicio openvpn o añadirlo al cron: código

Creamos/configuramos las llaves y certificados. Posteriormente reiniciamos el servicio: código

Una vez reiniciado el servicio tendremos completamente operativo nuestro servidor OpenVPN. Podemos instalarnos un cliente y comprobar que funciona, copiando en la carpeta de configuración el certificado del servidor (ca.crt), y el certificado/llave del cliente (luis.crt y luis.key) además del archivo de configuración (si habéis modificado la configuración del servidor tendréis que comprobar que concuerdan con los del cliente): código

2. Instalación de OpenLDAP:

En primer lugar instalaremos y configuraremos slapd.

En este caso utilizaré como dominio de ejemplo “example.com”. Si utilizáis cualquier otro, acordaros de cambiarlo en todos los ficheros de configuración y de utilizarlo posteriormente cuando hagáis referencia a algún usuario/grupo. código 

Creamos un nuevo schema para añadir el campo accessVPN a los usuarios que creemos. De esta forma podremos indicar si tiene acceso o no a la VPN (1 tiene acceso, cualquier otro valor se le deniega la conexión): código

Creamos el grupo VPN al que pertenecerán los usuarios: código

Creamos los usuarios del grupo VPN.

En primer lugar creo el usuario openvpn que utilizaremos posteriormente para conectarnos desde OpenVPN a LDAP y comprobar los credenciales (creo un usuario para evitar dejar activo el usuario anónimo). Posteriormente creo los demás usuarios que seguirán su mismo perfil, modificando sus datos (cn, password, etc) y el uidNumber. Como apunte final, decir que podemos administrar LDAP utilizando aplicaciones con “FrontEnd” como por ejemplo phpldapadmin: código

3. Enlazando OpenVPN y LDAP:

Como ya he dicho al comienzo del artículo, para enlazar ambos servicios utilizaremos el plugin de OpenVPN openvpn-auth-ldap.

Si nos encontramos en Debian, tendremos que agregar un nuevo repositorio al archivo sources.list pues éste plugin no se encuentra en los que vienen por defecto (otra opción es bajar el plugin e instalarlo manualmente). código

Una vez instalado nos ponemos a configurarlo.

Hacemos uso del fichero de configuración de ejemplo, eliminando toda referencia a conexión cifrada, pues LDAP se encuentra en el mismo servidor y no nos vamos a complicar. Además, modificamos el fichero de configuración de OpenVPN añadiendo la localización del plugin y establecemos que el cliente no necesita un certificado para conectarse. código

Ya para terminar solo queda reiniciar los servicios (slapd y openvpn), modificar el fichero de configuración del cliente eliminando las referencias a los certificados de cliente y añadiendo auth-user-pass y auth-nocache (la autenticación es mediante usuario y contraseña y no guarda en cache los credenciales).

4. Anotaciones finales:

Con respecto a LDAP, en la mayoría de las configuraciones que me he ido encontrando, siempre se deja activado el usuario anónimo, permitiendo obtener acceso en modo lectura a todo el directorio.

Ésto, bajo mi punto de vista, es un grave problema de fuga de información pues cualquiera que pueda conectarse al servidor (o hacer uso de cualquiera de las aplicaciones web que permiten la administración de LDAP) podrá ver todos los usuarios y su información personal.

Por ese mismo motivo, aconsejo aplicar una serie de medidas que eviten que incluso se pueda ver dicha información entre usuarios autenticados, es decir, que cada uno solo pueda verse a sí mismo y todo lo demás permanezca oculto.

Para activar este comportamiento, basta con añadir/modificar las siguientes líneas en el archivo de configuración de slapd. código 

Bueno, como podéis ver, es relativamente sencillo tener funcionando nuestro propio servidor VPN. Además éste tiene un cobro por horas manteniendo la información, del disco luego tenemos a nuestra disposición un servicio VPN a un clic que nos costará muy poco al mes.

Ya para terminar...

Aprovecho para enlazar un artículo que publicó Alejandro Ramos aquí sobre la instalación de un servidor PPTP para navegar de forma segura en Android (exportable también a iPhone y demás dispositivos que lo permitan).

Como todos sabemos, y podemos acudir aquí donde Chema Alonso expone las distintas opciones de VPN y su seguridad, OpenVPN es de las más seguras pero tiene el inconveniente de requerir una aplicación externa.

Como veis, hay muchos usos interesantes que se les puede dar a estos servicios cloud. Otro que se me ocurre es un túnel DNS para saltarse los portales cautivos (tan de moda ahora en cafés/restaurantes). Ya escribió sobre este tema Alejandro Ramos aquí y aquí.

Artículo cortesía de: Luis Delgado J.

15 comments :

Unknown dijo...

Yo utilizo otra solución parecida (aunque solo para navegación web).

En mi caso, tengo un VPS que conseguí en lowendbox.com por 12€ al año o algo así, donde tengo montado un squid escuchando en 127.0.0.1 y hago tunel ssh hasta allí, saliendo por el squid.

Además, el squid esta configurado para bloquear ads, modificar el user agent, puedo sacar estadisticas... :D

Un saludo!

Anónimo dijo...

Muy interesante. Como añadido al artículo comentar que en OVH hay preconfiguraciones de instancias que montan el servidor VPN directamente.
Mucha menos personalización, pero puede ser más cómodo :)

VaxMAN dijo...

Como siempre tocando temas interesantes en SbD. Hace días publicamos también en Hacktimes un artículo que puede ser complementario y explica otro uso "alternativo" del tema de VPS, OpenVPN y demás:

http://www.hacktimes.com/anonimato_en_internet_gratis_durante_1_a_o/

SID dijo...

Llevo usando OpenVPN desde hace bastantes años y la funcionalidad que más me gusta del producto es la posibilidad de utilizar PKI.

Generar un acceso con caducidad de tiempo y no tener que preocuparse de si el usuario seguirá usándolo... no tiene precio.

Luis dijo...

@Anonimo:
Cierto! Al final se me olvidó comentarlo al redactar el artículo. Hay dos soluciones, una utilizando PPTP y otra OpenVPN, y son muy comodas si las quieres usar en casos muy puntuales, pues la de PPTP das de alta el usuario y nada más, y la de OpenVPN generas el certificado... El único inconveniente que le veo es que te limitan a 5Mbps, aunque para una navegación puntual no debería ser un problema.

@VaxMann:
En el update del artículo había añadido al principio una referencia a vuestro artículo del sábado, pero no se habrá añadido a la maquetación. Recomiendo su lectura, pues en caso de que se quiera utilizar Amazon EC2, viene explicado su funcionamiento.

Anónimo dijo...

Hola,

Puede encontrar una lista de proveedores de VPN, así como comentarios de los usuarios en
http://www.start-vpn.com/

Anónimo dijo...

Supongo que el servidor OpenVpn y openLdap se instalan en nuestra maquina... ¿pero entonces la cuenta y el servicio en ovh para que sirve o como te conectas allí? ¿Y como te cobran por dicho servicio, porque he estado mirando así por encima y no lo he podido ver.

La verdad es que no estoy muy ducho en estos temas.

Muchas gracias.

Anónimo dijo...

Muy buena la explicación de cómo integrar OpenVPN y OpenLDAP.

Me ha gustado el post :)

Luis dijo...

@Anonimo:
El servicio Cloud de OVH se utiliza para instalar ambos servicios en la nube y tener siempre un servidor VPN al que poder conectarse (también es exportable a un servidor doméstico, pero el bandwith no es comparable). Para utilizar el servicio tienes que tener una cuenta (un NIC), una vez registrado, basta con acudir a http://www.ovh.es/managerv5 y desde ahí se pueden añadir fondos (el mínimo es de 10e, que a mí me dura unos 6/8 meses) o crear las instancias. Aun así, en http://www.ovh.es/cloud tienes todo explicado.

@damontero:
Espero que te sea de utilidad ;)!

Luis dijo...

Me han enviado un correo comentandome que las modificaciones que propongo para ¿securizar? el LDAP no son lo buenas que deberían ser. Digamos que cumplen su función (que los usuarios no se vean entre ellos, ni siquiera el nombre aunque no puedan acceder al contenido) pero podrían hacerse mejor asi que os recomiendo que leais el siguiente trabajo de Inmaculada Bravo, es más que recomendable (no lo he leido pero esta en mi toDo), sobre openLDAP http://openldap-bsa.forja.rediris.es/

Anonymous dijo...

Hola,

Puede encontrar una lista de proveedores de VPN, así como comentarios de los usuarios en
http://www.start-vpn.com/

SID dijo...

Llevo usando OpenVPN desde hace bastantes años y la funcionalidad que más me gusta del producto es la posibilidad de utilizar PKI.

Generar un acceso con caducidad de tiempo y no tener que preocuparse de si el usuario seguirá usándolo... no tiene precio.

Oswaldo Sandoval dijo...

Amigo los archivos adjuntos no estan....

Luis Delgado dijo...

Cambie los enlaces en una reestructuración de mi página y se me olvidó actualizarlos. Puedes encontrarlos en la siguiente dirección:
http://ldelgado.es/index.php?dir=otros/vpn_pph/info

Oswaldo Sandoval dijo...

Gracias