WireGuard è un software gratuito per la creazione di una rete virtuale privata (VPN). Uti­liz­zan­do una VPN, si apre in Internet un tunnel virtuale tra due di­spo­si­ti­vi: la con­nes­sio­ne di rete at­tra­ver­sa il tunnel come se i di­spo­si­ti­vi fossero collegati di­ret­ta­men­te da un cavo di rete. Le grandi or­ga­niz­za­zio­ni come istituti di ricerca, ministeri e aziende uti­liz­za­no spesso le VPN poiché per­met­to­no di regolare l’accesso a de­ter­mi­na­te risorse della rete e isolare il flusso di dati dell’utente dal mondo esterno.

IPsec,OpenVPN, L2TP e PPTP offrono già una serie di stack evoluti di pro­to­col­lo VPN. I fornitori di soluzioni VPN si basano su questi pro­to­col­li per con­sen­ti­re ai propri utenti di gestire il proprio traffico Internet at­tra­ver­so la VPN. Adesso sempre più fornitori di VPN integrano WireGuard nelle proprie ap­pli­ca­zio­ni per i vantaggi che offre.

Che cos’è WireGuard?

WireGuard è un’ap­pli­ca­zio­ne e un pro­to­col­lo di rete per la creazione di tunnel VPN criptati. Il software è gratuito con la licenza GPLv2 ed è di­spo­ni­bi­le su più piat­ta­for­me. WireGuard è scritto nei linguaggi “C” e “Go” e funziona con Windows, macOS, BSD, iOS e Android.

WireGuard crea un tunnel criptato at­tra­ver­so il quale vengono in­stra­da­ti i flussi di dati così protetti da accessi non au­to­riz­za­ti. wOltre al­l'at­ten­zio­ne per una crit­to­gra­fia avanzata, WireGuard offre ot­ti­miz­za­zio­ni per di­spo­si­ti­vi e sistemi mobili “Internet of Things+ (IoT)”.

Dalla primavera del 2020, WireGuard è stato integrato di­ret­ta­men­te nel kernel Linux. Dal momento che Linux opera come sistema operativo standard su miliardi di di­spo­si­ti­vi collegati in tutto il mondo, WireGuard può essere uti­liz­za­to pra­ti­ca­men­te ovunque. Il suo utilizzo su larga scala è dovuto anche al fatto che il software è re­la­ti­va­men­te leggero e richiede solo bassi requisiti di hardware.

Quali sono le ca­rat­te­ri­sti­che di WireGuard?

La ca­rat­te­ri­sti­ca prin­ci­pa­le del pro­to­col­lo WireGuard è il co­sid­det­to Cryptokey Routing.Gli indirizzi IP con­sen­ti­ti all’interno di un tunnel vengono assegnati alla chiave pubblica di un partner di con­nes­sio­ne che decifra i pacchetti in entrata. Dopo la de­co­di­fi­ca, un pacchetto in entrata viene con­se­gna­to solo se proviene da un indirizzo IP cor­ri­spon­den­te alla chiave, al­tri­men­ti viene scartato.

A dif­fe­ren­za degli stack di pro­to­col­lo VPN IPsec e OpenVPN, WireGuard non è un pro­to­col­lo agile: invece di negoziare sin­go­lar­men­te le basi crit­to­gra­fi­che da uti­liz­za­re durante la fase di handshake quando si sta­bi­li­sce una con­nes­sio­ne, WireGuard si limita ad alcune opzioni. Le funzioni crit­to­gra­fi­che uti­liz­za­te sono in forma rias­sun­ti­va. Qualora una delle basi crit­to­gra­fi­che risulti com­pro­mes­sa, viene pub­bli­ca­ta una nuova versione sicura del pro­to­col­lo WireGuard che, se uti­liz­za­ta da entrambi i partner di co­mu­ni­ca­zio­ne, pro­teg­ge­rà il flusso di dati.

Al momento della stesura di questo articolo sono in uso i seguenti pro­to­col­li e tec­no­lo­gie di crit­to­gra­fia:

  • Noise pro­to­col­fra­mework
  • Curve25519
  • ChaCha20
  • Poly1305
  • BLAKE2
  • SipHash24
  • HKDF

Quali sono i vantaggi di WireGuard?

Uno dei maggiori vantaggi di WireGuard sta nelle di­men­sio­ni del suo codebase. L'intero codice kernel è co­sti­tui­to da circa 4.000 linee di codice mentre il codice di un'im­ple­men­ta­zio­ne di OpenVPN o IPsecne contiene circa 100.00-600.000. Un codebase più piccolo è in­trin­se­ca­men­te più sicuro perché rende più facile trovare i bug e riduce al minimo la su­per­fi­cie di attacco.

Anche l'in­ven­to­re di Linux Linus Torvalds, noto per la sua scrittura pungente e gli scatti d’ira oc­ca­sio­na­li, ha elogiato espli­ci­ta­men­te la codebase di WireGuard:

Citazione

“Maybe the code isn’t perfect, but I’ve skimmed it, and compared to the horrors that are OpenVPN and IPSec, it’s a work of art.” – Fonte: netdev - Re: [GIT] Net­wor­king

Tra­du­zio­ne: “Forse il codice non è perfetto, ma a una prima occhiata, rispetto all’orribile codice di OpenVPN e IPSec, è un’opera d'arte.”

Grazie alla minore com­ples­si­tà del software, si possono ottenere maggiore sicurezza e pre­sta­zio­ni più elevate. Nei benchmark, WireGuard ga­ran­ti­sce una velocità di tra­smis­sio­ne maggiore e una latenza minore rispetto ai pro­to­col­li con­cor­ren­ti. Inoltre, WireGuard non è un pro­to­col­lo "chiac­chie­ro­ne": (“it is not a chat­ty­pro­to­col”): se l'utente non invia dati at­tra­ver­so il tunnel, WireGuard è a riposo riducendo in questo modo la quantità di energia uti­liz­za­ta, a beneficio della durata della batteria.

L'ef­fi­cien­za ener­ge­ti­ca è molto im­por­tan­te per i di­spo­si­ti­vi mobili e in questo settore WireGuard è ben po­si­zio­na­to per diversi aspetti. Ad esempio, questo pro­to­col­lo supporta il roaming ovvero il passaggio au­to­ma­ti­co dalla rete Wi-Fi alla rete di telefonia mobile e viceversa. Questo significa che se si perde una con­nes­sio­ne, WireGuard di solito si ricollega più ve­lo­ce­men­te rispetto ai pro­to­col­li con­cor­ren­ti.

Come funziona WireGuard?

In linea di principio WireGuard è un pro­to­col­lo VPN peer-to-peer de­cen­tra­liz­za­to che, senza uti­liz­za­re un server, permette di aprire un tunnel di­ret­ta­men­te tra due di­spo­si­ti­vi. Un "server" WireGuard è sem­pli­ce­men­te un di­spo­si­ti­vo su cui sono me­mo­riz­za­te le con­fi­gu­ra­zio­ni di con­nes­sio­ne per diversi utenti.

Il pro­ce­di­men­to per stabilire una con­nes­sio­ne con WireGuard è simile a Se­cu­re­Shell (SSH): con WireGuard gli utenti ("peers") creano chiavi pubbliche che scambiano tra loro e usano per au­ten­ti­car­si a vicenda e criptare i pacchetti di dati.

Dopo aver creato le chiavi crit­to­gra­fi­che, su ogni utente vengono ef­fet­tua­te diverse im­po­sta­zio­ni di rete (vedi di seguito la nostra guida alla con­fi­gu­ra­zio­ne di WireGuard). Per per­met­te­re lo scambio di dati, si collegano alla chiave crit­to­gra­fi­ca gli indirizzi IP au­to­riz­za­ti degli utenti mentre vengono scartati quelli di diversa pro­ve­nien­za. Con WireGuard la tra­smis­sio­ne dei dati avviene tramite il pro­to­col­lo User Datagram Protocol (UDP).

La con­fi­gu­ra­zio­ne sul di­spo­si­ti­vo di un utente viene ef­fet­tua­ta uti­liz­zan­do lo strumento della barra dei comandi WireGuard e altri strumenti standard di­spo­ni­bi­li su Linux. Sebbene il software sia con­si­de­ra­to re­la­ti­va­men­te facile da con­fi­gu­ra­re, WireGuard serve solo come base. Nelle singole fasi di con­fi­gu­ra­zio­ne e di con­nes­sio­ne, l’utente può avvalersi di un'ap­pli­ca­zio­ne basata sul pro­to­col­lo. Gli utenti di servizi VPN com­mer­cia­li possono così godere dei vantaggi del moderno pro­to­col­lo VPN senza dover uti­liz­za­re la barra dei comandi.

Primi passi con WireGuard

In linea di massima, l’in­stal­la­zio­ne e la con­fi­gu­ra­zio­ne di WireGuard su un sistema Linux risultano ab­ba­stan­za agevoli. Per esempio, è possibile creare una propria con­fi­gu­ra­zio­ne con­fi­gu­ra­re i server VPN con Raspberry Pi. Tuttavia, la procedura esatta cambia a seconda dell'uso previsto, del sistema operativo uti­liz­za­to e del­l'am­bien­te di rete esistente. Qui possiamo solo delineare la procedura ap­pros­si­ma­ti­va, pertanto vi preghiamo di uti­liz­za­re le nostre istru­zio­ni solo a scopo di test.

Consiglio
# per Ubuntu a partire dalla versione 19.10
sudoaptinstallwireguard
# per le versioni Ubuntu precedenti alla 19.10
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard
N.B.

Qui viene mostrata l'in­stal­la­zio­ne su Ubuntu-Linux. Su altri sistemi potrebbe essere ne­ces­sa­rio adattare il codice.

Creare chiavi WireGuard

In modo analogo a SSH e PGP, le chiavi crit­to­gra­fi­che co­sti­tui­sco­no la base per uti­liz­za­re WireGuard. Come da prassi, c'è una chiave privata che deve essere as­so­lu­ta­men­te tenuta segreta e dalla quale viene poi generata una chiave pubblica condivisa con gli utenti. In questo modo gli utenti possono criptare e inviare i dati uti­liz­zan­do la chiave privata per decifrare i dati criptati.

Eseguite i seguenti ordini sulla barra dei comandi per creare una chiave WireGuard privata e pubblica:

# Creare una directory per le chiavi
# ATTENZIONE: solo a scopo di test perché non è sicuro!
mkdir ~/.wireguard/ && cd ~/.wireguard/
# Impostare i diritti dei file
umask 077
# creare una chiave privata
wggenkey>privatekey
# creare una chiave pubblica da una chiave privata
wgpubkey<privatekey>publickey</privatekey>
# Aggiungere l’interfaccia di rete WireGuard
ip link adddev wg0 typewireguard
# Configurare gli indirizzi IP
ip address add dev wg0 192.168.2.1 peer 192.168.2.2
# Configurare l'interfaccia di rete utilizzando il file di configurazione
wgsetconf wg0 myconfig.conf
# Abilitare l’interfaccia di rete
ip link set up dev wg0
In sintesi

Wi­re­Guar­dè un con­cor­ren­te moderno e agile che aspira a sop­pian­ta­re i vecchi stack di pro­to­col­lo VPN IPsec e OpenVPN e nel prossimo futuro potrebbe in gran parte so­sti­tuir­li.

Vai al menu prin­ci­pa­le