Openswan è una completa implementazione di IPSEC per i kernel Linux 2.0, 2.2, 2.4 e 2.6.
Su debian openswan è facilmente installabile usando apt.
La vpn che andremo a creare è attestata lato nostro su un firewall linux Debian (hostname: firewall) ed è configurata attraverso un software chiamato openswan. Dall'altra parte del tunnel l'altro peer è un router Cisco 3845.
Il nostro firewall ha due schede di rete: etho (pubblica) ed eth1 (privata)
Prima di iniziare la configurazione dobbiamo sempre stabilire con chi gestisce l'altro peer (sempre che non siamo noi a gestire entrambi!) le caratteristiche del tunnel IPSEC che andremo ad instaurare. Per questo motivo mando sempre una mail al mio dirimpettaio in cui scrivo:
" ...per permettere che la VPN funzioni correttamente sarà necessario che sia basata su un IPSEC vendor free senza features aggiuntive.
Altre caratteristiche:
Autenticazione: preshared key
Cifratura: 3DES
Hash: MD5
Diffie Helmann: Gruppo 2
Perfect Forward Secrecy: Disabilitata
Modalità VPN: tunnel
IKE: Main Mode
NAT-T: No "
I file di configurazione della vpn su cui andremo a lavorare lato nostro sono i seguenti:
/etc/ipsec.conf dove indicheremo l'include del file di configurazione
/etc/ipsec.secrets dove indicheremo la pre shared key per agganciarci al peer remoto
/etc/ipsec.d/CONNESSIONI-ATTIVE/con-nuovotunnel dove scriveremo tutti i parametri della connessione
Creiamo la directory /etc/ipsec.d/CONNESSIONI-ATTIVE in cui andremo ad inserire i file di configurazione delle vpn che andremo man mano a creare:
firewall#mkdir /etc/ipsec.d/CONNESSIONI-ATTIVE
Dentro la dir appena creata scriveremo il nostro file di configurazione che chiameremo con-nuovaconnessione. Il contenuto del file sarà il seguente:
conn con-nuovaconnessione
type=tunnel #tunnel mode ipsec
left=IPPUBBLICODELNOSTROFIREWALL #the IP address of your OpenSWAN endpoint
leftnexthop=%defaultroute #default gateway
leftsubnet=192.168.72.2/32 # network behind your endpoint
right=IPPUBBLICODELLALTROPEER # Your IP, or %any for a road-warrior setup
rightnexthop=%defaultroute #defaultroute for road warrior unknown
rightsubnet=RETEPRIVATADELLALTROPEER/SUBNETMASK #network behind the PIX
esp=3des-md5 #esp: 3des, hmac: sha1
keyexchange=ike #use regular ike
compress=no #inserita per test
authby=secret #pre-shared secret, you can also use rsa nounces
auto=add #don't initiate tunnel, but allow incoming
pfs=no
spi=0x0 #use base spi of 0x0 for PIX
dpddelay=10
dpdtimeout=120
dpdaction=clear
rekey=yes
Per le singole voci del file di configurazione vi rimando alla vasta documentazione che si trova sul sito di openswan.
Ora andiamo a scrivere la pre shared key concordata dentro il file /etc/ipsec.secrets con questa modalità:
IPPUBBLICOMIOFIREWALL IPPUBBLICOALTROPEER : PSK "presharedconcordata"
Attenzione: la pre shared key deve essere scritta dentro i doppi apici!
Fatto questo ci resta solo da inserire l'include del file di configurazione nel nostro file /etc/ipsec.conf:
include /etc/ipsec.d/CONNESSIONI-ATTIVE/con-nuovaconnessione
Prima di provare a tirare su la vpn non dobbiamo dimenticarci però due cose:
1)aver creato l'interfaccia interna 192.168.2.72 sul nostro firewall
2)aver inserito le regole iptables per pemettere al nostro firewall di girare correttamente il traffico. Un esempio:
iptables -t nat -A POSTROUTING -s 192.168.72.0/24 --dst RETEPRIVATAALTROPEER/SUBNETMASK -j SNAT --to-source 192.168.72.2
Ora possiamo tirare su la nostra vpn con i seguenti comandi:
/etc/init.d/ipsec start (solo se ipsec non era ancora stato avviato)
ipsec auto --verbose --up con-nuovaconnessione
Per verificare lo stato della vpn si può usare il seguente comando
ipsec auto --verbose --status
e verificare se sono in stato SA established sia ISAKMP che IPsec.
Esempio:
000 #153: "con-nuovaconnessione":500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 871s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0)
000 #152: "con-nuovaconnessione":500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 25764s; newest IPSEC; eroute owner
000 #152: "con-nuovaconnessione" esp.2f26e857@IPPUBBLICOALTROPEER esp.2a9932cc@NOSTROIPPUBBLICO tun.0@IPPUBBLICOALTROPEER tun.0@NOSTROIPPUBBLICO
Un ulteriore prova è quella di mettersi su una macchina dietro al nostro firewall e provare con hping3 a raggiungere una destinazione sulla rete privata dell'altro peer.
Mettendoci in ascolto con tcpdump sia sull'interfaccia privata del nostro firewall (192.168.2.72) sia su quella pubblica dovremmo vedere i pacchetti ragiiungere il firewall e venire incapsulati attraverso il tunnel verso la destinazione.
Un esempio di comando hping3 (supponiamo che la porta 80 della destinazione sia aperta) :
hping3 -S IPPRIVATORETEALTROPEER -p 80
Un esempio dei comandi tcpdump da tirare sul firewall:
1)tcpdump -i eth1:1 host IPPRIVATOALTROPEER verifica che i pacchetti giungano sull'interfaccia interna del firewall
2)tcpdump -i eth0 host IPPUBBLICOALTROPEER verifico che i pacchetti stiano venendo incapsulati e girati nel tunnel verso la destinazione.
Se i pacchetti vengono incapsulati e girati nel tunnela ma non tornano indietro è molto probabile che ci sia qualche problema di routing dall'altra parte del tunnel.
Nel caso in cui volessimo tirare giù la vpn:
ipsec auto --verbose --down con-nuovaconnessione
Nessun commento:
Posta un commento