Conectarse a Firewall 1 desde Linux con Shrew

De zerutek

Saltar a: navegación, buscar

23/01/2013

Conectarse a Firewall 1 desde Linux con Shrew

Nos puede suceder que necesitemos conectarnos como clientes de una VPN desde Linux. Pero si el que nos sirve éstas conexiones es un Firewall 1, podemos encontrarnos que no utilice el estándar IPSEC al pie de la letra, sino que tenga algunos añadidos fuera del mismo, que nos impida conectarnos con las implementaciones normales.

Para solucionarlo podemos utilizar shrew, una implementación de cliente VPN que consigue conectarnos con casi todo lo que se nos ocurra.

Sistemas utilizados

Debian Squeeze, Wheezy

Ubuntu 12.04 Precise (Arm)

Ubuntu 12.10 Quantal (Arm)

Compilando Shrew

Para Nuestro ejemplo vamos a compilar una versión de la rama 2.2.x, que es la que me ha funcionado. Desconozco si se puede conseguir la conexión con Firewall 1 con ramas anteriores, sólo sé que no he conseguido resultados satisfactorios con con la rama 2.1.x.

Descargamos y comprobamos, descomprimimos el código fuente

  • Descargamos el código fuente
wget http://www.shrew.net/download/ike/ike-2.2.0-rc-2.tbz2
  • Comprobamos que coincida el código de comprobación suministrado
$ openssl sha1 ike-2.2.0-rc-2.tbz2 
SHA1(ike-2.2.0-rc-2.tbz2)= a69e7232a2778cec0a9e3af84d9657a471c8b4a6

Compilando

Vamos a compilar tanto el demonio iked como la interfaz gráfica que nos ayudará en la configuración

Instalamos las dependencias

Tras un vistazo al fichero ike/README.TXT instalamos las dependencias necesarias para la compilación:

aptitude install flex bison libqt4-dev libssl-dev cmake libedit-dev g++ uml-utilities
Compilamos e instalamos

Con el parámetro -DCMAKE_INSTALL_PREFIX= conseguimos instalar el programa en la ubicación deseada, en nuetro caso /opt/shrew

  • como root
mkdir -p /opt/shrew /opt/shrew/etc /opt/shrew/lib /opt/shrew/man
tar -xjvf ike-2.2.0-rc-2.tbz2 
cd ike
cmake -DCMAKE_INSTALL_PREFIX=/opt/shrew -DMANDIR=/opt/shrew/man -DBINDIR=/opt/shrew/bin -DSBINDIR=/opt/shrew/sbin -DQTGUI=YES -DNATT=YES
make
  • Como root
make install

Configuración de las librerías compartidas

Al usar una ubicación no estandar (me gusta complicarme la vida) podemos antemoper una variable a todo lo relacionado con shrew

LD_LIBRARY_PATH=/opt/shrew/lib 

O para realizarlo de forma definitiva

  • Como root
echo /opt/shrew/lib > /etc/ld.so.conf.d/shrew.conf
ldconfig

Configuración del demonio iked

Tras renombrar el fichero de configuracion, podemos editarlo para configurar el log, por ejemplo. En nuesto caso lo dejaremos tal cual:

  • Como root
mv /opt/shrew/etc/iked.conf.sample /opt/shrew/etc/iked.conf


En mi caso voy a utilizar el añejo método del inittab. Las viejas manías son difíciles de cambiar

  • Como root
echo "IK:2345:once:/opt/shrew/sbin/iked" >> /etc/inittab
kill -1 1

Si estamos usando upstart, tendremos que generar el fichero /etc/init/iked.conf con el siguiente contenido:

start on startup
start on runlevel [2345] 
stop on runlevel [!2345]

exec /opt/shrew/sbin/iked

¡Conectando!

Para realizar ésta tarea vamos a utilizar el cliente gráfico qikea.Nada mejor que unos pantallazos ligeramente comentados de la configuración QUE ME FUNCIONA para entenderlo mejor.

  • La pantalla principal

Shrew-main.png

  • General

Shrew-general.png

  • Client

Shrew-client.png

  • DNS

Shrew-dns.png

  • Authentication -> Local Identity

Shrew-auth-local.png

  • Authentication -> Remote Identity

Shrew-auth-remote.png

Shrew-auth-credentials.png

Shrew-phase1.png

  • Phase 2

Shrew-phase2.png

  • Policy

Shrew-policy.png

Las opciones que han sido decisivas

De la multitud de opciones proporcionadas por shrew, sólo me han sido necesarias una fracción de las mismas. Reflejo en éste apartado las que me parecen imprescindibles para lograr que funcionara en mi caso.

Credenciales

  • Server Certificate Authority File -> Si no te lo proporciona tu administrador de red, se puede conseguir con el cliente nativo. En algún momento encontré alguna referencia para realizarlo, que no soy capaz de recuperar :-(

Phase 1

  • Exchange Type -> Tiene que estar en main. Hay que huir de la opción aggressive.
  • Enable Check Point Compatible Vendor ID -> Sin ésto difícilmente va a funcionar.

Automatizando la conexión

Si tras un montón de pruebas todo funciona, siempre es interesante automatizar la conexión.

Modo gráfico

Se puede automatizar la conexión utilizando qikec.

/opt/shrew/bin/qikec -r vpn.zerutek.com -u usuariovpn@zerutek -p ContraseñaMuyLarga -a
  • Conectamos

Shrew-connect.png

  • El estado de la conexión

Shrew-network.png

Modo texto

Se puede automatizar la conexión utilizando ikec

/opt/shrew/bin/ikec -r vpn.zerutek.com -u usuariovpn@zerutek -p ContraseñaMuyLarga -a
  • Conectamos
ii : ## : VPN Connect, ver 2.2.0
## : Copyright 2009 Shrew Soft Inc.
## : press the <h> key for help
>> : config loaded for site 'vpn.zerutek.com'
>> : attached to key daemon ...
>> : peer configured
>> : iskamp proposal configured
>> : esp proposal configured
>> : client configured
>> : local id configured
>> : remote id configured
>> : server cert configured
ii : bringing up tunnel ...
>> : network device configured
ii : tunnel enabled
  • Si pulsamos la h, nos muestra la ayuda.
ii : Use the following keys to control client connectivity
 - : <c> connect
 - : <d> disconnect
 - : <h> help
 - : <s> status
 - : <q> quit
  • Si ahora pulsamos la s, vemos el estado de la conexión.
ii : current connection satus
 - : tunnel state      = connected
 - : IPsec SAs in use  = 1
 - : IPsec SAs dead    = 0
 - : IPsec SAs failed  = 0
 - : transport used    = NAT-T v02 / IKE | ESP
 - : ike fragmenataion = disabled
 - : dead peer detect  = disabled

Referencias

http://www.shrew.net/