GNU/Linux >> Linux Esercitazione >  >> Linux

Come impostare e configurare una VPN con OpenVPN su Ubuntu 18.04

Una VPN è una rete privata virtuale che ti consente di accedere a Internet o ad alcuni servizi anche da una rete non affidabile. In sostanza, è come se fossi fisicamente connesso a una rete privata:puoi ad esempio accedere al tuo conto in banca o effettuare pagamenti senza temere che qualcuno intercetta il traffico generato dal tuo dispositivo.

OpenVPN è una VPN basata sui protocolli TLS (Transport Layer Security) e SSL (Secure Sockets Layer). OpenVPN utilizza alcuni certificati per crittografare il traffico tra il server e il client.

In questo tutorial vedrai come configurare OpenVPN su un server con Ubuntu 18.04.

Per implementare questo tutorial sono necessarie una macchina server e un'altra macchina che agisca da CA (Autorità di Certificazione), che valuterà la validità dei certificati.

Dovrai connetterti al tuo server e alla tua CA tramite una connessione SSH. Se non l'hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH.

Installazione di OpenVPN

Accedi al tuo server.

OpenVPN è già disponibile sul repository ufficiale di Ubuntu di Ubuntu, quindi non è necessario aggiungere altro.

Digita:

sudo apt update
sudo apt install openvpn

A questo punto, OpenVPN sarà stato installato correttamente sul tuo server.

Installazione di EasyRSA

Continua scaricando EasyRSA sul tuo Server e sulla tua CA digitando su entrambi i computer:

wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz

L'ultima versione può essere scaricata da https://github.com/OpenVPN/easy-rsa/releases

$ cd ~
$ sudo tar xvf EasyRSA-3.0.4.tgz

Il nome potrebbe essere diverso a seconda della versione scaricata

Configurazione del server

Completa la configurazione del server digitando:

$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ sudo gzip -d /etc/openvpn/server.conf.gz
$ sudo nano /etc/openvpn/server.conf
  • Trova la sezione che fa riferimento a HMAC ("tls-auth"). Se la riga è commentata, rimuovi ";".

  • Trova la sezione sulla crittografia ("cifra"). Se commentato, rimuovere il ";". Aggiungi una nuova riga contenente il testo "auth SHA256" proprio sotto .

  • Trova la sezione "dh" che definisce i parametri Diffie-Hellman e rimuovi "2048" dal nome ( "dh dh.pem" dovrebbe essere ottenuto).

  • Trova la sezione "utente" e "gruppo" e rimuovi ";" per decommentare le righe.

Configurazione di EasyRSA sulla CA

Dopo aver installato EasyRSA, sulla CA è stato creato un file di configurazione per definire le variabili per la tua CA. Digita:

$ cd ~/EasyRSA-3.0.4/
$ cp vars.example vars
$ nano vars

Rimuovi il "#" dalle istruzioni mostrate nella figura seguente:

Avvia lo script "easyrsa" per inizializzare la Public Key Infrastructure (PKI):

$ sudo ./easyrsa init-pki
$ sudo ./easyrsa build-ca nopass

con questo comando verranno creati due file:

  • ca.crt:certificato CA pubblico utilizzato da server e client per notificare reciprocamente che fanno parte della stessa rete affidabile.

  • ca.key:chiave privata utilizzata dalla macchina CA per firmare chiavi e certificati per server e client. Questo file deve essere conservato solo sulla macchina CA (che non è accessibile da terzi)altrimenti la sicurezza della rete potrebbe essere compromessa.

Ti verrà richiesto di inserire un nome. Lascialo vuoto e premi Invio.

Richiesta di un certificato server dalla CA

Ora che la CA Machine è configurata, chiedi al server di generare una chiave privata e una richiesta di certificato e inviarli alla CA Machine per farli firmare:

$ cd ~/EasyRSA-3.0.4
$ ./easyrsa init-pki
$ ./easyrsa gen-req server nopass

Per semplicità, lascia "server" come nome della macchina, per evitare di apportare diverse modifiche in seguito.

Hai appena creato una chiave privata per il server e una richiesta di certificato chiamata "server.req":

$ sudo cp ~/EasyRSA-v3.0.6/pki/private/server.key /etc/openvpn/

Copia il file server.req sulla macchina CA:

$ sudo scp ~/EasyRSA-3.0.4/pki/reqs/server.req [email protected]_CA_ip:/tmp

Generazione e firma del certificato

Nella tua CA nella cartella EasyRSA, importa il file appena copiato e firmalo:

$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/server.req server
$ sudo ./easyrsa sign-req server server

Digita "yes" e premi Invio.

Trasferisci il certificato firmato e il ca.crt al Server VPN:

$ sudo scp pki/issued/server.crt [email protected]_server_ip:/tmp
$ sudo scp pki/ca.crt [email protected]_server_ip:/tmp

Quindi nel tuo Server

copia i file ricevuti nelle directory appropriate:

$ sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/
$ cd ~/EasyRSA-3.0.4/

Genera una chiave di scambio forte basata su Diffie-Hellman.

$ sudo ./easyrsa gen-dh
$ sudo openvpn --genkey --secret ta.key

Copia i file generati nella cartella "/ etc / openvpn /"

$ sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/
$ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/

Configurazione di un client

Creare una cartella in cui memorizzare certificati e chiavi del client (poiché questa guida presenta un solo client, qui si chiama 'client1', ma l'operazione deve essere ripetuta per ogni client, utilizzando un denominazione)

$ sudo mkdir -p ~/client-configs/keys
$ sudo chmod -R 700 ~/client-configs
$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa gen-req client1 nopass

Premi Invio per accettare il nome standard proposto.

$ sudo cp pki/private/client1.key ~/client-configs/keys/

Copia la chiave del cliente nella cartella precedentemente creata.

$ sudo scp pki/reqs/client1.req [email protected]_CA_IP:/tmp

Invia il file client1.req alla macchina CA.

Importa la richiesta di certificato sulla tua CA:

$ cd ~/EasyRSA-3.0.4/
$ sudo ./easyrsa import-req /tmp/client1.req client1
$ sudo ./easyrsa sign-req client client1

Digita "yes" per autorizzare la firma.

Carica client1.crt sul tuo server:

scp pki/issued/client1.crt [email protected]_SERVER:/tmp

Sul server, copia i seguenti file nelle cartelle appropriate.

$ sudo mkdir -p ~/client-configs/keys

$ sudo chmod -R 700 ~/client-configs

$ sudo cp /tmp/client1.crt ~/client-configs/keys/

$ sudo cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/

$ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

Ora sono stati generati sia i certificati che le chiavi del server e del client.

Configurazione di routing IP e firewall

Modifica le regole di inoltro IP:

$ sudo nano /etc/sysctl.conf

Trova la sezione "net.ipv4.ip_forward" e rimuovi il "#" per rendere l'istruzione "non commentata".

Modifica alcune regole del firewall per instradare correttamente le connessioni client.

$ ip route | grep default

Memorizza il nome dopo "dev" ( denominato "eth0" nella figura seguente):

$ sudo nano /etc/ufw/before.rules

Aggiungi i comandi come nella figura seguente, sostituendo "eth0" con il nome della tua interfaccia di rete.

# START OPENVPN RULES

# NAT table rules

*nat

:POSTROUTING ACCEPT [0:0] 

# Allow traffic from OpenVPN client to eth0 

-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE

COMMIT

# END OPENVPN RULES

Salva ed esci. Ora modifica il file di configurazione UFW:

$ sudo nano /etc/default/ufw

Cambia il valore del parametro "DEFAULT_FORWARD_POLICY" con "ACCEPT".

$ sudo ufw allow 1194/udp

Aggiungi la porta 1194 per il traffico UDP.

$ sudo ufw allow OpenSSH

Riavvia UFW:

$ sudo ufw disable

$ sudo ufw enable

Avvia il servizio OpenVPN:

$ sudo systemctl start openvpn

Controlla lo stato del servizio:

$ sudo systemctl status openvpn

Imposta il servizio all'avvio del server.

$ sudo systemctl enable openvpn

Crea il file di configurazione per il client:

$ sudo mkdir -p ~/client-configs/files
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
$ sudo nano ~/client-configs/base.conf

Trova la sezione "remoto" e assicurati che indichi "Server IP_remoto 1194"

  • IP_Server:scrivere l'IP del server

  • 1194:porta precedentemente selezionata.

Trova la sezione "proto" per assicurarti che il server sia impostato su UDP (troverai la riga TCP commentata con un ";").

Trova la sezione "utente" e "gruppo" e rimuovi ";" per renderli "nessun commento".

Trova le sezioni "ca.crt" - "client.crt" - "client.key" - "ta.key" e commentale con un "#" all'inizio di ogni riga.

Trova la sezione "cifra" e aggiungi l'istruzione "auth SHA256" sotto l'istruzione "cifra AES-256-CBC".

Aggiungi l'istruzione "key-direction 1" in qualsiasi momento.

Aggiungi queste righe commentate in qualsiasi momento. Se il client è una macchina Linux, fallo "senza commenti".

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Salva ed esci.

Generazione della configurazione per i client

Sul tuo Server, crea uno script per compilare automaticamente la configurazione di un client.

nano ~/client-configs/make_config.sh

Copia e incolla il testo:

#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/client-configs/keys

OUTPUT_DIR=~/client-configs/files

BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \

    <(echo -e '<ca>') \

    ${KEY_DIR}/ca.crt \

    <(echo -e '</ca>\n<cert>') \

    ${KEY_DIR}/${1}.crt \

    <(echo -e '</cert>\n<key>') \

    ${KEY_DIR}/${1}.key \

    <(echo -e '</key>\n<tls-auth>') \

    ${KEY_DIR}/ta.key \

    <(echo -e '</tls-auth>') \

    > ${OUTPUT_DIR}/${1}.ovpn

Salva ed esci.

chmod 700 ~/client-configs/make_config.sh

Prova ora a generare la "configurazione" del client client.

$ cd ~/client-configs
$ sudo ./make_config.sh client1

Verrà creato un file chiamato "client1.ovpn".

Ora trasferisci questo file sul dispositivo che desideri utilizzare. Sarà utilizzato dal software VPN per la connessione.

Revocare i certificati del cliente

$ cd EasyRSA-3.0.4/
$ sudo ./easyrsa revoke client1

client1 è il nome del cliente a cui devono essere revocate le autorizzazioni

Digita "yes" per confermare.
Genera e carica il file crl.pem sul tuo server:

$ sudo ./easyrsa gen-crl
$ sudo scp ~/EasyRSA-3.0.4/pki/crl.pem [email protected]_Server:/tmp

Aggiorna la configurazione della tua macchina server per verificare la revoca.

$ sudo cp /tmp/crl.pem /etc/openvpn
$ sudo nano /etc/openvpn/server.conf

Alla fine del file aggiungi "crl-verify crl.pem".

Salva ed esci.

$ sudo systemctl restart [email protected]

Riavvia il server per implementare le modifiche.


Linux
  1. Come installare e configurare Algo VPN Server su Ubuntu 20.04

  2. Come impostare e configurare un'autorità di certificazione su Ubuntu 22.04

  3. Come installare e configurare strongSwan VPN su Ubuntu 18.04

  4. Come installare e configurare il server OpenVPN su Ubuntu 20.04

  5. Come installare e configurare Elasticsearch su Ubuntu 18.04

Come configurare e configurare un server OpenVPN su Ubuntu 22.04

Come configurare una VPN basata su IPsec con Strongswan su Debian e Ubuntu

Come installare e configurare Memcached su Ubuntu Linux

Come installare e configurare ModEvasive con Apache su Ubuntu 18.04

Come configurare un server Seafile con Nginx su Ubuntu 18.04

Come connettersi a una VPN con OpenVPN