6.4. Configurazione Host-to-Host di IPsec

IPsec può essere configurato per collegare un desktop o una workstation ad un'altra, grazie ad un collegamento host-to-host. Questo tipo di collegamento usa la rete alla quale ogni host è collegato per creare un tunnel sicuro tra gli stessi host. I requisiti per un collegamento host-to-host sono minimi, in quanto sono rappresentati dalla configurazione di IPsec su ogni host. Gli host hanno bisogno solo di un collegamento apposito ad una rete portante (come ad esempio Internet) e Red Hat Enterprise Linux per creare il collegamento IPsec.

La prima fase della creazione di un collegamento è rappresentata dalla raccolta delle informazioni del sistema e della rete da ogni workstation. Per un collegamento host-to-host, avete bisogno delle seguenti informazioni:

Per esempio, supponiamo che la workstation A e la workstation B vogliono collegarsi tra di loro tramite un tunnel IPsec. Le suddette workstation desiderano collegarsi usando una chiave pre-condivisa con il valore foobarbaz e gli utenti vogliono che racoon venga generato automaticamente, condividendo anche una chiave di autenticazione tra ogni host. Entrambi gli utenti host decidono di chiamare i loro collegamenti ipsec0.

Il seguente rappresenta un file ifcfg per la workstation A, per il collegamento IPsec host-to-host con la workstation B, (il nome unico per identificare il collegamento in questo esempio è ipsec0, così il file risultante viene chiamato /etc/sysconfig/network-scripts/ifcfg-ipsec0).

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

La workstation A sostituirà X.X.X.X con l'indirizzo IP della workstation B, mentre la workstation B sostituirà X.X.X.X con l'indirizzo IP della workstation A. Il collegamento viene impostato per iniziare al momento dell'avvio (ONBOOT=yes), e usa il metodo della chiave pre-condivisa per l'autenticazione (IKE_METHOD=PSK).

Il seguente rappresenta il contenuto del file della chiave pre-condivisa (chiamato /etc/sysconfig/network-scripts/keys-ipsec0) che entrambe le workstation usano per la loro autenticazione. I contenuti di questo file dovrebbero essere identici ad entrambe le workstation e solo l'utente root dovrebbe essere in grado di leggere e scrivere questo file.

IKE_PSK=foobarbaz

ImportanteImportante
 

Per cambiare il file keys-ipsec0 in modo che solo l'utente root lo possa leggere o modificare, eseguire il seguente comando dopo aver creato il file:

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

Per cambiare la chiave di autenticazione in qualsiasi momento, modificare il file keys-ipsec0 su entrambe le workstation. Entrambe le chiavi devono essere identiche per un collegamento corretto.

L'esempio successivo rappresenta una configurazione specifica per il collegamento della fase 1 ad un host remoto. Il file viene chiamato X.X.X.X.conf (sostituire X.X.X.X con l'indirizzo IP del router IPsec remoto). Nota bene che questo file viene generato automaticamente una volta attivato il tunnel IPsec, e non deve essere modificato direttamente.

;
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 ;
        }
}

Il file di configurazione della fase 1 di default creato al momento dell'inizializzazione del collegamento IPsec, contiene i seguenti commenti usati dall'implementazione Red Hat Enterprise Linux di IPsec:

remote X.X.X.X

Specifica che le sezioni successive di questo file di configurazione, vengono applicate solo al nodo remoto identificato dall'indirizzo IP X.X.X.X.

exchange_mode aggressive

La configurazione di default per IPsec su Red Hat Enterprise Linux, utilizza una modalità di autenticazione aggressiva, la quale diminuisce l'overhead del collegamento, abilitando una configurazione di diversi collegamenti IPsec con host multipli.

my_identifier address

Definisce il metodo d'identificazione da usare durante l'autenticazione dei nodi. Red Hat Enterprise Linux utilizza gli indirizzi IP per identificare i nodi stessi.

encryption_algorithm 3des

Definisce il numero di cifratura utilizzato durante l'autenticazione. Per default viene usato il Triple Data Encryption Standard (3DES)

hash_algorithm sha1;

Specifica l'algoritmo hash utilizzato durante la fase 1 di negoziazione tra i nodi. Per default, viene usato il Secure Hash Algorithm version 1.

authentication_method pre_shared_key

Definisce il metodo di autenticazione utilizzato durante la negoziazione del nodo. Per default Red Hat Enterprise Linux utilizza delle chiavi pre-condivise per l'autenticazione.

dh_group 2

Specifica il numero del gruppo Diffie-Hellman, per stabilire la sessione delle chiavi generate dinamicamente. Per default viene usato il gruppo 1024.

I file /etc/racoon/racoon.conf devono essere identici su tutti i nodi IPsec ad eccezione dell'istruzione include "/etc/racoon/X.X.X.X.conf". Questa istruzione (e il file al quale si riferisce) viene generata quando viene attivato il tunnel IPsec. Per la workstation A, X.X.X.X nell'istruzione include rappresenta l'indirizzo IP della workstation B. Il discorso inverso è valido per la Workstation B. Quanto segue mostra un file racoon.conf tipico quando si attiva il collegamento 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"

Il file racoon.conf di default include i percorsi definiti per la configurazione IPsec, i file della chiave pre-condivisa, ed i certificati. I campi in sainfo anonymous descrivono la fase 2 SA tra i nodi IPsec — la natura del collegamento IPsec (inclusi gli algoritmi di cifratura supportati), ed il metodo di scambio delle chiavi. Il seguento elenco definisce i campi della fase 2:

sainfo anonymous

Denota che SA è in grado di inizializzare anonimamente qualsiasi peer insofar corrispondente alle credenziali IPsec.

pfs_group 2

Definisce il protocollo di scambio della chiave Diffie-Hellman, il quale determina il metodo con il quale i nodi IPsec stabiliscono una chiave reciproca per la sessione provvisoria della seconda fase di connettività di IPsec. Per default, l'implementazione di Red Hat Enterprise Linux di IPsec, utilizza il gruppo 2 (o modp1024) dei gruppi di scambio della chiave criptografica Diffie-Hellman. Il gruppo 2 utilizza un esponente modulare a 1024-bit, in grado di prevenire la decodifica da parte degli aggressori, delle trasmissioni IPsec precedenti, anche se una chiave privata risulta essere compromessa.

lifetime time 1 hour

Questo parametro specifica il ciclo di vita di un SA, e può essere quantificato sia per tempo e sia per byte di dati. L'implementazione Red Hat Enterprise Linux di IPsec, specifica un durata di una ora.

encryption_algorithm 3des, blowfish 448, rijndael

Specifica i cipher di cifratura supportati per la fase 2. Red Hat Enterprise Linux supporta 3DES, 448-bit Blowfish, e Rijndael (il cipher utilizzato nell'Advanced Encryption Standard, o AES).

authentication_algorithm hmac_sha1, hmac_md5

Elenca gli algoritmi hash supportati per l'autenticazione. I modi supportati sono sha1 e md5 hashed message authentication codes (HMAC).

compression_algorithm deflate

Definisce l'algoritmo di compressione Deflate per il supporto Payload Compression (IPCOMP), il quale permette una trasmissione potenzialmente più veloce dei datagrammi IP, attraverso collegamenti più lenti.

Per iniziare il collegamento, potete riavviare la workstation o eseguire il seguente comando come root su ogni host:

/sbin/ifup ipsec0

Per testare il collegamento IPsec, eseguire la utility tcpdump, in modo da visualizzare il trasferimento dei pacchetti della rete tra gli host (o tra le reti), e verificare che essi vengano cifrati tramite IPsec. Il pacchetto dovrebbe includere un testo AH e dovrebbe essere visualizzato come se fossero pacchetti ESP. ESP significa che è stato cifrato. Per esempio:

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