Internet è un posto pericoloso, soprattutto se lasci i tuoi dati non crittografati o senza un'adeguata sicurezza. Esistono diversi modi per proteggere i tuoi dati; il tutto a diversi livelli. Dovresti sempre disporre di criteri firewall efficaci, crittografia dei dati e criteri password efficaci. Un altro modo per proteggere i tuoi dati è accedervi utilizzando una connessione VPN.
Virtual Private Network (o VPN) è un metodo di connessione utilizzato per aggiungere sicurezza e privacy alle reti private e pubbliche, proteggendo i tuoi dati.
OpenVPN è una soluzione VPN SSL open source completa per proteggere le comunicazioni. Può essere utilizzato per l'accesso remoto o la comunicazione tra diversi server o data center. Può essere installato on-premise o nel cloud, in diversi sistemi operativi e può essere configurato con molte opzioni di sicurezza.
In questo blog creeremo una connessione VPN per accedere a un database nel cloud. Esistono diversi modi per raggiungere questo obiettivo, a seconda dell'infrastruttura e della quantità di risorse hardware che si desidera utilizzare per questa attività.
Ad esempio, puoi creare due VM, una in locale e un'altra nel cloud, e potrebbero fungere da bridge per connettere la tua rete locale alla rete cloud del database tramite un peer-to- Connessione VPN peer.
Un'altra opzione più semplice potrebbe essere la connessione a un server VPN installato nel nodo del database utilizzando una connessione client VPN configurata nella macchina locale. In questo caso, utilizzeremo questa seconda opzione. Vedrai come configurare un server OpenVPN nel nodo del database in esecuzione nel cloud e potrai accedervi utilizzando un client VPN.
Per il nodo database, utilizzeremo un'istanza Amazon EC2 con il seguente configurazione:
- OS:Ubuntu Server 18.04
- Indirizzo IP pubblico:18.224.138.210
- Indirizzo IP privato:172.31.30.248/20
- Porte TCP aperte:22, 3306, 1194
Come installare OpenVPN su Ubuntu Server 18.04
Il primo compito è installare il server OpenVPN nel nodo del database. In realtà, la tecnologia di database utilizzata non ha importanza poiché stiamo lavorando su un livello di rete, ma a scopo di test dopo aver configurato la connessione VPN, diciamo che stiamo utilizzando Percona Server 8.0.
Quindi iniziamo installando i pacchetti OpenVPN.
$ apt install openvpn easy-rsa
Poiché OpenVPN utilizza i certificati per crittografare il tuo traffico, avrai bisogno di EasyRSA per questa attività. È un'utilità della CLI per creare un'autorità di certificazione radice e richiedere e firmare certificati, inclusi sub-CA ed elenchi di revoche di certificati.
Nota:è disponibile una nuova versione di EasyRSA, ma per mantenere l'attenzione sull'installazione di OpenVPN, utilizziamo la versione EasyRSA disponibile nel repository atm di Ubuntu 18.04 (EasyRSA versione 2.2.2- 2).
Il comando precedente creerà la directory /etc/openvpn/ per la configurazione di OpenVPN e la directory /usr/share/easy-rsa/ con gli script e la configurazione di EasyRSA.
Per semplificare questa operazione, creiamo un collegamento simbolico al percorso EasyRSA nella directory OpenVPN (oppure puoi semplicemente copiarlo):
$ ln -s /usr/share/easy-rsa /etc/openvpn/
Ora devi configurare EasyRSA e creare i tuoi certificati. Vai alla posizione di EasyRSA e crea un backup per il file "vars":
$ cd /etc/openvpn/easy-rsa
$ cp vars vars.bak
Modifica questo file e cambia le seguenti righe in base alle tue informazioni:
$ vi vars
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]"
export KEY_OU="MyOrganizationalUnit"
Quindi, crea un nuovo collegamento simbolico al file openssl:
$ cd /etc/openvpn/easy-rsa
$ ln -s openssl-1.0.0.cnf openssl.cnf
Ora, applica il file vars:
$ cd /etc/openvpn/easy-rsa
$ . vars
NOTA:se esegui ./clean-all, eseguirò un rm -rf su /etc/openvpn/easy-rsa/keys
Esegui lo script clean-all:
$ ./clean-all
E crea la chiave Diffie-Hellman (DH):
$ ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.....................................................................................................................................................................+
Quest'ultima azione potrebbe richiedere alcuni secondi e, al termine, avrai un nuovo file DH all'interno della directory "keys" nella directory EasyRSA.
$ ls /etc/openvpn/easy-rsa/keys
dh2048.pem
Ora creiamo i certificati CA.
$ ./build-ca
Generating a RSA private key
..+++++
...+++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
...
Questo creerà ca.crt (certificato pubblico) e ca.key (chiave privata). Il certificato pubblico sarà richiesto in tutti i server per connettersi alla VPN.
$ ls /etc/openvpn/easy-rsa/keys
ca.crt ca.key
Ora che hai creato la tua CA, creiamo il certificato del server. In questo caso, lo chiameremo "openvpn-server":
$ ./build-key-server openvpn-server
Generating a RSA private key
.......................+++++
........................+++++
writing new private key to 'openvpn-server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
...
Certificate is to be certified until Dec 23 22:44:02 2029 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Questo creerà i file CRT, CSR e Key per il server OpenVPN:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-server.crt openvpn-server.csr openvpn-server.key
Ora devi creare il certificato client e il processo è abbastanza simile:
$ ./build-key openvpn-client-1
Generating a RSA private key
.........................................................................................+++++
.....................+++++
writing new private key to 'openvpn-client-1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
...
Certificate is to be certified until Dec 24 01:45:39 2029 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Questo creerà i file CRT, CSR e Key per il client OpenVPN:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-client-1.csr openvpn-client-1.crt openvpn-client-1.key
A questo punto, hai tutti i certificati pronti. Il prossimo passo sarà creare la configurazione OpenVPN sia del server che del client.
Configurazione del server OpenVPN
Come accennato, l'installazione di OpenVPN creerà la directory /etc/openvpn, dove aggiungerai i file di configurazione per entrambi i ruoli del server e del client, e ha un file di configurazione di esempio per ognuno in / usr/share/doc/openvpn/examples/sample-config-files/, così puoi copiare i file nella posizione indicata e modificarli come desideri.
In questo caso, utilizzeremo solo il file di configurazione del server, poiché si tratta di un server OpenVPN:
$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ gunzip /etc/openvpn/server.conf.gz
Ora, vediamo un file di configurazione del server di base:
$ cat /etc/openvpn/server.conf
port 1194
# Which TCP/UDP port should OpenVPN listen on?
proto tcp
# TCP or UDP server?
dev tun
# "dev tun" will create a routed IP tunnel,"dev tap" will create an ethernet tunnel.
ca /etc/openvpn/easy-rsa/keys/ca.crt
# SSL/TLS root certificate (ca).
cert /etc/openvpn/easy-rsa/keys/openvpn-server.crt
# Certificate (cert).
key /etc/openvpn/easy-rsa/keys/openvpn-server.key
# Private key (key). This file should be kept secret.
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
# Diffie hellman parameters.
server 10.8.0.0 255.255.255.0
# Configure server mode and supply a VPN subnet.
push "route 172.31.16.0 255.255.240.0"
# Push routes to the client to allow it to reach other private subnets behind the server.
keepalive 20 120
# The keepalive directive causes ping-like messages to be sent back and forth over the link so that each side knows when the other side has gone down.
cipher AES-256-CBC
# Select a cryptographic cipher.
persist-key
persist-tun
# The persist options will try to avoid accessing certain resources on restart that may no longer be accessible because of the privilege downgrade.
status /var/log/openvpn/openvpn-status.log
# Output a short status file.
log /var/log/openvpn/openvpn.log
# Use log or log-append to override the default log location.
verb 3
# Set the appropriate level of log file verbosity.
Nota:cambia i percorsi dei certificati in base al tuo ambiente.
E quindi, avvia il servizio OpenVPN utilizzando il file di configurazione creato:
$ systemctl start [email protected]
Verifica se il servizio è in ascolto nella porta corretta:
$ netstat -pltn |grep openvpn
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 20002/openvpn
Infine, nel server OpenVPN, devi aggiungere la linea di inoltro IP nel file sysctl.conf per consentire il traffico VPN:
$ echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
Ed esegui:
$ sysctl -p
net.ipv4.ip_forward = 1
Ora, vediamo come configurare un client OpenVPN per connettersi a questa nuova VPN.
Configurazione del client OpenVPN
Nel punto precedente, abbiamo menzionato i file di configurazione di esempio di OpenVPN e abbiamo utilizzato quello del server, quindi ora facciamo lo stesso ma utilizzando il file di configurazione del client.
Copia il file client.conf da /usr/share/doc/openvpn/examples/sample-config-files/ nella posizione corrispondente e modificalo come desideri.
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
Avrai anche bisogno dei seguenti certificati creati in precedenza per configurare il client VPN:
ca.crt
openvpn-client-1.crt
openvpn-client-1.key
Quindi, copia questi file sul tuo computer locale o VM. Dovrai aggiungere questo percorso di file nel file di configurazione del client VPN.
Ora, vediamo un file di configurazione di base del client:
$ cat /etc/openvpn/client.conf
client
# Specify that we are a client
dev tun
# Use the same setting as you are using on the server.
proto tcp
# Use the same setting as you are using on the server.
remote 18.224.138.210 1194
# The hostname/IP and port of the server.
resolv-retry infinite
# Keep trying indefinitely to resolve the hostname of the OpenVPN server.
nobind
# Most clients don't need to bind to a specific local port number.
persist-key
persist-tun
# Try to preserve some state across restarts.
ca /Users/sinsausti/ca.crt
cert /Users/sinsausti/openvpn-client-1.crt
key /Users/sinsausti/openvpn-client-1.key
# SSL/TLS parms.
remote-cert-tls server
# Verify server certificate.
cipher AES-256-CBC
# Select a cryptographic cipher.
verb 3
# Set log file verbosity.
Nota:cambia i percorsi dei certificati in base al tuo ambiente.
Puoi utilizzare questo file per connetterti al server OpenVPN da diversi sistemi operativi come Linux, macOS o Windows.
In questo esempio, useremo l'applicazione Tunnelblick per connetterci da un client macOS. Tunnelblick è un'interfaccia utente grafica open source gratuita per OpenVPN su macOS. Fornisce un facile controllo dei client OpenVPN. Viene fornito con tutti i pacchetti necessari come OpenVPN, EasyRSA e driver tun/tap.
Poiché i file di configurazione di OpenVPN hanno estensioni di .tblk, .ovpn o .conf, Tunnelblick può leggerli tutti.
Per installare un file di configurazione, trascinalo sull'icona Tunnelblick nella barra dei menu o nell'elenco delle configurazioni nella scheda "Configurazioni" della finestra "Dettagli VPN".
E poi, premi su "Connetti".
Ora dovresti avere dei nuovi percorsi nella tua macchina client:
$ netstat -rn # or route -n on Linux OS
Destination Gateway Flags Netif Expire
10.8.0.1/32 10.8.0.5 UGSc utun5
10.8.0.5 10.8.0.6 UH utun5
172.31.16/20 10.8.0.5 UGSc utun5
Come puoi vedere, esiste un percorso verso la rete del database locale tramite l'interfaccia VPN, quindi dovresti essere in grado di accedere al servizio del database utilizzando l'indirizzo IP del database privato.
$ mysql -p -h172.31.30.248
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.18-9 Percona Server (GPL), Release '9', Revision '53e606f'
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Funziona. Ora hai il tuo traffico protetto utilizzando una VPN per connetterti al nodo del tuo database.
Conclusione
Proteggere i tuoi dati è un must se accedi ad essi su Internet, in locale o in un ambiente misto. Devi sapere come crittografare e proteggere il tuo accesso remoto.
Come puoi vedere, con OpenVPN puoi raggiungere il database remoto utilizzando la rete locale tramite una connessione crittografata utilizzando certificati autofirmati. Quindi, OpenVPN sembra un'ottima opzione per questa attività. È una soluzione open source e l'installazione/configurazione è piuttosto semplice. Abbiamo utilizzato una configurazione di base del server OpenVPN, quindi puoi cercare una configurazione più complessa nella documentazione ufficiale di OpenVPN per migliorare il tuo server OpenVPN.