VPN IPSEC con Linux usando OpenSwan

En una ocasión surgió la necesidad de implementar una VPN, con primero que se me vino a la mente es OpenVPN sin embargo este necesidad estaba basada en IPSEC, para lo cual decidí googlear un poco y llegue hasta OpenSwan. La conexión que necesitabamos hacer era contra un equipo CISCO (Check Point R77.30), pero bueno no tenia de otra que probar, para saber si la opción de hacerlo con software libre era factible.
Como suele pasar, la contraparte que utilizaba CISCO es quien estableció los parámetros de conexión, a lo cual tendría que someter mi conexión:
Fase 1
- Encryption Scheme defined: IKEv1
- Encryption Algorithm IKE: 3DES
- Hashing Algorithm IKE: SHA-1
- Support Diffie-Hellman groups for IKE SA: Group 2
- Support Diffie-Hellman groups for IKE SA: 1440 min
Fase 2
- Encryption Schemes defined: IPSEC
- Encryption Algorithm: 3DES
- Hashing Algorithm IPSEC: SHA-1
- Hashing Algorithm IPSEC: none
- Aggressive Mode Support: none
- Renegotiate IPSEC SA every: 3600 s
- Use Perfect Forward Secrecy: No PFS
Instalando paquetes y preparando el ambiente
Lo primero que hizo es instalar el OpenSwan para lo cual en mi distribución debian 7, se lo hace de la siguiente manera:
apt-get install openswan
Desactivamos los redirecciones VPN, cualquiera usando estos comandos:
for vpn in /proc/sys/net/ipv4/conf/*; do echo 0 > $vpn/accept_redirects; echo 0 > $vpn/send_redirects; done
Luego, modificamos los parámetros del kernel para permitir el forwardeo de IP y desactivar redireccionamientos de forma permanente.
# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0
Recargamos /etc/sysctl.conf:
sysctl -p
Permitimos puertos necesarios en nuestro firewalll
Por favor asegurate no entran en conflicto con otras ya existentes en tu firewall.
iptables -A INPUT -p udp --dport 500 -j ACCEPT iptables -A INPUT -p tcp --dport 4500 -j ACCEPT iptables -A INPUT -p udp --dport 4500 -j ACCEPT
Finalmente, creamos reglas para NAT en nuestro firewall
iptables -t nat -A POSTROUTING -s site-A-private-subnet -d site-B-private-subnet -j SNAT --to site-A-Public-IP
Por favor asegurarse que estas reglas son permanentes en nuestro firewall.
Preparando archivos de configuración
Una vez instalado el paquete procedemos a realizar las configuraciones dentro del archivo /etc/ipsec.conf
Nos vamos a central puntualmente en la parte de la creación de las conexiones.
conn myvpn authby=secret auto=start ## -------------------- phase 1 --------------------------- ## ike=3des-sha1 keyexchange=ike ikelifetime=1800s ikev2=no ##--------------------- phase 2 --------------------------- ## phase2=esp #phase2alg=3des-md5 phase2alg=3des-sha1 compress=no #pfs=yes pfs=no type=tunnel keylife=3600s left=190.219.19.230 leftid=190.219.19.230 leftsourceip=190.219.19.230 leftsubnet=192.168.1.14/32 # Conectando solo un host leftnexthop=%defaultroute right=210.16.96.2 rightid=210.16.96.2 rightsubnet=210.16.96.2/32
Posteriormente modificamos el archivo /etc/ipsec.secrets aquí introducimos una clave que la compartiremos con nuestra contraparte
190.219.19.230 172.2526.1: PSK "MiClaveSecreta"
Finalmente reniciamos el servicio /etc/init.d/ipsec restart para que se ejecute nuestra configuración realizada a los archivos ipsec.conf y ipsec.secrets
Al hacer esto debemos recibir un mensaje que nos dice que nuestra conexión está arriba.
Setear el archivo ipsec.secrets con el PSK y las direcciones de cada extremo, en algunos casos el problema al establecer la phase2 es que el ip del lado derecho en el archivo ipsec.secrets es diferente, esto se lo puede verificar revisando el archivo /var/log/pluto.log
Comandos Utiles
- ipsec auto --status
- ipsec verify
Para activar el nat-t se debe habilitar en el archivo de configuración ipsec.conf la variable trasnversal-nat = yes
Cabe indicar que al levantar el tunel deben comprobarse con service ipsec status donde nos mostrará que el tunel esta UP
También podemos comprobar que se ha superado las dos fases, a través del comando ipsec auto --status
donde poderemos visualizar dos líneas específicas
#2: "myvpn":500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 2355s; newest IPSEC; eroute owner; isakmp#1; idle; import:admin initiate
000 #1: "myvpn":500 STATE_MAIN_I4 (ISAKMP SA established); none in -1s; newest ISAKMP; nodpd; idle; import:admin initiate
Espero les sirva esta pequeña contribución para sus necesidades en VPN
Secciones