Introduzione

WireGuard è una moderna tecnologia VPN (Virtual Private Network) che utilizza una crittografia all'avanguardia. Rispetto ad altre popolari soluzioni VPN, come IPsec e OpenVPN. WireGuard è più veloce, più facile da configurare ed è più leggero. È multipiattaforma e può essere eseguito quasi 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ò agire come un server o un client tradizionale. Funziona creando un'interfaccia di rete su ogni dispositivo peer che funge da tunnel. I peer si autenticano a vicenda scambiandosi e convalidando le chiavi pubbliche, imitando il modello SSH. Le chiavi pubbliche vengono mappate con un elenco di indirizzi IP consentiti nel tunnel. Il traffico VPN è incapsulato in UDP.

In questo articolo, discuteremo come configurare una VPN WireGuard su Ubuntu 20.04 LTS Focal Fossa che fungerà da server VPN. Ti mostreremo anche come configurare WireGuard come client. Il traffico del client verrà instradato attraverso il server Ubuntu 20.04 LTS.

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

Se desideri installare WireGuard su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Prerequisiti

Per seguire questa guida, avrai bisogno di un server Ubuntu 20.04 LTS con accesso root o sudo.

Configurare il server WireGuard

Inizieremo installando WireGuard sulla macchina Ubuntu e configurandolo per agire come un server. Configureremo anche il sistema per instradare il traffico dei client attraverso di esso.

Installare WireGuard su Ubuntu 20.04

WireGuard è disponibile dai repository Ubuntu predefiniti. Per installarlo, esegui i seguenti comandi:

sudo apt update
sudo apt install wireguard

Questo installerà il modulo e gli strumenti WireGuard. WireGuard viene eseguito come un modulo del kernel.

Configurare WireGuard

Gli strumenti della riga di comando wg e wg-quick consentono di configurare e gestire le interfacce WireGuard.

Ogni dispositivo nella rete WireGuard VPN deve avere una chiave pubblica e una privata. Eseguire il comando seguente per generare la coppia di chiavi:

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

I file verranno generati nella directory /etc/wireguard. È possibile visualizzare il contenuto dei file con cat o less. La chiave privata non dovrebbe mai essere condivisa con nessuno e dovrebbe essere sempre tenuta al sicuro.

Wireguard supporta anche una chiave precondivisa, che aggiunge un ulteriore livello di crittografia a chiave simmetrica. Questa chiave è facoltativa e deve essere univoca per ogni coppia di pari.

Il passaggio successivo consiste nel configurare il dispositivo del tunnel che instraderà il traffico VPN.

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

Crea un nuovo file denominato wg0.conf e aggiungi i seguenti contenuti:

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 denominata in qualsiasi modo, tuttavia si consiglia di utilizzare qualcosa come include wg0 o wgvpn0. Le impostazioni nella sezione interfaccia hanno il seguente significato:

  • Address: un elenco separato da virgole di indirizzi IP v4 o v6 per l'interfaccia wg0. Utilizza gli IP da 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 di ascolto.
  • PrivateKey: una chiave privata generata dal comando wg genkey. (Per visualizzare il contenuto del tipo di file: 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 visualizzare l'interfaccia. In questo esempio, stiamo usando iptables per abilitare il masquerading. Ciò consente al traffico di lasciare il server, fornendo ai client VPN l'accesso a Internet. Assicurati di sostituire ens3 dopo -A POSTROUTING in modo che corrisponda al nome della tua interfaccia di rete pubblica. Puoi facilmente trovare l'interfaccia con il seguente comando:
ip -o -4 route show to default | awk '{print $5}'
  • PostDown: comando o script che viene eseguito prima di chiudere l'interfaccia. Le regole di iptables verranno rimosse quando l'interfaccia sarà disattivata.


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 terminato, apri l'interfaccia wg0 utilizzando 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

Per controllare lo stato e la configurazione dell'interfaccia, digita:

sudo wg show wg0
interface: wg0
  public key: DLx+Owg3aAqneY/HfmYPBbpUpNUFGuWGQQO1tT6N9Q0=
  private key: (hidden)
  listening port: 51820

Puoi anche eseguire ip a show wg0 per verificare lo stato dell'interfaccia:

ip a show wg0
3: 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

WireGuard può essere gestito anche con Systemd.

Per eseguire WireGuard all'avvio, eseguire il seguente comando:

sudo systemctl enable [email protected]

Server Networking e configurazione del firewall

L'inoltro IP deve essere abilitato affinché NAT funzioni. Apri il file /etc/sysctl.conf e aggiungi o rimuovi il commento dalla riga seguente:

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

Salva e chiudi il file, successivamente applica la modifica:

sudo sysctl -p
net.ipv4.ip_forward = 1

Se stai usando UFW per gestire il tuo firewall, devi aprire il traffico UDP sulla porta 51820:

sudo ufw allow 51820/udp

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

Configurare il client Linux e macOS

Le istruzioni di installazione per tutte le piattaforme supportate sono disponibili qui. Su sistemi Linux, puoi installare il pacchetto utilizzando il gestore dei pacchetti di distribuzione e su macOS con brew.

Una volta installato, 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. Innanzitutto genera le chiavi pubblica e privata:

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

Crea il file wg0.conf e aggiungi 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
/etc/wireguard/wg0.conf

Le impostazioni nella sezione dell'interfaccia hanno lo stesso significato della configurazione del server:

  • Address: un elenco separato da virgole di indirizzi IP v4 o v6 per l'interfaccia wg0.
  • PrivateKey: Per vedere il contenuto del file sulla macchina client eseguire: sudo cat /etc/wireguard/privatekey

La sezione peer contiene i seguenti campi:

  • PublicKey: una chiave pubblica del peer a cui desideri connetterti. (Il contenuto del file /etc/wireguard/publickey del server ).
  • Endpoint: un IP o un nome host del peer a cui desideri connetterti seguito da due punti e 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 ea cui è diretto il traffico in uscita per questo peer. Usiamo 0.0.0.0/0 perché instradiamo il traffico e vogliamo che il peer del server invii pacchetti con qualsiasi IP di origine.

Se è necessario configurare client aggiuntivi, è sufficiente 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 "Aggiungi tunnel" -> "Aggiungi tunnel vuoto".

Una coppia di chiavi pubbliche viene creata automaticamente 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, aggiungi una nuova riga per definire l'indirizzo del tunnel del client.

Nella sezione peer, aggiungi 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 la porta WireGuard (51820).
  • AllowedIPs: 0.0.0.0/0

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

Aggiungere il peer client al server

L'ultimo passaggio consiste nell'aggiungere la chiave pubblica e l'indirizzo IP del client al server. Per farlo, esegui il seguente comando sul server Ubuntu:

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 sulla macchina client (sudo cat /etc/wireguard/publickey) e di regolare l'indirizzo IP del client se è diverso. Gli utenti Windows possono copiare la chiave pubblica dall'applicazione WireGuard.

Una volta terminato, torna alla macchina client e apri l'interfaccia di tunneling.

Client Linux e macOS

Esegui il seguente comando per visualizzare l'interfaccia:

sudo wg-quick up wg0

Ora dovresti essere connesso al server Ubuntu e il traffico dalla tua macchina client dovrebbe essere instradato attraverso di esso. Puoi verificare la connessione con:

sudo wg
interface: wg0
  public key: gFeK6A16ncnT1FG6fJhOCMPMeY4hZa97cZCNWis7cSo=
  private key: (hidden)
  listening port: 53527
  fwmark: 0xca6c

peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
  endpoint: XXX.XXX.XXX.XXX:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 53 seconds ago
  transfer: 3.23 KiB received, 3.50 KiB sent

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

Per interrompere il tunneling, abbassa l'interfaccia wg0:

sudo wg-quick down wg0

Client Windows

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

Conclusione

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