FreeS/WAN è una delle implementazioni IPsec per Linux più diffuse. Può essere utilizzato per gestire decine di tunnel sulla stessa macchina in grado di comunicare tramite IPsec anche con dispositivi di terzi.
INTRODUZIONE E FEATURES
FreeS/WAN è composto da 3 parti principali:
Klips E' un modulo per il kernel, che va compilato sul kernel corrente (ed è in genere piuttosto sensibile alle variazioni di versione, per cui è bene utilizzarne la versione compatibile con il proprio kernel). Gestisce AH e ESP modificando di conseguenza i pacchetti IP gestiti dal kernel.
pluto E' un demone che gestisce il protocollo IKE per la negoziazione dei tunnel.
User tool vari, che generalmente possono essere invocati dal comando ipsec
, con cui di fatto si eseguono tutte le operazioni di gestione delle VPN.
Tramite FreeS/WAN si possono configurare tunnel net-to-net, ai cui estremi si trovano dei gateway delle due reti remote da connettere, oppure si può avere un singoli VPN gateway a cui si collegano client remoti anche con IP variabili (configurazioni roadwarrior, tipicamente utilizzabili su portatili o dial-up stations).
L'interoperabilità con altri software e device IPsec (da Cisco a Microsoft, da Checkpoint a Solaris) è buona, soprattutto se si usano le patch per il supporto di certificati x.509.
Una versione parallela a quella ufficiale che si base su di essa e aggiunge tutte le patch più interessanti (supporto NAT, x.509, algoritmi di criptazione alternativi a 3DES ecc) è Super FreeS/WAN.
Una caratteristica interessante, proposta dagli autori di FreeS/WAN come estensione dello standard IPsec (che loro vorrebbero ratificata in future RFC) è l'Opportunistic Encryption (OE) che, basandosi sul DNS per lo scambio delle chiavi pubbliche, rende l'implementazione di nuovi tunnel molto più rapida e snella.
Al momento è possibile utilizzare questa feature solo fra due VPN gateway basati su FreeS/WAN.
Molte soluzioni VPN (network appliance e distribuzioni standard dedicate) basate su Linux utilizzano FreeS/WAN, spesso con interfacce grafiche che ne semplificano l'installazione e la configurazione.
Fino alla versione 1.99 l'unico protocollo di criptazione supportato è 3DES. DES non viene supportato per la scarsa sicurezza, il supporto AES è previsto nelle future versioni ufficiali o disponibile nelle patch di Super FreeS/WAN. Gli autori, non a torto, non ritengono necessario implementare altri protocolli che complicherebbero il progetto.
INSTALLAZIONE
L'installazione direttamente dai sorgenti richiede un patching del kernel per includere i moduli forniti da FreeS/WAN. Non è ovviamente pratica che può essere felicemente portata a termine da un utente poco esperto ma, per chi è abituato a ricompilarsi il kernel, non presenta particolari difficoltà.
Dal sito ufficiale sono scaricabili anche dei comodi rpm (al momento per RedHat 7 e 8) che rendono l'installazione molto più semplice: basta un rpm -i di freeswan-module.*.rpm e freeswan.*.rpm.
Notare che per usare questi RPM si devono usare i kernel modulari standard di RedHat: se si usa un proprio kernel ricompilato autonomamente è il caso di considerare l'installazione da sorgenti.
Prima di procedere alla configurazione ai due estremi del tunnel è bene assicurarsi che ci sia connettività IP fra i due per evitare troppe perdite di tempo di fase di troubleshooting del setup.
A livello di firewalling, un tunnel IPsec ha bisogno di poter far comunicare i due gateway sulla porta UDP 500, in entrambi i sensi, per il protocollo IKE, inoltre si deve permettere il passaggio di pacchetti IP type 50 per il protocollo ESP, che quindi non usa TCP o UDP per il trasporto, e i pacchetti IP type 51 per il protocollo AH (che, comunque, non viene abilitato di default da FreeS/WAN).
Si trovano in rete inoltre, gli RPM per RedHat che già comprendono le patch per il supporto di certificati x509, fondamentali per l'interoperabilità con le soluzioni IPsec di vari produttori.
CONFIGURAZIONE
FreeS/WAN di default si aspetta il suo file di configurazione in /etc/ipsec.conf
e un eventuale /etc/ipsec.secrets
con le chiavi RSA o elementi per l'autenticazione fra host. Altri file come certificati e revocation lists devono stare nella directory /etc/ipsec.d/
.
Nel file di configurazione, che prevede un discreto numero di direttive, si intende generalmente il lato sinistro (left) come quello locale e quello destro (Right) come quello Remoto ma questa è solo una convenzione in quanto i termini possono essere scambiati.
Il file di configurazione prevede diverse sezioni, all'interno delle quali si definiscono direttive con formato parametro=valore (una per riga, precedute da almeno uno spazio, anche in presenza di # per i comment, senza righe vuote all'interno della stessa sezione).
Le impostazioni generalmente da fornire per ogni tunnel sono:
- Gli host ID dei server VPN e il modo con cui si autenticano (hostid
).
- L'IP pubblico del server locale (left
)
- L'IP del suo default gateway pubblico (leftnexthop
)
- La rete locale a cui il server è collegato (che dovrà essere messa in comunicazione con la rete remota (leftsubnet
).
- L'IP pubblico del server remoto (right
, può essere un %any
per indicare un IP arbitrario)
- L'IP del suo default gateway pubblico (rightnexthop
può essere un generico %defaultroute
)
- La rete locale a cui il server remoto è collegato (che dovrà essere messa in comunicazione con la rete locale (rightsubnet
).
- Il metodo di autenticazione utilizzato (authby
).
GESTIONE
Tramite il comando ipsec
si possono gestire tutte le userland utility fornite con FreeS/WAN.
Con ipsec --help
è possibile vedere tutti i comandi eseguibili, per o quali esistono ottime man pages con prefisso ipsec_ (es: man ipsec_whack
).
Qui si elencano alcune opzioni particolarmente utili:
ipsec verify
Verifica se il sistema può gestire un tunnel IPsec. Utile per capire in fretta se ci sono problemi di base che precludono il funzionamento.
ipsec setup --start
Avvia il servizio IPsec (carica il kernek module Klips e lnacia Pluto per gestire IKE). Coincide, in installazioni basate su RPM a /etc/rc.d/init.d/ipsec start
.
ipsec setup --stop
Stoppa il servizio IPsec, droppando tutti i tunnel eventualmente attivi.
ipsec whack --status
Mostra lo stato corrente del sistema IPsec
ipsec auto --listall
Elenca tutte le chiavi PSK, RSA o i certificati x509 che possono essere accettati (leggendo i contenuti da /etc/ipsec.secrets
ipsec newhostkey --output /etc/ipsec.secrets --hostname io.openskills.info
Genera una nuova chiave RSA per l'host io.openskills.info e la aggiunge al file ipsec.secrets
ipsec barf
Visualizza a video una grande quantità di informazioni utili per il debugging e il troubleshooting in caso di problemi.