Configurare VPN IPSec sul Pix

La configurazione di VPN IpSec sul Pix è simile a quella su Cisco IOS e prevede parametri e una logica simile a qualsiasi altra implementazione IpSec.
In genere, in fase di configurazione di una VPN basata su IpSec, si devono definire i seguenti parametri per i due peer (i dispositivi agli estermi del tunnel):
- Algoritmi di criptazione (3des/des/aes) e hash (md5/sha) utilizzati
- Scelta dell'opzione Perfect Forward Secrecy (PFS) e gruppo Diffie-Hellman (1 o 2)
- Metodo di autenticazione (Pre-shared keys o certificati X509)
- Indirizzi IP pubblici dei due peer (uno può essere arbitrario, per client road warrior, che si collegano da IP diversi) e delle relative reti locali.
- Durata in secondi delle Security Associations IpSec (SA).

Il Pix può stabilire VPN con altri PIX, router Cisco, Firewall Checkpoint e qualsiasi altro dispositivo che supporti IpSec, sia per tunnel lan to lan che per la gestione di roadwarrior. I comandi fondamentali sono isakmp con cui si gestiscono i parametri del protocollo IKE per la negoziazione di SA fra i peer nella prima fase del setup di un tunnel IpSec e crypto con vari sottocomandi per gestire i diversi aspetti della vpn.
Vediamo gli elementi base di una configurazione di un pix con indirizzo pubblico 222.222.222.1/24 sulla interfaccia outside (esterna), e IP 10.0.0.1/24 sulla inside (interna, con un livello di sicurezza maggiore).

Questo Pix viene configurato per assegnare a degli arbitrari client su Internet che si collegano utilizzando una pre-shared key un indirizzo preso dal pool 222.222.222.100-110.

Ecco gli elementi di configurazione necessari:

Si definiscono i nomi e i livelli di sicurezza delle interfacce
nameif ethernet0 outside security0
nameif ethernet1 inside security100


Si definisce una acl che identifica i pacchetti del tunnel da escludere dal natting fra rete interna ed esterno
access-list 101 permit ip 10.0.0.0 255.255.255.0 222.222.222.100 255.255.255.255
access-list 101 permit ip 10.0.0.0 255.255.255.0 222.222.222.101 255.255.255.255
access-list 101 permit ip 10.0.0.0 255.255.255.0 222.222.222.102 255.255.255.255 ...


Indirizzo IP pubblico del Pix e relativa netmask
ip address outside 222.222.222.1 255.255.255.0

Indirizzo IP sulla rete interna
ip address inside 10.0.0.1 255.255.255.0

Definizione degli indirizzi assegnati ai client VPN. Il nome pool-indirizzi è deciso dall'utente.
ip local pool pool-indirizzi 222.222.222.100-222.222.222.110

Si escludono dal natting della rete interna (definito sotto) gli IP che matchano la acl 101 e sono destinati al tunnel.
nat (inside) 0 access-list 101

Anche se non strettamente necessario per una VPN, è logico prevedere che il PIX debba fate PAT (masquerading) della rete interna. Si definiscono gli indirizzi (sull'interfaccia inside) da nattare e, con il comando global, l'indirizzo IP, di solito pubblico, con cui devono apparire. Il numero 111 (NatID) deve corrispondere nei due comandi, usando altri numeri si possono definire diversi IP e relativi pool di indirizzi interni. Di default il NatID è 1. Se si usa lo 0, come nella riga sopra, seguito da una acl, si definisce quali pacchetti escludere dal processo di natting:
nat (inside) 111 0 0
global (outside) 111 222.222.222.50


Definizione del default gateway (si ipotizza un 222.222.222.254). Si deve definire l'interfaccia da cui è raggiungibile.
route outside 0.0.0.0 0.0.0.0 222.222.222.254

Indica al Pix di non considerare access-list e nat per permettere al traffico ipsec di arrivare alle interfacce (comodo, pratico e quasi indispensabile, in assegna di laboriose acl specifiche)
sysopt connection permit-ipsec

Si definisce il set di trasformazione (criptazione + hash) che devono subire i pacchetti nel tunnel. Possono coesistere più set su tunnel diversi, che usano diversi algoritmi. E' indispensabile che client e server della VPN utilizzino esattamente gli stessi algoritmi.
crypto ipsec transform-set il_mio_set esp-des esp-md5-hmac

Le mappe dinamiche, hanno sintassi simili alle normali mappe, ma possono essere utilizzate per matching con client dalle caratteristiche non predefinite. Per tutti i parametri non esplicitamente definiti (indirizzo IP remoto, transform set, range definito da acl ecc) accettano qualsiasi valore (come se ci fosse una wildcard).
La seguente riga associa una mappa dinamica definita dall'utente al trasform set indicato. La definizione di un trasform set è obbligatoria in una dynamic map.
crypto dynamic-map la_mia_mappa_dinamica 10 set transform-set il_mio_set
A titolo d'esempio si segnalano altre entry che possono essere definite (ma non servono nel nostro caso) per questa dynamic map:
crypto dynamic-map la_mia_mappa_dinamica 10 match address 155 # La mappa si applica ai pacchetti definiti nella acl 155
crypto dynamic-map la_mia_mappa_dinamica 10 set pfs # Forza e richiede l'uso di PFS


Un Pix può avere più mappe, per gestire diversi tunnel. Queste hanno un nome (la_mia_mappa) e un sequence number che ne identifica l'ordine di preferenza. Devono restare gli stessi quando si definiscono le caratteristiche della stessa mappa.
La riga che segue associa ad una mappa dell'utente la mappa dinamica sopra definita (l'uso di mappe dinamiche è necessario quando alcuni parametri sono flessibili e non possono essere definiti a priori):
crypto map la_mia_mappa 10 ipsec-isakmp dynamic la_mia_mappa_dinamica

Per assegnare dinamicamente gli indirizzi si deve attivare la IKE Mode Config.
Con questa riga il PIX prova ad assegnare un IP al client che si collega (preso nel range pool-indirizzi precedentemente definito):
crypto map la_mia_mappa client configuration address initiate
Con questa riga il Pix accetta eventuali indirizzi proposti dal client (non dovrebbe essere indispensabile, nel nostro caso)
crypto map la_mia_mappa client configuration address respond

Si applica la crypto map alla interfaccia esterna. Questo comando è fondamentale e di fatto è quello da inserire a fine configurazione per rendere attiva la crypto map. Va specificata l'interfaccia su cui passano i pacchetti da sottoporre alla mappa di criptazione. Notare che può essere specificato solo un set di mappe per singola interfaccia.
Un set di mappe deve avere mappe con lo stesso nome, ed eventuale sequence number diverso. Se ci sono mappe con nomi diversi, queste non appartengono allo stesso set e non possono essere contemporaneamente applicate alla stessa interfaccia. Quindi, se per esempio sull'interfaccia esterna di un Pix terminano, oltre ai client road warrior, del nostro caso, anche altri tunnel lan-to-lan, questi devono essere definiti nella mappa la_mia_mappa con sequence number diversi.
crypto map la_mia_mappa interface outside

Qui si definiscono i parametri con cui gestire IKE, un protocollo che facilita la creazione automatica di SA nella fase 1 della negoziazione IpSec.
Si abilita la possibilità di negoziare IKE sull'interfaccia esterna:
isakmp enable outside

Se si utilizza IKE con un metodo di autenticazione basato su una chiave precedentemente scambiata, questa si definisce nel modo seguente (qui il peer remoto è un qualsiasi indirizzo, ma può essere un IP specifico per tunnel lan to lan):
isakmp key chiave_pre_shared address 0.0.0.0 netmask 0.0.0.0
Oltre che con questo comando (è possibile inserirlo più volte per diversi peer), è possibile definire la chiave con i vpngroup sotto definiti.

Definisce secondo quale criterio (indirizzo IP o nome) i due peer creano la SA IKE. La stessa scelta va fatta su entrambi i lati, se non si usano chiavi RSA per le quali è meglio usare hostname, il valore di default è:
isakmp identity address

Si definisce quale è il pool di indirizzi da assegnare ai client:
isakmp client configuration address-pool local pool-indirizzi outside

Si impostano le policy con cui gestire la negoziazione IKE specificando un numero di priorità (da 1 a 65534, qui è 20). In particolare, nell'ordine: tipo di autenticazione, tipo di criptazione, algoritmo di hash, gruppo Diffie-Hellman, durata in secondi della SA:
isakmp policy 20 authentication pre-share
isakmp policy 20 encryption des
isakmp policy 20 hash md5
isakmp policy 20 group 2
isakmp policy 20 lifetime 86400


Cisco permette una configurazione del tunnel estremamente semplice nei suoi VPN Client (versione 3.x) e nei prodotti che supportano la modalità Easy VPN Remote. Questo è possibile passando vari parametri di rete al client tramite il comando vpngroup (da usare solo con client Cisco). Qui viene definitivo il nome del gruppo (paragonabile ad una login) e la relativa password, oltre agli indirizzi IP di server dns, wins e dominio di default:
vpngroup nome_gruppo dns-server 10.0.0.25
vpngroup nome_gruppo wins-server 10.0.0.25
vpngroup nome_gruppo default-domain intranet
vpngroup nome_gruppo idle-time 1800
vpngroup nome_gruppo password la_password_di_gruppo

Altri parametri sono configurabili, come un pool di indirizzi da assegnare allo specifico gruppo, utile per assegnare diversi pool di indirizzi a diversi gruppi, e in alternativa al pool definito con isakmp client configuration address-pool:
vpngroup nome_gruppo address-pool pool_indirizzi
Oppure una access-list (in questo caso la 89) con cui si definiscono quali pacchetti criptare nel tunnel e quali lasciare al di fuori del canale criptato:
vpngroup nome_gruppo split-tunnel 89

Privacy Policy