MONTANDO TU PROPIO SERVIDOR VPN PPH

Embed Size (px)

Citation preview

  • 7/30/2019 MONTANDO TU PROPIO SERVIDOR VPN PPH

    1/7

    MONTANDO TU PROPIO SERVIDOR VPN PPH

    Luis Delgado J.

    Todos sabemos lo inseguro que es navegar sin proteccin por una red que no sabemos si puede estar o

    no comprometida, y ms ahora con todo el revuelo montado alrededor de Firesheep. Hace unos das

    Yago Jess comentaba en Security by Default los mtodos que disponemos para defendernos de esta

    extensin. Como resumen decir que se comentaban tres mtodos, la utilizacin de aplicaciones que

    inyectaran ruido en el trfico desconcertando a la extensin, la utilizacin de extensiones que fuercen

    el uso de SSL y el uso de VPNs para cifrar todo el trfico y evitarnos las miradas indiscretas. Como

    podemos entender, la mejor solucin 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 ms me llam la atencin desde que le conoc (y ahora empieza a aparecer

    en muchas compaas) es el tema del alquiler de recursos/instancias por tiempos muy cortos(principalmente suelen ser intervalos de una hora). El ms conocido es EC2 de Amazon pero como ya

    he dicho, hay otras compaas de hosting que se estn subiendo al carro y ofrecen servicios muy

    competitivos.

    Entrando ya en el tema del artculo, por qu no usar estos servicios para montarnos un servidor VPN

    que estar activo nicamente cuando lo necesitemos? Esto que es tan simple, tiene dos grandes

    ventajas, una 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 artculo 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 costndonos desde un cntimo la hora.

    Como ya he comentado anteriormente, el servicio ms conocido es EC2 de Amazon pero existen otros

    que pueden llegar a ser una mejor opcin 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 ms que suficiente

    para un solo usuario.

    El servicio VPN va a ser a travs deOpenVPN y la gestin de los usuarios se va a realizar a travs de

    OpenLDAP ya que es ms flexible y cmodo que la utilizacin de certificados de cliente, pues nos

    evitamos el crear uno para cada cliente y el manejo de las blacklists, etc.

    No voy a explicar cmo utilizar el servicio cloud de OVH pues en esta pgina web disponen de videos

    bastante explicativos de todo el proceso (puesta en marcha, evolucin, archivado/detencin y

    eliminacin).

    Comencemos con la instalacin!

    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 explicacin

    se basa en una instalacin en Debian 5 de 64 bits (tambin ha sido probada en Ubuntu Server 10.04).

    http://www.securitybydefault.com/http://www.securitybydefault.com/2010/11/faq-como-me-protejo-de-firesheep.htmlhttp://www.ovh.es/cloud/http://openvpn.net/http://openvpn.net/http://www.openldap.org/http://www.ovh.es/cloud/http://www.ovh.es/cloud/http://www.openldap.org/http://openvpn.net/http://www.ovh.es/cloud/http://www.securitybydefault.com/2010/11/faq-como-me-protejo-de-firesheep.htmlhttp://www.securitybydefault.com/
  • 7/30/2019 MONTANDO TU PROPIO SERVIDOR VPN PPH

    2/7

    1. Instalacin de OpenVPNInstalamos OpenVPN y nos cercioramos de que est instalado OpenSSL y Sudo:

    apt-get install openvpn openssl sudo

    Configuramos OpenVPN:

    vim /etc/default/openvpn

    + Aadimos AUTOSTART="openvpn"

    - Comentamos OPCTAGS

    vim /etc/openvpn/openvpn.conf

    dev tun

    proto tcp (tambin puede utilizarse udp)

    port 1194 (u otro)

    ca /etc/openvpn/keys/ca.crtcert /etc/openvpn/keys/servidor.crt

    key /etc/openvpn/keys/servidor.key

    dh /etc/openvpn/keys/dh2048.pem

    user nobody (solo en no-windows)

    group nogroup (solo en no-windows)

    server 10.8.0.0 255.255.255.0 (rango de ips que usara la vpn)

    ifconfig-pool-persist ipp.txt (guarda las asignaciones)

    persist-key

    persist-tun

    #up /etc/openvpn/openvpn.up (se ejecuta al iniciar el servicio, comentarlo en Debian!)

    #client-to-client (permite que los usuarios se vean entre ellos)push "redirect-gateway def1"

    #comp-lzo (compresin)

    verb 3 (detalles error)

    max-clients 1 (nmero mximo de usuarios)

    Establecemos el script para el fowarding/iptables que habr que ejecutar cada vez que queramos

    arrancar el servicio openvpn:

    vim /etc/openvpn/openvpn.up

    #!/bin/bash

    sudo /etc/init.d/openvpn restart

    sudo echo 1 > /proc/sys/net/ipv4/ip_forward

    sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

    chmod +x /etc/openvpn/openvpn.up

  • 7/30/2019 MONTANDO TU PROPIO SERVIDOR VPN PPH

    3/7

    Configuramos/creamos las llaves y certificados y reiniciamos el servicio:

    Copiamos los ejemplos a una carpeta temporal

    cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/

    cd /etc/openvpn/easy-rsa/2.0/

    Creamos la carpeta de las llaves

    mkdir keys

    vim vars

    Modificamos KEY_DIR --> export KEY_DIR="/etc/openvpn/easy-rsa/2.0/keys"

    Modificamos KEY_SIZE --> export KEY-SIZE=2048

    Modificamos los datos para la entidad (con precaucin o todo el proceso fallar)

    Comenzamos a crear certificados/llaves:source ./vars

    ./clean-all

    ./build-dh

    ./build-ca

    ./build-key-server servidor

    ./build-key luis (uno para cada uno de los clientes)

    Copiamos los certificados/llaves

    cp -R /etc/openvpn/easy-rsa/2.0/keys /etc/openvpn/

    cd /etc/openvpn/keys

    openvpn --genkey --secret /etc/openvpn/keys/ta.key

    Reiniciamos el servicio:

    sh /etc/openvpn/openvpn.up

    Una vez reiniciado el servicio tendremos completamente operativo nuestro servidor OpenVPN.

    Podemos instalarnos un cliente y comprobar que funciona, copiando en la carpeta de configuracin

    el certificado del servidor (ca.crt), y el certificado/llave del cliente (luis.crt y luis.key) adems del

    archivo de configuracin (si habis modificado la configuracin del servidor tendris que comprobar

    que concuerdan con los del cliente):

    client

    dev tun

    proto tcp (o udp)

    remote IP_SERVIDOR 1194 (u otro puerto)

    resolv-retry infinite

    nobind

    persist-key

    persist-tun

    ca ca.crt

    cert cliente.crt

    key cliente.key

    #comp-lzo

    verb 3

    ns-cert-type server

  • 7/30/2019 MONTANDO TU PROPIO SERVIDOR VPN PPH

    4/7

    2. Instalacin de OpenLDAPEn primer lugar instalaremos y configuraremos slapd, en este caso utilizare como dominio de

    ejemplo example.com, si utilizis cualquier otro, acordaros de cambiarlo en todos los ficheros de

    configuracin y de utilizarlo posteriormente cuando hagis referencia a algn usuario/grupo.

    Instalamos los paquetes necesarios:

    apt-get install slapd ldap-utils

    Configuramos slapd:

    dpkg-reconfigure slapd

    DNS domain & Organization name: (p.e) example.com

    Administrator password: admin password

    Database backend to use: BDB (es la recomendada)

    Do you want the database to be removed when slapd is purged? No

    Allow LDAPv2 protocol? No

    vim /etc/ldap/ldap.conf

    BASE: dc=example,dc=com

    URI: ldap://localhost

    vim /etc/ldap/slapd.conf

    loglevel --> 256

    + Aadimos "index uid eq" despus de "index objectClass eq"

    Creamos un nuevo schema para aadir el campo accessVPN a los usuarios que creemos, y poder

    indicar si tiene acceso o no (1 tiene acceso, cualquier otro valor se le deniega la conexin):

    vim /etc/ldap/schema/vpn.schema

    attributetype ( 1.3.6.1.4.1.3317.4.3.4.1 NAME 'accessVPN'

    DESC 'VPN Access'

    EQUALITY integerMatch

    SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )

    objectclass ( 1.3.6.1.4.1.3317.4.3.5.1 NAME 'vpn'

    DESC 'Abstraction for VPN users'SUP top AUXILIARY

    MUST ( accessVPN ) )

    vim /etc/ldap/slapd.conf

    + Aadimos al inicio include /etc/ldap/schema/vpn.schema

    Aplicamos el nuevo ndice:

    /etc/init.d/slapd stop

    slapindex

    chown openldap:openldap /var/lib/ldap/*

    /etc/init.d/slapd start

  • 7/30/2019 MONTANDO TU PROPIO SERVIDOR VPN PPH

    5/7

    Creamos el grupo VPN al que pertenecern los usuarios:

    vim /etc/ldap/ldifs/vpn.ldif

    dn: cn=vpn,dc=example,dc=com

    objectClass: posixGroupobjectClass: top

    cn: vpn

    gidNumber: 1000

    Aadimos el nuevo grupo al ldap:

    ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /etc/ldap/ldifs/vpn.ldif

    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 unusuario para evitar dejar activo el usuario annimo). Posteriormente creo los dems usuarios que

    seguirn su mismo perfil, modificando sus datos (cn, password, etc) y el uidNumber (en este caso el

    valor de accessVPN ser 1). Como apunte final, decir que podemos administrar LDAP utilizando

    aplicaciones con FrontEnd como por ejemplo phpldapadmin:

    vim /etc/ldap/ldifs/openvpn.ldif

    dn: uid=openvpn,cn=vpn,dc=example,dc=com

    objectClass: inetOrgPerson

    objectClass: posixAccount

    objectClass: vpnobjectClass: top

    givenName: OpenVPN user

    sn: OpenVPN user

    uidNumber: 1000

    gidNumber: 1000

    homeDirectory: /home/vpn/openvpn

    cn: openvpn

    uid: openvpn

    userPassword: PASSWORD --> (p.e) slappasswd -h {MD5}

    accessVPN: 0 (no se puede conectar a la VPN)

    vim /etc/ldap/ldifs/luis.ldif

    dn: uid=luis,cn=vpn,dc=example,dc=com

    uidNumber: 1001

    accessVPN: 1

    Aadimos los nuevos usuarios a LDAP:

    ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /etc/ldap/ldifs/openvpn.ldif

    ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /etc/ldap/ldifs/luis.ldif

  • 7/30/2019 MONTANDO TU PROPIO SERVIDOR VPN PPH

    6/7

    3. Enlazando OpenVPN y OpenLDAP:Como ya he dicho al comienzo del artculo, 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.listpues ste plugin no se encuentra en los que vienen por defecto (otra opcin es bajar el plugin e

    instalarlo manualmente).

    vim /etc/apt/sources.list

    + Aadimos al final deb http://ftp.de.debian.org/debian sid main

    Instalamos el plugin:

    apt-get update

    apt-get install openvpn-auth-ldap

    Una vez instalado nos ponemos a configurarlo. Hacemos uso del fichero de configuracin de

    ejemplo, eliminando toda referencia a conexin cifrada, pues LDAP se encuentra en el mismo

    servidor. Adems, modificamos el fichero de configuracin de OpenVPN aadiendo la localizacin

    del plugin y establecemos que el cliente no necesita un certificado para conectarse.

    Creamos el fichero de configuracin:

    mkdir /etc/openvpn/auth

    cp /usr/share/doc/openvpn-auth-ldap/examples/auth-ldap.conf /etc/openvpn/authvim /etc/openvpn/auth/auth-ldap.conf

    URL ldap://localhost

    BindDN uid=openvpn,cn=vpn,dc=example,dc=com

    Password PASSWORD

    Timeout 15

    BaseDN "cn=vpn,dc=example,dc=com"

    SearchFilter "(&(uid=%u)(accessVPN=1))"

    RequireGroup false

    vim /etc/openvpn/openvpn.conf

    plugin /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/auth/auth-ldap.conf

    client-cert-not-required

    Ya para terminar solo queda reiniciar los servicios (slapd y openvpn), modificar el fichero de

    configuracin del cliente eliminando las referencias a los certificados de cliente y aadiendo auth-

    user-pass y auth-nocache para que sepa que la autenticacin es mediante usuario y contrasea

    (y no guarde en cache los credenciales).

  • 7/30/2019 MONTANDO TU PROPIO SERVIDOR VPN PPH

    7/7

    Con respecto a LDAP, en la mayora de las configuraciones que me he ido encontrando, siempre se

    deja activado el usuario annimo, permitiendo obtener acceso en modo lectura a todo el directorio.

    Esto, bajo mi punto de vista, es un grave problema de fuga de informacin pues cualquiera que

    pueda conectarse al servidor (o hacer uso de cualquiera de las aplicaciones web que permiten la

    administracin de LDAP) podr ver todos los usuarios y su informacin personal. Por ese mismo

    motivo, aconsejo aplicar una serie de medidas que eviten que incluso se pueda ver dichainformacin entre usuarios autenticados, es decir, que cada uno solo pueda verse a s mismo y todo

    lo dems permanezca oculto. Para activar este comportamiento, basta con aadir/modificar las

    siguientes lneas en el archivo de configuracin de slapd.

    vim /etc/ldap/slapd.conf

    cambiamos:

    access to *

    by dn="cn=admin,dc=example,dc=com" write

    by * readpor:

    access to dn="dc=example,dc=com"

    by dn="cn=admin,dc=example,dc=com" write

    by users read

    by * none

    access to dn="cn=vpn,dc=example,dc=com"

    by dn="cn=admin,dc=example,dc=com" write

    by self write

    by users read

    by * none

    access to *by dn="cn=admin,dc=example,dc=com" write

    by dn="uid=openvpn,cn=vpn,dc=example,dc=com" read

    by self write

    by * none

    (La configuracin superior no es la ms correcta ni ptima, pero funciona).

    Bueno, como podis ver, en relativamente sencillo tener funcionando nuestro propio servidor VPN.

    Adems ste tiene un cobro por horas manteniendo la informacin, luego tenemos a nuestra

    disposicin un servicio VPN a un clic que nos costar muy poco al mes.

    Aprovecho para enlazar un artculo que public Alejandro Ramos en Security By Default de cmo

    instalar un servidor PPTP para navegar de forma segura en Android (exportable tambin a iPhone y

    dems dispositivos que lo permitan). Como todos sabemos, y podemos acudir a las entregas de

    Chema Alonso sobre las distintas opciones de VPN y su seguridad, OpenVPN es de las ms seguras

    pero tiene el inconveniente de requerir una aplicacin externa.

    Simplemente decir que, como podis observar, hay muchos usos interesantes que se les puede dar

    a estos servicios cloud. Otro que se me ocurre es un tnel DNS para saltarse los portales cautivos

    (tan de moda ahora en cafs/restaurantes). Ya escribi sobre este tema Alejandro Ramos aqu y

    aqu.

    http://www.securitybydefault.com/http://www.securitybydefault.com/2010/06/configuracion-de-servidor-vpn-pptp-con.htmlhttp://www.elladodelmal.com/2010/07/crackear-conexiones-vpn-pptp-con-ms.htmlhttp://www.securitybydefault.com/2008/12/de-un-hotel-internet-sin-pasar-por-caja.htmlhttp://www.securitybydefault.com/2010/01/tunelizando-dns-otra-opcion-con-iodine.htmlhttp://www.securitybydefault.com/2010/01/tunelizando-dns-otra-opcion-con-iodine.htmlhttp://www.securitybydefault.com/2008/12/de-un-hotel-internet-sin-pasar-por-caja.htmlhttp://www.elladodelmal.com/2010/07/crackear-conexiones-vpn-pptp-con-ms.htmlhttp://www.securitybydefault.com/2010/06/configuracion-de-servidor-vpn-pptp-con.htmlhttp://www.securitybydefault.com/