6.12. Configurazione Network-to-Network IPsec

IPsec può essere anche configurato per collegare una rete intera (come ad esempio una LAN o WAN), ad una rete remota tramite un collegamento network-to-network. Un collegamento network-to-network necessita di una impostazione del router IPsec su ogni lato delle reti collegate, in modo da processare e direzionare le informazioni da un nodo su di una rete, ad un nodo su di una rete remota. Figura 6-2 mostra un collegamento IPsec network-to-network 'tunneled'.

Figura 6-2. Un collegamento IPsec Network-to-network di tipo 'tunneled'

Il diagramma mostra due LAN separate, divise da Internet. Queste reti usano router IPsec per l'autenticazione e l'inizializzazione di un collegamento usando un tunnel sicuro attraverso Internet. I pacchetti intercettati in transito, richiedono una decodifica forzata per poter essere decifrati e per vincere la protezione dei pacchetti tra queste LAN. Il processo di comunicazione da un nodo sulla gamma IP 192.168.1.0/24 ad un altro su 192.168.2.0/24, è completamente trasparente ai nodi, in quanto il processo di codifica/decodifica, e del routing dei pacchetti IPsec, viene gestito completamente dal router IPsec.

Le informazioni necessarie per un collegamento network-to-network includono:

Per esempio, supponiamo che LAN A (lana.example.com) e LAN B (lanb.example.com) vogliono collegarsi tra di loro attraverso un tunnel IPsec. L'indirizzo della rete per la LAN A rientra nella gamma 192.168.1.0/24, mentre LAN B usa la gamma 192.168.2.0/24. L'indirizzo IP del gateway è 192.168.1.254 per LAN A e 192.168.2.254 per LAN B. I router IPSEC sono separati da ogni gateway LAN e usano due dispositivi della rete: ad eth0 viene assegnato un indirizzo IP statico accessibile-esternamente il quale ha accesso ad Internet, mentre eth1 si comporta come un punto di direzionamento per processare e trasmettere i pacchetti LAN da un nodo della rete ai nodi della rete remota.

Il collegamento IPsec tra ogni rete usa una chiave pre-condivisa con il valore r3dh4tl1nux, e gli amministratori di A e B concordano nel generare automaticamente racoon e condividere una chiave di autenticazionetra ogni router IPsec. L'amministratore della LAN A decide di chiamare il collegamento IPSEC ipsec0, mentre l'amministratore della LAN B chiama il collegamento IPSEC ipsec1.

Il seguente rappresenta un file ifcfg per un collegamento IPsec network-to-network per LAN A. Il nome unico per identificare il collegamento in questo esempio è ipsec1, in questo modo il file risultante viene chiamato /etc/sysconfig/network-scripts/ifcfg-ipsec1.

TYPE=IPsec
ONBOOT=yes
IKE_METHOD=PSK
SRCGW=192.168.1.254
DSTGW=192.168.2.254
SRCNET=192.168.1.0/24
DSTNET=192.168.2.0/24
DST=X.X.X.X

Il collegamento è impostato in modo tale da iniziare al momento dell'avvio (ONBOOT=yes), e usa il metodo della chiave pre-condivisa di autenticazione (IKE_METHOD=PSK). L'amministratore per LAN A inserisce il gateway di destinazione, il quale è il gateway per LAN B (DSTGW=192.168.2.254) ed anche il gateway sorgente, il quale è l'indirizzo IP gateway per LAN A (SRCGW=192.168.1.254). L'amministratore inserisce successivamente la rete di destinazione, la quale rappresenta la gamma della rete per LAN B (DSTNET=192.168.2.0/24) ed anche la rete sorgente (SRCNET=192.168.1.0/24). Per finire, inserisce l'indirizzo IP di destinazione, il quale è l'indirizzo IP accessibile-esternamente per LAN B (X.X.X.X).

Il seguente è il file della chiave pre-condivisa (chiamata /etc/sysconfig/network-scripts/keys-ipsecX dove X è 0 per LAN A e 1 per LAN B) che entrambe le reti usano per la propria autenticazione. I contenuti di questo file dovrebbero essere identici, e solo l'utente root dovrebbe essere in grado di leggere e scrivere questo file.

IKE_PSK=r3dh4tl1nux

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-ipsec1

Per cambiare la chiave di autenticazione in ogni momento, modificare il file keys-ipsecX su entrambi i router IPsec. Entrambe le chiavi devono essere identiche per una connettività corretta.

Il seguente rappresenta un file di configurazione /etc/racoon/racoon.conf per un collegamento IPsec. Da notare che la riga include in basso nel file, appare solo se collegata al tunnel IPsec, in quanto viene generata automaticamente ogni volta che il collegamento IPsec viene attivato.

# 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"

La seguente rappresenta una configurazione specifica per il collegamento ad una rete remota. 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 ;
        }
}

Prima di iniziare il collegamento IPsec, bisogna abilitare l'inoltro IP nel kernel. Come utente root ad un promt della shell, abilitare l'inoltro IP:

  1. Modificare /etc/sysctl.conf e impostare net.ipv4.ip_forward su 1.

  2. Eseguire il seguente comando per confermare i cambiamenti:

    sysctl -p /etc/sysctl.conf

Per iniziare il collegamento IP, riavviare i router IPsec, o eseguire il seguente comando come utente root su ogni router:

/sbin/ifup ipsec0

I collegamenti vengono attivati e sia LAN A che LAN B possono comunicare tra di loro. I router sono creati automaticamente tramite lo script di inizializzazione richiamato eseguendo ifup sul collegamento IPsec. Per visualizzare un elenco dei router per la rete, eseguire il seguente comando:

/sbin/ip route list

Per provare il collegamento IPsec, eseguire la utility tcpdump sul dispositivo direzionabile-esternamente (eth0 in questo esempio) per visualizzare così i pacchetti della rete durante il loro trasferimento tra gli host (o tra le reti), e verificare che essi vengano cifrati tramite IPsec. Per esempio, per controllare la connettività IPsec di LAN A, digitare quanto segue:

tcpdump -n -i eth0 host lana.example.com

Il pacchetto dovrebbe includere un testo AH e dovrebbe essere visualizzato come dei pacchetti ESP. ESP significa che il pacchetto è stato cifrato. Per esempio (i caratteri con una barra /, denotano la continuazione di una riga):

12:24:26.155529 lanb.example.com > lana.example.com: AH(spi=0x021c9834,seq=0x358): \
	  lanb.example.com > lana.example.com: ESP(spi=0x00c887ad,seq=0x358) (DF) \
	  (ipip-proto-4)