Mysql sur TLS sur Ubuntu Top 10.Top 10

Mysql sur TLS sur Ubuntu Top 10.Top 10
Traditionnellement, votre serveur de base de données et votre frontend étaient auparavant sur le même réseau isolé. Cela a permis à Frontend de parler à la base de données sur un canal non crypté sans grand souci de la sécurité. Tout cela a changé au cours des dernières années avec la montée des nuages ​​et des systèmes distribués. Vos applications ne sont plus limitées sur un seul réseau isolé. Maintenant, plus que jamais, la communication entre le frontend et la base de données doit être cryptée et sécurisée.Vous pouvez y parvenir en utilisant un VPN pour virtualiser un réseau isolé. Le frontend et la base de données peuvent faire partie de ce VPN et la communication entre eux sera sécurisée. Ou vous pouvez utiliser TLS, pour crypter les données envoyées à et depuis la base de données, les sites Web de la même manière sécurissent leur communication avec les navigateurs à l'aide de HTTPS. Nous allons installer MySQL et le configurer de telle sorte que les requêtes et le flux de données via TLS.

Installation du serveur MySQL

Le guide est de supposer que vous avez un serveur réservé à MySQL avec une adresse IP statique accessible, peut-être sur le cloud ou quelque part sur votre réseau local. Les commandes suivantes, dans cette sous-section, doivent être exécutées sur le shell du serveur. Installons et configurons rapidement MySQL sur Ubuntu.

$ sudo apt mise à jour
$ sudo apt installer mysql-server
$ sudo mysql_secure_installation

La dernière commande exécutera un script pour modifier certaines des paramètres non sécurisés de MySQL. Le premier serait une invite pour installer un plugin de validation de mot de passe. Cela vérifierait si le nouveau mot de passe que vous définissez pour les utilisateurs est assez fort ou non. Vous pouvez vous retirer de ce plugin, si vous voulez. Après cela, vous serez invité à définir le mot de passe de l'utilisateur racine mysql. Allez-y et définissez un mot de passe utilisateur racine solide.

Appuyez sur Y | Y pour oui, toute autre touche pour non: n
Veuillez définir le mot de passe pour root ici.
Nouveau mot de passe:
Ré-entrez le nouveau mot de passe:

Après cela, vous pouvez à peu près dire Oui À toutes les autres invites de ce script, alors que le script supprime l'utilisateur de test, supprime la base de données de test, désactive la connexion à la racine distante et recharge enfin sa table de privilège. Une fois cela fait, puisque nous avons interdit la connexion à la racine distante, créons une base de données et un nouvel utilisateur qui peuvent accéder à cette base de données à distance sans avoir réellement SSH (ou se connecter) dans la coque UNIX / Linux du serveur. Mais avant de le faire, vérifions si notre construction de mysql a TLS intégré ou non.

Vérification si TLS est disponible

TLS est disponible dans MySQL uniquement si MySQL est compilé pour le faire intégrer. Il n'y a pas de module dynamique à charger. Donc, si vous n'êtes pas sûr que votre package MySQL soit installé ou non TLS, vous pouvez vérifier cela en exécutant:

$ sudo mysql
mysql> Afficher une variable comme '% ssl%'
+---------------+----------+
| Variable_name | Valeur |
+---------------+----------+
| have_openssl | Désactivé |
| have_ssl | Désactivé |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| SSL_CIPHER | |
| ssl_crl | |
| ssl_crlpath | |
| SSL_KEY | |
+---------------+----------+
9 lignes en jeu (0.00 sec)

S'il dit que les variables have_opensessl et have_ssl avoir des valeurs définies sur DÉSACTIVÉ Ensuite, vous avez SSL et vous êtes prêt à partir (vous n'avez qu'à l'activer, en lisant plus loin). Si les valeurs sont définies sur NON, Ensuite, vous devez obtenir une version différente de MySQL de votre gestionnaire de packages ou ailleurs.

MySQL>

Configuration de MySQL

Par défaut, le serveur MySQL écoute uniquement sur l'interface de bouclage, c'est-à-dire sur l'adresse «localhost» ou «127.0.0.1 ', Pour les connexions distantes, nous voulons qu'il écoute également sur la propriété publique publique IP statique. Pour ce faire, ouvrez le fichier, / etc / mysql / mon.CNF et ajoutez les deux lignes suivantes à la toute fin.


[mysqld]
require_secure_transport = on
Bind-Address =

Ici, vous remplacez le avec l'IP réelle de votre serveur. Si vous doutez de la propriété intellectuelle à utiliser, vous pouvez utiliser 0.0.0.0 pour écouter sur toutes les interfaces. Redémarrez maintenant le serveur, pour que la nouvelle configuration ait lieu.

$ sudo Service mysql redémarrage

Création d'un utilisateur distant

Remarque: Si vous souhaitez utiliser la base de données en production, il est probable que le client qui se connectera à cette base de données - votre frontal - aura une IP statique. Si tel est le cas, remplacez le pourcentage de symbole «%» par le client IP approprié. «%» n'est qu'un joker, ce qui signifie «toute valeur». Nous allons configurer notre myuser afin qu'il puisse se connecter à partir de n'importe quelle adresse IP (par exemple, l'évolution de l'adresse IP de votre connexion à haut débit domestique) qui est sans doute précaire.

$ sudo mysql
MySQL> Créer une base de données MyDatabase;
MySQL> Créer l'utilisateur «myuser» @ «%» identifié par «mot de passe» nécessite SSL;
MySQL> Grant tout sur MyDatabase.* À 'Myuser' @ '%';

Remplacer 'mot de passe' avec un mot de passe fort réel et nous avons un utilisateur nommé myuser qui a un accès complet à la base de données mydatabase.

Activer TLS (également connu sous le nom de «SSL»)

Pendant que vous êtes connecté au shell MySQL en tant qu'utilisateur racine MySQL, vous pouvez vérifier l'état de la connexion en tapant \ S:

mysql> \ s
--------------
mysql ver 14.14 DISTRIB 5.7.24, pour Linux (x86_64) en utilisant l'editline Wrapper
ID de connexion: 5
Base de données actuelle:
Utilisateur actuel: root @ localhost
SSL: pas utilisé
Pager actuel: stdout
Utilisation de OutFile: "
Utilisation de délimiter :;
Version du serveur: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
Version du protocole: 10
Connexion: LocalHost via une prise Unix

Faites attention aux lignes en surbrillance sur la connexion et SSL. Alors que cet état est bien pour une connexion locale de l'utilisateur racine, au moment où nous nous connectons sur TLS comme le myuser Le type de connexion sera dépassé TCP / IP et non une prise brute et un chiffre SSL sera utilisé. Il y a une simple commande pour accomplir cela. Mais d'abord, quittons notre invite mysql.

MySQL>

MAINTENANT,

$ sudo mysql_ssl_rsa_setup --uid = mysql
$ sudo Service mysql redémarrage


Une fois cela fait, vous pouvez regarder le Variable harid encore.

$ sudo mysql
mysql> montrent des variables comme «% ssl%»;
+---------------+-----------------+
| Variable_name | Valeur |
+---------------+-----------------+
| have_openssl | Oui |
| have_ssl | Oui |
| ssl_ca | Californie.pem |
| ssl_capath | |
| ssl_cert | serveur de serveur.pem |
| SSL_CIPHER | |
| ssl_crl | |
| ssl_crlpath | |
| SSL_KEY | clé de serveur.pem |
+---------------+-----------------+
9 lignes en jeu (0.01 SEC)

Connexion d'un client MySQL séparé

Il existe de nouveaux paramètres indiquant que le certificat TLS et la clé sont en place et que TLS est activé. Maintenant, vous pouvez vous connecter de cette machine, ouvrir un client MySQL sur votre ordinateur local, si vous n'en avez pas (et utilisez Debian ou Ubuntu), obtenez un client Shell MySQL:

$ sudo apt installer mysql-client
$ mysql -u myuser -p -h

Remplace le myuser et Avec votre nom d'utilisateur et votre serveur IP réel, entrez votre mot de passe choisi et vous devez être connecté à la base de données. Vérifiez la connexion:

mysql> \ s
--------------
mysql ver 14.14 DISTRIB 5.7.24, pour Linux (x86_64) en utilisant l'editline Wrapper
ID de connexion: 5
Base de données actuelle:
Utilisateur actuel: Remote_user @ yourLocalip
SSL: Cipher utilisé est dhe-rsa-aes256-sha
Pager actuel: stdout
Utilisation de OutFile: "
Utilisation de délimiter :;
Version du serveur: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
Version du protocole: 10
Connexion: via TCP / IP
Caractère du serveur: Latin1
DB Personnage: latin1
Personnage client: UTF8
Connecticut. Personnier: UTF8
Port TCP: 3306
Time de disponibilité: 13 min 52 sec
Threads: 2 Questions: 32 Requêtes lentes: 0 Ouvre: 107 Tables à lunçoire: 1
Tables ouvertes: 100 requêtes par seconde AVG: 0.038
--------------

Vous pouvez voir que maintenant il utilise RSA pour crypter votre trafic et que la connexion est à une IP spécifique sur TCP / IP. Maintenant, votre connexion à cette base de données MySQL est sécurisée.

Conclusion

C'est le moyen le plus simple de sécuriser vos connexions MySQL distantes avec TLS. Gardez à l'esprit que ce n'est pas la même chose que de sécuriser un client phpmyadmin sur TLS. C'est-ce que TLS et HTTP sont combinés, et vous oblige à sécuriser l'interface Web. La connexion entre le phpmyadmin, qui rend votre interface utilisateur Web, et la base de données peut encore être non cryptée, ce qui est bien tant qu'ils sont sur le même serveur.

Vous pouvez en savoir plus sur la connexion TLS, les CAS sous-jacents, les certificats et la gestion clé dans les documents officiels de MySQL.