Mostrando entradas con la etiqueta fortigate. Mostrar todas las entradas
Mostrando entradas con la etiqueta fortigate. Mostrar todas las entradas

lunes, 12 de enero de 2009

VPN contra Fortigate, usando Openswan

Vamos a ver como configurar Ubuntu para conectar con una VPN ofrecida por un servidor Fortigate, usando Openswan. Fortigate está configurado para usar Extended Authentication (Xauth).

Nota: Intenté configurar la misma conexión con IPSEC nativo del kernel 2.6 y Racoon, pero tuve problemas con la Xauth, ya que parece que Fortigate no se identifica como host Xauth, y Racoon da un error diciendo que el peer no se ha declarado como Xauth host. Si alguien tiene alguna idea al respecto, se agradecerá ;)

  • Instalar openswan:
apt-get install openswan linux-patch-openswan openswan-modules-source

Aceptar las opciones por defecto.
  • Configurar la conexión VPN:
Creamos el fichero de configuración de la conexión. Fichero: /etc/ipsec.d/forti.conf:

conn office
#Izquierda somos nosotros
left=%defaultroute
#Somos cliente XAUTH
leftxauthclient=yes
#El gateway por defecto (por el NAT-T)
leftnexthop=192.168.0.1
#Derecha es el Fortigate
right=X.X.X.X
#La ID que envía es el Fortigate, puede que no sea necesario si es iagual a right
rightid=X2.X2.X2.X2
#Fortigate es servidor XAUTH
rightxauthserver=yes
#Subnet remota
rightsubnet=X.X.X.X/YY
#Tipo de intercambio de llaves
keyexchange=ike
#Opciones IKE
ike=3des-sha-modp1536
#Opciones SA
auth=esp
auto=add
authby=secret
#Cifrado y autenticacion SA
esp=3des-sha1
#perfect forward secrecy
pfs=yes
#Modo agresivo
aggrmode=yes

Añadir el nuevo fichero en la configuración IPSEC. Añadir esta línea al fichero /etc/ipsec.conf:
include /etc/ipsec.d/forti.conf

Añadir una línea con el secreto compartido en /etc/ipsec.secrets:
ID_LOCAL ID_FORTIGATE : PSK "SECRETO"

ID_LOCAL será normalmente la IP local
ID_FORTIGATE será la ID enviada por Fortigate

Mas fácil: Si sólo usamos una VPN con un secreto compartido, podemos no especificar las IDs, así:
: PSK "SECRETO"

  • Crear un script para arrancar la VPN cuando se levante la interfaz de red. Fichero /etc/dhcp3/dhclient-exit-hooks.d/vpn:

if [ "$reason" != BOUND ] && [ "$reason" != RENEW ] \
&& [ "$reason" != REBIND ] && [ "$reason" != REBOOT ]
then
return
fi

/etc/init.d/ipsec stop
/etc/init.d/ipsec start
sleep 3
ipsec whack --name office --xauthname XAUTHNAME --xauthpass XAUTHPASS --initiate

XAUTHNAME es nuestro login XAUTH
XAUTHPASS es nuestra contraseña XAUTH

Para comprobar que la conexión VPN se realiza correctamente, podemos ejecutar en consola:
#dhclient eth0

Así veremos el proceso de negociación de la VPN.

  • Arrancar la VPN desde el Network Manager en Ubuntu 8.10 (parece que no funcionan igual los hooks que en la 8.04)
Simplemente creamos un fichero en /etc/NetworkManager/dispacher.d/ llamado, por ejemplo, 99vpn, y metemos estos contenidos:
/etc/init.d/ipsec stop
/etc/init.d/ipsec start
sleep 3
ipsec whack --name office --xauthname XAUTHNAME --xauthpass XAUTHPASS --initiate


En la version 8.10 de Ubuntu, OpenSwan no puede renegociar la VPN, así que podemos poner un cron para revivirla, que ejecute este script:
/usr/sbin/ipsec whack --name office --terminate
sleep 3
/usr/sbin/ipsec whack --name office --xauthname USER --xauthpass PASS --initiate

Este script lo metemos en el cron de root, porque no se porque razón en el crontab no se ejecuta.
Como root:
# crontab -e
10 * * * * /etc/init.d/vpn 1>/tmp/a 2>/tmp/b 130 * * * * /etc/init.d/vpn 1>/tmp/a 2>/tmp/b 150 * * * * /etc/init.d/vpn 1>/tmp/a 2>/tmp/b 1