6.4. Configuración IPsec de host-a-host

IPsec se puede configurar para conectar un escritorio o estación de trabajo a otro a través de una conexión host-a-host. Este tipo de conexión utiliza la red a la cual estan conectados los hosts para crear un túnel seguro entre ellos. Los requerimientos de una conexión host-a-host son mínimos, como lo es la configuración de IPsec en cada host. Los hosts solamente necesitan una conexión dedicada al transportador de red (tal como la Internet) y Red Hat Enterprise Linux para crear la conexión IPsec.

El primer paso en la creación de una conexión es reunir la información del sistema y de la red de cada estación de trabajo. Para una conexión host-a-host, necesita la información siguiente:

Por ejemplo, suponga que la Estación A y la Estación B desean conectarse a través de un túnel IPsec. Ellas desean conectarse usando una llave pre-compartida con el valor de foobarbaz y los usuarios acuerdan dejar que racoon automáticamente genere y comparta una llave de autenticación entre cada host. Ambos usuarios de los hosts deciden nombrar sus conexiones como ipsec0.

Lo siguiente es el archivo ifcfg para una conexión IPsec de host-a-host para la Estación A con la Estación B (el nombre único para identificar la conexión en este ejemplo es ipsec0, por lo que el archivo resultante es llamado /etc/sysconfig/network-scripts/ifcfg-ipsec0):

DST=X.X.X.X
TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK

La Estación A reemplazará X.X.X.X con la dirección IP de la Estación B, mientras que la Estación B, reemplaza X.X.X.X con la dirección IP de la Estación A. La conexión es configurada para iniciarse luego del arranque (ONBOOT=yes) y utiliza el método de autenticación de llave pre-compartida (IKE_METHOD=PSK).

Lo siguiente es el contenido del archivo de llave pre-compartida (llamado /etc/sysconfig/network-scripts/keys-ipsec0) que ambas estaciones de trabajo necesitan para autenticarse mutuamente. Los contenidos de este archivo deberían ser idénticos en ambas estaciones de trabajo y solamente el usuario root debería ser capaz de leer o escribir en el mismo.

IKE_PSK=foobarbaz

ImportanteImportante
 

Para cambiar el archivo keys-ipsec0 para que solamente el usuario root pueda leerlo o modificarlo, ejecute el comando siguiente después de crear el archivo:

chmod 600 /etc/sysconfig/network-scripts/keys-ipsec0

Para cambiar la llave de autenticación en cualquier momento, modifique el archivo keys-ipsec0 en ambas estaciones de trabajo. Ambas llaves deben ser idénticas para una conectividad apropiada.

A continuación se muestra la configuración específica para la fase 1 de la conexión al host remoto. El archivo es llamado X.X.X.X.conf (reemplace X.X.X.X con la dirección IP del enrutador IPsec remoto). Observe que este archivo es generado automáticamente una vez que el túnel IPsec es activado y no se debería modificar directamente.

;
remote X.X.X.X
{
        exchange_mode aggressive, main;
        my_identifier address;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}

El archivo de configuración predeterminado para la fase 1 creado cuando se inicializa una conexión IPsec contiene las siguientes declaraciones utilizadas por la implementación Red Hat Enterprise Linux de IPsec:

remote X.X.X.X

Especifica que las estrofas subsecuentes de este archivo de configuración sólo aplican al nodo remoto identificado por la dirección IP X.X.X.X

exchange_mode aggressive

La configuración predeterminada para IPsec en Red Hat Enterprise Linux utiliza un método de autenticación agresivo, que reduce la sobrecarga de la conexión a la vez que permite la configuración de muchas conexiones IPsec con múltiples hosts.

my_identifier address

Define el método de autenticación a utilizar cuando se autentifican nodos. Red Hat Enterprise Linux utiliza direcciones IP para identificar a los nodos.

encryption_algorithm 3des

Define el cifrado de encriptación utilizado durante la autenticación. Por defecto, se utiliza Triple Data Encryption Standard (3DES).

hash_algorithm sha1;

Especifica el algoritmo hash utilizado durante la negociación de la fase 1 entre nodos. Por defecto, se utiliza el Secure Hash Algorithm versión 1.

authentication_method pre_shared_key

Define el método de autenticación utilizado durante la negociación de nodos. Por defecto, Red Hat Enterprise Linux utiliza llaves pre-compartidas para la autenticación.

dh_group 2

Especifica el número de grupo Diffie-Hellman para establecer llaves de sesión generadas dinámicamente. Por defecto, se utiliza el grupo de 1024 bits.

El archivo /etc/racoon/racoon.conf debería ser idéntico en todos los nodos IPsec excepto por la declaración include "/etc/racoon/X.X.X.X.conf". Esta declaración (y el archivo que referencia) es generado cuando se activa el túnel IPsec. Para la Estación A, X.X.X.X en la declaración include, es la dirección IP de la Estación B. Lo opósito es cierto también para la Estación B. A continuación se muestra un archivo típico racoon.conf cuando se activa la conexión IPsec.

# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

sainfo anonymous
{
	pfs_group 2;
	lifetime time 1 hour ;
	encryption_algorithm 3des, blowfish 448, rijndael ;
	authentication_algorithm hmac_sha1, hmac_md5 ;
	compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf"

Este archivo predeterminado racoon.conf incluye rutas definidas para la configuración IPsec, archivos de llaves pre-compartidas y certificados. Los campos en sainfo anonymous describen el SA de la fase 2 entre nodos IPsec — la naturaleza de la conexión IPsec (incluyendo los algoritmos de encriptación soportados) y el método de intercambio de llaves. La lista siguiente define los campos de la fase 2.

sainfo anonymous

Denota que SA puede inicializarse de forma anónima con cualquier par siempre que las credenciales IPsec coincidan.

pfs_group 2

Define el protocolo de intercambio de llaves Diffie-Hellman, el cual determina el método en el cual los nodos IPsec establecen una sesión temporal mutua para la segunda fase de conectividad de IPsec. Por defecto, la implementación de Red Hat Enterprise Linux de IPsec utiliza el grupo 2 (o modp1024) de los grupos de intercambio de llaves criptográficas de Diffie-Hellman. El grupo 2 utiliza una exponenciación modular de 1024 bits que evita que los atacantes descifren transmisiones IPsec previas aún si una llave privada está comprometida.

lifetime time 1 hour

Este parámetro especifica el ciclo de vida de un SA y se puede cuantificar por veces o por bytes de datos. La implementación de Red Hat Enterprise Linux de IPsec especifica un tiempo de vida de una hora.

encryption_algorithm 3des, blowfish 448, rijndael

Especifica los códigos de encriptación soportados para la fase 2. Red Hat Enterprise Linux soporta 3DES, 448-bit Blowfish y Rijndael (el código utilizado en el Advanced Encryption Standard o AES).

authentication_algorithm hmac_sha1, hmac_md5

Lista los algoritmos hash soportados para la autenticación. Los modos soportados son los códigos de autenticación de mensajes en hash (HMAC) sha1 y md5.

compression_algorithm deflate

Define el algoritmo de compresión Deflate para el soporte de IP Payload Compression (IPCOMP), lo que permite transmisiones potenciales más rápidas de datagramas IP sobre conexiones más lentas.

Para iniciar la conexión, reinicie la estación de trabajo o ejecute el comando siguiente como root en cada host:

/sbin/ifup ipsec0

Para verificar la conexión IPsec, ejecute la utilidad tcpdump para ver los paquetes de red que están siendo transferidos entre los hosts (o redes) y verificar que están encriptados con IPsec. El paquete debería incluir una cabecera AH y se deberían mostrar como paquetes ESP. ESP significa que están encriptados. Por ejemplo:

17:13:20.617872 pinky.example.com > ijin.example.com: \
	    AH(spi=0x0aaa749f,seq=0x335): ESP(spi=0x0ec0441e,seq=0x335) (DF)