Installare una VPN Point-to-Point per il cloud con WireGuard

Installare una VPN Point-to-Point per il cloud con WireGuard
Photo by Petter Lagson / Unsplash

Se avete un VPS sul cloud con ogni probabilità vi troverete nella situazione di doverci accedere via SSH tramite internet. Sicuramente avrete attuato tutte le cautele possibili: password molto forte, accesso solo tramite ssh keys, fail2ban, etc... tuttavia resta sempre quel piccolo tarlo nella mente che vi ricorda in continuazione "hai il servizio SSH esposto a tutto il mondo" e che non vi fa dormire fra due cuscini.

Ebbene, che ne dite se ci fosse una VPN semplice, pratica, sicura e performante che vi permettesse di dire addio alla porta 22 esposta alle tempeste della rete? In questo articolo vi parlerò di WireGuard, una soluzione sorprendentemente semplice ma non per questo inferiore alle blasonate alternative come OpenVPN.

Ma andiamo per gradi. WireGuard crea un tunnel trasparente fra due peer uno dei quali funge da server mettendosi in ascolto su una porta UDP dell'interfaccia pubblica esposta su internet. Ciascun peer dispone di una chiave pubblica e una privata e ciascuno conosce la chiave pubblica dell'altro che usa per criptare i pacchetti. Sui due peer viene creata una interfaccia di rete (tipicamente wg0, wg1, etc...) a cui viene assegnato un indirizzo IP: nella configurazione semplice in cui due computer, il vostro PC e il VPS nel cloud, devono comunicare in modo sicuro fra di loro è già sufficiente così, WireGuard imposterà sui due peer le regole di routing affinché possano dialogare attraverso questo IP. Semplice no?

Installare e configurare i due peer

Come abbiamo detto su WireGuard esiste il concetto di peer, i due computer non sono gerarchicamente differenti se non per il fatto che uno dei due deve accettare le connessioni e l'altro per forza di cose inizializzarle. Nel nostro caso il peer in ascolto sarà il VPS mentre quello deputato a inizializzare la connessione sarà la nostra workstation.

In questo tutorial assumo che entrambi i computer abbiano Linux installato. Lo schema che andremo a realizzare è il seguente:

Per prima cosa occorre installare WireGuard su entrambi i computer. Il software è incluso nei repository di tutte le distribuzioni per cui è sufficiente utilizzare il package manager della distribuzione installata.

Una volta installato occorre generare il key pair per entrambi i computer:

wg genkey | tee privatekey | wg pubkey > publickey

Questo genererà due file nella directory corrente privatekey e publickey contenenti rispettivamente la chiave privata e la corrispondente pubblica.

A questo punto nel computer remoto occorre creare un file /etc/wireguard/wg0.conf (il nome è arbitrario ma sarà quello dell'interfaccia di rete, per cui dovrà rispettare quelle regole):

[Interface]
PrivateKey = PVT1XXXXXXXXXXXXXXX=
Address = 10.20.20.1
ListenPort = 51820

[Peer]
PublicKey = PUB2XXXXXXXXXXXXXXXX=
AllowedIPs = 10.20.20.2

Nella PrivateKey dovete impostare la chiave privata generata per il computer remoto, mentre nella PublicKey la chiave pubblica generata per la workstation locale.

La ListenerPort sarà la porta a cui risponderà WireGuard sulla interfaccia pubblica.

Controllate il firewall sia interno del VPS che quello del vostro cloud provider che avrete applicato, la porta 51820 dovrà essere aperta al traffico in ingresso.

A questo punto potete avviare il servizio che creerà l'interfaccia di rete wg0:

systemctl start wg-quick@wg0
systemctl enable wg-quick@wg0

Adesso passiamo alla workstation. Occorre anche qui creare un file /etc/wireguard/wg0.conf molto simile:

[Interface]
Address = 10.20.20.2/32
PrivateKey = PVT2XXXXXXXXXXXXXXX=


[Peer]
PublicKey = PUB2XXXXXXXXXXXXXXXX=
AllowedIPs = 10.20.20.1 
Endpoint = <IP pubblico>:51820

Anche quì dobbiamo impostare la chiave privata del computer locale e la chiave pubblica del remoto. Inoltre dobbiamo specificare come Endpoint l'indirizzo pubblico a cui collegarsi, compresa la porta di ascolto che ovviamente dovrà corrispondere alla ListenPort impostata in precedenza.

Fatto questo la configurazione è praticamente terminata. Per avviare la VPN possiamo avviare il servizio come sopra, oppure se si preferisce da linea di comando:

wg-quick up wg0

Adesso potete testare la connessione, salvo errori dovreste essere in grado di collegarvi al vostro VPS all'indirizzo 10.20.20.1.

Se il test è andato a buon fine, tutto quello che vi resta da fare è chiudere la porta 22 dal firewall applicato sul vostro VPS.

Conclusioni

Questa configurazione è utile nel caso si voglia accedere in maniera sicura ad un singolo server nel cloud. Nel caso si voglia accedere non ad un singolo computer bensì ad una rete privata sempre nel cloud, è possibile sempre partendo da questa configurazione di base introducendo poche regole di iptables. Di questo argomento ne parlerò in una seconda parte.