Come configurare WireGuard vpn server su OPNsense
WireGuard è una VPN (Virtual Private Network) dal design moderno che utilizza la crittografia più recente per una maggiore sicurezza, velocità ed è relativamente facile da configurare.
Iniziamo
Ad oggi, questo codice è nuovo, non testato, potenzialmente buggato e dovrebbe essere considerato “sperimentale”. Potrebbe contenere problemi di sicurezza. Quindi è opportuno esercitare una certa cautela nell’usarlo in ambienti critici al momento. questo plugin è deprecato; potresti desiderare di riconsiderare l’installazione: è utile solo per versioni OS FreeBSD 12, che raggiungerà presto la fine del supporto. il plugin se installato sarà rimosso a fine anno 31-12-2023
WireGuard è simile a un server SSH in quanto i dispositivi che hanno condiviso le loro chiavi crittografiche tra di loro sono in grado di connettersi tramite un tunnel crittografato. I dispositivi che comunicano tra loro vengono indicati come “peer”. Quando il dispositivo peer può essere un router OPNsense con WireGuard abilitato, è capace di consentire un ulteriore accesso a vari dispositivi/servizi sulla rete.
Tieni presente che sto descrivendo come connettersi in modo sicuro alla tua rete domestica in remoto tramite WireGuard su OPNsense e non come collegare OPNsense a un provider WireGuard esterno. Immagino che molti degli stessi concetti si applichino ugualmente.
Installare il plugin di WireGuard
La prima cosa da fare è installare il plugin WireGuard in OPNsense perché non è un provider VPN presente nativamente su OPNsense. Naviga alla pagina “System > Firmware > Plugins”. Scorri verso il basso fino a a trovare il plugin “os-wireguard” e installalo.
Configurare il server WireGuard
Dopo averlo installato, iniziamo a configurare il server VPN. Vai alla pagina “VPN > WireGuard” e fai clic sul Tab “Local”:
Fate click sul riquadro “+” aggiungendo un nuovo server.
Spuntate la casella “Enabled”. Assegnate al server un nome a vostra scelta. Lasciate vuote “Public Key” e “Private Key” poiché verranno generate automaticamente dopo il “Save”. La porta in ascolto di default è la 51820. Consiglio di cambiarla in una porta NON predefinita, usiamo la 51821 esclusivamente nell’esempio.
L’utilizzo di una porta non predefinita in genere aiuta a ridurre i tentativi di connessione e la scansione delle porte da parte degli script/bot che eseguono la scansione di porte predefinite. Offre un piccolo vantaggio in materia di sicurezza. Se hai impostato Unbound DNS per impostazione predefinita a tutte le interfacce o hai selezionato l’interfaccia WireGuard che utilizza Unbound DNS, potete lasciare vuoto “DNS Server”. Utilizzerà l’indirizzo del tunnel WireGuard come server DNS (nel nostro esempio sarà il seguente: 10.0.0.1).
Se si utilizzano dei server DNS alternativi, come ad esempio il nostro caro Pi-hole, sarà necessario specificare gli indirizzi ip dei server DNS anziché lasciarla vuota. Successivamente dovrai creare una regola firewall aggiuntiva (se non già presente) per consentire l’accesso ai server DNS alternativi poiché esisterà su le altre reti (a meno che tu non abbia una regola “Allow All” sui client WireGuard, che non è l’idea migliore se prendi in considerazione la sicurezza).
Per “Tunnel Address”, immettere un indirizzo di rete ad esempio: 10.0.0.1/24. Tutti i peer/client che si connettono al server devono avere un indirizzo IP che rientra nell’intervallo appena definito. Tienilo a mente quando configuri l’utente.
è necessario scegliere un intervallo di indirizzi che non rientri in intervalli di altre reti. Le VPN in genere utilizzano una propria rete virtuale, è necessario quindi avere un intervallo di indirizzi diverso. Puoi comunque consentire l’accesso ad altre parti della tua rete come se i client remoti fossero connessi localmente (vedremo più avanti nella sezione “Aggiungere regola firewall per accesso reti/dispositivi interni (Opzionale)”).
Lascia i “Peer” come “Nothing Selected” per adesso. Dovrai tornare su questo una volta che gli utenti/peer sono configurati. La configurazione dei peer sul server e sul client per lo scambio di chiavi pubbliche non è il processo più intuitivo. L’app WireGuard per iOS supporta i QR code, quindi se viene implementato nel plug-in WireGuard in OPNsense, la configurazione dei dispositivi mobili avviene in modo più semplificato. Prosegui con “Salva”.
Copia la Public Key del Server sui client
Dopo aver salvato la configurazione, fate clic sul pulsante modifica (l’iconcina a forma di matita). Noterai che le chiavi pubbliche e private sono state generate automaticamente. Per configurare i “peer” (client/utenti) che si collegheranno alla vpn OPNsense WireGuard, dovrai inviare la chiave pubblica a tutti i tuoi dispositivi client WireGuard che vorranno utilizzare la nostra VPN. Inviate la chiave pubblica tramite e-mail potrebbe essere il modo più semplice o se si utilizza un’applicazione di sincronizzazione dei file sicura, è possibile trasferire la chiave anche tramite file di testo. (la mia chiave pubblica è stata trasferita tramite via e-mail che utilizzava una connessione TLS/SSL).
Invia solo la chiave pubblica. La chiave privata deve rimanere segreta!
Poiché la chiave è una chiave pubblica, non devi preoccuparti di mantenere la chiave pubblica segreta tanto quanto la chiave privata. Ovviamente non è una cattiva idea se vuoi tenere al sicuro anche quella. si necessita anche della tua chiave privata per decrittografare completamente le tue comunicazioni/dati della tua rete virtuale privata. Perderla non sarà una bella cosa, tanto meno se finisce in mani sbagliate.
Configurare client WireGuard (da iOS)
Ora che la chiave pubblica del server è presente client/peer, è possibile configurarlo. Non sarà possibile connettersi al server VPN fino a quando non viene aggiunto l’endpoint, ma abbiamo tutto il necessario per farlo. Una volta configurato il client, è possibile procedere all’aggiunta delle informazioni client al server.
Wireguard è supportato da un gran numero di dispositivi/OS, qui mostrerò i passaggi per iOS come esempio, Puoi trovare Android e altri esempi su vari blog, forum o adirittura su guide ufficiali. l’app ufficiale è presente sull’app store. Quando apri l’app WireGuard, dovrai fare clic su “Crea da zero” poiché attualmente il plug-in non fornisce un codice QR da scansionare.
Dopo aver fatto clic sul pulsante, verrà visualizzata la schermata “Modifica configurazione”.
Per “Nome” inserisci una descrizione per la connessione VPN. Fai clic su “Genera keypair” per generare la chiave pubblica e privata. Per gli “Indirizzi”, inserisci l’indirizzo IP statico dell’utente. useremo 10.0.0.2/32. Il “/32” è la notazione CIDR in questo caso indica che si sta specificando un singolo indirizzo IPv4 del nostro range di ip dichiarato in precedenza (10.0.0.1/24).
Utilizzate la stessa “porta in ascolto” configurata nel nostro server WireGuard. Nel nostro esempio 51821. Se si esegue il tunneling di tutto il traffico dal client attraverso wireGuard VPN, è necessario specificare i server DNS anche se dice che è “fortemente raccomandato”. Ciò ha causato alcuni problemi per me fino a quando non mi sono reso conto che dovevo inserire le informazioni (che sono indicate nella sezione “Step 3 - Setup WireGuard Client” Nella documentazione di OPNsense). Fare clic su “Aggiungi peer” per aprire una nuova sezione di configurazione:
Il dispositivo peer è il nostro router OPNsense con WireGuard installato. Copia e incolla la chiave pubblica nella casella “Chiave pubblica”. Se prevedete di utilizzare una passphrase (come una password) in aggiunta alle chiavi, è possibile inserirla nella casella “Chiave già condivisa”. Assicurarsi di utilizzare la stessa chiave precondivisa quando si configura l’endpoint client in OPNsense. Per l’“Endpoint”, è consigliabile utilizzare un nome di dominio per l’accesso esterno alla rete domestica anziché un indirizzo IP. Questo può essere un nome di dominio DNS dinamico come dyn.com o il tuo nome di dominio personalizzato
La casella “IP consentiti” consente di inserire IP che dovrebbero passare attraverso la VPN. specificando 0.0.0.0/0, significa che tutto il traffico di rete, comprese le ricerche DNS, (motivo per cui è necessario specificare il server DNS nella casella “Server DNS”) Il routing di tutto il traffico di rete attraverso la VPN, utile se si desidera utilizzare hotspot di WiFi pubblici, ma è anche comodo se non si desidera perdere ricerche DNS dal dispositivo. Se si utilizza IPv6, è possibile specificare ::/0 per indicare il tunnel di tutto il traffico IPv6 allo stesso modo del protocollo IPv4. Non fare clic su “Salva” fino a quando non si completa il passaggio successivo.
Copiare la chiave publica su Client WireGuard (da iOS)
Prima di salvare la configurazione del client, fare clic sulla stringa accanto all’etichetta “Chiave pubblica”. Verrà visualizzata una finestra di dialogo “copia”. Fai clic su “copia”. Sarà necessario immettere tale chiave in OPNsense per la configurazione dell’endpoint client.
Vai su “Salva” per completare la configurazione del dispositivo iOS.
Configurare Client WireGuard Endpoint
Con il dispositivo utente/client configurato, successivamente dobbiamo configurare l’endpoint client. Ritorna alla pagina “VPN > WireGuard” e fai clic sul tab “Endpoint”.
Fai clic sulla casella di controllo “Abilitato” e su un “Nome” per l’utente. Lascia vuota la “Chiave pubblica” per ora. Verrà ottenuto in un secondo momento durante la configurazione del client per l’utente.
Un “Shared Secret” può essere utilizzato se si desidera un ulteriore livello di protezione nel caso in cui viene persa la chiave privata (ma se si perde il segreto condiviso, ci si trova nella stessa situazione in cui si perdono le chiavi private senza la chiave già condivisa). È necessario assicurarsi di utilizzare la stessa chiave già condivisa immessa nel dispositivo client.
Per la casella “IP consentiti”, inserisci l’indirizzo IP dell’utente/cliente. Questo indirizzo è un indirizzo statico associato alla chiave pubblica dell’utente.
È possibile lasciare vuoto “Indirizzo endpoint” a meno che non si disponga di strutture di rete più complesse.
La “Porta endpoint” deve essere impostata come la “Porta in ascolto” del server. se si lascia vuoto userà la porta predefinita (la 51820) Prosegui con “Salva”.
Abilitare Server VPN WireGuard
A questo punto, il nostro server VPN WireGuard può essere abilitato dato che le configurazioni sul server e un sull’client sono state completate. Per abilitare il server WireGuard, vai al tab “Generale” e fai clic su “Abilita”.
Aggiungere l’interfaccia WireGuard
Questo passo è necessario per consentire ai client esterni di utilizzare la connessione Internet della nostra rete domestica. Andremo a creare quindi un’interfaccia WireGuard. Tramite questo post ho visto specificato il passaggio a seguire (nel link condiviso sono presenti anche i passaggi per configurare su Android.)
Se è necessario accedere solo alla rete domestica ma non alla connessione Internet, è possibile ignorare tranquillamente il seguente passaggio.
Per aggiungere l’interfaccia, vai su “Interfaces > Assignments”.
Selezionare quindi l’interfaccia “wg0” e fare clic su “+” per aggiungere l’interfaccia all’elenco delle nostre interfacce. Fare clic sul pulsante “Salva” per mantenere la modifica. Apparirà qualcosa come “[OPT1]” o qualche altro numero se hai già un’interfaccia “[OPT1]”. Ora fai clic sull’interfaccia “[OPT1]” (qualsiasi altro nome si chiami la nuova interfaccia).
Spunta la casella “Enabled” e sulla casella “Prevent interface removal”. Nell’esempio, ho rinominato l’interfaccia “OPT1” in “WG” nella casella “Descrizione” in modo che sia più facile da ricordare quando si guardano le pagine di configurazione dell’interfaccia e del firewall.
Assicurati di non chiamarlo “WireGuard” poiché un gruppo sul firewall con lo stesso nome, viene generato automaticamente quando si abilita WireGuard. Non è necessario inserire altre impostazioni.
Aggiungere la regola Firewall per la WAN
Per consentire l’accesso esterno alla VPN, è necessario creare una regola WAN. Vai alla pagina “Firewall > Rules > WAN”.
Scegli l’azione “Pass” e “UDP” per Protocollo. la “Sorgente” deve essere impostato su “qualsiasi - any” per consentire a qualsiasi host remoto di connettersi.
Puoi limitarlo se sai da dove ti connetti magarai in una determinata rete con indirizzi IP statici o intervalli di indirizzi.
La “Destinazione” deve essere l’indirizzo ip della tua interfaccia WAN, (in pratica l’indirizzo IP esterno). Per “Intervallo di porte di destinazione”, selezionare “(altro)” e immettere il numero di porta utilizzato quando è stato creato il servizio VPN WireGuard. È possibile aggiungere un’utile “Descrizione” come “Consenti accesso remoto alla VPN WireGuard”.
Aggiungere regola Outbound NAT (Opzionale)
ho ricevuto dei feedback sul fatto che la regola NAT in uscita non è necessaria se si aggiunge un’interfaccia per WireGuard come descritto sopra. Ho provato a disabilitare la regola NAT in uscita e ero ancora in grado di connettermi a tutto e accedere a Internet tramite la rete VPN/domestica. Lascio il passaggio nelle istruzioni nel caso in cui lo trovi utile/necessario perché ho trovato menzione da altri che aggiungendo la regola NAT in uscita può risolvere in parte delle loro problematiche.
Affinché i client/utenti WireGuard utilizzino la connessione Internet della rete remota, è necessario creare una regola NAT in uscita. La maggior parte degli utenti domestici probabilmente vorrà questa funzionalità perché vuole navigare in Internet in modo più sicuro rispetto all’utilizzo di un WiFi pubblico.
Puoi sfruttare tutta la privacy e la sicurezza che hai possibilmente in atto sulla tua rete domestica mentre sei lontano da casa. Questo passaggio è probabilmente facoltativo se non si desidera accedere alla connessione Internet della rete domestica mentre si è connessi alla VPN.
Se si utilizza l’opzione predefinita “Automatic outbound NAT rule generation”, sarà necessario impostarla su “Hybrid outbound NAT rule generation” o “Manual outbound NAT rule generation”.
la scelta ibrida è probabilmente la migliore per la maggior parte degli utenti domestici, a meno che non si desideri prendere il tempo necessario per configurare tutte le regole NAT in uscita necessarie per altri servizi. Una volta abilitata la modalità ibrida o manuale, vedrai un pulsante “Aggiungi” nell’angolo in alto a destra della pagina.
Dovresti vedere l’interfaccia WireGuard “WG” elencata nella sezione “Regole automatiche” nella parte inferiore della pagina. Se non lo vedi elencato, potrebbe essere necessario riavviare il router. È possibile che venga visualizzato in seguito quando si applicano altre varie modifiche alla configurazione, quindi potrebbe non essere necessario un riavvio.
Fai clic sul pulsante “Aggiungi” per creare una nuova regola NAT in uscita.
Assicurati che l’Interfaccia sia impostata su “WAN”. Scegli “qualsiasi - any” per il Protocollo. L’ Indirizzo sorgente dovrebbe essere la tua “rete WireGuard - WireGuard net” che include gli utenti/client collegati al tuo server VPN WireGuard.
La “porta sorgente” deve essere impostata su “qualsiasi - any”. Indirizzo di destinazione e Porta di destinazione devono essere entrambi impostati su “qualsiasi” per consentire le connessioni in uscita a qualsiasi indirizzo. Il menu a discesa “Traduzione/destinazione” deve essere impostato su “Indirizzo interfaccia” per indicare l’interfaccia della WAN, quindi instradare qualsiasi traffico di rete WireGuard attraverso l’interfaccia WAN verso la destinazione desiderata.
Connettiti alla VPN
Il momento Finale… dovresti essere finalmente pronto per connetterti alla tua VPN! Vai sul tuo dispositivo client e fai Connetti. In OPNsense, vai alla scheda “List Configuration” nella pagina “VPN > WireGuard” e dovresti essere in grado di vedere le informazioni sull’utente appena connesso. Vedrai quale peer (tramite la sua chiave pubblica), l’indirizzo IP dell’utente connesso, da quanto tempo si è verificata l’ultima connessione e la quantità di dati trasferiti.
Aggiungere regola firewall per accesso reti/dispositivi interni (Opzionale)
La tua VPN deve essere configurata per consentire connessioni esterne da dispositivi client come il telefono. I client devono essere in grado di accedere alla connessione Internet della rete domestica. Questo è tutto il necessario se vuoi solo avere una connessione più sicura a Internet mentre sei da remoto fuori da casa.
Se si desidera accedere a qualsiasi altro dispositivo all’interno della tua rete domestica, sarà necessario creare delle regole firewall aggiuntive per consentire tali accessi. Il processo è esattamente lo stesso della creazione di regole per consentire l’accesso tra altre VLAN nella rete domestica.
Se vuoi mantenere le regole semplici, potresti creare una regola “Allow All” che consentirà agli utenti il pieno accesso alla tua rete, ma credo sia più giusto consentire solo l’accesso a dispositivi/servizi specifici.
Se hai già una rete IoT (Internet of Things) o guest con regole firewall restrittive, ad esempio, e potresti voler semplicemente copiare le stesse regole per i tuoi client WireGuard. È possibile clonare le regole da altre interfacce, ma se si clonano le regole, sarà necessario ricordare di modificare l’interfaccia di origine per ogni regola che viene clonata.
Poiché le regole del firewall di rete interna potrebbero variare notevolmente a seconda delle proprie esigenze, lascerò la creazione di tali regole a voi. Se desideri una guida sulla creazione di regole firewall OPNsense, ne ho trattatato qui.. In futuro cercherò anche di creare un elenco che fornisce diversi esempi o scenari di regole più comuni.
Tutte le regole firewall devono essere applicate al gruppo di firewall denominato “WireGuard” anziché all’interfaccia WireGuard configurata e aggiunta, a meno che non si possiede più di un’istanza WireGuard configurata su OPNsense. Inoltre, ancora più importante, avrai bisogno di almeno una regola per fornire l’accesso alle tue reti interne e/o per Internet poiché di default nel firewall se non esistono regole, tutto il traffico è bloccato.
Aggiungere ACL Entry per Unbound DNS (Opzionale se non automatico)
Se prevedi di utilizzare l’interfaccia WireGuard per fornire servizio DNS anziché un altro server DNS sulla rete, potrebbe esserci la possibilità che sia necessario aggiungere una voce all’ACL (Access Control List) Unbound DNS per consentire all’interfaccia WireGuard di accedere al server Unbound DNS in OPNsense. Per la mia configurazione, è stato aggiunto automaticamente, se hai problemi con l’accesso al tuo server DNS tramite l’interfaccia WireGuard (nel mio esempio, il server DNS sarebbe 10.0.0.1), dovresti controllare la tua configurazione ACL andando alla pagina “Services > Unbound DNS > Access list”. Fare clic su “Aggiungi” per accedere alla rete WireGuard di 10.0.0.1/24 (per esempio) nell’ACL.