Upload
zenobyte
View
224
Download
0
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/