StrongSwan como Dialup Server & Fortigate como Cliente

StrongSwan como servidor IPSEC de tipo Dialup y Fortigate como cliente IPSEC

El propósito de este manual, es el de proveer una administración centralizada desde un servidor en la nube el cual provea de los servicios de VPN IPSec de tipo Dialup, con el propósito de que cada cliente tenga configurado en su Fortigate una VPN a dicho concentrador independiente del tipo de servicio de Internet (NAT o sin NAT) para temas de administración y soporte.

Configuración del concentrador

Primero configuraremos el concentrador de IPSec con el software StrongSwan 5.1, el cual se configurará para recibir conexiones de tipo Dialup.

En cuanto a la instalación, estamos usando Ubuntu 14.04, para lo que simplemente ejecutamos:

apt-get install strongswan strongswan-plugin-xauth-generic

Donde “strongswan-plugin-xauth-generic” es el plugin que requeriremos para que nuestros usuarios se autentiquen con un usuario y contraseña, sin este, recibiremos un error “no XAuth method found”.

Una ves instalado, procedemos a configurar nuestro servicio editando “/etc/ipsec.conf” e insertamos la siguiente configuración:

config setup

conn %default
ikelifetime=86400s
keylife=43200s
keyingtries=1
keyexchange=ikev1
left=199.xxx.xxx.xxx
leftid=@concentrador.vpn.server.mx
leftauth=psk
leftfirewall=yes

conn cliente1
right=%any
rightauth=psk
rightauth2=xauth
rightid=cliente1id
rightsubnet=192.168.15.0/24
auto=add

Explicare de manera rápida cada concepto:

“conn %default” nos indica los valores por defecto para cada perfil que tengamos en nuestro concentrador, es decir en este caso tendremos que para todas las solicitudes de servicio usaremos ikelifetime=86400s, etc… y que de nuestro lado en el servidor (“left”) usaremos la IP 199.xx.xx.xx con un ID “concentrador.vpn.server.mx”, a su vez estaremos autenticandonos con los clientes con una llave compartida o preshared key (“leftauth=psk”).

Enseguida generaremos un perfil para cada cliente o usuario, en donde como nos sabemos con que IP vengan, ya que muchos podrían tener IP Dinamica, usamos la cadena “%any” en right, así mismo pedimos que la autenticación con ellos sea con una Preshared Key (“rightauth=psk”) y de igual manera mediante XAuth (“rightauth2=xauth”).

Como cada cliente pudiera tener una configuración diferente, requerimos identificarlos a través de su ID (“rightid=cliente1”) para poder elegir su perfil especifico para ellos, en este caso necesitamos especificar que “cliente1” tiene una red 192.168.15.0/24 protegida por su Fortigate, la cual administraremos.

Para la autenticación de nuestros clientes, tanto por PSK como por XAuth, requerimos editar el archivo “/etc/ipsec.secrets” para especificar los distintos usuarios y las PSK como se muestra a continuación:

concentrador.vpn.server.mx %any : PSK kjaldjalskj2lk3jjljskdaj
cliente1 : XAUTH "shimpnsula"

Donde especificamos que yo concentrador con cualquier cliente, usare la PSK “kjaldjalskj2lk3jjljskdaj” y que cliente1 a través de XAuth usara la contraseña “shimpnsula”.

Una vez configurado esto, solo nos resta editar ” /etc/strongswan.d/charon.conf” y localizamos “Plugins to load in the IKE daemon charon” y ponemos:

# Plugins to load in the IKE daemon charon.
load = sha1 sha2 md5 aes des hmac gmp random nonce xauth-generic kernel-netlink socket-default updown stroke

Con esto solo nos resta reiniciar el servicio de strongswan con “service strongswan restart” para que tengan efecto los cambios.

Configuración del cliente con Fortigate.

En esta configuración estamos usando un Fortigate 60D (Adquirido en http://securityzone.mx) con una versión de FortiOS 5.2.5:

Las tareas son:

– Crear VPN IPsec Phase 1 en modo interfaz (por defecto es así en esta versión de FortiOS), sin DPD y especificando un localID
– Crear Phase 2 sin PFS, con keep alive y auto negociación.
– Crear una política de la interfaz VPN “SoporteRemoto” a “Internal”.
– Crear una ruta estática con destino a nuestro concentrado VPN (199.xxx.xxx.xxx) vía nuestra interfaz VPN “SoporteRemoto”.

Y chan chan…

Para acabar rápido pondré solo las líneas de CLI:

PHASE 1
config vpn ipsec phase1-interface
edit "SoporteRemoto"
set interface "wan1"
set localid "cliente1id"
set dpd disable
set xauthtype client
set authusr "cliente1"
set authpasswd ENC LgCoIT2mDPPphPhc/KJ4JA...nBjhFyw==
set remote-gw 199.xxx.xxx.xxx
set psksecret ENC IHRvb7ZQrAjTz3ou...YBRvri5kA==
next
end

Donde especificamos que nuestra interfaz de salida será “wan1”, tendremos un ID como “cliente1id” el cual deberá hacer match con “rightid” para que podamos elegir el perfil correcto, cabe mencionar que “localid” solo se puede poner mediante CLI en esta versión, ya que en el Web-GUI no permite modificar el Localid.

PHASE2
config vpn ipsec phase2-interface
edit "SoporteRemotoP2"
set phase1name "SoporteRemoto"
set pfs disable
set keepalive enable
set auto-negotiate enable
next
end

En la fase 2 solo deshabilitamos PFS y habilitamos keepalive y auto-negotiate.

Con esto casi estamos terminando, solo resta crear una política y una ruta estática.

POLICY
config firewall policy
edit 0
set uuid c9aaee0c-c327-51e5-d84c-ac4b6d3ebd65
set srcintf "SoporteRemoto"
set dstintf "internal"
set srcaddr "all"
set dstaddr "all"
set action accept
set schedule "always"
set service "ALL"
next
end

ROUTE
config router static
edit 0
set dst 199.xxx.xxx.xxx 255.255.255.255
set device "SoporteRemoto"
next
end

Con esta configuración deberá ser suficiente para poder administrar desde nuestro concentrado de VPN a la red “192.168.15.0/24”, para lo cual deberemos poder hacer PING.

COMANDOS PARA TROUBLESHOOTING

Debug de VPN (Esto generara muchos datos en la terminal si se tiene más de una VPN)
diagnose debug application ike -1
diagnose debug enable

Reseteo o Flush de las VPN
diagnose vpn tunnel flush
diagnose vpn tunnel reset

Paquetes ICMP
diagnose sniffer packet any "icmp" 4

Flujo de paquetes a través del FGT
diagnose debug enable
diagnose debug flow show console
diagnose debug flow filter <proto|addr|saddr|daddr|port|sport|dport|negate>
diagnose debug flow trace start <# de flujos>

Leave a Reply

Your email address will not be published. Required fields are marked *