| Creare una Rete Privata Virtuale(VPN) |
Questo articolo/tutorial mostra i passi utili a creare una rete virtuale(VPN) con OpenVPN fra due luoghi distinti e con macchine con sistemi operativi Linux Fedora5 e windowsXPpro: le casistiche e le problematiche dei singoli casi sono talmente ampie che non possono essere contemplate tutte in questo articolo, quindi fare riferimento all'ampia documentazione sul sito del software OpenVPN http://openvpn.net/ Per la parte relativa a Linux Fedora l'autore è www.guidoconte.it Qui affronteremo tre significativi casi.
Caso ACollegare due luoghi all’interno della rete Fastweb(in questo caso se entrambi sono dietro un router fastweb non è possibile effettuare il collegamento perché si dovrebbe impostare il “Port Forwarding” su almeno uno dei router fastweb ma il provider non consente l'accesso alle configurazioni)
![]()
Caso BCollegare due luoghi con ip pubblico dinamico assegnato dal provider
![]()
Caso CCollegare due luoghi, uno all’interno della rete Fastweb e l’altro no. ![]()
Preliminare(A, B e C)
Si utilizzerà OPENVPN software opensource sia per windows che per linux(versione con interfaccia per windows OPENVPNGUI) che consente di creare tunnel VPN sicuri attraverso i protocolli SSL/TLS(Secure Socket Layer/Transport Layer Security) con autenticazione utente basata su certificati digitali, smart card oppure Username e Password.
OPENVPN crea un’interfaccia di rete virtuale(TUN/TAP) con una tipologia di indirizzo definito in fase di configurazione. Tutti iclient riceveranno un IP di questa LAN “virtuale” indipendentemente dalla loro collocazione fisica su internet.
citazione: ----------------------------------------------------------------------------------------------------------------- Il metodo di autenticazione per la negoziazione del tunnel è bidirezionale, una volta che il server ha autenticato il client, lo stesso client deve poi autenticare il server. Il primo step, nel set-up del tunnell vpn è quello di mettere il canale di comunicazione in sicurezza crittografando i dati, poi segue la fase di autenticazione attraverso l'uso dei certificati digitali, infine se quest'ultimi risultano validi, avviene lo scambio delle chiavi digitali tra client e server attivando l'adpter virtuale.------------------------------------------------------------------------------------------------------------------
OpenVPN collega server e relativi client con due modalità: Bridged e Routed, noi useremo la Routed. citazione: ------------------------------------------------------------------------------------------------------------------ La seconda soluzione risulta preferibile sia in termini di efficienza che di semplicità di configurazione. Il client in questo caso utilizza la propria sottorete: vengono impostate sia lato client che lato gateway remoto, delle route che permettono la trasmissione dei pacchetti attraverso la VPN. Si noti che parlando di client non si fa riferimento solo al caso di una singola macchina, ma potrebbe trattarsi di un'intera sottorete. Alcune circostanze impongono però il ricorso al Bridging. In tal caso l'interfaccia di rete fisica viene collegata via software con l'interfaccia virtuale utilizzata da OpenVPN creando appunto un ponte, bridge. Tale operazione consente di ottenere una rete virtuale su una singola sottorete. -------------------------------------------------------------------------------------------------------------------
Procedura Operativa
1 - installare OpenVPNlinux ===>yum –y install openvpn
2 - stabilire chi farà da server della rete virtuale:caso A - indifferente (salvo se solo uno dei due luoghi sarà direttamente “pingabile”, allora quello deve fare da server)
3 - impostare il collegamento fisico dei luoghi che faranno il lato server:caso A - verificare l’IP assegnato da Fastweb ed impostarlo come fisso oppure creare una sottorete ed effettuare il “Port Forwarding”, dal router privato verso il PC che farà da server, della porta utilizzata da OpenVPN per il collegamento. 4 - generazione di certificati e chiavi digitali (nella cartella "easy-rsa" ci sono gli script necessari alla creazione, tutto sarà effettuato da riga di comando):SERVER Certificato master o di root - ca.crt linux e window ==>build-ca (specificare un Common Name) Certificato server - server.crt Chiave server - server.key linux e window ==>build-key-server server (specificare un Common Name ed accettare la firma del certificato) Diffie hellman parameters - dh1024.pem linux e window ==>build-dh Chiave tls statica - key.txt(window) ta.key(linux) linux ==>openvpn --genkey --secret ta.keywindow ==>start/programmi/openvpn/Generate a static OpenVPN key CLIENT (ciascun client avrà i propri certificati client e chiavi) Certificato master o di root - ca.crt (lo stesso del server) Certificato client - client1.crt Chiave client - client1.key linux e window ==>build-key client1 (specificare un Common Name ed accettare la firma del certificato, ripetere il comando per ogni client) Chiave tls statica - key.txt(window) ta.key(linux) (lo stesso del server) i file creati attraverso questa procedura si trovano nella cartella "keys", nei file di configurazione server e client specificheremo dove cercarli quindi è consigliabile creare sul server una cartella denominata "server" con all'interno i 5 file necessari ed altre "n" cartelle per quanti sono i client con all'interno i 4 file necessari ai client. C:\Programmi\OpenVPN\config\keys\server
C:\Programmi\OpenVPN\config\keys\client1
...................................... C:\Programmi\OpenVPN\config\keys\client
5 - creare i file di configurazione Server e Client da salvare nelle cartelle:
linux==>/etc/openvpn/server.conf oppure client1.conf
6 - impostare come servizio attivo di deafult OpenVPN:windows==>Pannello di controllo/Strumenti di amministrazione/Servizi
linux da shell “/sbin/chkcong --add openvpn” “/sbin/chkconfig –level 345 openvpn on” esempio file di configurazione Server, in neretto le direttive
#################################################
# Esempio di OpenVPN 2.0 config file per # # multi-client server. # # # # Questo file è per la configurazione # # OpenVPN lato server fra diversi # # clients e un server # # # # OpenVPN supporta anche la configurazione # # fra singole macchine # # (vedere le pagine di esempio sul sito # # per più info ). # # # # Questa configurazione lavora su Windows # # o su Linux/BSD systems. Occorre ricordare # # che per windows nei percorsi bisogna usare # # doppio backslashes, esempio: # # "C:\\Program Files\\OpenVPN\\config\\foo.key" # # # # I commenti sono preceduti da '#' o ';' # #################################################
# quale tipo di indirizzo IP locale OpenVPN # deve utilizzare ;local a.b.c.d
# quale tipo di porta TCP o UDP deve utilizzare OpenVPN # Se occorrono istanze multiple di OpenVPN # sulla stessa macchina, bisogna utilizzare # un numero di porta diverso per ogni istanza. # bisogna inoltre aprire le porte nel firewall. port 1194
# TCP or UDP server? ;proto tcp proto udp
# "dev tun" creerà un routed IP tunnel, # "dev tap" creerà un ethernet tunnel. # Usare "dev tap0" se avete un ethernet bridging # ed avete precreato un'interfaccia virtuale tap0 # da mettere in bridged con la vostra rete reale. # Se volete controllare gli accessi # nella vostra VPN, dovete creare # delle regole nel firewall per le interfacce TUN/TAP. # Nei sistemi non-windows, potete dare # un numero esplicito come tun0. # In Windows a questo scopo usare "dev-node". # In molto sistemi, la VPN non funzionerà # senza rimuovere parzialmente o totalmente # il controllo firewall dalle interfacce TUN/TAP. ;dev tap usare tap anche nella modalità routed in quanto nel caso di reti miste LINUX WINXP funziona ugualmente dev tun
# Windows ha bisogno di un nome per il TAP-Win32 # nelle connessioni di rete se ci sono # più di una interfaccia virtuale. # In xp sp2 o superiori occorre disabilitare # il Windows firewall per ogni TAP. # Gli altri sistemi di solito non ne hanno bisogno. ;dev-node nomeTAP
# SSL/TLS certificato root (ca), certificate # (cert), chiave privata (key). Ogni client # ed il server devono avere i loro file con certificati # e chiavi.Il server e tutti i clients useranno # i medesimi ca file. # # La cartella "easy-rsa" contiene # gli sript utili alla generazione dei # certificati RSA e le chiavi private. Ricordare # di usare un unico Common Name per il server # ed in ogni certificato client. # # Può essere usato qualsiasi sistema X509 di generazione chiavi. # OpenVPN può utilizzare anche un PKCS #12 file chiavi preformati # (vedere le direttive specifiche per "pkcs12" ).
ca "c:\\programmi\\openvpn\\config\\keys\\ca.crt" cert "\\programmi\\openvpn\\config\\keys\\server.crt" key "c:\\programmi\\openvpn\\config\\keys\\server.key" # questi file dovrebbero essere mantenuti segreti
# Parametri Diffie hellman. # Generate i vostri con: # openssl dhparam -out dh1024.pem 1024 # Sostituite 1024 con 2048 se usate # chiavi a 2048bit. dh "c:\\programmi\\openvpn\\config\\keys\\dh1024.pem"
# Configura il modo server così che possa creare # una sottorete VPN che fornisca gli IP ai clients. # Il server prenderà l'indirizzo 10.8.0.1, # i restanti indirizzi saranno utilizzabili dai clients. # Ogni client sarà abilitato a contattare il server all'IP # 10.8.0.1. Commentare questa direttiva se si usa # un ethernet bridging. server 10.8.0.0 255.255.255.0 Caso A, B, e C
# Registrare in questo file l'associazione fra client # ed indirizzo IP virtuale. Se OpenVPN viene # riavviato, i clients si vedranno assegnare lo stesso # indirizzo IP virtuale precedentemente # ricevuto. ifconfig-pool-persist ipp.txt
# Configura il modo server per ethernet bridging. # Verificare che il proprio OS possa effettuare il bridging # tra l'interfaccia TAP e la rete reale # Manualmente bisogna settare # IP/netmask nell'interfaccia bridge in questo # caso con 10.8.0.4/255.255.255.0. Infine # bisogna settare un intervallo di IP range in questa sottorete # (nizio=10.8.0.50 fine=10.8.0.100) da assegnare # ai clients che si connettono. Lasciare questa linea commentata # se non avete ethernet bridging. ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
# Push routes permette # di raggiungere altre reti private dietro # il server. Ricordare che queste # reti private dovranno conoscere # la route della rete dei client OpenVPN # nell'esempio (10.8.0.0/255.255.255.0) # dietro il server OpenVPN. ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0"
# Per specificare gli indirizzi IP da assegnare # a specifici clients o se un client fosse in una rete # privata dietro quella che dovrebbe avere l'accesso VPN, # usare la sottodirectory "ccd" per il file di # configurazione specifica dei clients.
# ESEMPIO: supponiamo che un client # abbia come certificate common name "Thelonious" # ed inoltre appartenga ad una piccola sottorete dietro la # sua connessione, come 192.168.40.128/255.255.255.248. # Primo deccommentare queste linee: ;client-config-dir ccd ;route 192.168.40.128 255.255.255.248 # Quindi creare un file ccd/Thelonious con questa linea: # iroute 192.168.40.128 255.255.255.248 # Questo permetterà alla sottorete privata "Thelonious" # di accedere alla VPN. Questo esempio vale solo # per la modalità routing non bridging, i.e. occorre # usare "dev tun" e la direttiva "server".
# ESEMPIO: supponiamo si voglia assegnare a # "Thelonious" un indirizzo IP fisso come 10.9.0.1. # primo decommentare queste linee: ;client-config-dir ccd ;route 10.9.0.0 255.255.255.252 # Quindi aggiungere questa linea nel file ccd/Thelonious: # ifconfig-push 10.9.0.1 10.9.0.2
# Supponiamo si voglia abilitare diversi # controlli firewall per gruppi differenti di # clients. Ci sono due metodi: # (1) Avviare diversi OpenVPN daemons,uno per ogni # gruppo, e configurare il firewall per ciascuna # interfaccia TUN/TAP relativa al gruppo. # (2) (Avanzato) Creare uno script che dinamicamente # modifica il firewall in risposta agli accessi # dei differenti clients. ;learn-address ./script
# Se abilitata questa direttiva configurerà # tutti i clients a reindirizzare il loro # gateway di default sulla VPN, facendo # così passare tutto il traffico IP web e DNS # attraverso la rete VPN # (La macchina che fa da server OpenVPN deve poter # "nattare" l'interfaccia TUN/TAP con internet # affinchè questa direttiva lavori correttamente). # CAVEAT: potrebbero bloccarsi i pacchetti dei server DHCP # di configurazione di rete che i clients ricevono se questi # passano attraverso il tunnel. Soluzione: verificare # che il server DHCP dei clients sia raggiungibile # attraverso diverse specifiche route che # e non la sola di deafault 0.0.0.0/0.0.0.0. ;push "redirect-gateway"
# Certi specifici setting di rete di Windows # possono essere imposti ai client, come # gli indirizzi dei server DNS e WINS. ;push "dhcp-option DNS 10.8.0.1" ;push "dhcp-option WINS 10.8.0.1"
# Decommentare questa linea per permettere # ai diversi clients di vedere tutti gli altri. # Di default i clients vedranno solo il server. # Per forzare i clients a vedere solo il server, # occorre configurare il firewall per l'interfaccia # TUN/TAP del server. ;client-to-client
# Decommentare questa direttiva se più clients # devono connettersi con i medesimi file di # certificati/chiavi o common names. E' raccomandato # usare uniche chiavi e certificati solo in fase di test. # Nell'uso produttivo ogni clients dovrà avere # le proprie chiavi e certificati di parità # # SE NON AVETE GENERATO CHIAVI E CERTIFICATI # DI PARITA' PER OGNI CLIENT, # ED E' IN USO UN'UNICO "COMMON NAME", # DECOMMENTATE QUESTA LINEA. ;duplicate-cn
# La direttiva keepalive determina un intervallo # di generazione di ping per verificare # la connessione dell'altra parte che viene considerata # down se nel tempo stabilito non riceve risposta. # Il Ping parte ogni 10 seconds, se non # riceve risposta entro 120 secondi considera # il collegamento remoto down. keepalive 10 120
# Come ulteriore sicurezza ottenuta tramite # SSL/TLS, è creare un "HMAC firewall" # per bloccare gli attacchi DOS e UDP port flooding. # # Si fa generando la chiave con: # openvpn --genkey --secret ta.key # # Il server e ogni client devono avere # una copia di questa chiave. # Il secondo parametro deve essere '0' # nel server ed '1' nei clients. ;tls-auth ta.key 0 # Questo file è segreto
# Seleziona il sistema crittografico. # Questa configurazione dovrà essere # identica nelle configurazioni client. ;cipher BF-CBC # Blowfish (default) ;cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES
# Abilita la compressione nei collegamenti VPN. # Se viene abilita qui anche nei file # di configurazione dei client va abilitata. comp-lzo
# Massimo numero\di client collegati ammesso ;max-clients 100
# E' buona cosa ridurre i privilegi # dell'OpenVPN dopo l'inizializzazione. # # Decommentare questa linea # solo nei sistemi diversi da Windows. ;user nobody ;group nobody
# Questa direttiva prova ad evitare # a il ripetersi dell'accesso al riavvio # per certe risorse che potrebbero non riuscirvi # per il downgrade dei privilegi. persist-key persist-tun
# Log di stato della connessione # Connessione corrente, # riaggiornata ogni minuto. status openvpn-status.log
# Di default i Log andranno in syslog (per # Windows, se lanciato come servizio, i Log # andranno nella cartella "\Program Files\OpenVPN\log"). # Usare questa direttiva per cambiare dal deafult. # "log" interromperà il log file all'avvio riuscito di OpenVPN, # "log-append" scriverà ogni evento sul file log. Usare uno # dei due, no entrambi. ;log openvpn.log ;log-append openvpn.log
# Settare la verbosità dei log # # 0 silente, eccetto errori fatali # 4 uso generale # 5 e 6 può aiutare per risolvere problemi # 9 massima verbosità verb 3
# Ogni 20 messaggi sequenziali della stessa categoria # viene generato un output sul file Log. ;mute 20
esempio file di configurazione Client, in neretto le direttive
##############################################
# Esempio di OpenVPN 2.0 config file Client # # perla connessione multi-client server. # # # # questa configurazione può essere usata da # # più clients, tuttavia ogni client dovrebbe # # avere i propri files certificato e chiave # # # # In windows bisogna rinominare questo file # # con estensione .ovpn # ##############################################
# Specifica che è un client e che riceverà # alcune direttive dal file di configurazione # del server. client
# usare lo stesso settaggio usato sul # server. # nella maggior parte dei sistemi il VPN non # funzionerà se non si disattiverà parzialmente # o totalmente il firewall dall'interfaccia TUN/TAP. dev tap usare questa direttiva in tutti i casi ;dev tun
# in Windows, se ci sono più TAP-Win32 nelle # connessioni di rete occorre assegnare un nome # a ciascuna interfaccia TAP-win32 # bisogna inoltre disabilitare il firewall # per ogni TAP adattatore. ;dev-node NomeTAP
# con quale protocollo ci si connette # al server: UDP o TCP? # usare lo stesso settaggio usato sul server ;proto tcp proto udp
# Nome o indirizzo IP e porta del Server. # Si possono avere più server che rispondono # così da bilanciare il lavoro di risposta ai client. 5.245.30.100 1194 - Caso A nomeDNS 1194 - Caso B e C ;remote my-server-2 1194
# Sceglie in modo casuale fra la lista # dei server che rispondono. Altrimenti # prova i server nell'ordine specificato. ;remote-random
# prova senza sosta a risolvere il nome # del server OpenVPN. E' molto # utile nel caso di pc non permanentemente connessi # a internet come i notebook. resolv-retry infinite
# Molti clients non hanno bisogno # di un numero specifico di porta. nobind
# Downgrade dei privilegi dopo l'inizializzazione (no per Windows) ;user nobody ;group nobody
# Provare a preservare lo stato precedente anche dopo il riavvio. persist-key persist-tun
# se siete connessi attraverso un # HTTP proxy per raggiungere il server # OpenVPN, mettere qui il proxy server/IP ed # il numero di porta. Vedere le configurazioni # se il vostro proxy server richiede # autenticazione. ;http-proxy-retry # retry on connection failures ;http-proxy [proxy server] [proxy port #]
# le reti wireless spesso producono molti # duplicati dei pacchetti. Attivare questa direttiva # per tacitare glli avvisi dei duplicati. ;mute-replay-warnings
# SSL/TLS parms. # Vedere il file di configurazione del server # per descrizioni dettagliate. E' meglio usare # file diversi .crt/.key # per ogni client. Un singolo CA # file può essere usato per tutti i clients. ca "c:\\programmi\\openvpn\\config\\keys\\ca.crt" cert "c:\\programmi\\openvpn\\config\\keys\\client1.crt" key "c:\\programmi\\openvpn\\config\\keys\\client1.key"
# Verificare i certificati del server controllando # che il certificato abbia il campo nsCertType # settato su "server". Questa è una # importante precauzione per proteggersi # da potenziali attacchi descritti qui: # http://openvpn.net/howto.html#mitm # # Per usare questa caratteristica, bisogna generare # i certificati del server con il campo nsCertType # settato su "server". Farà questo lo script build-key-server # nella cartella easy-rsa. ;ns-cert-type server
# Se una chiave tls-auth è usata dal server # allora ciascun client dovrà avere tale chiave. ;tls-auth ta.key 1
# Seleziona un metodo di crittografia. # Se un'opzione di cifratura è usata sul server # allora deve essere specificato qui. ;cipher x
# Abilita la compressione nel collegamento VPN. # Non abilitarla se non è abilitata # sul filedi configurazione del server. comp-lzo
#Setta la verbosità del log. verb 3
genera un log per verificare gli errori della connessione log c:\\programmi\\openvpn\\config\\client1.log
# Silence repeating messages ;mute 20
|

































