Linux Security

Linux Security, Hacking, Databases, seguridad, Tutoriales, LDAP

VPN – Posadas 2002

Posted by mguazzardo en noviembre 13, 2008

Redes Privadas Virtuales
(apunte preparado para la charla sobre vpns, Posadas 2002, Universidad Dachary)

¿Qué es una VPN?

Una Red Privada Virtual (VPN, Virtual Private Network) nos

permite conectar los componentes de una red sobre otra red, simulando un

enlace privado dedicado entre los extremos de la VPN, permitiendo de esta

manera que un usuario remoto, que se encuentre de viaje en cualquier parte

del mundo, o una oficina que se encuentre en otra localidad, puedan

conectarse a su red corporativa utilizando la infraestructura de una red

publica, como Internet.

1.1 Usos comunes de una VPN

– Acceso de un usuario remoto sobre Internet.

Una VPN permite el acceso remoto a recursos corporativos sobre una red

publica (de aqui en adelante, Internet). En lugar de conectarse con su

modem haciendo una llamada de larga distancia, el usuario solo debe

marcar a su ISP local. Una vez conectado a Internet, el software VPN

del usuario creara una red privada virtual entre su equipo de computo y el

servidor VPN corporativo a traves de Internet.

– Conexion de redes sobre Internet.

Es posible tambien implementar una VPN para conectar oficinas externas

situadas en diferentes ciudades, a la red corporativa, evitando con

esto la necesidad de un circuito dedicado como Frame Relay, por citar

solo uno. Por ejemplo, en mi trabajo utilizabamos una red nacional con

tecnología frame relay, lo cual requiere invertir una buena cantidad de

dinero en equipo de comunicaciones. En cambio, si se implementa una

VPN solo necesitariamos una linea dedicada a un ISP y

lo necesario para montar la VPN (servidores VPN, routers, etc.)

La oficina que quisiera establecer una conexion con la red corporativa

no necesariamente tendria que utilizar una linea dedicada a su ISP,

pues tambien podria realizar la conexion utilizando dial-up. No es lo

ideal, pero es posible hacerlo. Sin embargo, el servidor VPN deberia

estar conectado a Internet utilizando un enlace dedicado, para que

pueda estar escuchando trafico VPN las 24 horas.

Introducción a Tunneling

Definiremos rapidamente tunneling, para poder comprender redes

privadas virtuales.

Tunneling es un metodo que consiste en utilizar la infraestructura de

una interred (como Internet), para transportar datos de una red a otra.

Los datos a ser transportados pueden ser los cuadros (o paquetes) de

un

protocolo diferente al que maneje la interred en cuestion, es decir, en

lugar de enviar un cuadro tal y como fue producido por el nodo que lo

origino, el protocolo de tunneling (ya sea L2TP, IPSec, etc) encapsula el

cuadro en un header (encabezado) adicional que pertenece al protocolo de

transporte de la interred sobre la cual se establece el tunel (por ejemplo,

IP).

Los paquetes encapsulados son entonces enrutados sobre la interred

entre los extremos del tunel. A esa ruta logica a travez de la cual viajan los

paquetes encapsulados sobre la interred se le llama ‘tunel’.

Cuando los paquetes (o cuadros) encapsulados llegan a su destino, el

paquete es desencapsulado y reenviado a su destino final.

Algunos protocolos utilizados para tunneling son:

– Point-to-Point Tunneling Protocol (PPTP). Permite que el trafico

IP, IPX o NetBEUI sea encriptado y encapsulado en encabezados IP para

ser enviado a traves de una interred IP como Internet. Este Protocolo fue

creado por Microsoft, y existe una implementacion para Linux

(ver http://poptop.lineo.com/ para una implementacion PPTP opensource).

NOTA: La primera version de este articulo, la realice en el 2002. Ahora,

Hay que visitar la pagina

http://www.poptop.org

– Layer 2 Tunneling Protocol (L2TP). Permite que el trafico IP o

IPX sea encriptado y enviado sobre cualquier medio que soporte entrega

de datragramas punto-a-punto, tales como IP, X.25, Frame Relay o ATM

– IP Security (IPSec) Tunnel Mode. Permite que paquetes IP sean

encriptados y encapsulados en encabezados IP para ser enviados a traves

de una interred IP.

Durante el tunneling, los paquetes del protocolo ABC se encapsulan

en paquetes del protocolo XYZ para poder ser enviados a travez de una

interred XYZ. Al llegar estos paquetes, son desencapsulados y reenvia a su

destino final como paquetes ABC (*).

Cabe hacer la aclaracion que no necesariamente los paquetes

procesados por el protocolo de tunneling tienen que ser diferentes al

protocolo de la interred, tal es el caso de IP-sobre-IP y de IPSec, que

encapsulan paquetes IP para posteriormente ser transportados sobre una

red IP.

* Los protocolos ABC y XYZ son meramente ficticios.

2.1 Protocolos de Tunneling

Para que un tunel sea establecido, ambos, el cliente tunel y el

servidor tunel, deben usar el mismo protocolo de tunneling.

La tecnologia de tunneling puede basarse en un protocolo de

tunneling, ya sea de Layer 2 o de Layer 3.

Basandonos en el modelo OSI, los protocolos Layer 2, que

corresponden a la capa de enlace de datos, usan cuadros (frames) como

unidad de intercambio. PPTP, L2TP y L2F son protocolos de tunneling

Layer 2.

Ambos encapsulan los datos en cuadros PPP para ser enviados a

traves de una interred.

Los protocolos Layer 3, que corresponden a la capa de red, utilizan

paquetes (packets) como unidad de intercambio. IPoIP y IPSec Tunnel

Mode son ejemplos de protocolos de tunneling Layer 3. Ambos encapsulan

paquetes IP en un encabezado IP adicional antes de ser enviados a traves

de una interred IP.

2.1.1 Como funciona el tunneling

Diferencia entre Tuneling de Capa 2 y Capa 3.

En el caso de las implementaciones VPN basadas en Layer 2, tales

como PPTP y L2TP, el tunel es similar a una sesion, es decir, ambos

extremos del tunel deben negociar ciertas variables tales

asignacion de

direccion o parametros de cifrado o compresion.

En las implementaciones Layer 3, por contrario, se asume que toda

la configuracion ha sido resuelta con anterioridad. Para estos

protocolos el tunel no se mantiene. Para los protocolos Layer 2, sin

embargo, un tunel debe ser creado, mantenido y terminado.

Una vez que el tunel es establecido, los datos pueden ser enviados.

2.2 Point-to-Point Protocol

Debido a que los protocolos Layer 2 dependen enormemente de las

caracteristicas especificadas para PPP, vamos a ver un poco mas en detalle

este protocolo.

PPP fue diseñado para enviar datos a traves de conexiones dial-up o

a traves de enlaces dedicados punto-a-punto. PPP encapsula paquetes

IP,IPX y NetBEUI dentro de cuadros PPP, para posteriormente transmitir

los paquetes PPP encapsulados a traves de un enlace punto-a-punto.

El protocolo utilizado entre un modem y un NAS (Network Access

Server) es el PPP.

Existen ciertas fases de negociacion en una sesion PPP por dial-up,

que tienen que completarse antes de que la conexion PPP este lista para

transferir datos.

Fase 1: Creacion del enlace PPP

PPP utiliza LCP (Link Control Protocol) para establecer, mantener,y

terminar la conexion. Durante esta fase se definen los protocolos

de autenticacion que seran utilizados para autenticar al usuario pero no se

implementan sino hasta la siguiente fase. Es en esta primera fase donde se

decide tambien cual de los dos equipos

negociara el uso de compresion y/o cifrado.

Fase 2: Autenticacion del usuario

En esta fase, la computadora cliente se autentica con el RAS. La

mayoria de las implementaciones PPP utilizan los siguientes

protocolos para autenticacion:

– Password Authentication Protocol (PAP)

– Challenge-Handshake Authentication Protocol (CHAP)

El protocolo PAP ofrece una autenticacion de lo mas sencilla,

basada en texto simple. El NAS solicita al cliente su nombre de usuario y

su password y PAP los devuelve en texto simple, es decir, sin ser cifrados,

Por lo que esto es muy peligroso, ya que si algun “Espia anduviera

Snifeandonos, se llevaria nuestra contraseña..

Por el contrario, el protocolo CHAP ofrece un mayor grado de

seguridad, debido a que el password del usuario nunca viaja, ni siquiera

cifrado, durante la sesion PPP.

CHAP funciona de la siguiente manera: Cuando durante la primera

fase ambos, cliente y servidor, acuerdan utilizar CHAP como protocolo

deautenticacion, el NAS envia un ‘desafio’ al cliente remoto. Este desafio

consiste en un ID de sesion y una cadena arbitraria de caracteres (desafio).

El cliente remoto debera utilizar MD5 para responder al servidor con el

nombre de usuario y una encriptación del desafio, ID de sesion y su

password. El nombre de usuario es

enviado sin cifrar. Las siguientes ecuaciones pueden ayudar entender esto:

desafio = id_sesion, cadena_desafio

respuesta = MD5(id_sesion, cadena_desafio, password),

nombre_usuario

Como se aprecia claramente, el password nunca viaja, ni siquiera

cifrado, durante la sesion, sino que es utilizado para un crear un hash del

desafio original. El servidor conoce el password del usuario, por lo que al

momento de recibir la respuesta del cliente remoto, realiza la misma

operacion con el desafio enviado y procede a comparar el resultado con la

respuesta del cliente. En caso de no coincidir, el servidor niega la conexion

con el cliente.

Otra caracteristica interesante de CHAP es que, una vez establecida

una sesion, el servidor continua enviando desafios al cliente en periodos de

tiempo arbitrarios, lo cual protege la sesion contra un posible ataque de

spoofing.

Bueno, pues ya para finalizar con esta fase 2: una vez que el NAS

obtiene los datos de autenticacion, los valida contra su propia base

de datos o contra un servidor central de autenticacion, por ejemplo,un

servidor RADIUS (Remote Authentication Dial-In User Service).

Fase 3: Invocando los protocolos de red

Una vez que las fases anteriores han sido completadas, PPP invoca

los protocolos de control que fueron seleccionados durante la fase 1 para

configurar los protocolos utilizados por el cliente remoto.

Por ejemplo, durante esta fase el IPCP (IP Control Protocol) puede

asignar una direccion dinamica al usuario remoto.

Una vez que estas fases han sido completadas, PPP comienza a

transmitir datos desde y hacia los dos puntos de la conexion. Cada paquete

transmitido es encapsulado en un encabezado PPP el cual es removido por

el receptor.

Si la compresion de datos fue seleccionada durante la fase 1, los

datos son comprimidos antes de transmitirlos. Tambien, si el cifrado fue

seleccionado durante la fase 1, entonces los datos son encriptados antes de

ser transmitidos.

En resumen, esto es lo que sucede desde el momento que nos

conectamos a nuestro ISP usando un modem y hasta que damos por

terminada la conexion .

2.3 Point-to-Point Tunneling Protocol (PPTP)

PPTP es un protocolo Layer 2 que encapsula cuadros PPP en

datagramas IP para ser transportados sobre una interred IP, como Internet.

Como ya mencione en lineas anteriores, PPTP es una mas de las

creaciones de Microsoft.

2.4 Layer 2 Forwarding (L2F)

L2F es un protocolo de transmision que permite a un servidor dial-

up encuadrar trafico dial-up en PPP y transmitirlo sobre vinculos WAN a

un servidor L2F. Este servidor desencapsula los paquetes y los inyecta a la

red. En contraste con PPTP y L2TP, L2F no tiene un cliente definido. L2F

es una tecnologia propuesta por Cisco.

2.5 Layer 2 Tunneling Protocol (L2TP)

L2TP es una combinacion de PPTP y L2F que encapsula cuadros

PPP para ser enviados sobre redes IP, X.25, Frame Relay o ATM. Cuando

se configura para usar IP, L2TP puede ser usado como protocolo de

tunneling sobre Internet, aunque tambien puede ser usado directamente

sobre una WAN (como Frame Relay) sin una capa IP de transporte. L2TP

sobre interredes IP hace uso de UDP para mantener el tunel.

En vista de que PPTP y L2TP son muy similares, debemos hacer

notar cuales son las diferencias entre ambos:

– PPTP requiere forzosamente de una interred IP. L2TP solamente

requiere que el medio de tunneling ofrezca conectividad punto-a-punto

basada en paquetes, tales como IP (usando UDP),

Frame Relay, X.25 o ATM.

– PPTP solo puede soportar un tunel entre ambos extremos. L2TP, por el

contrario, permite el uso de multiples tuneles entre los extremos.

– L2TP proporciona opcionalmente compresion de encabezados.

– L2TP ofrece autenticacion de tunel, mientras que PPTP no. Si

cualquiera de estos protocolos es usado sobre IPSec, la autenticacion de

tunel es proporcionada por IPSec, por lo cual la autenticacion de tunel

Layer 2 no es necesaria.

2.6 IPSec Tunnel Mode

IPSec es un protocolo Layer 3 que soporta la transferencia segura de

informacion a traves de una interred IP. IPSec define el formato de

paquetes para una modalidad de tunel IP-sobre-IP, llamada IPSec Túnel

Mode. Un tunel IPSec consiste en un cliente tunel y un servidor tunel,

los cuales estan configurados para usar tunneling IPSec y algun

mecanismo de cifrado.

IPSec Tunnel Mode utiliza un metodo de seguridad para encapsular

y encriptar paquetes IP para transmitirlos de forma segura a traves de

una interred IP privada o publica(Redes Internet).

Los datos encriptados son vueltos a encapsular en un encabezado IP

y enviados a la interred para ser entregados al otro extremo del tunel.

Una vez recibido el datagrama, el servidor tunel descarta el

encabezado IP y desencripta el contenido del paquete para recuperar el

paquete IP original. Este paquete, a su vez, es procesado

normalmente y enrutado a su destino final.

Pues el concepto es muy simple: solo se trata de paquetes IP cifrados

que viajan como datos de usuario dentro de paquetes IP convencionales.

Todo esto del IPSec suena bien, solo hay que mencionar que IPSec

soporta unicamente trafico IP.

Configuraciones practicas:

Aclaracion: En esta primera entrega, veremos una configuración sencilla para pptp.

El articulo original, estaba hecho para redhat 7.3, lo que no nos excluye de seguirla

Por ejemplo, para debian o Ubuntu. (De hecho, yo uso esas distros actualmente).

En nuestro caso, veremos PPTP:

Y analizaremos la configuración basica de PPTP:

Sistema operativo:

RedHat Linux 7.3

Bueno, como es de suponer, debemos tener al menos dos pcs, con ip

publicas. Vamos a centrarnos, en que la vpn esta entre Posadas y Buenos

Aires. EL servidor PPTP esta en Posadas, y en Buenos Aires, el cliente….

para esto.. vamos a analizar cada configuración.

Configuración de Posadas:

(Configuración Servidor).

El servidor de Posadas, cuenta con el programa (Demonio)

pptpd. El mismo lo baje de http://poptop.lineo.com. (http://www.poptop.org).

Ahí instalamos el server pptpd… configurando como servidor de

conexiones entrantes.

Veremos caracteristicas fundamentales de este servicio:

*)

Se crea una relacion de doble ip (Peer to Peer), con ip de

destino, e ip local (esto veremos luego la configuración).

*)

Se debe tener soporte a PPP en el kernel.

*)

Soporta VPNS mixtas (Unix-Windows).

Los archivos fundamentals de configuracion del servidor, son estos.

Pptpd.conf >> Se ubica en /etc

Chap-secrets >> se ubica en /etc/ppp, y contiene las contraseñas

Options

>> opciones de configuración de PPP.

Ejemplos de configuración:

Veremos por empezar el archive chap-secrets

# Secrets for authentication using CHAP

# client

server secret IP addresse

mariano mail unix *

NOTA:

el asterisco que ponemos ahi, es para decir que en esa cuenta, podemos utilizar cualquier ip, del rango remoto. Si por ejemplo, queremos fijar hacia una ip determinada, ponemo

mail mariano unix (laipquequeremos)

mail mariano unix 10.1.1.156 por ejemplo.

aca veremos que configuramos una cuenta llamada mariano, en el servidor

mail (si el equipo se llama distinto, no hay problema ) con el password

unix. Recordar poner el par siempre,. Por que el ppp, lo exige. (por ser una

conexión peer to peer).

Archivo options.

proxyarp

name mail

auth

require-chap

debug

Vemos que dice, q la validación sera chap, que el nombre del servidor pptp

es mail (que puede o no ser el verdadero, sino un alias), que se muestre el

debug para posibles errores, que se realice proxyarp(esto es mas q nada

para nateo)

Archivo pptpd.conf

speed 115200

option /etc/ppp/options

debug

localip 10.0.0.1

remoteip 10.0.0.10-20

pidfile /var/run/pptpd.pid

aca, siguiendo la tradicion del demonio pppd, (que es la base del pptp),

configuramos la velocidad (obsolete), decimos que el archivo /

etc/ppp/options guarde la configuración relativa a las opciones del pppd.

El debug, es para que debuguee toda la transferencia, para ver si

encontramos errores.

Pool de Ips asignadas:

localip 10.0.0.1

remoteip 10.0.0.10-20

localip es la ip que tomara el Servidor PPTP, en el caso nuestro, seria

192.168.2.230

remoteip son las ips remotas, dependiendo de la cantidad de hosts a

conectar….en nuestro caso serian 192.168.2.231-254.

Una vez echo esto, debemos correr el demonio en si mismo, que esto se

hace de la siguiente manera….

[root@serverlinuxr root]#pptpd

y esto lanza automaticamente el demonio pptpd. Nos daremos cuenta, si

este esta corriendo, lanzando un nmap hacia el puerto 1723.

[root@serverlinuxr root]# nmap -p 1723 localhost

Starting nmap V. 2.54BETA31 ( http://www.insecure.org/nmap/ )

Interesting ports on localhost (127.0.0.1):

Port

State

Service

1723/tcp open

pptp

ahí tenemos el demonio del lado servidor corriendo.

Ahora veremos la configuración del cliente:

Buscamos en freshmeat el cliente pptp-linux, y lo instalamos. Lo que

debemos luego, es configurar los archivos /etc/ppp/chap-secrets, y /etc/

Options. El chap-secrets debe ser una replica exacta del otro, (por la

condicion de PPP).

El archivo options, cambia ligeramente, y veremos que es lo que cambia.

auth

name mariano

noipdefault

nodefaultroute

debug

-detach

vemos que name, ahora es mariano, que es la cuenta con que el cliente, va

a validar. Vemos que no tome un ip por defecto, y que no tome un gateway

por defecto, ya que si no , podria ser que este ocupado.

Una vez, que se establece la comunicación, podriamos ver el estado y las

ips asignadas.

Veremos ahora, que ip es la que nos asigno el servidor pptp.

[root@linuxfirewall root]# ifconfig ppp0

ppp0

Link encap:Point-to-Point Protocol

inet addr:192.168.2.231 P-t-P:192.168.2.230

Mask:255.255.255.255

UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500

Metric:1

RX packets:5926 errors:431 dropped:0 overruns:0 frame:0

TX packets:5334 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:3

RX bytes:1397456 (1.3 Mb) TX bytes:284267 (277.6 Kb)

[root@linuxfirewall root]#

Vemos que nuestra ip(virtual, por asi decirlo), es 192.168.2.231, que la del

otro punto es 192.168.2.230(que seria nuestro gateway). Entonces, si

levantaron las dos ips, la VPN ya esta andando!.

Rutando las redes privadas:

Y ahora el problema del millon!. Como hago para hacer pasar toda

mi red privada 192.168.1.x, hacia la 192.168.2.x?. Dijimos que la ip del

virtual seria mi gateway, considerandolo desde el cliente, lo que debemos

hacer es agregar una ruta, hacia la red 192.168.2.x en el cliente, utilizando

el siguiente comando.

[root@linuxfirewall root]#route add -net 192.168.2.0 netmask255.255.255.0 gw 192.168.2.231

Y santa solucion. Pero a veces el ip varia, y deberiamos generar algo

que nos calculara el ip. Vamos a armar un scripcito rapidamente.

#!/bin/bash

# Marzo 2002

EH=`ifconfig eth0 | grep “inet addr” | awk ‘{print $2}’ | awk -F: ‘{print

$2}’`

route add -net 192.168.6.0 netmask 255.255.255.0 gw $EH

Me mate con este script no?… Pero bueno, con este script podria calcular

la ip, y agregar la ruta a mano. y se podria hacer un script, que cuando el

equipo levante, llamara automáticamente.

Seria de esta forma el script!

NOTA: 200.200.200.200 es una ip ficticia.

Pptp 200.200.200.200 &

EH=`ifconfig eth0 | grep “inet addr” | awk ‘{print $2}’ | awk -F: ‘{print

$2}’`

route add -net 192.168.6.0 netmask 255.255.255.0 gw $EH

Que ovbiamente, lo podriamos poner en /etc/rc.d/rc.local.

Y esto levantaria automáticamente la conexión, siempre y cuando este el

servidor corriendo.

NOTA:

En un servidor debian, lo que cambiaria seria

que el software pptp, lo instalamos asi.

apt-get install pptpd

Como se ve, es algo re contra sencillo. A veces, para que estas vpns pasen por el router, habria que habilitar el pptp pass through. Tambien, se debe habilitar las reglas de filtrado via iptables, o si alguno usa shorewall, hay una macro especifica con el ppp+.

Cualquier consulta, no duden en mandarme un email
mguazzardo76@gmail.com
Marcelo Guazzardo

Anuncios

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: