Upload
leonar-andres-gutierrez
View
768
Download
0
Embed Size (px)
Citation preview
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.
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. Antirepetició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 SHA1, 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
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/openswan2.4.10.tar.gz
Descomprimimos y compilamos:
tar xvzf openswan2.4.10.tar.gzcd openswan2.4.10make programs make install
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:fwcentral$ ipsec newhostkey output >> /etc/ipsec.secretsfwsucursal$ 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:
fwcentral$ ipsec showhostkey leftfwsucursal$ ipsec showhostkey right
esto mostrará algo como:
# RSA 2192 bits fwcentral Wed Jan 24 21:48:39 2007leftrsasigkey=0sAQO9Pc....# RSA 2192 bits fwsucursal Sat Feb 3 03:51:44 2007rightrsasigkey=0sAQOW...
Ahora editamos en ambos extremos el archivo /etc/ipsec.conf yagregamos al final:
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 centralasucursalleft=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
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 centralasucursal
Si sale todo bien, el último mensaje dirá algo como:004 "centralasucursal" #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 PreShared 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 centrarlasucursalromana
authby=secretleft=1.2.3.4leftsubnet=172.16.0.0/24leftid=1.2.3.4
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.
fwcentral# vim /etc/ipsec.secrets1.2.3.4 1.2.3.6 : PSK "fcld"
fwsucursal# 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:fwcentral# 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 centrarasucursalromana 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 hosttonet). 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
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/xl2tpd1.1.091.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/l2tpsecrets debug network = yes debug packet = yes debug state = yes
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.1192.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.xl2tpdipcpacceptlocal ipcpacceptremote msdns 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 connectdelay 5000
Finalmente configuramos el archivo /etc/ppp/chapsecrets para habilitar los usuarios que se conectaran a traves de l2tp.
~#vim /etc/ppp/chapsecrets# Secrets for authentication using CHAP # client server secret IP addresses
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 L2TPPSKNAT rightsubnet=vhost:%priv also=L2TPPSK
conn L2TPPSK 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
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