WireGuard VPN: nozioni di base
WireGuard è un protocollo moderno di rete privata virtuale (VPN) che consente connessioni sicure e crittografate tra i dispositivi. Grazie a una base di codice semplice e ad alte prestazioni, si è affermato come alternativa potente e a basso consumo di risorse rispetto ai vecchi protocolli VPN come IPsec e OpenVPN. In questo articolo scoprirai cosa contraddistingue WireGuard, come funziona e come installare questa soluzione VPN sul tuo sistema.
Che cos’è WireGuard?
WireGuard è un protocollo VPN open source utilizzato per creare tunnel crittografati tra dispositivi. I flussi di dati vengono instradati attraverso il tunnel e sono quindi protetti da accessi non autorizzati. Oltre a puntare su una crittografia robusta, WireGuard offre ottimizzazioni per i sistemi mobili e l’Internet delle cose (IoT). Il software è concesso in licenza come software libero con la licenza GPLv2 ed è disponibile in modalità multipiattaforma. WireGuard è scritto nei linguaggi C e Go e funziona su Windows, macOS, BSD, iOS e Android.
Dal 2020 WireGuard è integrato direttamente nel kernel Linux. Poiché Linux viene eseguito come sistema operativo standard su miliardi di dispositivi connessi in tutto il mondo, WireGuard può essere utilizzato praticamente ovunque. Grazie alla configurazione semplice e al basso impatto sul sistema, viene utilizzato sempre più spesso da servizi VPN e aziende.
Quali funzionalità offre WireGuard?
Una caratteristica centrale di WireGuard è il cosiddetto cryptokey routing. In questo caso, al codice pubblico di un partner di connessione vengono associati gli intervalli di indirizzi IP consentiti all’interno di un tunnel. I pacchetti in entrata di un partner di connessione vengono decifrati grazie alla chiave pubblica. Un pacchetto in entrata, dopo la decifratura, viene consegnato solo se proviene da un indirizzo IP corrispondente alla chiave. In caso contrario, viene scartato.
A differenza dei protocolli VPN più datati come IPsec e OpenVPN, WireGuard utilizza un set fisso di primitive crittografiche moderne, senza negoziazione. Mentre nei protocolli consolidati le basi crittografiche vengono definite durante l’handshake, WireGuard si affida a una combinazione di algoritmi fissa e con cronologia delle versioni. Se in futuro una base crittografica dovesse essere considerata insicura, verrà rilasciata una nuova versione del protocollo, che includerà una selezione di algoritmi aggiornata e sicura.
Il protocollo utilizza algoritmi di crittografia moderni e altamente sicuri, tra cui:
- Noise Protocol Framework per i processi di handshake e scambio di chiavi
- Curve25519 per lo scambio di chiavi sicuro
- ChaCha20 per la crittografia simmetrica
- Poly1305 per l’autenticazione
- BLAKE2 per una funzione veloce di hash crittografica
- SipHash24 per la generazione di hash crittograficamente sicuri
- HKDF per il processo sicuro di derivazione delle chiavi
Quali sono i vantaggi di WireGuard?
WireGuard offre molti vantaggi, che lo rendono una scelta privilegiata per le moderne connessioni VPN. Di seguito una panoramica dei principali vantaggi:
- Base di codice snella: WireGuard ha una base di codice significativamente più piccola, con circa 4.000 righe di codice rispetto alle circa 100.000–600.000 di OpenVPN o IPsec. Questa riduzione rende il protocollo più sicuro, perché i bug possono essere individuati più facilmente, e meno esigente in termini di risorse, poiché richiede meno potenza di calcolo.
- Prestazioni più elevate: grazie alla minore complessità, WireGuard offre una velocità di trasmissione più alta e una latenza inferiore rispetto a molti protocolli concorrenti. Ciò lo rende particolarmente adatto ad applicazioni che richiedono una connessione rapida e stabile, come streaming, giochi online e videoconferenze.
- Efficienza energetica: WireGuard si attiva solo quando vengono effettivamente trasmessi dei dati. Questo risparmio energetico è particolarmente vantaggioso per i dispositivi mobili, poiché prolunga la durata della batteria.
- Supporto del roaming: WireGuard supporta il passaggio senza interruzioni tra Wi-Fi e reti mobili, senza che la connessione venga persa. Se la connessione dovesse comunque interrompersi, la ristabilisce di solito più rapidamente rispetto ad altri protocolli VPN.
- Configurazione semplice: rispetto ad altri protocolli VPN, WireGuard non richiede l’impostazione manuale di una moltitudine di opzioni crittografiche. Utilizza una configurazione predefinita, accessibile sia agli utenti esperti sia a chi è agli inizi.
Come funziona WireGuard?
WireGuard è un protocollo VPN peer-to-peer decentralizzato che non richiede alcun server centrale. Al contrario, è possibile creare direttamente un tunnel tra due dispositivi (“peer”). Un “server WireGuard” in questo caso è semplicemente un dispositivo che contiene i dati di configurazione per più peer.
La creazione della connessione funziona in modo simile a Secure Shell (SSH): i peer generano coppie di chiavi pubbliche e private, le scambiano e le utilizzano per l’autenticazione e la crittografia dei dati trasmessi. La crittografia si basa su metodi crittografici moderni che garantiscono un livello di sicurezza elevato.
Oltre alla creazione delle chiavi crittografiche, sui peer devono essere configurate impostazioni di rete e di routing (vedi la nostra guida più avanti). Questo include la configurazione degli intervalli di indirizzi IP consentiti, che vengono associati alle chiavi pubbliche. Solo i pacchetti provenienti da questi indirizzi IP vengono accettati.
L’invio dei dati avviene tramite lo User Datagram Protocol (UDP), che è preferito per la sua velocità ed efficienza. Non richiede un’ampia correzione degli errori come il Transmission Control Protocol (TCP), il che consente una trasmissione più rapida.
La configurazione avviene di norma tramite lo strumento da riga di comando di WireGuard e i comuni strumenti di rete. Per gli utenti meno esperti, i servizi VPN commerciali offrono app intuitive che consentono una configurazione semplificata.
Primi passi con WireGuard
In linea di massima, WireGuard può essere installato e configurato su un sistema Linux senza grandi sforzi. Sulle versioni più recenti di Ubuntu (a partire dalla 20.04 LTS) il protocollo VPN è già integrato come modulo del kernel, quindi non è necessaria l’installazione aggiuntiva di repository Personal Package Archive (PPA). Esegui semplicemente il seguente comando:
sudo apt install wireguardbash
Installare WireGuard sul proprio sistema
L’installazione di WireGuard sul tuo sistema è semplice e può essere eseguita con pochi comandi.
Per Ubuntu 20.04 LTS o versioni successive:
WireGuard è già integrato come modulo del kernel, quindi non sono necessari repository PPA aggiuntivi. Esegui semplicemente il seguente comando:
sudo apt update
sudo apt install wireguardbashPer le versioni precedenti di Ubuntu:
Qui devi aggiungere il PPA di WireGuard per poter effettuare l’installazione:
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguardbashGenerare le chiavi WireGuard
Come molti altri moderni protocolli VPN, anche WireGuard si basa sull’uso di chiavi crittografiche per stabilire connessioni sicure tra peer. Ogni peer ha bisogno di una coppia di chiavi, una privata e una pubblica. La chiave privata resta sempre segreta, mentre la chiave pubblica viene condivisa con gli altri peer.
Esegui i seguenti comandi sulla riga di comando per generare una chiave privata e una chiave pubblica WireGuard:
# Creare la directory per le chiavi e impostare i permessi
sudo mkdir -p /etc/wireguard/keys
sudo chmod 700 /etc/wireguard/keys
cd /etc/wireguard/keys
# Impostare umask in modo che solo l’utente root possa leggere/scrivere
umask 077
# Generare la chiave privata e salvarla in un file
wg genkey | sudo tee privatekey | wg pubkey | sudo tee publickey
# Verificare l’output delle chiavi generate
sudo cat privatekey
sudo cat publickeybashLe chiavi devono essere generate e archiviate in un ambiente sicuro. I comandi sopra indicati sono adatti a scopi di test. In un ambiente di produzione è necessario adottare ulteriori misure di sicurezza, come l’uso di directory sicure e controlli di accesso.
Configurare le impostazioni di rete per WireGuard
Dopo aver generato le chiavi crittografiche, su ogni peer è necessario configurare impostazioni di rete e di routing specifiche. Questa configurazione è fondamentale per consentire la comunicazione sicura tra i peer.
In sostanza viene creato un file di configurazione che contiene, tra le altre cose, le seguenti informazioni:
- Chiavi private e pubbliche dei peer
- Indirizzi IP consentiti (gli intervalli di IP con cui il peer è autorizzato a comunicare)
- Indirizzi dei peer, associati alle rispettive chiavi pubbliche
Un esempio della configurazione di base di una connessione WireGuard potrebbe essere il seguente:
[Interface]
# IP VPN interna del server
Address = 10.0.0.1/24
# Chiave privata (del server)
PrivateKey = <SERVER_PRIVATE_KEY>
# Porta UDP su cui WireGuard accetta le connessioni
ListenPort = 51820
# Client peer
[Peer]
# Chiave pubblica del client
PublicKey = <CLIENT_PUBLIC_KEY>
# IP VPN interna assegnata al client
AllowedIPs = 10.0.0.2/32txtTestare la connessione e attivare WireGuard
Dopo aver installato e configurato WireGuard sul tuo sistema, è il momento di testare la connessione e attivare l’interfaccia di rete. Puoi farlo da riga di comando eseguendo i seguenti comandi:
1. Attivare l’interfaccia di rete
Per prima cosa devi attivare l’interfaccia WireGuard che hai appena configurato:
sudo systemctl enable --now wg-quick@wg0bashQuesto comando attiva l’interfaccia WireGuard (wg0) che hai creato in precedenza. Se il comando viene eseguito correttamente, la connessione dovrebbe essere pronta per inviare dati.
2. Testare la connessione
Per verificare che la connessione funzioni, puoi usare il comando ping per controllare se il dispositivo remoto è raggiungibile. Esempio:
ping 192.168.1.2bashSostituisci l’indirizzo IP con quello del peer remoto a cui sei connesso. Se il ping ha esito positivo, significa che la connessione VPN funziona.
3. Risoluzione dei problemi
Se la connessione non funziona come previsto, verifica i seguenti punti:
- Assicurati che gli indirizzi IP siano configurati correttamente.
- Verifica che le chiavi pubbliche e private siano state scambiate correttamente tra loro.
- Assicurati che il firewall su entrambi i dispositivi sia configurato in modo da consentire il traffico WireGuard (di norma sulla porta 51820).
Se i problemi persistono, puoi anche riavviare il servizio WireGuard:
sudo systemctl restart wg-quick@wg0bash
