Realizzare un server VPN

Strumenti e tecniche avanzate per gestire e ottimizzare le prestazioni della rete domestica o aziendale.
Rispondi
FrancyDotNet
Moderatore
Moderatore
Messaggi: 969
Iscritto il: 01/05/2024, 23:26

Realizzare un server VPN

Messaggio da FrancyDotNet »

INSTALLARE UN SERVER VPN PER WINDOWS
1. Installazione di OpenVPN
Scaricare e installare l'ultima versione di OpenVPN per Windows (ad oggi la versione più recente è la 2.4.6 rilasciata il 2 aprile 2018).

Immagine


Durante la fase di installazione dei componenti consiglio di spuntare la casella EasyRSA 2 e Certificate Management Scripts.

Immagine


Il percorso dell'installazione è (come sempre) facoltativo.

Immagine


Tenere presente che alla comparsa della richiesta "Installare questo software di dispositivo", bisognerà rispondere affermativamente altrimenti il dispositivo "TAP-Windows Adapter V9" non funzionerà e quindi verrà compromessa anche l'installazione del programma OpenVPN.

Immagine


Fatto questo l'installazione procederà al termine.

Immagine




2. Creazione certificati digitali
Prima di configurare il nostro software VPN dobbiamo avere a nostra disposizione i certificati digitali per garantire la pretazione dei dati durante la trasmissione dei dati.
Apriamo il Prompt dei comandi di Windows come amministratore e posizioniamoci sulla directory di OpenVPN, in particolare accediamo alla sotto cartella easy-rsa.

Codice: Seleziona tutto

cd %programfiles%\OpenVPN\easy-rsa
Se è la prima volta che eseguiamo questa procedura, lanciamo il comando init-config.bat altrimenti potete saltare questo passaggio.

Codice: Seleziona tutto

init-config
Con questo comando verrà generato il file vars.bat oppure verrà sovrascritto se esisteva già (perdendo eventuali modifiche effettuate in precedenza). Una volta creato, Per questioni di praticità si consiglia di modificarlo con un editor di testo.

Codice: Seleziona tutto

set KEY_COUNTRY=IT
set KEY_PROVINCE=MI
set KEY_CITY=Milano
set KEY_ORG=OpenVPN
set KEY_EMAIL=info@glitchinside.it
A mio modesto avviso questo file merita un attenzione in più visto che andremo a modificarlo. Di seguito vi propongo la versione standard con i commenti tradotti e la parte relativa alla creazione dei certificati modificate.
vars.bat ha scritto:@echo off
rem Modifica questa variabile per puntare al
rem file openssl.cnf incluso con easy-rsa.

rem Automaticamente imposta la variabile PATH
rem con la directory di openssl.exe
rem In alternativa definire PATH con la
rem directory di openssl.exe manualmente
rem set "PATH=%PATH%;C:\Program Files\OpenVPN\bin"
FOR /F "tokens=2*" %%a IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\OpenVPN"') DO set "PATH=%PATH%;%%b\bin"

rem Definire la directory di Easy-RSA...
set HOME=%ProgramFiles%\OpenVPN\easy-rsa
rem ...e del file di configurazione
set KEY_CONFIG=openssl-1.0.0.cnf

rem Modifica questa variabile per puntare alla
rem directory che verrà creata all'interno della
rem cartella easy-rsa.
rem ATTENZIONE: clean-al eseguira il comando
rem rm -rf su questa directory quindi assicurati
rem di definire la variabile correttamente!
set KEY_DIR=keys

rem Aumentare questo valore solo se siete paranoici.
rem Tuttavia questo rallenterà le prestazioni di
rem negoziazione TLS così come i parametri DH unici
rem durante il processo di generazione.
set DH_KEY_SIZE=2048

rem Dimensioni chiave privata
set KEY_SIZE=4096

rem Questi sono i valori predefiniti per i campi
rem che verranno inseriti nel certificato.
rem Cambiare queste voci in modo che rifletta il tuo sito.
rem Non lasciare nessuno di questi parametri in bianco.

rem Paese / Nazione
set KEY_COUNTRY=IT
rem La provincia
set KEY_PROVINCE=VR
rem La città
set KEY_CITY=Custoza
rem Nome dell'organizzazione
set KEY_ORG=Glitch Inside
rem Indirizzo e-mail
set KEY_EMAIL=info@glitchinside.it
rem nome comune (UNICO per questo CA)
set KEY_CN=Glitch Inside CA
rem nome e...
set KEY_NAME=Glitch
rem ...unità organizzativa
set KEY_OU=Dipartimento IT
set PKCS11_MODULE_PATH=changeme
set PKCS11_PIN=1234
Salviamo e chiudiamo l'editor di testo (non ci servirà più per questa procedura), torniamo al Prompt dei comandi e lanciamo lo script appena creato.

Codice: Seleziona tutto

vars
ATTENZIONE: SOLO per la prima volta che eseguiamo questa procedura, lanciamo il comando clean-all. Con questo comando verrà eliminata la cartella keys e tutto il suo contenuto (ivi incluso il database dei certificati da noi generati in precedenza). Diversamente potete saltare questo passaggio.

Codice: Seleziona tutto

clean-all
Creazione certificato CA: Ora generiamo i certificati ed iniziando col certificato CA di root scrivendo il comando build-ca nella nostra console.

Codice: Seleziona tutto

build-ca
Quest'ultimo comando si occuperà di generare il certificato di Autorità di certificazione radice (valido per i prossimi 10 anni) che servirà per autorizzare tutti i certificati digitali utilizzati sulla nostra VPN.
I valori visualizzati sullo schermo sono proprio quelli che abbiamo modificato poco fa, quindi basterà premere INVIO per confermare i valori racchiusi fra le parentesi quadre, uno ad uno, fino ad arrivare alla voce Organizational Unit Name. Da qui in poi dovremo sostituire i valori changeme con i valori corretti.

Creazione certificato lato server: Ora creiamo il certificato che verrà utilizzato dal nostro server scrivendo il comando build-key-server mioserver nella nostra console, dove "mioserver" è il nome del certificato e della chiave che verranno generati.

Codice: Seleziona tutto

build-key-server mioserver
Anche stavolta basterà premere INVIO per confermare i valori racchiusi fra le parentesi quadre fino ad arrivare alla voce Organizational Unit Name, da qui in poi dovremo sostituire i valori changeme con i valori relativi al nostro server.
Successivamente ci verrà richiesto (in via del tutto facoltativa) di compilare i campi A challenge password e An optional company name: si possono compilare oppure lasciar vuoti.
Alla fine della procedura ci verrà chiesto se firmare i certificati: rispondere affermativamente digitando Y e poi INVIO. Poi ci verrà chiesto se registrare il valore appena creato: rispondere affermativamente digitando Y e poi INVIO.

Creazione certificato lato client: Ora creiamo il certificato che verrà utilizzato dal nostro client scrivendo il comando build-key mioclient nella nostra console, dove "mioclient" è il nome del certificato e della chiave che verranno generati.

Codice: Seleziona tutto

build-key mioclient
Ancora una volta premere INVIO per confermare i valori predefiniti racchiusi fra le parentesi quadre fino ad arrivare alla voce Organizational Unit Name, da qui in poi dovremo sostituire i valori changeme con i valori relativi al nostro client.

:sign_attention: Attenzione soprattutto al valore CN (Common Name) non può essere uguale a quello del server, altrimento verrà visualizzato l'errore "failed to update database TXT_DB error number 2".

Alla fine ci verrà richiesto in via del tutto facoltativa di compilare i campi A challenge password e An optional company name: si possono compilare oppure lasciar vuoti. Ovviamente quando ci verrà chiesto se firmare i certificati rispondo affermativamente digitando Y e poi INVIO.

Scambio di chiavi Diffie-Hellman: Per concludere digitiamo dal prompt il comando build-dh e attendere qualche minuto durante l'elaborazione

Codice: Seleziona tutto

build-dh
Consiglio prendetevi un caffè e non fate nulla mentre il programma è in esecuzione. Purtroppo in passato mi è già capiato di interropere la procedura aprendo altri programmi e quindi di dover rilanciare il comando. D'esperienza vi posso dire che a seconda della velocità del vostro terminale l'attesa può andare da 1 a 5 minuti circa.
Se lo desiderate potete uscire dal Prompt dei Comandi digitando EXIT e INVIO.


3. Configurazione lato server
Ora dovete prelevare files relativi al server(li trovate nella cartella %programfiles%\OpenVPN\easy-rsa\keys) e copiarli nella cartella config. Questa cartella sotto a Windows XP la trovate in %programfiles%\OpenVPN\config mentre da Windows Vista in poi la trovate in %userprofile%\OpenVPN\config.
  • ca.crt
  • dh4096.pem
  • mioserver.crt
  • mioserver.key
Bene, a questo punto passiamo alla configurazione al file di profilo del server di OpenVPN.
Prendiamo i due files server.ovpn e client.ovpn presenti nella cartella %programfiles%\OpenVPN\sample-config e li copiamo nella cartella config.
Consiglio di editare questi files con un editor avanzato (es. Notepad++) poichè il blocco note di Windows non offre le stessa operabilità.
Apriamo il file <...>\config\server.ovpn e modifichiamo le righe seguenti:
server.ovpn ha scritto: # Any X509 key management system can be used.
# OpenVPN can also use a PKCS #12 formatted key file
# (see "pkcs12" directive in man page).
ca ca.crt
cert server.crt
key server.key # This file should be kept secret

# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh2048.pem 2048
dh dh2048.pem
Andiamo a sostituite questi valori come segue:

Codice: Seleziona tutto

# Any X509 key management system can be used.
# OpenVPN can also use a PKCS #12 formatted key file
# (see "pkcs12" directive in man page).
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\server.crt"
key "C:\\Program Files\\OpenVPN\\config\\server.key"

# Diffie hellman parameters.
# Generate your own with:
#   openssl dhparam -out dh2048.pem 2048
dh "C:\\Program Files\\OpenVPN\\config\\dh2048.pem"
Facoltativo: il server OpenVPN di default utilizza la subnet 10.8.0.x, questo permette di veicolare il traffico dati su un'altra rete. Tuttavia può capitare di voler accedere alla rete locale 192.168.1.x dall'esterno di un'azienda. Per fare questo dobbiamo modificare questo blocco:
server.ovpn ha scritto: ;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
Al loro posto si dovrà digitare (senza il ; iniziale):
togliamo il commento (ovvero il ; all'inizio delal riga) e sostituiamo le due righe con

Codice: Seleziona tutto

push "route 192.168.1.0 255.255.255.0"
Suggerisco inoltre di veicolare tutto il traffico attraverso la VPN decommentando queste righe:

Codice: Seleziona tutto

push "redirect-gateway def1 bypass-dhcp"
...e anche queste qualche riga più più sotto:

Codice: Seleziona tutto

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Attenzione gente, se si sceglie di veicolare il traffico tramite il proprio server bisogna abilitare il Routing IP. Passiamo ancora per il Prompt dei comandi e scriviamo questo comando per abilitare questa caratteristica:

Codice: Seleziona tutto

reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v IPEnableRouter /t REG_DWORD /d 1 /f
Infine poco più sotto decommentiamo la riga client-to-client in modo tale da permettere ai client di "vedersi" reciprocamente.

Codice: Seleziona tutto

client-to-client
Per avere un'autenticazione più solida e sicura suggerisco di creare una chiave tls-auth. Torniamo dal Prompt dei comandi digitare:

Codice: Seleziona tutto

"%programfiles%\OpenVPN\bin\openvpn" --genkey --secret "%programfiles%\OpenVPN\config\ta.key"
Scorriamo in basso di qualche riga e cerchiamo questo argomento:
server.ovpn ha scritto: tls-auth ta.key 0 # This file is secret
e sostituiamolo con questo:

Codice: Seleziona tutto

tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 0

4. Configurazione lato client
A questo punto ci si può spostare sulla configurazione del client OpenVPN, i passaggi sono molti simili a quelli appena eseguiti per il server me più semplificati.
Per prima cosa dobbiamo prelevare i certificati relativi al client (li trovate sempre nella cartella %programfiles%\OpenVPN\easy-rsa\keys) e copiarli nella cartella config.
  • ca.crt
  • mioclient.crt
  • mioclient.key
A questo punto passiamo alla configurazione al file di profilo del client di OpenVPN, quindi apriamo il file <...>\config\client.ovpn e modifichiamo le righe seguenti:
client.ovpn ha scritto: # SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
ca ca.crt
cert client.crt
key client.key
Andiamo a sostituite questi valori come segue:

Codice: Seleziona tutto

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
ca "C:\\Program Files\\OpenVPN\\config\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\mioclient.crt"
key "C:\\Program Files\\OpenVPN\\config\\mioclient.key"
Successivamente individuiamo la riga remote my-server-1 1194 e al suo posto indichiamo l'indirizzo del server OpenVPN seguito dalla porta di accesso.

Codice: Seleziona tutto

remote 192.168.1.101 1194
Scorrendo più in basso so dovrà eliminare il blocco seguente:
client.ovpn ha scritto: # If a tls-auth key is used on the server
# then every client must also have the key.
tls-auth ta.key 1
Se avete impostato una chiave TSL-AUTH dovrete incollare il contenuto del file %programfiles%\OpenVPN\config\ta.key alla fine del file client.ovpn:

Codice: Seleziona tutto

key-direction 1
<tls-auth>
# Incollare qui il contenuto del file %programfiles%\OpenVPN\config\ta.key
</tls-auth>
block-outside-dns
Facoltativo: A questo punto è importante verificare che il sistema Windows sul quale si è installato il server di OpenVPN utilizzi un IP privato statico (inserirlo definitivamente nelle impostazioni dell'interfaccia di rete, accertandosi che tale IP non possa mai essere usato da altri sistemi).
Sempre dal prompt dei comandi aperto con i diritti di amministratore, digitare quanto segue:
route add 10.8.0.0 mask 255.255.255.0 192.168.1.250
Nel nostro caso, l'IP locale della macchina Windows sul quale è installato OpenVPN è 192.168.1.250 (effettuare la sostituzione corretta).

Premendo la combinazione di tasti Windows+R e digitando ncpa.cpl, si dovrà cliccare con il tasto destro sull'interfaccia di rete Ethernet abitualmente utilizzata (non quindi su TAP-Windows Adapter V9), su Proprietà, sulla scheda Condivisione quindi attivare la casella Consenti ad altri utenti di rete di collegarsi tramite la connessione Internet di questo computer.

Adesso è finalmente possibile procedere con l'avvio del servizio di OpenVPN.
Per procedere, suggeriamo di premere la combinazione di tasti Windows+R, digitare services.msc, individuare OpenVPNService e farvi doppio clic.

Alla comparsa della finestra in figura, si potrà cliccare sul pulsante Avvia e configurare Automatico (avvio ritardato) come Tipo di avvio in modo tale che la VPN sia sempre disponibile a ogni accensione o riavvio della macchina.
Prima di proseguire, è comunque fondamentale riavviare il sistema sul quale è stato appena installato il server di OpenVPN.
Ricordiamo infine che qualunque modifica alla configurazione del server di OpenVPN, verrà presa in carico solo dopo il riavvio del servizio di sistema.
Per riavviare il servizio di OpenVPN in modo veloce, si può aprire il prompt dei comandi e digitare:

Codice: Seleziona tutto

sc stop OpenVPNService
sc start OpenVPNService
Il firewall integrato in Windows deve essere quindi configurato in modo tale da consentire le richieste di connessione in ingresso sulla porta UDP 1194.
Per procedere, al prompt dei comandi aperto con i diritti di amministratore, si deve scrivere:
netsh firewall add portopening UDP 1194 "OpenVPN Server"

Portandosi infine nel pannello di amministrazione del router, si dovrà attivare l'inoltro del traffico (port forwarding) sulla porta UDP 1194.

Questo post prende spunto da: Easy Windows Guide
FrancyDotNet
Moderatore
Moderatore
Messaggi: 969
Iscritto il: 01/05/2024, 23:26

Re: Realizzare un server VPN

Messaggio da FrancyDotNet »

:msg_rockon: A completamento volevo aggiungere alcuni :sign_duke: test che si possono fare durante e post installazione.
Durante gli esempi utilizzerò 2 pc:
  • Il :pc_7: primo computer, quello che fa da server, ha indirizzo IP: 192.168.1.11
  • Il :pc_8: secondo computer, quello che fa da client, ha indirizzo IP: 192.168.1.12
1. Un semplice tunnel senza chiave di sicurezza
Come primo caso creeremo un tunnel VPN fra due computer senza chiavi di sicurezza.

:pc_5: Sul primo pc scriveremo:

Codice: Seleziona tutto

openvpn --remote 192.168.1.11 --dev tun --ifconfig 10.8.0.1 10.8.0.2
:pc_6: Mentre sul secondo pc scriveremo:

Codice: Seleziona tutto

openvpn --remote 192.168.1.12 --dev tun --ifconfig 10.8.0.2 10.8.0.1

2. Un tunnel con chiave di sicurezza statica
Come primo caso creeremo un tunnel VPN fra due computer senza chiavi di sicurezza.

Creiamo sul pc lato server la chiave di sicurezza:

Codice: Seleziona tutto

openvpn --genkey --secret key
Successivamente dovremo copiare tale chiave anche sul pc lato client

:pc_1: Sul primo pc scriveremo:

Codice: Seleziona tutto

openvpn --remote 192.168.1.11 --dev tun --ifconfig 10.8.0.1 10.8.0.2 --secret key
:pc_2: Mentre sul secondo pc scriveremo:

Codice: Seleziona tutto

openvpn --remote 192.168.1.12 --dev tun --ifconfig 10.8.0.2 10.8.0.1 --secret key

3. Un tunnel con sicurezza completa basata su TLS

:pc_3: Sul primo pc scriveremo:

Codice: Seleziona tutto

openvpn --remote 192.168.1.11 --dev tun --ifconfig 10.8.0.1 10.8.0.2 --tls-client --ca tmp-ca.crt --cert client.crt --key client.key --reneg-sec 60
:pc_4: Mentre sul secondo pc scriveremo:

Codice: Seleziona tutto

openvpn --remote 192.168.1.12 --dev tun --ifconfig 10.8.0.2 10.8.0.1 --tls-server --dh dh2048.pem --ca tmp-ca.crt --cert server.crt --key server.key --reneg-sec 60

https://community.openvpn.net/openvpn/w ... n20ManPage
https://openvpn.net/community-resources ... ini-howto/
FrancyDotNet
Moderatore
Moderatore
Messaggi: 969
Iscritto il: 01/05/2024, 23:26

Re: Realizzare un server VPN

Messaggio da FrancyDotNet »

INSTALLARE UN SERVER VPN PER LINUX :ugeek:
Rispondi

Torna a “Amministrazione di rete”