Introduzione

WireGuard è una moderna tecnologia VPN (Virtual Private Network) con crittografia all'avanguardia. Rispetto ad altre soluzioni simili, come IPsec e OpenVPN, WireGuard è più veloce, più facile da configurare e più performante. È multipiattaforma e può essere eseguito praticamente ovunque, inclusi Linux, Windows, Android e macOS. Wireguard è una VPN peer-to-peer; non utilizza il modello client-server. A seconda della sua configurazione, un peer può fungere da server o client tradizionale.

WireGuard funziona creando un'interfaccia di rete su ciascun dispositivo peer che funge da tunnel. I peer si autenticano scambiandosi e convalidando le chiavi pubbliche, imitando il modello SSH. Le chiavi pubbliche sono mappate con un elenco di indirizzi IP consentiti nel tunnel. Il traffico VPN è incapsulato in UDP.

In questo tutorial, installeremo WireGuard su una macchina Ubuntu 18.04 che fungerà da server VPN. Ti mostreremo anche come configurare WireGuard come client. Il traffico del client verrà instradato attraverso il server Ubuntu 18.04.

Questa configurazione può essere utilizzata come protezione dagli attacchi di Man in the Middle, navigando sul Web in modo anonimo, ignorando i contenuti con restrizioni geografiche o consentendo ai colleghi di connettersi in modo sicuro alla rete aziendale quando lavorano in remoto.

Prerequisiti

Avrai bisogno di un server Ubuntu 18.04 a cui puoi accedere come root o account con privilegi sudo.

Installare il server WireGuard

In questa sezione, installeremo WireGuard sul computer Ubuntu e lo configureremo per fungere da server. Configureremo anche il sistema per instradare il traffico dei client attraverso di esso.

Installare WireGuard su Ubuntu 18.04

WireGuard mantiene il proprio repository APT da cui installeremo il pacchetto e lo aggiorneremo quando sarà disponibile una nuova versione.

Aggiorna l'elenco dei pacchetti e installa gli strumenti necessari per gestire i tuoi repository di sistema. È probabile che tu abbia già il pacchetto sulla tua macchina:

sudo apt update
sudo apt install software-properties-common

Aggiungi il repository WireGuard:

sudo add-apt-repository ppa:wireguard/wireguard

Quando richiesto, premere Enter per continuare. add-apt-repository aggiornerà anche automaticamente l'elenco dei pacchetti.

Installa il pacchetto WireGuard:

sudo apt install wireguard

Aggiornare o installare i Kernel Headers con il seguente comando:

sudo apt install linux-headers-$(uname -r)

WireGuard funziona come un modulo del kernel, che viene compilato come un modulo DKMS. In caso di successo, vedrai il seguente output:

wireguard:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.15.0-88-generic/updates/dkms/

depmod...

DKMS: install completed.

Quando aggiorni il kernel, il modulo WireGuard verrà compilato sul nuovo kernel.

Configurare WireGuard

WireGuard viene fornito con due strumenti da riga di comando denominati wg e wg-quick che consentono di configurare e gestire le interfacce WireGuard.

Eseguire il comando seguente per generare le chiavi pubbliche e private:

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

I file verranno generati nella /etc/wireguard directory. È possibile visualizzare i file con cat o less. La chiave privata non dovrebbe mai essere condivisa con nessuno.

Ora che vengono generate le chiavi, dovremo configurare il dispositivo tunnel che instraderà il traffico VPN.

Il dispositivo può essere impostato dalla riga di comando utilizzando ip e wg o creando il file di configurazione con un editor di testo.

Creare un nuovo file denominato wg0.conf e aggiungere il seguente contenuto:

sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
/etc/wireguard/wg0.conf

L'interfaccia può essere nominata come qualsiasi, tuttavia si consiglia di usare qualcosa come include wg0 o wgvpn0. Le impostazioni nella sezione dell'interfaccia hanno il seguente significato:

  • Address: un elenco separato da virgole di indirizzi IP v4 o v6 per l'interfaccia wg0. Utilizzare gli IP di un intervallo riservato alle reti private (10.0.0.0/8, 172.16.0.0/12 o 192.168.0.0/16).
  • ListenPort - la porta su cui WireGuard accetterà le connessioni in entrata.
  • PrivateKey - una chiave privata generata dal comando wg genkey. (Per vedere il contenuto del file esegui:sudo cat /etc/wireguard/privatekey)
  • SaveConfig: se impostato su true, lo stato corrente dell'interfaccia viene salvato nel file di configurazione all'arresto.
  • PostUp - comando o script che viene eseguito prima di aprire l'interfaccia. In questo esempio, stiamo usando iptables per abilitare il mascheramento. Ciò consentirà al traffico di uscire dal server, offrendo ai client VPN l'accesso a Internet. Assicurati di sostituire ens3 dopo -A POSTROUTING per abbinare il nome della tua interfaccia di rete pubblica. Puoi facilmente trovare l'interfaccia eseguendo il seguente comando:
ip -o -4 route show to default | awk '{print $5}'
  • PostDown - comando o script che viene eseguito prima di disattivare l'interfaccia. Le regole di iptables verranno rimosse quando l'interfaccia non è attiva.

I file wg0.conf e privatekey non dovrebbero essere leggibili dagli utenti normali. Utilizzare chmod per impostare le autorizzazioni su 600:

sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}

Una volta fatto, apri l'interfaccia wg0 usando gli attributi specificati nel file di configurazione:

sudo wg-quick up wg0

Il comando produrrà un output simile al seguente:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

Esegui wg show wg0 per verificare lo stato e la configurazione dell'interfaccia:

sudo wg show wg0
interface: wg0
  public key: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
  private key: (hidden)
  listening port: 51820

È inoltre possibile eseguire ip a show wg0 per verificare lo stato dell'interfaccia:

ip a show wg0
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.0.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever

Per portare l'interfaccia WireGuard all'avvio, eseguire il comando seguente:

sudo systemctl enable [email protected]

Rete di server e configurazione del firewall

Perché NAT funzioni, è necessario abilitare l'inoltro IP. Apri il file /etc/sysctl.conf e aggiungi o decommenta la seguente riga:

sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1

Salvare il file e applicare la modifica:

sudo sysctl -p
net.ipv4.ip_forward = 1

Se si utilizza UFW per gestire il firewall, è necessario aprire il traffico UDP sulla porta 51820:

sudo ufw allow 51820/udp

Questo è tutto. Il peer di Ubuntu che fungerà da server è stato impostato.

Installare il client Linux e macOS

Le istruzioni di installazione per tutte le piattaforme supportate sono disponibili su https://wireguard.com/install/. Sui sistemi Linux, è possibile installare il pacchetto utilizzando il gestore pacchetti di distribuzione e su macOS con brew. Una volta installato WireGuard, seguire i passaggi seguenti per configurare il dispositivo client.

Il processo per configurare un client Linux e macOS è praticamente lo stesso che hai fatto per il server. Inizia generando le chiavi pubbliche e private:

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

Creare il file wg0.conf e aggiungere i seguenti contenuti:

sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

Le impostazioni nella sezione dell'interfaccia hanno lo stesso significato di quando si configura il server:

  • Indirizzo: un elenco separato da virgole di indirizzi IP v4 o v6 per l'interfaccia wg0.
  • PrivateKey: per visualizzare il contenuto del file sul computer client in esecuzione: sudo cat /etc/wireguard/privatekey.

La sezione peer contiene i seguenti campi:

  • PublicKey: una chiave pubblica del peer a cui si desidera connettersi. (Il contenuto del file /etc/wireguard/publickey del server).
  • Endpoint: un IP o un nome host del peer a cui si desidera connettersi seguito da due punti, quindi un numero di porta su cui il peer remoto ascolta.
  • AllowedIPs: un elenco separato da virgole di indirizzi IP v4 o v6 da cui è consentito il traffico in entrata per il peer e al quale viene indirizzato il traffico in uscita per questo peer. Stiamo usando 0.0.0.0/0 perché stiamo instradando il traffico e vogliamo che il peer del server invii pacchetti con qualsiasi IP di origine.

Se è necessario configurare client aggiuntivi, ripetere gli stessi passaggi utilizzando un indirizzo IP privato diverso.

Installare il client Windows

Scarica e installa il pacchetto msi di Windows dal sito Web WireGuard.

Una volta installato, apri l'applicazione WireGuard e fai clic su “Add Tunnel” -> “Add empty tunnel…”.

Una coppia di chiavi pubbliche viene automaticamente creata e visualizzata sullo schermo.

Immettere un nome per il tunnel e modificare la configurazione come segue:

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24


[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_IP_ADDRESS:51820
AllowedIPs = 0.0.0.0/0

Nella sezione dell'interfaccia aggiungere una nuova riga per definire l'indirizzo del tunnel client.

Nella sezione peer aggiungere i seguenti campi:

  • PublicKey - la chiave pubblica del server Ubuntu (file /etc/wireguard/publickey).
  • Endpoint: l'indirizzo IP del server Ubuntu seguito da due punti e porta WireGuard (51820).
  • AllowedIPs (IP consentiti) - 0.0.0.0/0

Una volta fatto, fare clic sul pulsante "Salva".

Aggiungere il peer client al server

L'ultimo passaggio è aggiungere la chiave pubblica del client e l'indirizzo IP al server:

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

Assicurati di cambiare il parametro CLIENT_PUBLIC_KEY con la chiave pubblica che hai generato sul computer client (sudo cat /etc/wireguard/publickey) e regola l'indirizzo IP del client se è diverso. Gli utenti Windows possono copiare la chiave pubblica dall'applicazione WireGuard.

Una volta terminato, torna al computer client e visualizza l'interfaccia di tunneling.

Client Linux e macOS

Sui client Linux eseguire il comando seguente per visualizzare l'interfaccia:

sudo wg-quick up wg0

Ora dovresti essere connesso al server Ubuntu e il traffico dal tuo computer client dovrebbe essere instradato attraverso di esso. Puoi verificare la connessione con:

sudo wg
interface: wg0
  public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg=
  private key: (hidden)
  listening port: 48052
  fwmark: 0xca6c

peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
  endpoint: XXX.XXX.XXX.XXX:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 1 minute, 22 seconds ago
  transfer: 58.43 KiB received, 70.82 KiB sent

Puoi anche aprire il browser, digitare "what is my ip" e dovresti vedere l'indirizzo IP del tuo server Ubuntu.

Per interrompere il tunneling, chiudi l'interfaccia wg0 con il seguente comando:

sudo wg-quick down wg0

Client Windows

Se hai installato WireGuard su Windows, fai clic sul pulsante "Attiva". Una volta collegati i peer, lo stato del tunnel cambierà in Attivo.

Conclusione

Ti abbiamo mostrato come installare WireGuard su una macchina Ubuntu 18.04 e configurarlo come server VPN. Questa configurazione ti consente di navigare sul Web in modo anonimo mantenendo privati ​​i tuoi dati sul traffico.