VPN

VPN IPSEC con Linux usando OpenSwan

VPN IPSEC
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: