La configuración de IPSec tiene dos partes bien diferenciadas. Por un lado, la configuración de los parámetros generales y las VPN que vamos a establecer, y por otro la configuración de criptografía que compartimos con los terminadores de túneles de Telefónica. Los ficheros de configuración se encuentran en el directorio /etc/ipsec/.
Uno de los requisitos impuestos por Telefónica es la utilización de claves alfanúmericas de 8 caracteres, en mayúsculas, como secretos pre-compartidos para el intercambio de claves IKE. Como hemos visto en la descripción teórica de la introducción, esto es nefasto si se combina con el uso de IKE en modo agresivo. Para indicar a IPSec los secretos compartidos con los clientes remotos utilizamos el fichero /etc/ipsec/ipsec.secrets. En este fichero indicamos por cada línea un cliente conocido con el que compartimos un secreto, en el formato IP_Local IP_Remota : PSK "SECRETO". Seguimos esta sintaxis para indicar los dos terminadores de túneles de Telefónica:
193.147.184.193 195.55.47.10 : PSK "SECRETO!" 193.147.184.193 195.55.47.11 : PSK "SECRETO!"
La configuración general de IPSec y los perfiles para las asociaciones de seguridad se establece en el fichero /etc/ipsec/ipsec.conf. Está estructurado en secciones, cada una con sus correspondientes tuplas de configuración, en la forma variable=valor. El bloque setup establece las opciones generales de la pila de protocolos de IPSec, como por ejemplo, si utilizar o no las opciones de NAT Traversal, o el nivel de detalle de los registros de actividad. Dentro del bloque %default definiremos las opciones que deseamos sean comunes a cada asociación de seguridad, de forma que no tengamos que especificarlas por cada conexión que creemos. Por último, definimos los perfiles cifrador1 y cifrador2 que describen los parámetros concretos de las conexiones con los terminadores de túneles de Telefónica. Nos limitaremos a indicar las direcciones IP de los mismos, y la ruta a un script que deberá ejecutarse al iniciar una asociación de seguridad con ellos.
version 2.0 # conforms to second version of ipsec.conf specification # configuración básica config setup interfaces="ipsec0=eth0" klipsdebug=none plutodebug=none plutoopts=%search pluto=%search uniqueids=yes nat_traversal=no # valores por defecto para todas las conexiones conn %default # modo transporte type=transport keyingtries=0 disablearrivalcheck=no authby=secret pfs=no ikelifetime=10000s # algoritmos de cifrado y resumen esp=3des-sha1 keylife=3600s # ip del terminador urjc left=193.147.184.193 # gateway leftnexthop=193.147.184.1 leftprotoport=0/0 rightprotoport=0/0 auto=start # perfil para conexiones con cifrador 1 conn cifrador1 # script de inicio de la conexión leftupdown=/etc/conf.d/network-scripts/ud_tun0 right=195.55.47.10 # perfil para conexiones con cifrador 2 conn cifrador2 # script de inicio de la conexión leftupdown=/etc/conf.d/network-scripts/ud_tun1 right=195.55.47.11
En la configuración anterior indicamos dos scripts, /etc/conf.d/network-scripts/ud_tun0 y /etc/conf.d/network-scripts/ud_tun1, que se ejecutarán cuando se crean o se destruyen las asociaciones definidas en el perfil correspondiente. A continuación incluímos cada uno de los dos scripts referenciados, respectivamente. Cuando la asociación cambie de estado entre los terminadores, se eliminará el túnel en caso de existir, y se volverá a crear con los parámetros adecuados. Para que estos cambios se vean reflejados en el encaminamiento, reiniciaremos los demonios zebra y RIP.
# script que se ejecuta cuando la asociación ipsec cambia de estado TUNEL=`/sbin/ifconfig | grep tunnel0 | awk '{print $1}'` if [ $TUNNEL ]; then ifconfig tunnel0 down ip tunnel del name tunnel0 fi ip tunnel add name tunnel0 mode ipip remote 195.55.47.10 local 193.147.184.193 \ dev ipsec0 ttl 255 ifconfig tunnel0 up 195.55.47.2 netmask 255.255.255.252 pointopoint 195.55.47.1 \ mtu 1500 multicast /etc/init.d/zebra restart /etc/init.d/ripd restart
# script que se ejecuta cuando la asociación ipsec cambia de estado TUNEL=`/sbin/ifconfig | grep tunnel1 | awk '{print $1}'` if [ $TUNNEL ]; then ifconfig tunnel1 down ip tunnel del name tunnel1 fi ip tunnel add name tunnel1 mode ipip remote 195.55.47.11 local 193.147.184.193 \ dev ipsec0 ttl 255 ifconfig tunnel1 up 195.55.47.6 netmask 255.255.255.252 pointopoint 195.55.47.5 \ mtu 1500 multicast /etc/init.d/zebra restart /etc/init.d/ripd restart