Menu Chiudi

Configurare WireGuard VPN con Linux

WireGuard Setup Server & Client Linux

Configurare WireGuard per creare tunnel criptati è un task estremamente semplice ed ormai alla portata di tutti coloro che hanno anche solo un minimo di dimestichezza con Linux.

Abbiamo già introdotto, in un precedente post, le caratteristiche principali di WireGuard, di quanto sia sicuro e veloce, nel confronto con altri software per VPN.

Vogliamo qui addentrarci ad illustrare in dettaglio come configurare un server VPN con Wireguard in un Linux ed un Client anch’esso Linux per esplorare quanto può essere semplice installare, configurare ed attivare un canale VPN tra due punti arbitrari di una rete anche complessa.

Note su questo tutorial per installare WireGuard

Prima di iniziare sono opportune alcune informazioni di carattere generale, per meglio chiarire il contesto

  • Il Client è un laptop Acer© con la distribuzione GNU Linux Ubuntu Desktop 22.04 LTS (x64)
  • Il server è un bare-metal HP (2 ethernet) con una distribuzione Debian 10 (x64)
  • L’interfaccia IP per WireGuard del Server è configurata con l’indirizzo IP 172.16.10.1/24
  • L’interfaccia IP per WireGuard del Client è configurata con l’indirizzo IP 172.16.10.2/24

Al fine di descrivere al meglio l’intero contesto nel quale dimostrare l’utilizzo di WireGuard per instaurare una VPN tra Client e Server, discusso in questo tutorial, l’immagine seguente sarà sicuramente di grande aiuto.

VPN WireGuard con Ubuntu in rete di prova
Tunnel con WireGuard in una rete di test

L’immagine qui sopra descrive un’architettura di rete semplificata espressamente realizzata in laboratorio per lo scopo questo tutorial. Tuttavia possiamo facilmente immaginare che Client e Server si trovino collegati a due distinti punti della rete internet; per lo scopo di questo tutorial, il risultato finale non cambia.

Installare e configurare WireGuard Server

Passo 1 – Aggiornamento del sistema

Come di consueto, per installare il pacchetto WireGuard nel server, è opportuno prima di tutto aggiornare il sistema.

sudo apt update
apt upgrade

Passo 2 – Preparazione per installare e configurare WireGuard

Avendo utilizzato Ubuntu 20.04 per il server, nel repository ufficiale di questa versione non è ancora disponibile i pacchetti per WireGuard. È quindi indispensabile impostare il repository corretto.

Per fare questo, bisognerà creare il file /etc/apt/sources.list.d/buster-backports.list, utilizzando vi o nano ed aggiungere il seguente testo nel contenuto:

deb http://deb.debian.org/debian buster-backports main contrib non-free

Quindi eseguire nuovamente un update:

sudo apt update

Passo 3 – Installare i pacchetti di prima di installare WireGuard

Come per l’installazione di qualsiasi pacchetto, si dovrà utilizzare il comando apt, come segue

sudo apt install wireguard

Passo 4 – Configurare WireGuard Server

Prima di tutto dovremo creare le chiavi pubblica, privata e pre-shared (PSK) per il server, che saranno utilizzate per la crittografia di WireGuard. Queste chiavi vanno create nella directory /etc/wireguard/.

Nota bene che i permessi per la chiave pubblica, la chiave privata e la chiave pre-shared devono necessariamente essere impostati a 0600. Diversamente, queste non potranno essere utilizzare da WireGuard, con l’ovvio risultato che il tunnel criptato non verrà creato.

Leggi anche:   WireGuard Client: Tunnel criptati con Windows

Altro suggerimento importante: è bene utilizzare l’utente root per fare queste operazioni ed inoltre essere posizionato direttamente all’interno della directory /etc/wireguard/.

Generazione delle chiavi

Ovviamente, anche il Client avrà bisogno della sua chiave privata e della sua chiave pubblica

sudo -i
cd /etc/wireguard/

Ora si possono finalmente generale le chiavi con la sequenza di comandi riportata qui di seguito:

UMASK_ORG=$(umask)                      # Salvo la 'umask' corrente
umask 077 # Set proper umask            # Imposto la nuov 'umask'
wg genkey > privatekey                  # Creo la chiave privata
wg pubkey < privatekey > publickey      # creo la chiave pubblica
wg genpsk > presharedkey                # creo la PSK
umask ${UMASK_ORG}                      # Ripristino la 'umask' originale

Verifica della corretta generazione delle chiavi:

ls -l privatekey publickey presharedkey
cat privatekey
cat publickey
cat presharedkey

Configurare WireGuard su interfaccia wg0

La configurazione dell’interfaccia di wg0 di WireGuard si esegue editando con vi o nano il file /etc/wireguard/wg0.conf, al quale si può aggiungere lo snippet di esempio riportato qui sotto:

## Set Up WireGuard VPN Server creando/editando il file /etc/wireguard/wg0.conf

[Interface]
## L'indirizzo IP dell'intervaccia della VPM nel Server
Address = 172.170.10.1/24

## La porta UDP dove il server sarà in ascolto
ListenPort = 51194

## Questa è la chiave privata del server (i.e. /etc/wireguard/privatekey)
PrivateKey = uLNUpKqMckMksej0wzly6D51G0C4GUWxAzjIZhGOXXI=

## Salva ed aggiorna questo file di configurazione quando di aggiunge un client
SaveConfig = true

[Peer]
## VPN client's public key (i.e. client /etc/wireguard/publickey
PublicKey = 4H2TBgJQ1oJDx0BBhe5dl8N4+Ut4zJTLEwO8oq006yM=
## VPN client's Preshared key PSK (i.e. client /etc/wireguard/presharedkey)
PresharedKey = fVt2EHGOTHZqyQhy6GRU7nve6HZhafZTKiw1ox4R5Ck=
AllowedIPs = 172.170.10.2/32
Endpoint = 192.168.2.6:28431

Passo 5 – Impostazioni del Firewall

Questo passo è opzionale, e va eseguito solo se è stato attivato ufw; ovvero, il Firewall di Ubuntu.

sudo ufw allow 51194/udp

Notare che è sempre consigliato l’utilizzo del firewall di Ubuntu in quanto ciò aumenta non di poco la sicurezza del server, esponendo esclusivamente i servizi strettamente indispensabili.

Passo 6 – Abilita ed avvia il servizio WireGuard

Ora che WireGuard è stato configurato, bisogna abilitare l’avvio automatico del servizio ad ogni avvio del sistema ed eventualmente avviarlo manualmente al momento.

Inizialmente abilito l’avvio automatico del servizio

sudo systemctl enable wg-quick@wg0

Avvio il servizio manualmente, senza riavviare il sistema

sudo systemctl start wg-quick@wg0

Controllo che il servizio sia correttamente in esecuzione

sudo systemctl status wg-quick@wg0

Verifico inoltre che l’interfaccia di WireGuard, che abbiamo chiamato wg0 sia correttamente istanziata

sudo wg show
sudo ip a show wg0

Installare e Configurare WireGuard Client

Passo 7 – Aggiornamento del sistema Client

Passaggio identico a quanto già detto per l’installazione del server. Anche più semplice, in quanto i pacchetti per WireGuard sono già compresi nel repository standard di Ubuntu 22.04 LTS, quindi possiamo procedere direttamente con l’installazione:

sudo apt update
apt upgrade
sudo apt install -y wireguard

Passo 8 – Configurare WireGuard Client

La configurazione del Client è molto semplificata, tuttavia alcuni Step sono simili alla configurazione del server:

Leggi anche:   Come configurare SSH per la sicurezza

Generazione delle Chiavi

Anche per il Client è necessario generare le chiavi per la crittografia, anche se in questo caso dovremo generare solo la chiave privata e la chiave pubblica. La chiave pre-shared (PSK – Pre Shared Key) sarà quella generata durante la configurazione del, server per questo specifico Client (Peer).

Quindi, in questo caso, la procedura è decisamente semplificata, anche se valgono le stesse note e gli stessi suggerimenti adottati nella configurazione del server (utente root, permessi dei file, eccetera):

sudo -i
cd /etc/wireguard/
umask 077 # Set proper umask       # Imposto la nuova 'umask'
wg genkey > privatekey             # Creo la chiave privata
wg pubkey < privatekey > publickey # creo la chiave pubblica
exit

Configurare WireGuard VPN su interfaccia wg0 del Client

Come per la configurazione del Server, la configurazione dell’interfaccia di wg0 di WireGuard del client si esegue editando con vi o nano il file /etc/wireguard/wg0.conf, al quale si può aggiungere lo snippet di esempio riportato qui sotto:

[Interface]
## Questa è la chiave privata del Desktop/client
PrivateKey = eOsvqw5QxcbDiz9mIThgFIgVbMs2RRedooAwk2ft+nQ=
## Questo è l'indirizzo IP del Desktop/client nella VPN
Address = 172.170.10.2/24
[Peer]
## Chiave pubblica del Server (comunicata dal NetAdmin)
PublicKey = bfsta5fCD8MmUeidCMXZKvEMvVB6h5312tzVwRPinEU=
## Chiave pre-shared del Server
PresharedKey = fVt2EHGOTHZqyQhy6GRU7nve6HZhafZTKiw1ox4R5Ck=
## set Access Control List (ACL)
AllowedIPs = 172.170.10.0/24,10.10.1.0/24
## L'indirizzo IPv4/IPv6 e la porta UDP del server che chiude la VPN
Endpoint = 192.168.2.6:51194
## Keep Alive della connessione (in secondi)
PersistentKeepalive = 20

Passo 9 – Avvio del Servizio VPN del Client

Diversamente da come abbiamo abilitato i servizi nel server per l’avio automatico al boot del sistema, per il Client è necessario fare una distinzione.

Potremmo non volere che si attivi una istanza di VPN dal nostro laptop ogni volta che questo viene acceso, ma dovremmo poter comunque attivare la VPN ogni qualvolta ne avremmo bisogno. Quindi abbiamo a disposizione 2 diversi modi di attivare e disattivare la VPN di WireGuard ed entrambi possono essere eseguiti a riga di comando, da una finestra terminale.

Per attivare la VPN del Client

Da una finestra terminale digitare il seguente comando:

wg-quick up wg0

oppure

sudo systemctl start wg-quick@wg0

Per disattivare la VPN del Client

Da una finestra terminale digitare il seguente comando:

wg-quick down wg0

oppure

sudo systemctl stop wg-quick@wg0

Test e verifiche finali

A conclusione della fase di configurazione di Server e Client, possiamo passare alla fase di test per verificare il corretto funzionamento della VPN tra il Client ed il server appena configurati. Per l’utilizzo della VPN WireGuard da Windows, puoi consultare l’articolo dedicato ai Tunnel criptati con Windows.

Leggi anche:   Creare una chiavetta USB avviabile con Linux

Nel Client Ubuntu 22.04 LTS (192.168.122.160) è possibile innanzi tutto verificare lo stato del tunnel attualmente istanziato, con il seguente comando:

sudo wg show

Che restituirà un output molto simile a quello qui di seguito:

interface: wg0
  public key: 4H2TBgJQ1oJDx0BBhe5dl8N4+Ut4zJTLEwO8oq006yM=
  private key: (hidden)
  listening port: 33265
peer: bfsta5fCD8MmUeidCMXZKvEMvVB6h5312tzVwRPinEU=
  preshared key: (hidden)
  endpoint: 192.168.2.6:51194
  allowed ips: 172.170.10.0/24, 10.10.1.0/24
  latest handshake: 1 second ago
  transfer: 36.01 KiB received, 41.39 KiB sent
  persistent keepalive: every 20 seconds

Successivamente, si può testare la raggiungibilità dell’host Server Ubuntu 20.04 LTS (10.10.1.27), al capo opposto del tunnel eseguendo un semplice ping dell’indirizzo IP di quell’host dal Client Ubuntu 22.04:

ping -c 3 10.10.1.27

Che restituirà un output simile a quello mostrato qui di seguito

PING 10.10.1.27 (10.10.1.27) 56(84) bytes of data.
64 bytes from 10.10.1.27: icmp_seq=1 ttl=63 time=3.06 ms
64 bytes from 10.10.1.27: icmp_seq=2 ttl=63 time=3.11 ms
64 bytes from 10.10.1.27: icmp_seq=3 ttl=63 time=2.74 ms
--- 10.10.1.27 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.741/2.968/3.109/0.162 ms

Per ispezionare la rotta tracciata dai pacchetti che dal Client raggiungono l’host 10.10.1.27 con il comando:

sudo traceroute -nI 10.10.1.27

Scopriremo che tutto il traffico dal Client 192.168.122.160 all’host 10.10.1.27 passa esclusivamente all’interno del tunnel, come mostrato dall’output del comando precedente:

traceroute to 10.10.1.27 (10.10.1.27), 30 hops max, 60 byte packets
1 172.170.10.1 2.437 ms 4.396 ms 4.424 ms
2 10.10.1.27 5.778 ms 6.685 ms 8.440 ms

che sono esattamente gli obbiettivi che volevamo raggiungere.

Conclusioni

Configurare una VPN con WireGuard, con Linux server ed un client linux è un task che può richiedere davvero pochi minuti. La connessione criptata che se ne ottiene mette al riparo da occhi indiscreti tutti i dati che transitano all’interno del canale cifrato.

In questo guida abbiamo visto un esempio di come impostare un server WireGuard in un ambiente Linux ed utilizzarlo da un Client anch’esso Linux, ma non è affatto indispensabile che Client e Server siano della stessa natura. È infatti molto comune incontrare implementazioni dove il server è realizzato in ambiente Linux, dove accedono Client di varia natura: iOS, Android, macOS, Windows, solo per citare alcuni dei più popolari.

WireGuard, come già detto, è infatti disponibile per numerosi sistemi operativi. Per gli utenti Windows che vogliono sperimentare subito le qualità del client possono iniziare ad utilizzare un Client WireGuard per Windows dal PC o dal Laptop, in pochi minuti.

Condividi

Disclaimer

Questa pagina potrebbe contenere link di affiliazione. Gli acquisti o gli ordini che effettuerai tramite tali link possono generare commissioni che ci aiutano a sostenere questo sito web.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Moderazione dei commenti attiva. Il tuo commento non apparirà immediatamente.