Google
 

martes, 27 de mayo de 2008

Openswan: ipsec en linux (I)

Ya que me he estado peleando con IPsec en linux voy a dejar los pasos que hay que seguir para crear un túnel en modo transporte mediante openswan. Supongo que sabrás que es esto de IPsec, y también teoría sobre túneles pues para poder entender que estas configurando lo necesitarás.

Voy a explicar la configuración necesaria para autenticarse mediante

  • Claves compartidas
  • RSA
  • Certificados X.509


Lo primero de todo es instalar openswan, yo lo hice desde los repositorios de debian y no tuve ningún problema en la instalación. Tengo entendido que si usas un kernel 2.6 no necesitas nada más, pero si tienes un kernel 2.4 vas a tener que parchearlo para añadir KLIPS. ( $:/>uname -r para saber el tuyo) A la hora de instalarlo te indica que si quieres opportunistic encryption yo le he dicho que no y tampoco quiero que me cree claves rsa ni certificados. Todo esto lo haremos nosotros.


Después de instalar openswan vamos a levantar el servicio:

#:/>/etc/init.d/ipsec start
ipsec_setup: Starting Openswan IPsec 2.4.9...
#:/>

Dependiendo del kernel que uses te saldran más o menos mensajes de salida, pero eso es lo de menos. Ahora vamos a comprobar que todo va bien:

#:/>ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.4.9/K2.6.24-16-generic (netkey)
Checking for IPsec support in kernel [OK]
NETKEY detected, testing for disabled ICMP send_redirects [FAILED]

Please disable /proc/sys/net/ipv4/conf/*/send_redirects
or NETKEY will cause the sending of bogus ICMP redirects!

NETKEY detected, testing for disabled ICMP accept_redirects [FAILED]

Please disable /proc/sys/net/ipv4/conf/*/accept_redirects
or NETKEY will accept bogus ICMP redirects!

Checking for RSA private key (/etc/ipsec.secrets) [DISABLED]
ipsec showhostkey: no default key in "/etc/ipsec.secrets"
Checking that pluto is running [OK]
Two or more interfaces found, checking IP forwarding [FAILED]
Checking for 'ip' command [OK]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support [DISABLED]
#:/>

Para solucionar esto es necesario ejecutar tres comandos que sólo los encontré en esta página. Los comandos ha ejecutar son:
#:/>for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 0 > $f; done
#:/>for f in /proc/sys/net/ipv4/conf/*/send_redirects; do echo 0 >; $f; done
#:/>echo 1 > /proc/sys/net/ipv4/ip_forward

Los dos primeros son necesarios para la denegar el envío y aceptación de paquetes ICMP de redirección y el último para aceptar la redirección de paquetes que no son nuestros.

Una vez ejecutados los comandos, la salida de ipsec verify es la siguiente:
#:/>ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.4.9/K2.6.24-16-generic (netkey)
Checking for IPsec support in kernel [OK]
NETKEY detected, testing for disabled ICMP send_redirects [OK]
NETKEY detected, testing for disabled ICMP accept_redirects [OK]
Checking for RSA private key (/etc/ipsec.secrets) [DISABLED]
ipsec showhostkey: no default key in "/etc/ipsec.secrets"
Checking that pluto is running [OK]
Two or more interfaces found, checking IP forwarding [OK]
Checking NAT and MASQUERADEing [N/A]
Checking for 'ip' command [OK]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support [DISABLED]
#:/>

Debes verificar esto cada vez que reinicies el ordenador.
Ahora llega el paso de configurar openswan, vamos a explicar el método de clave compartida(PSK).

Para configurar IPsec mediante clave compartida sólo hay que configurar dos archivos:
  • ipsec.secrets, (que estará en /etc/ipsec.secrets)
  • ipsec.conf, (que estará en /etc/ipsec.conf)
Vamos a empezar por ipsec.conf, editamos el fichero con nuestro editor favorito:

#:/>vi /etc/ipsec.conf

y añadimos al final:

conn linux-linux # Nombre de la conexión
authby=secret # Autenticación mediante clave compartida
left=192.168.1.100 # La IP del equipo de un lado del túnel
leftid=@laptop.dbx # Identificador de red del equipo, no te preocupes por esto puedes poner cualquier nombre
right=192.168.1.2 # La IP del equipo del otro lado del túnel
right=@xbase.dbx # Identificador del equipo
auto=add # Para levantar el túnel manualmente

(CUIDADO: todas la líneas referentes a una conexión necesitan un tabulado, es decir, desde la línea authby... hasta la última auto... necesitan ser tabuladas)
Creo que con los comentarios está todo bien explicado no??(sino esto no es lo tuyo...xD)
Esta configuración es para dos máquinas que estén en la misma red o que se vean entre sí. Si quisieramos conectar dos redes mediante Internet habría que añadir:

leftnexthop=%defaultroute
rightnexthop=%defaultroute

Con esto lo que conseguimos es que envíe los paquetes al router, y que sea el quién se encargue de llevarlos al otro extremo del túnel. Si esto lo pensamos es lógico, en la anterior configuración no era necesario puesto que estamos creando un túnel entre dos host de la misma red, y ellos saben encontrarse. Para ver que es lo que tiene openswan por defaultroute ejecutamos:
#:/>ipsec showdefaults
routephys=wlan0
routevirt=ipsec0
routeaddr=192.168.1.100
routenexthop=192.168.1.1
#:/>


Ahora vamos a por el otro archivo de configuración que nos queda, ipsec.secrets:

Puesto que la fortaleza de este método(autenticación mediante PSK) reside en la clave elegida, la propia herramienta permite generarnos una clave que podemos considerar segura.

#:/>ipsec ranbits 128
0x205e3332_93ed0e56_03b58c08_75ef2c4c
#:/>

No te preocupes por la clave, no hay que aprendersela!!xD Quedará en un fichero, así que revisad bien los permisos que sólo root pueda trabajar con el archivo.

Copiamos esa clave y la añadimos al fichero ipsec.secrets, nos quedará algo así:
#:/>vi /etc/ipsec.secrets

# RCSID $Id: ipsec.secrets.proto,v 1.3.6.1 2005/09/28 13:59:14 paul Exp $
# This file holds shared secrets or RSA private keys for inter-Pluto
# authentication. See ipsec_pluto(8) manpage, and HTML documentation.

# RSA private key for this host, authenticating it to any other host
# which knows the public part. Suitable public keys, for ipsec.conf, DNS,
# or configuration of other implementations, can be extracted conveniently
# with "ipsec showhostkey".

#Clave PSK para conexion linux-linux
192.168.1.100 192.168.1.2 : PSK "fe774cd2_309cb910_b1f869d4_23222782"

Una vez realizada la configuración copiamos los dos archivos a los dos extremos del túnel, 192.168.1.2 === 192.168.1.100, que es desde y hasta donde viajará la información cifrada.

Reiniciamos el servicio ipsec:
#:/>/etc/init.d/ipsec restart

Levantamos el túnel linux-linux:
#:/>ipsec auto --up linux-linux

Nos fijamos que al final nos salga algo así:
004 "linux-linux" #7: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_PRESHARED_KEY cipher=oakley_3des_cbc_192 prf=oakley_md5 group=modp1536}
117 "linux-linux" #8: STATE_QUICK_I1: initiate
004 "linux-linux" #8: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0xbf98f229 <0xd9165e59 xfrm=AES_0-HMAC_SHA1 NATD=none DPD=none}

Si es así, todo habrá ido bien. Para verificarlo podemos ejecutar:
#:/>/etc/init.d/ipsec status
IPsec running - pluto pid: 27918
pluto pid 27918
1 tunnels up
#:/>

Hay que recordar que las SA son unidireccionales, luego es necesario establecer una SA en cada dirección del túnel.(vamos que ejecutes ipsec auto --up linux-linux en las dos máquinas)


Si todo no ha sido tan bonito y han aparecido fallos, espero que no pues este es el método más sencillo, a mi me ayudó a solucionarlos cuando me aparecieron en la autenticación mediante certificados estos dos comandos:
#:/>ipsec auto --add
(en nuestro caso ipsec auto --add linux-linux)
No suele tener mensajes tan descriptivos como en auth.log.

Podemos ver los intentos de autenticación de ipsec, he de decir que son muy descriptivos, a mí me ayudó bastante.
#:/>tail -n 200 /var/log/auth.log


Una vez ya entiendes todo esto te dejo algunos enlaces por si quieres revisar/complementar:
Para la autenticación mediante rsa dejaré más enlaces.

Un saludo

David

sábado, 17 de mayo de 2008

Grave incidente en Debian - openssl con los prng

Ya os habréis enterado todos del problema que ha habido con los números pseudo aleatorios de openssl en el paquete de Debian.
No voy a comentar el problema, pues hay muchos mejores sitios que lo hacen con más conocimiento que yo, sólo voy a poner una lista de webs interesantes que tratan el tema. Lo grave de este bug, no es el bug en sí, sino que se han creado muchas dudas sobre el código abierto. Sobre este tema se puede leer los comentarios que se han dejado en el enlace de kriptopolis.

Webs que tratan el tema:

Webs con herramientas:

jueves, 8 de mayo de 2008

Apagar pc desde la consola de linux (I)

Si queremos apagar el pc desde la consola en linux con un usuario no-privilegiado el sistema no nos va a dejar. Tendríamos que hacer uso de sudo y escribir nuestra contraseña, pero esto para un comando como es shutdown, poweroff o reboot para apagar/reiniciar el sistema no lo veo adecuado. Entonces para poder apagar/reiniciar el sistema sin necesidad de contraseñas tenemos dos opciones:
  1. sudo
  2. permisos de linux
Para la primera opción, he encontrado una página en español donde explican muy bien todo el tema de sudo, sudoers y visudo.

Para ejecutar el comando mediante sudo y sin contraseña, se necesitan dar permisos a nuestro usuario para que pueda ejecutar el comando shutdown sin contraseña.Para ello,
  1. Abrir la línea de comandos
  2. Ingresamos como root y ejecutamos
    visudo#/ visudo o mediante $/ sudo visudo
  3. al final del fichero escribimos:
nombre_usuario ALL=(root) NOPASSWD: /usr/sbin/shutdown

donde
  • nombre_usuario es el usuario que queremos que ejecute shutdown sin contraseña.
  • NOPASSWD le decimos que no pida contraseña para los comando que le siguen, en nuestro

visudo

Una vez hecho esto, ya podemos ejecutar shutdown sin contraseña como si fuesemos root.

$/ sudo shutdown -P now

El único inconveniente de esta opción es que hay que escribir sudo... vale si no es mucho, pero con la segunda opción nos evitaremos el tener que escribir sudo.

Para no hacer un post muy largo dejo la opción de usar el sistema de permisos de linux para una segunda entrega.

martes, 29 de abril de 2008

Vmware y el nuevo nucleo de Hardy Heron

Después de instalar un nuevo sistema operativo, toca reinstalar los programas que tenías; y es el turno de Vmware server. Este da problemas con el nuevo nucleo de Ubuntu Hardy Heron ( 2.6.24-16), después de buscar información encontre este enlace de theefrit.com que lo resuelve.

http://www.theefrit.com/blog/2008/04/25/vmware-server-105-y-ubuntu-804-hardy-heron-amd64


Por si algún día se perdieran los pasos a seguir copio un resumen de ellos:

  • $ wget http://uruz.org/files/vmware-any-any-update-116.tgz
  • $ tar xvzf vmware-any-any-update116.tgz
  • $ cd vmware-any-any-update116
  • # ./runme.pl
Al ejecutar vmware desde la consola nos da un error en gcc, para resolverlo hay que hacer un enlace simbolico:

  • # ln -sf /lib/libgcc_s.so.1 /usr/lib/vmware/lib/libgcc_s.so.1/libgcc_s.so.1
  • # ln -sf /usr/lib/libpng12.so.0 /usr/lib/vmware/lib/libpng12.so.0/libpng12.so.0

sábado, 19 de abril de 2008

10 aspectos a considerar cuando eligas una distribucion Linux

Este segundo cuatrimestre de Universidad me está comiendo todo el tiempo libre que tengo, y retrasando muchos proyectos/tareas que tengo en mente como:
  • cambiar el aspecto del blog
  • Investigar con wifi
  • Investigar con bluetooth (para cuando me traigan mi unidad)
  • ...
Mientras tanto, y para no dejar olvidado el blog, como en la anterior entrada voy a poner un artículo interesante sacado de TechRepublic. Está en ingles, y como no tengo mucho tiempo no lo voy a traducir, pero tampoco creo que sea muy necesario porque es un ingles muy sencillito. Si alguno lo necesitara podría traducirlo pero cada vez me doy más cuenta de que sin inglés vas a reducir mucho la world wide web xD, y bastantes artículos muy interesantes están en inglés asi que ya sabéis.

10 things to consider when choosing a Linux distribution

El artículo a pesar de ser muy general versa sobre 10 puntos muy básicos y necesarios a la hora de elegir. A mí me ha ayudado a elegir!

David

sábado, 5 de abril de 2008

Análisis de la tendencia de la seguridad informática


Estoy suscrito ha algunas listas que versan sobre la seguridad informática y en una de ellas, vsantivirus, han escrito un artículo muy interesante sobre la tendencia de la seguridad informática en internet. Principalmente hace un repaso de la evolución de los virus, el spam y las botnet.

Dejo en el enlace al artículo.
El fin de la inocencia de la inseguridad informática


David

lunes, 24 de marzo de 2008

mount, chroot, liveCD y demás

Hoy he estado trasteando con los comandos mount y chroot desde una liveCD, no es la primera vez que lo hago, de hecho uno de mis primeros y malos post va de esto, pero si la primera vez que descubro que para acceder bien al sistema no solo basta con montar la partición, sino que también hay que montar los dispositivos y los procesos que están corriendo desde la liveCD. Depende de para qué te bastará con montar la partición pero es muy recomendable montar los demás sistemas.

Comandos con las opciones para mi sistema:
  1. mount -t ext3 /dev/sda5 /mnt/sda5
  2. mount -t proc proc /mnt/sda5/proc
  3. mount -t sysfs sys /mnt/sda5/sys
  4. mount -o bind /dev /mnt/sda5/dev
Para saber cuales son las particiones:
  • # fdisk -l

David