Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation d'OpenVPN pour sécuriser l'accès à votre cluster de bases de données dans le cloud

Internet est un endroit dangereux, surtout si vous laissez vos données non cryptées ou sans sécurité adéquate. Il existe plusieurs façons de sécuriser vos données; le tout à différents niveaux. Vous devez toujours disposer d'une politique de pare-feu, d'un chiffrement des données et d'une politique de mot de passe solides. Une autre façon de sécuriser vos données consiste à y accéder à l'aide d'une connexion VPN.

Le réseau privé virtuel (ou VPN) est une méthode de connexion utilisée pour renforcer la sécurité et la confidentialité des réseaux privés et publics, en protégeant vos données.

OpenVPN est une solution VPN SSL open source complète pour sécuriser les communications. Il peut être utilisé pour l'accès à distance ou la communication entre différents serveurs ou centres de données. Il peut être installé sur site ou dans le cloud, dans différents systèmes d'exploitation, et peut être configuré avec de nombreuses options de sécurité.

Dans ce blog, nous allons créer une connexion VPN pour accéder à une base de données dans le cloud. Il existe différentes manières d'atteindre cet objectif, en fonction de votre infrastructure et de la quantité de ressources matérielles que vous souhaitez utiliser pour cette tâche.

Par exemple, vous pouvez créer deux VM, une sur site et une autre dans le cloud, et elles pourraient constituer un pont pour connecter votre réseau local au réseau cloud de la base de données via un Peer-to- Connexion VPN pair.

Une autre option plus simple pourrait être de se connecter à un serveur VPN installé dans le nœud de la base de données à l'aide d'une connexion client VPN configurée sur votre ordinateur local. Dans ce cas, nous utiliserons cette deuxième option. Vous verrez comment configurer un serveur OpenVPN dans le nœud de base de données exécuté dans le cloud, et vous pourrez y accéder à l'aide d'un client VPN.

Pour le nœud de base de données, nous utiliserons une instance Amazon EC2 avec le configuration suivante :

  • SE :Serveur Ubuntu 18.04
  • Adresse IP publique :18.224.138.210
  • Adresse IP privée :172.31.30.248/20
  • Ports TCP ouverts :22, 3306, 1194

Comment installer OpenVPN sur Ubuntu Server 18.04

La première tâche consiste à installer le serveur OpenVPN dans votre nœud de base de données. En fait, la technologie de base de données utilisée n'a pas d'importance car nous travaillons sur une couche réseau, mais à des fins de test après avoir configuré la connexion VPN, disons que nous exécutons Percona Server 8.0.

Commençons donc par installer les packages OpenVPN.

$ apt install openvpn easy-rsa

Comme OpenVPN utilise des certificats pour chiffrer votre trafic, vous aurez besoin d'EasyRSA pour cette tâche. Il s'agit d'un utilitaire CLI pour créer une autorité de certification racine, et demander et signer des certificats, y compris des sous-autorités de certification et des listes de révocation de certificats.

Remarque :une nouvelle version d'EasyRSA est disponible, mais pour rester concentré sur l'installation d'OpenVPN, utilisons la version d'EasyRSA disponible dans le référentiel Ubuntu 18.04 atm (EasyRSA version 2.2.2- 2).

La commande précédente créera le répertoire /etc/openvpn/ pour la configuration OpenVPN, et le répertoire /usr/share/easy-rsa/ avec les scripts et la configuration EasyRSA.

Pour faciliter cette tâche, créons un lien symbolique vers le chemin EasyRSA dans le répertoire OpenVPN (ou vous pouvez simplement le copier) :

$ ln -s /usr/share/easy-rsa /etc/openvpn/

Maintenant, vous devez configurer EasyRSA et créer vos certificats. Accédez à l'emplacement EasyRSA et créez une sauvegarde pour le fichier "vars" :

$ cd /etc/openvpn/easy-rsa

$ cp vars vars.bak

Editez ce fichier et modifiez les lignes suivantes en fonction de vos informations :

$ 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"

Ensuite, créez un nouveau lien symbolique vers le fichier openssl :

$ cd /etc/openvpn/easy-rsa

$ ln -s openssl-1.0.0.cnf openssl.cnf

Maintenant, appliquez le fichier vars :

$ cd /etc/openvpn/easy-rsa

$ . vars

REMARQUE :Si vous exécutez ./clean-all, je ferai un rm -rf sur /etc/openvpn/easy-rsa/keys

Exécutez le script de nettoyage :

$ ./clean-all

Et créez la clé Diffie-Hellman (DH) :

$ ./build-dh

Generating DH parameters, 2048 bit long safe prime, generator 2

This is going to take a long time

.....................................................................................................................................................................+

Cette dernière action peut prendre quelques secondes, et lorsqu'elle est terminée, vous aurez un nouveau fichier DH dans le répertoire "keys" du répertoire EasyRSA.

$ ls /etc/openvpn/easy-rsa/keys

dh2048.pem

Maintenant, créons les certificats 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.

...

Cela créera le ca.crt (certificat public) et ca.key (clé privée). Le certificat public sera requis sur tous les serveurs pour se connecter au VPN.

$ ls /etc/openvpn/easy-rsa/keys

ca.crt  ca.key

Maintenant que votre autorité de certification est créée, créons le certificat du serveur. Dans ce cas, nous l'appellerons "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

Cela créera les fichiers CRT, CSR et Key pour le serveur OpenVPN :

$ ls /etc/openvpn/easy-rsa/keys

openvpn-server.crt  openvpn-server.csr openvpn-server.key

Maintenant, vous devez créer le certificat client, et le processus est assez similaire :

$ ./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

Cela créera les fichiers CRT, CSR et Key pour le client OpenVPN :

$ ls /etc/openvpn/easy-rsa/keys

openvpn-client-1.csr  openvpn-client-1.crt openvpn-client-1.key

À ce stade, vous avez tous les certificats prêts. La prochaine étape consistera à créer la configuration OpenVPN du serveur et du client.

Configurer le serveur OpenVPN

Comme nous l'avons mentionné, l'installation d'OpenVPN créera le répertoire /etc/openvpn, où vous ajouterez les fichiers de configuration pour les rôles serveur et client, et il a un exemple de fichier de configuration pour chacun dans / usr/share/doc/openvpn/examples/sample-config-files/, vous pouvez donc copier les fichiers à l'emplacement mentionné et les modifier à votre guise.

Dans ce cas, nous n'utiliserons que le fichier de configuration du serveur, car il s'agit d'un serveur OpenVPN :

$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/

$ gunzip /etc/openvpn/server.conf.gz

Maintenant, voyons un fichier de configuration de base du serveur :

$ 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.

Remarque :Modifiez les chemins de certificat en fonction de votre environnement.

Et ensuite, démarrez le service OpenVPN en utilisant le fichier de configuration créé :

$ systemctl start [email protected]

Vérifiez si le service écoute sur le bon port :

$ netstat -pltn |grep openvpn

tcp        0 0 0.0.0.0:1194            0.0.0.0:* LISTEN   20002/openvpn

Enfin, dans le serveur OpenVPN, vous devez ajouter la ligne de redirection IP dans le fichier sysctl.conf pour autoriser le trafic VPN :

$ echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

Et exécutez :

$ sysctl -p

net.ipv4.ip_forward = 1

Maintenant, voyons comment configurer un client OpenVPN pour se connecter à ce nouveau VPN.

Configuration du client OpenVPN

Dans le point précédent, nous avons mentionné les exemples de fichiers de configuration OpenVPN, et nous avons utilisé celui du serveur, alors faisons maintenant la même chose mais en utilisant le fichier de configuration client.

Copiez le fichier client.conf de /usr/share/doc/openvpn/examples/sample-config-files/ à l'emplacement correspondant et modifiez-le comme vous le souhaitez.

$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/

Vous aurez également besoin des certificats suivants créés précédemment pour configurer le client VPN :

ca.crt

openvpn-client-1.crt

openvpn-client-1.key

Donc, copiez ces fichiers sur votre machine locale ou VM. Vous devrez ajouter cet emplacement de fichiers dans le fichier de configuration du client VPN.

Maintenant, voyons un fichier de configuration client de base :

$ 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.

Remarque :Modifiez les chemins de certificat en fonction de votre environnement.

Vous pouvez utiliser ce fichier pour vous connecter au serveur OpenVPN à partir de différents systèmes d'exploitation comme Linux, macOS ou Windows.

Dans cet exemple, nous utiliserons l'application Tunnelblick pour nous connecter depuis un client macOS. Tunnelblick est une interface utilisateur graphique gratuite et open source pour OpenVPN sur macOS. Il permet un contrôle facile des clients OpenVPN. Il est livré avec tous les packages nécessaires comme OpenVPN, EasyRSA et les pilotes tun/tap.

Comme les fichiers de configuration OpenVPN ont les extensions .tblk, .ovpn ou .conf, Tunnelblick peut tous les lire.

Pour installer un fichier de configuration, glissez-déposez-le sur l'icône Tunnelblick dans la barre de menu ou sur la liste des configurations dans l'onglet 'Configurations' de la fenêtre 'Détails VPN'.

Et puis, appuyez sur "Se connecter".

Maintenant, vous devriez avoir de nouvelles routes sur votre machine 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

Comme vous pouvez le constater, il existe une route vers le réseau de base de données local via l'interface VPN. Vous devriez donc pouvoir accéder au service de base de données à l'aide de l'adresse IP de la base de données privée.

$ 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>

Ça marche. Votre trafic est maintenant sécurisé à l'aide d'un VPN pour vous connecter à votre nœud de base de données.

Conclusion

La protection de vos données est indispensable si vous y accédez via Internet, sur site ou dans un environnement mixte. Vous devez savoir chiffrer et sécuriser votre accès à distance.

Comme vous avez pu le voir, avec OpenVPN, vous pouvez accéder à la base de données distante en utilisant le réseau local via une connexion cryptée à l'aide de certificats auto-signés. Ainsi, OpenVPN semble être une excellente option pour cette tâche. C'est une solution open source, et l'installation/configuration est assez facile. Nous avons utilisé une configuration de serveur OpenVPN de base, vous pouvez donc rechercher une configuration plus complexe dans la documentation officielle d'OpenVPN pour améliorer votre serveur OpenVPN.