Una virtual private network (VPN) è un modo di usare la cifratura in modo tale che si possa usare una rete pubblica (ad esempio Internet) come se fosse una rete privata (uno spezzone del nostro cablaggio). Una VPN è il tentativo di combinare i vantaggi della rete pubblica (è economica e diffusa) con alcuni dei vantaggi della rete privata (è sicura).
In sostanza tutte le VPN che usano Internet impiegano lo stesso principio: il traffico viene cifrato, protetta l'integrità e incapsulato in nuovi pacchetti i quali sono mandati in Internet dove qualcuno rifarà a ritroso l'operazione sul traffico ricevuto.
Le VPN non sono esattamente una tecnologia di firewall ma spesso sono discusse in argomenti di firewall per i seguenti motivi:
Il protocollo che è diventato lo standard de facto per questo tipo di comunicazione è IPSec (Internet Protocol Security), del quale sono disponibili numerose implementazioni a seconda dell'amibiente in cui viene impiegato. Il pacchetto IPSec più in uso in ambiente Linux è Openswan IPSEC.
Tre sono i protocolli usati:
L'implementazione è realizzata in tre parti:
Comunque una buona documentazione di IPSec la trovi nel sito stesso.
I due file di configurazione sono:
ipsec.secretsipsec newhostkey > /etc/ipsec.secrets chmod 600 /etc/ipsec.secretsÈ vitale che il file sia di appartenenza del super-user, e che le sue permission ne impediscano l'accesso da tutti gli altri utenti. Una volta installata la chiave nel file ipsec.secrets il passo successivo è distribuire la chiave pubblica a tutti i sistemi con cui prevedi di configurare una connessione con chiavi pubbliche. Per estrarre la parte pubblica in un formato corretto occorre dare i comandi:
ipsec showhostkey --left ipsec showhostkey --rightNel caso in cui si voglia averla in un formato per inserirla in un record di tipo KEY per il DNS il comando diventa:
ipsec showhostkeyL'aspetto del file è il seguente:
# This file holds shared secrets or RSA private keys for inter-Pluto
# authentication. See ipsec_pluto(8) manpage, and HTML documentation.
# $Id: VPN.html,v 1.16 2006-11-20 07:43:35 doros Exp $
#
#
# RSA private key for this host, authenticating it to any other host
# which knows the public part. Suitable public keys, for ipsec.conf, DNS,
# or configuration of other implementations, can be extracted conveniently
# with "ipsec showhostkey".
: RSA {
# RSA 1024 bits gateL Wed Aug 6 21:59:18 2003
# for signatures only, UNSAFE FOR ENCRYPTION
#IN KEY 0x4200 4 1 AQNw76rLzb6ATTlZty9SunFr3skE4x/hADmqQmT1ux/jvwE27l4...
# (0x4200 = auth-only host-level, 4 = IPSec, 1 = RSA)
Modulus: 0x70efaacbcdbe804d3959b72f52ba716bdec904e31fe10039aa4264f5bb1...
PublicExponent: 0x03
# everything after this point is secret
PrivateExponent: 0x12d29c774cf5156234399e87e31f12e74fcc2b7b2ffad55ef1b...
Prime1: 0xda7cb713a68ebf29f833426e41b0552ed0b9886ef74e315c2c5c17ef643b...
Prime2: 0x84539cf66d1173cf6936b427340c96a5d50c52c6cfdfd26ee335029cc6f6...
Exponent1: 0x91a87a0d19b47f7150222c49812038c9e07bb049fa3420e81d92ba9f9...
Exponent2: 0x5837bdf99e0ba28a4624781a22b30f1938b2e1d9dfea8c49ecce01bdd...
Coefficient: 0x018a69edc1278a81f89fd81f5efca57d8c6945d93252eef8a274783...
}
# do not change the indenting of that "}"
dove la chiave RSA è stata generata con il comando
ipsec rsasigkey 1024.ipsec.confconn sample # Left security gateway, subnet behind it, next hop toward right. left=212.1.1.1 leftsubnet=10.10.10.0/24 leftnexthop=212.1.1.2 # Right security gateway, subnet behind it, next hop toward left. right=212.1.2.1 rightsubnet=10.10.20.0/24 rightnexthop=212.1.2.2 # To start the connection at startup auto=startAllo scopo di evitare l'editing del file di configurazione per adattarlo a ciascun sistema coinvolto nella connessione, le specifiche delle connessioni sono scritte in termini di sinistro (left) e destro (right) invece che in termini di locale e remoto. Quale dei partecipanti sia considerato sinistro o destro è arbitrario; IPSec lo identifica in base a informazioni interne. Questo permette di usare le stesse specifiche di connessione per entrambe le estremità. Left rappresenta l'indirizzo pubblico del gateway sinistro. Leftsubnet è l'indirizzo della rete privata sinistra. Leftnexthop è il router di riferimento per la connessione alla rete publica sinistra. La stringa auto=start specifica che la connessione viene attivata allo startup del demone.
config setup
interfaces="ipsec0=eth1"
# Debug-logging controls: "none" for (almost) none, "all" for lots.
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
# Close down old connection when new one using same ID shows up.
uniqueids=yes
dove interface è una lista di coppie del tipo
virtual=physical.
I file di configurazione per il nostro esempio sono:
Sandro Doro (email me)