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
Instalación del paquete
yum install openswanCambiamos 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 = 0Aplicamos los cambios en el kernel:
sysctl -pEditamos 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 FirewallPara 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.
service ipsec startLos logs pueden ser revisados en:
tail -f /var/log/secure tail -f /var/log/messagesPara 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-filadelfiaPara bajar un túnel:
ipsec auto --down net-filadelfiaFinalmente, algunas pruebas de conectividad que realice:
ping 66.x.y.45 traceroute 192.168.1.23 tcpdump -i eth0 | grep 192.168.1.23Espero que les sea de utilidad ;).
Referencias:
- Teoría - ¿Qué es IPsec?
- Openswan: ipsec en linux (I)
- OpenSwan Wiki
- HowTo Linux VPN OpenSwan site-to-site with Cisco PIX