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