Introduzione
WireGuard è una VPN (Virtual Private Network) semplice e moderna con crittografia all'avanguardia. È più veloce, più facile da configurare e più performante rispetto ad altre soluzioni simili, come IPsec e OpenVPN.
WireGuard è multipiattaforma e può funzionare praticamente ovunque, inclusi Linux, Windows, Android e macOS. Wireguard è una VPN peer-to-peer; non si basa sul 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 funziona come un tunnel. I peer si autenticano reciprocamente scambiando 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.
Questo tutorial descrive come impostare WireGuard su un computer CentOS 8 che fungerà da server VPN. Ti mostreremo anche come configurare WireGuard come client. Il traffico del client verrà instradato attraverso il server CentOS 8. 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 che lavorano da casa di connettersi in modo sicuro alla rete aziendale.
Prerequisiti
Avrai bisogno di un server CentOS 8 a cui puoi accedere come root o account con privilegi sudo e il firewall installato sul tuo server CentOS 8.
Installare WireGuard
Inizieremo installando WireGuard sulla macchina CentOS e configurandolo per fungere da server. Configureremo anche il sistema per instradare il traffico dei client attraverso di esso.
Gli strumenti WireGuard e il modulo kernel sono disponibili per l'installazione dai repository Epel ed Elrepo. Per aggiungere i repository al sistema, eseguire il comando seguente:
sudo dnf install epel-release elrepo-release
Una volta fatto, installa i pacchetti WireGuard:
sudo dnf install kmod-wireguard wireguard-tools
È possibile che venga richiesto di importare le chiavi GPG dei repository. Digitare y
quando richiesto.
Configurare WireGuard
Il pacchetto wireguard-tools
include due strumenti da riga di comando denominati wg
e wg-quick
che consentono di configurare e gestire le interfacce WireGuard.
Memorizzeremo la configurazione del server VPN e nella directory /etc/wireguard
. Su CentOS, questa directory non viene creata durante l'installazione. Eseguire il comando seguente per creare la directory:
sudo mkdir /etc/wireguard
Generare le chiavi pubbliche e private nella directory /etc/wireguard
.
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
È possibile visualizzare i file con cat
o less
. La chiave privata non dovrebbe mai essere condivisa con nessuno.
Ora che vengono generate le chiavi, il passaggio successivo è 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.
Installare l'editor di testo nano se non è già installato:
sudo dnf install nano
Creare un nuovo file denominato wg0.conf
e aggiungere i seguenti contenuti:
sudo nano /etc/wireguard/wg0.conf
L'interfaccia può essere nominata come desiderato, tuttavia si consiglia di utilizzare qualcosa come include wg0
o wgvpn0
. Le impostazioni nella sezione dell'interfaccia hanno il seguente significato:
- Indirizzo: 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 eseguitosudo 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
firewall-cmd
per aprire la porta WireGuard e abilitare il mascheramento. Ciò consentirà al traffico di uscire dal server, offrendo ai client VPN l'accesso a Internet. - PostDown - comando o script che viene eseguito prima di disattivare l'interfaccia. Le regole del firewall verranno rimosse una volta disattivata l'interfaccia.
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 genererà qualcosa del genere:
[#] 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 visualizzare lo stato e la configurazione dell'interfaccia, eseguire:
sudo wg show wg0
interface: wg0
public key: z//Gb63cqmICNZcsja76y9LdSFyBgfVb5JHO3SZyVTo=
private key: (hidden)
listening port: 51820
Puoi anche usare il comando ip
per verificare lo stato dell'interfaccia:
ip a show wg0
5: 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 wg0
all'avvio, eseguire il comando seguente:
sudo systemctl enable wg-quick@wg0
Server Networking
Perché NAT funzioni, è necessario abilitare l'inoltro dell'IP. Crea il seguente file /etc/sysctl.d/99-custom.conf
e aggiungi la seguente riga:
sudo nano /etc/sysctl.d/99-custom.conf
Salvare il file e applicare la modifica:
sudo sysctl -p /etc/sysctl.d/99-custom.conf
net.ipv4.ip_forward = 1
Questo è tutto. Il peer CentOS che fungerà da server è stato impostato.
Installare i 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
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 del server
/etc/wireguard/publickey
). - 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.
- DPI consentiti: 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 utilizzando
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 "Aggiungi tunnel" -> "Aggiungi tunnel vuoto ...".
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 CentOS (file
/etc/wireguard/publickey
). - Endpoint: l'indirizzo IP del server CentOS seguito da due punti e dalla porta WireGuard (51820).
- IP consentiti - 0.0.0.0/0
Una volta fatto, fai clic sul pulsante "Salva".
Aggiungere il peer client al server
L'ultimo passaggio è aggiungere la chiave pubblica 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 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 CentOS e il traffico dal tuo computer client dovrebbe essere instradato attraverso di esso. Puoi verificare la connessione con:
sudo wg
interface: wg0
public key: qEmVlRE+O/g74NTT6AjkqPEjGkcOQPu9Id7SgcJe/2E=
private key: (hidden)
listening port: 51820
fwmark: 0xca6c
peer: z//Gb63cqmICNZcsja76y9LdSFyBgfVb5JHO3SZyVTo=
endpoint: XXX.XXX.XXX.XXX:51820
allowed ips: 0.0.0.0/0
latest handshake: 21 seconds ago
transfer: 123.25 KiB received, 106.68 KiB sent
Puoi anche aprire il browser, digitare "mio IP" e dovresti vedere l'indirizzo IP del tuo server CentOS.
Per interrompere il tunneling, disattiva l'interfaccia wg0
:
sudo wg-quick down wg0
Client Windows
Se hai installato WireGuard su Windows, fai clic sul pulsante "Attiva". Una volta connessi i peer, lo stato del tunnel cambierà in Attivo:
Conclusione
Ti abbiamo mostrato come installare WireGuard su un computer CentOS 8 e configurarlo come server VPN. Questa configurazione ti consente di navigare sul Web in modo anonimo mantenendo privati i tuoi dati sul traffico.