Marvin Pascale

[B.Log]

27 Marzo 2024

Wireguard

Creare VPN In un’epoca dove la sicurezza digitale è più importante che mai, le VPN (Virtual Private Networks) giocano un ruolo cruciale nella protezione della nostra privacy online. Tra le varie soluzioni disponibili, WireGuard si distingue per la sua semplicità, efficienza e facilità di configurazione, guadagnandosi rapidamente la reputazione di essere il futuro delle VPN. In questo articolo, esploreremo cos’è WireGuard, come funziona, e perché potrebbe essere la scelta giusta per voi.

Cos’è WireGuard?

WireGuard è una soluzione moderna per le reti private virtuali (VPN), che si distingue per la sua semplicità e efficienza. Al cuore di WireGuard c’è un approccio rivoluzionario alla sicurezza e alla configurazione delle VPN, che lo rende un’alternativa interessante rispetto a soluzioni più consolidate come OpenVPN e IPSec. Ma cosa lo rende così speciale? E quali dettagli tecnici dovreste conoscere per apprezzarlo appieno?

Una nuova filosofia per le VPN

  1. Design minimalista: WireGuard si basa su un principio di minimalismo. Il suo codice sorgente comprende circa 4.000 righe, contro le decine o centinaia di migliaia di righe dei suoi concorrenti. Questa brevità non solo facilita le revisioni del codice per individuare vulnerabilità, ma contribuisce anche a una maggiore stabilità e a prestazioni superiori.

  2. Crittografia moderna: Uno degli aspetti più notevoli di WireGuard è l’utilizzo di algoritmi crittografici all’avanguardia, come Curve25519 per lo scambio di chiavi, ChaCha20 per la cifratura, Poly1305 per l’autenticazione dei messaggi, BLAKE2s per l’hashing e SipHash per la protezione dalle collisioni nelle tabelle hash. Questa scelta di algoritmi non solo garantisce un’elevata sicurezza ma anche un’ottima velocità e compatibilità con dispositivi a bassa potenza.

  3. Integrazione nel kernel: A differenza di altre VPN che operano nello spazio utente, WireGuard è stato progettato per essere integrato direttamente nel kernel di Linux, garantendo prestazioni superiori e una migliore gestione delle risorse. Questa integrazione nel kernel facilita una comunicazione più rapida e diretta tra i dispositivi, riducendo la latenza e aumentando la velocità di trasmissione dei dati.

Funzionamento di WireGuard

  1. Configurazione semplice: La configurazione di WireGuard si basa sul concetto di chiavi pubbliche e private, simile a SSH. Ogni client e server nella rete WireGuard genera la propria coppia di chiavi. La chiave pubblica viene condivisa con gli altri nodi, mentre la chiave privata rimane segreta. Questo semplifica notevolmente il processo di configurazione rispetto a VPN tradizionali, che spesso richiedono complessi scambi di certificati e configurazioni di sicurezza.

  2. Gestione delle connessioni: WireGuard utilizza un modello di connessione stateless, il che significa che non mantiene attivamente lo stato delle connessioni individuali. Questo approccio riduce la necessità di gestire complesse sessioni di connessione, rendendo il sistema più leggero e meno suscettibile a determinati tipi di attacchi informatici.

  3. Prestazioni e affidabilità: Grazie alla sua architettura ottimizzata e all’integrazione nel kernel, WireGuard offre prestazioni eccezionali, con latenze ridotte e throughput elevato. Inoltre, il suo design semplice contribuisce a una maggiore affidabilità, riducendo la probabilità di bug e vulnerabilità di sicurezza.

Come configurare WireGuard

La configurazione di WireGuard può essere suddivisa in pochi passaggi semplici:

  1. Installazione: prima di tutto, dovete installare WireGuard sui vostri dispositivi. La maggior parte delle distribuzioni Linux offre WireGuard direttamente dai loro repository ufficiali.

  2. Configurazione delle chiavi: dovrete generare una coppia di chiavi pubblica e privata per ogni nodo della vostra VPN. Questo può essere fatto con un semplice comando WireGuard.

  3. Configurazione del server e del client: dopo aver generato le chiavi, dovrete configurare i file di configurazione sia sul server che sui clienti, indicando le chiavi pubbliche corrispondenti e le configurazioni di rete.

  4. Avvio della connessione: con i file di configurazione pronti, potete avviare WireGuard sui vostri dispositivi e testare la connessione.

Mani in pasta

Vediamo insieme i passaggi per installare e configurare un server VPN utilizzando WireGuard.

Dati necessari per l’installazione:

  1. ip pubblico del server;

  2. porta in ascolto (es: 51820);

  3. interfaccia VPN (es: wg0).

Prenderemo come esempio ina Red Hat based (es: Almalinux).

# dnf install wireguard-tools -y

# mkdir -p /etc/wireguard/client-configs

# wg genkey | tee /etc/wireguard/server_private_key | wg pubkey > /etc/wireguard/server_public_key

nb: salviamo in un posto comodo la coppia di chiavi perché ci serviranno più avanti.

ora editiamo il file /etc/wireguard/wg0.conf

[Interface]
Address = 10.10.10.1/24
ListenPort = 51820
PrivateKey = [CHIAVE_PRIVATA_SERVER]

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Attiviamo il forward del traffico ipv4

# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# sysctl -p

attiviamo e abilitiamo la nostra VPN

# wg-quick up wg0
# systemctl enable wg-quick@wg0

Da adesso in poi ci occuperemo delle configurazioni per un client.

Generiamo la coppia di chiavi e il file di configurazione

wg genkey | tee /etc/wireguard/client-configs/client_private_key | wg pubkey > /etc/wireguard/client-configs/client_public_key

editiamo il file di configurazione del client /etc/wireguard/client-configs/client_wg0.conf

[Interface]
PrivateKey = [CHIAVE_PRIVATA_CLIENT]
Address = 10.10.10.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = [CHIAVE_PUBBLICA_SERVER]
Endpoint = [IP_PUBBLICO_SERVER]:51820
AllowedIPs = 0.0.0.0/0

aggiungiamo in coda al file /etc/wireguard/wg0.conf i dati del peer

...
[Peer]
PublicKey = [CHIAVE_PUBBLICA_CLIENT]
AllowedIPs = 10.10.10.2/32

riavviamo il servizio

# wg-quick down wg0 && wg-quick up wg0

Arrivati a questo punto possiamo copiare il file di configurazione (/etc/wireguard/client-configs/client_wg0.conf) su un client oppure possiamo generare un QR con il comando qrencode

# dnf install -y epel-release && dnf install -y qrencode

# qrencode -t ansiutf8 < /etc/wireguard/client-configs/client_wg0.conf

e importarlo Import Tunnel

Non ci resta che avviare la connessione e goderci la nostra nuova VPN fiammante.

Su un qualsiasi client possiamo utilizzare il file /etc/wireguard/client-configs/client_wg0.conf.

Prenderemo ad esempio un client Debian based. Installeremo il software necessario, configureremo il tunnel e avvieremo la connessione.

# apt install wireguard-tools

creiamo ora il file vim /etc/wireguard/wg0.conf

[Interface]
PrivateKey = [CHIAVE_PRIVATA_CLIENT]
Address = 10.10.10.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = [CHIAVE_PUBBLICA_SERVER]
Endpoint = [IP_PUBBLICO_SERVER]:51820
AllowedIPs = 0.0.0.0/0

avviamo la nostra VPN

# wg-quick up wg0

Per testare il corretto istradamento possiamo ottenere l’ip pubblico con il quale ci presentiamo su internet

# curl -s https://api.ipify.org

Conclusione

WireGuard rappresenta un’evoluzione significativa nel mondo delle VPN, offrendo un mix impressionante di semplicità, sicurezza e prestazioni. Se cercate una soluzione VPN che sia allo stesso tempo potente ed easy-to-use, WireGuard potrebbe essere esattamente ciò che fa per voi. Con il suo design minimalista e le sue eccellenti prestazioni, WireGuard è destinato a giocare un ruolo importante nel futuro della sicurezza online.

Ricordate, tuttavia, che la sicurezza online è un campo in continua evoluzione. È importante rimanere informati sulle ultime novità e pratiche migliori per proteggere la vostra privacy e sicurezza digitale. WireGuard è sicuramente uno strumento potente nel vostro arsenale, ma come per ogni strumento, la sua efficacia dipenderà da come lo utilizzate.


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: