Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di OpenVPN per proteggere l'accesso al tuo cluster di database nel cloud

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.