11
FUNDACION CODIGO LIBRE DOMINICANA DIVISION  DE INGENIERIA Y PROYECTOS www.codigolibre.org Servicio:            Vpn con Openswan Autor:                Cristhian Nunez ([email protected]) Version:            1.2 Cambios con relacion a la version 1.1 Agregado la opcion para habilitar el ip forwarding Incluida la opcion para deshabilitar la encriptacion oportunistica en el archivo /etc/ipsec.conf Cambios con relacion a la version 1.0 Agregado conexion mediante PSK Agregado conexion roadwarrior mediante l2tp Configuracion Clientes Windows XP para conexion L2TP/IPsec Existen muchas alternativas para hacer redes privadas virtuales (VPN) sobre linux, como openvpn, poptop (protocolo pptp) y varias implementaciones de IPsec. Cada solución tiene sus beneficios y debilidades, elijo en este artículo no discutir la mejor opción para cada escenario sino explicar a modo de HOWTO cómo realizar una VPN basada en IPsec con openswan sobre linux, particularmente Debian. Breve introducción a IPsec De wikipedia: IPsec (la abreviatura de Internet Protocol security) es una extensión al protocolo IP que añade cifrado fuerte para permitir servicios de autenticación y, de esta manera, asegurar las comunicaciones a través de dicho protocolo. Inicialmente fue desarrollado para usarse con el nuevo estándar IPv6, aunque posteriormente se adaptó a IPv4. IPsec actúa a nivel de capa de red, protegiendo y autenticando los paquetes IP entre los equipos participantes en la comunidad IPsec. No está ligado a ningún algoritmo de encriptación o autenticación, tecnología de claves o algoritmos de seguridad específico. Es más, IPsec es un marco de estándares que permite que cualquier nuevo algoritmo sea introducido sin necesitar de cambiar los estándares. IPSec está formado por un conjunto de protocolos de cifrado por (1) securing packet flows y (2) key exchange. De la forma: Encapsulating Security Payload (ESP), el cual provee autenticación, confidencialidad de datos e integridad del mensaje Authentication Header (AH), provee de autenticación e integridad de datos, pero no de confidencialidad. Por sus características es el protocolo estándar para la construcción de redes privadas virtuales. Propósito de diseño IPsec fue proyectado para proporcionar seguridad en modo transporte (extremo a extremo) del tráfico de paquetes, en el que los ordenadores de los extremos finales realizan el procesado de seguridad, o en modo túnel (puerta a puerta) en el que la seguridad del tráfico de paquetes es proporcionada a varias máquinas (incluso a toda la red de area local) por un único nodo.

VPN Openswan v1.2

Embed Size (px)

Citation preview

Page 1: VPN Openswan v1.2

FUNDACION CODIGO LIBRE DOMINICANADIVISION  DE INGENIERIA Y PROYECTOS

www.codigolibre.orgServicio:            Vpn con OpenswanAutor:                Cristhian Nunez ([email protected])Version:            1.2

Cambios con relacion a la version 1.1– Agregado la opcion para habilitar el ip forwarding– Incluida la opcion para deshabilitar la encriptacion oportunistica en el archivo /etc/ipsec.conf

Cambios con relacion a la version 1.0– Agregado conexion mediante PSK– Agregado conexion roadwarrior mediante l2tp– Configuracion Clientes Windows XP para conexion L2TP/IPsec

Existen muchas alternativas para hacer redes privadas virtuales (VPN) sobre linux, como openvpn, poptop (protocolo pptp) y varias implementaciones de IPsec. Cada solución tiene sus beneficios y debilidades, elijo en este artículo no discutir la mejor opción para cada escenario sino explicar a modo de HOWTO cómo realizar una VPN basada en IPsec con openswan sobre linux, particularmente Debian.Breve introducción a IPsec

De wikipedia:IPsec (la abreviatura de Internet Protocol security) es una extensiónal protocolo IP que añade cifrado fuerte para permitir servicios deautenticación y, de esta manera, asegurar las comunicaciones a travésde dicho protocolo. Inicialmente fue desarrollado para usarse con elnuevo estándar IPv6, aunque posteriormente se adaptó a IPv4.IPsec actúa a nivel de capa de red, protegiendo y autenticando los paquetes IP entre los equipos participantes en la comunidad IPsec. No está ligado a ningún algoritmo de encriptación o autenticación, tecnología de claves o algoritmos de seguridad específico. Es más, IPsec es un marco de estándares que permite que cualquier nuevo algoritmo sea introducido sin necesitar de cambiar los estándares.IPSec está formado por un conjunto de protocolos de cifrado por (1) securing packet flows y (2) key exchange. De la forma:

• Encapsulating Security Payload (ESP), el cual provee autenticación, confidencialidad de datos e integridad del mensaje

• Authentication Header (AH), provee de autenticación e integridad de datos, pero no de confidencialidad.

Por sus características es el protocolo estándar para la construcción de redes privadas virtuales.

Propósito de diseñoIPsec fue proyectado para proporcionar seguridad en modo transporte (extremo a extremo) del tráfico de paquetes, en el que los ordenadores de los extremos finales realizan el procesado de seguridad, o en modo túnel (puerta a puerta) en el que la seguridad del tráfico de paquetes es proporcionada a varias máquinas (incluso a toda la red de area local) por un único nodo.

Page 2: VPN Openswan v1.2

FUNDACION CODIGO LIBRE DOMINICANADIVISION  DE INGENIERIA Y PROYECTOS

www.codigolibre.orgServicio:            Vpn con OpenswanAutor:                Cristhian Nunez ([email protected])Version:            1.2

IPsec puede utilizarse para crear VPNs en los dos modos, y este es su uso principal. Hay que tener en cuenta, sin embargo, que las implicaciones de seguridad son bastante diferentes entre los dos modos de operación.La seguridad de comunicaciones extremo a extremo a escala Internet se ha desarrollado más despacio de lo esperado. Parte de la razón a esto es que no ha surgido infraestructura de clave publica universal o universalmente de confianza (DNSSEC fue originalmente previsto para esto); otra parte es que muchos usuarios no comprenden lo suficientemente bien ni sus necesidades ni las opciones disponibles como para promover su inclusión en los productos de los vendedores.Como el Protocolo de internet no provee intrínsecamente de ninguna capacidad de seguridad, IPsec se introdujo para proporcionar servicios de seguridad tales como:

1. Cifrar el tráfico (de forma que no pueda ser leido por nadie más que las partes a las que está dirigido) 

2. Validación de integridad (asegurar que el tráfico no ha sido modificado a lo largo de su trayecto) 3. Autenticar a los extremos (asegurar que el tráfico proviene de un extremo de confianza) 4. Anti­repetición (proteger contra la repetición de la sesión segura). 

Modos

Transparente: Sólo se encripta el payload (el contenido del mensaje) y no el encabezado, normalmente es usado para túneles de host a host. Hay que tener en cuenta que no puede usarse NAT con el modo transparente, debido a que se rompe la hash al alterar el encabezado.

Túnel: Cada paquete es completamente encriptado y encapsulado dentro de otro, es el modo más usado y permite hacer VPNs de tipo red a red.

Autenticación

Las opciones más populares de autenticación son:

"Secreto compartido": (aka PSK) usando algoritmos de hashing como MD5 o SHA­1, al parecer recientemente ambos algoritmos de hashing fueron "crackeados", al menos reducido considerablemente el tiempo de crackeo, aunque todavía son "usables" sólo falta tiempo para que algún matemático refine la técnica y los vuelva trivialmente crackeables.

Certificados digitables: los cuales están basados en encriptación asimétrica. En este ejemplo se utiliza este método con el algoritmo RSA.

Encriptación e intercambio de llaves

Page 3: VPN Openswan v1.2

FUNDACION CODIGO LIBRE DOMINICANADIVISION  DE INGENIERIA Y PROYECTOS

www.codigolibre.orgServicio:            Vpn con OpenswanAutor:                Cristhian Nunez ([email protected])Version:            1.2

La encriptación sólo puede ser realizada usando ESP (o sea no con AH) y los algoritmos normalmente utilizados son: DES, 3DES y AES.El tráfico se encripta usando llaves que se renuevan a intervalos regulares, para el intercambio de llaves entre los pares se puede usar intercambio manual o automático (IKE).Manos a la obraSupongamos que queremos armar una VPN entre la casa central de una empresa y una sucursal para que la última pueda acceder a recursos de la casa central. En ambos lugares tenemos servidores Debian\linux bajo estable trabajando como Firewalls.

La topología del ejemplo es la siguiente:

Como antes nombré, utilizaremos Openswan para armar la VPN, este está disponible tanto en la distribución estable (Sarge), como para la de prueba (etch). Los núcleos oficiales de centos (2.4 y 2.6) incluyen el stack 26sec por lo que no hay necesidad de recompilar el kernel para tener soporte de ipsec.Para instalarlo hacemos lo siguiente:

Descargamos el paquete:

wget http://www.openswan.org/download/openswan­2.4.10.tar.gz

Descomprimimos y compilamos:

tar ­xvzf openswan­2.4.10.tar.gzcd openswan­2.4.10make programs make install

Page 4: VPN Openswan v1.2

FUNDACION CODIGO LIBRE DOMINICANADIVISION  DE INGENIERIA Y PROYECTOS

www.codigolibre.orgServicio:            Vpn con OpenswanAutor:                Cristhian Nunez ([email protected])Version:            1.2

Configuración

Por cada firewall debemos obtener la siguiente información:• IP publica del firewall• Rango IP dentro de la subred que tendra acceso a la VPN• Un nombre con el cual queda extremo pueda reconocerse, su forma es un FQDN precedido con 

un arroba, ej: @xy.example.com. (Tambien podemos usar las direcciones IP publicas)Primero creamos una llave en cada servidor ejecutando:fw­central$ ipsec newhostkey ­­output ­ >> /etc/ipsec.secretsfw­sucursal$ ipsec newhostkey ­­output ­ >> /etc/ipsec.secrets

Este proceso puede demorar bastante tiempo en máquinas no muy veloces,por lo que no desesperes.

El archivo de configuración principal es el /etc/ipsec.conf y en estese declara un extremo como izquierdo y el otro como derecho, quien escada cual es indistinto y además es determinado en la ejecución. Estopermite tener una misma configuración en ambos extremos sin tener quehacer traducciones. Para nuestro ejemplo usaremos la casa central comoizquierdo y la sucursal como derecho.

Ahora determinamos la llave pública de cada extremo ejecutando:

fw­central$ ipsec showhostkey ­­leftfw­sucursal$ ipsec showhostkey ­­right

esto mostrará algo como:

# RSA 2192 bits fw­central Wed Jan 24 21:48:39 2007leftrsasigkey=0sAQO9Pc....# RSA 2192 bits fw­sucursal Sat Feb 3 03:51:44 2007rightrsasigkey=0sAQOW...

Ahora editamos en ambos extremos el archivo /etc/ipsec.conf yagregamos al final:

Page 5: VPN Openswan v1.2

FUNDACION CODIGO LIBRE DOMINICANADIVISION  DE INGENIERIA Y PROYECTOS

www.codigolibre.orgServicio:            Vpn con OpenswanAutor:                Cristhian Nunez ([email protected])Version:            1.2

$ vi /etc/ipsec.conf

conn central­a­sucursalleft=1.2.3.4leftsubnet=172.16.0.0/24leftid=1.2.3.4leftrsasigkey=0sAQOGJ...right=1.2.3.5rightsubnet=192.168.66.0/24rightid=1.2.3.5rightrsasigkey=0sAQOW...auto=add # add autoriza la conexion pero no la establece automaticamenteDonde:

left: Se refiere a la conexion declarada para el left side. Debe ser una ip publica.leftsubnet: Se refiere al rango de direccion privada colocada detras del equipo identificado como leftleftid: Es la manera de como el equipo left va a ser identificado del otro lado de la vpnleftrsakey: La firma RSA del equipo nombrado como left.right: Se refiere a la conexion declarada para el right side. Debe ser una ip publica.rightsubnet: Se refiere al rango de direccion privada colocada detras del equipo identificado como right: Se refiere a la conexion declarada para el left side. Debe ser una ip publica.rightid: Es la manera de como el equipo right va a ser identificado del otro lado de la vpnritghtsakey: La firma RSA del equipo nombrado como rightauto: Autoriza la conexion pero no la establece. Los diferentes tipos de conexion pueden ser: start,add,ignore. Start inicia la conexion automaticamente cada vez que ser reinicia el sistema, add la inicia manualmente e ignore, la ignora por completo.  Finalmente agregar la siguiente linea al final del archivo para deshabilitar oportunistic encription include /etc/ipsec.d/examples/no_oe.conf

Asegurarse de tener encendido el bit de forwarding en ambos extremos: [root@santodomingo ~]# vim /etc/sysctl.conf # Controls IP packet forwardingnet.ipv4.ip_forward = 1

Grabar y exportarla

Page 6: VPN Openswan v1.2

FUNDACION CODIGO LIBRE DOMINICANADIVISION  DE INGENIERIA Y PROYECTOS

www.codigolibre.orgServicio:            Vpn con OpenswanAutor:                Cristhian Nunez ([email protected])Version:            1.2

sysctl ­p

Reiniciamos openswan en ambos servidores:$ /etc/init.d/ipsec restartProbamos que levante manualmente:$ ipsec auto ­­up central­a­sucursal

Si sale todo bien, el último mensaje dirá algo como:004 "central­a­sucursal" #2: STATE_QUICK_I2: sent QI2, IPsec SAestablished {ESP=>0x84b3d554 ...

Consideraciones• Para que el túnel levante automáticamente al inicio se debe cambiar la opción auto=add por 

auto=start• En el caso de que tengas IP dinámicas en alguno o ambos de los puntos, puedes mirar los 

ejemplos del wiki de openswan para "roadwarrior"• Es importante que si tienes reglas de NAT estas no se apliquen al tráfico del túnel.• Si tienes un firewall construido con la regla por defecto en denegar todo, debes permitir los 

protocolos de IPsec (numero 50 y 51). Ej:iptables ­A INPUT ­p 50 ­j ACCEPTiptables ­A OUTPUT ­p 50 ­j ACCEPTiptables ­A INPUT ­p 51 ­j ACCEPTiptables ­A OUTPUT ­p 51 ­j ACCEPT

Configuracion con Llave compartidaLa Pre­Shared Key (clave compartida inicial) es la que identifica a cada una de las partes en la primera fase del intercambio de claves (IKE). Se llama compartida porque los dispositivos la comparten entre si antes de inicializar la conexión segura. Podemos tambien usar este metodo en lugar de utilizar RSA.Configuracion con clave compartida Editamos /etc/ipsec/ipsec.conf y agregamos una conexion nueva si queremos conectar 2 sucursales con PSK.~#vim /etc/ipsec.confconn centrarl­a­sucursalromana

authby=secretleft=1.2.3.4leftsubnet=172.16.0.0/24leftid=1.2.3.4

Page 7: VPN Openswan v1.2

FUNDACION CODIGO LIBRE DOMINICANADIVISION  DE INGENIERIA Y PROYECTOS

www.codigolibre.orgServicio:            Vpn con OpenswanAutor:                Cristhian Nunez ([email protected])Version:            1.2

right=1.2.3.6rightsubnet=192.168.70.0/24rightid=1.2.3.6auto=add # add autoriza la conexion pero no la establece automaticamente

Agregamos la siguiente linea al final del archivo para deshabilitar oportunistic encription include /etc/ipsec.d/examples/no_oe.conf

Luego debemos crear la llave compartida que sera utilizada en esta conexion. Editamos el archivo /etc/ipsec.secrets en ambos servidores para agregar las ips que compartiran esta llave. Agregamos al principio la siguiente linea.

fw­central# vim /etc/ipsec.secrets1.2.3.4 1.2.3.6 : PSK "fcld" 

fw­sucursal# vim /etc/ipsec.secrets1.2.3.4 1.2.3.6 : PSK "fcld"

Esta linea indica que desde las direcciones ip 1.2.3.4 y 1.2.3.6 se compartiran la clave fcld para establecer la conexion por PSK.

Si deseamos que cualquier equipo se conecte a nuestro servidor con una clave compartida colocamos en el archivo /etc/ipsec.secrets la siguiente linea:fw­central# vim /etc/ipsec.secrets%any 1.2.3.4 : PSK "clavecompartidaconquiensea" Asi, cuando alguien trate de conectarse al servidor ofreciendo esta llave, el servidor le permitirar autenticarse.

Luego de todos esto, reiniciamos y estaremos listos para utilizar la conexion centrar­a­sucursalromana por medio a llave compartida o PSK./etc/init.d/ipsec restart

Configuracion RoadwarriorUna configuración RoadWarrior es aquella en la cual se tiene una red privada con uno o varios clientes que accesarán a la red como si fueran parte de ella (arquitectura host­to­net). Para la conexion de openswan de modo roadwarrior con clientes windows, es necesario instalar en el servidor de vpn un servicio o demonio que maneje el protocolo l2tp.L2TP

Page 8: VPN Openswan v1.2

FUNDACION CODIGO LIBRE DOMINICANADIVISION  DE INGENIERIA Y PROYECTOS

www.codigolibre.orgServicio:            Vpn con OpenswanAutor:                Cristhian Nunez ([email protected])Version:            1.2

 L2TP (Layer 2 Tunneling Protocol) fue diseñado por un grupo de trabajo de IETF como el heredero aparente de los protocolos PPTP y L2F, creado para corregir las deficiencias de estos protocolos y establecerse como un estándar aprobado por el IETF. L2TP utiliza PPP para proporcionar acceso telefónico que puede ser dirigido a través de un túnel por Internet hasta un punto determinado. L2TP define su propio protocolo de establecimiento de túneles, basado en L2F. El transporte de L2TP está definido para una gran variedad de tipos de paquetes, incluyendo X.25, Frame Relay y ATM.Al utilizar PPP para el establecimiento telefónico de enlaces, L2TP incluye los mecanismos de autenticación de PPP, PAP y CHAP. De forma similar a PPTP, soporta la utilización de estos protocolos de autenticación, como RADIUS.

En nuestro caso utilizaremos el demonio xl2tpd para el protocolo l2tp en linux. Este se encuentra en los repositorios de Centos y Debian para su descarga. Tambien pueden descargar una version desde este link:ftp://195.220.108.108/linux/fedora/releases/7/Everything/i386/os/Fedora/xl2tpd­1.1.09­1.fc7.i386.rpm

Por defecto los archivos de configuracion se depositan en /etc/x12tpd/. Procedemos entonces a editar el archivo /etc/xl2tpd/xl2tpd.conf

~# vim /etc/xl2tpd/xl2tpd.conf[global] auth file = /etc/xl2tpd/l2tp­secrets debug network = yes debug packet = yes debug state = yes 

Page 9: VPN Openswan v1.2

FUNDACION CODIGO LIBRE DOMINICANADIVISION  DE INGENIERIA Y PROYECTOS

www.codigolibre.orgServicio:            Vpn con OpenswanAutor:                Cristhian Nunez ([email protected])Version:            1.2

debug tunnel = yes 

[lns default] ip range = 192.168.4.1­192.168.4.222 # Especifica el rango de ip a brindar a los clientes l2tplocal ip = 192.168.4.99 # Ip del servidor dentro del rango l2tprequire chap = yes # Utilizaremos autenticacion CHAPrefuse pap = yes #Rechazamos autenticacion PAPrequire authentication = yes #Solicita una autenticacion al conectarsename = FcldVPN # Nombre de la conexionppp debug = yes # Habilita el debug para pppdpppoptfile = /etc/ppp/options.xl2tpd # Especifica la ruta del archivo que contiene los parametros de configuracion a utilizarlength bit = yes # 

El archivo se divide en 2 secciones: [global] y [lns default]. La seccion global abarca los parametros globales de l2tp y la seccion [lns default] los parametros especificos de cada subnet.

Nos aseguramos de tener los siguientes parametros en el archivo  /etc/ppp/options.xl2tpd~# vim /etc/ppp/options.xl2tpdipcp­accept­local ipcp­accept­remote ms­dns  192.168.1.1 #Se coloca  aqui el dns que van a utilizar los clientes del tunel noccp auth crtscts idle 1800 mtu 1410 mru 1410 nodefaultroute debug lock proxyarp connect­delay 5000 

Finalmente configuramos el archivo /etc/ppp/chap­secrets para habilitar los usuarios que se conectaran a traves de l2tp.

~#vim /etc/ppp/chap­secrets# Secrets for authentication using CHAP # client        server  secret                  IP addresses 

Page 10: VPN Openswan v1.2

FUNDACION CODIGO LIBRE DOMINICANADIVISION  DE INGENIERIA Y PROYECTOS

www.codigolibre.orgServicio:            Vpn con OpenswanAutor:                Cristhian Nunez ([email protected])Version:            1.2

usuario1         *       clave1                   * 

Reiniciar los servicios/etc/init.d/xl2tpd restart/etc/init.d/ipsec restart

Configuracion L2TP en openswanEditamos el archivo /etc/ipsec.conf y agregamos las siguientes conexiones que habilitan l2tp y clientes desde conexiones nateadas.conn L2TP­PSK­NAT         rightsubnet=vhost:%priv         also=L2TP­PSK 

conn L2TP­PSK         authby=secret         pfs=no         rekey=no         keyingtries=3         left=1.2.3.4        leftprotoport=17/1701         right=%any         rightprotoport=17/%any         leftnexthop=1.2.3.4        type=transport         auto=add 

Y reiniciamos openswan./etc/init.d/ipsec restart

Configuracion Clientes Windows XPRealizar los siguientes pasos en el cliente windows XP

Ir a network connection­> add a new enterprise connection­> connection to a VPN 

Name enter: onemax Do not establish an initial connection IP address enter: IP DEL SERVIDOR VPN Hacer click en Finish 

Page 11: VPN Openswan v1.2

FUNDACION CODIGO LIBRE DOMINICANADIVISION  DE INGENIERIA Y PROYECTOS

www.codigolibre.orgServicio:            Vpn con OpenswanAutor:                Cristhian Nunez ([email protected])Version:            1.2

La ventana de usuario y clave deberia aparecer: Entonces ir a  properties Ir a la pestana Security­> Click en IPSEC Param ­> Check “Use a pre shared key” Introducir la llave compartida: millavecompartidaIr a la 4ta pestana , y seleccionar en VPN type to VPN L2TP IPSEC Click OK y regresa a la ventana de usuario y clave: 

user: usuario1pass: clave1 

Bibliografiahttp://brsi.blogspot.com/search/label/howtoman ipsec.confhttp://es.wikipedia.org