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
- server che si occupera' di fare il nat (se vogliamo far navigare i client tramite lui)
-
- perche' ha un indirizzo ip pubblico (una vps da qualche parte, arubacloud costa 1 euro al mese)
- perche' il nostro router di casa ufficio e' un router che non gestisce route statiche e nat da reti multiple
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