La rete Privata VPN
La rete Privata VPN
Quante volte ci sarebbe piaciuto fare qualcosa che solo noi possiamo fare?
Quante volte avremmo voluto avere un server disponibile online che solo noi possiamo contattare?
Ebbene, per fare questo ci viene in contro la rete privata VPN (Virtual Private Network), ovvero rete privata virtuale.
Chiaramente io scelgo software OpenSource, quindi io ho scelto OpenVpn, mi trovo molto bene e si configura praticamente all’istante.
Unico requisito NECESSARIO, indirizzo ip statico o risoluzione statica del nome del server.
Io preferisco l’indirizzo ip e la risoluzione del nome in maniera statica.
Io divido, per comodità in server/client, quindi anche in caso di connessione di 2 reti remote, lavoro nello stesso modo: SERVER-CLIENT.
Questo modo di lavorare ha un vantaggio ed uno svantaggio, il vantaggio consiste nel mettere le mani su un unico server, lo svantaggio sta nel fatto che in mancanza del unico server le reti non parlano fra loro perchè in mancanza dell’unico server non si può accendere la rete Privata VPN.
Cominciamo:
Istalliamo la ns solita debian sul server con 2 schede di rete, al momento della redazione di questo articolo la debian stable è la 7.5 Wheezy.
Configuriamo la eth0 con indirizzo ip pubblico e la eth1 con indirizzo ip privato.
Nella eth1 non dobbiamo nomenclare il defaul gateway, questo va dichiarato solo nella eth0 per evitare istradamenti di rete privata su rete pubblica e viceversa.
Gli indirizzi che utilizzo sono:
ecco la configurazione del mio file interfaces
# network /28
auto eth0
iface eth0 inet static
address 81.73.26.146
gateway 81.73.26.145
netmask 255.255.255.240
broadcast 81.73.26.159
# network 81.73.26.144
############################
# network /24
auto eth1
iface eth1 inet static
address 192.168.18.1
# gateway NULLO
netmask 255.255.255.0
broadcast 192.168.18.255
# network 192.168.18.0
Le due interfacce di rete sono affacciate una verso la rete esterna ed una verso quella interna, in questo modo se avessi 100 lan da collegare fra loro, dovrei soltanto stare attento ad avere indirizzi ip privati su segmenti differenti nelle varie lan remote.
Per comodità non userò MAI una rete 192.168.X.X poiché questa è usata di default da molti router, pertanto preferisco usare una subnet 172.16.0.0/12 subnettata in varie sottoclassi tipo:
server farm 172.16.0.0/27
Ufficio di roma1 172.16.0.32/27
Ufficio di roma2 172.16.0.64/26
Ufficio di pisa 172.16.1.0/24
Client farm 172.16.2.0/23
e così via
quindi informando il server vpn dell’esistenza di reti private esterne, non devo far altro che aggiungere una statica di route per 172.16.0.0/12 sulla sit0, tutto il resto si arrangia da solo 🙂
Fatto questo preambolo e configurate le due schede di rete come sopra, sul server passiamo all’istallazione del software e alla configurazione dello stesso.
# apt-get install vim aptitude mc openssh-server -y
# aptitude update
# aptitude upgrade
# aptitude install openssl openvpn
Terminata l’istallazione noteremo un errore, questo è normale perché non abbiamo ancora configurato nulla.
Copiamo il software nel posto giusto e creiamo i certificati
# cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn
# vi /etc/openvpn/easy-rsa/2.0/vars
In fondo al file troviamo questa sezione che va configurata come segue:
…
export KEY_COUNTRY=”IT”
export KEY_PROVINCE=”RM”
export KEY_CITY=”CITTÀ”
export KEY_ORG=”ORGANIZZAZIONE”
export KEY_EMAIL=”indirizzo@email.tld”
export KEY_EMAIL=ripetere_indirizzo@email.tld
… Tutto il resto rimane invariato.
salviamo ed usciamo
Inizializziamo le chiavi
# cd /etc/openvpn/easy-rsa/2.0/
# . ./vars
Puliamo eventuali vecchie chiavi di default
# ./clean-all
Creiamo il nostro authority ca
# ./build-ca
A questo punto, dobbiamo inserire il common name che deve corrispondere per nome/ip/reverse al nome reale del server es vpn.dibrigida.it
Adesso generiamo il certificato per il server
# ./build-key-server vpn.dibrigida.it
Anche qui dobbiamo inserire il common name come sopra
Terminata la generazione del certificato creiamo un nuovo certificato destinato al primo client o prima rete remota.
# ./build-key ServerFarm (io tratto la server farm come se fosse una normale rete remota)
Verrà generato un output simile ai precedenti, solo che in questo caso il common name sarà ServerFarm.
A questo punto dobbiamo generare i parametri di Diffie-Hellman per il server
# ./build-dh
Terminato il tutto spostiamo le chiavi nei posti giusti.
# cd keys
# cp ca.crt /etc/openvpn
# cp ca.key /etc/openvpn
# cp vpn.dibrigida.it.crt /etc/openvpn
# cp vpn.dibrigida.it.key /etc/openvpn
# cp dh1024.pem /etc/openvpn
Creiamo il file di configurazione
# vi /etc/openvpn/openvpn.conf e ci mettiamo dentro i ns parametri
port 1194
proto tcp
dev tun
ca ca.crt
cert vpn.dibrigida.it.crt
key vpn.dibrigida.it.key
dh dh1024.pem
server 10.0.0.0 255.255.255.0 # questo è l’indirizzo ip del tunnel sul quale fare routing
ifconfig-pool-persist ipp.txt # in questo file vengono registrati gli ip statici dei client
keepalive 10 120
comp-lzo
user nobody
group users
persist-key
persist-tun
status openvpn-status.log
verb 3
client-to-client # questo permette alle varie reti di dialogare fra loro
salviamo, usciamo e riavviamo il demone per La rete Privata VPN
# /etc/init.d/openvpn stop
# /etc/init.d/openvpn start
controlliamo se il tunnel è UP
# ifconfig
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.0.0.1 P-t-P:10.12.132.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:675 errors:0 dropped:0 overruns:0 frame:0
TX packets:541 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:79988 (78.1 KiB) TX bytes:88518 (86.4 KiB)
eeee wualàààààà
il server è UP
Passiamo al client, che come abbiamo detto per noi non fa differenza sia che si tratti di un intera rete o di un singolo coputer.
Quindi istalliamo una bella debian sul computer che farà da client/router
# apt-get install vim openssh-server aptitude -y
# aptitude update
# aptitude upgrade
# aptitude install openvpn
I certificati relativi al client che abbiamo generato sul server vanno copiati sul client
# scp -C -r root@vpn.dibrigida.it:/etc/openvpn/easy-rsa/2.0/keys/ServerFarm* /etc/openvpn/
# scp -C -r root@vpn.dibrigida.it:/etc/openvpn/easy-rsa/2.0/keys/ca.crt /etc/openvpn/
Creiamo il file di configurazione
#vi /etc/openvpn/openvpn.conf
e ci mettiamo dentro
client
dev tun
proto tcp
remote vpn.dibrigida.it 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert ServerFarm.crt
key ServerFarm.key
comp-lzo
verb 3
Salviamolo e riavviamo la rete Privata VPN
# /etc/init.d/openvpn restart
Starting virtual private network daemon: openvpn(OK)
#ifconfig
tun0 Link encap:UNSPEC IndirizzoHW 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
indirizzo inet:10.0.0.6 P-t-P:10.12.132.5 Maschera:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:1151 errors:0 dropped:0 overruns:0 frame:0
TX packets:1518 errors:0 dropped:0 overruns:0 carrier:0
collisioni:0 txqueuelen:100
Byte RX:186986 (186.9 KB) Byte TX:175812 (175.8 KB)
Fantastico !
Facciamo un test di raggiungibilità
ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=32.2 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=33.9 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=32.5 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=32.5 ms
64 bytes from 10.0.0.1: icmp_seq=5 ttl=64 time=32.2 ms
64 bytes from 10.0.0.1: icmp_seq=6 ttl=64 time=32.5 ms
^C
— 10.0.0.1 ping statistics —
6 packets transmitted, 6 received, 0% packet loss, time 5007ms
rtt min/avg/max/mdev = 32.245/32.685/33.912/0.576 ms
Perfetto, i tempi sono buonissimi
Sistemiamo il firewall che dovrebbe permettere accesso soltanto alla porta 1194 tcp se proveniente da eth0 e negare tutto il traffico in entrata sulla eth0, mentre dovrebbe permettere tutto il traffico proveniente e destinato alla eth1 solo se sorgente dalla tun0 o destinato alla stessa.
Per aggiungere una rete, di conseguenza un nuovo certifificato, procediamo così:
# cd /etc/openvpn/easy-rsa/2.0
# source vars
# ./build-key NUOVOCERTIFICATO
# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
…..+..+..+.+.+.+…..+…..+……+……+……+……….+………+…..+…..+….+…+…………………………….+….+……+…..+………+………+…………….+………………….+………………………………………………………………………………………………………+………………………………………….+……………………….+………………………….+…………………+…………………………………………………………………………+…………………+………….+……………………+……*++*++*++*
Ecco qui che adesso abbiamo un nuovo utente.
La rete Privata VPN è adesso pronta.
Pingback: [LINK] Firewall portatile con Banana PI o Raspberry PI | AKLab.org
Pingback: FIREWALL PORTATILE protegge da proxy e da sniffer maligni.