martes, 1 de julio de 2008

Configuracion De IPsec En Linux Utilizando Racoon

Racoon es un software que se comunica atravez de IKE (ISAKMP / Oakley) para establecer una asociacion de seguridad entre varios equipos.

Debemos instalar el paquete desde el repositorio:

#apt-get install racoon

El directorio donde se almacenanlos archivos es: /etc/racoon

Debemos configurar la clave precompartida con la que se estableceran las conexiones, esto lo hacemos desde el archivo /etc/racoon/psk.txt

#pico /etc/racoon/psk.txt

Un archivo psk.txt correctamente configurado se veria asi:

# Direcciones IPv4
192.168.0.20 clave precompartida simple 192.168.0.10 "abcdefghijklmnopqrstuvwx"
# USER_FQDN
#sgarcia@misena.edu.co Esta es una clave precompartida para una dirección de correo
# FQDN
#www.spenneberg.net Esta es una clave precompartida

# IPv4/v6 addresses
#10.160.94.3 mekmitasdigoat
#172.16.1.133 0x12345678
#194.100.55.1 whatcertificatereally
#3ffe:501:410:ffff:200:86ff:fe05:80fa mekmitasdigoat
#3ffe:501:410:ffff:210:4bff:fea2:8baa mekmitasdigoat
# USER_FQDN
#foo@kame.net mekmitasdigoat
# FQDN
#foo.kame.net hoge


La parte resaltada es la mas importante puesto que alli configuramos las direcciones IP de los eqipos que se comunicaran utilizando esa clave precompartida (las direcciones cambian segun el caso de cada red y la configuracion debe ser igual en el otro equipo pero con las direcciones invertidas).


Despues de terminar la configuracion de este archivo pasamos a configurar el archivo racoon.conf.

#pico /etc/racoon.conf

Desde este archivo configuraremos los algoritmos de cifrado entre otras cosas.
Veamos el archivo

# NOTE: This file will not be used if you use racoon-tool(8) to manage your
# IPsec connections. racoon-tool will process racoon-tool.conf(5) and
# generate a configuration (/var/lib/racoon/racoon.conf) and use it, instead
# of this file.
#
# Simple racoon.conf
#
#
# Please look in /usr/share/doc/racoon/examples for
# examples that come with the source.
#
# Please read racoon.conf(5) for details, and alsoread setkey(8).
#
#
# Also read the Linux IPSEC Howto up at
# http://www.ipsec-howto.org/t1.html
#

path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

remote 192.168.0.20 {
exchange_mode main,aggressive;
proposal {
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method pre_shared_key;
dh_group modp768;
}
generate_policy off;
}

sainfo address 192.168.0.10[any] any address 192.168.0.20[any] any {
pfs_group modp768;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
compression_algorithm deflate;
}
sainfo address 192.168.0.20[any] any address 192.168.0.10[any] any {
pfs_group modp768;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
compression_algorithm deflate;
}


Si nos ponemos a analizar detalladamente este archivo veremos que al igual que en los demas archivos que hemos configurado para trabajar con IPsec se deben generar parametros de comunicacion que involucran las direcciones IP de los equipos que se van a comunicar de forma segura, tambien podemos ver que en el parametro "remote" como es obvio debemos poner la direccion IP del equipo remoto, tambien desde aca definimos los algoritmos de cifrado y autenticacion que en este caso son:

Cifrado: 3des
Autenticacion: hmac_md5


Por ultimo debemos configurar el archivo de configuracion de IPsec.

#pico /etc/ipsec-tools.conf

Asi quedaria el archivo configurado correctamente:

#!/usr/sbin/setkey -f

# NOTE: Do not use this file if you use racoon with racoon-tool
# utility. racoon-tool will setup SAs and SPDs automatically using
# /etc/racoon/racoon-tool.conf configuration.
#

## Flush the SAD and SPD
#
flush;
spdflush;

## Some sample SPDs for use racoon
#
# spdadd 10.10.100.1 10.10.100.2 any -P out ipsec
# esp/transport//require;
#
# spdadd 10.10.100.2 10.10.100.1 any -P in ipsec
# esp/transport//require;
#

# Políticas de seguridad
spdadd 192.168.0.10 192.168.0.20 any -P out ipsec
esp/transport//require;
# ah/transport//require;
spdadd 192.168.0.20 192.168.0.10 any -P in ipsec
esp/transport//require;
# ah/transport//require;

Despues de tener los archivos de configuracion correctamente configurados reiniciamos los servicios:

#setkey -f ipsec-tools.conf

#/etc/init.d/racoon restart

Con esto terminamos la configuracion de IPsec con Racoon. Veamos una captura realizada con una configuracion correcta.

Configuracion De IPsec en Linux

Debemos instalar primero el paquete de IPsec.

#apt-get install ipsec-tools

-Cuando instalamos ipsec debemos ver si existe un archivo llamado
ipsec-tools.conf, este aparece en el directorio /etc esta es una muestra de lo que contiene este archivo.


-Estas son las lineas que debemos modificar:


primero debemos descomentar las lineas


# flush;
# spdflush;

NOTA: ipsec trabaja con AH (AUTHENTICATION HEADER) y ESP (ENCAPSULATION SECURITY PAYLOAD). y vamos a configurar IPsec con cada uno de ellos.

*
Configuracion IPsec con AH.

AH es un protocolo que proporciona en el ámbito de IPSec la autenticación del emisor y la integridad del mensaje mediante el cálculo de un código HMAC.

-
Debemos agregar las siguientes lineas en el archivo de configuracion para que nuestro IPsec trabaje con AH (las direcciones IP utilizadas aqui son para el caso del ejemplo, para otra configuracion debes tener en cuenta el rango de direccionamiento de la red):

add 192.168.0.10 192.168.0.20 ah 0x200 -A hmac-md5 "abcdefghijklmnop";
add 192.168.0.20 192.168.0.10 ah 0x300 -A hmac-md5 "abcdefghijklmnop";

192.168.0.10 es mi direccion IP y 192.168.0.20 es la direccion del equipo con el estableceremos la conexion IPsec, hmac-md5 es el algoritmo que usaremos y "abcdefghijklmnop" es la clave precompartida que debe ser de 1024 bits ya que esto es lo que soporta md5. La longitud varia dependiendo del algoritmo que se utilize.

La segunda linea se agrega para establecer la conexion en sentido contrario, estableciendo asi la comunicacion en doble sentido.

-Tambien debemos configurar las siguientes lineas del archivo ipsec-tools.conf

spdadd 192.168.0.10 192.168.0.20 any -P out ipsec
ah/transport//require;


spdadd 192.168.0.20 192.168.0.10 any -P in ipsec
ah/transport//require;


Asi especificamos nuevamente la comunicacion en ambos sentidos y tambien que trabajaremos con AH.

Asi queda el archivo de configuracion correcto:

#!/usr/sbin/setkey -f

# NOTE: Do not use this file if you use racoon with racoon-tool
# utility. racoon-tool will setup SAs and SPDs automatically using
# /etc/racoon/racoon-tool.conf configuration.
#


## Flush the SAD and SPD
#
flush;
spdflush;

## Some sample SPDs for use racoon
add 192.168.0.10 192.168.0.20 ah 0x200 -A hmac-md5 "abcdefghijklmnop";
add 192.168.0.20 192.168.0.10 ah 0x300 -A hmac-md5 "abcdefghijklmnop";

#
spdadd 192.168.0.10 192.168.0.20 any -P out ipsec
ah/transport//require;

#
spdadd 192.168.0.20 192.168.0.10 any -P in ipsec
ah/transport//require;

#


-Algo que debemos tener en cuenta es que en el equipo con el que vamos a establecer la conexion IPsec debe tener los mismos parametros configurados pero en sentido contrario al nuestro, por ejemplo, veamos como se veria el archivo de configuracion del equipo 192.168.0.20:


#!/usr/sbin/setkey -f

# NOTE: Do not use this file if you use racoon with racoon-tool
# utility. racoon-tool will setup SAs and SPDs automatically using
# /etc/racoon/racoon-tool.conf configuration.
#

## Flush the SAD and SPD
#
flush;
spdflush;

## Some sample SPDs for use racoon
add 192.168.0.20 192.168.0.10 ah 0x300 -A hmac-md5 "abcdefghijklmnop";
add 192.168.0.10 192.168.0.20 ah 0x200 -A hmac-md5 "abcdefghijklmnop";

#

spdadd 192.168.0.20 192.168.0.10 any -P out ipsec
ah/transport//require;

#
spdadd 192.168.0.10 192.168.0.20 any -P in ipsec

ah/transport//require;

#

-Despues de tener listo el archivo de configuracion recargamos IPsec

#
setkey -f /etc/ipsec-tools.conf

Ahora podemos comprobar si esta funcionando capturando paquetes con el comando tcpdump.

Si la configuracion esta correcta debemos ver un resultado como este:


La configuracion de ipsec con AH esta terminada.


* Configuracion de IPsec con ESP.


ESP es un protocolo que proporciona en el ámbito IPSec confidencialidad, autenticación y protección de integridad utilizando llaves cifradas.

El archivo terminado con ESP queda de esta manera:

#!/usr/sbin/setkey -f

# NOTE: Do not use this file if you use racoon with racoon-tool
# utility. racoon-tool will setup SAs and SPDs automatically using
# /etc/racoon/racoon-tool.conf configuration.
#

## Flush the SAD and SPD
#
flush;
spdflush;

## Some sample SPDs for use racoon

add 192.168.0.10 192.168.0.20 esp 0x201 -E 3des-cbc "abcdefghijklmnopqrstuvwx";
add 192.168.0.20 192.168.0.10 esp 0x301 -E 3des-cbc "abcdefghijklmnopqrstuvwx";

#
spdadd 192.168.0.10 192.168.0.20 any -P out ipsec
esp/transport//require;

#
spdadd 192.168.0.20 192.168.0.10 any -P in ipsec
esp/transport//require;

#

Las 2 diferencias principales en comparacion con la configuracion de AH son: El algoritmo de cifrado cambio de md5 a 3des y por eso la longitud de la clave precompartida cambia a 2048 bites, es decir 24 caracteres y que ahora la opcion "-A" cambio a "-E" para encriptar.


-Recargamos ipsec

#setkey -f /etc/ipsec-tools.conf

-Hacemos la misma prueba que con AH usando tcpdump.


si nos aparece el siguiente resultado esto significa que todo esta bien configurado:

con esto hemos terminado la configuracion de ipsec con esp y seguiremos con:

* Configurcion de IPsec con AH y ESP.

Es posible que IPsec funcione con AH y ESP juntos para hacerlo mucho mas seguro. Para hacerlo simplemente juntamos las dos configuraciones que hicimos anteriormente, veamos como queda el archivo de configuracion:

#!/usr/sbin/setkey -f

# NOTE: Do not use this file if you use racoon with racoon-tool
# utility. racoon-tool will setup SAs and SPDs automatically using
# /etc/racoon/racoon-tool.conf configuration.

## Flush the SAD and SPD
#
flush;
spdflush;

#

## Some sample SPDs for use racoon
add 192.168.0.10 192.168.0.20 ah 0x200 -A hmac-md5 "abcdefghijklmnop";
add 192.168.0.20 192.168.0.10 ah 0x300 -A hmac-md5 "abcdefghijklmnop";
add 192.168.0.10 192.168.0.20 esp 0x201 -E 3des-cbc
"abcdefghijklmnopqrstuvwx";
add 192.168.0.20 192.168.0.10 esp 0x301 -E 3des-cbc "abcdefghijklmnopqrstuvwx";


#
spdadd 192.168.0.10 192.168.0.20 any -P out ipsec
esp/transport//require
ah/transport//require;

#
spdadd 192.168.0.20 192.168.0.10 any -P in ipsec
esp/transport//require
ah/transport//require;

#

-Capturamos trafico con tcpdump y nos debe mostrar un resultado como este, debemos copiar el siguiente comando esto se hizo tambien con las anteriores capturas:

#tcpdump -i eth0 src host 192.168.0.20 or dst host 192.168.0.20





Damos por terminado la configuracion de ipsec con ah y esp.