Stella inattivaStella inattivaStella inattivaStella inattivaStella inattiva
 

per l' installazione del server openvpn ho preso spunto da questo sito

https://nikinuryadin.wordpress.com/2010/04/16/step-by-step-setting-up-openvpn-in-debian-with-routing-tun-connection/

non mi dilunghero sull' installazione del server debian, trovate decine di articoli, e di seguito parlero' di un' installazione per una vpn routed ( con interfaccia tun)

il server openvpn, quindi alla fine avviandosi creera una o piu' interfacce di rete in base a quanti file di configurazione abbiamo realizzato del tipo

tun0

tun1

essendoci loggati come root o avendo avuto avuto accesso tramite sudo -s a root procediamo con l' installazione

apt-get install openvpn easy-rsa

ho deciso di implementare una vpn con chiavi rsa, per firmare l' autenticazione e crittografare traffico,

prepariamo l' ambiente per le chiavi (per sicurezza potremmo anche installare il pacchetto easy-rsa su di un' altra macchina e copiare le chiavi poi sul server e sui client, o con scp o semplicemente visto che sono chiavi testuali con un semplice editor , tanto nel server devono solo esser scaricati i file 

ca.crt
dh2048.pem
server.crt
server.key
ta.key

 

NON SERVE metter sul server il file ca.key

 

a secondo della versione di linux che abbiamo potremmo dover creare e copiare i flie degli script se non viene creata automaticamente la directory /etc/openvpn/easy-rsa

mkdir /etc/openvpn/easy-rsa
cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa

 

oppure crearle in automatico col comando

make-cadir /etc/openvpn/easy-rsa/

 

quindi generiamo le chiavi ,

la prima e' quelle per l' autorita' di certificazione (CA) che verra usata per firmare i certificati dei client e del server ( in teoria potremmo anche acquistarla).

durante il processo per la generazione dei certificati ci verranno fatte delle domande ripetitive, possiamo modificare il file

vars

per rispecchiare le nostre risposte e non doverle scrivere ogni volta (citta, ufficio, email etc etc) , ricordiamoci che la directory easy-rsa e' una directory a cui solo il proprietario (root) puo' accedere

cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca

creiamo le chiavi del server

./build-key-server nomeserver

creiamo la chiave diffie-hellman necessaria allo scambio delle chiavi di criptazione tra i client e il server

./build-dh 2048

 creiamo la chiave per l' autenticazione  TLS

openvpn --genkey --secret ta.key

 

a questo punto possiamo copiare i seguenti file sul server , in una directory a nostro piacimento ad esempio

 

/etc/openvpn/easy-rsa/keys/

 

ca.crt
dh2048.pem
server6.crt
server6.csr
server6.key
ta.key

 

creazione del file di configurazione del server

dovendo creare il file di configurazione del server , dobbiamo effettuare alcune scelte

la porta da usare , generalmente la 1194 ma possiamo variarla , nell' esempio utilizzero la  1294

il protocollo da usare , tcp o udp , di default udp in quanto tutto il traffico che passa sulla nostra rete anche quello tcp , ha gia' i suoi meccanismi di retrasmission

il tipo di device tun o tap , in questo caso tun

l' indirizzamento da dare alla rete (nell' esempio 10.20.30.0/24)

se avere un file che ricordi le assegnazioni client - ip (ipp.txt o come volete chiamarlo)  , e' un file nella directory della configurazione chiamato ipp.txt dentro i quali openvpn registra l' indirizzo ip dato ad ogni client

se il nostro client deve usare la nostra rete per navigare in internet o solo per accedere alle risorse locali (redirect-gateway def1 bypass-dhcp)

volendo abilitare i log di openvpn , dovremo stabilire dove metterli e creare le directory eventualmente con i permessi corretti

la directory dove mettere i file specifici per ogni client (ccd) (il file ccd e' un file che deve avere lo stesso nome del COMMON NAME del certificato [per questo dovremo assegnare sempre common name univoci] dove dentro metteremo direttive perticolari per quel client, lo vedremo dopo)

dovremo stare particolarmente attenti al fatto che la riga della configurazione dove indichiamo la directory ccd non abbia uno / alla fine

 

mkdir /var/log/openvpn/
mkdir /etc/openvpn/ccd

passiamo a creare i file di configurazione

port 1294
proto udp
dev tun

topology subnet
ca      /etc/openvpn/easy-rsa/keys/ca.crt    # generated keys
cert    /etc/openvpn/easy-rsa/keys/server6.crt
key     /etc/openvpn/easy-rsa/keys/server6.key  # keep secret
dh       /etc/openvpn/easy-rsa/keys/dh2048.pem
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
tls-server
server 10.20.30.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-config-dir /etc/openvpn/ccd
push route 10.20.30.0 255.255.255.0
#push "redirect-gateway def1 bypass-dhcp"
#push "dhcp-option DNS 8.8.8.8"
keepalive 10 120

comp-lzo         # Compression - must be turned on at both end
persist-key
persist-tun

status /var/log/openvpn/openvpn-status-tun.log
log /var/log/openvpn/openvpn-tun.log

verb 3  # verbose mode
client-to-client

user nobody
#group nobody

 

una piccola spiegazione di cosa abbiamo configurato con questo file:

port - e' la porta su cui e' in ascolto il server , diversamente dalla configurazione del client dove indica la porta da cui inviamo i pacchetti

proto - udp e' il protocollo che andremo ad usare

dev tun - e' l' interfaccia di rete che andremo a creare per una configurazione bridged

topology subnet - indica che non faremo delle punto punto con i client, ma sta tutto dentro la stessa network in questo caso una /24

ca cert key dh tls-auth sono le varie chiavi e certificati

tls-server indica che utilizzeremo l' autenticazione HMAC tls e questo e' il server

server ip netmask indica la rete che creera il server

ifconfig-pool-persist indica il file nel quale registreremo l' accoppiata ip - common name

client-config-dir indica la directory dove metteremo i file di configurazione dei singoli client nominandoli col loro common name

push-route  sono le righe (anche piu' di una) delle route che dobbiamo comunicare ad ogni client

keepalive indica il numero di ping da mandare per mantenere aperto un canale e dopo quanto tempo si considera caduto il collegamento

comp-lzo indica che useremo la compressione

client-to-client indica che e' consentito il dialogo tra client diversi, quindi tra sedi diverse

 

ora possiamo  avviare il servizio

ATTENZIONE : per chi come me' ha un SO con systemd e vuole usare un nome del file di configurazione diverso da quello standard deve aggiungere

systemctl enable openvpn@server_tun.service

 in modo da far sapere a systemd come si chiama il file di configurazione

dopodiche puo' avviarlo con

systemctl start openvpn@server_tun.service

 

in caso di errori nell' avvio del servizio, potremo indagare tramite i comandi

systemctl status openvpn<at>vpnname.service
journalctl -xn
cat /var/log/openvpn/server_tun.log

 

per aver conferma che tutto sia andato per il meglio e che il nostro serveer e' in ascolto sulla porta prescelta diamo da root (o sudo) il comando

netstat -anp | grep openvpn
udp        0      0 0.0.0.0:1294            0.0.0.0:*                           4698/openvpn

 

se vogliamo abilitare la navigazione tramite l' ip del server dovremo  abilitare il routing

per fare una prova, non sopravvive al reboot

echo 1 > /proc/sys/net/ipv4/ip_forward

per abilitarlo definitivamente

nano /etc/sysctl.conf

cercare la riga

#net.ipv4.ip_forward=1

 e rimuovere il # davanti

 

qui ora differenziero per due tipologie d' installazione

  1. server che si occupera' di fare il nat (se vogliamo far navigare i client tramite lui)

  2. server che non si occupera di fare il nat perche' gestiamo tutto sul router (ad esempio un cisco) SALTARE L' ABILITAZIONE DEL NAT SUL SERVER 

 

Abilitazione NAT sul server

 

iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 10.20.30.0/24 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.20.30.0/24 -o eth0 -j MASQUERADE

 

modifica che e' temporanea , se vogliamo renderla definitiva

iptables-save > /etc/iptables.up.rules
reboot

 questa regola permettera' di navigare col nat solo i dispositivi dove e' creata la vpn, nel router, nel singolo client che esegue openvpn o nel telefonino, se vogliamo che navighi anche la rete nattata dobbiamo aggiungere due righe di nat per ogni rete che vogliamo aggiungere, quindi se il nostro router che esegue openvpn ha una rete 192.168.21.0/24 dobbiamo aggiungere

 iptables -A FORWARD -s 192.168.21.0/24 -o eth0 -j ACCEPT
 iptables -t nat -A POSTROUTING -s 192.168.21.0/24 -o eth0 -j MASQUERADE

 

per verificare che il nat sia attivo

iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     all  --  10.20.30.0/24        anywhere            
ACCEPT     all  --  192.168.21.0/24      anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain fail2ban-ssh (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere        

 

come potete vedere nella chain FORWARD (policy ACCEPT) vengono elencate tutte le reti per le quali e' attivo il NAT

 

ABILITAZIONE DEL NAT SUL ROUTER (cisco)

da saltare se abbiamo abilitato il nat sul server

sul router principale inseriamo la route di ritorno verso la rete openvpn e tutte le reti dei client

ip route 10.20.30.0 255.255.255.0 192.168.10.99
ip route 10.20.31.0 255.255.255.0 192.168.10.99
ip route 10.20.32.0 255.255.255.0 192.168.10.99
ip route 10.20.33.0 255.255.255.0 192.168.10.99
ip route 10.20.35.0 255.255.255.0 192.168.10.99
ip route 10.20.36.0 255.255.255.0 192.168.10.99

 

 

e se si sta facendo nat, ricordarsi di aggiungere la rete 10.20.30.0 (e tutte le altre reti create) all' access list che permette il nat

access-list 1 permit 10.20.30.0 0.0.0.255
access-list 1 permit 10.20.31.1 0.0.0.255
access-list 1 permit 10.20.32.1 0.0.0.255
access-list 1 permit 10.20.33.1 0.0.0.255
access-list 1 permit 10.20.35.1 0.0.0.255
access-list 1 permit 10.20.36.1 0.0.0.255

 

summarizzare a piacere !!!!

 

La fase di tuning (debug)

 

per monitorare il traffico dati e analizzarlo in seguito con wireshark

 sudo tcpdump -i eth0 not port 22 and not port 1294 -w icmp.eth0

il tcpdump lo potremo lanciare anche sull' interfaccia tun0  , e' utile per discriminare se ci sono problemi di routing interni ad openvpn

per copiare sulla macchina locale il file (do per scontato che abbiate cambiato la porta ssh)

scp -L porta_server Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.:/home/nomeutente/icmp.eth0 ./icmp.eth0

 

per verificare se stiamo uscendo dal nostro indirizzo IP o da quello del server

sudo traceroute -i tun0 -n -q 1 -w 1 8.8.8.8
[sudo] password for davidea: 
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  10.20.30.1  46.586 ms
 2  xx.xx.xx.xx  48.235 ms
 3  xx.xx.xx.xx  49.954 ms
 4  xx.xx.xx.xx  50.818 ms
 5  xx.xx.xx.xx  60.269 ms
 6  217.29.66.96  60.445 ms
 7  209.85.254.107  68.708 ms
 8  8.8.8.8  69.110 ms

 come potete vedere il primo hop e' l' ip del server openvpn

 

 

 openvpn --show-digests
 openvpn --show-ciphers
 openvpn --show-tls