martes, 18 de octubre de 2016

OpenSwan: Conectando contra un Cisco ASA de la Serie 5500 con IPSec


Nota de Descargo: La siguiente entrada está basada en unas Notas que tomé durante una Implementación VPN con IPSec, por lo que el nombre de Tutorial sería demasiado ostentoso :P 

Las configuraciones son realizadas en un CentOS 5.7, usando el paquete OpenSwan 2.6 con Claves Pre-Compartidas (PSK).

Escenario:
Un partner de Filadelfia solicita establecer una VPN con nosotros por lo que me envia una hoja de configuración que contiene la siguiente información:
Gateway: Cisco ASA 5510, IOS 8.2
IP Address: 66.x.y.45

Propiedades del Tunel
 Fase 1:
  Authentication: Pre-Shared key
  Key: GYEFiladelfia2012
  Encryption Protocol: IPSEC
  Diffie-Hellman Group: Group 2
  Encryption Algorithm: 3DES
  Hashing Algorithm: SHA1
  Mode (Main o Aggressive): Main Mode
  Lifetime: 86400

 Fase 2:
  Encapsulation (ESP o AH): ESP
  Encryption Algorithm: 3DES
  Authentication Algorithm: SHA1
  Perfect Forward Secrecy (PFS) or DH: Disabled
  Lifetime: 3600 seconds
Tenía experiencia previa en establecer VPN pero usando OpenVPN, por lo que me tocó documentarme primeramente como trabajar con IPSec bajo Linux, descubrí que necesitaba usar OpenSwan, busqué tutoriales en internet, pero también caí en cuenta de que para implementar cualquier cosa se tiene primero que tener en claro los conceptos de la tecnología a usar, de nada sirven los tutoriales sino se conoce como funcionan las cosas, así que tocó leer ;)

Una vez que ya estaba mejor informado diagramé mi esquema de red:
De donde se detalla:

Guayaquil:
  • 10.10.56.16: Cliente desde donde se va acceder a Filadelfia.
  • 10.10.56.1: IP de la Interfaz del FW a la Red de Producción
  • 10.10.36.1: IP de la Interfaz del FW a la DMZ
  • 10.10.36.10: Servidor VPN con CentOS 5.7 que se encuentra dentro de una DMZ y cuya IP pública es 200.x.y.10
Philadelphia:
  • 66.x.y.45: Servidor VPN implementado en un equipo Cisco ASA 5510
  • 192.168.1.23: Servidor de Aplicaciones
Y me puse manos a la obra:
Instalación del paquete
yum install openswan
Cambiamos algunos parámetros del kernel, entre ellos activamos el bit forward.
nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
Aplicamos los cambios en el kernel:
sysctl -p
Editamos el archivo de configuración de IPSec:
nano /etc/ipsec.conf
Y aparte de la configuración general, agregamos la sección respectiva del tunel que en este caso hemos denominado net-filadelfia:
config setup
        protostack=netkey
        nat_traversal=no
        virtual_private=
        oe=off
        nhelpers=0

conn net-filadelfia
        left=10.10.36.10
        leftsubnet=10.10.56.16/32
        leftnexthop=%defaultroute
        right=66.x.y.45
        rightsubnet=192.168.1.23/32
        rightnexthop=%defaultroute
        authby=secret
        rekey=yes
        keyingtries=5
        keyexchange=ike
        ike=3des-sha1
        ikelifetime=86400s
        phase2=esp
        phase2alg=3des-sha1;modp1024
        keylife=3600s
        pfs=no
        auto=start
Nota: todas la líneas referentes a una conexión necesitan un tabulado. 

El detalle de cada parámetro puede ser revisado, ingresando a la página de manual respectiva:
man ipsec.conf
Editamos el archivo que almacena los 'claves' para la comunicación entre los servidores VPN:
nano /etc/ipsec.d/net-filadelfia.secrets
Y colocamos el host origen, el host destino y la clave pre-compartida que utilizarán para comunicarse.
10.10.36.10 66.x.y.45 : PSK "GYEFiladelfia2012"
  • Configuración en Firewall
    Para permitir el flujo de tráfico a través del FW de Guayaquil, tuve que realizar la siguiente configuración adicional:
    • Rutas: Se debe agregar una ruta para que todo el tráfico que tenga como destino el host 192.168.1.23 tenga como gateway la 10.10.36.10
    • Reglas: Se debe agregar reglas para que los 2 Servidores VPN (CentOS/OpenSwan y Cisco/ASA) intercambien tráfico por el puerto 50 de ESP y UDP 500 para IKE. Y para que el cliente en Guayaquil acceda a los puertos específicos del Servidor de Aplicaciones de Filadelfia.
Finalmente Iniciamos el Servicio:
service ipsec start
Los logs pueden ser revisados en:
tail -f /var/log/secure
tail -f /var/log/messages
Para comprobar que todo va bien:
ipsec verify
ipsec auto --status
Como se pueden crear varios túneles, también existe la manera de subir/bajar dichos túneles bajo demanda:

Para subir un túnel:
ipsec auto --up net-filadelfia
Para bajar un túnel:
ipsec auto --down net-filadelfia
Finalmente, algunas pruebas de conectividad que realice:
ping 66.x.y.45
traceroute 192.168.1.23
tcpdump -i eth0 | grep 192.168.1.23
Espero que les sea de utilidad ;).

Referencias:

"Transporta un puñado de tierra todos los días y construirás una montaña" - Confucio